@pikku/addon-console 0.12.41 → 0.12.43

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 (983) hide show
  1. package/CHANGELOG.md +2002 -0
  2. package/dist/.pikku/addon/agent/index.d.ts +8 -0
  3. package/dist/.pikku/addon/agent/index.d.ts.map +1 -0
  4. package/dist/.pikku/addon/agent/index.js +8 -0
  5. package/dist/.pikku/addon/agent/index.js.map +1 -0
  6. package/dist/.pikku/addon/agent/pikku-agent-map.gen.d.ts +4 -0
  7. package/dist/.pikku/addon/agent/pikku-agent-types.gen.d.ts +54 -0
  8. package/dist/.pikku/addon/agent/pikku-agent-types.gen.d.ts.map +1 -0
  9. package/dist/.pikku/addon/agent/pikku-agent-types.gen.js +20 -0
  10. package/dist/.pikku/addon/agent/pikku-agent-types.gen.js.map +1 -0
  11. package/dist/.pikku/addon/agent/pikku-model-aliases.gen.d.ts +2 -0
  12. package/dist/.pikku/addon/agent/pikku-model-aliases.gen.d.ts.map +1 -0
  13. package/dist/.pikku/addon/agent/pikku-model-aliases.gen.js +6 -0
  14. package/dist/.pikku/addon/agent/pikku-model-aliases.gen.js.map +1 -0
  15. package/dist/.pikku/addon/agent/pikku-scorer-names.gen.d.ts +8 -0
  16. package/dist/.pikku/addon/auth/auth.types.d.ts +5 -0
  17. package/dist/.pikku/addon/auth/auth.types.d.ts.map +1 -0
  18. package/dist/.pikku/addon/auth/auth.types.js +6 -0
  19. package/dist/.pikku/addon/auth/auth.types.js.map +1 -0
  20. package/dist/.pikku/addon/auth/index.d.ts +9 -0
  21. package/dist/.pikku/addon/auth/index.d.ts.map +1 -0
  22. package/dist/.pikku/addon/auth/index.js +9 -0
  23. package/dist/.pikku/addon/auth/index.js.map +1 -0
  24. package/dist/.pikku/addon/auth/pikku-auth-types.gen.d.ts +119 -0
  25. package/dist/.pikku/addon/auth/pikku-auth-types.gen.d.ts.map +1 -0
  26. package/dist/.pikku/addon/auth/pikku-auth-types.gen.js +93 -0
  27. package/dist/.pikku/addon/auth/pikku-auth-types.gen.js.map +1 -0
  28. package/dist/.pikku/addon/channel/index.d.ts +8 -0
  29. package/dist/.pikku/addon/channel/index.d.ts.map +1 -0
  30. package/dist/.pikku/addon/channel/index.js +8 -0
  31. package/dist/.pikku/addon/channel/index.js.map +1 -0
  32. package/dist/.pikku/addon/channel/pikku-channel-types.gen.d.ts +91 -0
  33. package/dist/.pikku/addon/channel/pikku-channel-types.gen.d.ts.map +1 -0
  34. package/dist/.pikku/addon/channel/pikku-channel-types.gen.js +43 -0
  35. package/dist/.pikku/addon/channel/pikku-channel-types.gen.js.map +1 -0
  36. package/dist/.pikku/addon/error/index.d.ts +8 -0
  37. package/dist/.pikku/addon/error/index.d.ts.map +1 -0
  38. package/dist/.pikku/addon/error/index.js +8 -0
  39. package/dist/.pikku/addon/error/index.js.map +1 -0
  40. package/dist/.pikku/addon/error/pikku-error-types.gen.d.ts +8 -0
  41. package/dist/.pikku/addon/error/pikku-error-types.gen.d.ts.map +1 -0
  42. package/dist/.pikku/addon/error/pikku-error-types.gen.js +8 -0
  43. package/dist/.pikku/addon/error/pikku-error-types.gen.js.map +1 -0
  44. package/dist/.pikku/addon/function/index.d.ts +8 -0
  45. package/dist/.pikku/addon/function/index.d.ts.map +1 -0
  46. package/dist/.pikku/addon/function/index.js +8 -0
  47. package/dist/.pikku/addon/function/index.js.map +1 -0
  48. package/dist/.pikku/addon/function/pikku-function-types.gen.d.ts +270 -0
  49. package/dist/.pikku/addon/function/pikku-function-types.gen.d.ts.map +1 -0
  50. package/dist/.pikku/addon/function/pikku-function-types.gen.js +117 -0
  51. package/dist/.pikku/addon/function/pikku-function-types.gen.js.map +1 -0
  52. package/dist/.pikku/addon/function/pikku-functions-meta-verbose.gen.json +2146 -0
  53. package/dist/.pikku/addon/function/pikku-functions-meta.gen.d.ts +2 -0
  54. package/dist/.pikku/addon/function/pikku-functions-meta.gen.d.ts.map +1 -0
  55. package/dist/.pikku/addon/function/pikku-functions-meta.gen.js +7 -0
  56. package/dist/.pikku/addon/function/pikku-functions-meta.gen.js.map +1 -0
  57. package/dist/.pikku/addon/function/pikku-functions-meta.gen.json +1690 -0
  58. package/dist/.pikku/addon/function/pikku-functions.gen.d.ts +2 -0
  59. package/dist/.pikku/addon/function/pikku-functions.gen.d.ts.map +1 -0
  60. package/dist/.pikku/addon/function/pikku-functions.gen.js +126 -0
  61. package/dist/.pikku/addon/function/pikku-functions.gen.js.map +1 -0
  62. package/dist/.pikku/addon/http/index.d.ts +8 -0
  63. package/dist/.pikku/addon/http/index.d.ts.map +1 -0
  64. package/dist/.pikku/addon/http/index.js +8 -0
  65. package/dist/.pikku/addon/http/index.js.map +1 -0
  66. package/dist/.pikku/addon/http/pikku-http-types.gen.d.ts +50 -0
  67. package/dist/.pikku/addon/http/pikku-http-types.gen.d.ts.map +1 -0
  68. package/dist/.pikku/addon/http/pikku-http-types.gen.js +11 -0
  69. package/dist/.pikku/addon/http/pikku-http-types.gen.js.map +1 -0
  70. package/dist/.pikku/addon/index.d.ts +8 -0
  71. package/dist/.pikku/addon/index.d.ts.map +1 -0
  72. package/dist/.pikku/addon/index.js +8 -0
  73. package/dist/.pikku/addon/index.js.map +1 -0
  74. package/dist/.pikku/addon/mcp/index.d.ts +8 -0
  75. package/dist/.pikku/addon/mcp/index.d.ts.map +1 -0
  76. package/dist/.pikku/addon/mcp/index.js +8 -0
  77. package/dist/.pikku/addon/mcp/index.js.map +1 -0
  78. package/dist/.pikku/addon/mcp/pikku-mcp-types.gen.d.ts +102 -0
  79. package/dist/.pikku/addon/mcp/pikku-mcp-types.gen.d.ts.map +1 -0
  80. package/dist/.pikku/addon/mcp/pikku-mcp-types.gen.js +16 -0
  81. package/dist/.pikku/addon/mcp/pikku-mcp-types.gen.js.map +1 -0
  82. package/dist/.pikku/addon/middleware/index.d.ts +8 -0
  83. package/dist/.pikku/addon/middleware/index.d.ts.map +1 -0
  84. package/dist/.pikku/addon/middleware/index.js +8 -0
  85. package/dist/.pikku/addon/middleware/index.js.map +1 -0
  86. package/dist/.pikku/addon/middleware/pikku-middleware-types.gen.d.ts +118 -0
  87. package/dist/.pikku/addon/middleware/pikku-middleware-types.gen.d.ts.map +1 -0
  88. package/dist/.pikku/addon/middleware/pikku-middleware-types.gen.js +109 -0
  89. package/dist/.pikku/addon/middleware/pikku-middleware-types.gen.js.map +1 -0
  90. package/dist/.pikku/addon/pikku-addon-types.gen.d.ts +3 -2
  91. package/dist/.pikku/addon/pikku-addon-types.gen.d.ts.map +1 -1
  92. package/dist/.pikku/addon/pikku-addon-types.gen.js +1 -1
  93. package/dist/.pikku/addon/pikku-addon-types.gen.js.map +1 -1
  94. package/dist/.pikku/addon/pikku-bootstrap-scenarios.gen.d.ts +10 -0
  95. package/dist/.pikku/addon/pikku-bootstrap-scenarios.gen.d.ts.map +1 -0
  96. package/dist/.pikku/addon/pikku-bootstrap-scenarios.gen.js +10 -0
  97. package/dist/.pikku/addon/pikku-bootstrap-scenarios.gen.js.map +1 -0
  98. package/dist/.pikku/addon/pikku-bootstrap.gen.d.ts +10 -0
  99. package/dist/.pikku/addon/pikku-bootstrap.gen.d.ts.map +1 -0
  100. package/dist/.pikku/addon/pikku-bootstrap.gen.js +10 -0
  101. package/dist/.pikku/addon/pikku-bootstrap.gen.js.map +1 -0
  102. package/dist/.pikku/addon/pikku-package.gen.js +3 -3
  103. package/dist/.pikku/addon/pikku-package.gen.js.map +1 -1
  104. package/dist/.pikku/addon/pikku-services.gen.d.ts +50 -0
  105. package/dist/.pikku/addon/pikku-services.gen.d.ts.map +1 -0
  106. package/dist/.pikku/addon/pikku-services.gen.js +46 -0
  107. package/dist/.pikku/addon/pikku-services.gen.js.map +1 -0
  108. package/dist/.pikku/addon/rpc/pikku-rpc-wirings-map.gen.d.ts +251 -0
  109. package/dist/.pikku/addon/rpc/pikku-rpc-wirings-map.internal.gen.d.ts +253 -0
  110. package/dist/.pikku/addon/rpc/pikku-rpc-wirings-map.remote.gen.d.ts +184 -0
  111. package/dist/.pikku/addon/rpc/pikku-rpc-wirings-meta.internal.gen.d.ts +2 -0
  112. package/dist/.pikku/addon/rpc/pikku-rpc-wirings-meta.internal.gen.d.ts.map +1 -0
  113. package/dist/.pikku/addon/rpc/pikku-rpc-wirings-meta.internal.gen.js +7 -0
  114. package/dist/.pikku/addon/rpc/pikku-rpc-wirings-meta.internal.gen.js.map +1 -0
  115. package/dist/.pikku/addon/rpc/pikku-rpc-wirings-meta.internal.gen.json +62 -0
  116. package/dist/.pikku/addon/scenarios/index.d.ts +8 -0
  117. package/dist/.pikku/addon/scenarios/index.d.ts.map +1 -0
  118. package/dist/.pikku/addon/scenarios/index.js +8 -0
  119. package/dist/.pikku/addon/scenarios/index.js.map +1 -0
  120. package/dist/.pikku/addon/scenarios/pikku-personas.gen.d.ts +18 -0
  121. package/dist/.pikku/addon/scenarios/pikku-personas.gen.d.ts.map +1 -0
  122. package/dist/.pikku/addon/scenarios/pikku-personas.gen.js +18 -0
  123. package/dist/.pikku/addon/scenarios/pikku-personas.gen.js.map +1 -0
  124. package/dist/.pikku/addon/scenarios/pikku-scenario-functions-meta.gen.d.ts +2 -0
  125. package/dist/.pikku/addon/scenarios/pikku-scenario-functions-meta.gen.d.ts.map +1 -0
  126. package/dist/.pikku/addon/scenarios/pikku-scenario-functions-meta.gen.js +11 -0
  127. package/dist/.pikku/addon/scenarios/pikku-scenario-functions-meta.gen.js.map +1 -0
  128. package/dist/.pikku/addon/scenarios/pikku-scenario-functions-meta.gen.json +1 -0
  129. package/dist/.pikku/addon/scenarios/pikku-scenario-functions.gen.d.ts +5 -0
  130. package/dist/.pikku/addon/scenarios/pikku-scenario-functions.gen.d.ts.map +1 -0
  131. package/dist/.pikku/addon/scenarios/pikku-scenario-functions.gen.js +2 -0
  132. package/dist/.pikku/addon/scenarios/pikku-scenario-functions.gen.js.map +1 -0
  133. package/dist/.pikku/addon/scenarios/pikku-scenario-types.gen.d.ts +311 -0
  134. package/dist/.pikku/addon/scenarios/pikku-scenario-types.gen.d.ts.map +1 -0
  135. package/dist/.pikku/addon/scenarios/pikku-scenario-types.gen.js +72 -0
  136. package/dist/.pikku/addon/scenarios/pikku-scenario-types.gen.js.map +1 -0
  137. package/dist/.pikku/addon/scenarios/pikku-scenario-wirings-meta.gen.d.ts +2 -0
  138. package/dist/.pikku/addon/scenarios/pikku-scenario-wirings-meta.gen.d.ts.map +1 -0
  139. package/dist/.pikku/addon/scenarios/pikku-scenario-wirings-meta.gen.js +11 -0
  140. package/dist/.pikku/addon/scenarios/pikku-scenario-wirings-meta.gen.js.map +1 -0
  141. package/dist/.pikku/addon/scenarios/pikku-scenario-wirings.gen.d.ts +5 -0
  142. package/dist/.pikku/addon/scenarios/pikku-scenario-wirings.gen.d.ts.map +1 -0
  143. package/dist/.pikku/addon/scenarios/pikku-scenario-wirings.gen.js +2 -0
  144. package/dist/.pikku/addon/scenarios/pikku-scenario-wirings.gen.js.map +1 -0
  145. package/dist/.pikku/addon/scenarios/schemas/register.gen.d.ts +5 -0
  146. package/dist/.pikku/addon/scenarios/schemas/register.gen.d.ts.map +1 -0
  147. package/dist/.pikku/addon/scenarios/schemas/register.gen.js +5 -0
  148. package/dist/.pikku/addon/scenarios/schemas/register.gen.js.map +1 -0
  149. package/dist/.pikku/addon/schemas/register.gen.d.ts +2 -0
  150. package/dist/.pikku/addon/schemas/register.gen.d.ts.map +1 -0
  151. package/dist/.pikku/addon/schemas/register.gen.js +201 -0
  152. package/dist/.pikku/addon/schemas/register.gen.js.map +1 -0
  153. package/dist/.pikku/addon/schemas/schemas/AddonMetaPage.schema.json +1 -0
  154. package/dist/.pikku/addon/schemas/schemas/AddonMetaQuery.schema.json +1 -0
  155. package/dist/.pikku/addon/schemas/schemas/AddonPackageInfo.schema.json +1 -0
  156. package/dist/.pikku/addon/schemas/schemas/AddonReadinessInput.schema.json +1 -0
  157. package/dist/.pikku/addon/schemas/schemas/AddonReadinessOutput.schema.json +1 -0
  158. package/dist/.pikku/addon/schemas/schemas/AgentCredentialCheckInput.schema.json +1 -0
  159. package/dist/.pikku/addon/schemas/schemas/AgentCredentialCheckOutput.schema.json +1 -0
  160. package/dist/.pikku/addon/schemas/schemas/AllMeta.schema.json +1 -0
  161. package/dist/.pikku/addon/schemas/schemas/AuthProvidersMeta.schema.json +1 -0
  162. package/dist/.pikku/addon/schemas/schemas/ChannelSnippets.schema.json +1 -0
  163. package/dist/.pikku/addon/schemas/schemas/DbSchema.schema.json +1 -0
  164. package/dist/.pikku/addon/schemas/schemas/DeleteAgentThreadInput.schema.json +1 -0
  165. package/dist/.pikku/addon/schemas/schemas/DeleteAgentThreadOutput.schema.json +1 -0
  166. package/dist/.pikku/addon/schemas/schemas/DeleteScenarioRunInput.schema.json +1 -0
  167. package/dist/.pikku/addon/schemas/schemas/DeleteWorkflowRunInput.schema.json +1 -0
  168. package/dist/.pikku/addon/schemas/schemas/DeleteWorkflowRunOutput.schema.json +1 -0
  169. package/dist/.pikku/addon/schemas/schemas/GetAddonCategoriesOutput.schema.json +1 -0
  170. package/dist/.pikku/addon/schemas/schemas/GetAddonCommunityPackageInput.schema.json +1 -0
  171. package/dist/.pikku/addon/schemas/schemas/GetAddonIconInput.schema.json +1 -0
  172. package/dist/.pikku/addon/schemas/schemas/GetAddonInstalledPackageInput.schema.json +1 -0
  173. package/dist/.pikku/addon/schemas/schemas/GetAddonInstancesInput.schema.json +1 -0
  174. package/dist/.pikku/addon/schemas/schemas/GetAddonInstancesOutput.schema.json +1 -0
  175. package/dist/.pikku/addon/schemas/schemas/GetAgentRunScoresInput.schema.json +1 -0
  176. package/dist/.pikku/addon/schemas/schemas/GetAgentRunScoresOutput.schema.json +1 -0
  177. package/dist/.pikku/addon/schemas/schemas/GetAgentThreadMessagesInput.schema.json +1 -0
  178. package/dist/.pikku/addon/schemas/schemas/GetAgentThreadMessagesOutput.schema.json +1 -0
  179. package/dist/.pikku/addon/schemas/schemas/GetAgentThreadRunsInput.schema.json +1 -0
  180. package/dist/.pikku/addon/schemas/schemas/GetAgentThreadRunsOutput.schema.json +1 -0
  181. package/dist/.pikku/addon/schemas/schemas/GetAgentThreadsInput.schema.json +1 -0
  182. package/dist/.pikku/addon/schemas/schemas/GetAgentThreadsOutput.schema.json +1 -0
  183. package/dist/.pikku/addon/schemas/schemas/GetChannelSnippetsInput.schema.json +1 -0
  184. package/dist/.pikku/addon/schemas/schemas/GetFunctionsMetaOutput.schema.json +1 -0
  185. package/dist/.pikku/addon/schemas/schemas/GetInstalledAddonsOutput.schema.json +1 -0
  186. package/dist/.pikku/addon/schemas/schemas/GetMyAccessOutput.schema.json +1 -0
  187. package/dist/.pikku/addon/schemas/schemas/GetOpenapiCategoriesOutput.schema.json +1 -0
  188. package/dist/.pikku/addon/schemas/schemas/GetOpenapiDetailInput.schema.json +1 -0
  189. package/dist/.pikku/addon/schemas/schemas/GetOpenapiDetailOutput.schema.json +1 -0
  190. package/dist/.pikku/addon/schemas/schemas/GetOpenapisInput.schema.json +1 -0
  191. package/dist/.pikku/addon/schemas/schemas/GetOpenapisOutput.schema.json +1 -0
  192. package/dist/.pikku/addon/schemas/schemas/GetScenarioArtifactInput.schema.json +1 -0
  193. package/dist/.pikku/addon/schemas/schemas/GetScenarioRunInput.schema.json +1 -0
  194. package/dist/.pikku/addon/schemas/schemas/GetSchemaInput.schema.json +1 -0
  195. package/dist/.pikku/addon/schemas/schemas/GetScorersOutput.schema.json +1 -0
  196. package/dist/.pikku/addon/schemas/schemas/GetStateDiffInput.schema.json +1 -0
  197. package/dist/.pikku/addon/schemas/schemas/GetWebhookDeliveryInput.schema.json +1 -0
  198. package/dist/.pikku/addon/schemas/schemas/GetWorkflowMetaByIdInput.schema.json +1 -0
  199. package/dist/.pikku/addon/schemas/schemas/GetWorkflowMetaByIdOutput.schema.json +1 -0
  200. package/dist/.pikku/addon/schemas/schemas/GetWorkflowRunHistoryInput.schema.json +1 -0
  201. package/dist/.pikku/addon/schemas/schemas/GetWorkflowRunHistoryOutput.schema.json +1 -0
  202. package/dist/.pikku/addon/schemas/schemas/GetWorkflowRunInput.schema.json +1 -0
  203. package/dist/.pikku/addon/schemas/schemas/GetWorkflowRunNamesOutput.schema.json +1 -0
  204. package/dist/.pikku/addon/schemas/schemas/GetWorkflowRunOutput.schema.json +1 -0
  205. package/dist/.pikku/addon/schemas/schemas/GetWorkflowRunStepsInput.schema.json +1 -0
  206. package/dist/.pikku/addon/schemas/schemas/GetWorkflowRunStepsOutput.schema.json +1 -0
  207. package/dist/.pikku/addon/schemas/schemas/GetWorkflowRunsInput.schema.json +1 -0
  208. package/dist/.pikku/addon/schemas/schemas/GetWorkflowRunsOutput.schema.json +1 -0
  209. package/dist/.pikku/addon/schemas/schemas/GetWorkflowVersionInput.schema.json +1 -0
  210. package/dist/.pikku/addon/schemas/schemas/GetWorkflowVersionOutput.schema.json +1 -0
  211. package/dist/.pikku/addon/schemas/schemas/InstallAddonInput.schema.json +1 -0
  212. package/dist/.pikku/addon/schemas/schemas/InstallAddonOutput.schema.json +1 -0
  213. package/dist/.pikku/addon/schemas/schemas/InstallOpenapiAddonInput.schema.json +1 -0
  214. package/dist/.pikku/addon/schemas/schemas/InstallOpenapiAddonOutput.schema.json +1 -0
  215. package/dist/.pikku/addon/schemas/schemas/JSONSchema7.schema.json +1 -0
  216. package/dist/.pikku/addon/schemas/schemas/KnowledgeBundle.schema.json +1 -0
  217. package/dist/.pikku/addon/schemas/schemas/ListScenarioRunsInput.schema.json +1 -0
  218. package/dist/.pikku/addon/schemas/schemas/ListScenarioRunsOutput.schema.json +1 -0
  219. package/dist/.pikku/addon/schemas/schemas/ListWebhookDeliveriesInput.schema.json +1 -0
  220. package/dist/.pikku/addon/schemas/schemas/ListWebhookDeliveriesOutput.schema.json +1 -0
  221. package/dist/.pikku/addon/schemas/schemas/PingOutput.schema.json +1 -0
  222. package/dist/.pikku/addon/schemas/schemas/ReadAgentSourceInput.schema.json +1 -0
  223. package/dist/.pikku/addon/schemas/schemas/ReadAgentSourceOutput.schema.json +1 -0
  224. package/dist/.pikku/addon/schemas/schemas/ReadFunctionBodyInput.schema.json +1 -0
  225. package/dist/.pikku/addon/schemas/schemas/ReadFunctionBodyOutput.schema.json +1 -0
  226. package/dist/.pikku/addon/schemas/schemas/ReadFunctionSourceInput.schema.json +1 -0
  227. package/dist/.pikku/addon/schemas/schemas/ReadFunctionSourceOutput.schema.json +1 -0
  228. package/dist/.pikku/addon/schemas/schemas/RenderEmailPreviewInput.schema.json +1 -0
  229. package/dist/.pikku/addon/schemas/schemas/RenderEmailPreviewOutput.schema.json +1 -0
  230. package/dist/.pikku/addon/schemas/schemas/ScenarioRunRecord.schema.json +1 -0
  231. package/dist/.pikku/addon/schemas/schemas/SecretGetInput.schema.json +1 -0
  232. package/dist/.pikku/addon/schemas/schemas/SecretGetOutput.schema.json +1 -0
  233. package/dist/.pikku/addon/schemas/schemas/SecretHasInput.schema.json +1 -0
  234. package/dist/.pikku/addon/schemas/schemas/SecretHasOutput.schema.json +1 -0
  235. package/dist/.pikku/addon/schemas/schemas/SecretSetInput.schema.json +1 -0
  236. package/dist/.pikku/addon/schemas/schemas/SecretSetOutput.schema.json +1 -0
  237. package/dist/.pikku/addon/schemas/schemas/SecurityAuditReport.schema.json +1 -0
  238. package/dist/.pikku/addon/schemas/schemas/StateDiff.schema.json +1 -0
  239. package/dist/.pikku/addon/schemas/schemas/StreamWorkflowRunInput.schema.json +1 -0
  240. package/dist/.pikku/addon/schemas/schemas/SurfaceResult.schema.json +1 -0
  241. package/dist/.pikku/addon/schemas/schemas/UpdateAgentConfigInput.schema.json +1 -0
  242. package/dist/.pikku/addon/schemas/schemas/UpdateAgentConfigOutput.schema.json +1 -0
  243. package/dist/.pikku/addon/schemas/schemas/UpdateDependencyInput.schema.json +1 -0
  244. package/dist/.pikku/addon/schemas/schemas/UpdateEmailTemplateInput.schema.json +1 -0
  245. package/dist/.pikku/addon/schemas/schemas/UpdateEmailTemplateOutput.schema.json +1 -0
  246. package/dist/.pikku/addon/schemas/schemas/UpdateFunctionBodyInput.schema.json +1 -0
  247. package/dist/.pikku/addon/schemas/schemas/UpdateFunctionBodyOutput.schema.json +1 -0
  248. package/dist/.pikku/addon/schemas/schemas/UpdateFunctionConfigInput.schema.json +1 -0
  249. package/dist/.pikku/addon/schemas/schemas/UpdateFunctionConfigOutput.schema.json +1 -0
  250. package/dist/.pikku/addon/schemas/schemas/WebhookDeliveryWithAttempts.schema.json +1 -0
  251. package/dist/.pikku/addon/scopes/index.d.ts +8 -0
  252. package/dist/.pikku/addon/scopes/index.d.ts.map +1 -0
  253. package/dist/.pikku/addon/scopes/index.js +8 -0
  254. package/dist/.pikku/addon/scopes/index.js.map +1 -0
  255. package/dist/.pikku/addon/scopes/pikku-personas-meta.gen.json +1 -0
  256. package/dist/.pikku/addon/scopes/pikku-personas.gen.d.ts +29 -0
  257. package/dist/.pikku/addon/scopes/pikku-personas.gen.d.ts.map +1 -0
  258. package/dist/.pikku/addon/scopes/pikku-personas.gen.js +18 -0
  259. package/dist/.pikku/addon/scopes/pikku-personas.gen.js.map +1 -0
  260. package/dist/.pikku/addon/scopes/pikku-roles-meta.gen.json +1 -0
  261. package/dist/.pikku/addon/scopes/pikku-roles.gen.d.ts +31 -0
  262. package/dist/.pikku/addon/scopes/pikku-roles.gen.d.ts.map +1 -0
  263. package/dist/.pikku/addon/scopes/pikku-roles.gen.js +19 -0
  264. package/dist/.pikku/addon/scopes/pikku-roles.gen.js.map +1 -0
  265. package/dist/.pikku/addon/scopes/pikku-scope-types.gen.d.ts +6 -0
  266. package/dist/.pikku/addon/scopes/pikku-scope-types.gen.d.ts.map +1 -0
  267. package/dist/.pikku/addon/scopes/pikku-scope-types.gen.js +6 -0
  268. package/dist/.pikku/addon/scopes/pikku-scope-types.gen.js.map +1 -0
  269. package/dist/.pikku/addon/scopes/pikku-scopes-meta.gen.json +144 -0
  270. package/dist/.pikku/addon/scopes/pikku-scopes.gen.d.ts +36 -0
  271. package/dist/.pikku/addon/scopes/pikku-scopes.gen.d.ts.map +1 -0
  272. package/dist/.pikku/addon/scopes/pikku-scopes.gen.js +30 -0
  273. package/dist/.pikku/addon/scopes/pikku-scopes.gen.js.map +1 -0
  274. package/dist/.pikku/addon/secrets/index.d.ts +9 -0
  275. package/dist/.pikku/addon/secrets/index.d.ts.map +1 -0
  276. package/dist/.pikku/addon/secrets/index.js +9 -0
  277. package/dist/.pikku/addon/secrets/index.js.map +1 -0
  278. package/dist/.pikku/addon/secrets/pikku-secret-types.gen.d.ts +5 -0
  279. package/dist/.pikku/addon/secrets/pikku-secret-types.gen.d.ts.map +1 -0
  280. package/dist/.pikku/addon/secrets/pikku-secret-types.gen.js +5 -0
  281. package/dist/.pikku/addon/secrets/pikku-secret-types.gen.js.map +1 -0
  282. package/dist/.pikku/addon/secrets/pikku-secrets-meta.gen.json +1 -0
  283. package/dist/.pikku/addon/secrets/pikku-secrets.gen.d.ts +18 -0
  284. package/dist/.pikku/addon/secrets/pikku-secrets.gen.d.ts.map +1 -0
  285. package/dist/.pikku/addon/secrets/pikku-secrets.gen.js +19 -0
  286. package/dist/.pikku/addon/secrets/pikku-secrets.gen.js.map +1 -0
  287. package/dist/.pikku/addon/services/pikku-meta-service.gen.d.ts +8 -0
  288. package/dist/.pikku/addon/services/pikku-meta-service.gen.d.ts.map +1 -0
  289. package/dist/.pikku/addon/services/pikku-meta-service.gen.js +10 -0
  290. package/dist/.pikku/addon/services/pikku-meta-service.gen.js.map +1 -0
  291. package/dist/.pikku/addon/setup/index.d.ts +9 -0
  292. package/dist/.pikku/addon/setup/index.d.ts.map +1 -0
  293. package/dist/.pikku/addon/setup/index.js +9 -0
  294. package/dist/.pikku/addon/setup/index.js.map +1 -0
  295. package/dist/.pikku/addon/setup/pikku-addon-setup-types.gen.d.ts +66 -0
  296. package/dist/.pikku/addon/setup/pikku-addon-setup-types.gen.d.ts.map +1 -0
  297. package/dist/.pikku/addon/setup/pikku-addon-setup-types.gen.js +78 -0
  298. package/dist/.pikku/addon/setup/pikku-addon-setup-types.gen.js.map +1 -0
  299. package/dist/.pikku/addon/setup/pikku-setup-types.gen.d.ts +67 -0
  300. package/dist/.pikku/addon/setup/pikku-setup-types.gen.d.ts.map +1 -0
  301. package/dist/.pikku/addon/setup/pikku-setup-types.gen.js +88 -0
  302. package/dist/.pikku/addon/setup/pikku-setup-types.gen.js.map +1 -0
  303. package/dist/.pikku/addon/trigger/index.d.ts +8 -0
  304. package/dist/.pikku/addon/trigger/index.d.ts.map +1 -0
  305. package/dist/.pikku/addon/trigger/index.js +8 -0
  306. package/dist/.pikku/addon/trigger/index.js.map +1 -0
  307. package/dist/.pikku/addon/trigger/pikku-trigger-types.gen.d.ts +83 -0
  308. package/dist/.pikku/addon/trigger/pikku-trigger-types.gen.d.ts.map +1 -0
  309. package/dist/.pikku/addon/trigger/pikku-trigger-types.gen.js +13 -0
  310. package/dist/.pikku/addon/trigger/pikku-trigger-types.gen.js.map +1 -0
  311. package/dist/.pikku/addon/variables/index.d.ts +9 -0
  312. package/dist/.pikku/addon/variables/index.d.ts.map +1 -0
  313. package/dist/.pikku/addon/variables/index.js +9 -0
  314. package/dist/.pikku/addon/variables/index.js.map +1 -0
  315. package/dist/.pikku/addon/variables/pikku-variable-types.gen.d.ts +5 -0
  316. package/dist/.pikku/addon/variables/pikku-variable-types.gen.d.ts.map +1 -0
  317. package/dist/.pikku/addon/variables/pikku-variable-types.gen.js +5 -0
  318. package/dist/.pikku/addon/variables/pikku-variable-types.gen.js.map +1 -0
  319. package/dist/.pikku/addon/variables/pikku-variables-meta.gen.json +1 -0
  320. package/dist/.pikku/addon/variables/pikku-variables.gen.d.ts +19 -0
  321. package/dist/.pikku/addon/variables/pikku-variables.gen.d.ts.map +1 -0
  322. package/dist/.pikku/addon/variables/pikku-variables.gen.js +19 -0
  323. package/dist/.pikku/addon/variables/pikku-variables.gen.js.map +1 -0
  324. package/dist/.pikku/addon/workflow/index.d.ts +8 -0
  325. package/dist/.pikku/addon/workflow/index.d.ts.map +1 -0
  326. package/dist/.pikku/addon/workflow/index.js +8 -0
  327. package/dist/.pikku/addon/workflow/index.js.map +1 -0
  328. package/dist/.pikku/addon/workflow/pikku-scenario-step-map.gen.d.ts +18 -0
  329. package/dist/.pikku/addon/workflow/pikku-workflow-map.gen.d.ts +38 -0
  330. package/dist/.pikku/addon/workflow/pikku-workflow-types.gen.d.ts +106 -0
  331. package/dist/.pikku/addon/workflow/pikku-workflow-types.gen.d.ts.map +1 -0
  332. package/dist/.pikku/addon/workflow/pikku-workflow-types.gen.js +16 -0
  333. package/dist/.pikku/addon/workflow/pikku-workflow-types.gen.js.map +1 -0
  334. package/dist/.pikku/addon/workflow/pikku-workflow-wirings-meta.gen.d.ts +2 -0
  335. package/dist/.pikku/addon/workflow/pikku-workflow-wirings-meta.gen.d.ts.map +1 -0
  336. package/dist/.pikku/addon/workflow/pikku-workflow-wirings-meta.gen.js +7 -0
  337. package/dist/.pikku/addon/workflow/pikku-workflow-wirings-meta.gen.js.map +1 -0
  338. package/dist/.pikku/addon/workflow/pikku-workflow-wirings.gen.d.ts +5 -0
  339. package/dist/.pikku/addon/workflow/pikku-workflow-wirings.gen.d.ts.map +1 -0
  340. package/dist/.pikku/addon/workflow/pikku-workflow-wirings.gen.js +5 -0
  341. package/dist/.pikku/addon/workflow/pikku-workflow-wirings.gen.js.map +1 -0
  342. package/dist/.pikku/agent/index.d.ts +8 -0
  343. package/dist/.pikku/agent/index.d.ts.map +1 -0
  344. package/dist/.pikku/agent/index.js +8 -0
  345. package/dist/.pikku/agent/index.js.map +1 -0
  346. package/dist/.pikku/agent/pikku-agent-map.gen.d.ts +1 -1
  347. package/dist/.pikku/agent/pikku-agent-types.gen.d.ts +14 -13
  348. package/dist/.pikku/agent/pikku-agent-types.gen.d.ts.map +1 -1
  349. package/dist/.pikku/agent/pikku-agent-types.gen.js +5 -6
  350. package/dist/.pikku/agent/pikku-agent-types.gen.js.map +1 -1
  351. package/dist/.pikku/agent/pikku-model-aliases.gen.js +2 -2
  352. package/dist/.pikku/agent/pikku-model-aliases.gen.js.map +1 -1
  353. package/dist/.pikku/agent/pikku-scorer-names.gen.d.ts +1 -1
  354. package/dist/.pikku/auth/auth.types.d.ts +1 -1
  355. package/dist/.pikku/auth/auth.types.js +1 -1
  356. package/dist/.pikku/auth/index.d.ts +9 -0
  357. package/dist/.pikku/auth/index.d.ts.map +1 -0
  358. package/dist/.pikku/auth/index.js +9 -0
  359. package/dist/.pikku/auth/index.js.map +1 -0
  360. package/dist/.pikku/auth/pikku-auth-types.gen.d.ts +119 -0
  361. package/dist/.pikku/auth/pikku-auth-types.gen.d.ts.map +1 -0
  362. package/dist/.pikku/auth/pikku-auth-types.gen.js +93 -0
  363. package/dist/.pikku/auth/pikku-auth-types.gen.js.map +1 -0
  364. package/dist/.pikku/channel/index.d.ts +8 -0
  365. package/dist/.pikku/channel/index.d.ts.map +1 -0
  366. package/dist/.pikku/channel/index.js +8 -0
  367. package/dist/.pikku/channel/index.js.map +1 -0
  368. package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +5 -26
  369. package/dist/.pikku/channel/pikku-channel-types.gen.d.ts.map +1 -1
  370. package/dist/.pikku/channel/pikku-channel-types.gen.js +2 -19
  371. package/dist/.pikku/channel/pikku-channel-types.gen.js.map +1 -1
  372. package/dist/.pikku/console/pikku-node-types.gen.d.ts +1 -1
  373. package/dist/.pikku/credentials/index.d.ts +8 -0
  374. package/dist/.pikku/credentials/index.d.ts.map +1 -0
  375. package/dist/.pikku/credentials/index.js +8 -0
  376. package/dist/.pikku/credentials/index.js.map +1 -0
  377. package/dist/.pikku/credentials/pikku-credential-types.gen.d.ts +5 -0
  378. package/dist/.pikku/credentials/pikku-credential-types.gen.d.ts.map +1 -0
  379. package/dist/.pikku/credentials/pikku-credential-types.gen.js +5 -0
  380. package/dist/.pikku/credentials/pikku-credential-types.gen.js.map +1 -0
  381. package/dist/.pikku/error/index.d.ts +8 -0
  382. package/dist/.pikku/error/index.d.ts.map +1 -0
  383. package/dist/.pikku/error/index.js +8 -0
  384. package/dist/.pikku/error/index.js.map +1 -0
  385. package/dist/.pikku/error/pikku-error-types.gen.d.ts +8 -0
  386. package/dist/.pikku/error/pikku-error-types.gen.d.ts.map +1 -0
  387. package/dist/.pikku/error/pikku-error-types.gen.js +8 -0
  388. package/dist/.pikku/error/pikku-error-types.gen.js.map +1 -0
  389. package/dist/.pikku/function/index.d.ts +8 -0
  390. package/dist/.pikku/function/index.d.ts.map +1 -0
  391. package/dist/.pikku/function/index.js +8 -0
  392. package/dist/.pikku/function/index.js.map +1 -0
  393. package/dist/.pikku/function/pikku-function-types.gen.d.ts +26 -258
  394. package/dist/.pikku/function/pikku-function-types.gen.d.ts.map +1 -1
  395. package/dist/.pikku/function/pikku-function-types.gen.js +2 -236
  396. package/dist/.pikku/function/pikku-function-types.gen.js.map +1 -1
  397. package/dist/.pikku/function/pikku-functions-meta-verbose.gen.json +247 -687
  398. package/dist/.pikku/function/pikku-functions-meta.gen.js +2 -2
  399. package/dist/.pikku/function/pikku-functions-meta.gen.js.map +1 -1
  400. package/dist/.pikku/function/pikku-functions-meta.gen.json +192 -536
  401. package/dist/.pikku/function/pikku-functions.gen.js +13 -37
  402. package/dist/.pikku/function/pikku-functions.gen.js.map +1 -1
  403. package/dist/.pikku/gateway/index.d.ts +8 -0
  404. package/dist/.pikku/gateway/index.d.ts.map +1 -0
  405. package/dist/.pikku/gateway/index.js +8 -0
  406. package/dist/.pikku/gateway/index.js.map +1 -0
  407. package/dist/.pikku/gateway/pikku-gateway-types.gen.d.ts +38 -0
  408. package/dist/.pikku/gateway/pikku-gateway-types.gen.d.ts.map +1 -0
  409. package/dist/.pikku/gateway/pikku-gateway-types.gen.js +26 -0
  410. package/dist/.pikku/gateway/pikku-gateway-types.gen.js.map +1 -0
  411. package/dist/.pikku/http/index.d.ts +8 -0
  412. package/dist/.pikku/http/index.d.ts.map +1 -0
  413. package/dist/.pikku/http/index.js +8 -0
  414. package/dist/.pikku/http/index.js.map +1 -0
  415. package/dist/.pikku/http/pikku-http-types.gen.d.ts +4 -52
  416. package/dist/.pikku/http/pikku-http-types.gen.d.ts.map +1 -1
  417. package/dist/.pikku/http/pikku-http-types.gen.js +2 -41
  418. package/dist/.pikku/http/pikku-http-types.gen.js.map +1 -1
  419. package/dist/.pikku/mcp/index.d.ts +8 -0
  420. package/dist/.pikku/mcp/index.d.ts.map +1 -0
  421. package/dist/.pikku/mcp/index.js +8 -0
  422. package/dist/.pikku/mcp/index.js.map +1 -0
  423. package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +7 -36
  424. package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts.map +1 -1
  425. package/dist/.pikku/mcp/pikku-mcp-types.gen.js +1 -23
  426. package/dist/.pikku/mcp/pikku-mcp-types.gen.js.map +1 -1
  427. package/dist/.pikku/middleware/index.d.ts +8 -0
  428. package/dist/.pikku/middleware/index.d.ts.map +1 -0
  429. package/dist/.pikku/middleware/index.js +8 -0
  430. package/dist/.pikku/middleware/index.js.map +1 -0
  431. package/dist/.pikku/middleware/pikku-middleware-types.gen.d.ts +118 -0
  432. package/dist/.pikku/middleware/pikku-middleware-types.gen.d.ts.map +1 -0
  433. package/dist/.pikku/middleware/pikku-middleware-types.gen.js +109 -0
  434. package/dist/.pikku/middleware/pikku-middleware-types.gen.js.map +1 -0
  435. package/dist/.pikku/pikku-bootstrap-scenarios.gen.d.ts +1 -1
  436. package/dist/.pikku/pikku-bootstrap-scenarios.gen.js +1 -1
  437. package/dist/.pikku/pikku-bootstrap.gen.d.ts +1 -1
  438. package/dist/.pikku/pikku-bootstrap.gen.js +1 -1
  439. package/dist/.pikku/pikku-meta-service.gen.d.ts +1 -1
  440. package/dist/.pikku/pikku-meta-service.gen.js +1 -1
  441. package/dist/.pikku/pikku-services.gen.d.ts +11 -9
  442. package/dist/.pikku/pikku-services.gen.d.ts.map +1 -1
  443. package/dist/.pikku/pikku-services.gen.js +9 -7
  444. package/dist/.pikku/pikku-services.gen.js.map +1 -1
  445. package/dist/.pikku/pikku-types.gen.d.ts +1 -2
  446. package/dist/.pikku/pikku-types.gen.d.ts.map +1 -1
  447. package/dist/.pikku/pikku-types.gen.js +1 -3
  448. package/dist/.pikku/pikku-types.gen.js.map +1 -1
  449. package/dist/.pikku/queue/index.d.ts +8 -0
  450. package/dist/.pikku/queue/index.d.ts.map +1 -0
  451. package/dist/.pikku/queue/index.js +8 -0
  452. package/dist/.pikku/queue/index.js.map +1 -0
  453. package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +1 -1
  454. package/dist/.pikku/queue/pikku-queue-types.gen.d.ts.map +1 -1
  455. package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
  456. package/dist/.pikku/queue/pikku-queue-types.gen.js.map +1 -1
  457. package/dist/.pikku/rpc/pikku-rpc-wirings-map.gen.d.ts +25 -61
  458. package/dist/.pikku/rpc/pikku-rpc-wirings-map.internal.gen.d.ts +26 -61
  459. package/dist/.pikku/rpc/pikku-rpc-wirings-map.remote.gen.d.ts +19 -41
  460. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +2 -2
  461. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js.map +1 -1
  462. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.json +6 -18
  463. package/dist/.pikku/scenarios/index.d.ts +8 -0
  464. package/dist/.pikku/scenarios/index.d.ts.map +1 -0
  465. package/dist/.pikku/scenarios/index.js +8 -0
  466. package/dist/.pikku/scenarios/index.js.map +1 -0
  467. package/dist/.pikku/scenarios/pikku-personas.gen.d.ts +18 -0
  468. package/dist/.pikku/scenarios/pikku-personas.gen.d.ts.map +1 -0
  469. package/dist/.pikku/scenarios/pikku-personas.gen.js +18 -0
  470. package/dist/.pikku/scenarios/pikku-personas.gen.js.map +1 -0
  471. package/dist/.pikku/scenarios/pikku-scenario-functions-meta.gen.js +2 -2
  472. package/dist/.pikku/scenarios/pikku-scenario-functions-meta.gen.js.map +1 -1
  473. package/dist/.pikku/scenarios/pikku-scenario-functions.gen.d.ts +1 -1
  474. package/dist/.pikku/scenarios/pikku-scenario-types.gen.d.ts +311 -0
  475. package/dist/.pikku/scenarios/pikku-scenario-types.gen.d.ts.map +1 -0
  476. package/dist/.pikku/scenarios/pikku-scenario-types.gen.js +72 -0
  477. package/dist/.pikku/scenarios/pikku-scenario-types.gen.js.map +1 -0
  478. package/dist/.pikku/scenarios/pikku-scenario-wirings-meta.gen.js +2 -2
  479. package/dist/.pikku/scenarios/pikku-scenario-wirings-meta.gen.js.map +1 -1
  480. package/dist/.pikku/scenarios/pikku-scenario-wirings.gen.d.ts +1 -1
  481. package/dist/.pikku/scenarios/schemas/register.gen.d.ts +1 -1
  482. package/dist/.pikku/scenarios/schemas/register.gen.js +1 -1
  483. package/dist/.pikku/scheduler/index.d.ts +8 -0
  484. package/dist/.pikku/scheduler/index.d.ts.map +1 -0
  485. package/dist/.pikku/scheduler/index.js +8 -0
  486. package/dist/.pikku/scheduler/index.js.map +1 -0
  487. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +1 -1
  488. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts.map +1 -1
  489. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
  490. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js.map +1 -1
  491. package/dist/.pikku/schemas/register.gen.js +19 -65
  492. package/dist/.pikku/schemas/register.gen.js.map +1 -1
  493. package/dist/.pikku/schemas/schemas/AddonMetaPage.schema.json +1 -1
  494. package/dist/.pikku/schemas/schemas/AddonPackageInfo.schema.json +1 -1
  495. package/dist/.pikku/schemas/schemas/AddonReadinessInput.schema.json +1 -0
  496. package/dist/.pikku/schemas/schemas/AddonReadinessOutput.schema.json +1 -0
  497. package/dist/.pikku/schemas/schemas/AllMeta.schema.json +1 -1
  498. package/dist/.pikku/schemas/schemas/DeleteScenarioRunInput.schema.json +1 -0
  499. package/dist/.pikku/schemas/schemas/GetFunctionsMetaOutput.schema.json +1 -1
  500. package/dist/.pikku/schemas/schemas/GetScenarioArtifactInput.schema.json +1 -0
  501. package/dist/.pikku/schemas/schemas/GetScenarioRunInput.schema.json +1 -0
  502. package/dist/.pikku/schemas/schemas/InstallAddonOutput.schema.json +1 -1
  503. package/dist/.pikku/schemas/schemas/ListScenarioRunsInput.schema.json +1 -0
  504. package/dist/.pikku/schemas/schemas/ListScenarioRunsOutput.schema.json +1 -0
  505. package/dist/.pikku/schemas/schemas/ScenarioRunRecord.schema.json +1 -0
  506. package/dist/.pikku/schemas/schemas/SurfaceResult.schema.json +1 -0
  507. package/dist/.pikku/scopes/index.d.ts +8 -0
  508. package/dist/.pikku/scopes/index.d.ts.map +1 -0
  509. package/dist/.pikku/scopes/index.js +8 -0
  510. package/dist/.pikku/scopes/index.js.map +1 -0
  511. package/dist/.pikku/scopes/pikku-personas.gen.d.ts +5 -13
  512. package/dist/.pikku/scopes/pikku-personas.gen.d.ts.map +1 -1
  513. package/dist/.pikku/scopes/pikku-personas.gen.js +1 -1
  514. package/dist/.pikku/scopes/pikku-personas.gen.js.map +1 -1
  515. package/dist/.pikku/scopes/pikku-roles.gen.d.ts +1 -1
  516. package/dist/.pikku/scopes/pikku-scope-types.gen.d.ts +1 -3
  517. package/dist/.pikku/scopes/pikku-scope-types.gen.d.ts.map +1 -1
  518. package/dist/.pikku/scopes/pikku-scope-types.gen.js +1 -1
  519. package/dist/.pikku/scopes/pikku-scope-types.gen.js.map +1 -1
  520. package/dist/.pikku/scopes/pikku-scopes-meta.gen.json +13 -66
  521. package/dist/.pikku/scopes/pikku-scopes.gen.d.ts +2 -2
  522. package/dist/.pikku/scopes/pikku-scopes.gen.d.ts.map +1 -1
  523. package/dist/.pikku/scopes/pikku-scopes.gen.js +0 -1
  524. package/dist/.pikku/scopes/pikku-scopes.gen.js.map +1 -1
  525. package/dist/.pikku/secrets/index.d.ts +9 -0
  526. package/dist/.pikku/secrets/index.d.ts.map +1 -0
  527. package/dist/.pikku/secrets/index.js +9 -0
  528. package/dist/.pikku/secrets/index.js.map +1 -0
  529. package/dist/.pikku/secrets/pikku-secret-types.gen.d.ts +1 -2
  530. package/dist/.pikku/secrets/pikku-secret-types.gen.d.ts.map +1 -1
  531. package/dist/.pikku/secrets/pikku-secret-types.gen.js +1 -1
  532. package/dist/.pikku/secrets/pikku-secrets.gen.d.ts +8 -12
  533. package/dist/.pikku/secrets/pikku-secrets.gen.d.ts.map +1 -1
  534. package/dist/.pikku/secrets/pikku-secrets.gen.js +7 -9
  535. package/dist/.pikku/secrets/pikku-secrets.gen.js.map +1 -1
  536. package/dist/.pikku/services/pikku-meta-service.gen.d.ts +8 -0
  537. package/dist/.pikku/services/pikku-meta-service.gen.d.ts.map +1 -0
  538. package/dist/.pikku/services/pikku-meta-service.gen.js +10 -0
  539. package/dist/.pikku/services/pikku-meta-service.gen.js.map +1 -0
  540. package/dist/.pikku/setup/index.d.ts +8 -0
  541. package/dist/.pikku/setup/index.d.ts.map +1 -0
  542. package/dist/.pikku/setup/index.js +8 -0
  543. package/dist/.pikku/setup/index.js.map +1 -0
  544. package/dist/.pikku/setup/pikku-setup-types.gen.d.ts +67 -0
  545. package/dist/.pikku/setup/pikku-setup-types.gen.d.ts.map +1 -0
  546. package/dist/.pikku/setup/pikku-setup-types.gen.js +88 -0
  547. package/dist/.pikku/setup/pikku-setup-types.gen.js.map +1 -0
  548. package/dist/.pikku/trigger/index.d.ts +8 -0
  549. package/dist/.pikku/trigger/index.d.ts.map +1 -0
  550. package/dist/.pikku/trigger/index.js +8 -0
  551. package/dist/.pikku/trigger/index.js.map +1 -0
  552. package/dist/.pikku/trigger/pikku-trigger-types.gen.d.ts +5 -36
  553. package/dist/.pikku/trigger/pikku-trigger-types.gen.d.ts.map +1 -1
  554. package/dist/.pikku/trigger/pikku-trigger-types.gen.js +1 -22
  555. package/dist/.pikku/trigger/pikku-trigger-types.gen.js.map +1 -1
  556. package/dist/.pikku/variables/index.d.ts +9 -0
  557. package/dist/.pikku/variables/index.d.ts.map +1 -0
  558. package/dist/.pikku/variables/index.js +9 -0
  559. package/dist/.pikku/variables/index.js.map +1 -0
  560. package/dist/.pikku/variables/pikku-variable-types.gen.d.ts +1 -2
  561. package/dist/.pikku/variables/pikku-variable-types.gen.d.ts.map +1 -1
  562. package/dist/.pikku/variables/pikku-variable-types.gen.js +1 -1
  563. package/dist/.pikku/variables/pikku-variables.gen.d.ts +7 -10
  564. package/dist/.pikku/variables/pikku-variables.gen.d.ts.map +1 -1
  565. package/dist/.pikku/variables/pikku-variables.gen.js +8 -10
  566. package/dist/.pikku/variables/pikku-variables.gen.js.map +1 -1
  567. package/dist/.pikku/workflow/index.d.ts +8 -0
  568. package/dist/.pikku/workflow/index.d.ts.map +1 -0
  569. package/dist/.pikku/workflow/index.js +8 -0
  570. package/dist/.pikku/workflow/index.js.map +1 -0
  571. package/dist/.pikku/workflow/pikku-personas.gen.d.ts +3 -2
  572. package/dist/.pikku/workflow/pikku-personas.gen.d.ts.map +1 -1
  573. package/dist/.pikku/workflow/pikku-personas.gen.js +2 -2
  574. package/dist/.pikku/workflow/pikku-personas.gen.js.map +1 -1
  575. package/dist/.pikku/workflow/pikku-scenario-step-map.gen.d.ts +1 -1
  576. package/dist/.pikku/workflow/pikku-workflow-map.gen.d.ts +1 -1
  577. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +14 -262
  578. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts.map +1 -1
  579. package/dist/.pikku/workflow/pikku-workflow-types.gen.js +2 -65
  580. package/dist/.pikku/workflow/pikku-workflow-types.gen.js.map +1 -1
  581. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +2 -2
  582. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js.map +1 -1
  583. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.d.ts +1 -1
  584. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +1 -1
  585. package/dist/src/functions/addon-readiness.function.d.ts +23 -0
  586. package/dist/src/functions/addon-readiness.function.d.ts.map +1 -0
  587. package/dist/src/functions/addon-readiness.function.js +41 -0
  588. package/dist/src/functions/addon-readiness.function.js.map +1 -0
  589. package/dist/src/functions/agent-credential-check.function.d.ts +4 -4
  590. package/dist/src/functions/agent-credential-check.function.d.ts.map +1 -1
  591. package/dist/src/functions/agent-credential-check.function.js +2 -2
  592. package/dist/src/functions/agent-credential-check.function.js.map +1 -1
  593. package/dist/src/functions/credential-delete.function.d.ts +4 -4
  594. package/dist/src/functions/credential-delete.function.d.ts.map +1 -1
  595. package/dist/src/functions/credential-delete.function.js +1 -1
  596. package/dist/src/functions/credential-delete.function.js.map +1 -1
  597. package/dist/src/functions/credential-get.function.d.ts +4 -4
  598. package/dist/src/functions/credential-get.function.d.ts.map +1 -1
  599. package/dist/src/functions/credential-get.function.js +1 -1
  600. package/dist/src/functions/credential-get.function.js.map +1 -1
  601. package/dist/src/functions/credential-list-users.function.d.ts +4 -4
  602. package/dist/src/functions/credential-list-users.function.d.ts.map +1 -1
  603. package/dist/src/functions/credential-list-users.function.js +1 -1
  604. package/dist/src/functions/credential-list-users.function.js.map +1 -1
  605. package/dist/src/functions/credential-set.function.d.ts +4 -4
  606. package/dist/src/functions/credential-set.function.d.ts.map +1 -1
  607. package/dist/src/functions/credential-set.function.js +1 -1
  608. package/dist/src/functions/credential-set.function.js.map +1 -1
  609. package/dist/src/functions/credential-status.function.d.ts +4 -4
  610. package/dist/src/functions/credential-status.function.d.ts.map +1 -1
  611. package/dist/src/functions/credential-status.function.js +1 -1
  612. package/dist/src/functions/credential-status.function.js.map +1 -1
  613. package/dist/src/functions/credential-users.function.d.ts +4 -4
  614. package/dist/src/functions/credential-users.function.d.ts.map +1 -1
  615. package/dist/src/functions/credential-users.function.js +1 -1
  616. package/dist/src/functions/credential-users.function.js.map +1 -1
  617. package/dist/src/functions/delete-agent-thread.function.d.ts +4 -4
  618. package/dist/src/functions/delete-agent-thread.function.d.ts.map +1 -1
  619. package/dist/src/functions/delete-agent-thread.function.js +1 -1
  620. package/dist/src/functions/delete-agent-thread.function.js.map +1 -1
  621. package/dist/src/functions/delete-scenario-run.function.d.ts +8 -0
  622. package/dist/src/functions/delete-scenario-run.function.d.ts.map +1 -0
  623. package/dist/src/functions/delete-scenario-run.function.js +11 -0
  624. package/dist/src/functions/delete-scenario-run.function.js.map +1 -0
  625. package/dist/src/functions/delete-workflow-run.function.d.ts +4 -4
  626. package/dist/src/functions/delete-workflow-run.function.d.ts.map +1 -1
  627. package/dist/src/functions/delete-workflow-run.function.js +1 -1
  628. package/dist/src/functions/delete-workflow-run.function.js.map +1 -1
  629. package/dist/src/functions/get-addon-categories.function.d.ts +1 -1
  630. package/dist/src/functions/get-addon-categories.function.d.ts.map +1 -1
  631. package/dist/src/functions/get-addon-categories.function.js +1 -1
  632. package/dist/src/functions/get-addon-categories.function.js.map +1 -1
  633. package/dist/src/functions/get-addon-icon.function.d.ts +4 -4
  634. package/dist/src/functions/get-addon-icon.function.d.ts.map +1 -1
  635. package/dist/src/functions/get-addon-icon.function.js +1 -1
  636. package/dist/src/functions/get-addon-icon.function.js.map +1 -1
  637. package/dist/src/functions/get-addon-instances.function.d.ts +4 -4
  638. package/dist/src/functions/get-addon-instances.function.d.ts.map +1 -1
  639. package/dist/src/functions/get-addon-instances.function.js +2 -2
  640. package/dist/src/functions/get-addon-instances.function.js.map +1 -1
  641. package/dist/src/functions/get-addon-meta.function.d.ts +1 -1
  642. package/dist/src/functions/get-addon-meta.function.d.ts.map +1 -1
  643. package/dist/src/functions/get-addon-meta.function.js +1 -1
  644. package/dist/src/functions/get-addon-meta.function.js.map +1 -1
  645. package/dist/src/functions/get-addon-package.function.d.ts +4 -4
  646. package/dist/src/functions/get-addon-package.function.d.ts.map +1 -1
  647. package/dist/src/functions/get-addon-package.function.js +1 -1
  648. package/dist/src/functions/get-addon-package.function.js.map +1 -1
  649. package/dist/src/functions/get-agent-run-scores.function.d.ts +4 -4
  650. package/dist/src/functions/get-agent-run-scores.function.d.ts.map +1 -1
  651. package/dist/src/functions/get-agent-run-scores.function.js +7 -6
  652. package/dist/src/functions/get-agent-run-scores.function.js.map +1 -1
  653. package/dist/src/functions/get-agent-run-scores.function.test.js +2 -2
  654. package/dist/src/functions/get-agent-run-scores.function.test.js.map +1 -1
  655. package/dist/src/functions/get-agent-thread-messages.function.d.ts +4 -4
  656. package/dist/src/functions/get-agent-thread-messages.function.d.ts.map +1 -1
  657. package/dist/src/functions/get-agent-thread-messages.function.js +1 -1
  658. package/dist/src/functions/get-agent-thread-messages.function.js.map +1 -1
  659. package/dist/src/functions/get-agent-thread-runs.function.d.ts +4 -4
  660. package/dist/src/functions/get-agent-thread-runs.function.d.ts.map +1 -1
  661. package/dist/src/functions/get-agent-thread-runs.function.js +3 -3
  662. package/dist/src/functions/get-agent-thread-runs.function.js.map +1 -1
  663. package/dist/src/functions/get-agent-threads.function.d.ts +4 -4
  664. package/dist/src/functions/get-agent-threads.function.d.ts.map +1 -1
  665. package/dist/src/functions/get-agent-threads.function.js +3 -3
  666. package/dist/src/functions/get-agent-threads.function.js.map +1 -1
  667. package/dist/src/functions/get-agent-threads.function.test.js +1 -1
  668. package/dist/src/functions/get-agent-threads.function.test.js.map +1 -1
  669. package/dist/src/functions/get-all-meta.function.d.ts +1 -1
  670. package/dist/src/functions/get-all-meta.function.d.ts.map +1 -1
  671. package/dist/src/functions/get-all-meta.function.js +1 -1
  672. package/dist/src/functions/get-all-meta.function.js.map +1 -1
  673. package/dist/src/functions/get-audit-filters.function.d.ts +1 -1
  674. package/dist/src/functions/get-audit-filters.function.d.ts.map +1 -1
  675. package/dist/src/functions/get-audit-filters.function.js +1 -1
  676. package/dist/src/functions/get-audit-filters.function.js.map +1 -1
  677. package/dist/src/functions/get-audits.function.d.ts +2 -2
  678. package/dist/src/functions/get-audits.function.d.ts.map +1 -1
  679. package/dist/src/functions/get-audits.function.js +1 -1
  680. package/dist/src/functions/get-audits.function.js.map +1 -1
  681. package/dist/src/functions/get-auth-providers.function.d.ts +1 -1
  682. package/dist/src/functions/get-auth-providers.function.d.ts.map +1 -1
  683. package/dist/src/functions/get-auth-providers.function.js +1 -1
  684. package/dist/src/functions/get-auth-providers.function.js.map +1 -1
  685. package/dist/src/functions/get-channel-snippets.function.d.ts +4 -4
  686. package/dist/src/functions/get-channel-snippets.function.d.ts.map +1 -1
  687. package/dist/src/functions/get-channel-snippets.function.js +1 -1
  688. package/dist/src/functions/get-channel-snippets.function.js.map +1 -1
  689. package/dist/src/functions/get-db-schema.function.d.ts +1 -1
  690. package/dist/src/functions/get-db-schema.function.d.ts.map +1 -1
  691. package/dist/src/functions/get-db-schema.function.js +2 -2
  692. package/dist/src/functions/get-db-schema.function.js.map +1 -1
  693. package/dist/src/functions/get-functions-meta.function.d.ts +1 -1
  694. package/dist/src/functions/get-functions-meta.function.d.ts.map +1 -1
  695. package/dist/src/functions/get-functions-meta.function.js +1 -1
  696. package/dist/src/functions/get-functions-meta.function.js.map +1 -1
  697. package/dist/src/functions/get-installed-addons.function.d.ts +1 -1
  698. package/dist/src/functions/get-installed-addons.function.d.ts.map +1 -1
  699. package/dist/src/functions/get-installed-addons.function.js +2 -2
  700. package/dist/src/functions/get-installed-addons.function.js.map +1 -1
  701. package/dist/src/functions/get-installed-package.function.d.ts +4 -4
  702. package/dist/src/functions/get-installed-package.function.d.ts.map +1 -1
  703. package/dist/src/functions/get-installed-package.function.js +11 -4
  704. package/dist/src/functions/get-installed-package.function.js.map +1 -1
  705. package/dist/src/functions/get-installed-package.function.test.d.ts +2 -0
  706. package/dist/src/functions/get-installed-package.function.test.d.ts.map +1 -0
  707. package/dist/src/functions/get-installed-package.function.test.js +35 -0
  708. package/dist/src/functions/get-installed-package.function.test.js.map +1 -0
  709. package/dist/src/functions/get-knowledge.function.d.ts +1 -1
  710. package/dist/src/functions/get-knowledge.function.d.ts.map +1 -1
  711. package/dist/src/functions/get-knowledge.function.js +2 -2
  712. package/dist/src/functions/get-knowledge.function.js.map +1 -1
  713. package/dist/src/functions/get-knowledge.function.test.js +1 -1
  714. package/dist/src/functions/get-my-access.function.d.ts +4 -4
  715. package/dist/src/functions/get-my-access.function.d.ts.map +1 -1
  716. package/dist/src/functions/get-my-access.function.js +1 -1
  717. package/dist/src/functions/get-my-access.function.js.map +1 -1
  718. package/dist/src/functions/get-openapi-categories.function.d.ts +1 -1
  719. package/dist/src/functions/get-openapi-categories.function.d.ts.map +1 -1
  720. package/dist/src/functions/get-openapi-categories.function.js +1 -1
  721. package/dist/src/functions/get-openapi-categories.function.js.map +1 -1
  722. package/dist/src/functions/get-openapi-detail.function.d.ts +4 -4
  723. package/dist/src/functions/get-openapi-detail.function.d.ts.map +1 -1
  724. package/dist/src/functions/get-openapi-detail.function.js +1 -1
  725. package/dist/src/functions/get-openapi-detail.function.js.map +1 -1
  726. package/dist/src/functions/get-openapis.function.d.ts +4 -4
  727. package/dist/src/functions/get-openapis.function.d.ts.map +1 -1
  728. package/dist/src/functions/get-openapis.function.js +1 -1
  729. package/dist/src/functions/get-openapis.function.js.map +1 -1
  730. package/dist/src/functions/get-scenario-artifact.function.d.ts +19 -0
  731. package/dist/src/functions/get-scenario-artifact.function.d.ts.map +1 -0
  732. package/dist/src/functions/get-scenario-artifact.function.js +30 -0
  733. package/dist/src/functions/get-scenario-artifact.function.js.map +1 -0
  734. package/dist/src/functions/get-scenario-run.function.d.ts +9 -0
  735. package/dist/src/functions/get-scenario-run.function.d.ts.map +1 -0
  736. package/dist/src/functions/get-scenario-run.function.js +14 -0
  737. package/dist/src/functions/get-scenario-run.function.js.map +1 -0
  738. package/dist/src/functions/get-schema.function.d.ts +4 -4
  739. package/dist/src/functions/get-schema.function.d.ts.map +1 -1
  740. package/dist/src/functions/get-schema.function.js +1 -1
  741. package/dist/src/functions/get-schema.function.js.map +1 -1
  742. package/dist/src/functions/get-scorers.function.d.ts +1 -1
  743. package/dist/src/functions/get-scorers.function.d.ts.map +1 -1
  744. package/dist/src/functions/get-scorers.function.js +2 -2
  745. package/dist/src/functions/get-scorers.function.js.map +1 -1
  746. package/dist/src/functions/get-security-audit.function.d.ts +2 -2
  747. package/dist/src/functions/get-security-audit.function.d.ts.map +1 -1
  748. package/dist/src/functions/get-security-audit.function.js +1 -1
  749. package/dist/src/functions/get-security-audit.function.js.map +1 -1
  750. package/dist/src/functions/get-security-audit.function.test.js +3 -1
  751. package/dist/src/functions/get-security-audit.function.test.js.map +1 -1
  752. package/dist/src/functions/get-state-diff.function.d.ts +4 -4
  753. package/dist/src/functions/get-state-diff.function.d.ts.map +1 -1
  754. package/dist/src/functions/get-state-diff.function.js +1 -1
  755. package/dist/src/functions/get-state-diff.function.js.map +1 -1
  756. package/dist/src/functions/get-surface.function.d.ts +3 -0
  757. package/dist/src/functions/get-surface.function.d.ts.map +1 -0
  758. package/dist/src/functions/get-surface.function.js +10 -0
  759. package/dist/src/functions/get-surface.function.js.map +1 -0
  760. package/dist/src/functions/get-webhook-delivery.function.d.ts +4 -4
  761. package/dist/src/functions/get-webhook-delivery.function.d.ts.map +1 -1
  762. package/dist/src/functions/get-webhook-delivery.function.js +1 -1
  763. package/dist/src/functions/get-webhook-delivery.function.js.map +1 -1
  764. package/dist/src/functions/get-workflow-meta-by-id.function.d.ts +7 -7
  765. package/dist/src/functions/get-workflow-meta-by-id.function.d.ts.map +1 -1
  766. package/dist/src/functions/get-workflow-meta-by-id.function.js +1 -1
  767. package/dist/src/functions/get-workflow-meta-by-id.function.js.map +1 -1
  768. package/dist/src/functions/get-workflow-run-history.function.d.ts +4 -4
  769. package/dist/src/functions/get-workflow-run-history.function.d.ts.map +1 -1
  770. package/dist/src/functions/get-workflow-run-history.function.js +1 -1
  771. package/dist/src/functions/get-workflow-run-history.function.js.map +1 -1
  772. package/dist/src/functions/get-workflow-run-names.function.d.ts +1 -1
  773. package/dist/src/functions/get-workflow-run-names.function.d.ts.map +1 -1
  774. package/dist/src/functions/get-workflow-run-names.function.js +1 -1
  775. package/dist/src/functions/get-workflow-run-names.function.js.map +1 -1
  776. package/dist/src/functions/get-workflow-run-steps.function.d.ts +4 -4
  777. package/dist/src/functions/get-workflow-run-steps.function.d.ts.map +1 -1
  778. package/dist/src/functions/get-workflow-run-steps.function.js +1 -1
  779. package/dist/src/functions/get-workflow-run-steps.function.js.map +1 -1
  780. package/dist/src/functions/get-workflow-run.function.d.ts +4 -4
  781. package/dist/src/functions/get-workflow-run.function.d.ts.map +1 -1
  782. package/dist/src/functions/get-workflow-run.function.js +1 -1
  783. package/dist/src/functions/get-workflow-run.function.js.map +1 -1
  784. package/dist/src/functions/get-workflow-runs.function.d.ts +4 -4
  785. package/dist/src/functions/get-workflow-runs.function.d.ts.map +1 -1
  786. package/dist/src/functions/get-workflow-runs.function.js +1 -1
  787. package/dist/src/functions/get-workflow-runs.function.js.map +1 -1
  788. package/dist/src/functions/get-workflow-version.function.d.ts +4 -4
  789. package/dist/src/functions/get-workflow-version.function.d.ts.map +1 -1
  790. package/dist/src/functions/get-workflow-version.function.js +1 -1
  791. package/dist/src/functions/get-workflow-version.function.js.map +1 -1
  792. package/dist/src/functions/install-addon.function.d.ts +19 -4
  793. package/dist/src/functions/install-addon.function.d.ts.map +1 -1
  794. package/dist/src/functions/install-addon.function.js +21 -11
  795. package/dist/src/functions/install-addon.function.js.map +1 -1
  796. package/dist/src/functions/install-addon.function.test.js +50 -4
  797. package/dist/src/functions/install-addon.function.test.js.map +1 -1
  798. package/dist/src/functions/install-openapi-addon.function.d.ts +4 -4
  799. package/dist/src/functions/install-openapi-addon.function.d.ts.map +1 -1
  800. package/dist/src/functions/install-openapi-addon.function.js +3 -3
  801. package/dist/src/functions/install-openapi-addon.function.js.map +1 -1
  802. package/dist/src/functions/list-scenario-runs.function.d.ts +9 -0
  803. package/dist/src/functions/list-scenario-runs.function.d.ts.map +1 -0
  804. package/dist/src/functions/list-scenario-runs.function.js +14 -0
  805. package/dist/src/functions/list-scenario-runs.function.js.map +1 -0
  806. package/dist/src/functions/list-webhook-deliveries.function.d.ts +4 -4
  807. package/dist/src/functions/list-webhook-deliveries.function.d.ts.map +1 -1
  808. package/dist/src/functions/list-webhook-deliveries.function.js +1 -1
  809. package/dist/src/functions/list-webhook-deliveries.function.js.map +1 -1
  810. package/dist/src/functions/ping.function.d.ts +4 -4
  811. package/dist/src/functions/ping.function.d.ts.map +1 -1
  812. package/dist/src/functions/ping.function.js +1 -1
  813. package/dist/src/functions/ping.function.js.map +1 -1
  814. package/dist/src/functions/read-agent-source.function.d.ts +4 -4
  815. package/dist/src/functions/read-agent-source.function.d.ts.map +1 -1
  816. package/dist/src/functions/read-agent-source.function.js +2 -2
  817. package/dist/src/functions/read-agent-source.function.js.map +1 -1
  818. package/dist/src/functions/read-function-body.function.d.ts +4 -4
  819. package/dist/src/functions/read-function-body.function.d.ts.map +1 -1
  820. package/dist/src/functions/read-function-body.function.js +2 -2
  821. package/dist/src/functions/read-function-body.function.js.map +1 -1
  822. package/dist/src/functions/read-function-source.function.d.ts +4 -4
  823. package/dist/src/functions/read-function-source.function.d.ts.map +1 -1
  824. package/dist/src/functions/read-function-source.function.js +2 -2
  825. package/dist/src/functions/read-function-source.function.js.map +1 -1
  826. package/dist/src/functions/render-email-preview.function.d.ts +1 -1
  827. package/dist/src/functions/render-email-preview.function.d.ts.map +1 -1
  828. package/dist/src/functions/render-email-preview.function.js +2 -2
  829. package/dist/src/functions/render-email-preview.function.js.map +1 -1
  830. package/dist/src/functions/render-email-preview.function.test.js +1 -1
  831. package/dist/src/functions/render-email-preview.function.test.js.map +1 -1
  832. package/dist/src/functions/render-email-template.utils.d.ts.map +1 -1
  833. package/dist/src/functions/render-email-template.utils.js.map +1 -1
  834. package/dist/src/functions/render-email-template.utils.test.js.map +1 -1
  835. package/dist/src/functions/run-security-audit.function.d.ts +2 -2
  836. package/dist/src/functions/run-security-audit.function.d.ts.map +1 -1
  837. package/dist/src/functions/run-security-audit.function.js +1 -1
  838. package/dist/src/functions/run-security-audit.function.js.map +1 -1
  839. package/dist/src/functions/run-security-audit.function.test.d.ts +2 -0
  840. package/dist/src/functions/run-security-audit.function.test.d.ts.map +1 -0
  841. package/dist/src/functions/run-security-audit.function.test.js +98 -0
  842. package/dist/src/functions/run-security-audit.function.test.js.map +1 -0
  843. package/dist/src/functions/scope-add-scope-to-user.function.d.ts +4 -4
  844. package/dist/src/functions/scope-add-scope-to-user.function.d.ts.map +1 -1
  845. package/dist/src/functions/scope-add-scope-to-user.function.js +1 -1
  846. package/dist/src/functions/scope-add-scope-to-user.function.js.map +1 -1
  847. package/dist/src/functions/scope-add-user-to-role.function.d.ts +4 -4
  848. package/dist/src/functions/scope-add-user-to-role.function.d.ts.map +1 -1
  849. package/dist/src/functions/scope-add-user-to-role.function.js +1 -1
  850. package/dist/src/functions/scope-add-user-to-role.function.js.map +1 -1
  851. package/dist/src/functions/scope-create-role.function.d.ts +4 -4
  852. package/dist/src/functions/scope-create-role.function.d.ts.map +1 -1
  853. package/dist/src/functions/scope-create-role.function.js +1 -1
  854. package/dist/src/functions/scope-create-role.function.js.map +1 -1
  855. package/dist/src/functions/scope-delete-role.function.d.ts +4 -4
  856. package/dist/src/functions/scope-delete-role.function.d.ts.map +1 -1
  857. package/dist/src/functions/scope-delete-role.function.js +1 -1
  858. package/dist/src/functions/scope-delete-role.function.js.map +1 -1
  859. package/dist/src/functions/scope-list-declared.function.d.ts +4 -4
  860. package/dist/src/functions/scope-list-declared.function.d.ts.map +1 -1
  861. package/dist/src/functions/scope-list-declared.function.js +1 -1
  862. package/dist/src/functions/scope-list-declared.function.js.map +1 -1
  863. package/dist/src/functions/scope-list-roles.function.d.ts +4 -4
  864. package/dist/src/functions/scope-list-roles.function.d.ts.map +1 -1
  865. package/dist/src/functions/scope-list-roles.function.js +1 -1
  866. package/dist/src/functions/scope-list-roles.function.js.map +1 -1
  867. package/dist/src/functions/scope-list-user-roles.function.d.ts +4 -4
  868. package/dist/src/functions/scope-list-user-roles.function.d.ts.map +1 -1
  869. package/dist/src/functions/scope-list-user-roles.function.js +1 -1
  870. package/dist/src/functions/scope-list-user-roles.function.js.map +1 -1
  871. package/dist/src/functions/scope-remove-scope-from-user.function.d.ts +4 -4
  872. package/dist/src/functions/scope-remove-scope-from-user.function.d.ts.map +1 -1
  873. package/dist/src/functions/scope-remove-scope-from-user.function.js +1 -1
  874. package/dist/src/functions/scope-remove-scope-from-user.function.js.map +1 -1
  875. package/dist/src/functions/scope-remove-user-from-role.function.d.ts +4 -4
  876. package/dist/src/functions/scope-remove-user-from-role.function.d.ts.map +1 -1
  877. package/dist/src/functions/scope-remove-user-from-role.function.js +1 -1
  878. package/dist/src/functions/scope-remove-user-from-role.function.js.map +1 -1
  879. package/dist/src/functions/scope-set-role-scopes.function.d.ts +4 -4
  880. package/dist/src/functions/scope-set-role-scopes.function.d.ts.map +1 -1
  881. package/dist/src/functions/scope-set-role-scopes.function.js +1 -1
  882. package/dist/src/functions/scope-set-role-scopes.function.js.map +1 -1
  883. package/dist/src/functions/secret-get.function.d.ts +4 -4
  884. package/dist/src/functions/secret-get.function.d.ts.map +1 -1
  885. package/dist/src/functions/secret-get.function.js +1 -1
  886. package/dist/src/functions/secret-get.function.js.map +1 -1
  887. package/dist/src/functions/secret-has.function.d.ts +4 -4
  888. package/dist/src/functions/secret-has.function.d.ts.map +1 -1
  889. package/dist/src/functions/secret-has.function.js +1 -1
  890. package/dist/src/functions/secret-has.function.js.map +1 -1
  891. package/dist/src/functions/secret-set.function.d.ts +4 -4
  892. package/dist/src/functions/secret-set.function.d.ts.map +1 -1
  893. package/dist/src/functions/secret-set.function.js +1 -1
  894. package/dist/src/functions/secret-set.function.js.map +1 -1
  895. package/dist/src/functions/stream-workflow-run.function.d.ts +4 -4
  896. package/dist/src/functions/stream-workflow-run.function.d.ts.map +1 -1
  897. package/dist/src/functions/stream-workflow-run.function.js +1 -1
  898. package/dist/src/functions/stream-workflow-run.function.js.map +1 -1
  899. package/dist/src/functions/update-agent-config.function.d.ts +4 -4
  900. package/dist/src/functions/update-agent-config.function.d.ts.map +1 -1
  901. package/dist/src/functions/update-agent-config.function.js +2 -2
  902. package/dist/src/functions/update-agent-config.function.js.map +1 -1
  903. package/dist/src/functions/update-dependency.function.d.ts +5 -5
  904. package/dist/src/functions/update-dependency.function.d.ts.map +1 -1
  905. package/dist/src/functions/update-dependency.function.js +1 -1
  906. package/dist/src/functions/update-dependency.function.js.map +1 -1
  907. package/dist/src/functions/update-dependency.function.test.d.ts +2 -0
  908. package/dist/src/functions/update-dependency.function.test.d.ts.map +1 -0
  909. package/dist/src/functions/update-dependency.function.test.js +181 -0
  910. package/dist/src/functions/update-dependency.function.test.js.map +1 -0
  911. package/dist/src/functions/update-email-template.function.d.ts +4 -4
  912. package/dist/src/functions/update-email-template.function.d.ts.map +1 -1
  913. package/dist/src/functions/update-email-template.function.js +2 -3
  914. package/dist/src/functions/update-email-template.function.js.map +1 -1
  915. package/dist/src/functions/update-function-body.function.d.ts +4 -4
  916. package/dist/src/functions/update-function-body.function.d.ts.map +1 -1
  917. package/dist/src/functions/update-function-body.function.js +2 -2
  918. package/dist/src/functions/update-function-body.function.js.map +1 -1
  919. package/dist/src/functions/update-function-config.function.d.ts +4 -4
  920. package/dist/src/functions/update-function-config.function.d.ts.map +1 -1
  921. package/dist/src/functions/update-function-config.function.js +2 -2
  922. package/dist/src/functions/update-function-config.function.js.map +1 -1
  923. package/dist/src/lib/addon-readiness.d.ts +26 -0
  924. package/dist/src/lib/addon-readiness.d.ts.map +1 -0
  925. package/dist/src/lib/addon-readiness.js +82 -0
  926. package/dist/src/lib/addon-readiness.js.map +1 -0
  927. package/dist/src/lib/addon-readiness.test.d.ts +2 -0
  928. package/dist/src/lib/addon-readiness.test.d.ts.map +1 -0
  929. package/dist/src/lib/addon-readiness.test.js +118 -0
  930. package/dist/src/lib/addon-readiness.test.js.map +1 -0
  931. package/dist/src/lib/audit-exec.d.ts +1 -1
  932. package/dist/src/lib/audit-exec.d.ts.map +1 -1
  933. package/dist/src/lib/audit-exec.js.map +1 -1
  934. package/dist/src/lib/audit-exec.test.d.ts +2 -0
  935. package/dist/src/lib/audit-exec.test.d.ts.map +1 -0
  936. package/dist/src/lib/audit-exec.test.js +97 -0
  937. package/dist/src/lib/audit-exec.test.js.map +1 -0
  938. package/dist/src/lib/derive-instance-overrides.d.ts +6 -0
  939. package/dist/src/lib/derive-instance-overrides.d.ts.map +1 -1
  940. package/dist/src/lib/derive-instance-overrides.js +35 -2
  941. package/dist/src/lib/derive-instance-overrides.js.map +1 -1
  942. package/dist/src/lib/derive-instance-overrides.test.js +27 -1
  943. package/dist/src/lib/derive-instance-overrides.test.js.map +1 -1
  944. package/dist/src/lib/resolve-audit-users.d.ts +1 -1
  945. package/dist/src/lib/resolve-audit-users.d.ts.map +1 -1
  946. package/dist/src/lib/resolve-package-manager.d.ts +11 -0
  947. package/dist/src/lib/resolve-package-manager.d.ts.map +1 -1
  948. package/dist/src/lib/resolve-package-manager.js +49 -20
  949. package/dist/src/lib/resolve-package-manager.js.map +1 -1
  950. package/dist/src/lib/resolve-package-manager.test.js +39 -1
  951. package/dist/src/lib/resolve-package-manager.test.js.map +1 -1
  952. package/dist/src/lib/surface.d.ts +30 -0
  953. package/dist/src/lib/surface.d.ts.map +1 -0
  954. package/dist/src/lib/surface.js +47 -0
  955. package/dist/src/lib/surface.js.map +1 -0
  956. package/dist/src/lib/surface.test.d.ts +2 -0
  957. package/dist/src/lib/surface.test.d.ts.map +1 -0
  958. package/dist/src/lib/surface.test.js +99 -0
  959. package/dist/src/lib/surface.test.js.map +1 -0
  960. package/dist/src/lib/surface.types.d.ts +59 -0
  961. package/dist/src/lib/surface.types.d.ts.map +1 -0
  962. package/dist/src/lib/surface.types.js +2 -0
  963. package/dist/src/lib/surface.types.js.map +1 -0
  964. package/dist/src/scopes.js +21 -59
  965. package/dist/src/scopes.js.map +1 -1
  966. package/dist/src/services/addon-readiness.service.d.ts +15 -0
  967. package/dist/src/services/addon-readiness.service.d.ts.map +1 -0
  968. package/dist/src/services/addon-readiness.service.js +15 -0
  969. package/dist/src/services/addon-readiness.service.js.map +1 -0
  970. package/dist/src/services/addon.service.d.ts +1 -1
  971. package/dist/src/services/addon.service.d.ts.map +1 -1
  972. package/dist/src/services/code-edit.service.test.js +2 -2
  973. package/dist/src/services/db-schema.service.d.ts +1 -1
  974. package/dist/src/services/db-schema.service.d.ts.map +1 -1
  975. package/dist/src/services.d.ts +1 -1
  976. package/dist/src/services.d.ts.map +1 -1
  977. package/dist/src/services.js +18 -12
  978. package/dist/src/services.js.map +1 -1
  979. package/dist/types/application-types.d.ts +11 -1
  980. package/package.json +17 -20
  981. package/dist/.pikku/schemas/schemas/GetAuditFiltersOutput.schema.json +0 -1
  982. package/dist/.pikku/schemas/schemas/GetAuditsInput.schema.json +0 -1
  983. package/dist/.pikku/schemas/schemas/GetAuditsOutput.schema.json +0 -1
package/CHANGELOG.md ADDED
@@ -0,0 +1,2002 @@
1
+ ## 0.12.43
2
+
3
+ ### Patch Changes
4
+
5
+ - 7722ceb: Split the addon leaf so an application cannot shadow a linked addon's own
6
+
7
+ An addon authored its services through `#pikku/addon`, and so did an
8
+ application installing one. Node keeps those apart — `#pikku/*` is a
9
+ package-private subpath import, resolved against the addon's own
10
+ `package.json` — but tsconfig `paths` are global to a tsx process, and every
11
+ runtime template maps `#pikku/*` onto a sibling package. A linked addon's
12
+ `#pikku/addon` was resolved against the _application's_ leaf, which holds the
13
+ install half and none of the authoring exports, and every template failed to
14
+ boot with `does not provide an export named 'pikkuAddonServices'`.
15
+
16
+ The authoring half now sits at `#pikku/addon/setup`. An application generates a
17
+ flat `.pikku/<leaf>`, so there is nothing there for that specifier to match and
18
+ the resolver falls back to Node, which reads the addon's own imports. Addons
19
+ declaring themselves import `pikkuAddonConfig`, `pikkuAddonServices` and
20
+ `pikkuAddonWireServices` from `#pikku/addon/setup`; `wireAddon` and
21
+ `wireRemoteAddon` stay at `#pikku/addon`.
22
+
23
+ `wireAddon` and `wireRemoteAddon` also move off `@pikku/core/rpc` onto
24
+ `@pikku/core/addon`. Being reached over rpc is how an addon is called rather
25
+ than what it is, and it put the whole addon surface behind the rpc subpath for
26
+ consumers that only wanted to install one.
27
+
28
+ - 20d8a39: Split application administration out of the console addon into a new
29
+ `@pikku/addon-admin`.
30
+
31
+ `@pikku/addon-console` reads generated metadata, project source and knowledge
32
+ notes from disk, so it only ever runs where there is a project checkout and a
33
+ dev server. That made the console the only way to reach capabilities that have
34
+ nothing to do with a console — listing users, composing roles, granting scopes,
35
+ managing credentials, reading the audit trail — none of which touch a
36
+ filesystem. Those now live in `@pikku/addon-admin`, which depends on nothing but
37
+ `@pikku/core` and `@pikku/better-auth` and can be wired into a deployed
38
+ serverless unit:
39
+
40
+ ```ts
41
+ wireAddon({ name: 'admin', package: '@pikku/addon-admin' })
42
+ ```
43
+
44
+ It ships the user directory (`admin:listUsers`, `createUser`, `setUserBanned`,
45
+ `removeUser`, `revokeUserSessions`, `setUserPassword`), role and scope
46
+ administration, credential administration and the audit trail.
47
+ `console:getMyAccess` stays where it is: the console reads it to decide what to
48
+ render, and it must not need a second addon wired to boot.
49
+ Each function carries its own `admin:*` scope; the addon deliberately declares
50
+ no `scopes` on `wireAddon`, because addon scopes are required _in addition to_ a
51
+ function's own and an addon-level `admin` would force the umbrella grant on a
52
+ caller granted only `admin:users:list`.
53
+
54
+ Breaking for anyone calling these RPCs by name or granting their scopes:
55
+
56
+ - `console:getAudits`, `console:getAuditFilters`, `console:scope*` and
57
+ `console:credential*` are now `admin:*`.
58
+ - `pikku:console:audit:read` is now `admin:audit:read`,
59
+ `pikku:console:scopes:{read,manage}` are now `admin:scopes:{read,manage}`, and
60
+ `pikku:console:credentials:{read,manage}` are now
61
+ `admin:credentials:{read,manage}`.
62
+ - The `admin` scope tree gains `credentials:{read,manage}`, `scopes` and
63
+ `audit`. A bare `admin` grant now also covers reading the audit trail and
64
+ administering roles; a role that means to exclude those must spell out the
65
+ leaves it wants.
66
+ - `scaffold.console` gates the console addon on `pikku:console` rather than
67
+ `admin`, since `admin` is now the other addon's tree, and `@pikku/console`'s
68
+ own `AuthGate` requires the same root (`isAdmin` on the auth context is now
69
+ `canUseConsole`). Grant `pikku:console` to whoever should reach the console —
70
+ the two are separate decisions, and a host may hand someone the console
71
+ without handing them the user directory.
72
+
73
+ `credentialListUsers` now reports the credentials each user actually holds
74
+ rather than a matrix against the declared set, which is what removed its last
75
+ dependency on the on-disk metadata.
76
+
77
+ The `scaffold.userAdmin` generator is superseded by the addon and left in place
78
+ for hosts still on it. Its copy of the `admin` scope tree — and the one exported
79
+ as `ADMIN_SCOPE_TREE` from `@pikku/better-auth` — stay byte-identical to the
80
+ addon's, as pikku still requires of a shared scope root.
81
+
82
+ - 266e3bc: One door per name: `@pikku/core/ecosystem/*` and the package root are gone
83
+
84
+ `@pikku/core` published every module twice. `ecosystem/http` re-exported
85
+ `./http`, `ecosystem/services` re-exported `./services`, and a name was
86
+ reachable through either — so every addition had to be made in two places, and a
87
+ consumer's import said nothing about what it actually used. The package root was
88
+ the same problem at a larger scale: a single barrel of 206 names that no bundler
89
+ could take apart, and the one specifier that revealed nothing at all.
90
+
91
+ Both are deleted. Every name now lives on the subpath that owns it, and every
92
+ import carries that subpath — `@pikku/core/http`, `@pikku/core/services`,
93
+ `@pikku/core/errors`, `@pikku/core/types`.
94
+
95
+ Deleting the facades meant the raw subpaths had to become a superset of them,
96
+ which they were not: the facade tree had accumulated 25 names with no raw home
97
+ and about 26 more filed under a different area than the module they came from.
98
+ Those names moved to the area that owns them, and three areas were published as
99
+ new entry points rather than left on a root that is going away — `./types` (the
100
+ shared type surface, the largest single destination), `./state` and
101
+ `./classification`.
102
+
103
+ `./classification` is one door onto one subject: what a value is and how it must
104
+ be handled. Its three halves would each have been an entry point — the brands
105
+ and manifest types, the stored-form helpers (`hashToken`, `unsafeAsSealed` and
106
+ friends), and `SecretValue` — split by whether a name happens to be a type or a
107
+ value, which is the same defect as the facades. The duration and versioned-id
108
+ helpers went to `./utils`, which already published, and `PikkuRequest` went to
109
+ `./function`: it is the transport-agnostic request base, not an HTTP one — HTTP
110
+ has `PikkuHTTPAbstractRequest`, and the only thing outside core that extends
111
+ `PikkuRequest` is Azure's timer request.
112
+
113
+ `./types` inherited the root barrel's habit before it inherited its contents, so
114
+ the names with an owner elsewhere were moved off it. The middleware types and the
115
+ five middleware factories — `pikkuMiddleware`, `pikkuMiddlewareFactory`,
116
+ `pikkuChannelMiddleware`, `pikkuChannelMiddlewareFactory` and
117
+ `pikkuAgentMiddleware`, runtime values on a types entry point — are now
118
+ `@pikku/core/middleware`; the function meta types are `@pikku/core/function`;
119
+ `SerializedError` is `@pikku/core/errors`; and the generic TypeScript helpers
120
+ (`MakeRequired`, `PickRequired`, `PickOptional`, `RequireAtLeastOne`,
121
+ `JSONPrimitive`, `JSONValue`) are `@pikku/core/utils`. What is left on `./types`
122
+ is the vocabulary the wirings share, which no single module owns.
123
+
124
+ `pikku` was itself a root barrel — `export * from '@pikku/core'` — and
125
+ now exports only the services it bundles.
126
+
127
+ One module survives at the old specifier, and only for the bootstrap:
128
+ `packages/cli` is generated by the _published_ CLI pinned in its `build.sh`, and
129
+ that CLI still writes a bare `@pikku/core` into the files it generates for the
130
+ CLI itself. `bootstrap-compat/root.ts` carries the eight types it names, a test
131
+ in core fails if that list grows, and it goes when the pin moves to a CLI
132
+ released from this branch. The adapter names the pinned CLI reaches for —
133
+ `pikkuState` and `CreateWireServices` — are rewritten to `@pikku/core/state` and
134
+ `@pikku/core/types` by the same `build.sh` patch pass, so no second shim is
135
+ needed for them.
136
+
137
+ A guard test keeps the root shut: it parses imports and rejects a bare
138
+ `@pikku/core` rather than grepping for it, because several tests hold a user's
139
+ file as a template literal, where `import … from '@pikku/core'` is fixture text
140
+ rather than an import this repo makes.
141
+
142
+ An agent scaffold a project generated under an older CLI is refreshed rather
143
+ than left to fail: `pikku all` already deleted one importing an entry point
144
+ `@pikku/core` no longer publishes, and the `#pikku` hub joins that list.
145
+ Without it a project that scaffolds the agent endpoint but
146
+ declares no agents keeps the old file forever — the generator that would rewrite
147
+ it only runs when agents exist, and the file being present is what stops it
148
+ being regenerated as missing.
149
+
150
+ `pikku new addon` also wrote a tsconfig `paths` map naming only the deleted hub.
151
+ An addon's `imports` map points into `dist`, so `paths` is what resolves
152
+ `#pikku/<leaf>` for the addon's own source build — it now names the two leaf
153
+ patterns, in both the addon and its test harness.
154
+
155
+ - 786dae5: Bump every dependency whose latest release is a major across the monorepo, and
156
+ port the code the majors broke: `cookie` 2's `parseCookie`/`stringifySetCookie`
157
+ API in `@pikku/core` and the three runtime HTTP adapters, and assistant-ui 0.15's
158
+ store client in `@pikku/assistant-ui`.
159
+ - 6eef0a0: Bump every dependency to its latest compatible minor/patch across the monorepo.
160
+ - 892100b: Generate the meta service under `services/` and reach it through `#pikku`
161
+
162
+ `pikku-meta-service.gen.ts` was written loose at the root of the output dir
163
+ while every wiring type sat in its own subdir, and both call sites that consume
164
+ it reached past the `#pikku` imports map to a relative path into the generated
165
+ tree — `e2e/src/services.ts` with a static import, the `functions` template with
166
+ a dynamic `await import('../.pikku/pikku-meta-service.gen.js')`. It now lands at
167
+ `services/pikku-meta-service.gen.ts` and is imported as
168
+ `#pikku/services/pikku-meta-service.gen.js`, matching the `<dir>/pikku-<x>.gen.js`
169
+ shape the rest of the generated tree already uses. Bootstrap prunes the old root
170
+ file, since a project generated before the move would otherwise keep compiling
171
+ it. The console addon's "metaService is required" error names the new path.
172
+
173
+ The `functions` template had no `imports` map at all, so its generated-code
174
+ imports were all relative; it now declares `"#pikku/*": "./.pikku/*"` and its
175
+ `services.ts` goes through it.
176
+
177
+ - f4cd54e: Find the package manager at the workspace root, and stop the impersonation banner covering the page
178
+
179
+ Installing an addon from the console detected the package manager by looking
180
+ only in the pikku root — the directory holding `pikku.config.json`. In a
181
+ monorepo that is a package directory carrying neither a `packageManager` field
182
+ nor a lockfile, so detection fell through to its `npm` default and ran
183
+ `npm install` inside a yarn workspace, which dies on
184
+ `Unsupported URL Type "workspace:"`. Detection now walks up to the workspace
185
+ root, where both signals actually live, and a declared manager anywhere up the
186
+ tree outranks a lockfile below it — a stray `package-lock.json` in a
187
+ sub-package no longer overrides the root's declared yarn.
188
+
189
+ The impersonation banner is fixed to the top of the window but reserved no
190
+ space, so it painted over the top ~34px of every page and swallowed clicks on
191
+ anything the page put there. It now publishes its measured height as
192
+ `--app-banner-inset-top` and the app layout pads by it, following the same
193
+ idiom the nav dock already uses for the edges it takes.
194
+
195
+ - 266e3bc: `#pikku` is a namespace, not a module: one subpath per wiring
196
+
197
+ The bare `#pikku` specifier resolved to `.pikku/pikku-types.gen.ts`, a hub that
198
+ re-exported all twelve wiring leaves with `export *` — undoing the split the
199
+ leaves exist for, each of which still says so in its own generated header
200
+ ("HTTP-specific type definitions for tree-shaking optimization"). Reaching that
201
+ hub put 33 distinct `@pikku/core` subpaths into the module graph, and neither
202
+ consumer could drop them again: bundlers keep `export *` chains because the app
203
+ declares no `sideEffects`, and Node and tsx do not tree-shake at all, so an app
204
+ with no queues still executed `@pikku/core/queue` at boot.
205
+
206
+ The hub is gone. An app now imports the leaf the name belongs to —
207
+ `#pikku/function`, `#pikku/http`, `#pikku/workflow` — and a project's `imports`
208
+ map declares two patterns, because both resolvers pick the more specific one:
209
+
210
+ ```json
211
+ "#pikku/*.js": "./.pikku/*.ts",
212
+ "#pikku/*": "./.pikku/*/index.ts"
213
+ ```
214
+
215
+ A source tree names the `.ts` on both. Webpack, esbuild and Bun all rewrite a
216
+ `.js` specifier to the `.ts` beside it for a relative import but not for an
217
+ imports-map target, so a `.js` target there resolves to a file that does not
218
+ exist. The two places that keep `.js` are the ones where it is the real file: a
219
+ published addon, whose map points into `dist`, and a project that imports a
220
+ declaration-only generated file such as `pikku-rpc-wirings-map.gen.d.ts`, where
221
+ naming the `.js` lets the type resolver's own mapping reach the `.d.ts`.
222
+
223
+ `pikku` generates the leaf indexes and removes the hub, and `pikku validate`
224
+ reports a barrel import as an error. The split also turns the addon boundary
225
+ from advice into a rule: an addon never generates the wiring leaves, so
226
+ `#pikku/http` fails at the specifier rather than yielding "no exported member"
227
+ from a hub that quietly dropped the re-export.
228
+
229
+ - 456c88b: Scenario runs are now kept, and the console reads them back.
230
+
231
+ Every `pikku scenario run` files a record: the run's outcome and counts, each
232
+ scenario's result with the prose of the steps as they read at the time, and the
233
+ screenshots and video it left behind. The steps are snapshotted rather than
234
+ referenced, so a run still reads correctly after the scenario that produced it
235
+ has been rewritten.
236
+
237
+ `ScenarioRunStore` is the interface, `FileScenarioRunStore` the on-disk
238
+ implementation the CLI writes to — one folder per run, `run.json` beside its
239
+ artifacts, under `<outDir>/scenario-runs`. It is a store in its own right rather
240
+ than a corner of the workflow service, so a hosted console can keep the same
241
+ records in a database and its footage in object storage without the functions
242
+ that read them knowing the difference.
243
+
244
+ The console's Scenarios page gained a Runs view (`?view=runs`) listing past
245
+ runs, with a run's results, its step ladder, failures, and the screenshots and
246
+ video inline. Reading and deleting runs are gated by the new
247
+ `pikku:console:scenarios:read` and `pikku:console:scenarios:manage` scopes.
248
+
249
+ - 727671b: Serve the public surface to the console. `console:getSurface` reads the doc
250
+ shipped inside `@pikku/cli` and the usage the inspector measured into the
251
+ project's outDir, each half optional, and `/surface` renders it from
252
+ `useSurface()`. Both files are read on demand when the page asks, never at boot.
253
+ - 727671b: `wireAddon` and `wireRemoteAddon` move from `#pikku/function` to `#pikku/addon`.
254
+
255
+ Installing an addon and authoring one are the same concept from opposite ends,
256
+ so they are one import: an application's `#pikku/addon` carries the two install
257
+ functions, an addon package's carries `pikkuAddonConfig`, `pikkuAddonServices`,
258
+ `pikkuAddonWireServices` and `AddonBaseServices`.
259
+
260
+ Two generation fixes came with it:
261
+
262
+ - `CredentialsMap` is generated as a type alias rather than an interface. An
263
+ interface has no implicit index signature, so it was never assignable to the
264
+ `Record<string, unknown>` that `GetCredential` is constrained by, and every
265
+ generated project reported two errors on its own function types.
266
+ - An unresolved `SingletonServices` type is now `PKU724` instead of a services
267
+ map with no entries in it. Written out, the empty map made every service
268
+ optional and the real failure resurfaced as unrelated "possibly undefined"
269
+ errors in files nobody had touched.
270
+
271
+ - Updated dependencies [7722ceb]
272
+ - Updated dependencies [375c1ff]
273
+ - Updated dependencies [20d8a39]
274
+ - Updated dependencies [02a70cd]
275
+ - Updated dependencies [aeef159]
276
+ - Updated dependencies [a281de6]
277
+ - Updated dependencies [266e3bc]
278
+ - Updated dependencies [02a70cd]
279
+ - Updated dependencies [786dae5]
280
+ - Updated dependencies [6eef0a0]
281
+ - Updated dependencies [20d8a39]
282
+ - Updated dependencies [3561d67]
283
+ - Updated dependencies [a91c433]
284
+ - Updated dependencies [02a70cd]
285
+ - Updated dependencies [9537f74]
286
+ - Updated dependencies [2b57ca8]
287
+ - Updated dependencies [266e3bc]
288
+ - Updated dependencies [9fce0f1]
289
+ - Updated dependencies [83683a0]
290
+ - Updated dependencies [456c88b]
291
+ - Updated dependencies [456c88b]
292
+ - Updated dependencies [c127273]
293
+ - @pikku/core@0.12.85
294
+ - @pikku/better-auth@0.12.26
295
+ - @pikku/knowledge@0.12.7
296
+
297
+ ## 0.12.42
298
+
299
+ ### Patch Changes
300
+
301
+ - 17eea0d: feat(console): an addon install says what it still needs before a restart
302
+
303
+ `wireAddon` only reaches the live registry when its module is executed at boot,
304
+ so an addon installed into a running dev server is inert until a restart — while
305
+ `installAddon` returned a bare `success: true` and the Addons tab kept showing
306
+ the old list. The install now returns `restartRequired`, and whether the addon
307
+ could actually start: `ready`, `missingSecrets` and `missingVariables`, read from
308
+ the package's own declared secrets and variables under this instance's override
309
+ names. A variable whose schema carries a default is never missing.
310
+
311
+ `addonReadiness` re-runs that check for an already-installed instance, reading
312
+ the override names out of its `<namespace>.addon.ts`, so a caller can gate the
313
+ restart until the user has configured what the addon needs rather than
314
+ restarting into a crash loop.
315
+
316
+ The console renders that outcome instead of polling for the addon to become
317
+ queryable. Installing used to navigate to the package page, which polled
318
+ `getAddonInstalledPackage` for ~20s and then gave up with "Package not found" —
319
+ re-inspecting the new wiring routinely takes longer, so a successful install
320
+ looked like a failure. The page now shows what the install reported: the name it
321
+ was wired under, that a restart is required, and either that it is ready or which
322
+ secrets and variables are still unset.
323
+
324
+ `readAddonDeclaredNames` also now finds meta in a package that ships `.pikku`
325
+ only under `dist`, where it previously read as "declares nothing" and silently
326
+ skipped the per-instance override derivation.
327
+
328
+ - 7406bfe: Rename the agent runtime from `AI*` to `Agent*` (#596)
329
+
330
+ `AI` described the model provider, not the thing being named. Every symbol that
331
+ belongs to the agent runtime now says `Agent`; the symbols that genuinely wrap a
332
+ model provider — `AIEmbeddingService`, `AIProviderOptions`, `AIEmbedParams`,
333
+ `AITranscriptionParams`, `AIGenerateImageParams` and their siblings, and the
334
+ `@pikku/ai-vercel` / `@pikku/ai-deepinfra` / `@pikku/ai-voice` packages — keep
335
+ their names.
336
+
337
+ **Wiring**
338
+ - `pikkuAIAgent` → `pikkuAgent`, `pikkuAIScorer` → `pikkuAgentScorer`,
339
+ `pikkuAIJudge` → `pikkuAgentJudge`
340
+ - `CoreAIAgent` → `CoreAgent`, `AIAgentInput` → `AgentInput`, `AIAgentStep` →
341
+ `AgentStep`, `AIMessage` → `AgentMessage`, and the rest of the agent types
342
+ - `AIAgentRunnerService` → `AgentRunnerService`, `AIStorageService` →
343
+ `AgentStorageService`, `AIRunStateService` → `AgentRunStateService`
344
+
345
+ **Entry points**
346
+
347
+ `@pikku/core/agent` → `@pikku/core/agent`, `@pikku/core/agent-scorer` →
348
+ `@pikku/core/agent-scorer`.
349
+
350
+ **Queues**
351
+
352
+ The scorer queues are now `agent-score-fast` and `agent-score-slow`. Drain the
353
+ old `ai-score-fast` / `ai-score-slow` queues before deploying — jobs still
354
+ sitting on them when the new workers start will never be picked up.
355
+
356
+ **Scaffolds**
357
+
358
+ The agent scaffold pikku wrote for your project — `<scaffold>/agent/agent.gen.ts`
359
+ and its schemas file — imports `@pikku/core/ai-agent`, which no longer exists. A
360
+ scaffold is normally written once and then left alone, so `pikku all` would find
361
+ it present and leave the broken import in place. It now deletes an agent scaffold
362
+ importing either removed entry point and regenerates it in the same run. Anything
363
+ you added to that file goes with it, so move local edits out first.
364
+
365
+ **Database**
366
+
367
+ The agent tables are renamed: `ai_threads`, `ai_message`, `ai_tool_call`,
368
+ `ai_working_memory`, `ai_run` and `ai_run_score` become `agent_threads`,
369
+ `agent_message`, `agent_tool_call`, `agent_working_memory`, `agent_run` and
370
+ `agent_run_score`, along with their indexes and the `ai_working_memory_pk`
371
+ constraint. The same rename applies to the MongoDB collections.
372
+
373
+ `ensurePikkuSchema` creates tables it cannot find, so an existing database will
374
+ get empty `agent_*` tables and leave the old data stranded in `ai_*`. Rename
375
+ them before the first boot on the new version:
376
+
377
+ ```sql
378
+ ALTER TABLE ai_threads RENAME TO agent_threads;
379
+ ALTER TABLE ai_message RENAME TO agent_message;
380
+ ALTER TABLE ai_tool_call RENAME TO agent_tool_call;
381
+ ALTER TABLE ai_working_memory RENAME TO agent_working_memory;
382
+ ALTER TABLE ai_run RENAME TO agent_run;
383
+ ALTER TABLE ai_run_score RENAME TO agent_run_score;
384
+ ```
385
+
386
+ - eadea64: Reach the whole console from ⌘K, and report a name collision as a conflict.
387
+
388
+ The command palette now lists every page in the navigation and, for anyone who
389
+ can impersonate, the impersonation picker — so both are reachable without the
390
+ chrome, which is a dock that only raises on hover at pointer widths and a closed
391
+ sheet on a phone. Its shortcut no longer goes dead while a text field has focus,
392
+ which is when reaching for the palette is most likely.
393
+
394
+ Installing an addon under a name the project already wires now reports a
395
+ conflict rather than a 500: the check asks the registry what is wired, so an
396
+ instance wired from outside the addons directory is found too.
397
+
398
+ A gherkin line in the knowledge viewer keeps a space between its keyword and the
399
+ sentence, so the line reads as a sentence to anything reading the DOM rather
400
+ than the layout.
401
+
402
+ - 6794681: Publish the ecosystem surface as per-area sub-barrels under `@pikku/core/ecosystem/*`, and point generated code, the CLI, the inspector and the runtime adapters at them.
403
+
404
+ 348 names that only generated code, the toolchain or a runtime adapter ever imports now have a second home on `@pikku/core/ecosystem/<area>` — one sub-barrel per area, matching how core already publishes its entrypoints, so no single barrel grows without bound and a consumer only pulls in the area it uses.
405
+
406
+ This step is additive: every name is still exported from the entrypoint it was published from before, so nothing downstream breaks. Removing them from the app-facing barrels is a later change, and needs a release carrying `./ecosystem/*` first.
407
+
408
+ - Updated dependencies [7406bfe]
409
+ - Updated dependencies [6794681]
410
+ - Updated dependencies [a7fcd2e]
411
+ - @pikku/core@0.12.84
412
+ - @pikku/better-auth@0.12.25
413
+
414
+ ## 0.12.41
415
+
416
+ ### Patch Changes
417
+
418
+ - 3a4d50a: feat(console): one scope per console area, under `pikku:console`
419
+
420
+ The console gated itself on a single `admin` scope declared on `wireAddon`, so
421
+ one grant covered reading a secret, rewriting a function body and reading the
422
+ audit trail alike — and the secret and variable brokers, which the CLI emits
423
+ into the app's own scaffold rather than the addon, were not covered by the addon
424
+ gate at all and carried no scope of their own.
425
+
426
+ Every console function now declares the area it belongs to:
427
+
428
+ ```
429
+ pikku:console:secrets read | write
430
+ pikku:console:variables read | write
431
+ pikku:console:addons read | install
432
+ pikku:console:credentials read | manage
433
+ pikku:console:scopes read | manage (was pikku:scopes:*)
434
+ pikku:console:audit read (was pikku:audit:*)
435
+ pikku:console:wirings read
436
+ pikku:console:security read | run
437
+ pikku:console:workflows read | manage
438
+ pikku:console:agents read | manage
439
+ pikku:console:db read
440
+ pikku:console:knowledge read
441
+ pikku:console:emails read | write
442
+ pikku:console:code write
443
+ ```
444
+
445
+ `pikku:console` grants the lot, and `pikku` still grants that — the generated
446
+ `PIKKU_CONSOLE_TOKEN` session carries `['admin', 'pikku']`, so an external
447
+ console keeps working untouched.
448
+
449
+ **Migration.** `admin` no longer reaches the console: it is a different tree.
450
+ Grant `pikku:console` alongside `admin` to keep an administrator's access as it
451
+ was, or grant the individual areas to hand out less. The two existing console
452
+ scopes moved: `pikku:scopes:read` / `pikku:scopes:manage` are now
453
+ `pikku:console:scopes:*`, and `pikku:audit:read` is now
454
+ `pikku:console:audit:read`.
455
+
456
+ - 3a4d50a: Five `console:scope*` descriptions and two `pikku *-prune` warnings promised a
457
+ grant or revoke "takes effect on their next request — no re-login". That is
458
+ only true when `withResolvedScopes` actually resolves, and it skips resolution
459
+ whenever `mapSession`/`mapKey` has already set `scopes` — which is
460
+ authoritative and deliberately never overridden.
461
+
462
+ So an app whose `mapSession` derives scopes from something like
463
+ `result.user.role` — the shape the `wire-scope` scaffold teaches — can grant a
464
+ scope from the console, see it stored, and have it never reach a session. The
465
+ revoke direction is worse: `roles prune` and `scopes prune` reported that users
466
+ lose the scopes on their next request when in fact they keep them.
467
+
468
+ Copy only; no behaviour change. The docblock on `withResolvedScopes` now states
469
+ that the propagation guarantee is conditional on resolution running at all, so
470
+ the next person copying that sentence into UI copy carries the caveat with it.
471
+
472
+ - Updated dependencies [3a4d50a]
473
+ - @pikku/better-auth@0.12.24
474
+
475
+ ## 0.12.40
476
+
477
+ ### Patch Changes
478
+
479
+ - b930dca: Remove the `secretBroker` escape hatch and scope addon secrets and credentials
480
+
481
+ `secretBroker` let three named console functions receive the real `SecretService`,
482
+ against the rule that a function never sees one. It is gone: the inspector allowlist,
483
+ the `FunctionRuntimeMeta` flag, the runner branches, and the `WiredSecretBrokerServices`
484
+ type. Console secret administration moved into the console addon, where a
485
+ `SecretAdminService` holds the `SecretService` and the functions hold none.
486
+
487
+ Addons are now scoped rather than trusted. The CLI emits each package's declared secret
488
+ keys, and the host wraps the `SecretService` in a `ScopedSecretService` and the
489
+ `CredentialService` in a new `ScopedCredentialService` before the addon's service factory
490
+ runs — so an addon reads only what it declared, cannot write secrets, and cannot enumerate
491
+ the app's users. `wireAddon({ globalSecrets, globalCredentials })` waives this, taking the
492
+ reason as its value; only the consuming app can grant it, and the deploy manifest reports
493
+ every grant under `unscopedSecretAddons` / `unscopedCredentialAddons`.
494
+
495
+ - Updated dependencies [063f43a]
496
+ - Updated dependencies [8ad051c]
497
+ - Updated dependencies [ce66bf8]
498
+ - Updated dependencies [d0307a8]
499
+ - Updated dependencies [0ab1a88]
500
+ - Updated dependencies [5599a27]
501
+ - Updated dependencies [ce66bf8]
502
+ - Updated dependencies [3ad2131]
503
+ - Updated dependencies [b930dca]
504
+ - Updated dependencies [b95e77d]
505
+ - Updated dependencies [fd9d834]
506
+ - Updated dependencies [8978fbd]
507
+ - @pikku/core@0.12.82
508
+ - @pikku/better-auth@0.12.23
509
+ - @pikku/knowledge@0.12.5
510
+
511
+ ## 0.12.39
512
+
513
+ ### Patch Changes
514
+
515
+ - 2f15aad: Resolve every entry point under `dist`
516
+
517
+ `imports["#pikku"]` named `./.pikku/pikku-types.gen.ts` — a TypeScript file, at
518
+ runtime, inside `node_modules` — while `files` publishes only `dist`. The
519
+ generated output under `dist/.pikku` also imports a `types/application-types.d.js`
520
+ that nothing was copying there, since a hand-written `.d.ts` is an input to
521
+ `tsc` rather than something it emits.
522
+
523
+ Both now point at the built copy. The addon's own build resolves `#pikku`
524
+ through tsconfig `paths`, so no entry point has to reach into the source tree.
525
+
526
+ - e110c55: Emit `pikkuAIScorer` and `pikkuAIJudge` from the generated agent types so a
527
+ project can declare scorers, and read a run's grades from the console.
528
+
529
+ A tool that threw now reports its reason only on the step record's `error`; the
530
+ result replayed to the model stays the generic `Error: Tool execution failed` it
531
+ was before scorers needed the reason.
532
+
533
+ - e110c55: Show what the scorers declared and what they graded: a `/scorers` page listing
534
+ every declared scorer with its lane, sampling rate and the agents that named it,
535
+ and a Runs tab in the agent inspector listing the open conversation's runs with
536
+ the grades each one earned.
537
+
538
+ `console:getAgentThreadRuns` now answers under the same ownership as the thread
539
+ itself — a caller without the admin scope sees only its own runs, filtered
540
+ rather than refused, so the answer never confirms someone else's thread exists.
541
+
542
+ - Updated dependencies [e110c55]
543
+ - Updated dependencies [e110c55]
544
+ - Updated dependencies [e110c55]
545
+ - Updated dependencies [acc8077]
546
+ - Updated dependencies [905f737]
547
+ - Updated dependencies [3cc6428]
548
+ - Updated dependencies [c524adf]
549
+ - Updated dependencies [e110c55]
550
+ - @pikku/core@0.12.81
551
+
552
+ ## 0.12.38
553
+
554
+ ### Patch Changes
555
+
556
+ - 62ea4cc: The audit trail is now readable — in the generated meta, through an RPC, and as
557
+ a page in the console.
558
+
559
+ `audit: true` reaches `FunctionRuntimeMeta.audit` as its resolved form
560
+ (`{ durability }`), so which functions record anything is answerable without
561
+ running them. It is informational: the runner still resolves audit from the live
562
+ function config, so meta and runtime cannot disagree.
563
+
564
+ `AuditService` grows an optional read side — `query(AuditQuery)` and `facets()`.
565
+ Optional because a sink can legitimately be write-only: a queue producer that
566
+ hands events to another system has nothing to read back, and a reader that finds
567
+ these absent should say the trail is not readable here rather than that it is
568
+ empty. The two are very different answers to give someone auditing a system.
569
+
570
+ `KyselyAuditService` implements both, newest first with offset paging, filtered
571
+ by user, action and time window. Two things it now gets right that are easy to
572
+ get wrong: an empty filter array means "match nothing" rather than "no filter",
573
+ and results are read by physical _and_ camelCase key, because `CamelCasePlugin`
574
+ is on most pikku Kysely instances and renames result keys on the way out — the
575
+ mismatch does not throw, it returns a page of `undefined`. `init()` creates the
576
+ `audit` table for projects that do not migrate it themselves, from a new
577
+ exported `auditSchema` that stays out of `pikkuSchemas` because the runtime does
578
+ not need it.
579
+
580
+ The console addon exposes `console:getAudits` and `console:getAuditFilters`
581
+ behind a new `pikku:audit:read` scope, and forwards the application's `audit`
582
+ service into the addon's own services — without that last part every install
583
+ reported the trail as unreadable, whatever sink it had configured.
584
+
585
+ The console gets an Audit trail page: an infinite list filtered server-side by
586
+ user and action, and a row that opens the whole event, metadata rendered as a
587
+ JSON tree. Refused, unreadable and empty are three different screens, because
588
+ "you may not read this", "nobody can read this" and "nothing happened" are three
589
+ different facts.
590
+
591
+ Events name the person who caused them. The trail records a user id — the only
592
+ thing stable enough to record, since a name can change after the event — so
593
+ `getAudits` resolves those ids against better-auth's user directory at read
594
+ time, and the page shows the name while keeping the recorded id on the event.
595
+ The filter follows: pick a colleague by name, filter by the id. A scenario
596
+ actor is labelled as one, so synthetic traffic is not mistaken for real, and a
597
+ caller who was signed out shows the wire identity pikku resolved for them
598
+ rather than being credited to the system.
599
+
600
+ **Breaking, for anyone already reading `AuditEvent`:** `actor` is now
601
+ `userIdentity`, and its type `AuditActor` is `AuditUserIdentity`; `AuditQuery`
602
+ takes `userIds`/`orgId` in place of `actorUserIds`/`actorOrgId`, and
603
+ `AuditFacets` returns `userIds`. In pikku an _actor_ is a synthetic person a
604
+ scenario drives, flagged on the user row — so naming the causer of an event
605
+ `actor` made the synthetic case unsayable (`actor.actor === true`) and implied
606
+ every recorded action was a test. The overwhelming majority are ordinary
607
+ customers. The `audit` table follows: `actor_user_id` / `actor_org_id`
608
+ are now `user_id` / `org_id`, and a `pikku_user_id` column joins them so the
609
+ wire identity of a caller who never signed in survives the round trip — the
610
+ sink was dropping it, which left the console's Session field permanently
611
+ blank. A project that already migrated the table needs to rename the two
612
+ columns and add the third; `KyselyAuditService.init()` creates the new shape
613
+ for anyone who did not.
614
+
615
+ - 78b29f0: `SecretService` now returns a `SecretValue<T>` rather than the bare value, so a
616
+ vault secret cannot reach a sink by accident.
617
+
618
+ `SecretValue` is nominally typed, which means it is not assignable to `string`
619
+ (or to any other concretely-typed field). Every sink with a real type — a
620
+ database column, an email body, a session payload — rejects it with no lint
621
+ rule involved. The sinks typed `any`, `unknown`, or a free generic — the logger,
622
+ queue payloads, webhook and email inputs, and a function's own output — are
623
+ guarded with `Safe<T>`, which collapses a `SecretValue` found anywhere inside
624
+ `T`, however deeply nested, to `never`.
625
+
626
+ Unwrap deliberately at the point the secret reaches the wire:
627
+
628
+ ```ts
629
+ const secret = await secrets.getSecret('BETTER_AUTH_SECRET')
630
+ betterAuth({ secret: secret.reveal() })
631
+ ```
632
+
633
+ Two behaviours cover what types cannot see. Structured serialization redacts —
634
+ `JSON.stringify` and node's inspect both yield `[secret]`, so an audit or log
635
+ write stays honest without crashing the request. String coercion throws
636
+ `SecretCoercionError`, because a template literal is always a leak.
637
+
638
+ `AuditLog.write` is guarded the same way as the logger, since an audit event
639
+ carries `input` and `metadata` as `unknown` and nominality alone cannot stop a
640
+ secret landing in one.
641
+
642
+ `.reveal()` is the deliberate escape hatch, and what it hands back is an
643
+ ordinary string as far as every sink signature is concerned. **PKU953** closes
644
+ that gap: under `pikku all --security` the inspector reports a revealed secret
645
+ that flows into a logger, an audit, a queue, an email or a webhook — `console` included.
646
+
647
+ This also fixed a real one: `remote-addon-auth.ts` called `String(token)` on an
648
+ `unknown` and wrote the result straight into an `Authorization` header.
649
+
650
+ - Updated dependencies [62ea4cc]
651
+ - Updated dependencies [9dddff8]
652
+ - Updated dependencies [1065b80]
653
+ - Updated dependencies [78b29f0]
654
+ - @pikku/core@0.12.76
655
+ - @pikku/knowledge@0.12.4
656
+ - @pikku/better-auth@0.12.21
657
+
658
+ ## 0.12.37
659
+
660
+ ### Patch Changes
661
+
662
+ - dd19aa7: Drop `scopes` from sessionless functions, rename `selfAuthenticated`, and make both
663
+ escape hatches opt-in.
664
+
665
+ **`scopes` are gone from `pikkuSessionlessFunc`.** They are AND-ed and `verifyScopes`
666
+ fails closed on a session that does not exist, so every scope listed on a sessionless
667
+ function rejected the anonymous caller it exists to serve. `CorePikkuSessionlessFunctionConfig`
668
+ now states this once in core, and the generated `pikkuSessionlessFunc` / `pikkuVoidFunc`
669
+ configs derive from it — so the field is absent rather than subtracted.
670
+
671
+ `@pikku/addon-console`'s `installAddon` and `installOpenapiAddon` are now `pikkuFunc`.
672
+ Both set `auth: true` and `scopes: ['admin']`, and a test exercises that gate, so the
673
+ scopes were load-bearing — they only compiled as sessionless because the config accepted
674
+ a field it could not honour. No behaviour change: both already required a session.
675
+
676
+ **`selfAuthenticated` is now `permissionsInBody`.** It never described authentication:
677
+ what it records is that the permission check lives in the function body rather than in a
678
+ declared `permissions` entry.
679
+
680
+ **Both escape hatches must be opted into**, via a new `allow` block in
681
+ `pikku.config.json`:
682
+
683
+ ```json
684
+ "allow": { "permissionsInBody": true, "complexWorkflows": true }
685
+ ```
686
+
687
+ Unset means unavailable, and using the feature is a build error naming the flag that
688
+ would permit it — PKU576 for `permissionsInBody`, PKU643 for `pikkuWorkflowComplexFunc`.
689
+ Both trade something the tooling can inspect for something only a reader can verify: a
690
+ permission check buried in a body, or workflow steps that cannot be serialized into the
691
+ graph, replayed, or migrated. Both are occasionally right, and both are the path of least
692
+ resistance whenever the declarative form is merely inconvenient. Whoever owns the project
693
+ makes that call once, in writing, instead of every author making it silently at the call
694
+ site.
695
+
696
+ **PKU574's message no longer contradicts any of this.** Every function it reports is
697
+ sessionless — that is how the population is selected, not a finding — yet it opened by
698
+ reporting that they "require neither a session", then advised adding scopes. It now names
699
+ them as sessionless and recommends only gates an anonymous caller can meet:
700
+ `permissions`, `auth: true`, `wireAddon({ auth: true })`, or dropping `expose: true`.
701
+ `permissionsInBody` is deliberately absent from that list: a diagnostic should not
702
+ advertise its own escape hatch.
703
+
704
+ - Updated dependencies [32277d5]
705
+ - Updated dependencies [ea8aabf]
706
+ - Updated dependencies [33e96ab]
707
+ - Updated dependencies [fd72e58]
708
+ - Updated dependencies [fd72e58]
709
+ - Updated dependencies [fd72e58]
710
+ - Updated dependencies [894b2f8]
711
+ - Updated dependencies [dd19aa7]
712
+ - Updated dependencies [50ec500]
713
+ - @pikku/core@0.12.75
714
+
715
+ ## 0.12.36
716
+
717
+ ### Patch Changes
718
+
719
+ - afef587: Close eleven security weaknesses found in a review of `@pikku/core`. Most are
720
+ breaking, and two invalidate data or credentials already in the wild — read the
721
+ migration notes before upgrading.
722
+
723
+ **Breaking: AI agent thread ownership now fails closed.** Reading, listing,
724
+ resuming or approving an existing thread or run requires a resolved session
725
+ principal (`userId`, or `orgId` for `sessionScope: 'org'`), regardless of the
726
+ agent's `auth` setting. Previously a request without a session had no ownership
727
+ model at all: the caller-supplied `resourceId` was accepted as the ownership
728
+ key, so any caller could read or resume another party's thread by naming its
729
+ `resourceId`. Worse, `threadOwnerConstraint` returned `undefined` for a
730
+ sessionless caller, and `undefined` means _no filter_ rather than _no rows_ —
731
+ so `getAgentThreads` returned every thread in the deployment. It now returns
732
+ `string[]`, empty for a sessionless caller, which every storage backend already
733
+ treats as matching nothing. Sessionless agents still run one-shot conversations,
734
+ each with a fresh unguessable owner; what they lose is cross-request continuity.
735
+ Wire a session to restore it.
736
+
737
+ **Breaking: stored secrets and credentials must be re-entered.** `deriveKey` ran
738
+ a single unsalted round of SHA-256 over the passphrase and used the digest
739
+ directly as the AES-GCM key — roughly one hash per brute-force guess, with one
740
+ rainbow table working against every deployment. It is now PBKDF2-HMAC-SHA256 at
741
+ 600,000 iterations over a random salt. There is no compatibility path: every
742
+ value held by the kysely, mongodb and redis secret services and the kysely
743
+ credential service becomes undecryptable. They fail loud, naming the key and
744
+ `key_version`, so the app hard-fails on first secret read until each is re-set.
745
+
746
+ The KEK salt is scoped to the key version and stored alongside it, rather than
747
+ per secret, so a bulk read costs one derivation instead of N — `getSecrets` over
748
+ 50 secrets went from ~2.3s to ~48ms, and rotation from ~4.6s to ~94ms. This adds
749
+ a salt table (kysely), hash field (redis) or collection (mongodb), created
750
+ automatically on first use.
751
+
752
+ **Breaking: `PIKKU_REMOTE_SECRET` must be at least 32 characters.** The
753
+ remote-RPC session envelope moved from PBKDF2 to HKDF, which expands
754
+ high-entropy key material rather than stretching a low-entropy passphrase. That
755
+ took a remote hop from ~269ms to ~0.4ms — PBKDF2 was running twice per request —
756
+ but HKDF supplies no brute-force resistance, so the secret must carry the
757
+ entropy itself. A shorter secret now throws `WeakKeyMaterialError` at both ends.
758
+ Generate one with `openssl rand -base64 32` and roll it out to every service in
759
+ the mesh together: existing bearer tokens are format-incompatible, so a partial
760
+ rollout produces 401s until every instance is updated. The Cloudflare, Lambda
761
+ and Azure deployment services each hand-rolled a copy of `buildRemoteHeaders`
762
+ and now call the shared one, which is what keeps the two sides in step.
763
+
764
+ **Breaking: previously signed content URLs stop verifying.** `LocalContent`
765
+ signed only `{signedAt, expiresAt, notBefore}`, so a signature proved when a URL
766
+ was issued but never what it was issued for — any valid token was a skeleton
767
+ key, and swapping the pathname from a public thumbnail to a private document
768
+ still verified. The signature now binds the request path. Separately, the
769
+ verifier returned "valid" when no JWT service was wired, which is how
770
+ `pikku serve` ran: a forged `?signedAt=0&expiresAt=99999999999999` was accepted.
771
+ It now rejects with 403, `LocalContent` requires a `JWTService`, and
772
+ `pikku serve`/`pikku dev` mint an ephemeral per-process signing key so local
773
+ development works without shipping a fail-open path. In-flight signed URLs must
774
+ be re-issued.
775
+
776
+ **Request body size limits now apply to every adapter.** The `maxBodySize` cap
777
+ existed only in `PikkuFetchHTTPRequest`. The real hole was uWebSockets, which
778
+ drove `res.onData` itself and concatenated every chunk with no bound and nothing
779
+ downstream able to intervene; it now drops chunks past the limit and replies 413
780
+ before routing. Fastify delegates to its native `bodyLimit` (set only when
781
+ `maxBodySize` is configured, so fastify's stricter 1 MB default is never
782
+ loosened), and `PikkuExpressServer` feeds the limit into its body parsers. Two
783
+ paths can only reject rather than prevent, and are documented as such:
784
+ `express-middleware` mounted on your own app receives an already-parsed body, so
785
+ that deployment must bound its own parser; Next server actions bottom out at
786
+ `experimental.serverActions.bodySizeLimit`.
787
+
788
+ **Breaking: the console addon's privileged functions are gated by default.**
789
+ `wireAddon` gains a `scopes` option that applies to every function in the
790
+ addon's namespace, and the console scaffold now generates
791
+ `wireAddon({ name: 'console', package: '@pikku/addon-console', scopes: ['admin'] })`.
792
+ Previously the console's entire privileged surface — around 54 functions
793
+ including `credentialGet`, which returns a resolved OAuth token for an arbitrary
794
+ `userId`, `updateFunctionBody`, and `installAddon`, which shells out to a
795
+ package install — was protected only by an optional host-registered
796
+ `addGlobalPermission`. `resolveGlobalPermissions` returns `[]` when none is
797
+ registered and permission checking then no-ops, so an app that never registered
798
+ one served those functions to anyone, and with the template's default
799
+ `scaffold.rpc: "no-auth"` that meant unauthenticated. All of them now return 403
800
+ `MissingScopeError` without an `admin`, `admin:*` or `*` scope. **Regenerating
801
+ is required** — an app holding an old `console.gen.ts` stays open.
802
+ `installAddon` and `installOpenapiAddon` additionally declare their own
803
+ `auth: true, scopes: ['admin']`, and `getAgentThreads` now scopes its listing to
804
+ the session's own threads unless the caller holds admin.
805
+
806
+ Addon scopes are enforced in `runPikkuFunc` rather than at the RPC boundary,
807
+ because a wiring can reference an addon function directly — the inspector
808
+ records the addon's `packageName` on HTTP, channel, schedule, queue, CLI,
809
+ trigger, gateway and MCP wirings — and those paths never call `resolveNamespace`.
810
+ Enforcing at the RPC seam would have covered only the `namespace:function` form
811
+ while reading as complete.
812
+
813
+ **Breaking: `wireAddon`'s `auth` and `tags` now apply on direct wirings too.**
814
+ Both were read only by `resolveAddonFunction`, so they had exactly the hole
815
+ scopes had: `wireAddon({ name: 'console', package: '@pikku/addon-console', auth:
816
+ true, tags: ['admin'] })` gated `rpc('console:credentialGet')` and gated nothing
817
+ at all on an HTTP route wired straight to `credentialGet`. A consumer who
818
+ reached for the documented way to lock an addon down got a control that was
819
+ silently inert on every wiring except one. Both now resolve in `runPikkuFunc`.
820
+ `auth` merges as an OR — `auth: false` from an addon is ignored on a direct
821
+ wiring, because an addon may require a session the wiring did not but must never
822
+ waive one it did. Addon tags resolve to concrete middleware against the **root**
823
+ tag groups before the call rather than being folded into the function's
824
+ inherited middleware: `addTagMiddleware('admin', …)` is written by the consuming
825
+ app and registers under the root package, whereas `combineMiddleware` would look
826
+ the tag up under the addon's own `packageName`, where it does not exist.
827
+
828
+ One consequence worth naming: an addon that wires `auth: true` and also runs its
829
+ own sessionless internal work — a scheduled task or queue worker inside the
830
+ addon calling a sibling function — is now gated where it previously was not,
831
+ because a bare `rpc('fn')` from inside the addon reaches `runPikkuFunc` with the
832
+ addon's `packageName` like any other call. This reverses a decision that
833
+ deliberately scoped the gate to the namespaced boundary; that reasoning held
834
+ only while the boundary was real, and a direct wiring can enter an addon without
835
+ crossing it, so "already inside" is not something the runtime can infer. Such an
836
+ addon should carry authorization on the function via
837
+ `pikkuFunc({ permissions })`, which has always been enforced on every path. A
838
+ follow-up will add execution provenance so an intra-addon call can be
839
+ distinguished from an external one and skip the addon-level check; that needs a
840
+ marker no caller outside the process can set, which is its own design problem
841
+ and does not belong in a security fix.
842
+
843
+ **Codegen now warns when an exposed function has no gate (PKU574).** The
844
+ generated `POST /rpc/:rpcName` dispatcher forwards to `rpc.exposed`, which
845
+ refuses anything without `expose: true` — but nothing checked whether the
846
+ target was gated, because a dispatcher cannot know what it dispatches to. The
847
+ console shipped ~54 privileged functions through that gap and the toolchain was
848
+ silent. The inspector now reports every function that is exposed, sessionless,
849
+ and carries no `auth`, `scopes` or `permissions` of its own and none from a
850
+ governing `wireAddon`. It is a `warn`, not a critical: `expose: true` on an
851
+ ungated sessionless function is correct for a genuinely public endpoint, so it
852
+ blocks a build only under `--fail-on-warn`.
853
+
854
+ Two pieces of metadata were missing for this to be answerable statically, and
855
+ both are now recorded. A `pikkuSessionlessFunc`'s own `auth: true` was read at
856
+ runtime but never written to function meta, so a self-gated function was
857
+ indistinguishable from an ungated one — `sessionless` carries the baseline, and
858
+ `auth` now carries the tightening. And `wireAddon`'s `scopes`, `auth` and `tags`
859
+ were not parsed at all: the inspector recorded the addon's `rpcEndpoint` and its
860
+ secret, variable and credential overrides, and dropped every one of its gates.
861
+ An addon whose gates are not statically knowable is treated as gated, because a
862
+ false positive on a correctly-secured addon costs more than the one case it
863
+ would catch.
864
+
865
+ **Breaking: an application's global permissions now apply inside addons.**
866
+ `resolveGlobalPermissions` read only the bucket matching the function's own
867
+ package, but the generated `addGlobalPermission` wrapper takes no package
868
+ argument and always registers under the root. An app-wide rule like "every
869
+ request needs a signed-in user" therefore stopped at the addon boundary, and the
870
+ bucket an addon's functions did read was one no host could write to — which is
871
+ why the console addon's recommended `addGlobalPermission([isAdmin],
872
+ '@pikku/addon-console')` was never a gate anybody could actually install. A
873
+ function now resolves the root bucket and its own package's, root first.
874
+ Unioning is safe in a way nothing else here would be: globals AND, so adding the
875
+ root ones can only tighten. Package buckets stay one-way — a package's globals
876
+ never reach root functions, or an installed addon could gate the whole
877
+ application. Apps with both a root global and addon-provided functions will see
878
+ those functions gated where they previously were not.
879
+
880
+ **Codegen now records whether each HTTP route requires a session, and warns
881
+ about inert addon tags (PKU575).** Four separate things can demand a session —
882
+ the function's `sessionless`, its own `auth`, the route's (or its group's)
883
+ `auth`, and the addon it belongs to — and answering "which routes are open?"
884
+ meant joining all four by hand and knowing which wins. Each route's meta now
885
+ carries the resolved `requiresSession` alongside the route's own `auth`. Scopes
886
+ count as requiring one, since they are matched against the session's and fail
887
+ closed. Anything not statically knowable resolves to `true`, matching PKU574:
888
+ a route that looks stricter than it is costs less than one that looks open and
889
+ isn't. Separately, `wireAddon({ tags: ['admin'] })` reads like a gate and is
890
+ applied like one right up until no `addTagMiddleware('admin', …)` exists, at
891
+ which point it resolves to an empty list and gates nothing; that now warns.
892
+ Only addon tags are reported — a tag on a function is as likely to be
893
+ organizational, and warning about those would bury the case that matters.
894
+
895
+ **Object-shorthand permissions were missing from meta.** The inspector visited
896
+ `ts.PropertyAssignment` but not `ts.ShorthandPropertyAssignment`, so
897
+ `permissions: { canAdminOrg }` — enforced identically to the longhand form at
898
+ runtime, since `verifyPermissions` has a non-array branch — was recorded as _no
899
+ permissions at all_. That is the most dangerous direction for meta to be wrong
900
+ in: an audit reading it sees an open door where one is shut. It cost this review
901
+ a false IDOR report across ~35 billing and org functions before the source
902
+ contradicted the metadata.
903
+
904
+ **Functions that authorize in their own body can say so.** A webhook receiver
905
+ verifying a signature, or a handler redeeming a signed invite, is genuinely
906
+ closed while carrying no session, scope or permission — indistinguishable in
907
+ meta from one nobody remembered to gate, and so warned about forever by PKU574.
908
+ `selfAuthenticated: true` on the function config records the claim and silences
909
+ the warning for that function. It is declarative only: nothing at runtime reads
910
+ it and it grants nothing. Detection was rejected deliberately — inferring it
911
+ from the body means a function that _looks_ like it checks something silences
912
+ the warning while checking nothing, and a warning that is usually wrong stops
913
+ being read.
914
+
915
+ **Breaking: `scaffold.<feature>` is now `boolean | { auth?, path? }`, and `true`
916
+ means authenticated.** The old `'auth' | 'no-auth' | false` read like a
917
+ starter-file preference while being a live authorization decision, set three
918
+ directories from the functions it governed — the shape the console incident
919
+ took. A surface now becomes public only by writing `{ auth: false }`, so
920
+ omitting a field can never open anything: the failure mode of a forgotten flag
921
+ is a locked door. `{ path }` additionally overrides where the file is
922
+ generated, which previously could only be set for all features at once via
923
+ `pikkuDir`.
924
+
925
+ The legacy strings are **refused, not coerced**. `resolveScaffoldFeature` throws
926
+ naming the key and its replacement (`"rpc": "no-auth"` → `"rpc": { "auth":
927
+ false }`), and it does so at config load, not downstream. An earlier design used
928
+ a bare `string` for the output path, under which `"no-auth"` would have parsed
929
+ as a file named `no-auth` and every unmigrated config would have silently
930
+ produced nonsense; the object form makes any string invalid, so the failure is
931
+ loud.
932
+
933
+ The collapse is deliberately not uniform in effect. For `rpc` the flag was a
934
+ blanket "no anonymous RPC in this app" set on a dispatcher that cannot know what
935
+ it dispatches to; for `userAdmin` it was redundant, since the generated
936
+ functions are already `pikkuFunc` with `scopes: ['admin:users:list']`. But for
937
+ `agent`, `workflow`, `events` and `scenarios` it is the only gate — those
938
+ generate real endpoints the app never authors — so `true` keeps them
939
+ authenticated rather than opening them as a side effect of a config cleanup.
940
+ `webhook` and `remoteRpc` have no auth dimension at all (`serialize-remote-rpc.ts`
941
+ hardcodes `auth: false`), so an `{ auth }` on them is ignored. The three
942
+ configs in this repo are migrated preserving their current behaviour exactly.
943
+
944
+ **Queue job identities are signed.** A job carried the producer's `pikkuUserId`
945
+ as a plain string and the worker resolved a session from it with no
946
+ verification, so write access to the queue backend was act-as-any-user. The
947
+ identity is now `pq1.<claim>.<hmac>`, HMAC-SHA256 over the claim and the
948
+ canonicalized job payload, keyed by HKDF expansion of a new
949
+ `PIKKU_QUEUE_IDENTITY_SECRET`. Producers opt in by wrapping their queue service
950
+ with `SignedQueueService`. This fails safe rather than closed: with no secret
951
+ configured the identity is dropped and jobs still process, warning once per
952
+ process, so no existing deployment breaks on upgrade — it simply loses queue
953
+ identity until the secret is set. The payload rather than the job id is bound
954
+ because SQS, Cloudflare Queues, Azure and the in-memory service all mint ids
955
+ after `add` returns.
956
+
957
+ **Workflow inline state is read from the run record.** `isInline` consulted a
958
+ process-local `Map`, while `WorkflowRun.inline` is durable. Any instance that
959
+ did not start a run disagreed with the record, so one instance could dispatch a
960
+ queued job for a workflow another was already executing in-process. It is now
961
+ async and resolves through the durable identity, cached only when a context
962
+ already exists so a passive reader allocates nothing. The same `Map` also leaked:
963
+ `nextStepKey` fabricated replay state on every step, and `releaseContext`
964
+ refused to free anything carrying it, so runs whose steps executed outside a
965
+ `beginReplay` bracket — the step-worker queue path — stranded their context and
966
+ step state for the process lifetime. Contexts are now released by an explicit
967
+ execution counter. Step ordinals reset per execution rather than accumulating
968
+ across step-worker invocations in one process, which makes step naming
969
+ independent of how work was distributed.
970
+
971
+ **Secret reads fail loud in every store.** `MongoDBSecretService.getSecrets`
972
+ skipped rows that failed to decrypt, and the redis equivalent dropped every
973
+ rejection via `Promise.allSettled`, including the "No KEK available for
974
+ key_version N" configuration error. Both now throw, naming the key and its key
975
+ version, matching the kysely behaviour. This matters most alongside the KEK
976
+ change above: without it, an upgrade surfaces as a partial secrets map and an
977
+ opaque downstream failure instead of an error naming the secret to re-enter.
978
+
979
+ **A second middleware registration for a pattern no longer erases the first.**
980
+ `addHTTPMiddleware`, `addTagMiddleware` and `addChannelMiddleware` groups are
981
+ keyed by pattern or tag and held one source file each, so a second file's call
982
+ overwrote the first's. Codegen emits its imports from what is stored, so the
983
+ losing file was never imported and its middleware never registered — the
984
+ runtime composes repeated registrations for a pattern happily, and only codegen
985
+ dropped one. Adding an unrelated `addHTTPMiddleware('*', …)` to an app was
986
+ enough to silently unregister the generated better-auth session bridge, which
987
+ fails open and gives no sign until a request arrives without a session. A group
988
+ now carries every registration made for it, and all of them are imported.
989
+
990
+ - Updated dependencies [6a307f0]
991
+ - Updated dependencies [afef587]
992
+ - Updated dependencies [6a6675c]
993
+ - Updated dependencies [8075f6a]
994
+ - @pikku/core@0.12.74
995
+ - @pikku/knowledge@0.12.3
996
+
997
+ ## 0.12.35
998
+
999
+ ### Patch Changes
1000
+
1001
+ - a7b26c5: rename the inspected declarations to `define*`: `wireScope` → `defineScope`, `wireSecret` → `defineSecret`, `wireVariable` → `defineVariable`, `wireCredential` → `defineCredential`
1002
+
1003
+ `wire*` meant two unrelated things. A transport wiring attaches a function to
1004
+ something that can invoke it — `wireHTTP`, `wireChannel`, `wireScheduler`,
1005
+ `wireQueueWorker` and the rest — and the thing it wires runs. These four wire
1006
+ nothing: they are no-ops that exist only so the call typechecks, they are
1007
+ tree-shaken out of the build, and their whole job is to be found by the
1008
+ inspector's AST pass and turned into a type union. One word for both left the
1009
+ declaration reading like a registration with a runtime.
1010
+
1011
+ So the vocabulary splits: **`wire*` is a transport, `define*` is an inspected
1012
+ declaration.**
1013
+
1014
+ ```ts
1015
+ import { defineScope } from '@pikku/core/scope'
1016
+ import { defineSecret } from '@pikku/core/secret'
1017
+ import { defineVariable } from '@pikku/core/variable'
1018
+ import { defineCredential } from '@pikku/core/credential'
1019
+
1020
+ defineScope({ admin: { scopes: { invoices: { scopes: { create: {} } } } } })
1021
+ ```
1022
+
1023
+ **Breaking:** no alias is kept. Rename the four call sites; the module subpaths
1024
+ (`@pikku/core/scope`, `/secret`, `/variable`) are unchanged.
1025
+
1026
+ The inspector matches these by identifier text, so a stale `wire*` call is not a
1027
+ type error — it is silently not extracted, and the generated union comes back
1028
+ empty. That fails as "this scope isn't declared" on code that was fine a moment
1029
+ ago, nowhere near the declaration. Grep for the old names rather than trusting a
1030
+ clean build.
1031
+
1032
+ An addon published with `.pikku` output generated before this release re-exports
1033
+ `wireSecret` from `@pikku/core/secret` and will not typecheck against this core
1034
+ until it is rebuilt and republished.
1035
+
1036
+ - 457cb25: Add `definePersonas()`: the people a project's scenarios and virtual users run
1037
+ as, declared in code.
1038
+
1039
+ There used to be three names for two-and-a-bit things — an _actor_ in
1040
+ `scenarios.actors`, a _persona_ in `scenarios.personas`, and a _virtual user_
1041
+ declared separately against an actor. In practice almost every actor was its own
1042
+ kind, so the second set carried no information and the third was a third place
1043
+ for a name to drift. There is now one declaration:
1044
+
1045
+ ```ts
1046
+ definePersonas({
1047
+ shopper: {
1048
+ name: 'Sam Shopper',
1049
+ jobTitle: 'Shopper',
1050
+ personality: 'Buys in a hurry and leaves tabs open',
1051
+ roles: ['customer'],
1052
+ disposition: 'careless',
1053
+ goals: ['Buy something without reading anything'],
1054
+ account: {},
1055
+ },
1056
+ })
1057
+ ```
1058
+
1059
+ A persona is a person: what they are like, what they want, the roles they hold,
1060
+ and **one** account they sign in with — `account: {}` plus `linkedAccounts` for
1061
+ the rare case of more, modelled on how better-auth does linking. A persona with a
1062
+ `disposition` is a virtual user; `runnable: false` marks someone who only ever
1063
+ exists to be acted upon — banned, shared with, reset — and is never handed a
1064
+ session.
1065
+
1066
+ **A persona names roles, never scopes.** Scopes come from `defineSystemRole()`
1067
+ expansion, so the build fails if a persona names a role nobody declared, and
1068
+ fails again if a role confers a scope no `defineScope` declares. Running one only
1069
+ ever has to check that its roles are still valid.
1070
+
1071
+ **Addresses are computed, never declared.** `personaEmail(id, domain, runId)`
1072
+ derives `<id>[+runId]@<domain>` from `scenarios.emailDomain`, so a seed, a
1073
+ scenario run and a virtual-user run cannot disagree about who they are signing in
1074
+ as. `scenarios.actors` and `scenarios.personas` are gone from
1075
+ `pikku.config.json` — only `emailDomain` remains.
1076
+
1077
+ `actor` survives in exactly one place: the name of a **slot in a scenario step**,
1078
+ which is the role a persona is cast in for that step. `pikkuVirtualUser()`,
1079
+ `kind`, `grants` and the `actor` field are removed; the `actors` service is now
1080
+ `personas`, and the CLI's `virtual-user` commands are now `pikku persona list` /
1081
+ `pikku persona run`. `budget` and `allowApprovalRequired` moved to run flags —
1082
+ how much you will spend today is not a fact about a person.
1083
+
1084
+ `@pikku/cucumber` drops its `Actor` class and `ActorDispatchContext`: a
1085
+ hand-rolled cookie jar that a persona's own typed session replaces outright.
1086
+
1087
+ - 0e0f6eb: Add virtual users: LLM-driven synthetic users that work a real stage in
1088
+ character.
1089
+
1090
+ A scenario proves a path somebody thought of. A virtual user works the same
1091
+ ground without the script — it signs in as a declared persona over the app's own
1092
+ auth, is handed the scenarios' BDD prose and the schema of every endpoint it may
1093
+ reach, and decides for itself what to do. It asserts nothing; a run produces
1094
+ findings, and their absence only ever means "not this time, not with this seed".
1095
+
1096
+ There is nothing extra to declare. A persona with a `disposition` is a virtual
1097
+ user, and running it is what makes it one — see the `definePersonas` changeset
1098
+ for the declaration itself. Listing, describing or running one never loads the
1099
+ app: the inspector reads the literal declaration, the CLI writes
1100
+ `scopes/pikku-personas-meta.gen.json`, and `MetaService.getPersonasMeta()`
1101
+ serves it.
1102
+
1103
+ **Dispositions are engine dials, not prose.** Each carries its own intent weights
1104
+ (continue / suspend / resume / abandon), temperature, re-read and repeat rates,
1105
+ and switches: `careless` puts things down and picks them up in the wrong order,
1106
+ `newcomer` starts with no memory, `auditor` is never offered a mutation,
1107
+ `adversarial` is shown the catalogue its roles do not cover — being offered a
1108
+ call it should not be able to make is the test — while those roles stay live as
1109
+ the oracle, so a success outside them is authorization drift rather than a pass.
1110
+
1111
+ **Nothing is retrieved against.** The whole reachable catalogue goes into the
1112
+ instructions (~8k tokens on a 430-RPC project, cached for the run), because a
1113
+ ranking function would make the user only as adventurous as the ranking and lose
1114
+ exactly the endpoints worth stumbling into. Schema first: an endpoint must be
1115
+ described before it may be called.
1116
+
1117
+ **No money in core.** The engine counts steps, calls, mutations and tokens; what
1118
+ they cost is the app's to decide through `stop(tally)`.
1119
+
1120
+ CLI: `pikku persona list` and `pikku persona run <environment> [name]`, with
1121
+ flags overriding a declaration for reproduction (`--seed`, `--steps`,
1122
+ `--disposition`). Spending is a run flag too — `--steps`, `--mutations` and
1123
+ `--duration` bound a run, because how much you will spend today is not a fact
1124
+ about a person. Console: a Virtual Users screen beside Scenarios, built out of
1125
+ core's own derivation functions so it shows a run's actual inputs rather than a
1126
+ second implementation of them.
1127
+
1128
+ `dev-ai-runner` now ships its own `@pikku/ai-vercel` and
1129
+ `@ai-sdk/openai-compatible` instead of requiring them from the project. Behind a
1130
+ proxy one openai-compatible provider answers for every prefix, so there was never
1131
+ a per-vendor package worth making somebody install; the project's copies still
1132
+ win when it has them, and both load from the same place or neither does.
1133
+
1134
+ - Updated dependencies [c984df6]
1135
+ - Updated dependencies [63ff32b]
1136
+ - Updated dependencies [ba6cc08]
1137
+ - Updated dependencies [d007191]
1138
+ - Updated dependencies [45859cf]
1139
+ - Updated dependencies [a7b26c5]
1140
+ - Updated dependencies [457cb25]
1141
+ - Updated dependencies [f7567ad]
1142
+ - Updated dependencies [ba6cc08]
1143
+ - Updated dependencies [a2e21e5]
1144
+ - Updated dependencies [457cb25]
1145
+ - Updated dependencies [86a50b9]
1146
+ - Updated dependencies [0e0f6eb]
1147
+ - @pikku/core@0.12.73
1148
+ - @pikku/better-auth@0.12.20
1149
+ - @pikku/knowledge@0.12.2
1150
+
1151
+ ## 0.12.34
1152
+
1153
+ ### Patch Changes
1154
+
1155
+ - b89d3b3: Bring the knowledge base into OSS: a package, a CLI gate, a console browser and a skill
1156
+
1157
+ `knowledge/` is where a project records the things `pikku meta` cannot tell you —
1158
+ what a slice is for, which rule was chosen and what it rules out, what is still an
1159
+ open question. Tables, routes, schemas and permissions are generated, so a note
1160
+ that repeats them is a copy that will drift, and the profile refuses the sections
1161
+ where that happens.
1162
+ - **`@pikku/knowledge`** (new) reads the notes, builds the link graph in both
1163
+ directions, and validates the app-project profile: every note typed, every
1164
+ section indexed, every slice carrying a third-person gherkin scenario and at
1165
+ most three entities, and every `resource:` URI resolving against the generated
1166
+ meta. The resource check fails closed on drift and open on ignorance — a prefix
1167
+ whose meta is absent is skipped rather than called dangling.
1168
+ - **`pikku knowledge validate`** and **`pikku knowledge index`** replace the dead
1169
+ three-flat-files check. Both exit non-zero on an inconsistent base, so a
1170
+ pipeline can stop on one; `index` refreshes each `index.md` listing while
1171
+ leaving the prose around it alone, and now gives a section that holds only
1172
+ sub-sections an index of its own instead of leaving it unreachable.
1173
+ - **The console** gains a read-only Knowledge page: notes grouped by section,
1174
+ a rendered document with its tags, resources, links in both directions and the
1175
+ findings against it, and intra-bundle markdown links that open the linked note
1176
+ instead of leaving the page. Read-only by design — a note is edited in the repo,
1177
+ in the same commit as the code it describes.
1178
+ - **The `pikku-knowledge` skill** documents the format for agents, and Fabric
1179
+ builds on it rather than restating it.
1180
+ - **`@pikku/inspector`**: a zod schema imported from a built workspace package
1181
+ resolved to that package's `.d.ts`, which has no runtime exports at all, so
1182
+ every schema in it was reported missing. The emitted JS beside it is imported
1183
+ instead.
1184
+
1185
+ - Updated dependencies [384e484]
1186
+ - Updated dependencies [b5a73fb]
1187
+ - Updated dependencies [6be5ab0]
1188
+ - Updated dependencies [b89d3b3]
1189
+ - @pikku/core@0.12.72
1190
+ - @pikku/knowledge@0.12.1
1191
+
1192
+ ## 0.12.33
1193
+
1194
+ ### Patch Changes
1195
+
1196
+ - 4c59a92: `db/pikku-db-schema.gen.json` now records who declared each table. Every entry carries a `source` — `app`, `better-auth`, `pikku-runtime`, or an addon's package name — and framework-declared tables also carry the `origin` prose from their migration header.
1197
+
1198
+ The console's Database view filters on that instead of guessing from a table-name prefix. The old guess (`workflow_`, `ai_`, `pikku_`) missed Better Auth's `user`, `session`, `account` and `verification`, the secrets, credentials, channel and webhook-delivery tables, and every addon's, all of which rendered as if the project owned them. A schema JSON generated before this change still falls back to the prefix guess, so an un-regenerated project sees no behaviour change.
1199
+
1200
+ Provenance is read back out of the generated migrations at codegen time — each one already names its source in its filename and its origin in its header — so `db migrate` needs no new inputs and does not have to load the project's Better Auth config.
1201
+
1202
+ - 637e668: State every package's license in the package itself.
1203
+
1204
+ Eight publishable packages had no `license` field, `@pikku/aws-services` said `UNLICENSED` by accident, and no package carried a LICENSE file at all — the grant lived only in the repo root, which npm tarballs never include. Every publishable package now declares its license and ships the matching LICENSE file, and `yarn check:licenses` fails the release if the two ever disagree.
1205
+
1206
+ `@pikku/console` is now explicitly BUSL-1.1 and named in the root LICENSE's Licensed Work alongside `@pikku/cli` and `@pikku/inspector`; the Additional Use Grant still permits production use for any purpose, including in free and open source software. Everything else — runtimes, services, clients, deploy adapters and the agent skills — is MIT, as the root LICENSE already said.
1207
+
1208
+ - a261006: **Breaking:** removed dynamic workflows — runtime-defined workflow graphs stored in the database and resolved by name instead of by codegen.
1209
+
1210
+ The feature was already half-gone. Its authoring surface (`createAgentWorkflow`, `saveAgentWorkflow`, `listAgentWorkflows`, `executeAgentWorkflow`, and the AI-agent instruction builder) was deleted in April 2026 along with its entire e2e suite, and nothing has written a dynamic workflow since. What remained could not execute one either: `executeAgentWorkflow` gated on `pikkuState('workflows', 'meta')`, which only codegen ever populates, so a graph that existed solely in the database was never findable. The two backend families had also drifted onto different `source` sentinels (`'ai-agent'` vs `'dynamic-workflow'`), and the two Redis implementations disagreed on key escaping — so at least one of them matched nothing. Rather than keep shipping plumbing for a path no caller could complete, it is removed until it can be reintroduced deliberately.
1211
+
1212
+ Removed:
1213
+ - `getAIGeneratedWorkflows` from `WorkflowService` and `WorkflowRunService`, and from every backend (in-memory, Redis, MongoDB, Kysely, and the Cloudflare Durable Object service and client — the last two were already a `return []` stub and a rejection).
1214
+ - The database-lookup fallbacks in `startWorkflow` and `runWorkflowJob` that resolved a workflow name against stored graphs when static meta had no match.
1215
+ - `'dynamic-workflow'` from the `WorkflowRuntimeMeta['source']` union.
1216
+ - `validateWorkflowWiring` and `computeEntryNodeIds` from `@pikku/core/workflow`. These validated AI-authored graphs and had no callers in core; the inspector keeps its own private entry-node computation for static graph wiring, which is unaffected.
1217
+ - The `workflow-created` AI stream event and its AG-UI `pikku:workflow-created` custom event. Its only emitter went with the April deletion, so it could never fire.
1218
+ - The console's `console:getAIWorkflows` RPC, the `useAIWorkflows` hook, the "Dynamic" workflow filter and badge, and the trigger-schema scraper that derived an input form from a stored graph's `$ref` bindings.
1219
+
1220
+ Kept, because static graph workflows depend on them and this is not a change to versioning:
1221
+ - `upsertWorkflowVersion`, `getWorkflowVersion`, `updateWorkflowVersionStatus`, and the `workflowVersions` storage in every backend. These back version-mismatch replay: when a deployed graph's hash changes, in-flight runs continue against the exact graph they started on. No schema migration is needed — the table, its columns, and its `(workflowName, graphHash)` upsert key are unchanged.
1222
+ - `generateMermaidDiagram`, which renders any workflow graph and is not specific to dynamic ones.
1223
+
1224
+ Static `pikkuWorkflowGraph` and DSL workflows are entirely unaffected: they resolve from codegen'd meta, which was always the only path that worked.
1225
+
1226
+ To revive this post-MVP, the deleted authoring code is recoverable in full — its prompt engineering (a compact tool table upfront, full schemas with flattened dotted output paths returned only after a validation failure) is worth reading before rewriting:
1227
+
1228
+ ```
1229
+ git show f52f3308b^:packages/core/src/wirings/ai-agent/agent-dynamic-workflow.ts
1230
+ git show f52f3308b^:packages/core/src/wirings/workflow/graph/graph-validation.ts
1231
+ git show f52f3308b --stat # the April removal, incl. the three e2e feature files
1232
+ ```
1233
+
1234
+ Note that reviving it needs more than restoring those files: the queued-step path (`executeWorkflowStep`), `onError` compensation, and sub-workflow resolution all read static meta only and would need a fallback for a graph that exists solely in the database.
1235
+
1236
+ - Updated dependencies [8a2c993]
1237
+ - Updated dependencies [a261006]
1238
+ - Updated dependencies [09973b9]
1239
+ - @pikku/core@0.12.71
1240
+
1241
+ ## 0.12.32
1242
+
1243
+ ### Patch Changes
1244
+
1245
+ - a436645: Redesign the console's scenarios screen as living documentation of a project's BDD features.
1246
+
1247
+ The inspector now statically extracts `pikkuFeature` declarations — name, description, tags, the scenarios each one groups (including `{ scenario, data }` examples), and whether it declares `before`/`after` — and the CLI writes them to `<outDir>/scenarios/features.gen.json`, which `MetaService.getFeaturesMeta()` reads and the console addon returns from `getAllMeta`.
1248
+
1249
+ The scenarios page reads that back as a document: features on the left, and on the right the selected feature's scenarios, each rendered as the given/when/then ladder of prose its author actually wrote, with repeats shown as `for each x in xs`, `Examples:` tables for parameterised entries, skip reasons stated rather than hidden, and each scenario's cast of personas inline. The Flows/Personas segmented control is gone; tags filter the document the same way `pikku scenario run --tags` filters a run.
1250
+
1251
+ - Updated dependencies [539ee0b]
1252
+ - Updated dependencies [a1a6816]
1253
+ - Updated dependencies [dc3e11e]
1254
+ - Updated dependencies [24da616]
1255
+ - Updated dependencies [04bfe3f]
1256
+ - Updated dependencies [5962e51]
1257
+ - Updated dependencies [5962e51]
1258
+ - Updated dependencies [cd6453c]
1259
+ - Updated dependencies [a436645]
1260
+ - Updated dependencies [46cf63e]
1261
+ - Updated dependencies [9e666bc]
1262
+ - Updated dependencies [1c841d8]
1263
+ - Updated dependencies [47478a4]
1264
+ - Updated dependencies [9e666bc]
1265
+ - Updated dependencies [5962e51]
1266
+ - Updated dependencies [5962e51]
1267
+ - Updated dependencies [61b9bf8]
1268
+ - @pikku/core@0.12.70
1269
+
1270
+ ## 0.12.31
1271
+
1272
+ ### Patch Changes
1273
+
1274
+ - 9a9ed6f: Detect the project's package manager instead of defaulting to yarn when installing an addon
1275
+
1276
+ ## 0.12.30
1277
+
1278
+ ### Patch Changes
1279
+
1280
+ - 118646d: Page the addon and API catalogues instead of loading them whole.
1281
+
1282
+ The APIs tab fetched a fixed first 100 entries out of ~2,500 and never fetched
1283
+ more, so most of the catalogue was unreachable and its search box only ever
1284
+ searched those 100. Both galleries now use infinite queries, pulling the next
1285
+ page as the grid scrolls.
1286
+
1287
+ Because a paged list can only be filtered honestly by the server, search,
1288
+ category, sort and the All/Official/Installed filter all moved to the registry,
1289
+ and the category rail's counts now come from a catalogue-wide facet call rather
1290
+ than being derived from the loaded rows.
1291
+
1292
+ **Breaking (`@pikku/addon-console`):** `getAddonMeta` took no input and returned
1293
+ `AddonMeta[]`. It now takes `{ cursor?, limit?, search?, category?, sort?,
1294
+ official?, names? }` and returns `{ packages, total, nextCursor }`. Callers that
1295
+ want the whole catalogue should walk `nextCursor` — the `useAddonMeta` hook in
1296
+ `@pikku/console` does this and still returns a flat array.
1297
+
1298
+ Adds `getAddonCategories` and `getOpenapiCategories`, and `category` to
1299
+ `getOpenapis`.
1300
+
1301
+ - Updated dependencies [f11675f]
1302
+ - @pikku/core@0.12.68
1303
+
1304
+ ## 0.12.29
1305
+
1306
+ ### Patch Changes
1307
+
1308
+ - ae4f59a: Gate admin capabilities on scopes, and scaffold user management
1309
+
1310
+ Admin capabilities were gated on `user.role === 'admin'` — a single text column
1311
+ meaning "can do everything". Impersonating a user, rebinding a shared
1312
+ credential and reading the user directory are distinct capabilities that one
1313
+ user can hold independently, so they are now scopes on an `admin` tree:
1314
+
1315
+ | Gate | Scope |
1316
+ | -------------------------------------- | ------------------------ |
1317
+ | impersonation | `admin:impersonate` |
1318
+ | `credentialOAuth`'s `canLinkSingleton` | `admin:credentials:link` |
1319
+ | reading the user directory | `admin:users:list` |
1320
+ | creating a user out of band | `admin:users:create` |
1321
+ | ban / unban | `admin:users:ban` |
1322
+ | delete a user | `admin:users:remove` |
1323
+ | revoke a user's sessions | `admin:users:sessions` |
1324
+ | set a user's password | `admin:users:password` |
1325
+
1326
+ Holding the bare `admin` scope satisfies all of them via pikku's existing
1327
+ parent-grant rule, so it is a one-for-one replacement for the old role.
1328
+
1329
+ better-auth's `admin()` plugin is still what implements ban, delete,
1330
+ session-revocation and set-password, so it stays. Its `user.role` column is no
1331
+ longer something pikku grants: it is _projected_ from the scope store when a
1332
+ session is built, and only from the scopes whose capability better-auth's own
1333
+ endpoints gate on the caller's role. Someone granted `admin:users:list` can read
1334
+ the directory — which goes straight to the auth adapter — without gaining the
1335
+ power to ban, and revoking a scope demotes the role on the next sign-in. Scopes
1336
+ remain the single source of truth.
1337
+
1338
+ New `scaffold.userAdmin` in `pikku.config.json` generates the whole set —
1339
+ `pikkuAdminListUsers`, `pikkuAdminCreateUser`, `pikkuAdminSetUserBanned`,
1340
+ `pikkuAdminRemoveUser`, `pikkuAdminRevokeUserSessions` and
1341
+ `pikkuAdminSetUserPassword` — into your project. Listing or banning a user is
1342
+ ordinary application behaviour and must not require installing the console.
1343
+ Codegen fails with an actionable error if better-auth is wired without
1344
+ `admin()`. The console's Users page calls these same functions, showing each
1345
+ action only where the caller holds its scope.
1346
+
1347
+ Every scaffold now emits a directory named for its domain — `scaffold/admin/`,
1348
+ `scaffold/rpc/`, `scaffold/agent/`, `scaffold/auth/`, `scaffold/console/`,
1349
+ `scaffold/graph/`, `scaffold/realtime/`, `scaffold/scenarios/`,
1350
+ `scaffold/webhook/`, `scaffold/workflow/` — holding its wiring file beside a
1351
+ `*.schemas.gen.ts` sibling, and every generated payload is a zod schema instead
1352
+ of a TypeScript generic. The schemas have to stand alone: the inspector reads a
1353
+ zod schema by importing the module that declares it, which it cannot do for a
1354
+ wiring file whose relative pikku-types import per-unit deploy codegen rewrites.
1355
+
1356
+ Resolving a schema by reference rather than by name also fixes the agent HTTP
1357
+ surface. `agentCaller` and `agentStreamCaller` take the same payload but had to
1358
+ repeat the type literal verbatim in each generic position, because the extractor
1359
+ synthesised the schema name from the _function_ name and so recorded an
1360
+ `inputSchemaName` with no schema behind it whenever the two shared a named
1361
+ alias — every agent call through that alias failed with `MissingSchemaError`.
1362
+ One `AgentCall` schema now backs both.
1363
+
1364
+ Where a payload's shape belongs to `@pikku/core` (`WorkflowRunStatus`,
1365
+ `FunctionCoverageReport`, `StubCall[]`) the generated function carries no
1366
+ `output` schema and the inspector infers it from the handler's return type;
1367
+ re-declaring a core type in zod would be a second definition free to drift.
1368
+
1369
+ Upgrading rewrites the layout in place: codegen prunes the pre-directory copy of
1370
+ each scaffold file before it inspects the source tree, since the old flat file
1371
+ still wires the same routes and leaving it behind would wire everything twice.
1372
+
1373
+ `@pikku/core` gains `hasScopes(required, held)`, the non-throwing counterpart to
1374
+ `verifyScopes`, and declares `auth` on `CoreSingletonServices` — the auth
1375
+ instance the generated `pikkuServices` wrapper already injected but never typed.
1376
+ A scope root declared twice (an addon and its host both contributing the same
1377
+ `admin` tree) now flattens to one entry per id instead of emitting it twice.
1378
+
1379
+ BREAKING: there is no role fallback for the scope-gated capabilities. An app
1380
+ that relied on the old default must register a `ScopeService` and grant `admin`
1381
+ (or a narrower `admin:*` scope). Every gate fails closed and warns when no
1382
+ `ScopeService` is registered. `delegatedAuth`'s `defaultRole`/`mapRole` now
1383
+ grant a pikku role through the `ScopeService` instead of writing better-auth's
1384
+ `role` column, and the `credentialOAuth` platform user no longer sets `banned`.
1385
+
1386
+ BREAKING: the console reads its user directory over the scaffolded
1387
+ `pikkuAdminListUsers` RPC (gated on `admin:users:list`, backed by better-auth's
1388
+ `$context.adapter`) instead of `client.admin.listUsers`, and
1389
+ `UsersTableUser`/`UsersTableLabels` no longer carry `role` — there is no role
1390
+ column to render. `@pikku/addon-console` no longer ships a `console:listUsers`
1391
+ function: user management is not the console's job, so a host that wants the
1392
+ Users page must enable `scaffold.userAdmin`.
1393
+
1394
+ - Updated dependencies [ae4f59a]
1395
+ - @pikku/better-auth@0.12.19
1396
+ - @pikku/core@0.12.67
1397
+
1398
+ ## 0.12.28
1399
+
1400
+ ### Patch Changes
1401
+
1402
+ - df54b6f: Drop dead service-existence guards from the console addon functions.
1403
+
1404
+ All 27 `if (!service) throw new MissingServiceError(...)` guards are removed.
1405
+ A service is optional only when nothing destructures it — in which case it is
1406
+ never created — so a guard inside a function that _does_ destructure it can
1407
+ never fire. Now that wired functions receive `WiredServices`, these are dead
1408
+ code and the compiler agrees: the addon typechecks with the guards gone.
1409
+
1410
+ Two function descriptions that documented the unreachable `MissingServiceError`
1411
+ are corrected.
1412
+
1413
+ - Updated dependencies [5f19016]
1414
+ - Updated dependencies [78e4778]
1415
+ - Updated dependencies [4324652]
1416
+ - Updated dependencies [de044f8]
1417
+ - Updated dependencies [cd1a811]
1418
+ - Updated dependencies [19fa6f0]
1419
+ - Updated dependencies [b501612]
1420
+ - Updated dependencies [eb37b1e]
1421
+ - @pikku/core@0.12.66
1422
+
1423
+ ## 0.12.27
1424
+
1425
+ ### Patch Changes
1426
+
1427
+ - 1dd7928: Route `getOpenapis`/`getOpenapiDetail` through `AddonService` and the fabric registry's `/registry/openapis` endpoints (unifying with the package funcs on `FABRIC_API_URL`), instead of the divergent `REGISTRY_URL`/`/api/openapis` path.
1428
+ - e3dc7d7: When installing a second-or-later instance of the same addon package, the console now writes namespace-scoped `secretOverrides`/`variableOverrides`/`credentialOverrides` into the generated `wireAddon` so the two instances don't silently share one credential. The first (sole) instance stays plain and keeps the package's documented logical names. Overrides are a sensible default only — the generated file is the user's to edit or drop (the runtime and inspector both fall back to the logical name when an override is absent).
1429
+ - 78f0b8c: The addon Setup tab is now instance-aware. A new `getAddonInstances` RPC returns every wired instance of a package with its per-instance overrides, and when a package is installed more than once the Setup tab shows an instance selector. The selected instance's `credentialOverrides`/`secretOverrides` are resolved so the OAuth connect and secret status/set actions target that instance's actual project names (and the resolved names are shown), instead of always acting on the package's shared logical names.
1430
+ - 13474a6: feat(scopes): grant scopes directly to a user, not only through roles
1431
+
1432
+ A scope can now be granted to a user directly, outside of any role.
1433
+ `resolveScopes` returns the union of a user's role-derived scopes and their
1434
+ direct grants, so a one-off capability no longer requires inventing a role.
1435
+ - `@pikku/core`: `ScopeService` gains `addScopeToUser` / `removeScopeFromUser` /
1436
+ `listUserScopes`.
1437
+ - `@pikku/kysely`: a new `pikku_user_scope` table (FK into `pikku_scopes`, so the
1438
+ database still refuses an undeclared grant; `ON DELETE CASCADE` from `user`,
1439
+ so deleting a user takes their direct grants with it). `resolveScopes` unions
1440
+ it with the role join.
1441
+ - `@pikku/addon-console`: `scopeAddScopeToUser` / `scopeRemoveScopeFromUser`
1442
+ (gated by `pikku:scopes:manage`), and `scopeListUserRoles` now also returns
1443
+ `directScopes`.
1444
+ - `@pikku/console`: a **Direct scopes** section in the user roles drawer to grant
1445
+ and revoke scopes directly, showing them distinctly from the resolved union.
1446
+
1447
+ Also: the Scopes page now distinguishes a permission error (a console admin
1448
+ without `pikku:scopes:read`) from an actual scope-service outage, instead of
1449
+ showing "the scope service may be unavailable" for both.
1450
+
1451
+ - 13474a6: feat: role and scope management functions
1452
+
1453
+ Adds functions over `ScopeService` for listing the declared scope vocabulary,
1454
+ composing roles from it, and granting roles to users. Grants take effect on the
1455
+ user's next request — no re-login.
1456
+
1457
+ These are self-hosting: the console declares its own `pikku:scopes:read` and
1458
+ `pikku:scopes:manage` scopes and requires them, so being able to reach the
1459
+ console is not the same as being able to grant yourself anything.
1460
+
1461
+ The addon's `createSingletonServices` now forwards the host's `scopeService`
1462
+ through to these functions — without it the addon composed a services object
1463
+ that dropped `scopeService`, so every scope RPC silently returned an empty
1464
+ result behind a passing scope gate.
1465
+
1466
+ - 4a624cc: Installing an addon now returns typed errors instead of a raw 500. Re-installing
1467
+ under a name that's already wired raises a `ConflictError` (409) with a clean,
1468
+ path-free message ("An addon is already installed under the name ..."), and
1469
+ invalid package/namespace/version inputs raise `BadRequestError` (400) — so the
1470
+ console surfaces them inline as user-facing errors rather than a server stack
1471
+ trace.
1472
+ - 70fa400: Add outgoing webhooks — `webhookService.send()` enqueues signed deliveries onto a retrying queue, `@pikku/kysely`'s `KyselyWebhookService` persists per-attempt delivery history, and `@pikku/console` gains a read-only `/webhooks` page; also caches resolved secrets in `TypedSecretService` and registers inline-`func` metadata for queue/scheduler/trigger/gateway wirings.
1473
+ - 3c75366: Key `secretOverrides`/`variableOverrides` on the secretId/variableId (the string the addon actually reads by — its typed map is keyed by id, e.g. `getSecret('MAILGUN_CREDENTIALS')`), not the logical meta name. The runtime aliaser already keys on the id, but the inspector merge + validation keyed on the logical name, so a correctly-keyed override failed validation and never provisioned its target whenever an addon's logical name differed from its id (the common case — `mailgun`/`MAILGUN_CREDENTIALS`). The existing test masked it by using a secret whose name equalled its id. The merge now resolves and provisions by id (with a name-fallback for older meta), validation checks ids, and the console install codegen generates overrides keyed by id.
1474
+ - 1dc77d5: Remove the old, pre-better-auth OAuth2 credential runtime now that the
1475
+ `credentialOAuth` plugin owns credential linking, storage and refresh.
1476
+ - `@pikku/core`: drop the unused `createOAuth2Handler` HTTP-routes flow (and its
1477
+ `CreateOAuth2HandlerOptions`) from the `./oauth2` entrypoint. The credential
1478
+ schema types (`OAuth2AppCredential`, `OAuth2Token`) and the `OAuth2Client`
1479
+ API helper remain exported.
1480
+ - `@pikku/addon-console`: delete the six `oauth-*` console functions
1481
+ (connect/disconnect/status/exchange-tokens/refresh-token/test-token) and the
1482
+ `OAuthService` behind them — credential connections now flow through
1483
+ better-auth's `/credential-oauth/link` + `/callback`.
1484
+ - `@pikku/console`: the credential UI no longer calls the removed
1485
+ `console:oauth*` RPCs. Per-user and singleton (platform) OAuth2 credentials
1486
+ connect via the `/credential-oauth/link` full-page redirect and disconnect via
1487
+ `console:credentialDelete`; the `/oauth/callback` popup page is removed.
1488
+
1489
+ - Updated dependencies [7ab5287]
1490
+ - Updated dependencies [e86bc17]
1491
+ - Updated dependencies [a9b96a0]
1492
+ - Updated dependencies [3f7fc54]
1493
+ - Updated dependencies [c478794]
1494
+ - Updated dependencies [3f04ae4]
1495
+ - Updated dependencies [90d9f04]
1496
+ - Updated dependencies [cb079cc]
1497
+ - Updated dependencies [cb079cc]
1498
+ - Updated dependencies [0a7db82]
1499
+ - Updated dependencies [981c4db]
1500
+ - Updated dependencies [13474a6]
1501
+ - Updated dependencies [5a2b0d5]
1502
+ - Updated dependencies [13474a6]
1503
+ - Updated dependencies [ee040dc]
1504
+ - Updated dependencies [cb079cc]
1505
+ - Updated dependencies [13474a6]
1506
+ - Updated dependencies [9f0d0eb]
1507
+ - Updated dependencies [13474a6]
1508
+ - Updated dependencies [70fa400]
1509
+ - Updated dependencies [7b2ea23]
1510
+ - Updated dependencies [1dc77d5]
1511
+ - Updated dependencies [416606c]
1512
+ - Updated dependencies [d2a6eea]
1513
+ - Updated dependencies [30e62ee]
1514
+ - @pikku/core@0.12.64
1515
+
1516
+ ## 0.12.26
1517
+
1518
+ ### Patch Changes
1519
+
1520
+ - cd0cff1: Remove the `pikku tests` harness in favour of scenarios (`pikku scenario run` + `pikku dev --coverage`).
1521
+ - `@pikku/cli`: `pikku tests init` / `pikku tests coverage` are gone, along with the workspace-validate hints that suggested scaffolding the ftest harness.
1522
+ - `@pikku/cucumber`: refactored to e2e-only — keeps `Actor`, the browser world, `createDbUtils`, `PersonaData`, and the `StubTracker` re-export; the in-process function world (`createFunctionWorld`, `registerHooks`, `registerCommonSteps`, stub wires) is removed.
1523
+ - `@pikku/console`: the Tests page is removed; Scenarios moves to `/scenarios`.
1524
+ - `@pikku/addon-console`: `runFunctionTests` / `streamFunctionTests` / `getFunctionCoverage` RPCs are removed — live coverage via `takeLiveCoverage` / `resetLiveCoverage` (from `pikku dev --coverage`) replaces the file-based report.
1525
+
1526
+ - ded4f90: `pikku scenario --coverage` no longer requires the console addon
1527
+
1528
+ The scenario instrumentation RPCs (take/reset live coverage, reset stubs, get
1529
+ stub calls) previously shipped inside the console addon, so any project
1530
+ without the addon silently lost scenario coverage and stub assertions — and
1531
+ core's `expectService` hardcoded a `console:` RPC, assuming an addon was
1532
+ installed.
1533
+
1534
+ A new `scaffold.scenarios` feature (`pikku enable scenarios`, or
1535
+ `"scaffold": { "scenarios": "auth" }` in pikku.config.json) generates the
1536
+ four functions into the project scaffold as `pikkuScenario*` exposed RPCs.
1537
+ The scenario runner and `expectService` now invoke those names and the
1538
+ addon copies were removed. The source-map-aware coverage mapping (and its
1539
+ `@jridgewell/trace-mapping` dependency) moved from the addon into the CLI:
1540
+ `@pikku/core` gains only the report types plus an optional
1541
+ `CoverageService.takeReport`, which the CLI-booted coverage service
1542
+ implements and the scaffolded function calls.
1543
+
1544
+ - Updated dependencies [ded4f90]
1545
+ - @pikku/core@0.12.54
1546
+
1547
+ ## 0.12.25
1548
+
1549
+ ### Patch Changes
1550
+
1551
+ - efb0406: Add in-process V8 precise coverage (`pikku dev --coverage` / `pikku serve --coverage`) with per-scenario attribution.
1552
+ - `@pikku/core`: new `V8CoverageService` (node:inspector precise coverage with snapshot + reset), exposed as the optional `coverageService` singleton service.
1553
+ - `@pikku/inspector`: function meta now records `bodyStart`/`bodyEnd` body spans (verbose meta only) so coverage can be mapped without a runtime TypeScript dependency.
1554
+ - `@pikku/cli`: `--coverage` on `pikku dev` and `pikku serve` starts the collector in-process; `pikku scenario run --coverage` resets/snapshots the server between flows and writes `.pikku/coverage/scenario-coverage.json` with per-scenario function coverage.
1555
+ - `@pikku/addon-console`: new exposed `takeLiveCoverage` / `resetLiveCoverage` RPCs; V8 ranges are mapped through inline source maps to original TypeScript lines (offset-based, so esbuild/tsx single-line output keeps full resolution).
1556
+
1557
+ - fe4f5ca: Add `stub`/`spy`/`isTestRun` core utils with call recording for scenario assertions.
1558
+ - `@pikku/core`: `StubTracker` moves here from `@pikku/cucumber` (which re-exports it), gaining `record`/`getCalls`/`reset`. New plain-import utils backed by a process-wide tracker: `stub(name, impl?)` (recording fake), `spy(name, real)` (record + pass through), `isTestRun()` (reads `PIKKU_TEST_RUN`). Nothing is injected into service factories and no new factory types exist — swap services with a plain `isTestRun()` conditional where needed. New scenario DSL steps: `workflow.expectService('email.send', { calledWith })` asserts recorded stub calls via the console RPC, `workflow.expectError(...)` walks error branches.
1559
+ - `@pikku/cli`: `pikku dev --test` sets `PIKKU_TEST_RUN` and wraps the dev-provided default services (email) in recording spies; independent of `--coverage`, absent from production `pikku serve`. `pikku scenario run` resets recorded calls per flow.
1560
+ - `@pikku/addon-console`: exposed `getStubCalls` / `resetStubs` RPCs next to the coverage snapshot endpoints.
1561
+
1562
+ - Updated dependencies [efb0406]
1563
+ - Updated dependencies [fe4f5ca]
1564
+ - @pikku/core@0.12.53
1565
+
1566
+ ## 0.12.24
1567
+
1568
+ ### Patch Changes
1569
+
1570
+ - 472a349: Rename the userflow concept to scenario (#862). `pikkuUserFlow` becomes `pikkuScenario`, `pikku userflow run/list` becomes `pikku scenario run/list`, the workflow meta flag `userFlow` becomes `scenario`, actor types are now `ScenarioActor`/`ScenarioActors`/`ScenarioActorConfig` (`createHttpScenarioActors`), pikku.config.json's `userFlows` key becomes `scenarios`, the generated actors file is `pikku-scenario-actors.gen.ts` (`createScenarioActors`), the actor sign-in secret env var is `SCENARIO_ACTOR_SECRET`, and the console's User Flows view is now Scenarios.
1571
+ - Updated dependencies [61c9ce9]
1572
+ - Updated dependencies [f1f39f8]
1573
+ - Updated dependencies [c45e98d]
1574
+ - Updated dependencies [472a349]
1575
+ - @pikku/core@0.12.52
1576
+
1577
+ ## 0.12.23
1578
+
1579
+ ### Patch Changes
1580
+
1581
+ - b919815: Fix "pikku.config.json not found" on installAddon/installOpenapiAddon (and a matching bug in createSingletonServices' projectRoot for StateDiffService/CodeEditService) in monorepo layouts. These derived the project root as `dirname(metaService.basePath)`, which is only correct when `.pikku` sits directly next to pikku.config.json. In Fabric sandboxes (basePath is `packages/functions/.pikku`), that resolved to `packages/functions` instead of the real root, so pikku.config.json was never found. A new findProjectRoot() walks up from basePath looking for pikku.config.json, matching the CLI's own findConfigFile() behavior.
1582
+ - e57dd65: console addon: require an authenticated session by default
1583
+
1584
+ All exposed console RPCs are now `pikkuFunc` (require a session) instead of
1585
+ `pikkuSessionlessFunc` + `auth: false` — the console is an admin surface, so it
1586
+ should never be reachable anonymously. The two SSE streaming routes
1587
+ (`/workflow-run/:runId/stream`, `/function-tests/stream`) stay sessionless, since
1588
+ their HTTP wiring is intentionally `auth: false`.
1589
+
1590
+ Behaviour change for consumers: a host that mounts `@pikku/addon-console` must
1591
+ provide an authenticated session (e.g. via better-auth) to reach console RPCs —
1592
+ unauthenticated calls now return `403`. Permission policy on top of "must be
1593
+ logged in" (admin-only, org scoping, …) remains host-owned via tag/HTTP
1594
+ middleware; the addon only enforces the baseline.
1595
+
1596
+ `@pikku/cli`:
1597
+ - `pikku all` now **throws** when `scaffold.console` is enabled but no
1598
+ `pikkuBetterAuth(...)` is found in the project — scaffolding the console
1599
+ without an auth strategy would produce a console that 403s on every call, so
1600
+ `scaffold.console` alone is no longer the minimum.
1601
+ - The scaffolded `console.gen.ts` secret/variable RPCs (`setSecret`, `getSecret`,
1602
+ `hasSecret`, `getVariable`, `setVariable`) are now generated as `pikkuFunc`
1603
+ (require a session) instead of `pikkuSessionlessFunc` + `auth: false` — these
1604
+ read/write secrets and must never be anonymous. The two SSE routes stay
1605
+ `auth: false`.
1606
+ - `scaffold.console` is now always `"auth"` (the `"no-auth"` mode is gone for the
1607
+ console): `pikku enable console` writes `"auth"` and ignores `--no-auth`.
1608
+
1609
+ - e57dd65: feat(console): surface the `pikku audit` report in the dev console
1610
+
1611
+ Adds a view-only **Security** screen to the pikku dev console that renders the
1612
+ dependency audit produced by `pikku audit` (`.pikku/audit.json`): known
1613
+ vulnerabilities (severity, advisory, recommended version) and available
1614
+ dependency updates.
1615
+ - `@pikku/core`: exports the canonical `SecurityAuditReport` artifact type (plus
1616
+ `SecurityAuditIssue`/`SecurityAuditUpdate`/`SecurityAuditSummary` and the
1617
+ `SecuritySeverity`/`SecurityUpdateLevel` unions) — a single source of truth
1618
+ shared by the CLI (writer), the console addon (reader) and the console UI.
1619
+ - `@pikku/addon-console`: `getSecurityAudit` reads the audit artifact via the
1620
+ meta service; `runSecurityAudit` triggers `pikku audit --outdated` server-side
1621
+ (regenerating the artifact) — same shape as the Run Tests action;
1622
+ `updateDependency` bumps a package in `package.json` (preserving the `^`/`~`
1623
+ range), runs `bun install`, re-audits, and returns the fresh report.
1624
+ - `@pikku/console`: new `SecurityPage` with a **Run audit** button + reusable
1625
+ presentational `SecurityAuditView` (exported, so downstream consoles can wrap
1626
+ it with their own actions) + `useSecurityAudit`/`useRunSecurityAudit`/
1627
+ `useUpdateDependency` hooks. Issues/Dependencies lenses; per-finding
1628
+ remediation slot right-aligned in the row header (`renderRemediation`,
1629
+ defaulting to the OSS `UpdateDependencyButton`; Fabric swaps in its own
1630
+ sandbox-verified action). Empty state until an audit has been run.
1631
+
1632
+ - Updated dependencies [7ebea62]
1633
+ - Updated dependencies [e57dd65]
1634
+ - @pikku/core@0.12.51
1635
+
1636
+ ## 0.12.22
1637
+
1638
+ ### Patch Changes
1639
+
1640
+ - 92bd643: User flows in the console: workflow graph extraction now captures
1641
+ `workflow.expectEventually` steps and per-step actor names (`{ actor:
1642
+ actors.x }`), workflow meta carries `actors`/`title` into the serialized
1643
+ graph, the CLI emits `user-flow-actors.gen.json` for the new
1644
+ `MetaService.getUserFlowActorsMeta()`, and the console Workflows page gains a
1645
+ Workflows / User Flows / Personas toggle. Also fixes complex-workflow graphs
1646
+ being clobbered by a duplicate basic-extraction pass after successful DSL
1647
+ extraction.
1648
+ - Updated dependencies [35a9bab]
1649
+ - Updated dependencies [92bd643]
1650
+ - @pikku/core@0.12.50
1651
+
1652
+ ## 0.12.21
1653
+
1654
+ ### Patch Changes
1655
+
1656
+ - 41ce2cb: Upgrade to TypeScript 6 and raise the minimum Node.js version to 22.
1657
+
1658
+ All packages now build against `typescript@^6.0.3` and declare `engines.node >= 22`. Internal tooling (`ts-json-schema-generator`, `zod-to-ts`) was bumped to TypeScript 6-compatible releases.
1659
+
1660
+ - Updated dependencies [41ce2cb]
1661
+ - @pikku/core@0.12.44
1662
+
1663
+ ## 0.12.20
1664
+
1665
+ ### Patch Changes
1666
+
1667
+ - a1acc23: fix(console): make the Tests tab show scenarios after a run
1668
+
1669
+ The Tests tab renders scenarios from `meta.functions[].tests.scenarios`, which
1670
+ `readAllMeta()` builds by reading the function-tests harness's coverage JSON and
1671
+ Cucumber HTML report. Three drifts left every function with `tests: undefined`:
1672
+ - **`loadFunctionTests` looked in the wrong place.** It probed
1673
+ `function-tests/coverage/function-coverage.json` and
1674
+ `function-tests/tests/reports/cucumber-report.html`, but the harness (and
1675
+ `pikku tests coverage`) actually write `tests/.coverage/function-coverage.json`
1676
+ and `tests/tests/reports/cucumber-report.html`. It now anchors on
1677
+ `resolveFunctionsDir(metaService.basePath)` — the same single source of truth
1678
+ the run handlers and coverage writer use — and keeps the old relative paths as
1679
+ a fallback.
1680
+ - **The console "Run tests" stream never wrote the HTML report.** It ran
1681
+ Cucumber with `--format message` only (for the live view), so scenarios
1682
+ vanished once the run finished. It now also emits
1683
+ `html:tests/tests/reports/cucumber-report.html`.
1684
+ - **`pikku tests coverage` had the same gap** — no `--format`, so no report.
1685
+ It now writes the HTML report alongside the default progress output.
1686
+
1687
+ ## 0.12.19
1688
+
1689
+ ### Patch Changes
1690
+
1691
+ - fa7a09c: Add gateway metadata generation and display enabled gateways in the console.
1692
+ - Updated dependencies [ae7fc5d]
1693
+ - Updated dependencies [fa7a09c]
1694
+ - @pikku/core@0.12.37
1695
+
1696
+ ## 0.12.18
1697
+
1698
+ ### Patch Changes
1699
+
1700
+ - 25a1f6d: Make the function-test harness work for monorepo + engine-aware projects:
1701
+ - `@pikku/addon-console`: the Run-tests and coverage handlers now resolve the
1702
+ functions dir robustly (`<root>/packages/functions` when present), and
1703
+ `getFunctionCoverage` reads the actual coverage output path
1704
+ (`tests/.coverage/function-coverage.json`) instead of a stale
1705
+ `function-tests/coverage/...` path — so the console's coverage button works in
1706
+ monorepo sandboxes.
1707
+ - `@pikku/cli`: `pikku tests init` now detects the db engine (`db/sqlite` /
1708
+ `db/postgres`) and points the harness at the correct migrations + seed
1709
+ (`db/<engine>` + `db/<engine>-seed.sql`) instead of the hardcoded
1710
+ `db/migrations`. It also scaffolds a green starter `example.feature` and an
1711
+ empty `yarn.lock` (so the standalone tests package installs under Yarn Berry).
1712
+ Postgres harness support is tracked in #758.
1713
+ - `@pikku/cucumber`: `createDbUtils.buildBaseDb` tolerates a missing/empty
1714
+ migrations dir or seed file instead of crashing on `scandir('')`.
1715
+
1716
+ - Updated dependencies [f6adc1c]
1717
+ - @pikku/core@0.12.36
1718
+
1719
+ ## 0.12.17
1720
+
1721
+ ### Patch Changes
1722
+
1723
+ - 0a2af8b: Stop addon packages from rebuilding via the workspace pikku CLI at publish time.
1724
+
1725
+ `npx changeset publish` runs up to 10 `npm publish` processes concurrently, and
1726
+ `@pikku/cli`'s publish build (`build.sh`) starts with `rm -rf -- .pikku dist`.
1727
+ An addon whose `prepublishOnly` ran the workspace CLI (`pikku all`, or a
1728
+ `build.sh` invoking `cli/dist/bin/pikku.js`) could read `packages/cli/dist`
1729
+ mid-wipe and fail with `Cannot find module '.../cli/dist/src/services.js'`,
1730
+ breaking the release. `yarn release` already builds every package before
1731
+ publishing, so the `prepublishOnly` rebuild was redundant; it has been removed
1732
+ from both addons and a `check:no-publish-rebuild` guard now fails CI if any
1733
+ published package reintroduces a publish-time CLI rebuild.
1734
+
1735
+ ## 0.12.16
1736
+
1737
+ ### Patch Changes
1738
+
1739
+ - 807a8d0: Fix the `build` script masking failures. The trailing `2>/dev/null; true` sat outside the `&&` chain, so `yarn build` could exit `0` even when `pikku all` or `tsc` failed, hiding broken builds. `pikku all` and `tsc` failures now propagate, while each `.d.ts` copy step is independently tolerant (`|| true`) so a missing `rpc`/`agent`/`workflow` directory no longer blocks the others or fails the build.
1740
+
1741
+ ## 0.12.15
1742
+
1743
+ ### Patch Changes
1744
+
1745
+ - 5283434: Redesign the Addons → Community tab as a card gallery: a hero banner, a category rail derived from addon metadata, a sort bar, and addon cards (category icon, publisher badge, tags, function/agent stats, install action). Selecting a card opens a right-hand detail drawer with an Overview ("What's included" surface tiles + publisher) and Functions tab, replacing the full-page navigation. Installed and APIs tabs are unchanged.
1746
+
1747
+ The community catalog now reads from the Fabric registry API (`FABRIC_API_URL`, default `https://api.pikkufabric.com`) via `/registry/packages` instead of the standalone registry.
1748
+
1749
+ - Updated dependencies [6bca38f]
1750
+ - @pikku/core@0.12.35
1751
+
1752
+ ## 0.12.14
1753
+
1754
+ ### Patch Changes
1755
+
1756
+ - a027a8e: feat: emit auth provider + plugin metadata as `auth-meta.gen.json` for the console SSO page
1757
+
1758
+ The enabled social providers and Better Auth plugins are now extracted statically
1759
+ and written to a generated `auth-meta.gen.json`, replacing the runtime
1760
+ `setAuthRegistry`/`getAuthRegistry` approach — so the console can show them without
1761
+ evaluating the Better Auth factory.
1762
+ - **inspector**: the `pikkuBetterAuth` inspector now reads the `plugins` array from
1763
+ the `betterAuth({ ... })` config and records each plugin id (the callee name of
1764
+ each `plugins: [organization(), bearer()]` entry) on the auth definition.
1765
+ - **cli**: `pikku auth` (and `pikku all`) emit `auth/pikku-auth-meta.gen.json` (path
1766
+ configurable via `authMetaJsonFile`) containing `basePath`, `hasCredentials`, the
1767
+ enabled `providers` (`id` + `displayName` + `secretId`), and the enabled `plugins`
1768
+ (`id` + `displayName`). The previous `setAuthRegistry(...)` runtime wiring is
1769
+ removed from the generated `auth.gen.ts`.
1770
+ - **better-auth**: exports a `PLUGIN_REGISTRY` and `pluginDisplayName(id)` helper so
1771
+ plugin ids resolve to human-readable names.
1772
+ - **core**: removes the unreleased `setAuthRegistry`/`getAuthRegistry` runtime auth
1773
+ registry (now superseded by `auth-meta.gen.json`).
1774
+ - **addon-console**: `getAuthProviders` reads `auth-meta.gen.json` and returns the
1775
+ configured providers, plugins, and `hasCredentials` flag.
1776
+ - **console**: the Auth Providers (SSO) page fetches `console:getAuthProviders` and
1777
+ marks each provider configured/unconfigured, lists email+password credentials as a
1778
+ provider, and shows the enabled Better Auth plugins.
1779
+
1780
+ - a027a8e: feat(auth): migrate auth integration from Auth.js to Better Auth
1781
+
1782
+ The auth integration is now built on [Better Auth](https://better-auth.com)
1783
+ and ships as a single package, `@pikku/better-auth` (replacing the former
1784
+ `@pikku/auth-js`). There is exactly one auth package now.
1785
+ - `pikkuBetterAuth(async ({ secrets, variables }) => betterAuth({ ... }))` is the new
1786
+ single entry point. The CLI inspects the `betterAuth(...)` call and generates:
1787
+ - `auth.gen.ts` — a catch-all `${basePath}{/*splat}` HTTP route per method and
1788
+ a global `betterAuthSession({ auth })` middleware that bridges the Better
1789
+ Auth session into the Pikku wire session.
1790
+ - `auth-secrets.gen.ts` — `wireSecret(BETTER_AUTH_SECRET)` plus a
1791
+ `<PROVIDER>_OAUTH` secret for each configured social provider, and
1792
+ `wireVariable` for non-secret provider config (e.g. `MICROSOFT_TENANT_ID`,
1793
+ `COGNITO_DOMAIN`/`REGION`/`USER_POOL_ID`).
1794
+ - `auth.types.ts` — a typed `pikkuBetterAuth` re-export.
1795
+ - `add-auth` (inspector) walks into the `betterAuth(...)` options to discover the
1796
+ configured providers and required secrets/variables.
1797
+ - The auth secret is now auto-wired by codegen from `BETTER_AUTH_SECRET` — it no
1798
+ longer needs to be registered as a JWT signing key in `services.ts`.
1799
+
1800
+ CLI fix included: scaffold files generated outside `srcDirectories` (e.g. an
1801
+ `auth.gen.ts` under a project's `pikku/` dir) are now added to the inspector's
1802
+ wiring files, so their routes and secret metadata are picked up. The generated
1803
+ wiring imports Pikku types via a resolved relative path instead of a hardcoded
1804
+ `#pikku` specifier, so templates without a `#pikku` import map type-check.
1805
+
1806
+ - Updated dependencies [a027a8e]
1807
+ - Updated dependencies [a027a8e]
1808
+ - Updated dependencies [a027a8e]
1809
+ - Updated dependencies [a027a8e]
1810
+ - @pikku/core@0.12.32
1811
+
1812
+ ## 0.12.13
1813
+
1814
+ ### Patch Changes
1815
+
1816
+ - f95dd07: feat(console): add an HTML tab to the email preview with an inline source editor
1817
+
1818
+ The email preview now has a Desktop | Mobile | HTML toggle. The HTML tab shows the
1819
+ raw template source (`templates/<name>.html`) in a CodeMirror editor with a Save
1820
+ button that writes the file back via a new `console:updateEmailTemplate` RPC
1821
+ (local-dev only, mirrors `updateFunctionBody`), so small edits can be made from the
1822
+ console without leaving the preview. Saving invalidates and re-renders the preview.
1823
+ - `renderEmailPreview` now returns `source` (the un-rendered template HTML) so the
1824
+ editor binds to the source, never the rendered output.
1825
+
1826
+ - 409ec80: feat(console): Tests page with live SSE streaming and function test harness
1827
+ - `@pikku/addon-console`: add `streamFunctionTests` SSE function that runs the
1828
+ cucumber/c8 test harness and streams structured per-scenario events
1829
+ (scenario-start, step, scenario-done, done)
1830
+ - `@pikku/console`: TestsPage live run view — renders scenario names and step
1831
+ status in real time during a test run via SSE; adds `usePikkuSSE` hook and
1832
+ `showRunButton` prop
1833
+ - `@pikku/fetch`: add `subscribePikkuSSE` helper for typed server-sent event
1834
+ streams
1835
+ - `@pikku/cli`: wire SSE-returning functions through the console serialiser and
1836
+ RPC wrapper so the stream route is included in generated clients
1837
+
1838
+ - Updated dependencies [cd101a5]
1839
+ - Updated dependencies [ac16265]
1840
+ - Updated dependencies [a05e864]
1841
+ - Updated dependencies [20750fd]
1842
+ - @pikku/core@0.12.30
1843
+
1844
+ ## 0.12.12
1845
+
1846
+ ### Patch Changes
1847
+
1848
+ - 5093725: runFunctionTests throws a descriptive error when tests dir is missing instead of returning null; db-codegen formatting reflow
1849
+
1850
+ ## 0.12.11
1851
+
1852
+ ### Patch Changes
1853
+
1854
+ - cd237c3: fix(pikku-console): use correct `tests` dir and `.coverage` output path in runFunctionTests
1855
+
1856
+ ## 0.12.10
1857
+
1858
+ ### Patch Changes
1859
+
1860
+ - fd61eb0: **Database schema visualizer in the OSS console.**
1861
+
1862
+ A new `/database` route renders an interactive flowchart of your local development database directly in the pikku console.
1863
+
1864
+ Changes:
1865
+ - `@pikku/addon-console`: new `console:getDbSchema` RPC backed by `DbSchemaService`. Introspects SQLite (Node 22+ built-in `node:sqlite`) or Postgres (`pg`, resolved via `DATABASE_URL` / `POSTGRES_URL`). Foreign-key edges are inferred from `PRAGMA foreign_key_list` (SQLite) or `information_schema` (Postgres). Classification data is merged from `db/annotations.gen.json` when present.
1866
+ - `@pikku/console`: new `DatabasePage` with a ReactFlow/ELK layout canvas. Columns are colour-coded by classification (public = teal, private = orange, secret = red). Includes a hide-internal-tables toggle and a refresh button.
1867
+
1868
+ - Updated dependencies [4b5c75b]
1869
+ - Updated dependencies [4b5c75b]
1870
+ - @pikku/core@0.12.27
1871
+
1872
+ ## 0.12.9
1873
+
1874
+ ### Patch Changes
1875
+
1876
+ - 9060165: Agents now declare their model directly as `<provider>/<model>` (e.g. `openai/gpt-4o`). The `models`, `agentDefaults`, and `agentOverrides` config blocks have been removed.
1877
+
1878
+ **Migration:** replace any bare `model: 'alias'` values with the full provider-qualified form and remove those blocks from `pikku.config.json`.
1879
+
1880
+ - 9060165: New `pikku tests init` scaffolds a Cucumber BDD test harness in your functions package. The companion `@pikku/cucumber` package provides the world, hooks, step library, and database utilities — wiring real Pikku RPC dispatch against an in-process SQLite copy seeded from migrations. `pikku tests coverage` generates per-function coverage summaries, surfaced in the console.
1881
+ - Updated dependencies [9060165]
1882
+ - Updated dependencies [9060165]
1883
+ - Updated dependencies [9060165]
1884
+ - @pikku/core@0.12.21
1885
+
1886
+ ## 0.12.0
1887
+
1888
+ ## 0.12.8
1889
+
1890
+ ### Patch Changes
1891
+
1892
+ - fbcf5b9: Console UX improvements: syntax highlighting for all code blocks, schema-aware client usage snippets for HTTP routes, HTTP tab sidebar layout, CLI/channel breadcrumb cleanup, detail panel max-width constraint
1893
+ - Updated dependencies [fbcf5b9]
1894
+ - @pikku/core@0.12.16
1895
+
1896
+ ## 0.12.7
1897
+
1898
+ ### Patch Changes
1899
+
1900
+ - 624097e: Add deploy pipeline with provider-agnostic architecture
1901
+ - Add MetaService with explicit typed API, absorb WiringService reads
1902
+ - Add deployment service, traceId propagation, scoped logger
1903
+ - Rewrite analyzer: one function = one worker, gateways dispatch via RPC
1904
+ - Add Cloudflare deploy provider with plan/apply commands
1905
+ - Add per-unit filtered codegen for deploy pipeline
1906
+ - Skip missing metadata in wiring registration for deploy units
1907
+ - Fix schema coercion crash when schema has no properties
1908
+ - Fix E2E codegen: double-pass resolves cross-package Zod type imports
1909
+
1910
+ - Updated dependencies [9e8605f]
1911
+ - Updated dependencies [624097e]
1912
+ - Updated dependencies [7ab3243]
1913
+ - @pikku/core@0.12.15
1914
+
1915
+ ## 0.12.6
1916
+
1917
+ ### Patch Changes
1918
+
1919
+ - f85c234: Add unified credential system with per-user OAuth and AI agent pre-flight checks
1920
+ - Unified CredentialService with lazy loading per user via pikkuUserId
1921
+ - wire.getCredential() for typed single credential lookup
1922
+ - MissingCredentialError with structured payload for client-side connect flows
1923
+ - Console UI: Global/Users credential tabs, per-user OAuth connect/revoke
1924
+ - AI agent pre-flight check: detects missing OAuth credentials from addon metadata, shows "Connect your accounts" prompt before chat
1925
+ - CLI codegen: generates credentialsMeta per addon package for runtime lookup
1926
+ - Vercel AI runner: catches MissingCredentialError as runtime fallback
1927
+
1928
+ - Updated dependencies [f85c234]
1929
+ - Updated dependencies [88d3100]
1930
+ - @pikku/core@0.12.14
1931
+
1932
+ ## 0.12.5
1933
+
1934
+ ### Patch Changes
1935
+
1936
+ - Fix publish: ensure dist/.pikku/ generated files are included in the published package
1937
+
1938
+ ## 0.12.4
1939
+
1940
+ ### Patch Changes
1941
+
1942
+ - Fix `#pikku` import alias: use conditional exports so published package resolves to compiled `dist/.pikku/pikku-types.gen.js` at runtime while keeping `.ts` for types during development
1943
+
1944
+ ## 0.12.3
1945
+
1946
+ ### Patch Changes
1947
+
1948
+ - Fix publish: exports now point to compiled dist/.pikku/ instead of root .pikku/ (TS-only), ensuring consumers can import .pikku/pikku-bootstrap.gen.js
1949
+ - Remove redundant cp in build script that was overwriting compiled JS with source TS
1950
+
1951
+ ## 0.12.2
1952
+
1953
+ ### Patch Changes
1954
+
1955
+ - 387b2ee: Add agent thread/run management functions, workflow run streaming, and refactor services to receive DB services from host app
1956
+ - Updated dependencies [387b2ee]
1957
+ - Updated dependencies [32ed003]
1958
+ - Updated dependencies [7d369f3]
1959
+ - Updated dependencies [508a796]
1960
+ - Updated dependencies [ffe83af]
1961
+ - Updated dependencies [c7ff141]
1962
+ - @pikku/core@0.12.3
1963
+
1964
+ ## 0.12.1
1965
+
1966
+ ### Patch Changes
1967
+
1968
+ - 62a8725: Console UI improvements:
1969
+ - Add markdown rendering for addon detail pages
1970
+ - Add shared `ProjectSecrets` and `ProjectVariables` components to addon detail view
1971
+ - Show `Addon Service Not Running` status when an addon RPC endpoint is unreachable
1972
+ - Visual polish: unified badges, subtler borders, larger base rem
1973
+ - Fix dark mode colours throughout (CLI page, anchor colours, border variables)
1974
+ - Hide anonymous middleware/permission instances from the list view; add route table descriptions
1975
+ - Update documentation links to point to the correct pikku.dev URLs
1976
+
1977
+ - a83efb8: Handle OPTIONS preflight requests automatically in fetchData when no explicit OPTIONS route is matched. Runs global HTTP middleware (e.g. CORS) and returns 204. Remove redundant startWorkflowRun and streamAgentRun pass-through functions from addon-console.
1978
+ - Updated dependencies [62a8725]
1979
+ - Updated dependencies [a3bdb0d]
1980
+ - Updated dependencies [e0349ff]
1981
+ - Updated dependencies [62a8725]
1982
+ - Updated dependencies [e04531f]
1983
+ - Updated dependencies [62a8725]
1984
+ - Updated dependencies [a83efb8]
1985
+ - Updated dependencies [e04531f]
1986
+ - Updated dependencies [8eed717]
1987
+ - Updated dependencies [62a8725]
1988
+ - Updated dependencies [62a8725]
1989
+ - Updated dependencies [62a8725]
1990
+ - @pikku/core@0.12.1
1991
+ - @pikku/pg@0.12.1
1992
+
1993
+ ### New Features
1994
+
1995
+ - Initial release of `@pikku/external-console` — backend functions for Pikku Console
1996
+ - `console:getAllMeta` aggregates all project metadata into a single RPC call
1997
+ - Workflow run management (start, stream, list, delete)
1998
+ - Agent thread and run management with streaming support
1999
+ - Schema introspection service
2000
+ - External package icon and metadata service
2001
+ - OAuth2 credential connect/disconnect/status/refresh flows
2002
+ - Secrets and variables read/write functions