@pikku/cli 0.12.20 → 0.12.22

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 (455) hide show
  1. package/cli.schema.json +1 -1
  2. package/console-app/assets/index-C52h1B_L.css +1 -0
  3. package/console-app/assets/index-CAk106ji.js +232 -0
  4. package/console-app/index.html +3 -6
  5. package/dist/.pikku/agent/pikku-agent-types.gen.d.ts +1 -1
  6. package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +3 -3
  7. package/dist/.pikku/channel/pikku-channel-types.gen.js +1 -1
  8. package/dist/.pikku/cli/pikku-cli-channel.d.ts +6 -6
  9. package/dist/.pikku/cli/pikku-cli-channel.js +280 -1
  10. package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +1 -1
  11. package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
  12. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +1 -1
  13. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.json +792 -8
  14. package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +1 -1
  15. package/dist/.pikku/cli/pikku-cli-wirings.gen.js +1 -1
  16. package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
  17. package/dist/.pikku/cli/pikku-cli.gen.js +1 -1
  18. package/dist/.pikku/console/pikku-node-types.gen.d.ts +1 -1
  19. package/dist/.pikku/function/pikku-function-types.gen.d.ts +44 -70
  20. package/dist/.pikku/function/pikku-function-types.gen.js +33 -40
  21. package/dist/.pikku/function/pikku-functions-meta.gen.js +1 -1
  22. package/dist/.pikku/function/pikku-functions-meta.gen.json +1439 -316
  23. package/dist/.pikku/function/pikku-functions.gen.js +21 -9
  24. package/dist/.pikku/http/pikku-http-types.gen.d.ts +1 -1
  25. package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
  26. package/dist/.pikku/http/pikku-http-wirings-meta.gen.js +1 -1
  27. package/dist/.pikku/http/pikku-http-wirings.gen.d.ts +1 -1
  28. package/dist/.pikku/http/pikku-http-wirings.gen.js +1 -1
  29. package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +1 -1
  30. package/dist/.pikku/mcp/pikku-mcp-types.gen.js +1 -1
  31. package/dist/.pikku/pikku-bootstrap.gen.d.ts +3 -1
  32. package/dist/.pikku/pikku-bootstrap.gen.js +3 -1
  33. package/dist/.pikku/pikku-meta-service.gen.d.ts +1 -1
  34. package/dist/.pikku/pikku-meta-service.gen.js +1 -1
  35. package/dist/.pikku/pikku-services.gen.d.ts +2 -1
  36. package/dist/.pikku/pikku-services.gen.js +1 -0
  37. package/dist/.pikku/pikku-types.gen.d.ts +1 -1
  38. package/dist/.pikku/pikku-types.gen.js +1 -1
  39. package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +1 -1
  40. package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
  41. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.d.ts +1 -0
  42. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +6 -0
  43. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.json +250 -0
  44. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +4 -0
  45. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +5 -0
  46. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +1 -1
  47. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.json +66 -10
  48. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +1 -1
  49. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
  50. package/dist/.pikku/schemas/register.gen.js +157 -11
  51. package/dist/.pikku/schemas/schemas/BinaryInput.schema.json +1 -0
  52. package/dist/.pikku/schemas/schemas/DbMigrateInput.schema.json +1 -0
  53. package/dist/.pikku/schemas/schemas/DbResetInput.schema.json +1 -0
  54. package/dist/.pikku/schemas/schemas/DbSeedInput.schema.json +1 -0
  55. package/dist/.pikku/schemas/schemas/FabricDbSchemaInput.schema.json +1 -0
  56. package/dist/.pikku/schemas/schemas/FabricDbSchemaOutput.schema.json +1 -0
  57. package/dist/.pikku/schemas/schemas/FabricDeployApplyInput.schema.json +1 -0
  58. package/dist/.pikku/schemas/schemas/FabricDeployApplyOutput.schema.json +1 -0
  59. package/dist/.pikku/schemas/schemas/FabricDeployListInput.schema.json +1 -0
  60. package/dist/.pikku/schemas/schemas/FabricDeployListOutput.schema.json +1 -0
  61. package/dist/.pikku/schemas/schemas/FabricDeployPlanInput.schema.json +1 -0
  62. package/dist/.pikku/schemas/schemas/FabricDeployPlanOutput.schema.json +1 -0
  63. package/dist/.pikku/schemas/schemas/FabricDeployUnitsInput.schema.json +1 -0
  64. package/dist/.pikku/schemas/schemas/FabricDeployUnitsOutput.schema.json +1 -0
  65. package/dist/.pikku/schemas/schemas/FabricDomainsAddInput.schema.json +1 -0
  66. package/dist/.pikku/schemas/schemas/FabricDomainsAddOutput.schema.json +1 -0
  67. package/dist/.pikku/schemas/schemas/FabricDomainsListInput.schema.json +1 -0
  68. package/dist/.pikku/schemas/schemas/FabricDomainsListOutput.schema.json +1 -0
  69. package/dist/.pikku/schemas/schemas/FabricDomainsRemoveInput.schema.json +1 -0
  70. package/dist/.pikku/schemas/schemas/FabricDomainsRemoveOutput.schema.json +1 -0
  71. package/dist/.pikku/schemas/schemas/FabricErrorsInput.schema.json +1 -0
  72. package/dist/.pikku/schemas/schemas/FabricErrorsOutput.schema.json +1 -0
  73. package/dist/.pikku/schemas/schemas/FabricInitInput.schema.json +1 -0
  74. package/dist/.pikku/schemas/schemas/FabricInitOutput.schema.json +1 -0
  75. package/dist/.pikku/schemas/schemas/FabricLLMKeyInput.schema.json +1 -0
  76. package/dist/.pikku/schemas/schemas/FabricLLMKeyOutput.schema.json +1 -0
  77. package/dist/.pikku/schemas/schemas/FabricLinkInput.schema.json +1 -0
  78. package/dist/.pikku/schemas/schemas/FabricLinkOutput.schema.json +1 -0
  79. package/dist/.pikku/schemas/schemas/FabricLoginInput.schema.json +1 -0
  80. package/dist/.pikku/schemas/schemas/FabricLoginOutput.schema.json +1 -0
  81. package/dist/.pikku/schemas/schemas/FabricLogsInput.schema.json +1 -0
  82. package/dist/.pikku/schemas/schemas/FabricLogsOutput.schema.json +1 -0
  83. package/dist/.pikku/schemas/schemas/FabricMetricsInput.schema.json +1 -0
  84. package/dist/.pikku/schemas/schemas/FabricMetricsOutput.schema.json +1 -0
  85. package/dist/.pikku/schemas/schemas/FabricRollbackInput.schema.json +1 -0
  86. package/dist/.pikku/schemas/schemas/FabricRollbackOutput.schema.json +1 -0
  87. package/dist/.pikku/schemas/schemas/FabricSecretsListInput.schema.json +1 -0
  88. package/dist/.pikku/schemas/schemas/FabricSecretsListOutput.schema.json +1 -0
  89. package/dist/.pikku/schemas/schemas/FabricSecretsSetInput.schema.json +1 -0
  90. package/dist/.pikku/schemas/schemas/FabricSecretsSetOutput.schema.json +1 -0
  91. package/dist/.pikku/schemas/schemas/FabricStatusInput.schema.json +1 -0
  92. package/dist/.pikku/schemas/schemas/FabricStatusOutput.schema.json +1 -0
  93. package/dist/.pikku/schemas/schemas/FabricTraceInput.schema.json +1 -0
  94. package/dist/.pikku/schemas/schemas/FabricTraceOutput.schema.json +1 -0
  95. package/dist/.pikku/schemas/schemas/FabricValidateInput.schema.json +1 -0
  96. package/dist/.pikku/schemas/schemas/FabricValidateOutput.schema.json +1 -0
  97. package/dist/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
  98. package/dist/.pikku/schemas/schemas/PikkuCommandChannelsOutput.schema.json +1 -0
  99. package/dist/.pikku/schemas/schemas/PikkuCommandHTTPOutput.schema.json +1 -0
  100. package/dist/.pikku/schemas/schemas/PikkuCommandQueueOutput.schema.json +1 -0
  101. package/dist/.pikku/schemas/schemas/PikkuEventsScaffoldOutput.schema.json +1 -0
  102. package/dist/.pikku/schemas/schemas/PikkuMetaClientsInput.schema.json +1 -0
  103. package/dist/.pikku/schemas/schemas/PikkuMetaContextInput.schema.json +1 -0
  104. package/dist/.pikku/schemas/schemas/PikkuMetaFunctionsGetInput.schema.json +1 -0
  105. package/dist/.pikku/schemas/schemas/PikkuMetaFunctionsListInput.schema.json +1 -0
  106. package/dist/.pikku/schemas/schemas/PikkuMetaMiddlewareGetInput.schema.json +1 -0
  107. package/dist/.pikku/schemas/schemas/PikkuMetaMiddlewareListInput.schema.json +1 -0
  108. package/dist/.pikku/schemas/schemas/PikkuMetaPermissionsGetInput.schema.json +1 -0
  109. package/dist/.pikku/schemas/schemas/PikkuMetaPermissionsListInput.schema.json +1 -0
  110. package/dist/.pikku/schemas/schemas/PikkuMetaSchemasGetInput.schema.json +1 -0
  111. package/dist/.pikku/schemas/schemas/PikkuMetaSchemasListInput.schema.json +1 -0
  112. package/dist/.pikku/schemas/schemas/PikkuMetaWiresChannelInput.schema.json +1 -0
  113. package/dist/.pikku/schemas/schemas/PikkuMetaWiresHttpInput.schema.json +1 -0
  114. package/dist/.pikku/schemas/schemas/PikkuMetaWiresListInput.schema.json +1 -0
  115. package/dist/.pikku/schemas/schemas/PikkuMetaWiresQueueInput.schema.json +1 -0
  116. package/dist/.pikku/schemas/schemas/PikkuMetaWiresSchedulerInput.schema.json +1 -0
  117. package/dist/.pikku/schemas/schemas/PikkuMetaWiresTriggerInput.schema.json +1 -0
  118. package/dist/.pikku/schemas/schemas/PikkuMetaWiresTypeInput.schema.json +1 -0
  119. package/dist/.pikku/schemas/schemas/PikkuMetaWorkflowsGetInput.schema.json +1 -0
  120. package/dist/.pikku/schemas/schemas/PikkuMetaWorkflowsListInput.schema.json +1 -0
  121. package/dist/.pikku/schemas/schemas/PikkuSkillsInstallInput.schema.json +1 -0
  122. package/dist/.pikku/schemas/schemas/PikkuSkillsListInput.schema.json +1 -0
  123. package/dist/.pikku/schemas/schemas/PikkuTestsCoverageInput.schema.json +1 -0
  124. package/dist/.pikku/schemas/schemas/PikkuTestsInitInput.schema.json +1 -0
  125. package/dist/.pikku/schemas/schemas/WorkflowRunStatus.schema.json +1 -1
  126. package/dist/.pikku/secrets/pikku-secret-types.gen.d.ts +1 -1
  127. package/dist/.pikku/secrets/pikku-secret-types.gen.js +1 -1
  128. package/dist/.pikku/secrets/pikku-secrets.gen.d.ts +1 -1
  129. package/dist/.pikku/secrets/pikku-secrets.gen.js +1 -1
  130. package/dist/.pikku/trigger/pikku-trigger-types.gen.d.ts +1 -1
  131. package/dist/.pikku/trigger/pikku-trigger-types.gen.js +1 -1
  132. package/dist/.pikku/variables/pikku-variable-types.gen.d.ts +1 -1
  133. package/dist/.pikku/variables/pikku-variable-types.gen.js +1 -1
  134. package/dist/.pikku/variables/pikku-variables.gen.d.ts +1 -1
  135. package/dist/.pikku/variables/pikku-variables.gen.js +1 -1
  136. package/dist/.pikku/workflow/meta/allWorkflow.gen.json +237 -629
  137. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +1 -1
  138. package/dist/.pikku/workflow/pikku-workflow-types.gen.js +1 -1
  139. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +1 -1
  140. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +1 -1
  141. package/dist/bin/pikku-bin.mjs +23 -0
  142. package/dist/bin/pikku.js +28 -1
  143. package/dist/src/cli.wiring.js +286 -10
  144. package/dist/src/deploy/analyzer/analyzer.d.ts +16 -1
  145. package/dist/src/deploy/analyzer/analyzer.js +83 -43
  146. package/dist/src/deploy/analyzer/manifest.d.ts +10 -0
  147. package/dist/src/deploy/build-pipeline.d.ts +2 -0
  148. package/dist/src/deploy/build-pipeline.js +123 -19
  149. package/dist/src/deploy/bundler/bundler.d.ts +3 -1
  150. package/dist/src/deploy/bundler/bundler.js +40 -9
  151. package/dist/src/deploy/bundler/dep-extractor.d.ts +5 -2
  152. package/dist/src/deploy/bundler/dep-extractor.js +103 -23
  153. package/dist/src/deploy/bundler/types.d.ts +5 -1
  154. package/dist/src/deploy/codegen/per-unit-codegen.d.ts +11 -1
  155. package/dist/src/deploy/codegen/per-unit-codegen.js +49 -6
  156. package/dist/src/deploy/plan/planner.js +25 -3
  157. package/dist/src/deploy/plan/provider.d.ts +2 -0
  158. package/dist/src/deploy/provider-adapter.d.ts +34 -0
  159. package/dist/src/deploy/server-entry.d.ts +16 -0
  160. package/dist/src/deploy/server-entry.js +81 -0
  161. package/dist/src/fabric/fabric-commands.d.ts +522 -0
  162. package/dist/src/fabric/fabric-commands.js +299 -0
  163. package/dist/src/fabric/functions/db-schema.function.d.ts +35 -0
  164. package/dist/src/fabric/functions/db-schema.function.js +37 -0
  165. package/dist/src/fabric/functions/deploy-list.function.d.ts +41 -0
  166. package/dist/src/fabric/functions/deploy-list.function.js +43 -0
  167. package/dist/src/fabric/functions/deploy-units.function.d.ts +35 -0
  168. package/dist/src/fabric/functions/deploy-units.function.js +41 -0
  169. package/dist/src/fabric/functions/deploy.function.d.ts +105 -0
  170. package/dist/src/fabric/functions/deploy.function.js +122 -0
  171. package/dist/src/fabric/functions/domains-add.function.d.ts +35 -0
  172. package/dist/src/fabric/functions/domains-add.function.js +46 -0
  173. package/dist/src/fabric/functions/domains-list.function.d.ts +20 -0
  174. package/dist/src/fabric/functions/domains-list.function.js +50 -0
  175. package/dist/src/fabric/functions/domains-remove.function.d.ts +24 -0
  176. package/dist/src/fabric/functions/domains-remove.function.js +44 -0
  177. package/dist/src/fabric/functions/errors.function.d.ts +44 -0
  178. package/dist/src/fabric/functions/errors.function.js +50 -0
  179. package/dist/src/fabric/functions/init.function.d.ts +51 -0
  180. package/dist/src/fabric/functions/init.function.js +54 -0
  181. package/dist/src/fabric/functions/link.function.d.ts +28 -0
  182. package/dist/src/fabric/functions/link.function.js +77 -0
  183. package/dist/src/fabric/functions/llm-key.function.d.ts +46 -0
  184. package/dist/src/fabric/functions/llm-key.function.js +76 -0
  185. package/dist/src/fabric/functions/login.function.d.ts +42 -0
  186. package/dist/src/fabric/functions/login.function.js +68 -0
  187. package/dist/src/fabric/functions/logs.function.d.ts +40 -0
  188. package/dist/src/fabric/functions/logs.function.js +84 -0
  189. package/dist/src/fabric/functions/metrics.function.d.ts +32 -0
  190. package/dist/src/fabric/functions/metrics.function.js +49 -0
  191. package/dist/src/fabric/functions/rollback.function.d.ts +76 -0
  192. package/dist/src/fabric/functions/rollback.function.js +69 -0
  193. package/dist/src/fabric/functions/secrets-list.function.d.ts +24 -0
  194. package/dist/src/fabric/functions/secrets-list.function.js +37 -0
  195. package/dist/src/fabric/functions/secrets-set.function.d.ts +32 -0
  196. package/dist/src/fabric/functions/secrets-set.function.js +36 -0
  197. package/dist/src/fabric/functions/status.function.d.ts +34 -0
  198. package/dist/src/fabric/functions/status.function.js +43 -0
  199. package/dist/src/fabric/functions/trace.function.d.ts +28 -0
  200. package/dist/src/fabric/functions/trace.function.js +45 -0
  201. package/dist/src/fabric/functions/validate.function.d.ts +50 -0
  202. package/dist/src/fabric/functions/validate.function.js +363 -0
  203. package/dist/src/fabric/lib/config.d.ts +64 -0
  204. package/dist/src/fabric/lib/config.js +62 -0
  205. package/dist/src/fabric/lib/console-url.d.ts +5 -0
  206. package/dist/src/fabric/lib/console-url.js +13 -0
  207. package/dist/src/fabric/lib/git.d.ts +53 -0
  208. package/dist/src/fabric/lib/git.js +151 -0
  209. package/dist/src/fabric/lib/http.d.ts +4 -0
  210. package/dist/src/fabric/lib/http.js +12 -0
  211. package/dist/src/fabric/lib/not-implemented.d.ts +5 -0
  212. package/dist/src/fabric/lib/not-implemented.js +8 -0
  213. package/dist/src/fabric/lib/output.d.ts +23 -0
  214. package/dist/src/fabric/lib/output.js +39 -0
  215. package/dist/src/fabric/lib/prompt.d.ts +12 -0
  216. package/dist/src/fabric/lib/prompt.js +32 -0
  217. package/dist/src/fabric/lib/stage.d.ts +7 -0
  218. package/dist/src/fabric/lib/stage.js +14 -0
  219. package/dist/src/fabric/sdk/pikku-fetch.gen.d.ts +14 -0
  220. package/dist/src/fabric/sdk/pikku-fetch.gen.js +30 -0
  221. package/dist/src/fabric/sdk/pikku-rpc.gen.d.ts +105 -0
  222. package/dist/src/fabric/sdk/pikku-rpc.gen.js +126 -0
  223. package/dist/src/functions/commands/all.d.ts +1 -1
  224. package/dist/src/functions/commands/binary.d.ts +7 -0
  225. package/dist/src/functions/commands/binary.js +40 -0
  226. package/dist/src/functions/commands/bootstrap.d.ts +1 -1
  227. package/dist/src/functions/commands/bootstrap.js +7 -4
  228. package/dist/src/functions/commands/console.d.ts +3 -3
  229. package/dist/src/functions/commands/db-migrate.d.ts +1 -0
  230. package/dist/src/functions/commands/db-migrate.js +35 -0
  231. package/dist/src/functions/commands/db-reset.d.ts +1 -0
  232. package/dist/src/functions/commands/db-reset.js +36 -0
  233. package/dist/src/functions/commands/db-seed.d.ts +1 -0
  234. package/dist/src/functions/commands/db-seed.js +27 -0
  235. package/dist/src/functions/commands/db-shared.d.ts +32 -0
  236. package/dist/src/functions/commands/db-shared.js +26 -0
  237. package/dist/src/functions/commands/deploy-apply.d.ts +3 -3
  238. package/dist/src/functions/commands/deploy-apply.js +6 -4
  239. package/dist/src/functions/commands/deploy-info.d.ts +1 -1
  240. package/dist/src/functions/commands/deploy-plan.d.ts +3 -3
  241. package/dist/src/functions/commands/deploy-plan.js +7 -1
  242. package/dist/src/functions/commands/dev.d.ts +3 -3
  243. package/dist/src/functions/commands/dev.js +142 -86
  244. package/dist/src/functions/commands/enable.d.ts +5 -4
  245. package/dist/src/functions/commands/enable.js +4 -0
  246. package/dist/src/functions/commands/info.d.ts +4 -4
  247. package/dist/src/functions/commands/load-user-project.d.ts +11 -0
  248. package/dist/src/functions/commands/load-user-project.js +40 -0
  249. package/dist/src/functions/commands/meta.d.ts +82 -0
  250. package/dist/src/functions/commands/meta.js +454 -0
  251. package/dist/src/functions/commands/new-addon.d.ts +3 -3
  252. package/dist/src/functions/commands/new-function.d.ts +3 -3
  253. package/dist/src/functions/commands/new-middleware.d.ts +3 -3
  254. package/dist/src/functions/commands/new-permission.d.ts +3 -3
  255. package/dist/src/functions/commands/new-wiring.d.ts +3 -3
  256. package/dist/src/functions/commands/pikku-command-bootstrap.d.ts +1 -1
  257. package/dist/src/functions/commands/pikku-command-bootstrap.js +15 -1
  258. package/dist/src/functions/commands/pikku-command-summary.d.ts +1 -1
  259. package/dist/src/functions/commands/pikku-command-summary.js +7 -1
  260. package/dist/src/functions/commands/skills.d.ts +26 -0
  261. package/dist/src/functions/commands/skills.js +184 -0
  262. package/dist/src/functions/commands/tests-coverage.d.ts +7 -0
  263. package/dist/src/functions/commands/tests-coverage.js +231 -0
  264. package/dist/src/functions/commands/tests-init.d.ts +7 -0
  265. package/dist/src/functions/commands/tests-init.js +225 -0
  266. package/dist/src/functions/commands/versions-check.d.ts +1 -1
  267. package/dist/src/functions/commands/versions-init.d.ts +3 -3
  268. package/dist/src/functions/commands/versions-update.d.ts +1 -1
  269. package/dist/src/functions/commands/versions-update.js +4 -2
  270. package/dist/src/functions/commands/watch.d.ts +3 -3
  271. package/dist/src/functions/commands/watch.js +1 -1
  272. package/dist/src/functions/db/local-db.d.ts +48 -0
  273. package/dist/src/functions/db/local-db.js +106 -0
  274. package/dist/src/functions/db/seed.d.ts +11 -0
  275. package/dist/src/functions/db/seed.js +22 -0
  276. package/dist/src/functions/db/sql-migrator.d.ts +26 -0
  277. package/dist/src/functions/db/sql-migrator.js +104 -0
  278. package/dist/src/functions/db/sqlite-codegen.d.ts +45 -0
  279. package/dist/src/functions/db/sqlite-codegen.js +294 -0
  280. package/dist/src/functions/db/zod-codegen.d.ts +10 -0
  281. package/dist/src/functions/db/zod-codegen.js +109 -0
  282. package/dist/src/functions/runtimes/fetch/index.d.ts +1 -1
  283. package/dist/src/functions/runtimes/nextjs/pikku-command-nextjs.d.ts +1 -1
  284. package/dist/src/functions/runtimes/nextjs/pikku-command-nextjs.js +21 -2
  285. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-backend-worker-rpc-wrapper.d.ts +1 -0
  286. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-backend-worker-rpc-wrapper.js +163 -0
  287. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.d.ts +1 -1
  288. package/dist/src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.js +5 -2
  289. package/dist/src/functions/runtimes/tanstack-start/pikku-command-tanstack-start.d.ts +1 -0
  290. package/dist/src/functions/runtimes/tanstack-start/pikku-command-tanstack-start.js +32 -0
  291. package/dist/src/functions/runtimes/tanstack-start/serialize-tanstack-start-shim.d.ts +11 -0
  292. package/dist/src/functions/runtimes/tanstack-start/serialize-tanstack-start-shim.js +36 -0
  293. package/dist/src/functions/runtimes/websocket/pikku-command-websocket-typed.d.ts +1 -1
  294. package/dist/src/functions/wirings/ai-agent/pikku-command-ai-agent-types.d.ts +1 -1
  295. package/dist/src/functions/wirings/ai-agent/pikku-command-ai-agent.d.ts +1 -1
  296. package/dist/src/functions/wirings/ai-agent/pikku-command-ai-agent.js +1 -10
  297. package/dist/src/functions/wirings/ai-agent/pikku-command-public-agent.d.ts +1 -1
  298. package/dist/src/functions/wirings/ai-agent/serialize-public-agent.js +76 -1
  299. package/dist/src/functions/wirings/channels/pikku-channels.d.ts +1 -1
  300. package/dist/src/functions/wirings/channels/pikku-command-channel-types.d.ts +1 -1
  301. package/dist/src/functions/wirings/channels/pikku-command-channels-map.d.ts +1 -1
  302. package/dist/src/functions/wirings/channels/pikku-command-channels.d.ts +1 -1
  303. package/dist/src/functions/wirings/channels/pikku-command-channels.js +1 -1
  304. package/dist/src/functions/wirings/cli/pikku-command-cli-entry.d.ts +1 -1
  305. package/dist/src/functions/wirings/cli/pikku-command-cli-entry.js +5 -2
  306. package/dist/src/functions/wirings/cli/pikku-command-cli-types.d.ts +5 -1
  307. package/dist/src/functions/wirings/cli/pikku-command-cli-types.js +8 -2
  308. package/dist/src/functions/wirings/cli/pikku-command-cli.d.ts +1 -1
  309. package/dist/src/functions/wirings/cli/serialize-channel-cli-client.js +27 -9
  310. package/dist/src/functions/wirings/cli/serialize-channel-cli.d.ts +5 -1
  311. package/dist/src/functions/wirings/cli/serialize-channel-cli.js +13 -3
  312. package/dist/src/functions/wirings/console/pikku-command-console-functions.d.ts +1 -1
  313. package/dist/src/functions/wirings/console/pikku-command-console-functions.js +5 -1
  314. package/dist/src/functions/wirings/console/pikku-command-node-types.d.ts +1 -1
  315. package/dist/src/functions/wirings/console/pikku-command-nodes-meta.d.ts +1 -1
  316. package/dist/src/functions/wirings/console/serialize-console-functions.js +5 -0
  317. package/dist/src/functions/wirings/credentials/pikku-command-credentials.d.ts +1 -1
  318. package/dist/src/functions/wirings/functions/pikku-command-addon-types.d.ts +5 -1
  319. package/dist/src/functions/wirings/functions/pikku-command-addon-types.js +7 -2
  320. package/dist/src/functions/wirings/functions/pikku-command-function-types-split.d.ts +1 -1
  321. package/dist/src/functions/wirings/functions/pikku-command-function-types-split.js +1 -1
  322. package/dist/src/functions/wirings/functions/pikku-command-function-types.d.ts +1 -1
  323. package/dist/src/functions/wirings/functions/pikku-command-functions.d.ts +1 -1
  324. package/dist/src/functions/wirings/functions/pikku-command-services.d.ts +1 -1
  325. package/dist/src/functions/wirings/functions/schemas.d.ts +1 -1
  326. package/dist/src/functions/wirings/functions/serialize-function-types.js +105 -80
  327. package/dist/src/functions/wirings/gateway/pikku-command-gateway.d.ts +1 -1
  328. package/dist/src/functions/wirings/http/pikku-command-http-map.d.ts +1 -1
  329. package/dist/src/functions/wirings/http/pikku-command-http-routes.d.ts +1 -1
  330. package/dist/src/functions/wirings/http/pikku-command-http-routes.js +1 -1
  331. package/dist/src/functions/wirings/http/pikku-command-http-types.d.ts +1 -1
  332. package/dist/src/functions/wirings/http/pikku-command-openapi.d.ts +1 -1
  333. package/dist/src/functions/wirings/http/pikku-http-routes.d.ts +1 -1
  334. package/dist/src/functions/wirings/mcp/pikku-command-mcp-json.d.ts +1 -1
  335. package/dist/src/functions/wirings/mcp/pikku-command-mcp-types.d.ts +1 -1
  336. package/dist/src/functions/wirings/mcp/pikku-command-mcp.d.ts +1 -1
  337. package/dist/src/functions/wirings/middleware/pikku-command-middleware.d.ts +1 -1
  338. package/dist/src/functions/wirings/package/pikku-command-package-types.d.ts +2 -2
  339. package/dist/src/functions/wirings/package/pikku-command-package.d.ts +1 -1
  340. package/dist/src/functions/wirings/permissions/pikku-command-permissions.d.ts +1 -1
  341. package/dist/src/functions/wirings/queue/pikku-command-queue-map.d.ts +1 -1
  342. package/dist/src/functions/wirings/queue/pikku-command-queue-map.js +1 -1
  343. package/dist/src/functions/wirings/queue/pikku-command-queue-service.d.ts +1 -1
  344. package/dist/src/functions/wirings/queue/pikku-command-queue-types.d.ts +1 -1
  345. package/dist/src/functions/wirings/queue/pikku-command-queue.d.ts +1 -1
  346. package/dist/src/functions/wirings/queue/pikku-command-queue.js +1 -1
  347. package/dist/src/functions/wirings/queue/pikku-queue-map.d.ts +1 -1
  348. package/dist/src/functions/wirings/queue/pikku-queue.d.ts +1 -1
  349. package/dist/src/functions/wirings/realtime/pikku-command-events-scaffold.d.ts +1 -0
  350. package/dist/src/functions/wirings/realtime/pikku-command-events-scaffold.js +26 -0
  351. package/dist/src/functions/wirings/realtime/pikku-command-realtime.d.ts +1 -0
  352. package/dist/src/functions/wirings/realtime/pikku-command-realtime.js +35 -0
  353. package/dist/src/functions/wirings/realtime/serialize-events-scaffold.d.ts +23 -0
  354. package/dist/src/functions/wirings/realtime/serialize-events-scaffold.js +98 -0
  355. package/dist/src/functions/wirings/realtime/serialize-realtime-client.d.ts +22 -0
  356. package/dist/src/functions/wirings/realtime/serialize-realtime-client.js +337 -0
  357. package/dist/src/functions/wirings/rpc/pikku-command-public-rpc.d.ts +1 -1
  358. package/dist/src/functions/wirings/rpc/pikku-command-public-rpc.js +5 -1
  359. package/dist/src/functions/wirings/rpc/pikku-command-react-query.d.ts +1 -1
  360. package/dist/src/functions/wirings/rpc/pikku-command-remote-rpc.d.ts +1 -1
  361. package/dist/src/functions/wirings/rpc/pikku-command-remote-rpc.js +5 -1
  362. package/dist/src/functions/wirings/rpc/pikku-command-rpc-client.d.ts +1 -1
  363. package/dist/src/functions/wirings/rpc/pikku-command-rpc-client.js +3 -1
  364. package/dist/src/functions/wirings/rpc/pikku-command-rpc-map.d.ts +2 -2
  365. package/dist/src/functions/wirings/rpc/pikku-command-rpc.d.ts +2 -1
  366. package/dist/src/functions/wirings/rpc/pikku-command-rpc.js +13 -7
  367. package/dist/src/functions/wirings/rpc/serialize-public-rpc.js +1 -0
  368. package/dist/src/functions/wirings/rpc/serialize-react-query-hooks.js +1 -1
  369. package/dist/src/functions/wirings/rpc/serialize-remote-rpc.js +7 -1
  370. package/dist/src/functions/wirings/rpc/serialize-typed-rpc-map.js +16 -2
  371. package/dist/src/functions/wirings/scheduler/pikku-command-scheduler-types.d.ts +1 -1
  372. package/dist/src/functions/wirings/scheduler/pikku-command-scheduler.d.ts +1 -1
  373. package/dist/src/functions/wirings/secrets/pikku-command-secrets.d.ts +1 -1
  374. package/dist/src/functions/wirings/triggers/pikku-command-trigger-types.d.ts +1 -1
  375. package/dist/src/functions/wirings/triggers/pikku-command-trigger-types.js +1 -1
  376. package/dist/src/functions/wirings/triggers/pikku-command-trigger.d.ts +1 -1
  377. package/dist/src/functions/wirings/variables/pikku-command-variables.d.ts +1 -1
  378. package/dist/src/functions/wirings/workflow/pikku-command-workflow-routes.d.ts +1 -1
  379. package/dist/src/functions/wirings/workflow/pikku-command-workflow-routes.js +1 -1
  380. package/dist/src/functions/wirings/workflow/pikku-command-workflow.d.ts +5 -1
  381. package/dist/src/functions/wirings/workflow/pikku-command-workflow.js +18 -4
  382. package/dist/src/functions/wirings/workflow/serialize-workflow-bootstrap-map.d.ts +3 -0
  383. package/dist/src/functions/wirings/workflow/serialize-workflow-bootstrap-map.js +40 -0
  384. package/dist/src/functions/wirings/workflow/serialize-workflow-routes.js +56 -2
  385. package/dist/src/functions/workflows/all.workflow.js +45 -12
  386. package/dist/src/scaffold/rpc-remote.gen.d.ts +3 -3
  387. package/dist/src/scaffold/rpc-remote.gen.js +7 -2
  388. package/dist/src/scaffold/workflow-routes.gen.d.ts +18 -18
  389. package/dist/src/scaffold/workflow-routes.gen.js +33 -1
  390. package/dist/src/services/cli-logger.service.d.ts +22 -3
  391. package/dist/src/services/cli-logger.service.js +107 -41
  392. package/dist/src/services.js +32 -67
  393. package/dist/src/utils/generate-bootstrap-file.js +3 -0
  394. package/dist/src/utils/parse-cli-filters.d.ts +18 -0
  395. package/dist/src/utils/parse-cli-filters.js +99 -0
  396. package/dist/src/utils/pikku-cli-config.js +29 -9
  397. package/dist/tsconfig.tsbuildinfo +1 -1
  398. package/package.json +9 -4
  399. package/skills/pikku-addon/SKILL.md +330 -0
  400. package/skills/pikku-ai-agent/SKILL.md +227 -0
  401. package/skills/pikku-ai-vercel/SKILL.md +78 -0
  402. package/skills/pikku-ai-voice/SKILL.md +85 -0
  403. package/skills/pikku-auth-js/SKILL.md +106 -0
  404. package/skills/pikku-aws/SKILL.md +107 -0
  405. package/skills/pikku-backblaze/SKILL.md +70 -0
  406. package/skills/pikku-cli/SKILL.md +281 -0
  407. package/skills/pikku-concepts/SKILL.md +281 -0
  408. package/skills/pikku-concepts/references/concept-mapping.md +528 -0
  409. package/skills/pikku-config/SKILL.md +208 -0
  410. package/skills/pikku-cron/SKILL.md +211 -0
  411. package/skills/pikku-deploy-azure/SKILL.md +69 -0
  412. package/skills/pikku-deploy-cloudflare/SKILL.md +80 -0
  413. package/skills/pikku-deploy-express/SKILL.md +83 -0
  414. package/skills/pikku-deploy-fastify/SKILL.md +70 -0
  415. package/skills/pikku-deploy-lambda/SKILL.md +107 -0
  416. package/skills/pikku-deploy-nextjs/SKILL.md +76 -0
  417. package/skills/pikku-deploy-uws/SKILL.md +85 -0
  418. package/skills/pikku-fabric/SKILL.md +245 -0
  419. package/skills/pikku-feature/SKILL.md +258 -0
  420. package/skills/pikku-gateway-slack/SKILL.md +112 -0
  421. package/skills/pikku-http/SKILL.md +317 -0
  422. package/skills/pikku-i18n/SKILL.md +208 -0
  423. package/skills/pikku-info/SKILL.md +95 -0
  424. package/skills/pikku-jose/SKILL.md +102 -0
  425. package/skills/pikku-kysely/SKILL.md +145 -0
  426. package/skills/pikku-mcp/SKILL.md +237 -0
  427. package/skills/pikku-mongodb/SKILL.md +102 -0
  428. package/skills/pikku-n8n-addon-map/SKILL.md +178 -0
  429. package/skills/pikku-n8n-code-translate/SKILL.md +166 -0
  430. package/skills/pikku-pino/SKILL.md +77 -0
  431. package/skills/pikku-queue/SKILL.md +237 -0
  432. package/skills/pikku-react/SKILL.md +183 -0
  433. package/skills/pikku-react-query/SKILL.md +205 -0
  434. package/skills/pikku-realtime/SKILL.md +285 -0
  435. package/skills/pikku-redis/SKILL.md +87 -0
  436. package/skills/pikku-rpc/SKILL.md +168 -0
  437. package/skills/pikku-rtl/SKILL.md +205 -0
  438. package/skills/pikku-schedule/SKILL.md +54 -0
  439. package/skills/pikku-schema-ajv/SKILL.md +60 -0
  440. package/skills/pikku-schema-cfworker/SKILL.md +60 -0
  441. package/skills/pikku-security/SKILL.md +243 -0
  442. package/skills/pikku-services/SKILL.md +247 -0
  443. package/skills/pikku-template-clone/SKILL.md +39 -0
  444. package/skills/pikku-testing/SKILL.md +428 -0
  445. package/skills/pikku-trigger/SKILL.md +177 -0
  446. package/skills/pikku-versioning/SKILL.md +169 -0
  447. package/skills/pikku-websocket/SKILL.md +239 -0
  448. package/skills/pikku-workflow/SKILL.md +283 -0
  449. package/skills/pikku-workflows-client/SKILL.md +150 -0
  450. package/skills/pikku-ws/SKILL.md +45 -0
  451. package/console-app/assets/index-BpY2pSuA.css +0 -10
  452. package/console-app/assets/index-DXLy-_D4.js +0 -717
  453. package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +0 -10
  454. package/dist/.pikku/cli/pikku-cli-client.gen.js +0 -44
  455. /package/dist/.pikku/schemas/schemas/{PikkuChannelsOutput.schema.json → PikkuCLIEntryOutput.schema.json} +0 -0
@@ -0,0 +1,64 @@
1
+ /**
2
+ * `fabric.config.json` lives next to `pikku.config.json` in the project root.
3
+ * Pins the project link (id, default api url) and declares deployable apps
4
+ * + production domain. Discovered by walking up from cwd until found.
5
+ */
6
+ export interface ProjectConfig {
7
+ projectId: string;
8
+ apiUrl?: string;
9
+ frontends?: Record<string, FabricAppConfig>;
10
+ production?: FabricProductionConfig;
11
+ }
12
+ /** One entry per deployable frontend in the repo. Key is a short slug. */
13
+ export interface FabricAppConfig {
14
+ cwd: string;
15
+ primary?: boolean;
16
+ deploy?: boolean;
17
+ kind?: 'spa' | 'ssr' | 'static';
18
+ dev?: {
19
+ command?: string[];
20
+ port?: number;
21
+ healthPath?: string;
22
+ };
23
+ }
24
+ /**
25
+ * Production custom domain config. Production always maps to `main`; if
26
+ * `domain` is set, fabric expects users to CNAME `<slug>.<domain>` and
27
+ * `api.<domain>` at the matching `*.pikkufabric.app` hostnames. If absent,
28
+ * production lives only on the platform-managed `*.pikkufabric.app`
29
+ * hostnames.
30
+ */
31
+ export interface FabricProductionConfig {
32
+ domain?: string;
33
+ }
34
+ /**
35
+ * `~/.fabric/auth.json` keys auth tokens by api-url so a single user can
36
+ * stay logged into prod + local dev side-by-side.
37
+ */
38
+ export interface AuthFile {
39
+ tokens: Record<string, string>;
40
+ }
41
+ export declare function findProjectConfig(startDir?: string): Promise<{
42
+ path: string;
43
+ config: ProjectConfig;
44
+ } | null>;
45
+ export declare function writeProjectConfig(cwd: string, config: ProjectConfig): Promise<string>;
46
+ export declare function readAuthFile(): Promise<AuthFile>;
47
+ export declare function writeAuthFile(file: AuthFile): Promise<void>;
48
+ export interface ResolvedApiContext {
49
+ apiUrl: string;
50
+ token: string | null;
51
+ projectId: string | null;
52
+ }
53
+ /**
54
+ * Stitch together the api-url + auth token from the standard sources:
55
+ * 1. explicit override (e.g. --api-url flag)
56
+ * 2. fabric.config.json apiUrl
57
+ * 3. FABRIC_API_URL env var
58
+ * 4. hardcoded default
59
+ *
60
+ * Token comes from ~/.fabric/auth.json keyed by the resolved api-url.
61
+ */
62
+ export declare function resolveApiContext(opts?: {
63
+ apiUrlOverride?: string;
64
+ }): Promise<ResolvedApiContext>;
@@ -0,0 +1,62 @@
1
+ import { readFile, writeFile, mkdir } from 'node:fs/promises';
2
+ import { existsSync } from 'node:fs';
3
+ import { dirname, join } from 'node:path';
4
+ import { homedir } from 'node:os';
5
+ const DEFAULT_API_URL = 'http://localhost:7103';
6
+ const projectConfigName = 'fabric.config.json';
7
+ const authFilePath = join(homedir(), '.fabric', 'auth.json');
8
+ export async function findProjectConfig(startDir = process.cwd()) {
9
+ let dir = startDir;
10
+ while (true) {
11
+ const candidate = join(dir, projectConfigName);
12
+ if (existsSync(candidate)) {
13
+ const raw = await readFile(candidate, 'utf8');
14
+ return { path: candidate, config: JSON.parse(raw) };
15
+ }
16
+ const parent = dirname(dir);
17
+ if (parent === dir)
18
+ return null;
19
+ dir = parent;
20
+ }
21
+ }
22
+ export async function writeProjectConfig(cwd, config) {
23
+ const path = join(cwd, projectConfigName);
24
+ await mkdir(dirname(path), { recursive: true });
25
+ await writeFile(path, JSON.stringify(config, null, 2) + '\n', 'utf8');
26
+ return path;
27
+ }
28
+ export async function readAuthFile() {
29
+ if (!existsSync(authFilePath))
30
+ return { tokens: {} };
31
+ const raw = await readFile(authFilePath, 'utf8');
32
+ return JSON.parse(raw);
33
+ }
34
+ export async function writeAuthFile(file) {
35
+ await mkdir(dirname(authFilePath), { recursive: true });
36
+ await writeFile(authFilePath, JSON.stringify(file, null, 2) + '\n', {
37
+ encoding: 'utf8',
38
+ mode: 0o600,
39
+ });
40
+ }
41
+ /**
42
+ * Stitch together the api-url + auth token from the standard sources:
43
+ * 1. explicit override (e.g. --api-url flag)
44
+ * 2. fabric.config.json apiUrl
45
+ * 3. FABRIC_API_URL env var
46
+ * 4. hardcoded default
47
+ *
48
+ * Token comes from ~/.fabric/auth.json keyed by the resolved api-url.
49
+ */
50
+ export async function resolveApiContext(opts = {}) {
51
+ const projectFile = await findProjectConfig();
52
+ const apiUrl = opts.apiUrlOverride ??
53
+ projectFile?.config.apiUrl ??
54
+ process.env.FABRIC_API_URL ??
55
+ DEFAULT_API_URL;
56
+ const auth = await readAuthFile();
57
+ return {
58
+ apiUrl,
59
+ token: auth.tokens[apiUrl] ?? null,
60
+ projectId: projectFile?.config.projectId ?? null,
61
+ };
62
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Map a fabric-api URL to its console URL by convention. Local dev uses
3
+ * separate ports; prod uses subdomain swap (api.* → console.*).
4
+ */
5
+ export declare function deriveConsoleUrl(apiUrl: string): string;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Map a fabric-api URL to its console URL by convention. Local dev uses
3
+ * separate ports; prod uses subdomain swap (api.* → console.*).
4
+ */
5
+ export function deriveConsoleUrl(apiUrl) {
6
+ const url = new URL(apiUrl);
7
+ if (url.hostname === 'localhost' || url.hostname === '127.0.0.1') {
8
+ url.port = '7102';
9
+ return url.toString();
10
+ }
11
+ url.hostname = url.hostname.replace(/^api\./, 'console.');
12
+ return url.toString();
13
+ }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Local git probes for the deploy safety checks (clean tree, HEAD == remote,
3
+ * ref resolution). Shell out to `git` rather than depend on simple-git —
4
+ * matches what wrangler/vercel/fly do, no runtime dep.
5
+ */
6
+ export declare class GitError extends Error {
7
+ command: string;
8
+ exitCode: number;
9
+ stderr: string;
10
+ constructor(command: string, exitCode: number, stderr: string);
11
+ }
12
+ export declare function currentBranch(cwd?: string): Promise<string>;
13
+ /**
14
+ * Returns the fetch URL for the given remote, with credentials and .git suffix
15
+ * stripped so it's safe to store server-side or pass to importProject.
16
+ */
17
+ export declare function getRemoteUrl(remote?: string, cwd?: string): Promise<string>;
18
+ export declare function headSha(cwd?: string): Promise<string>;
19
+ export declare function localBranchHeadSha(branch: string, cwd?: string): Promise<string>;
20
+ export declare function isWorkingTreeClean(cwd?: string): Promise<boolean>;
21
+ export declare function upstreamBranch(cwd?: string): Promise<string | null>;
22
+ export declare function upstreamForBranch(branch: string, cwd?: string): Promise<string | null>;
23
+ export declare function remoteHeadSha(upstream: string, cwd?: string): Promise<string>;
24
+ /**
25
+ * Resolve a ref (branch / tag / sha) to a sha. Returns null if git can't
26
+ * resolve it, so callers can fall back to "use HEAD".
27
+ */
28
+ export declare function resolveRef(ref: string, cwd?: string): Promise<string | null>;
29
+ /**
30
+ * Spec §7 ancestry check: is `candidate` reachable from `mainRef` (i.e. has
31
+ * mainRef been merged forward to include candidate)?
32
+ *
33
+ * `git merge-base --is-ancestor` exits 0 if candidate is an ancestor of
34
+ * mainRef, 1 if not, anything else on hard error.
35
+ */
36
+ export declare function isAncestor(candidate: string, mainRef: string, cwd?: string): Promise<boolean>;
37
+ export interface DeploySafetyResult {
38
+ branch: string;
39
+ headSha: string;
40
+ upstream: string;
41
+ remoteSha: string;
42
+ }
43
+ /**
44
+ * Spec §10 deploy ref safety checks. Throws on any failure with a CLI-friendly
45
+ * message; returns the resolved commit context on pass.
46
+ */
47
+ export declare function assertDeploySafety(cwd?: string): Promise<DeploySafetyResult>;
48
+ /**
49
+ * Validate a named branch for deploy without depending on the currently
50
+ * checked-out branch. This is the Fabric CLI deploy contract: deploy the
51
+ * target branch, not "whatever branch I happen to be on".
52
+ */
53
+ export declare function assertNamedBranchDeploySafety(branch: string, cwd?: string): Promise<DeploySafetyResult>;
@@ -0,0 +1,151 @@
1
+ import { spawn } from 'node:child_process';
2
+ /**
3
+ * Local git probes for the deploy safety checks (clean tree, HEAD == remote,
4
+ * ref resolution). Shell out to `git` rather than depend on simple-git —
5
+ * matches what wrangler/vercel/fly do, no runtime dep.
6
+ */
7
+ export class GitError extends Error {
8
+ command;
9
+ exitCode;
10
+ stderr;
11
+ constructor(command, exitCode, stderr) {
12
+ super(`git ${command} failed (${exitCode}): ${stderr.trim()}`);
13
+ this.command = command;
14
+ this.exitCode = exitCode;
15
+ this.stderr = stderr;
16
+ }
17
+ }
18
+ function git(args, cwd = process.cwd()) {
19
+ return new Promise((resolve, reject) => {
20
+ const child = spawn('git', args, { cwd, stdio: ['ignore', 'pipe', 'pipe'] });
21
+ let stdout = '';
22
+ let stderr = '';
23
+ child.stdout.on('data', (b) => (stdout += b.toString()));
24
+ child.stderr.on('data', (b) => (stderr += b.toString()));
25
+ child.on('error', reject);
26
+ child.on('close', (code) => {
27
+ if (code === 0)
28
+ resolve(stdout.trim());
29
+ else
30
+ reject(new GitError(args.join(' '), code ?? -1, stderr));
31
+ });
32
+ });
33
+ }
34
+ export async function currentBranch(cwd) {
35
+ return git(['rev-parse', '--abbrev-ref', 'HEAD'], cwd);
36
+ }
37
+ /**
38
+ * Returns the fetch URL for the given remote, with credentials and .git suffix
39
+ * stripped so it's safe to store server-side or pass to importProject.
40
+ */
41
+ export async function getRemoteUrl(remote = 'origin', cwd) {
42
+ const raw = await git(['remote', 'get-url', remote], cwd);
43
+ // Convert SSH format (git@github.com:owner/repo.git) to HTTPS
44
+ const sshMatch = raw.match(/^git@([^:]+):(.+?)(?:\.git)?$/);
45
+ if (sshMatch) {
46
+ return `https://${sshMatch[1]}/${sshMatch[2]}`;
47
+ }
48
+ return raw.replace(/\.git$/, '').replace(/^(https?:\/\/)[^@]+@/, '$1');
49
+ }
50
+ export async function headSha(cwd) {
51
+ return git(['rev-parse', 'HEAD'], cwd);
52
+ }
53
+ export async function localBranchHeadSha(branch, cwd) {
54
+ return git(['rev-parse', '--verify', `${branch}^{commit}`], cwd);
55
+ }
56
+ export async function isWorkingTreeClean(cwd) {
57
+ const out = await git(['status', '--porcelain'], cwd);
58
+ return out.length === 0;
59
+ }
60
+ export async function upstreamBranch(cwd) {
61
+ try {
62
+ return await git(['rev-parse', '--abbrev-ref', '--symbolic-full-name', '@{u}'], cwd);
63
+ }
64
+ catch {
65
+ return null;
66
+ }
67
+ }
68
+ export async function upstreamForBranch(branch, cwd) {
69
+ try {
70
+ return await git(['rev-parse', '--abbrev-ref', '--symbolic-full-name', `${branch}@{u}`], cwd);
71
+ }
72
+ catch {
73
+ return null;
74
+ }
75
+ }
76
+ export async function remoteHeadSha(upstream, cwd) {
77
+ return git(['rev-parse', upstream], cwd);
78
+ }
79
+ /**
80
+ * Resolve a ref (branch / tag / sha) to a sha. Returns null if git can't
81
+ * resolve it, so callers can fall back to "use HEAD".
82
+ */
83
+ export async function resolveRef(ref, cwd) {
84
+ try {
85
+ return await git(['rev-parse', '--verify', `${ref}^{commit}`], cwd);
86
+ }
87
+ catch {
88
+ return null;
89
+ }
90
+ }
91
+ /**
92
+ * Spec §7 ancestry check: is `candidate` reachable from `mainRef` (i.e. has
93
+ * mainRef been merged forward to include candidate)?
94
+ *
95
+ * `git merge-base --is-ancestor` exits 0 if candidate is an ancestor of
96
+ * mainRef, 1 if not, anything else on hard error.
97
+ */
98
+ export async function isAncestor(candidate, mainRef, cwd) {
99
+ try {
100
+ await git(['merge-base', '--is-ancestor', candidate, mainRef], cwd);
101
+ return true;
102
+ }
103
+ catch (err) {
104
+ if (err instanceof GitError && err.exitCode === 1)
105
+ return false;
106
+ throw err;
107
+ }
108
+ }
109
+ /**
110
+ * Spec §10 deploy ref safety checks. Throws on any failure with a CLI-friendly
111
+ * message; returns the resolved commit context on pass.
112
+ */
113
+ export async function assertDeploySafety(cwd) {
114
+ if (!(await isWorkingTreeClean(cwd))) {
115
+ throw new Error('Deployment blocked: uncommitted changes detected.\nCommit and push your changes before deploying.');
116
+ }
117
+ const branch = await currentBranch(cwd);
118
+ const upstream = await upstreamBranch(cwd);
119
+ if (!upstream) {
120
+ throw new Error(`Deployment blocked: branch ${branch} has no upstream.\nPush it (\`git push -u origin ${branch}\`) before deploying.`);
121
+ }
122
+ const head = await headSha(cwd);
123
+ const remote = await remoteHeadSha(upstream, cwd);
124
+ if (head !== remote) {
125
+ throw new Error(`Deployment blocked: local HEAD ${head.slice(0, 8)} ≠ remote ${remote.slice(0, 8)} (${upstream}).\nPush or pull before deploying.`);
126
+ }
127
+ return { branch, headSha: head, upstream, remoteSha: remote };
128
+ }
129
+ /**
130
+ * Validate a named branch for deploy without depending on the currently
131
+ * checked-out branch. This is the Fabric CLI deploy contract: deploy the
132
+ * target branch, not "whatever branch I happen to be on".
133
+ */
134
+ export async function assertNamedBranchDeploySafety(branch, cwd) {
135
+ let head;
136
+ try {
137
+ head = await localBranchHeadSha(branch, cwd);
138
+ }
139
+ catch {
140
+ throw new Error(`Deployment blocked: local branch ${branch} does not exist.\nFetch or create it before deploying.`);
141
+ }
142
+ const upstream = await upstreamForBranch(branch, cwd);
143
+ if (!upstream) {
144
+ throw new Error(`Deployment blocked: branch ${branch} has no upstream.\nPush it (\`git push -u origin ${branch}\`) before deploying.`);
145
+ }
146
+ const remote = await remoteHeadSha(upstream, cwd);
147
+ if (head !== remote) {
148
+ throw new Error(`Deployment blocked: ${branch} ${head.slice(0, 8)} ≠ remote ${remote.slice(0, 8)} (${upstream}).\nPush or pull ${branch} before deploying.`);
149
+ }
150
+ return { branch, headSha: head, upstream, remoteSha: remote };
151
+ }
@@ -0,0 +1,4 @@
1
+ export declare function getFabricRPC(opts: {
2
+ apiUrl: string;
3
+ token: string | null;
4
+ }): any;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Type-safe RPC client backed by the snapshot SDK in `../sdk/`. The map is
3
+ * a copy of fabric's generated rpc-map at the time of the addon's last
4
+ * release — versioning bumps are taken by republishing this package.
5
+ */
6
+ import { PikkuRPC } from '../sdk/pikku-rpc.gen.js';
7
+ export function getFabricRPC(opts) {
8
+ const rpc = new PikkuRPC();
9
+ rpc.setServerUrl(opts.apiUrl);
10
+ rpc.setAuthorizationJWT(opts.token);
11
+ return rpc;
12
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Stub helper for CLI commands that are scaffolded but not yet wired to
3
+ * fabric-api RPCs. Each T1 task replaces these with real implementations.
4
+ */
5
+ export declare function notImplemented(commandName: string): never;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Stub helper for CLI commands that are scaffolded but not yet wired to
3
+ * fabric-api RPCs. Each T1 task replaces these with real implementations.
4
+ */
5
+ export function notImplemented(commandName) {
6
+ console.error(`[fabric] \`${commandName}\` is not implemented yet — see GitHub epic #110.`);
7
+ process.exit(2);
8
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Render helpers shared by the fabric read commands.
3
+ *
4
+ * These run inside a command's `render` (post-return, human output only).
5
+ * `--json` is handled globally by the CLI runner, which routes the command's
6
+ * result through the JSON renderer instead — so these helpers never deal with
7
+ * the json case. They just turn returned data into a pretty, coloured table.
8
+ */
9
+ type Cell = string | number | null | undefined;
10
+ /** Dim, secondary text (hints, empty-state lines, labels). */
11
+ export declare const dim: (s: string) => string;
12
+ /** Status / change colours — mirror the console UI: green = good/added,
13
+ * amber = in-flight/changed, red = failed/removed. */
14
+ export declare const added: (s: string) => string;
15
+ export declare const changed: (s: string) => string;
16
+ export declare const removed: (s: string) => string;
17
+ /** Colour a status token by its meaning (falls back to dim). */
18
+ export declare function statusColor(status: string): string;
19
+ /** Space-padded aligned columns with a dim header — the default human table. */
20
+ export declare function table(headers: string[], rows: Cell[][]): string;
21
+ /** Aligned `key value` lines with dim keys. */
22
+ export declare function keyValue(rows: [string, string][]): string;
23
+ export {};
@@ -0,0 +1,39 @@
1
+ import chalk from 'chalk';
2
+ const cell = (c) => c === null || c === undefined ? '' : String(c);
3
+ /** Dim, secondary text (hints, empty-state lines, labels). */
4
+ export const dim = (s) => chalk.dim(s);
5
+ /** Status / change colours — mirror the console UI: green = good/added,
6
+ * amber = in-flight/changed, red = failed/removed. */
7
+ export const added = (s) => chalk.green(s);
8
+ export const changed = (s) => chalk.hex('#d97706')(s);
9
+ export const removed = (s) => chalk.red(s);
10
+ const GOOD = /^(active|healthy|succeeded|success|ready|running|live|ok|added)$/i;
11
+ const BUSY = /^(deploying|planned|suspended|pending|building|provisioning|queued|in_progress|changed)$/i;
12
+ const BAD = /^(failed|error|crashed|unhealthy|dead|removed|cancelled|canceled)$/i;
13
+ /** Colour a status token by its meaning (falls back to dim). */
14
+ export function statusColor(status) {
15
+ if (GOOD.test(status))
16
+ return added(status);
17
+ if (BUSY.test(status))
18
+ return changed(status);
19
+ if (BAD.test(status))
20
+ return removed(status);
21
+ return dim(status);
22
+ }
23
+ // Strip ANSI so coloured cells still measure/align correctly.
24
+ const visibleLen = (s) => s.replace(/\x1b\[[0-9;]*m/g, '').length;
25
+ /** Space-padded aligned columns with a dim header — the default human table. */
26
+ export function table(headers, rows) {
27
+ const widths = headers.map((h, i) => Math.max(h.length, ...rows.map((r) => visibleLen(cell(r[i])))));
28
+ const pad = (c, i) => {
29
+ const s = cell(c);
30
+ return s + ' '.repeat(Math.max(0, widths[i] - visibleLen(s)));
31
+ };
32
+ const fmt = (r) => r.map(pad).join(' ');
33
+ return [chalk.dim(fmt(headers)), ...rows.map(fmt)].join('\n');
34
+ }
35
+ /** Aligned `key value` lines with dim keys. */
36
+ export function keyValue(rows) {
37
+ const width = Math.max(...rows.map(([k]) => k.length));
38
+ return rows.map(([k, v]) => `${chalk.dim(k.padEnd(width))} ${v}`).join('\n');
39
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Read a line from stdin with optional masking. Used for secret-set when the
3
+ * user didn't pass `--value` on the command line so we can avoid leaving
4
+ * the plaintext in shell history.
5
+ */
6
+ export declare function promptSecret(label: string): Promise<string>;
7
+ /**
8
+ * Classic yes/no confirmation. Returns `defaultYes` on an empty answer.
9
+ * Callers must gate on `process.stdin.isTTY` first — there is no human to
10
+ * answer in a non-interactive session, so prompting there would hang.
11
+ */
12
+ export declare function promptConfirm(label: string, defaultYes?: boolean): Promise<boolean>;
@@ -0,0 +1,32 @@
1
+ import { createInterface } from 'node:readline/promises';
2
+ import { stdin, stdout } from 'node:process';
3
+ /**
4
+ * Read a line from stdin with optional masking. Used for secret-set when the
5
+ * user didn't pass `--value` on the command line so we can avoid leaving
6
+ * the plaintext in shell history.
7
+ */
8
+ export async function promptSecret(label) {
9
+ const rl = createInterface({ input: stdin, output: stdout, terminal: true });
10
+ // Best-effort masking — the readline API doesn't suppress echo natively;
11
+ // for hardened input you'd want `read -s` or a tty trick, but for our
12
+ // CLI the standard prompt is fine and matches what wrangler does.
13
+ process.stdout.write(`${label}: `);
14
+ const value = await rl.question('');
15
+ rl.close();
16
+ return value.trim();
17
+ }
18
+ /**
19
+ * Classic yes/no confirmation. Returns `defaultYes` on an empty answer.
20
+ * Callers must gate on `process.stdin.isTTY` first — there is no human to
21
+ * answer in a non-interactive session, so prompting there would hang.
22
+ */
23
+ export async function promptConfirm(label, defaultYes = false) {
24
+ const rl = createInterface({ input: stdin, output: stdout });
25
+ const answer = (await rl.question(`${label} [${defaultYes ? 'Y/n' : 'y/N'}] `))
26
+ .trim()
27
+ .toLowerCase();
28
+ rl.close();
29
+ if (!answer)
30
+ return defaultYes;
31
+ return answer === 'y' || answer === 'yes';
32
+ }
@@ -0,0 +1,7 @@
1
+ import type { PikkuRPC } from '../sdk/pikku-rpc.gen.js';
2
+ /**
3
+ * Resolve a stage UUID from (projectId, branch) via the `listStages` RPC.
4
+ * The stageId-based read RPCs (listDeployments, listDeploymentWorkers,
5
+ * getStageDatabaseSchema) need a UUID, but the CLI only knows the branch.
6
+ */
7
+ export declare function resolveStageId(rpc: PikkuRPC, projectId: string, branch: string): Promise<string>;
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Resolve a stage UUID from (projectId, branch) via the `listStages` RPC.
3
+ * The stageId-based read RPCs (listDeployments, listDeploymentWorkers,
4
+ * getStageDatabaseSchema) need a UUID, but the CLI only knows the branch.
5
+ */
6
+ export async function resolveStageId(rpc, projectId, branch) {
7
+ const { stages } = await rpc.invoke('listStages', { projectId });
8
+ const stage = stages.find((s) => s.branch === branch);
9
+ if (!stage) {
10
+ const known = stages.map((s) => s.branch).join(', ');
11
+ throw new Error(`No stage for branch "${branch}".${known ? ` Existing: ${known}` : ''}`);
12
+ }
13
+ return stage.stageId;
14
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * This file was generated by @pikku/cli@0.12.21
3
+ */
4
+ import { CorePikkuFetch } from '@pikku/fetch';
5
+ import type { HTTPWiringsMap, HTTPWiringHandlerOf, HTTPWiringsWithMethod } from './http-map.gen.d.js';
6
+ export declare class PikkuFetch extends CorePikkuFetch {
7
+ post<Route extends HTTPWiringsWithMethod<'POST'>>(route: Route, ...args: null extends HTTPWiringHandlerOf<Route, 'POST'>['input'] ? [data?: Exclude<HTTPWiringHandlerOf<Route, 'POST'>['input'], null>, options?: Omit<RequestInit, 'body'>] : [data: HTTPWiringHandlerOf<Route, 'POST'>['input'], options?: Omit<RequestInit, 'body'>]): Promise<HTTPWiringHandlerOf<Route, 'POST'>['output']>;
8
+ get<Route extends HTTPWiringsWithMethod<'GET'>>(route: Route, ...args: null extends HTTPWiringHandlerOf<Route, 'GET'>['input'] ? [data?: Exclude<HTTPWiringHandlerOf<Route, 'GET'>['input'], null>, options?: Omit<RequestInit, 'body'>] : [data: HTTPWiringHandlerOf<Route, 'GET'>['input'], options?: Omit<RequestInit, 'body'>]): Promise<HTTPWiringHandlerOf<Route, 'GET'>['output']>;
9
+ patch<Route extends HTTPWiringsWithMethod<'PATCH'>>(route: Route, ...args: null extends HTTPWiringHandlerOf<Route, 'PATCH'>['input'] ? [data?: Exclude<HTTPWiringHandlerOf<Route, 'PATCH'>['input'], null>, options?: Omit<RequestInit, 'body'>] : [data: HTTPWiringHandlerOf<Route, 'PATCH'>['input'], options?: Omit<RequestInit, 'body'>]): Promise<HTTPWiringHandlerOf<Route, 'PATCH'>['output']>;
10
+ head<Route extends HTTPWiringsWithMethod<'HEAD'>>(route: Route, ...args: null extends HTTPWiringHandlerOf<Route, 'HEAD'>['input'] ? [data?: Exclude<HTTPWiringHandlerOf<Route, 'HEAD'>['input'], null>, options?: Omit<RequestInit, 'body'>] : [data: HTTPWiringHandlerOf<Route, 'HEAD'>['input'], options?: Omit<RequestInit, 'body'>]): Promise<HTTPWiringHandlerOf<Route, 'HEAD'>['output']>;
11
+ delete<Route extends HTTPWiringsWithMethod<'DELETE'>>(route: Route, ...args: null extends HTTPWiringHandlerOf<Route, 'DELETE'>['input'] ? [data?: Exclude<HTTPWiringHandlerOf<Route, 'DELETE'>['input'], null>, options?: Omit<RequestInit, 'body'>] : [data: HTTPWiringHandlerOf<Route, 'DELETE'>['input'], options?: Omit<RequestInit, 'body'>]): Promise<HTTPWiringHandlerOf<Route, 'DELETE'>['output']>;
12
+ fetch<Route extends keyof HTTPWiringsMap, Method extends keyof HTTPWiringsMap[Route]>(route: Route, method: Method, data: HTTPWiringHandlerOf<Route, Method>['input'], options?: Omit<RequestInit, 'body'>): Promise<Response>;
13
+ }
14
+ export declare const pikkuFetch: PikkuFetch;
@@ -0,0 +1,30 @@
1
+ /**
2
+ * This file was generated by @pikku/cli@0.12.21
3
+ */
4
+ import { CorePikkuFetch } from '@pikku/fetch';
5
+ export class PikkuFetch extends CorePikkuFetch {
6
+ async post(route, ...args) {
7
+ const [data, options] = args;
8
+ return super.api(route, 'POST', data, options);
9
+ }
10
+ async get(route, ...args) {
11
+ const [data, options] = args;
12
+ return super.api(route, 'GET', data, options);
13
+ }
14
+ async patch(route, ...args) {
15
+ const [data, options] = args;
16
+ return super.api(route, 'PATCH', data, options);
17
+ }
18
+ async head(route, ...args) {
19
+ const [data, options] = args;
20
+ return super.api(route, 'HEAD', data, options);
21
+ }
22
+ async delete(route, ...args) {
23
+ const [data, options] = args;
24
+ return super.api(route, 'DELETE', data, options);
25
+ }
26
+ async fetch(route, method, data, options) {
27
+ return await super.fetch(route, method, data, options);
28
+ }
29
+ }
30
+ export const pikkuFetch = new PikkuFetch();