@pikku/cli 0.12.83 → 0.12.86

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 (274) hide show
  1. package/console-app/assets/index-CSzCJzBb.css +1 -0
  2. package/console-app/assets/{index-CN_U0k_D.js → index-Cr3_cO3Z.js} +161 -150
  3. package/console-app/index.html +2 -2
  4. package/dist/.pikku/agent/pikku-agent-types.gen.d.ts +3 -2
  5. package/dist/.pikku/{http/pikku-http-wirings.gen.d.ts → auth/auth.types.d.ts} +1 -1
  6. package/dist/.pikku/auth/auth.types.js +5 -0
  7. package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +1 -1
  8. package/dist/.pikku/channel/pikku-channel-types.gen.js +1 -1
  9. package/dist/.pikku/cli/pikku-cli-channel.d.ts +4 -4
  10. package/dist/.pikku/cli/pikku-cli-channel.js +1 -1
  11. package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +1 -1
  12. package/dist/.pikku/cli/pikku-cli-client.gen.js +1 -1
  13. package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.d.ts +1 -1
  14. package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.js +1 -1
  15. package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.json +4 -0
  16. package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +1 -1
  17. package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
  18. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +1 -1
  19. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.json +4 -0
  20. package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +1 -1
  21. package/dist/.pikku/cli/pikku-cli-wirings.gen.js +1 -1
  22. package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
  23. package/dist/.pikku/cli/pikku-cli.gen.js +1 -1
  24. package/dist/.pikku/console/pikku-node-types.gen.d.ts +1 -1
  25. package/dist/.pikku/function/pikku-function-types.gen.d.ts +24 -14
  26. package/dist/.pikku/function/pikku-function-types.gen.js +1 -1
  27. package/dist/.pikku/function/pikku-functions-meta.gen.js +1 -1
  28. package/dist/.pikku/function/pikku-functions-meta.gen.json +45 -36
  29. package/dist/.pikku/function/pikku-functions.gen.js +3 -3
  30. package/dist/.pikku/http/pikku-http-types.gen.d.ts +1 -1
  31. package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
  32. package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +1 -1
  33. package/dist/.pikku/mcp/pikku-mcp-types.gen.js +1 -1
  34. package/dist/.pikku/pikku-bootstrap.gen.d.ts +1 -5
  35. package/dist/.pikku/pikku-bootstrap.gen.js +1 -5
  36. package/dist/.pikku/pikku-meta-service.gen.d.ts +1 -1
  37. package/dist/.pikku/pikku-meta-service.gen.js +1 -1
  38. package/dist/.pikku/pikku-services.gen.d.ts +2 -1
  39. package/dist/.pikku/pikku-services.gen.js +1 -0
  40. package/dist/.pikku/pikku-types.gen.d.ts +1 -1
  41. package/dist/.pikku/pikku-types.gen.js +1 -1
  42. package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +1 -1
  43. package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
  44. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +1 -1
  45. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.json +2 -2
  46. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +1 -1
  47. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
  48. package/dist/.pikku/schemas/register.gen.js +3 -7
  49. package/dist/.pikku/schemas/schemas/FabricLoginInput.schema.json +1 -1
  50. package/dist/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
  51. package/dist/.pikku/schemas/schemas/PikkuUserAdminFunctionsOutput.schema.json +1 -0
  52. package/dist/.pikku/scopes/pikku-scope-types.gen.d.ts +1 -1
  53. package/dist/.pikku/scopes/pikku-scope-types.gen.js +1 -1
  54. package/dist/.pikku/scopes/pikku-scopes.gen.d.ts +1 -1
  55. package/dist/.pikku/secrets/pikku-secret-types.gen.d.ts +1 -1
  56. package/dist/.pikku/secrets/pikku-secret-types.gen.js +1 -1
  57. package/dist/.pikku/secrets/pikku-secrets.gen.d.ts +1 -1
  58. package/dist/.pikku/secrets/pikku-secrets.gen.js +1 -1
  59. package/dist/.pikku/trigger/pikku-trigger-types.gen.d.ts +1 -1
  60. package/dist/.pikku/trigger/pikku-trigger-types.gen.js +1 -1
  61. package/dist/.pikku/variables/pikku-variable-types.gen.d.ts +1 -1
  62. package/dist/.pikku/variables/pikku-variable-types.gen.js +1 -1
  63. package/dist/.pikku/variables/pikku-variables.gen.d.ts +1 -1
  64. package/dist/.pikku/variables/pikku-variables.gen.js +1 -1
  65. package/dist/.pikku/workflow/meta/allWorkflow.gen.json +9 -3
  66. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +8 -2
  67. package/dist/.pikku/workflow/pikku-workflow-types.gen.js +1 -1
  68. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +1 -1
  69. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +1 -1
  70. package/dist/bin/pikku-bin.mjs +2 -2
  71. package/dist/src/fabric/fabric-commands.d.ts +56 -53
  72. package/dist/src/fabric/fabric-commands.js +4 -0
  73. package/dist/src/fabric/functions/add.function.d.ts +2 -2
  74. package/dist/src/fabric/functions/addon-verify.function.d.ts +2 -2
  75. package/dist/src/fabric/functions/db-schema.function.d.ts +2 -2
  76. package/dist/src/fabric/functions/deploy-list.function.d.ts +2 -2
  77. package/dist/src/fabric/functions/deploy-units.function.d.ts +2 -2
  78. package/dist/src/fabric/functions/deploy.function.d.ts +4 -4
  79. package/dist/src/fabric/functions/domains-add.function.d.ts +2 -2
  80. package/dist/src/fabric/functions/domains-list.function.d.ts +2 -2
  81. package/dist/src/fabric/functions/domains-remove.function.d.ts +2 -2
  82. package/dist/src/fabric/functions/errors.function.d.ts +2 -2
  83. package/dist/src/fabric/functions/init.function.d.ts +2 -2
  84. package/dist/src/fabric/functions/link.function.d.ts +2 -2
  85. package/dist/src/fabric/functions/llm-key.function.d.ts +6 -6
  86. package/dist/src/fabric/functions/login.function.d.ts +6 -2
  87. package/dist/src/fabric/functions/login.function.js +45 -4
  88. package/dist/src/fabric/functions/logs.function.d.ts +2 -2
  89. package/dist/src/fabric/functions/metrics.function.d.ts +2 -2
  90. package/dist/src/fabric/functions/publish.function.d.ts +2 -2
  91. package/dist/src/fabric/functions/rollback.function.d.ts +2 -2
  92. package/dist/src/fabric/functions/secrets-list.function.d.ts +2 -2
  93. package/dist/src/fabric/functions/secrets-set.function.d.ts +2 -2
  94. package/dist/src/fabric/functions/smoke.function.d.ts +2 -2
  95. package/dist/src/fabric/functions/status.function.d.ts +2 -2
  96. package/dist/src/fabric/functions/trace.function.d.ts +2 -2
  97. package/dist/src/fabric/functions/validate.function.d.ts +2 -2
  98. package/dist/src/functions/commands/all.d.ts +1 -1
  99. package/dist/src/functions/commands/audit.d.ts +1 -1
  100. package/dist/src/functions/commands/binary.d.ts +2 -2
  101. package/dist/src/functions/commands/bootstrap.d.ts +1 -1
  102. package/dist/src/functions/commands/db-audit.d.ts +1 -1
  103. package/dist/src/functions/commands/db-generate.d.ts +1 -1
  104. package/dist/src/functions/commands/db-migrate.d.ts +1 -1
  105. package/dist/src/functions/commands/db-reset.d.ts +1 -1
  106. package/dist/src/functions/commands/db-seed.d.ts +1 -1
  107. package/dist/src/functions/commands/deploy-apply.d.ts +2 -2
  108. package/dist/src/functions/commands/deploy-info.d.ts +1 -1
  109. package/dist/src/functions/commands/deploy-plan.d.ts +2 -2
  110. package/dist/src/functions/commands/dev.d.ts +2 -2
  111. package/dist/src/functions/commands/emails-init.d.ts +1 -1
  112. package/dist/src/functions/commands/enable.d.ts +8 -8
  113. package/dist/src/functions/commands/import-n8n.d.ts +2 -2
  114. package/dist/src/functions/commands/info.d.ts +4 -4
  115. package/dist/src/functions/commands/login.d.ts +5 -5
  116. package/dist/src/functions/commands/meta.d.ts +25 -25
  117. package/dist/src/functions/commands/new-addon.d.ts +13 -2
  118. package/dist/src/functions/commands/new-addon.js +38 -4
  119. package/dist/src/functions/commands/new-function.d.ts +2 -2
  120. package/dist/src/functions/commands/new-middleware.d.ts +2 -2
  121. package/dist/src/functions/commands/new-permission.d.ts +2 -2
  122. package/dist/src/functions/commands/new-wiring.d.ts +2 -2
  123. package/dist/src/functions/commands/pikku-command-bootstrap.d.ts +1 -1
  124. package/dist/src/functions/commands/pikku-command-summary.d.ts +1 -1
  125. package/dist/src/functions/commands/scenario.d.ts +3 -3
  126. package/dist/src/functions/commands/scopes-audit.d.ts +1 -1
  127. package/dist/src/functions/commands/scopes-prune.d.ts +2 -2
  128. package/dist/src/functions/commands/serve.d.ts +2 -2
  129. package/dist/src/functions/commands/skills.d.ts +4 -4
  130. package/dist/src/functions/commands/versions-check.d.ts +1 -1
  131. package/dist/src/functions/commands/versions-init.d.ts +2 -2
  132. package/dist/src/functions/commands/versions-update.d.ts +1 -1
  133. package/dist/src/functions/commands/watch.d.ts +2 -2
  134. package/dist/src/functions/commands/workspace-validate.d.ts +2 -2
  135. package/dist/src/functions/runtimes/fetch/index.d.ts +1 -1
  136. package/dist/src/functions/runtimes/nextjs/pikku-command-nextjs.d.ts +1 -1
  137. package/dist/src/functions/runtimes/tanstack-start/pikku-command-tanstack-start.d.ts +1 -1
  138. package/dist/src/functions/runtimes/websocket/pikku-command-websocket-typed.d.ts +1 -1
  139. package/dist/src/functions/wirings/ai-agent/pikku-command-ai-agent-types.d.ts +1 -1
  140. package/dist/src/functions/wirings/ai-agent/pikku-command-ai-agent-types.js +3 -2
  141. package/dist/src/functions/wirings/ai-agent/pikku-command-ai-agent.d.ts +1 -1
  142. package/dist/src/functions/wirings/ai-agent/pikku-command-public-agent.d.ts +1 -1
  143. package/dist/src/functions/wirings/ai-agent/pikku-command-public-agent.js +6 -2
  144. package/dist/src/functions/wirings/ai-agent/serialize-ai-agent-types.d.ts +1 -1
  145. package/dist/src/functions/wirings/ai-agent/serialize-ai-agent-types.js +3 -2
  146. package/dist/src/functions/wirings/ai-agent/serialize-public-agent.d.ts +5 -1
  147. package/dist/src/functions/wirings/ai-agent/serialize-public-agent.js +112 -40
  148. package/dist/src/functions/wirings/auth/pikku-command-auth.d.ts +2 -2
  149. package/dist/src/functions/wirings/auth/pikku-command-auth.js +4 -0
  150. package/dist/src/functions/wirings/channels/pikku-channels.d.ts +1 -1
  151. package/dist/src/functions/wirings/channels/pikku-command-channel-types.d.ts +1 -1
  152. package/dist/src/functions/wirings/channels/pikku-command-channels-map.d.ts +1 -1
  153. package/dist/src/functions/wirings/channels/pikku-command-channels.d.ts +1 -1
  154. package/dist/src/functions/wirings/cli/pikku-command-cli-entry.d.ts +1 -1
  155. package/dist/src/functions/wirings/cli/pikku-command-cli-types.d.ts +1 -1
  156. package/dist/src/functions/wirings/cli/pikku-command-cli.d.ts +1 -1
  157. package/dist/src/functions/wirings/console/pikku-command-console-functions.d.ts +1 -1
  158. package/dist/src/functions/wirings/console/pikku-command-console-functions.js +6 -2
  159. package/dist/src/functions/wirings/console/pikku-command-node-types.d.ts +1 -1
  160. package/dist/src/functions/wirings/console/pikku-command-nodes-meta.d.ts +1 -1
  161. package/dist/src/functions/wirings/console/serialize-console-functions.d.ts +5 -1
  162. package/dist/src/functions/wirings/console/serialize-console-functions.js +55 -23
  163. package/dist/src/functions/wirings/credentials/pikku-command-credentials.d.ts +1 -1
  164. package/dist/src/functions/wirings/emails/pikku-command-emails.d.ts +1 -1
  165. package/dist/src/functions/wirings/functions/pikku-command-addon-types.d.ts +1 -1
  166. package/dist/src/functions/wirings/functions/pikku-command-function-types-split.d.ts +2 -2
  167. package/dist/src/functions/wirings/functions/pikku-command-function-types.d.ts +2 -2
  168. package/dist/src/functions/wirings/functions/pikku-command-functions.d.ts +1 -1
  169. package/dist/src/functions/wirings/functions/pikku-command-services.d.ts +2 -2
  170. package/dist/src/functions/wirings/functions/pikku-command-services.js +9 -2
  171. package/dist/src/functions/wirings/functions/schemas.d.ts +1 -1
  172. package/dist/src/functions/wirings/functions/schemas.js +10 -1
  173. package/dist/src/functions/wirings/functions/serialize-function-types.js +23 -12
  174. package/dist/src/functions/wirings/gateway/pikku-command-gateway.d.ts +1 -1
  175. package/dist/src/functions/wirings/graph/pikku-command-graph-wirings.d.ts +1 -1
  176. package/dist/src/functions/wirings/graph/pikku-command-graph-wirings.js +2 -0
  177. package/dist/src/functions/wirings/http/pikku-command-http-map.d.ts +1 -1
  178. package/dist/src/functions/wirings/http/pikku-command-http-routes.d.ts +1 -1
  179. package/dist/src/functions/wirings/http/pikku-command-http-types.d.ts +1 -1
  180. package/dist/src/functions/wirings/http/pikku-command-openapi.d.ts +1 -1
  181. package/dist/src/functions/wirings/http/pikku-http-routes.d.ts +1 -1
  182. package/dist/src/functions/wirings/mcp/pikku-command-mcp-json.d.ts +1 -1
  183. package/dist/src/functions/wirings/mcp/pikku-command-mcp-types.d.ts +1 -1
  184. package/dist/src/functions/wirings/mcp/pikku-command-mcp.d.ts +1 -1
  185. package/dist/src/functions/wirings/middleware/pikku-command-middleware.d.ts +1 -1
  186. package/dist/src/functions/wirings/package/pikku-command-package-types.d.ts +3 -3
  187. package/dist/src/functions/wirings/package/pikku-command-package.d.ts +1 -1
  188. package/dist/src/functions/wirings/permissions/pikku-command-permissions.d.ts +1 -1
  189. package/dist/src/functions/wirings/queue/pikku-command-queue-map.d.ts +1 -1
  190. package/dist/src/functions/wirings/queue/pikku-command-queue-service.d.ts +1 -1
  191. package/dist/src/functions/wirings/queue/pikku-command-queue-types.d.ts +1 -1
  192. package/dist/src/functions/wirings/queue/pikku-command-queue.d.ts +1 -1
  193. package/dist/src/functions/wirings/queue/pikku-queue-map.d.ts +1 -1
  194. package/dist/src/functions/wirings/queue/pikku-queue.d.ts +1 -1
  195. package/dist/src/functions/wirings/realtime/pikku-command-events-scaffold.d.ts +1 -1
  196. package/dist/src/functions/wirings/realtime/pikku-command-events-scaffold.js +8 -2
  197. package/dist/src/functions/wirings/realtime/pikku-command-realtime.d.ts +1 -1
  198. package/dist/src/functions/wirings/realtime/serialize-events-scaffold.d.ts +5 -4
  199. package/dist/src/functions/wirings/realtime/serialize-events-scaffold.js +17 -7
  200. package/dist/src/functions/wirings/rpc/pikku-command-public-rpc.d.ts +1 -1
  201. package/dist/src/functions/wirings/rpc/pikku-command-public-rpc.js +6 -2
  202. package/dist/src/functions/wirings/rpc/pikku-command-react-query.d.ts +1 -1
  203. package/dist/src/functions/wirings/rpc/pikku-command-remote-rpc.d.ts +1 -1
  204. package/dist/src/functions/wirings/rpc/pikku-command-remote-rpc.js +6 -2
  205. package/dist/src/functions/wirings/rpc/pikku-command-rpc-client.d.ts +1 -1
  206. package/dist/src/functions/wirings/rpc/pikku-command-rpc-map.d.ts +3 -3
  207. package/dist/src/functions/wirings/rpc/pikku-command-rpc.d.ts +1 -1
  208. package/dist/src/functions/wirings/rpc/serialize-public-rpc.d.ts +5 -1
  209. package/dist/src/functions/wirings/rpc/serialize-public-rpc.js +16 -5
  210. package/dist/src/functions/wirings/rpc/serialize-remote-rpc.d.ts +5 -1
  211. package/dist/src/functions/wirings/rpc/serialize-remote-rpc.js +16 -5
  212. package/dist/src/functions/wirings/scenarios/pikku-command-scenario-functions.d.ts +1 -1
  213. package/dist/src/functions/wirings/scenarios/pikku-command-scenario-functions.js +8 -2
  214. package/dist/src/functions/wirings/scenarios/serialize-scenario-functions.d.ts +5 -1
  215. package/dist/src/functions/wirings/scenarios/serialize-scenario-functions.js +22 -16
  216. package/dist/src/functions/wirings/scheduler/pikku-command-scheduler-types.d.ts +1 -1
  217. package/dist/src/functions/wirings/scheduler/pikku-command-scheduler.d.ts +1 -1
  218. package/dist/src/functions/wirings/scopes/pikku-command-scopes.d.ts +2 -2
  219. package/dist/src/functions/wirings/secrets/pikku-command-secrets.d.ts +1 -1
  220. package/dist/src/functions/wirings/triggers/pikku-command-trigger-types.d.ts +2 -2
  221. package/dist/src/functions/wirings/triggers/pikku-command-trigger.d.ts +1 -1
  222. package/dist/src/functions/wirings/user-admin/pikku-command-user-admin-functions.d.ts +1 -0
  223. package/dist/src/functions/wirings/user-admin/pikku-command-user-admin-functions.js +49 -0
  224. package/dist/src/functions/wirings/user-admin/serialize-user-admin-functions.d.ts +24 -0
  225. package/dist/src/functions/wirings/user-admin/serialize-user-admin-functions.js +283 -0
  226. package/dist/src/functions/wirings/variables/pikku-command-variables.d.ts +1 -1
  227. package/dist/src/functions/wirings/webhook/pikku-command-webhook.d.ts +1 -1
  228. package/dist/src/functions/wirings/webhook/pikku-command-webhook.js +6 -2
  229. package/dist/src/functions/wirings/webhook/serialize-webhook.d.ts +5 -8
  230. package/dist/src/functions/wirings/webhook/serialize-webhook.js +19 -12
  231. package/dist/src/functions/wirings/workflow/pikku-command-workflow-routes.d.ts +1 -1
  232. package/dist/src/functions/wirings/workflow/pikku-command-workflow-routes.js +8 -2
  233. package/dist/src/functions/wirings/workflow/pikku-command-workflow.d.ts +1 -1
  234. package/dist/src/functions/wirings/workflow/pikku-command-workflow.js +2 -1
  235. package/dist/src/functions/wirings/workflow/serialize-workflow-routes.d.ts +5 -1
  236. package/dist/src/functions/wirings/workflow/serialize-workflow-routes.js +61 -31
  237. package/dist/src/functions/wirings/workflow/serialize-workflow-types.d.ts +1 -1
  238. package/dist/src/functions/wirings/workflow/serialize-workflow-types.js +8 -2
  239. package/dist/src/functions/workflows/all.workflow.js +8 -0
  240. package/dist/src/utils/pikku-cli-config.js +40 -10
  241. package/dist/src/utils/remove-legacy-scaffold-file.d.ts +3 -0
  242. package/dist/src/utils/remove-legacy-scaffold-file.js +43 -0
  243. package/dist/src/utils/serialize-schemas.js +57 -2
  244. package/dist/tsconfig.tsbuildinfo +1 -1
  245. package/package.json +6 -6
  246. package/skills/pikku-addon/SKILL.md +1 -0
  247. package/skills/pikku-ai-agent/SKILL.md +5 -4
  248. package/skills/pikku-ai-vercel/SKILL.md +1 -0
  249. package/skills/pikku-better-auth/SKILL.md +57 -0
  250. package/skills/pikku-concepts/SKILL.md +1 -1
  251. package/skills/pikku-concepts/references/concept-mapping.md +11 -9
  252. package/skills/pikku-emails/SKILL.md +1 -0
  253. package/skills/pikku-fabric-debug/SKILL.md +112 -0
  254. package/skills/pikku-permissions/SKILL.md +8 -8
  255. package/skills/pikku-react/SKILL.md +32 -3
  256. package/skills/pikku-react-query/SKILL.md +38 -1
  257. package/skills/pikku-realtime/SKILL.md +1 -1
  258. package/skills/pikku-security/SKILL.md +3 -3
  259. package/skills/pikku-services/SKILL.md +34 -0
  260. package/skills/pikku-template-clone/SKILL.md +1 -0
  261. package/cli.schema.json +0 -1
  262. package/console-app/assets/index-CpHRlBt-.css +0 -1
  263. package/dist/.pikku/http/pikku-http-wirings-meta.gen.d.ts +0 -1
  264. package/dist/.pikku/http/pikku-http-wirings-meta.gen.js +0 -6
  265. package/dist/.pikku/http/pikku-http-wirings-meta.gen.json +0 -26
  266. package/dist/.pikku/http/pikku-http-wirings.gen.js +0 -5
  267. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.d.ts +0 -1
  268. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +0 -6
  269. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.json +0 -10
  270. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +0 -4
  271. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +0 -5
  272. package/dist/.pikku/schemas/schemas/RemoteRPCHandlerInput.schema.json +0 -1
  273. package/dist/src/scaffold/rpc-remote.gen.d.ts +0 -10
  274. package/dist/src/scaffold/rpc-remote.gen.js +0 -27
@@ -1,56 +1,132 @@
1
1
  export const serializePublicAgent = (pathToPikkuTypes, requireAuth = true, globalHTTPPrefix = '') => {
2
2
  const authFlag = requireAuth ? 'true' : 'false';
3
- return `import { MissingServiceError } from '@pikku/core/errors'
4
- import { pikkuSessionlessFunc, defineHTTPRoutes, wireHTTPRoutes } from '${pathToPikkuTypes}'
3
+ const schemas = `/**
4
+ * Auto-generated public agent schemas
5
+ * Do not edit manually - regenerate with 'npx pikku'
6
+ */
7
+ import { z } from 'zod'
5
8
 
6
- export const agentCaller = pikkuSessionlessFunc<
7
- { agentName: string; message: string; threadId: string; resourceId: string },
8
- unknown
9
- >({
9
+ export const Attachment = z.object({
10
+ type: z.enum(['image', 'file']),
11
+ data: z.string().optional(),
12
+ url: z.string().optional(),
13
+ mediaType: z.string().optional(),
14
+ filename: z.string().optional(),
15
+ })
16
+
17
+ export const AgentCall = z.object({
18
+ agentName: z.string(),
19
+ message: z.string(),
20
+ threadId: z.string(),
21
+ resourceId: z.string(),
22
+ attachments: z.array(Attachment).optional(),
23
+ model: z.string().optional(),
24
+ temperature: z.number().optional(),
25
+ context: z.string().optional(),
26
+ })
27
+
28
+ export const AgentApproval = z.object({
29
+ agentName: z.string(),
30
+ runId: z.string(),
31
+ approvals: z.array(
32
+ z.object({ toolCallId: z.string(), approved: z.boolean() })
33
+ ),
34
+ })
35
+
36
+ export const AgentResume = z.object({
37
+ agentName: z.string(),
38
+ runId: z.string(),
39
+ toolCallId: z.string(),
40
+ approved: z.boolean(),
41
+ })
42
+
43
+ export const ThreadsQuery = z.object({
44
+ agentName: z.string().optional(),
45
+ resourceId: z.string().optional(),
46
+ limit: z.number().optional(),
47
+ offset: z.number().optional(),
48
+ })
49
+
50
+ export const ThreadRef = z.object({
51
+ threadId: z.string(),
52
+ resourceId: z.string().optional(),
53
+ })
54
+
55
+ export const ThreadDeleted = z.object({ deleted: z.boolean() })
56
+ `;
57
+ const functions = `import { canAccessThread, threadOwnerConstraint } from '@pikku/core/ai-agent'
58
+ import { pikkuSessionlessFunc, pikkuPermission, defineHTTPRoutes, wireHTTPRoutes } from '${pathToPikkuTypes}'
59
+ import {
60
+ AgentCall,
61
+ AgentApproval,
62
+ AgentResume,
63
+ ThreadsQuery,
64
+ ThreadRef,
65
+ ThreadDeleted,
66
+ } from './agent.schemas.gen.js'
67
+
68
+ /**
69
+ * Thread reads are keyed by a caller-supplied \`threadId\`, so ownership cannot
70
+ * come from the request — it is derived from the session and checked against
71
+ * the stored thread's resourceId.
72
+ */
73
+ export const isThreadOwner = pikkuPermission<{ threadId: string }>(
74
+ async ({ agentRunService }, { threadId }, { session }) => {
75
+ const thread = await agentRunService.getThread(threadId)
76
+ // A missing thread is denied rather than 404'd so it is indistinguishable
77
+ // from one owned by someone else — no existence oracle.
78
+ if (!thread) return false
79
+ return canAccessThread(thread.resourceId, session)
80
+ }
81
+ )
82
+
83
+ export const agentCaller = pikkuSessionlessFunc({
10
84
  tags: ['pikku'],
11
85
  auth: ${authFlag},
86
+ input: AgentCall,
12
87
  func: async (_services, data, { rpc }) => {
13
88
  return await rpc.agent.run(data.agentName as any, {
14
89
  message: data.message,
15
90
  threadId: data.threadId,
16
91
  resourceId: data.resourceId,
92
+ ...(data.attachments ? { attachments: data.attachments } : {}),
93
+ ...(data.model ? { model: data.model } : {}),
94
+ ...(data.temperature !== undefined ? { temperature: data.temperature } : {}),
95
+ ...(data.context ? { context: data.context } : {}),
17
96
  })
18
97
  },
19
98
  })
20
99
 
21
- export const agentStreamCaller = pikkuSessionlessFunc<
22
- { agentName: string; message: string; threadId: string; resourceId: string; context?: string },
23
- void
24
- >({
100
+ export const agentStreamCaller = pikkuSessionlessFunc({
25
101
  tags: ['pikku'],
26
102
  auth: ${authFlag},
103
+ input: AgentCall,
27
104
  func: async (_services, data, { rpc }) => {
28
105
  await rpc.agent.stream(data.agentName as any, {
29
106
  message: data.message,
30
107
  threadId: data.threadId,
31
108
  resourceId: data.resourceId,
109
+ ...(data.attachments ? { attachments: data.attachments } : {}),
110
+ ...(data.model ? { model: data.model } : {}),
111
+ ...(data.temperature !== undefined ? { temperature: data.temperature } : {}),
32
112
  ...(data.context ? { context: data.context } : {}),
33
113
  })
34
114
  },
35
115
  })
36
116
 
37
- export const agentApproveCaller = pikkuSessionlessFunc<
38
- { agentName: string; runId: string; approvals: { toolCallId: string; approved: boolean }[] },
39
- unknown
40
- >({
117
+ export const agentApproveCaller = pikkuSessionlessFunc({
41
118
  tags: ['pikku'],
42
119
  auth: ${authFlag},
120
+ input: AgentApproval,
43
121
  func: async (_services, { runId, approvals, agentName }, { rpc }) => {
44
122
  return await rpc.agent.approve(runId, approvals, agentName)
45
123
  },
46
124
  })
47
125
 
48
- export const agentResumeCaller = pikkuSessionlessFunc<
49
- { agentName: string; runId: string; toolCallId: string; approved: boolean },
50
- void
51
- >({
126
+ export const agentResumeCaller = pikkuSessionlessFunc({
52
127
  tags: ['pikku'],
53
128
  auth: ${authFlag},
129
+ input: AgentResume,
54
130
  func: async (_services, data, { rpc }) => {
55
131
  await rpc.agent.resume(data.runId, {
56
132
  toolCallId: data.toolCallId,
@@ -59,71 +135,66 @@ export const agentResumeCaller = pikkuSessionlessFunc<
59
135
  },
60
136
  })
61
137
 
62
- export const getAgentThreads = pikkuSessionlessFunc<
63
- { agentName?: string; resourceId?: string; limit?: number; offset?: number },
64
- any[]
65
- >({
138
+ export const getAgentThreads = pikkuSessionlessFunc({
66
139
  tags: ['pikku', 'pikku:agent'],
140
+ input: ThreadsQuery,
67
141
  title: 'Get Agent Threads',
68
142
  description:
69
- 'Returns a list of AI agent threads from storage. Accepts optional filters: agentName, resourceId, limit, and offset for pagination.',
143
+ 'Returns the caller\\'s AI agent threads from storage. Accepts optional filters: agentName, resourceId, limit, and offset for pagination.',
70
144
  expose: true,
71
145
  auth: ${authFlag},
72
- func: async ({ agentRunService }, input) => {
73
- if (!agentRunService) throw new MissingServiceError('agentRunService is not available')
146
+ func: async ({ agentRunService }, input, { session }) => {
147
+ // \`owners\` is an authorization constraint derived from the session, never
148
+ // from input — \`resourceId\` remains a caller-supplied filter within it.
74
149
  return await agentRunService.listThreads({
75
150
  agentName: input?.agentName,
76
151
  resourceId: input?.resourceId,
152
+ owners: threadOwnerConstraint(session),
77
153
  limit: input?.limit,
78
154
  offset: input?.offset,
79
155
  })
80
156
  },
81
157
  })
82
158
 
83
- export const getAgentThreadMessages = pikkuSessionlessFunc<
84
- { threadId: string; resourceId?: string },
85
- any[]
86
- >({
159
+ export const getAgentThreadMessages = pikkuSessionlessFunc({
87
160
  tags: ['pikku', 'pikku:agent'],
161
+ input: ThreadRef,
88
162
  title: 'Get Agent Thread Messages',
89
163
  description:
90
164
  'Returns all messages for a given AI agent thread, ordered by creation time.',
91
165
  expose: true,
92
166
  auth: ${authFlag},
167
+ permissions: { owner: isThreadOwner },
93
168
  func: async ({ agentRunService }, input) => {
94
- if (!agentRunService) throw new MissingServiceError('agentRunService is not available')
95
169
  return await agentRunService.getThreadMessages(input.threadId)
96
170
  },
97
171
  })
98
172
 
99
- export const getAgentThreadRuns = pikkuSessionlessFunc<
100
- { threadId: string; resourceId?: string },
101
- any[]
102
- >({
173
+ export const getAgentThreadRuns = pikkuSessionlessFunc({
103
174
  tags: ['pikku', 'pikku:agent'],
175
+ input: ThreadRef,
104
176
  title: 'Get Agent Thread Runs',
105
177
  description:
106
178
  'Returns the run history for a given AI agent thread, ordered by creation time.',
107
179
  expose: true,
108
180
  auth: ${authFlag},
181
+ permissions: { owner: isThreadOwner },
109
182
  func: async ({ agentRunService }, input) => {
110
- if (!agentRunService) throw new MissingServiceError('agentRunService is not available')
111
183
  return await agentRunService.getThreadRuns(input.threadId)
112
184
  },
113
185
  })
114
186
 
115
- export const deleteAgentThread = pikkuSessionlessFunc<
116
- { threadId: string; resourceId?: string },
117
- { deleted: boolean }
118
- >({
187
+ export const deleteAgentThread = pikkuSessionlessFunc({
119
188
  tags: ['pikku', 'pikku:agent'],
189
+ input: ThreadRef,
190
+ output: ThreadDeleted,
120
191
  title: 'Delete Agent Thread',
121
192
  description:
122
193
  'Deletes an AI agent thread and all of its persisted state.',
123
194
  expose: true,
124
195
  auth: ${authFlag},
196
+ permissions: { owner: isThreadOwner },
125
197
  func: async ({ agentRunService }, input) => {
126
- if (!agentRunService) throw new MissingServiceError('agentRunService is not available')
127
198
  const deleted = await agentRunService.deleteThread(input.threadId)
128
199
  return { deleted }
129
200
  },
@@ -160,4 +231,5 @@ export const agentRoutes = defineHTTPRoutes({
160
231
 
161
232
  wireHTTPRoutes({ routes: { agent: agentRoutes } })
162
233
  `;
234
+ return { schemas, functions };
163
235
  };
@@ -2,6 +2,6 @@ export declare const pikkuAuth: import("#pikku").PikkuFunctionConfig<{
2
2
  bootstrap?: boolean;
3
3
  }, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{
4
4
  bootstrap?: boolean;
5
- }, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{
5
+ }, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<{
6
6
  bootstrap?: boolean;
7
- }, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
7
+ }, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -4,6 +4,7 @@ import { rm } from 'node:fs/promises';
4
4
  import { pikkuSessionlessFunc } from '#pikku';
5
5
  import { writeFileInDir } from '../../../utils/file-writer.js';
6
6
  import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
7
+ import { removeLegacyScaffoldFile } from '../../../utils/remove-legacy-scaffold-file.js';
7
8
  import { serializeAuthGen } from './serialize-auth-gen.js';
8
9
  import { serializeAuthTypes, serializeAuthTypesBootstrap, } from './serialize-auth-types.js';
9
10
  import { serializeAuthMeta } from './serialize-auth-meta.js';
@@ -49,6 +50,9 @@ export const pikkuAuth = pikkuSessionlessFunc({
49
50
  else if (existsSync(middlewareFile)) {
50
51
  await rm(middlewareFile, { force: true });
51
52
  }
53
+ for (const file of [authFile, secretsFile, middlewareFile]) {
54
+ await removeLegacyScaffoldFile(file);
55
+ }
52
56
  // Static metadata of the enabled providers/plugins for the console SSO page,
53
57
  // following the `*-meta.gen.json` convention. Read at runtime by the console
54
58
  // getAuthProviders function instead of a runtime registry.
@@ -1 +1 @@
1
- export declare const pikkuChannels: 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
+ export declare const pikkuChannels: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuChannelTypes: 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
+ export declare const pikkuChannelTypes: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuChannelsMap: 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
+ export declare const pikkuChannelsMap: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuCommandChannels: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const pikkuCommandChannels: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuCLIEntry: import("#pikku").PikkuFunctionConfig<void, boolean, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, boolean, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const pikkuCLIEntry: import("#pikku").PikkuFunctionConfig<void, boolean, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1,5 +1,5 @@
1
1
  type CLITypesCommandInput = {
2
2
  bootstrap?: boolean;
3
3
  };
4
- export declare const pikkuCLITypes: import("#pikku").PikkuFunctionConfig<CLITypesCommandInput, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<CLITypesCommandInput, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<CLITypesCommandInput, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
4
+ export declare const pikkuCLITypes: import("#pikku").PikkuFunctionConfig<CLITypesCommandInput, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<CLITypesCommandInput, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<CLITypesCommandInput, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
5
5
  export {};
@@ -1 +1 @@
1
- export declare const pikkuCLI: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const pikkuCLI: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuConsoleFunctions: import("#pikku").PikkuFunctionConfig<void, boolean, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, boolean, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const pikkuConsoleFunctions: import("#pikku").PikkuFunctionConfig<void, boolean, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -3,6 +3,7 @@ import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
3
3
  import { writeFileInDir } from '../../../utils/file-writer.js';
4
4
  import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
5
5
  import { projectDeclaresBetterAuth } from '../../../utils/detect-better-auth.js';
6
+ import { removeLegacyScaffoldFile } from '../../../utils/remove-legacy-scaffold-file.js';
6
7
  import { serializeConsoleFunctions } from './serialize-console-functions.js';
7
8
  export const pikkuConsoleFunctions = pikkuSessionlessFunc({
8
9
  func: async ({ logger, config, variables }) => {
@@ -10,7 +11,7 @@ export const pikkuConsoleFunctions = pikkuSessionlessFunc({
10
11
  if (deployCodegenFlag === '1') {
11
12
  return false;
12
13
  }
13
- if (config.scaffold?.console) {
14
+ if (config.scaffold?.console && config.consoleSchemasFile) {
14
15
  // Every console RPC now requires an authenticated session (the console is
15
16
  // an admin surface), so scaffolding it without an auth strategy produces a
16
17
  // console that 403s on every call. Better Auth is the supported strategy —
@@ -25,7 +26,10 @@ export const pikkuConsoleFunctions = pikkuSessionlessFunc({
25
26
  }
26
27
  const pathToPikkuTypes = getFileImportRelativePath(config.consoleFunctionsFile, config.typesDeclarationFile, config.packageMappings);
27
28
  const pathToAgentTypes = getFileImportRelativePath(config.consoleFunctionsFile, config.agentTypesFile, config.packageMappings);
28
- await writeFileInDir(logger, config.consoleFunctionsFile, serializeConsoleFunctions(pathToPikkuTypes, pathToAgentTypes, config.globalHTTPPrefix || ''));
29
+ const { schemas, functions } = serializeConsoleFunctions(pathToPikkuTypes, pathToAgentTypes, config.globalHTTPPrefix || '');
30
+ await writeFileInDir(logger, config.consoleSchemasFile, schemas);
31
+ await writeFileInDir(logger, config.consoleFunctionsFile, functions);
32
+ await removeLegacyScaffoldFile(config.consoleFunctionsFile);
29
33
  return true;
30
34
  }
31
35
  return false;
@@ -1 +1 @@
1
- export declare const pikkuNodeTypes: 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
+ export declare const pikkuNodeTypes: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuNodesMeta: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const pikkuNodesMeta: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1,5 @@
1
- export declare const serializeConsoleFunctions: (pathToPikkuTypes: string, _pathToAgentTypes: string, globalHTTPPrefix?: string) => string;
1
+ export interface ConsoleGenOutput {
2
+ schemas: string;
3
+ functions: string;
4
+ }
5
+ export declare const serializeConsoleFunctions: (pathToPikkuTypes: string, _pathToAgentTypes: string, globalHTTPPrefix?: string) => ConsoleGenOutput;
@@ -1,28 +1,62 @@
1
1
  export const serializeConsoleFunctions = (pathToPikkuTypes, _pathToAgentTypes, globalHTTPPrefix = '') => {
2
- return `import { pikkuFunc, defineHTTPRoutes, wireHTTPRoutes, ref, wireAddon } from '${pathToPikkuTypes}'
2
+ const schemas = `/**
3
+ * Auto-generated console function schemas
4
+ * Do not edit manually - regenerate with 'npx pikku'
5
+ */
6
+ import { z } from 'zod'
3
7
 
4
- export const pikkuConsoleSetSecret = pikkuFunc<{
5
- secretId: string
6
- value: unknown
7
- }, {
8
- success: boolean
9
- }>({
8
+ export const SecretRef = z.object({ secretId: z.string() })
9
+
10
+ export const SetSecret = z.object({
11
+ secretId: z.string(),
12
+ value: z.unknown(),
13
+ })
14
+
15
+ export const VariableRef = z.object({ variableId: z.string() })
16
+
17
+ export const SetVariable = z.object({
18
+ variableId: z.string(),
19
+ value: z.unknown(),
20
+ })
21
+
22
+ export const ValueResult = z.object({
23
+ exists: z.boolean(),
24
+ value: z.unknown().nullable(),
25
+ })
26
+
27
+ export const Exists = z.object({ exists: z.boolean() })
28
+
29
+ export const Success = z.object({ success: z.boolean() })
30
+ `;
31
+ const functions = `import { pikkuFunc, defineHTTPRoutes, wireHTTPRoutes, ref, wireAddon } from '${pathToPikkuTypes}'
32
+ import {
33
+ SecretRef,
34
+ SetSecret,
35
+ VariableRef,
36
+ SetVariable,
37
+ ValueResult,
38
+ Exists,
39
+ Success,
40
+ } from './console.schemas.gen.js'
41
+
42
+ export const pikkuConsoleSetSecret = pikkuFunc({
10
43
  tags: ['pikku'],
11
44
  description: 'Set the value of a secret',
12
45
  expose: true,
46
+ input: SetSecret,
47
+ output: Success,
13
48
  func: async ({ secrets }, { secretId, value }) => {
14
49
  await secrets.setSecret(secretId, value)
15
50
  return { success: true }
16
51
  },
17
52
  })
18
53
 
19
- export const pikkuConsoleGetVariable = pikkuFunc<
20
- { variableId: string },
21
- { exists: boolean; value: unknown | null }
22
- >({
54
+ export const pikkuConsoleGetVariable = pikkuFunc({
23
55
  tags: ['pikku'],
24
56
  description: 'Get the current value of a variable',
25
57
  expose: true,
58
+ input: VariableRef,
59
+ output: ValueResult,
26
60
  func: async ({ variables }, { variableId }) => {
27
61
  const exists = await variables.has(variableId)
28
62
  if (!exists) {
@@ -38,13 +72,12 @@ export const pikkuConsoleGetVariable = pikkuFunc<
38
72
  },
39
73
  })
40
74
 
41
- export const pikkuConsoleSetVariable = pikkuFunc<
42
- { variableId: string; value: unknown },
43
- { success: boolean }
44
- >({
75
+ export const pikkuConsoleSetVariable = pikkuFunc({
45
76
  tags: ['pikku'],
46
77
  description: 'Set the value of a variable',
47
78
  expose: true,
79
+ input: SetVariable,
80
+ output: Success,
48
81
  func: async ({ variables }, { variableId, value }) => {
49
82
  if (typeof value === 'string') {
50
83
  await variables.set(variableId, value)
@@ -55,26 +88,24 @@ export const pikkuConsoleSetVariable = pikkuFunc<
55
88
  },
56
89
  })
57
90
 
58
- export const pikkuConsoleHasSecret = pikkuFunc<
59
- { secretId: string },
60
- { exists: boolean }
61
- >({
91
+ export const pikkuConsoleHasSecret = pikkuFunc({
62
92
  tags: ['pikku'],
63
93
  description: 'Check if a secret exists without reading its value',
64
94
  expose: true,
95
+ input: SecretRef,
96
+ output: Exists,
65
97
  func: async ({ secrets }, { secretId }) => {
66
98
  const exists = await secrets.hasSecret(secretId)
67
99
  return { exists }
68
100
  },
69
101
  })
70
102
 
71
- export const pikkuConsoleGetSecret = pikkuFunc<
72
- { secretId: string },
73
- { exists: boolean; value: unknown | null }
74
- >({
103
+ export const pikkuConsoleGetSecret = pikkuFunc({
75
104
  tags: ['pikku'],
76
105
  description: 'Get the current value of a secret',
77
106
  expose: true,
107
+ input: SecretRef,
108
+ output: ValueResult,
78
109
  func: async ({ secrets }, { secretId }) => {
79
110
  const exists = await secrets.hasSecret(secretId)
80
111
  if (!exists) {
@@ -107,4 +138,5 @@ export const consoleRoutes = defineHTTPRoutes({
107
138
  wireAddon({ name: 'console', package: '@pikku/addon-console' })
108
139
  wireHTTPRoutes({ basePath: '${globalHTTPPrefix}', routes: { console: consoleRoutes } })
109
140
  `;
141
+ return { schemas, functions };
110
142
  };
@@ -1 +1 @@
1
- export declare const pikkuCredentials: 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
+ export declare const pikkuCredentials: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1,6 +1,6 @@
1
1
  import type { PikkuCLIConfig } from '../../../../types/config.js';
2
2
  import type { CLILogger } from '../../../services/cli-logger.service.js';
3
- export declare const pikkuEmails: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
3
+ export declare const pikkuEmails: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
4
4
  export declare function generateEmailsArtifacts(logger: CLILogger, config: Pick<PikkuCLIConfig, 'outDir'> & {
5
5
  emailTemplatesDir?: string;
6
6
  }): Promise<true | undefined>;
@@ -1,5 +1,5 @@
1
1
  type AddonTypesCommandInput = {
2
2
  bootstrap?: boolean;
3
3
  };
4
- export declare const pikkuAddonTypes: import("#pikku").PikkuFunctionConfig<AddonTypesCommandInput, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<AddonTypesCommandInput, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<AddonTypesCommandInput, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
4
+ export declare const pikkuAddonTypes: import("#pikku").PikkuFunctionConfig<AddonTypesCommandInput, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<AddonTypesCommandInput, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<AddonTypesCommandInput, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
5
5
  export {};
@@ -2,6 +2,6 @@ export declare const pikkuFunctionTypesSplit: import("#pikku").PikkuFunctionConf
2
2
  bootstrap?: boolean;
3
3
  }, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{
4
4
  bootstrap?: boolean;
5
- }, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{
5
+ }, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<{
6
6
  bootstrap?: boolean;
7
- }, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
7
+ }, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -2,6 +2,6 @@ export declare const pikkuFunctionTypes: import("#pikku").PikkuFunctionConfig<{
2
2
  bootstrap?: boolean;
3
3
  }, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{
4
4
  bootstrap?: boolean;
5
- }, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{
5
+ }, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<{
6
6
  bootstrap?: boolean;
7
- }, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
7
+ }, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuFunctions: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const pikkuFunctions: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1,2 +1,2 @@
1
- export declare const serializeServicesMap: (allSingletonServices: string[], allWireServices: string[], requiredServices: Set<string>, forceRequiredServices: string[] | undefined, servicesImport: string, wireServicesImport: string, addonRequiredParentServices?: string[], authInjected?: boolean) => string;
2
- export declare const pikkuServices: 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
+ export declare const serializeServicesMap: (allSingletonServices: string[], allWireServices: string[], requiredServices: Set<string>, forceRequiredServices: string[] | undefined, servicesImport: string, wireServicesImport: string, addonRequiredParentServices?: string[], authInjected?: boolean, agentScaffoldEnabled?: boolean) => string;
2
+ export declare const pikkuServices: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -3,7 +3,7 @@ import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
3
3
  import { checkRequiredTypes } from '../../../utils/check-required-types.js';
4
4
  import { writeFileInDir } from '../../../utils/file-writer.js';
5
5
  import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
6
- export const serializeServicesMap = (allSingletonServices, allWireServices, requiredServices, forceRequiredServices = [], servicesImport, wireServicesImport, addonRequiredParentServices = [], authInjected = false) => {
6
+ export const serializeServicesMap = (allSingletonServices, allWireServices, requiredServices, forceRequiredServices = [], servicesImport, wireServicesImport, addonRequiredParentServices = [], authInjected = false, agentScaffoldEnabled = false) => {
7
7
  // Use pre-aggregated services from inspector state
8
8
  // This includes services from:
9
9
  // - Wired functions (HTTP, channels, queues, schedulers, MCP, CLI, RPC)
@@ -40,6 +40,13 @@ export const serializeServicesMap = (allSingletonServices, allWireServices, requ
40
40
  if (authInjected) {
41
41
  usedServices.add('auth');
42
42
  }
43
+ // The generated public-agent permission (isThreadOwner) always destructures
44
+ // agentRunService, but agent.gen.ts is written after requiredServices is
45
+ // computed from inspecting hand-written sources, so the inspector never
46
+ // sees that usage — force it required whenever the agent scaffold runs.
47
+ if (agentScaffoldEnabled) {
48
+ usedServices.add('agentRunService');
49
+ }
43
50
  // Create singleton services map: all singleton services with true/false based on usage
44
51
  const singletonServicesMap = {};
45
52
  allSingletonServices.forEach((service) => {
@@ -111,7 +118,7 @@ export const pikkuServices = pikkuSessionlessFunc({
111
118
  }
112
119
  const servicesImport = `import type { ${singletonServicesType.type} } from '${getFileImportRelativePath(config.typesDeclarationFile, singletonServicesType.typePath, config.packageMappings)}'`;
113
120
  const wireServicesImport = `import type { ${wireServicesType.type} } from '${getFileImportRelativePath(config.typesDeclarationFile, wireServicesType.typePath, config.packageMappings)}'`;
114
- const servicesCode = serializeServicesMap(visitState.serviceAggregation.allSingletonServices, visitState.serviceAggregation.allWireServices, visitState.serviceAggregation.requiredServices, config.forceRequiredServices, servicesImport, wireServicesImport, config.addonName ? visitState.addonRequiredParentServices : [], Boolean(visitState.auth?.definition));
121
+ const servicesCode = serializeServicesMap(visitState.serviceAggregation.allSingletonServices, visitState.serviceAggregation.allWireServices, visitState.serviceAggregation.requiredServices, config.forceRequiredServices, servicesImport, wireServicesImport, config.addonName ? visitState.addonRequiredParentServices : [], Boolean(visitState.auth?.definition), Boolean(config.scaffold?.agent));
115
122
  await writeFileInDir(logger, config.servicesFile, servicesCode);
116
123
  },
117
124
  middleware: [
@@ -1 +1 @@
1
- export declare const pikkuSchemas: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const pikkuSchemas: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -4,7 +4,16 @@ import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-
4
4
  export const pikkuSchemas = pikkuSessionlessFunc({
5
5
  func: async ({ logger, config, getInspectorState }) => {
6
6
  const visitState = await getInspectorState();
7
- if (Object.keys(visitState.schemas).length === 0) {
7
+ // Bodies missing while functions still DECLARE schemas means the inspection pass
8
+ // was partial. Writing from it would empty register.gen.ts and delete the files
9
+ // behind schemas that are still required — unregistering the whole app off a bad
10
+ // read. Leave the previous output alone.
11
+ //
12
+ // Zero REQUIRED schemas is a different thing entirely and must still be written:
13
+ // that is a project whose last schema was removed, and it is the case where the
14
+ // files left by earlier runs have to be cleared.
15
+ if (visitState.requiredSchemas.size > 0 &&
16
+ Object.keys(visitState.schemas).length === 0) {
8
17
  return undefined;
9
18
  }
10
19
  await saveSchemas(logger, config.schemaDirectory, visitState.schemas, visitState.requiredSchemas, config.schema?.supportsImportAttributes ?? true, config.addonName || null);