@podosoft/podokit 0.17.4 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (681) hide show
  1. package/README.md +70 -114
  2. package/dist/add.d.ts +3 -2
  3. package/dist/add.js +18 -8
  4. package/dist/assemble.d.ts +2 -0
  5. package/dist/assemble.js +18 -5
  6. package/dist/create.d.ts +8 -4
  7. package/dist/create.js +16 -6
  8. package/dist/deploy-compose-profile.js +1 -0
  9. package/dist/deploy-compose-render.d.ts +2 -2
  10. package/dist/deploy-compose-render.js +9 -6
  11. package/dist/deploy-compose-sync.d.ts +10 -14
  12. package/dist/deploy-compose-sync.js +21 -22
  13. package/dist/deploy-compose.js +4 -1
  14. package/dist/deploy-profile.d.ts +1 -0
  15. package/dist/deploy-profile.js +9 -1
  16. package/dist/deploy-render.js +28 -13
  17. package/dist/deploy-schema.js +6 -1
  18. package/dist/dev.d.ts +1 -0
  19. package/dist/dev.js +63 -14
  20. package/dist/index.d.ts +2 -2
  21. package/dist/index.js +15 -9
  22. package/dist/inspect.d.ts +3 -1
  23. package/dist/inspect.js +6 -4
  24. package/dist/lockfile.d.ts +8 -3
  25. package/dist/lockfile.js +18 -4
  26. package/dist/prompt.d.ts +5 -12
  27. package/dist/prompt.js +5 -22
  28. package/dist/remove.js +10 -5
  29. package/dist/templates/base/AGENTS.md +8 -6
  30. package/dist/templates/base/README.md +2 -2
  31. package/dist/templates/base/apps/api/src/main.ts +1 -1
  32. package/dist/templates/base/bunfig.toml +3 -0
  33. package/dist/templates/base/package.json +5 -4
  34. package/dist/templates/{fullstack-nest-svelte → fullstack}/AGENTS.md +19 -12
  35. package/dist/templates/fullstack/Dockerfile.dev +31 -0
  36. package/dist/templates/{fullstack-nest-svelte → fullstack}/README.md +35 -18
  37. package/dist/templates/fullstack/apps/api/Dockerfile +47 -0
  38. package/dist/templates/fullstack/apps/api/package.json +35 -0
  39. package/dist/templates/fullstack/apps/api/scripts/build.mjs +38 -0
  40. package/dist/templates/fullstack/apps/api/scripts/verify-api-contract.ts +37 -0
  41. package/dist/templates/fullstack/apps/api/src/app.extensions.ts +10 -0
  42. package/dist/templates/fullstack/apps/api/src/app.ts +162 -0
  43. package/dist/templates/{todo → fullstack}/apps/api/src/config/redis.connection.spec.ts +20 -2
  44. package/dist/templates/{todo → fullstack}/apps/api/src/config/redis.connection.ts +16 -0
  45. package/dist/templates/fullstack/apps/api/src/core/api-contract.spec.ts +59 -0
  46. package/dist/templates/fullstack/apps/api/src/core/api-contract.ts +169 -0
  47. package/dist/templates/fullstack/apps/api/src/core/services.spec.ts +90 -0
  48. package/dist/templates/fullstack/apps/api/src/core/services.ts +208 -0
  49. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/api/src/database/data-source.ts +8 -3
  50. package/dist/templates/fullstack/apps/api/src/database/database.ts +25 -0
  51. package/dist/templates/fullstack/apps/api/src/health/health.plugin.ts +28 -0
  52. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/api/src/health/readiness.service.spec.ts +1 -1
  53. package/dist/templates/{todo → fullstack}/apps/api/src/health/readiness.service.ts +0 -3
  54. package/dist/templates/fullstack/apps/api/src/main.ts +30 -0
  55. package/dist/templates/{todo → fullstack}/apps/api/tsconfig.json +1 -2
  56. package/dist/templates/fullstack/apps/web/Dockerfile +41 -0
  57. package/dist/templates/{todo → fullstack}/apps/web/components.json +3 -3
  58. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/package.json +13 -10
  59. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/app.html +0 -1
  60. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/alert/alert-action.svelte +1 -1
  61. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/alert/alert-description.svelte +1 -1
  62. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/alert/alert-title.svelte +1 -1
  63. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/alert/alert.svelte +1 -1
  64. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/avatar/avatar-badge.svelte +1 -1
  65. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/avatar/avatar-fallback.svelte +1 -1
  66. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/avatar/avatar-group-count.svelte +1 -1
  67. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/avatar/avatar-group.svelte +1 -1
  68. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/avatar/avatar-image.svelte +1 -1
  69. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/avatar/avatar.svelte +1 -1
  70. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/badge/badge.svelte +1 -1
  71. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/button/button.svelte +1 -1
  72. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/card/card-action.svelte +1 -1
  73. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/card/card-content.svelte +1 -1
  74. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/card/card-description.svelte +1 -1
  75. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/card/card-footer.svelte +1 -1
  76. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/card/card-header.svelte +1 -1
  77. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/card/card-title.svelte +1 -1
  78. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/card/card.svelte +1 -1
  79. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/checkbox/checkbox.svelte +1 -1
  80. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-content.svelte +2 -2
  81. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-description.svelte +1 -1
  82. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-footer.svelte +2 -2
  83. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-header.svelte +1 -1
  84. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-overlay.svelte +1 -1
  85. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-title.svelte +1 -1
  86. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +1 -1
  87. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte +1 -1
  88. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +1 -1
  89. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte +1 -1
  90. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte +1 -1
  91. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +1 -1
  92. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte +1 -1
  93. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte +1 -1
  94. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +1 -1
  95. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +1 -1
  96. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/input/input.svelte +1 -1
  97. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/label/label.svelte +1 -1
  98. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select-content.svelte +2 -2
  99. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/select/select-group-heading.svelte +1 -1
  100. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select-group.svelte +1 -1
  101. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select-item.svelte +1 -1
  102. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/select/select-label.svelte +1 -1
  103. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select-scroll-down-button.svelte +1 -1
  104. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select-scroll-up-button.svelte +1 -1
  105. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select-separator.svelte +2 -2
  106. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/select/select-trigger.svelte +1 -1
  107. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/separator/separator.svelte +1 -1
  108. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/skeleton/skeleton.svelte +1 -1
  109. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/switch/switch.svelte +1 -1
  110. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/table-body.svelte +1 -1
  111. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/table-caption.svelte +1 -1
  112. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/table-cell.svelte +1 -1
  113. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/table/table-footer.svelte +1 -1
  114. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/table-head.svelte +1 -1
  115. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/table-header.svelte +1 -1
  116. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/table-row.svelte +1 -1
  117. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/table.svelte +1 -1
  118. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tabs/tabs-content.svelte +1 -1
  119. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/tabs/tabs-list.svelte +1 -1
  120. package/dist/templates/{todo → fullstack}/apps/web/src/lib/components/ui/tabs/tabs-trigger.svelte +1 -1
  121. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tabs/tabs.svelte +1 -1
  122. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tooltip/tooltip-content.svelte +2 -2
  123. package/dist/templates/{todo → fullstack}/apps/web/src/lib/server/api.ts +9 -6
  124. package/dist/templates/{todo → fullstack}/apps/web/src/lib/server/backend-proxy.test.ts +25 -0
  125. package/dist/templates/{todo → fullstack}/apps/web/src/lib/server/backend-proxy.ts +8 -1
  126. package/dist/templates/fullstack/apps/web/src/routes/+layout.svelte +14 -0
  127. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/routes/+page.svelte +5 -5
  128. package/dist/templates/{todo → fullstack}/apps/web/src/routes/api/[...path]/+server.ts +1 -1
  129. package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/routes/api/auth/[...all]/+server.ts +1 -1
  130. package/dist/templates/{todo → fullstack}/apps/web/tsconfig.json +3 -2
  131. package/dist/templates/fullstack/apps/web/vite.config.ts +25 -0
  132. package/dist/templates/fullstack/bunfig.toml +3 -0
  133. package/dist/templates/{todo → fullstack}/compose.dev.yaml +8 -38
  134. package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-agents/skills/podokit-deploy/SKILL.md +5 -5
  135. package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-agents/skills/podokit-deploy/references/profile.md +5 -3
  136. package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-agents/skills/podokit-deploy/references/rollback.md +2 -2
  137. package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-agents/skills/podokit-deploy-fast/SKILL.md +3 -3
  138. package/dist/templates/{todo → fullstack}/dot-claude/skills/podokit-add-module/SKILL.md +2 -2
  139. package/dist/templates/fullstack/dot-claude/skills/podokit-elysia-endpoint/SKILL.md +27 -0
  140. package/dist/templates/{todo → fullstack}/dot-claude/skills/podokit-sveltekit-route/SKILL.md +4 -4
  141. package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-claude/skills/podokit-update/SKILL.md +3 -1
  142. package/dist/templates/{todo → fullstack}/dot-devcontainer/devcontainer.json +1 -1
  143. package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-env.example +1 -7
  144. package/dist/templates/{todo → fullstack}/dot-github/workflows/release.yml +5 -8
  145. package/dist/templates/fullstack/dot-mcp.json +8 -0
  146. package/dist/templates/fullstack/dot-podokit/dev.json +5 -0
  147. package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/docker/docker-compose.yml +2 -2
  148. package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/docker/sms-sink.mjs +2 -1
  149. package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/README.md +5 -0
  150. package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/configmap.yaml +2 -0
  151. package/dist/templates/fullstack/package.json +27 -0
  152. package/dist/templates/{fullstack-nest-svelte → fullstack}/tests/README.md +6 -6
  153. package/dist/templates/fullstack/tests/package.json +15 -0
  154. package/dist/templates/{fullstack-nest-svelte → fullstack}/tests/ui/smoke.ui.spec.ts +2 -1
  155. package/dist/templates/modules/admin-dashboard/files/apps/api/scripts/bootstrap-admin.mjs +4 -4
  156. package/dist/templates/modules/admin-dashboard/files/apps/api/src/admin.module.ts +153 -0
  157. package/dist/templates/modules/admin-dashboard/files/apps/api/src/profile-image/profile-image.service.spec.ts +13 -13
  158. package/dist/templates/modules/admin-dashboard/files/apps/api/src/profile-image/profile-image.service.ts +34 -22
  159. package/dist/templates/modules/admin-dashboard/files/apps/api/src/profile-image/profile-image.validation.spec.ts +7 -7
  160. package/dist/templates/modules/admin-dashboard/files/apps/api/src/profile-image/profile-image.validation.ts +5 -6
  161. package/dist/templates/modules/admin-dashboard/files/apps/api/src/site-settings/site-settings.service.ts +31 -29
  162. package/dist/templates/modules/admin-dashboard/files/apps/api/src/site-settings/site-settings.validation.spec.ts +22 -0
  163. package/dist/templates/modules/admin-dashboard/files/apps/api/src/site-settings/site-settings.validation.ts +73 -0
  164. package/dist/templates/modules/admin-dashboard/files/apps/web/src/app.d.ts +2 -2
  165. package/dist/templates/modules/admin-dashboard/files/apps/web/src/hooks.server.ts +7 -6
  166. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/admin/registry.svelte.ts +1 -1
  167. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/auth-redirect.ts +1 -1
  168. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/account-menu.svelte +6 -6
  169. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/account-page.svelte +16 -13
  170. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/admin-sidebar.svelte +3 -3
  171. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/data-table.svelte +4 -4
  172. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/impersonation-banner.svelte +24 -0
  173. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/language-switch.svelte +4 -4
  174. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/session-idle-timeout.svelte +1 -1
  175. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/settings/appearance-card.svelte +10 -10
  176. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/sidebar-user-menu.svelte +4 -4
  177. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/site-footer.svelte +2 -2
  178. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/site-runtime.svelte +3 -3
  179. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/table-pagination.svelte +1 -1
  180. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/table-toolbar.svelte +4 -4
  181. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/theme-toggle.svelte +3 -3
  182. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-content.svelte +1 -1
  183. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-ellipsis.svelte +1 -1
  184. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-item.svelte +1 -1
  185. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-link.svelte +2 -2
  186. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-next-button.svelte +1 -1
  187. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-next.svelte +2 -2
  188. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-prev-button.svelte +1 -1
  189. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination-previous.svelte +2 -2
  190. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/pagination/pagination.svelte +1 -1
  191. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sheet/sheet-content.svelte +2 -2
  192. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sheet/sheet-description.svelte +1 -1
  193. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sheet/sheet-footer.svelte +1 -1
  194. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sheet/sheet-header.svelte +1 -1
  195. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sheet/sheet-overlay.svelte +1 -1
  196. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sheet/sheet-title.svelte +1 -1
  197. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/context.svelte.ts +1 -1
  198. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-content.svelte +1 -1
  199. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-footer.svelte +1 -1
  200. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-group-action.svelte +1 -1
  201. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-group-content.svelte +1 -1
  202. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-group-label.svelte +1 -1
  203. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-group.svelte +1 -1
  204. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-header.svelte +1 -1
  205. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-input.svelte +2 -2
  206. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-inset.svelte +1 -1
  207. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-action.svelte +1 -1
  208. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-badge.svelte +1 -1
  209. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-button.svelte +2 -2
  210. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-item.svelte +1 -1
  211. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-skeleton.svelte +2 -2
  212. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-sub-button.svelte +1 -1
  213. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-sub-item.svelte +1 -1
  214. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu-sub.svelte +1 -1
  215. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-menu.svelte +1 -1
  216. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-provider.svelte +2 -2
  217. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-rail.svelte +1 -1
  218. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-separator.svelte +2 -2
  219. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar-trigger.svelte +2 -2
  220. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/ui/sidebar/sidebar.svelte +2 -2
  221. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/user-avatar.svelte +1 -1
  222. package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/i18n/index.ts +1 -1
  223. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/+layout.server.ts +2 -2
  224. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/+layout.svelte +8 -20
  225. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/+page.svelte +3 -3
  226. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/account/+page.svelte +1 -1
  227. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/audit/+page.server.ts +1 -1
  228. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/audit/+page.svelte +5 -5
  229. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/organizations/+page.server.ts +1 -1
  230. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/organizations/+page.svelte +10 -10
  231. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/sessions/+page.server.ts +1 -1
  232. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/sessions/+page.svelte +9 -9
  233. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/settings/+page.server.ts +1 -1
  234. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/settings/+page.svelte +13 -13
  235. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/settings/general-settings.svelte +10 -10
  236. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/users/+page.server.ts +1 -1
  237. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(admin)/admin/users/+page.svelte +18 -17
  238. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(app)/+layout.server.ts +1 -1
  239. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(app)/accept-invitation/[id]/+page.svelte +4 -4
  240. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(auth)/+layout.svelte +2 -2
  241. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(auth)/forgot-password/+page.svelte +7 -7
  242. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(auth)/login/+page.svelte +10 -10
  243. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(auth)/pending-approval/+page.svelte +3 -3
  244. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(auth)/reset-password/+page.svelte +7 -7
  245. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(auth)/signup/+page.svelte +9 -9
  246. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(auth)/verify-email/+page.svelte +7 -7
  247. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/+layout.server.ts +3 -3
  248. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/+page.svelte +6 -6
  249. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/account/+page.server.ts +6 -3
  250. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/account/+page.svelte +12 -8
  251. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/maintenance/+page.svelte +4 -4
  252. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/oauth2/consent/+page.svelte +3 -3
  253. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/setup-2fa/+page.server.ts +1 -1
  254. package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/setup-2fa/+page.svelte +13 -9
  255. package/dist/templates/modules/admin-dashboard/files/dot-claude/skills/podokit-data-table/SKILL.md +3 -3
  256. package/dist/templates/modules/admin-dashboard/files/tests/helpers/accounts.ts +17 -2
  257. package/dist/templates/modules/admin-dashboard/files/tests/helpers/disposable-users.ts +29 -12
  258. package/dist/templates/modules/admin-dashboard/files/tests/helpers/hydration.ts +4 -4
  259. package/dist/templates/modules/admin-dashboard/files/tests/ui/account.ui.spec.ts +51 -0
  260. package/dist/templates/modules/admin-dashboard/files/tests/ui/auth.ui.spec.ts +2 -2
  261. package/dist/templates/modules/admin-dashboard/files/tests/ui/impersonation.ui.spec.ts +4 -2
  262. package/dist/templates/modules/admin-dashboard/files/tests/ui/oidc.ui.spec.ts +26 -13
  263. package/dist/templates/modules/admin-dashboard/files/tests/ui/passkey.ui.spec.ts +3 -2
  264. package/dist/templates/modules/admin-dashboard/module.manifest.json +14 -24
  265. package/dist/templates/modules/api-key-auth/files/apps/api/src/api-key/api-key-verifier.spec.ts +1 -1
  266. package/dist/templates/modules/api-key-auth/files/apps/api/src/api-key/api-key-verifier.ts +0 -2
  267. package/dist/templates/modules/api-key-auth/files/apps/api/src/api-key/api-key.module.spec.ts +21 -0
  268. package/dist/templates/modules/api-key-auth/files/apps/api/src/api-key/api-key.module.ts +36 -9
  269. package/dist/templates/modules/api-key-auth/module.manifest.json +4 -4
  270. package/dist/templates/modules/audit-log/files/apps/api/src/audit/README.md +17 -16
  271. package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit-events.ts +8 -6
  272. package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit-hook.ts +2 -2
  273. package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit.module.ts +31 -12
  274. package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit.service.spec.ts +48 -0
  275. package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit.service.ts +76 -25
  276. package/dist/templates/modules/audit-log/module.manifest.json +12 -16
  277. package/dist/templates/modules/auth/files/apps/api/scripts/configure-auth.mjs +5 -5
  278. package/dist/templates/modules/auth/files/apps/api/scripts/run-migrations.mjs +14 -0
  279. package/dist/templates/modules/auth/files/apps/api/src/auth/auth-provider.ts +3 -6
  280. package/dist/templates/modules/auth/files/apps/api/src/auth/auth.module.ts +176 -0
  281. package/dist/templates/modules/auth/files/apps/api/src/auth/auth.openapi.spec.ts +20 -0
  282. package/dist/templates/modules/auth/files/apps/api/src/auth/auth.openapi.ts +22 -0
  283. package/dist/templates/modules/auth/files/apps/api/src/auth/auth.runtime.spec.ts +3 -3
  284. package/dist/templates/modules/auth/files/apps/api/src/auth/auth.service.spec.ts +52 -0
  285. package/dist/templates/modules/auth/files/apps/api/src/auth/auth.service.ts +78 -0
  286. package/dist/templates/modules/auth/files/apps/api/src/auth/auth.ts +4 -1
  287. package/dist/templates/modules/auth/files/apps/api/src/auth/user-delete-handlers.spec.ts +6 -6
  288. package/dist/templates/modules/auth/files/apps/api/src/auth-config/auth-config.service.ts +214 -100
  289. package/dist/templates/modules/auth/files/apps/api/src/migrations/1720400000000-InitAppSettings.ts +2 -1
  290. package/dist/templates/modules/auth/files/apps/api/src/settings/app-settings.migration.spec.ts +34 -0
  291. package/dist/templates/modules/auth/files/apps/api/src/settings/flag-defaults.ts +3 -3
  292. package/dist/templates/modules/auth/files/apps/api/src/settings/settings.service.ts +26 -30
  293. package/dist/templates/modules/auth/files/dot-claude/skills/podokit-configure-auth/SKILL.md +7 -7
  294. package/dist/templates/modules/auth/files/dot-claude/skills/podokit-configure-auth/references/bootstrap-admin.md +3 -3
  295. package/dist/templates/modules/auth/files/dot-claude/skills/podokit-configure-auth/references/google.md +3 -3
  296. package/dist/templates/modules/auth/module.manifest.json +24 -77
  297. package/dist/templates/modules/bullmq/files/apps/api/src/jobs/demo.processor.spec.ts +10 -0
  298. package/dist/templates/modules/bullmq/files/apps/api/src/jobs/demo.processor.ts +3 -9
  299. package/dist/templates/modules/bullmq/files/apps/api/src/jobs/jobs.module.ts +35 -13
  300. package/dist/templates/modules/bullmq/files/apps/api/src/jobs/worker.module.ts +18 -19
  301. package/dist/templates/modules/bullmq/files/apps/api/src/main-worker.ts +12 -10
  302. package/dist/templates/modules/bullmq/files/infra/docker/worker.compose.example.yml +1 -1
  303. package/dist/templates/modules/bullmq/files/infra/k3s/worker-deployment.yaml +1 -1
  304. package/dist/templates/modules/bullmq/module.manifest.json +8 -9
  305. package/dist/templates/modules/file-upload/files/apps/api/src/files/files.module.ts +28 -8
  306. package/dist/templates/modules/file-upload/files/tests/api/files.api.spec.ts +9 -4
  307. package/dist/templates/modules/file-upload/module.manifest.json +2 -5
  308. package/dist/templates/modules/job-progress/files/apps/api/src/progress/job-progress.module.ts +33 -11
  309. package/dist/templates/modules/job-progress/files/apps/api/src/progress/progress.bridge.spec.ts +6 -6
  310. package/dist/templates/modules/job-progress/files/apps/api/src/progress/progress.bridge.ts +5 -13
  311. package/dist/templates/modules/job-progress/files/apps/api/src/progress/progress.processor.ts +11 -18
  312. package/dist/templates/modules/job-progress/module.manifest.json +5 -8
  313. package/dist/templates/modules/logging/files/apps/api/src/logging/logging.module.ts +15 -28
  314. package/dist/templates/modules/logging/module.manifest.json +5 -6
  315. package/dist/templates/modules/mailer/module.manifest.json +2 -2
  316. package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/storage.config.spec.ts +20 -0
  317. package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/storage.config.ts +17 -21
  318. package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/storage.module.ts +43 -9
  319. package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/storage.service.ts +26 -35
  320. package/dist/templates/modules/object-storage-s3/module.manifest.json +3 -7
  321. package/dist/templates/modules/rate-limit/files/apps/api/src/rate-limit/rate-limit.config.spec.ts +10 -4
  322. package/dist/templates/modules/rate-limit/files/apps/api/src/rate-limit/rate-limit.config.ts +13 -0
  323. package/dist/templates/modules/rate-limit/files/apps/api/src/rate-limit/rate-limit.identity.spec.ts +43 -103
  324. package/dist/templates/modules/rate-limit/files/apps/api/src/rate-limit/rate-limit.identity.ts +19 -56
  325. package/dist/templates/modules/rate-limit/files/apps/api/src/rate-limit/rate-limit.module.spec.ts +124 -212
  326. package/dist/templates/modules/rate-limit/files/apps/api/src/rate-limit/rate-limit.module.ts +123 -87
  327. package/dist/templates/modules/rate-limit/files/tests/api/rate-limit.api.spec.ts +17 -1
  328. package/dist/templates/modules/rate-limit/module.manifest.json +17 -11
  329. package/dist/templates/modules/redis/files/apps/api/src/redis/redis.module.ts +41 -10
  330. package/dist/templates/modules/redis/files/apps/api/src/redis/redis.service.spec.ts +3 -3
  331. package/dist/templates/modules/redis/files/apps/api/src/redis/redis.service.ts +29 -51
  332. package/dist/templates/modules/redis/module.manifest.json +3 -12
  333. package/dist/templates/modules/sse/files/apps/api/src/events/events.module.ts +46 -17
  334. package/dist/templates/modules/sse/files/apps/api/src/events/events.service.spec.ts +19 -50
  335. package/dist/templates/modules/sse/files/apps/api/src/events/events.service.ts +40 -25
  336. package/dist/templates/modules/sse/files/apps/api/src/events/events.transport.ts +25 -79
  337. package/dist/templates/modules/sse/module.manifest.json +2 -5
  338. package/dist/templates/todo/AGENTS.md +15 -12
  339. package/dist/templates/todo/README.md +19 -13
  340. package/dist/templates/todo/apps/api/src/todos/todo.plugin.ts +59 -0
  341. package/dist/templates/todo/apps/api/src/todos/todo.repository.ts +69 -0
  342. package/dist/templates/todo/apps/web/src/routes/+page.svelte +7 -7
  343. package/dist/templates.js +4 -4
  344. package/dist/toolchain.d.ts +14 -0
  345. package/dist/toolchain.js +48 -0
  346. package/dist/update.d.ts +18 -1
  347. package/dist/update.js +50 -12
  348. package/dist/websocket-paths.d.ts +1 -0
  349. package/dist/websocket-paths.js +32 -0
  350. package/package.json +5 -4
  351. package/dist/templates/fullstack-nest-svelte/Dockerfile.dev +0 -58
  352. package/dist/templates/fullstack-nest-svelte/apps/api/Dockerfile +0 -88
  353. package/dist/templates/fullstack-nest-svelte/apps/api/nest-cli.json +0 -5
  354. package/dist/templates/fullstack-nest-svelte/apps/api/package.json +0 -66
  355. package/dist/templates/fullstack-nest-svelte/apps/api/src/app.extensions.ts +0 -21
  356. package/dist/templates/fullstack-nest-svelte/apps/api/src/app.module.ts +0 -26
  357. package/dist/templates/fullstack-nest-svelte/apps/api/src/common/all-exceptions.filter.ts +0 -43
  358. package/dist/templates/fullstack-nest-svelte/apps/api/src/config/redis.connection.spec.ts +0 -53
  359. package/dist/templates/fullstack-nest-svelte/apps/api/src/config/redis.connection.ts +0 -69
  360. package/dist/templates/fullstack-nest-svelte/apps/api/src/health/health.controller.ts +0 -38
  361. package/dist/templates/fullstack-nest-svelte/apps/api/src/health/health.module.ts +0 -11
  362. package/dist/templates/fullstack-nest-svelte/apps/api/src/health/readiness.service.ts +0 -33
  363. package/dist/templates/fullstack-nest-svelte/apps/api/src/main.ts +0 -29
  364. package/dist/templates/fullstack-nest-svelte/apps/api/tsconfig.json +0 -30
  365. package/dist/templates/fullstack-nest-svelte/apps/web/Dockerfile +0 -81
  366. package/dist/templates/fullstack-nest-svelte/apps/web/components.json +0 -15
  367. package/dist/templates/fullstack-nest-svelte/apps/web/server.js +0 -31
  368. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/alert/alert-description.svelte +0 -23
  369. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/avatar/avatar-badge.svelte +0 -26
  370. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/avatar/avatar-fallback.svelte +0 -20
  371. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/avatar/avatar-group-count.svelte +0 -23
  372. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/avatar/avatar-group.svelte +0 -23
  373. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/avatar/avatar-image.svelte +0 -17
  374. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/avatar/avatar.svelte +0 -26
  375. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/card/card-description.svelte +0 -20
  376. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/card/card-footer.svelte +0 -20
  377. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/card/card-title.svelte +0 -20
  378. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/checkbox/checkbox.svelte +0 -39
  379. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dialog/dialog-description.svelte +0 -17
  380. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dialog/dialog-header.svelte +0 -20
  381. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dialog/dialog-overlay.svelte +0 -17
  382. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dialog/dialog-title.svelte +0 -17
  383. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +0 -44
  384. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte +0 -31
  385. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte +0 -27
  386. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte +0 -17
  387. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +0 -17
  388. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +0 -29
  389. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/select/select-group-heading.svelte +0 -21
  390. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/select/select-label.svelte +0 -20
  391. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/select/select-trigger.svelte +0 -29
  392. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/separator/separator.svelte +0 -23
  393. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/skeleton/skeleton.svelte +0 -17
  394. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/table/table-footer.svelte +0 -20
  395. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/tabs/tabs-list.svelte +0 -20
  396. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/tabs/tabs-trigger.svelte +0 -20
  397. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/server/api.ts +0 -21
  398. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/server/backend-proxy.test.ts +0 -79
  399. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/server/backend-proxy.ts +0 -80
  400. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/server/ws-upgrade.js +0 -267
  401. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/server/ws-upgrade.test.js +0 -134
  402. package/dist/templates/fullstack-nest-svelte/apps/web/src/routes/+layout.svelte +0 -9
  403. package/dist/templates/fullstack-nest-svelte/apps/web/src/routes/api/[...path]/+server.ts +0 -16
  404. package/dist/templates/fullstack-nest-svelte/apps/web/svelte.config.js +0 -15
  405. package/dist/templates/fullstack-nest-svelte/apps/web/tsconfig.json +0 -9
  406. package/dist/templates/fullstack-nest-svelte/apps/web/vite.config.ts +0 -29
  407. package/dist/templates/fullstack-nest-svelte/compose.dev.yaml +0 -162
  408. package/dist/templates/fullstack-nest-svelte/dot-claude/skills/podokit-add-module/SKILL.md +0 -27
  409. package/dist/templates/fullstack-nest-svelte/dot-claude/skills/podokit-nest-endpoint/SKILL.md +0 -23
  410. package/dist/templates/fullstack-nest-svelte/dot-claude/skills/podokit-sveltekit-route/SKILL.md +0 -23
  411. package/dist/templates/fullstack-nest-svelte/dot-devcontainer/devcontainer.json +0 -20
  412. package/dist/templates/fullstack-nest-svelte/dot-github/workflows/release.yml +0 -142
  413. package/dist/templates/fullstack-nest-svelte/dot-mcp.json +0 -8
  414. package/dist/templates/fullstack-nest-svelte/dot-podokit/dev.json +0 -4
  415. package/dist/templates/fullstack-nest-svelte/package.json +0 -21
  416. package/dist/templates/fullstack-nest-svelte/tests/package.json +0 -15
  417. package/dist/templates/modules/admin-dashboard/files/apps/api/src/profile-image/profile-image-upload.interceptor.ts +0 -39
  418. package/dist/templates/modules/admin-dashboard/files/apps/api/src/profile-image/profile-image.controller.ts +0 -73
  419. package/dist/templates/modules/admin-dashboard/files/apps/api/src/profile-image/profile-image.module.ts +0 -9
  420. package/dist/templates/modules/admin-dashboard/files/apps/api/src/site-settings/site-settings.controller.ts +0 -155
  421. package/dist/templates/modules/admin-dashboard/files/apps/api/src/site-settings/site-settings.module.ts +0 -14
  422. package/dist/templates/modules/api-key-auth/files/apps/api/src/api-key/api-key.decorator.ts +0 -9
  423. package/dist/templates/modules/api-key-auth/files/apps/api/src/api-key/api-key.guard.spec.ts +0 -49
  424. package/dist/templates/modules/api-key-auth/files/apps/api/src/api-key/api-key.guard.ts +0 -21
  425. package/dist/templates/modules/api-key-auth/files/apps/api/src/machine/machine.controller.ts +0 -14
  426. package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit-log.entity.ts +0 -46
  427. package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit.controller.ts +0 -21
  428. package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit.decorator.ts +0 -23
  429. package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit.interceptor.ts +0 -56
  430. package/dist/templates/modules/auth/files/apps/api/src/account/account.controller.ts +0 -101
  431. package/dist/templates/modules/auth/files/apps/api/src/account/account.module.ts +0 -6
  432. package/dist/templates/modules/auth/files/apps/api/src/auth/two-factor-required.guard.ts +0 -68
  433. package/dist/templates/modules/auth/files/apps/api/src/auth-config/auth-config.controller.ts +0 -33
  434. package/dist/templates/modules/auth/files/apps/api/src/auth-config/auth-config.entity.ts +0 -26
  435. package/dist/templates/modules/auth/files/apps/api/src/auth-config/auth-config.module.ts +0 -12
  436. package/dist/templates/modules/auth/files/apps/api/src/health/health.controller.ts +0 -41
  437. package/dist/templates/modules/auth/files/apps/api/src/settings/app-setting.entity.ts +0 -16
  438. package/dist/templates/modules/auth/files/apps/api/src/settings/settings.module.ts +0 -11
  439. package/dist/templates/modules/bullmq/files/apps/api/src/jobs/dto/create-job.dto.ts +0 -9
  440. package/dist/templates/modules/bullmq/files/apps/api/src/jobs/jobs.controller.ts +0 -29
  441. package/dist/templates/modules/file-upload/files/apps/api/src/files/files.controller.ts +0 -32
  442. package/dist/templates/modules/job-progress/files/apps/api/src/progress/dto/start-job.dto.ts +0 -11
  443. package/dist/templates/modules/job-progress/files/apps/api/src/progress/progress.controller.ts +0 -17
  444. package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/dto/put-object.dto.ts +0 -8
  445. package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/storage.controller.ts +0 -29
  446. package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/storage.service.spec.ts +0 -35
  447. package/dist/templates/modules/rate-limit/files/apps/api/src/rate-limit/rate-limit.module.integration.spec.ts +0 -91
  448. package/dist/templates/modules/redis/files/apps/api/src/redis/cache.controller.ts +0 -21
  449. package/dist/templates/modules/redis/files/apps/api/src/redis/dto/set-cache.dto.ts +0 -14
  450. package/dist/templates/modules/sse/files/apps/api/src/events/dto/publish-event.dto.ts +0 -8
  451. package/dist/templates/modules/sse/files/apps/api/src/events/events.controller.ts +0 -39
  452. package/dist/templates/modules/sse/files/apps/api/src/events/events.transport.redis.spec.ts +0 -42
  453. package/dist/templates/modules/sse/files/apps/api/src/events/events.transport.spec.ts +0 -97
  454. package/dist/templates/todo/CLAUDE.md +0 -6
  455. package/dist/templates/todo/Dockerfile.dev +0 -58
  456. package/dist/templates/todo/apps/api/Dockerfile +0 -88
  457. package/dist/templates/todo/apps/api/nest-cli.json +0 -5
  458. package/dist/templates/todo/apps/api/package.json +0 -66
  459. package/dist/templates/todo/apps/api/scripts/.keep +0 -1
  460. package/dist/templates/todo/apps/api/src/app.extensions.ts +0 -21
  461. package/dist/templates/todo/apps/api/src/app.module.ts +0 -28
  462. package/dist/templates/todo/apps/api/src/common/all-exceptions.filter.ts +0 -43
  463. package/dist/templates/todo/apps/api/src/common/app-exception.ts +0 -4
  464. package/dist/templates/todo/apps/api/src/config/env.validation.ts +0 -23
  465. package/dist/templates/todo/apps/api/src/database/data-source.ts +0 -19
  466. package/dist/templates/todo/apps/api/src/database/migrate.ts +0 -16
  467. package/dist/templates/todo/apps/api/src/health/health.controller.ts +0 -38
  468. package/dist/templates/todo/apps/api/src/health/health.module.ts +0 -11
  469. package/dist/templates/todo/apps/api/src/health/readiness.service.spec.ts +0 -22
  470. package/dist/templates/todo/apps/api/src/main.ts +0 -29
  471. package/dist/templates/todo/apps/api/src/todos/dto/create-todo.dto.ts +0 -10
  472. package/dist/templates/todo/apps/api/src/todos/dto/update-todo.dto.ts +0 -10
  473. package/dist/templates/todo/apps/api/src/todos/todo.entity.ts +0 -16
  474. package/dist/templates/todo/apps/api/src/todos/todos.controller.ts +0 -38
  475. package/dist/templates/todo/apps/api/src/todos/todos.module.ts +0 -12
  476. package/dist/templates/todo/apps/api/src/todos/todos.service.ts +0 -41
  477. package/dist/templates/todo/apps/web/Dockerfile +0 -78
  478. package/dist/templates/todo/apps/web/package.json +0 -38
  479. package/dist/templates/todo/apps/web/server.js +0 -31
  480. package/dist/templates/todo/apps/web/src/app.css +0 -81
  481. package/dist/templates/todo/apps/web/src/app.d.ts +0 -11
  482. package/dist/templates/todo/apps/web/src/app.html +0 -13
  483. package/dist/templates/todo/apps/web/src/lib/api.ts +0 -5
  484. package/dist/templates/todo/apps/web/src/lib/components/site-runtime.svelte +0 -7
  485. package/dist/templates/todo/apps/web/src/lib/components/ui/alert/alert-action.svelte +0 -20
  486. package/dist/templates/todo/apps/web/src/lib/components/ui/alert/alert-title.svelte +0 -23
  487. package/dist/templates/todo/apps/web/src/lib/components/ui/alert/alert.svelte +0 -43
  488. package/dist/templates/todo/apps/web/src/lib/components/ui/alert/index.ts +0 -17
  489. package/dist/templates/todo/apps/web/src/lib/components/ui/avatar/index.ts +0 -22
  490. package/dist/templates/todo/apps/web/src/lib/components/ui/badge/badge.svelte +0 -49
  491. package/dist/templates/todo/apps/web/src/lib/components/ui/badge/index.ts +0 -2
  492. package/dist/templates/todo/apps/web/src/lib/components/ui/button/button.svelte +0 -82
  493. package/dist/templates/todo/apps/web/src/lib/components/ui/button/index.ts +0 -17
  494. package/dist/templates/todo/apps/web/src/lib/components/ui/card/card-action.svelte +0 -23
  495. package/dist/templates/todo/apps/web/src/lib/components/ui/card/card-content.svelte +0 -20
  496. package/dist/templates/todo/apps/web/src/lib/components/ui/card/card-header.svelte +0 -23
  497. package/dist/templates/todo/apps/web/src/lib/components/ui/card/card.svelte +0 -22
  498. package/dist/templates/todo/apps/web/src/lib/components/ui/card/index.ts +0 -25
  499. package/dist/templates/todo/apps/web/src/lib/components/ui/checkbox/index.ts +0 -6
  500. package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog-close.svelte +0 -11
  501. package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog-content.svelte +0 -48
  502. package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog-footer.svelte +0 -32
  503. package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog-portal.svelte +0 -7
  504. package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog-trigger.svelte +0 -11
  505. package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog.svelte +0 -7
  506. package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/index.ts +0 -34
  507. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte +0 -16
  508. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +0 -22
  509. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-group.svelte +0 -7
  510. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte +0 -24
  511. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-portal.svelte +0 -7
  512. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte +0 -16
  513. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +0 -34
  514. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte +0 -20
  515. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub.svelte +0 -7
  516. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +0 -7
  517. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu.svelte +0 -7
  518. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/index.ts +0 -54
  519. package/dist/templates/todo/apps/web/src/lib/components/ui/input/index.ts +0 -7
  520. package/dist/templates/todo/apps/web/src/lib/components/ui/input/input.svelte +0 -48
  521. package/dist/templates/todo/apps/web/src/lib/components/ui/label/index.ts +0 -7
  522. package/dist/templates/todo/apps/web/src/lib/components/ui/label/label.svelte +0 -20
  523. package/dist/templates/todo/apps/web/src/lib/components/ui/select/index.ts +0 -37
  524. package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-content.svelte +0 -45
  525. package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-group.svelte +0 -17
  526. package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-item.svelte +0 -40
  527. package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-portal.svelte +0 -7
  528. package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-scroll-down-button.svelte +0 -20
  529. package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-scroll-up-button.svelte +0 -20
  530. package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-separator.svelte +0 -18
  531. package/dist/templates/todo/apps/web/src/lib/components/ui/select/select.svelte +0 -11
  532. package/dist/templates/todo/apps/web/src/lib/components/ui/separator/index.ts +0 -7
  533. package/dist/templates/todo/apps/web/src/lib/components/ui/skeleton/index.ts +0 -7
  534. package/dist/templates/todo/apps/web/src/lib/components/ui/sonner/index.ts +0 -1
  535. package/dist/templates/todo/apps/web/src/lib/components/ui/sonner/sonner.svelte +0 -34
  536. package/dist/templates/todo/apps/web/src/lib/components/ui/switch/index.ts +0 -7
  537. package/dist/templates/todo/apps/web/src/lib/components/ui/switch/switch.svelte +0 -29
  538. package/dist/templates/todo/apps/web/src/lib/components/ui/table/index.ts +0 -28
  539. package/dist/templates/todo/apps/web/src/lib/components/ui/table/table-body.svelte +0 -15
  540. package/dist/templates/todo/apps/web/src/lib/components/ui/table/table-caption.svelte +0 -20
  541. package/dist/templates/todo/apps/web/src/lib/components/ui/table/table-cell.svelte +0 -15
  542. package/dist/templates/todo/apps/web/src/lib/components/ui/table/table-head.svelte +0 -15
  543. package/dist/templates/todo/apps/web/src/lib/components/ui/table/table-header.svelte +0 -20
  544. package/dist/templates/todo/apps/web/src/lib/components/ui/table/table-row.svelte +0 -15
  545. package/dist/templates/todo/apps/web/src/lib/components/ui/table/table.svelte +0 -17
  546. package/dist/templates/todo/apps/web/src/lib/components/ui/tabs/index.ts +0 -16
  547. package/dist/templates/todo/apps/web/src/lib/components/ui/tabs/tabs-content.svelte +0 -17
  548. package/dist/templates/todo/apps/web/src/lib/components/ui/tabs/tabs.svelte +0 -19
  549. package/dist/templates/todo/apps/web/src/lib/components/ui/tooltip/index.ts +0 -19
  550. package/dist/templates/todo/apps/web/src/lib/components/ui/tooltip/tooltip-content.svelte +0 -52
  551. package/dist/templates/todo/apps/web/src/lib/components/ui/tooltip/tooltip-portal.svelte +0 -7
  552. package/dist/templates/todo/apps/web/src/lib/components/ui/tooltip/tooltip-provider.svelte +0 -7
  553. package/dist/templates/todo/apps/web/src/lib/components/ui/tooltip/tooltip-trigger.svelte +0 -7
  554. package/dist/templates/todo/apps/web/src/lib/components/ui/tooltip/tooltip.svelte +0 -7
  555. package/dist/templates/todo/apps/web/src/lib/i18n/README.md +0 -9
  556. package/dist/templates/todo/apps/web/src/lib/i18n/catalogs/app/en.json +0 -1
  557. package/dist/templates/todo/apps/web/src/lib/i18n/catalogs/app/ko.json +0 -1
  558. package/dist/templates/todo/apps/web/src/lib/i18n/locales/en.json +0 -6
  559. package/dist/templates/todo/apps/web/src/lib/i18n/locales/ko.json +0 -6
  560. package/dist/templates/todo/apps/web/src/lib/server/ws-upgrade.js +0 -267
  561. package/dist/templates/todo/apps/web/src/lib/server/ws-upgrade.test.js +0 -134
  562. package/dist/templates/todo/apps/web/src/lib/utils.ts +0 -11
  563. package/dist/templates/todo/apps/web/src/routes/+layout.svelte +0 -9
  564. package/dist/templates/todo/apps/web/src/routes/api/auth/[...all]/+server.ts +0 -16
  565. package/dist/templates/todo/apps/web/static/.gitkeep +0 -0
  566. package/dist/templates/todo/apps/web/static/favicon.svg +0 -13
  567. package/dist/templates/todo/apps/web/svelte.config.js +0 -15
  568. package/dist/templates/todo/apps/web/vite.config.ts +0 -29
  569. package/dist/templates/todo/dot-agents/skills/podokit-deploy/SKILL.md +0 -65
  570. package/dist/templates/todo/dot-agents/skills/podokit-deploy/agents/openai.yaml +0 -4
  571. package/dist/templates/todo/dot-agents/skills/podokit-deploy/references/profile.md +0 -75
  572. package/dist/templates/todo/dot-agents/skills/podokit-deploy/references/release.md +0 -64
  573. package/dist/templates/todo/dot-agents/skills/podokit-deploy/references/rollback.md +0 -5
  574. package/dist/templates/todo/dot-agents/skills/podokit-deploy-fast/SKILL.md +0 -92
  575. package/dist/templates/todo/dot-claude/skills/podokit-add-locale/SKILL.md +0 -63
  576. package/dist/templates/todo/dot-claude/skills/podokit-add-locale/agents/openai.yaml +0 -4
  577. package/dist/templates/todo/dot-claude/skills/podokit-add-locale/references/catalog-format.md +0 -49
  578. package/dist/templates/todo/dot-claude/skills/podokit-deploy/SKILL.md +0 -8
  579. package/dist/templates/todo/dot-claude/skills/podokit-deploy-fast/SKILL.md +0 -8
  580. package/dist/templates/todo/dot-claude/skills/podokit-nest-endpoint/SKILL.md +0 -23
  581. package/dist/templates/todo/dot-claude/skills/podokit-update/SKILL.md +0 -26
  582. package/dist/templates/todo/dot-cursor/rules/podokit.mdc +0 -11
  583. package/dist/templates/todo/dot-dockerignore +0 -15
  584. package/dist/templates/todo/dot-env.docker +0 -26
  585. package/dist/templates/todo/dot-env.example +0 -34
  586. package/dist/templates/todo/dot-github/copilot-instructions.md +0 -6
  587. package/dist/templates/todo/dot-gitignore +0 -23
  588. package/dist/templates/todo/dot-mcp.json +0 -8
  589. package/dist/templates/todo/dot-podokit/dev.json +0 -4
  590. package/dist/templates/todo/infra/docker/docker-compose.yml +0 -33
  591. package/dist/templates/todo/infra/k3s/README.md +0 -18
  592. package/dist/templates/todo/infra/k3s/api-deployment.yaml +0 -29
  593. package/dist/templates/todo/infra/k3s/configmap.yaml +0 -12
  594. package/dist/templates/todo/infra/k3s/ingress.yaml +0 -32
  595. package/dist/templates/todo/infra/k3s/namespace.yaml +0 -4
  596. package/dist/templates/todo/infra/k3s/secret.example.yaml +0 -10
  597. package/dist/templates/todo/infra/k3s/services.yaml +0 -21
  598. package/dist/templates/todo/infra/k3s/web-deployment.yaml +0 -30
  599. package/dist/templates/todo/infra/traefik/dynamic.yml +0 -17
  600. package/dist/templates/todo/package.json +0 -21
  601. package/dist/templates/todo/tests/README.md +0 -21
  602. package/dist/templates/todo/tests/api/health.api.spec.ts +0 -14
  603. package/dist/templates/todo/tests/package.json +0 -15
  604. package/dist/templates/todo/tests/playwright.config.ts +0 -27
  605. package/dist/templates/todo/tests/playwright.extensions.ts +0 -44
  606. package/dist/templates/todo/tests/ui/smoke.ui.spec.ts +0 -8
  607. /package/dist/templates/{fullstack-nest-svelte → fullstack}/CLAUDE.md +0 -0
  608. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/api/scripts/.keep +0 -0
  609. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/api/src/common/app-exception.ts +0 -0
  610. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/api/src/config/env.validation.ts +0 -0
  611. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/api/src/database/migrate.ts +0 -0
  612. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/app.css +0 -0
  613. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/app.d.ts +0 -0
  614. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/api.ts +0 -0
  615. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/site-runtime.svelte +0 -0
  616. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/alert/index.ts +0 -0
  617. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/avatar/index.ts +0 -0
  618. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/badge/index.ts +0 -0
  619. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/button/index.ts +0 -0
  620. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/card/index.ts +0 -0
  621. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/checkbox/index.ts +0 -0
  622. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-close.svelte +0 -0
  623. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-portal.svelte +0 -0
  624. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dialog/dialog-trigger.svelte +0 -0
  625. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dialog/dialog.svelte +0 -0
  626. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dialog/index.ts +0 -0
  627. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte +0 -0
  628. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-group.svelte +0 -0
  629. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-portal.svelte +0 -0
  630. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte +0 -0
  631. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub.svelte +0 -0
  632. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +0 -0
  633. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu.svelte +0 -0
  634. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/dropdown-menu/index.ts +0 -0
  635. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/input/index.ts +0 -0
  636. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/label/index.ts +0 -0
  637. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/index.ts +0 -0
  638. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select-portal.svelte +0 -0
  639. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/select/select.svelte +0 -0
  640. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/separator/index.ts +0 -0
  641. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/skeleton/index.ts +0 -0
  642. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/sonner/index.ts +0 -0
  643. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/sonner/sonner.svelte +0 -0
  644. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/switch/index.ts +0 -0
  645. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/table/index.ts +0 -0
  646. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tabs/index.ts +0 -0
  647. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tooltip/index.ts +0 -0
  648. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tooltip/tooltip-portal.svelte +0 -0
  649. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tooltip/tooltip-provider.svelte +0 -0
  650. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tooltip/tooltip-trigger.svelte +0 -0
  651. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/components/ui/tooltip/tooltip.svelte +0 -0
  652. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/i18n/README.md +0 -0
  653. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/i18n/catalogs/app/en.json +0 -0
  654. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/i18n/catalogs/app/ko.json +0 -0
  655. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/i18n/locales/en.json +0 -0
  656. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/i18n/locales/ko.json +0 -0
  657. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/src/lib/utils.ts +0 -0
  658. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/static/.gitkeep +0 -0
  659. /package/dist/templates/{fullstack-nest-svelte → fullstack}/apps/web/static/favicon.svg +0 -0
  660. /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-agents/skills/podokit-deploy/agents/openai.yaml +0 -0
  661. /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-agents/skills/podokit-deploy/references/release.md +0 -0
  662. /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-claude/skills/podokit-add-locale/SKILL.md +0 -0
  663. /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-claude/skills/podokit-add-locale/agents/openai.yaml +0 -0
  664. /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-claude/skills/podokit-add-locale/references/catalog-format.md +0 -0
  665. /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-claude/skills/podokit-deploy/SKILL.md +0 -0
  666. /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-claude/skills/podokit-deploy-fast/SKILL.md +0 -0
  667. /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-cursor/rules/podokit.mdc +0 -0
  668. /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-dockerignore +0 -0
  669. /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-env.docker +0 -0
  670. /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-github/copilot-instructions.md +0 -0
  671. /package/dist/templates/{fullstack-nest-svelte → fullstack}/dot-gitignore +0 -0
  672. /package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/api-deployment.yaml +0 -0
  673. /package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/ingress.yaml +0 -0
  674. /package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/namespace.yaml +0 -0
  675. /package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/secret.example.yaml +0 -0
  676. /package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/services.yaml +0 -0
  677. /package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/k3s/web-deployment.yaml +0 -0
  678. /package/dist/templates/{fullstack-nest-svelte → fullstack}/infra/traefik/dynamic.yml +0 -0
  679. /package/dist/templates/{fullstack-nest-svelte → fullstack}/tests/api/health.api.spec.ts +0 -0
  680. /package/dist/templates/{fullstack-nest-svelte → fullstack}/tests/playwright.config.ts +0 -0
  681. /package/dist/templates/{fullstack-nest-svelte → fullstack}/tests/playwright.extensions.ts +0 -0
package/README.md CHANGED
@@ -1,158 +1,114 @@
1
1
  # @podosoft/podokit
2
2
 
3
- **PodoKit** is an opinionated but extensible starter toolkit and CLI for building full-stack TypeScript applications with **NestJS**, **SvelteKit**, **TailwindCSS**, **shadcn-svelte**, **Docker**, and **k3s**.
3
+ PodoKit is an opinionated Bun 1.4.0 full-stack starter and CLI. It generates an
4
+ Elysia API, a SvelteKit web application, PostgreSQL integration through native
5
+ `Bun.SQL`, Tailwind CSS v4, shadcn-svelte, Docker, and k3s assets.
4
6
 
5
- Stop rewriting the same backend bootstrap, frontend setup, environment config, health checks, Docker Compose, and CI every time you start a project. `podo create` gives you a consistent, production-minded foundation in seconds.
7
+ The CLI itself remains Node-compatible, so either `npx` or `bunx` can create and
8
+ maintain projects. Generated PodoKit v1 applications are Bun-only.
6
9
 
7
10
  ## Quick start
8
11
 
9
12
  ```bash
10
13
  npx @podosoft/podokit create my-app
14
+ # or: bunx @podosoft/podokit create my-app
15
+
11
16
  cd my-app
12
- npm install
17
+ bun install
13
18
  cp .env.example .env
14
19
  npx @podosoft/podokit dev watch
15
20
  ```
16
21
 
17
- Open **http://my-app.localhost**. The first project starts one user-level
18
- Traefik gateway on loopback port 80; later projects reuse it and route by
19
- hostname. Stop this project with `npx @podosoft/podokit dev down`. The traditional
20
- `npm run dev` loop remains available on web port 5001 and API port 5002.
21
-
22
- When run in a terminal, `podo create` lists the templates with descriptions and asks which one (and which package manager) to use. Pass flags (or `--yes`) to skip the prompts.
22
+ Open `http://my-app.localhost`. The first project starts a user-level Traefik
23
+ gateway on loopback port 80; later projects reuse it and route by hostname. Stop
24
+ the project with `podo dev down`.
23
25
 
24
- The `todo` template (`--template todo`) generates a working todo app (SvelteKit UI + NestJS API + PostgreSQL) with Swagger docs:
26
+ The `todo` template generates a working SvelteKit UI, Elysia CRUD API, and
27
+ PostgreSQL persistence:
25
28
 
26
29
  ![Generated todo app](https://raw.githubusercontent.com/podosoft-dev/podokit/main/docs/images/todo-app.png)
27
30
 
28
31
  ## Commands
29
32
 
30
- | Command | What it does |
31
- |---|---|
32
- | `podo create <name>` | Scaffold a new project from a template |
33
- | `podo add <module>` | Add a feature module (auth, admin-dashboard, redis, …) to a project |
34
- | `podo status` | Show the PodoKit version, modules, file tiers, and local edits |
35
- | `podo diff` | List the PodoKit-managed files you've edited since generation |
36
- | `podo doctor` | Check framework versions against the supported ranges |
37
- | `podo locale <command>` | Add, validate, activate, deactivate, or list JSON locales |
38
- | `podo update [--apply]` | Preview (or apply) what a version update would change |
39
- | `podo eject <path…>` | Take ownership of a managed file so updates skip it |
40
- | `podo dev <action>` | Watch, inspect, execute in, or stop a container stack behind the shared `*.localhost` gateway |
41
- | `podo deploy <action>` | Plan, apply, verify, or roll back an exact-image Helm release |
42
-
43
- ## Usage
44
-
45
- ```
33
+ | Command | Purpose |
34
+ | --- | --- |
35
+ | `podo create <name>` | Create a Bun project from `fullstack`, `todo`, or `base`. |
36
+ | `podo add <module>` | Add a composable feature module. |
37
+ | `podo remove <module>` | Remove a module conservatively. |
38
+ | `podo status` | Show the PodoKit version, modules, ownership tiers, and local edits. |
39
+ | `podo diff` | List edited or deleted managed files. |
40
+ | `podo doctor` | Check Bun and framework versions. |
41
+ | `podo locale <command>` | Manage JSON locales. |
42
+ | `podo update [--apply]` | Preview or apply managed template and module updates. |
43
+ | `podo eject <path...>` | Transfer managed files to application ownership. |
44
+ | `podo dev <action>` | Manage the generated development containers. |
45
+ | `podo deploy <action>` | Plan, apply, verify, or roll back an immutable Helm release. |
46
+
47
+ ```text
46
48
  podo create <name> [options]
47
49
 
48
50
  Options:
49
- --template <t> Template to scaffold (default: fullstack-nest-svelte)
50
- - fullstack-nest-svelte : clean NestJS + SvelteKit starter
51
- - todo : fullstack + a Todo CRUD example
52
- - base : minimal npm workspace
53
- --dir <path> Target directory (default: ./<name>)
54
- --pm <name> Package manager: npm | pnpm | yarn (default: npm)
55
- --no-ai Skip AI agent guidance (AGENTS.md, CLAUDE.md, editor rules)
56
- -y, --yes Skip prompts and accept defaults
57
- -h, --help Show help
51
+ --template <name> fullstack (default), todo, or base
52
+ --dir <path> Target directory (default: ./<name>)
53
+ --no-ai Omit generated AI-agent guidance
54
+ -y, --yes Accept defaults without prompts
55
+ -h, --help Show help
58
56
  ```
59
57
 
60
- Generated projects include agent guidance for AI coding tools — an
61
- [`AGENTS.md`](https://agents.md) (the open standard), a `CLAUDE.md` that imports
62
- it, `.cursor`/`.github` pointers, and Claude Code skills under `.claude/skills/`.
63
- Modules extend `AGENTS.md` as you add them. Use `--no-ai` to skip.
58
+ `--runtime bun` remains an optional explicit selection. Node runtime values,
59
+ `--pm`, and `podo runtime set` are not part of PodoKit v1. Version 1 projects
60
+ deliberately use Bun-specific APIs on the request and data paths.
64
61
 
65
- Fullstack projects also include a deployment skill under `.agents/skills/`
66
- with a Claude pointer under `.claude/skills/`.
67
-
68
- Examples:
62
+ ## Modules and updates
69
63
 
70
64
  ```bash
71
- # Interactive
72
- npx @podosoft/podokit create my-app
73
-
74
- # Non-interactive, explicit choices
75
- npx @podosoft/podokit create my-app --template fullstack-nest-svelte --pm pnpm --yes
65
+ podo add auth
66
+ bun install
67
+ bun run --cwd apps/api migrate:all
76
68
 
77
- # Minimal workspace
78
- npx @podosoft/podokit create my-lib --template base --yes
69
+ podo status
70
+ podo update
71
+ podo update --apply
79
72
  ```
80
73
 
81
- ## Add features with modules
74
+ Modules overlay files, merge dependencies and environment examples, then wire
75
+ Elysia plugins into `apps/api/src/app.ts`. Generated projects record their
76
+ assembly in `.podokit/`, allowing clean managed files to update and edited files
77
+ to be three-way merged. Application-owned routes, components, and ejected files
78
+ remain untouched.
82
79
 
83
- ```bash
84
- cd my-app
85
- npx @podosoft/podokit add auth # full auth (better-auth): email/password, sessions, OAuth, 2FA
86
- ```
87
-
88
- `podo add <module>` overlays files, merges dependencies, appends env vars, and wires the module into the NestJS app. Run `podo add` with no argument to list available modules.
80
+ See the [module guide](https://github.com/podosoft-dev/podokit/blob/main/docs/modules.md)
81
+ and [updating guide](https://github.com/podosoft-dev/podokit/blob/main/docs/updating.md).
89
82
 
90
- The **`admin-dashboard`** module adds a ready-made admin console on top of `auth` — login/signup pages, user & session management, an audit log, and a Settings page where OAuth providers, SMTP, and server toggles are configured at runtime (stored encrypted in the DB, applied without a restart):
83
+ ## Compatibility boundary
91
84
 
92
- ![PodoKit admin dashboard — users](https://raw.githubusercontent.com/podosoft-dev/podokit/main/docs/images/admin-users.png)
85
+ PodoKit v1 does not convert projects generated by PodoKit 0.x. Existing projects
86
+ must pin `@podosoft/podokit@0.17.4` for maintenance. Start a new v1 project when
87
+ adopting the Bun and Elysia architecture.
93
88
 
94
- ## Keep your project up to date
89
+ The generated application runtime, builds, migrations, and unit tests all use
90
+ Bun 1.4.0. Playwright remains a Node-based test-tool exception because its
91
+ officially supported runtime is Node; `bunx playwright` respects the package's
92
+ Node shebang.
95
93
 
96
- Every generated project records how it was assembled in a committed `.podokit/`
97
- directory, so it can receive template and module improvements later without
98
- losing your work:
99
-
100
- ```bash
101
- podo status # version, modules, and which managed files you've edited
102
- podo update # preview what a newer PodoKit version would change
103
- podo update --apply # apply it: clean updates are written, your edits are 3-way merged
104
- ```
94
+ ## Generated architecture
105
95
 
106
- Files you own (routes, your components, shadcn UI) are never touched. See the
107
- [updating guide](https://github.com/podosoft-dev/podokit/blob/main/docs/updating.md).
108
- An exact path handed over with `podo eject` remains owned even if a module also
109
- declares it managed; if you later move or delete that file, update reports the
110
- missing owned path instead of recreating it.
111
-
112
- ## Deploy an immutable release
113
-
114
- ```bash
115
- podo deploy init --profile production --context production --host app.example.com
116
- podo deploy doctor --profile production
117
- podo deploy plan --profile production --release v1.2.3 --json
118
- ```
119
-
120
- Apply and rollback require the exact confirmation hash from a fresh plan.
121
- PodoKit consumes an existing namespace and Secrets, runs migrations before the
122
- application rollout, and exposes only the SvelteKit web proxy. See the
123
- [deployment guide](https://github.com/podosoft-dev/podokit/blob/main/docs/deployment.md).
124
-
125
- ## What you get (`fullstack-nest-svelte`)
126
-
127
- ```
96
+ ```text
128
97
  my-app/
129
98
  ├── apps/
130
- │ ├── api/ # NestJS: config validation, /health, global
131
- │ │ └── src/ # ValidationPipe, standard error envelope
132
- │ └── web/ # SvelteKit: Tailwind v4, shadcn-svelte,
133
- │ └── src/ # typesafe-i18n, server-side API proxy
99
+ │ ├── api/ # Bun + Elysia + native Bun.SQL
100
+ │ └── web/ # SvelteKit + Tailwind CSS v4 + shadcn-svelte
134
101
  ├── infra/
135
- │ ├── docker/ # docker-compose (PostgreSQL, Redis)
136
- │ └── k3s/ # namespace, deployments, service, ingress, secret example
137
- ├── .env.example
138
- ├── package.json # npm workspace
139
- └── README.md
102
+ │ ├── docker/ # PostgreSQL, Redis, and optional services
103
+ │ └── k3s/ # deployments, services, ingress, and examples
104
+ ├── tests/ # Playwright API and browser tests
105
+ ├── .podokit/ # assembly and managed-file metadata
106
+ └── package.json # Bun workspace pinned to Bun 1.4.0
140
107
  ```
141
108
 
142
- Highlights of the generated app:
143
-
144
- - **Backend (NestJS)** — bootstrap with a global `ValidationPipe` and exception filter, typed environment validation, a `/health` endpoint, and a stable `{ success, error: { code, ... } }` response envelope.
145
- - **Frontend (SvelteKit)** — TailwindCSS v4 (config-less), **shadcn-svelte components preinstalled** (button, input, card, checkbox, label), a typesafe-i18n scaffold, and a **server-side proxy** so the browser never calls the API directly.
146
- - **Infra** — Docker Compose for local PostgreSQL and Redis, plus example k3s manifests (standard `Ingress`, `secret.example.yaml`).
147
-
148
- ## Status
149
-
150
- PodoKit is early (`0.x`). The CLI and templates work end-to-end, but APIs and templates may change before `1.0`. Feedback and issues are welcome.
151
-
152
- ## Links
153
-
154
- - Repository & issues: https://github.com/podosoft-dev/podokit
155
- - Changelog: https://github.com/podosoft-dev/podokit/blob/main/CHANGELOG.md
109
+ The API provides typed Elysia validation, a stable error envelope, liveness and
110
+ readiness endpoints, merged OpenAPI documentation, and an executable route
111
+ contract check. Production API and worker images use `oven/bun:1.4.0-alpine`.
156
112
 
157
113
  ## License
158
114
 
package/dist/add.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { type TemplateVars } from "@podosoft/podokit-template-engine";
1
2
  interface Injection {
2
3
  file: string;
3
4
  marker: string;
@@ -51,7 +52,7 @@ export interface ModuleManifest {
51
52
  /** App-relative globs this module's files should own (durably user-editable,
52
53
  * never touched by `podo update`). Merged into the project's ownedGlobs so
53
54
  * they survive lock recompute. Use for public presentation pages a consumer
54
- * restyles, while keeping the module's `$lib` logic managed. */
55
+ * restyles, while keeping the module's `#lib` logic managed. */
55
56
  ownedGlobs?: string[];
56
57
  /** Paths that an existing app may explicitly hand back to this module with
57
58
  * `podo add --adopt`. Broad app-owned route globs are never removed. */
@@ -120,7 +121,7 @@ export declare function listModules(modulesDir: string, projectRoot?: string): {
120
121
  name: string;
121
122
  description: string;
122
123
  }[];
123
- export declare function readModuleManifest(moduleDir: string): ModuleManifest;
124
+ export declare function readModuleManifest(moduleDir: string, vars?: TemplateVars): ModuleManifest;
124
125
  /**
125
126
  * Apply a module to an existing generated project: overlay files, merge the
126
127
  * target app's package.json dependencies and scripts, append env example lines,
package/dist/add.js CHANGED
@@ -12,6 +12,7 @@ const node_path_1 = require("node:path");
12
12
  const node_module_1 = require("node:module");
13
13
  const podokit_template_engine_1 = require("@podosoft/podokit-template-engine");
14
14
  const lockfile_1 = require("./lockfile");
15
+ const toolchain_1 = require("./toolchain");
15
16
  /** Highest `module.manifest.json` schema version this CLI understands. A package
16
17
  * module declaring a higher version is rejected rather than mis-applied. */
17
18
  exports.SUPPORTED_MANIFEST_VERSION = 2;
@@ -168,8 +169,9 @@ function listModules(modulesDir, projectRoot) {
168
169
  }
169
170
  return [...out].map(([name, description]) => ({ name, description }));
170
171
  }
171
- function readModuleManifest(moduleDir) {
172
- return JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.join)(moduleDir, "module.manifest.json"), "utf8"));
172
+ function readModuleManifest(moduleDir, vars) {
173
+ const source = (0, node_fs_1.readFileSync)((0, node_path_1.join)(moduleDir, "module.manifest.json"), "utf8");
174
+ return JSON.parse(vars ? (0, podokit_template_engine_1.renderTokens)(source, vars) : source);
173
175
  }
174
176
  function readJson(path) {
175
177
  return JSON.parse((0, node_fs_1.readFileSync)(path, "utf8"));
@@ -250,14 +252,24 @@ function applyModule(projectRoot, module, modulesDir, applied, adopt) {
250
252
  throw new Error(`Unknown module "${module}".${available.length ? ` Available: ${available.join(", ")}.` : ""}`);
251
253
  }
252
254
  const moduleDir = resolved.dir;
253
- const manifest = readModuleManifest(moduleDir);
254
- assertManifestVersion(module, manifest);
255
- assertRequiredProjectFiles(projectRoot, module, manifest);
256
- const requiredApps = new Set([manifest.targetApp, ...Object.keys(manifest.packageOverlays ?? {})]);
255
+ const rawManifest = readModuleManifest(moduleDir);
256
+ assertManifestVersion(module, rawManifest);
257
+ assertRequiredProjectFiles(projectRoot, module, rawManifest);
258
+ const requiredApps = new Set([
259
+ rawManifest.targetApp,
260
+ ...Object.keys(rawManifest.packageOverlays ?? {}),
261
+ ]);
257
262
  const missingApp = [...requiredApps].find((app) => !(0, node_fs_1.existsSync)((0, node_path_1.join)(projectRoot, "apps", app, "package.json")));
258
263
  if (missingApp) {
259
264
  throw new Error(`This does not look like a PodoKit project: ${(0, node_path_1.join)("apps", missingApp, "package.json")} not found. Run inside a generated project.`);
260
265
  }
266
+ const appName = projectName(projectRoot);
267
+ const projectManifest = (0, lockfile_1.readManifest)(projectRoot);
268
+ const vars = {
269
+ projectName: appName,
270
+ ...(projectManifest ? (0, toolchain_1.toolchainTemplateVars)(projectManifest.toolchain) : {}),
271
+ };
272
+ const manifest = readModuleManifest(moduleDir, vars);
261
273
  applied.add(module);
262
274
  // 0) apply required modules first (auto-add if missing)
263
275
  const added = [];
@@ -277,8 +289,6 @@ function applyModule(projectRoot, module, modulesDir, applied, adopt) {
277
289
  adopted.push(...result.adopted);
278
290
  touched.push(...result.touched);
279
291
  }
280
- const appName = projectName(projectRoot);
281
- const vars = { projectName: appName };
282
292
  // 1) overlay files
283
293
  const filesDir = (0, node_path_1.join)(moduleDir, "files");
284
294
  if ((0, node_fs_1.existsSync)(filesDir)) {
@@ -15,3 +15,5 @@ export interface AssembleOptions {
15
15
  }
16
16
  /** Assemble the project tree for a template + ordered modules, in memory. */
17
17
  export declare function assembleProject(options: AssembleOptions): VfsTree;
18
+ /** Render a Bun-native project template. */
19
+ export declare function renderProjectTemplate(templatesDir: string, template: string, answers: TemplateVars): VfsTree;
package/dist/assemble.js CHANGED
@@ -1,13 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.assembleProject = assembleProject;
4
+ exports.renderProjectTemplate = renderProjectTemplate;
4
5
  const node_fs_1 = require("node:fs");
5
6
  const node_path_1 = require("node:path");
6
7
  const podokit_template_engine_1 = require("@podosoft/podokit-template-engine");
7
8
  const add_1 = require("./add");
8
- function readManifest(moduleDir) {
9
- return JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.join)(moduleDir, "module.manifest.json"), "utf8"));
10
- }
11
9
  function textOf(tree, path) {
12
10
  return String(tree.get(path)?.content ?? "");
13
11
  }
@@ -15,7 +13,7 @@ function setText(tree, path, content) {
15
13
  tree.set(path, { content, text: true });
16
14
  }
17
15
  function applyModuleToTree(tree, moduleDir, vars) {
18
- const manifest = readManifest(moduleDir);
16
+ const manifest = (0, add_1.readModuleManifest)(moduleDir, vars);
19
17
  // 1) overlay files (module files override the base)
20
18
  const filesDir = (0, node_path_1.join)(moduleDir, "files");
21
19
  if ((0, node_fs_1.existsSync)(filesDir)) {
@@ -79,7 +77,7 @@ function preserveExternalPackageDependency(tree, projectRoot, packageName) {
79
77
  }
80
78
  /** Assemble the project tree for a template + ordered modules, in memory. */
81
79
  function assembleProject(options) {
82
- const tree = (0, podokit_template_engine_1.renderTemplate)((0, node_path_1.join)(options.templatesDir, options.template), options.answers);
80
+ const tree = renderProjectTemplate(options.templatesDir, options.template, options.answers);
83
81
  for (const mod of options.modules) {
84
82
  const name = typeof mod === "string" ? mod : (mod.packageName ?? mod.name);
85
83
  const resolved = (0, add_1.resolveModule)(name, (0, node_path_1.join)(options.templatesDir, "modules"), options.projectRoot ?? options.templatesDir);
@@ -95,3 +93,18 @@ function assembleProject(options) {
95
93
  }
96
94
  return tree;
97
95
  }
96
+ /** Render a Bun-native project template. */
97
+ function renderProjectTemplate(templatesDir, template, answers) {
98
+ const tree = template === "todo"
99
+ ? (0, podokit_template_engine_1.renderTemplate)((0, node_path_1.join)(templatesDir, "fullstack"), answers)
100
+ : (0, podokit_template_engine_1.renderTemplate)((0, node_path_1.join)(templatesDir, template), answers);
101
+ if (template === "todo") {
102
+ for (const [path, file] of (0, podokit_template_engine_1.renderTemplate)((0, node_path_1.join)(templatesDir, template), answers)) {
103
+ tree.set(path, file);
104
+ }
105
+ const appPath = "apps/api/src/app.ts";
106
+ const appSource = textOf(tree, appPath);
107
+ setText(tree, appPath, (0, podokit_template_engine_1.insertAtMarker)((0, podokit_template_engine_1.insertAtMarker)(appSource, "// podokit:end:imports", 'import { todoPlugin } from "./todos/todo.plugin";'), "// podokit:end:modules", '{ name: "todo", plugin: todoPlugin },'));
108
+ }
109
+ return tree;
110
+ }
package/dist/create.d.ts CHANGED
@@ -1,17 +1,20 @@
1
1
  import { DEFAULT_TEMPLATE } from "./templates";
2
- export type PackageManager = "npm" | "pnpm" | "yarn";
2
+ import { type Runtime, type Toolchain } from "./toolchain";
3
+ export type PackageManager = "bun";
3
4
  export { DEFAULT_TEMPLATE };
4
5
  export interface CreateOptions {
5
6
  /** Project name; also the default directory name. */
6
7
  name: string;
7
8
  /** Directory that holds the template sets (each in its own subfolder). */
8
9
  templatesDir: string;
9
- /** Template subfolder to use. Defaults to `fullstack-nest-svelte`. */
10
+ /** Public template name. Defaults to `fullstack`. */
10
11
  template?: string;
11
12
  /** Where to create the project. Defaults to `<cwd>/<name>`. */
12
13
  targetDir?: string;
13
- /** Package manager recorded in the generated project. Defaults to `npm`. */
14
+ /** Deprecated compatibility input. PodoKit v1 accepts only Bun. */
14
15
  packageManager?: PackageManager;
16
+ /** Application runtime. PodoKit v1 accepts only Bun. */
17
+ runtime?: Runtime;
15
18
  /** PodoKit version stamped into the lockfile. Defaults to the CLI version. */
16
19
  podokitVersion?: string;
17
20
  /** Include AI agent guidance (AGENTS.md, CLAUDE.md, editor rules). Defaults to true. */
@@ -19,7 +22,8 @@ export interface CreateOptions {
19
22
  }
20
23
  export interface CreateResult {
21
24
  projectDir: string;
22
- packageManager: PackageManager;
25
+ packageManager: Toolchain["packageManager"];
26
+ toolchain: Toolchain;
23
27
  template: string;
24
28
  }
25
29
  /** Validate a project name: no path separators, npm-friendly characters. */
package/dist/create.js CHANGED
@@ -9,6 +9,8 @@ const podokit_template_engine_1 = require("@podosoft/podokit-template-engine");
9
9
  const templates_1 = require("./templates");
10
10
  Object.defineProperty(exports, "DEFAULT_TEMPLATE", { enumerable: true, get: function () { return templates_1.DEFAULT_TEMPLATE; } });
11
11
  const lockfile_1 = require("./lockfile");
12
+ const assemble_1 = require("./assemble");
13
+ const toolchain_1 = require("./toolchain");
12
14
  /** AI agent guidance files, removed when scaffolding with `--no-ai`. */
13
15
  const AI_ARTIFACTS = [
14
16
  "AGENTS.md",
@@ -36,7 +38,7 @@ function create(options) {
36
38
  const { name, templatesDir } = options;
37
39
  assertValidName(name);
38
40
  const template = options.template ?? templates_1.DEFAULT_TEMPLATE;
39
- const packageManager = options.packageManager ?? "npm";
41
+ const toolchain = (0, toolchain_1.resolveToolchain)(options.runtime, options.packageManager);
40
42
  const projectDir = options.targetDir
41
43
  ? (0, node_path_1.isAbsolute)(options.targetDir)
42
44
  ? options.targetDir
@@ -49,17 +51,25 @@ function create(options) {
49
51
  if (!(0, node_fs_1.existsSync)(templateDir)) {
50
52
  throw new Error(`Template "${template}" not found at ${templateDir}`);
51
53
  }
52
- const vars = { projectName: name, packageManager };
53
- (0, podokit_template_engine_1.copyTemplate)(templateDir, projectDir, vars);
54
+ const vars = {
55
+ projectName: name,
56
+ ...(0, toolchain_1.toolchainTemplateVars)(toolchain),
57
+ };
58
+ (0, podokit_template_engine_1.writeTree)((0, assemble_1.renderProjectTemplate)(templatesDir, template, vars), projectDir);
54
59
  if (options.ai === false) {
55
60
  for (const artifact of AI_ARTIFACTS)
56
61
  (0, node_fs_1.rmSync)((0, node_path_1.join)(projectDir, artifact), { recursive: true, force: true });
57
62
  }
58
63
  (0, lockfile_1.initLockfile)(projectDir, {
59
64
  template,
60
- packageManager,
61
- answers: { projectName: name, packageManager },
65
+ toolchain,
66
+ answers: vars,
62
67
  version: options.podokitVersion,
63
68
  });
64
- return { projectDir, packageManager, template };
69
+ return {
70
+ projectDir,
71
+ packageManager: toolchain.packageManager,
72
+ toolchain,
73
+ template,
74
+ };
65
75
  }
@@ -340,6 +340,7 @@ function initializeComposeProfile(projectRoot, name, options) {
340
340
  ...(modules.has("rate-limit")
341
341
  ? {
342
342
  RATE_LIMIT_TTL: "60",
343
+ RATE_LIMIT_KEY_PREFIX: "podokit:rate-limit",
343
344
  RATE_LIMIT_MAX: "300",
344
345
  RATE_LIMIT_AUTH_TTL: "60",
345
346
  RATE_LIMIT_AUTH_MAX: "20",
@@ -38,11 +38,11 @@ export declare function derivedRuntimeConfig(profile: DockerComposeProfileV1): R
38
38
  * the containers instead of leaving stale values running.
39
39
  */
40
40
  export declare function rolloutStateDigest(profile: DockerComposeProfileV1, secretIdentities: Record<string, string>): string;
41
- export declare function renderComposeDocument(profile: DockerComposeProfileV1, release: string, images: ComposeImages, stateDigest: string): string;
41
+ export declare function renderComposeDocument(profile: DockerComposeProfileV1, release: string, images: ComposeImages, stateDigest: string, workerCommand?: string[]): string;
42
42
  /**
43
43
  * The migration runs as its own Compose project so it can be started, waited on,
44
44
  * and removed without touching the running application definition.
45
45
  */
46
- export declare function renderMigrationDocument(profile: DockerComposeProfileV1, release: string, images: ComposeImages): string;
46
+ export declare function renderMigrationDocument(profile: DockerComposeProfileV1, release: string, images: ComposeImages, defaultCommand?: string[]): string;
47
47
  export declare function defaultComposeImages(profile: DockerComposeProfileV1, release: string): ComposeImages;
48
48
  export declare function renderComposeDeployment(projectRoot: string, profileName: string, profile: DockerComposeProfileV1, release: string, resolvedImages?: ComposeImages, stateDigest?: string): ComposeRuntime;
@@ -11,6 +11,8 @@ const node_crypto_1 = require("node:crypto");
11
11
  const node_fs_1 = require("node:fs");
12
12
  const node_path_1 = require("node:path");
13
13
  const deploy_schema_1 = require("./deploy-schema");
14
+ const lockfile_1 = require("./lockfile");
15
+ const toolchain_1 = require("./toolchain");
14
16
  /** The internal port every generated application service listens on. */
15
17
  const CONTAINER_PORT = 3000;
16
18
  function quote(value) {
@@ -237,7 +239,7 @@ function applicationService(profile, role, image, release, stateDigest, options)
237
239
  " healthcheck:\n disable: true\n") +
238
240
  labelsBlock(profile, release, stateDigest, " "));
239
241
  }
240
- function renderComposeDocument(profile, release, images, stateDigest) {
242
+ function renderComposeDocument(profile, release, images, stateDigest, workerCommand = ["bun", "dist/main-worker.js"]) {
241
243
  const services = [];
242
244
  if (profile.dependencies.postgres.mode === "managed" && images.postgres) {
243
245
  services.push(postgresService(profile, images.postgres));
@@ -262,7 +264,7 @@ function renderComposeDocument(profile, release, images, stateDigest) {
262
264
  // The worker runs the API image with a different entry point, exactly as the
263
265
  // Kubernetes driver does.
264
266
  services.push(applicationService(profile, "worker", images.api, release, stateDigest, {
265
- command: `["node", "dist/main-worker"]`,
267
+ command: `[${workerCommand.map((part) => quote(part)).join(", ")}]`,
266
268
  }));
267
269
  }
268
270
  const volumes = [
@@ -286,8 +288,8 @@ function renderComposeDocument(profile, release, images, stateDigest) {
286
288
  * The migration runs as its own Compose project so it can be started, waited on,
287
289
  * and removed without touching the running application definition.
288
290
  */
289
- function renderMigrationDocument(profile, release, images) {
290
- const command = profile.migration?.command ?? ["npm", "run", "migrate:all"];
291
+ function renderMigrationDocument(profile, release, images, defaultCommand = ["bun", "run", "migrate:all"]) {
292
+ const command = profile.migration?.command ?? defaultCommand;
291
293
  return (`# Generated by PodoKit. One-shot migration for ${release}.\n` +
292
294
  `name: ${profile.target.project}-migrate\n` +
293
295
  `services:\n` +
@@ -323,8 +325,9 @@ function renderComposeDeployment(projectRoot, profileName, profile, release, res
323
325
  const root = (0, node_path_1.join)((0, node_path_1.resolve)(projectRoot), ".podokit", "runtime", "deploy", profileName);
324
326
  (0, node_fs_1.rmSync)(root, { recursive: true, force: true });
325
327
  (0, node_fs_1.mkdirSync)(root, { recursive: true });
326
- const composeDocument = renderComposeDocument(profile, release, images, effectiveStateDigest);
327
- const migrationDocument = renderMigrationDocument(profile, release, images);
328
+ const toolchain = (0, lockfile_1.readManifest)(projectRoot)?.toolchain ?? (0, toolchain_1.resolveToolchain)();
329
+ const composeDocument = renderComposeDocument(profile, release, images, effectiveStateDigest, (0, toolchain_1.toolchainWorkerCommand)(toolchain));
330
+ const migrationDocument = renderMigrationDocument(profile, release, images, (0, toolchain_1.toolchainMigrationCommand)(toolchain));
328
331
  const composeFile = (0, node_path_1.join)(root, "compose.yaml");
329
332
  const migrationFile = (0, node_path_1.join)(root, "compose.migrate.yaml");
330
333
  (0, node_fs_1.writeFileSync)(composeFile, composeDocument);
@@ -84,14 +84,11 @@ interface PackageManifest {
84
84
  * What the images ship outside their dependency tree.
85
85
  *
86
86
  * Every entry mirrors a `COPY --from=build` line in the generated Dockerfiles, which
87
- * is what makes the copy equivalent to a rebuild for code-only changes. Two entries
88
- * exist for a reason worth keeping:
89
- *
90
- * - `apps/web/server.js` and `apps/web/src/lib/server` ship as SOURCE, outside the
91
- * bundle, because the entry point has to run before the adapter does. Syncing only
92
- * `build/` would leave a stale entry running new routes.
93
- * - `packages/*` are copied as real directories rather than the symlinks npm leaves
94
- * behind, so their `dist/` is a separate destination from the apps'.
87
+ * is what makes the copy equivalent to a rebuild for code-only changes. The web
88
+ * image is different from the API image: the official Bun adapter bundles the web
89
+ * application and its workspace dependencies into `apps/web/build`, so that one
90
+ * directory is the complete web payload. API and worker processes still load
91
+ * workspace package output separately.
95
92
  *
96
93
  * `node_modules` is deliberately absent: the image installs a production-only,
97
94
  * workspace-scoped tree for its own platform, and a developer's tree is neither.
@@ -102,12 +99,11 @@ export declare function excludesWithin(artifact: ComposeSyncArtifact, excludes:
102
99
  /**
103
100
  * Whether the image's dependency tree can still run this code.
104
101
  *
105
- * Only the runtime dependency sets matter: `npm ci --omit=dev` installed what these
106
- * declare and nothing else, so a change to any of them means the container is
107
- * missing a package the new code imports -- a failure that surfaces as a crash loop
108
- * after the restart rather than as a copy error. `devDependencies` are absent from
109
- * the image by design and a `version` bump changes nothing at runtime, so neither
110
- * takes part.
102
+ * Only the runtime dependency sets matter for API and worker images: their package
103
+ * manager installed what these manifests declare and nothing else, so a change can
104
+ * leave the container without a package the new code imports. The web image has no
105
+ * runtime dependency tree; the official Bun adapter includes those dependencies in
106
+ * the synced build instead. `devDependencies` and package versions do not take part.
111
107
  */
112
108
  export declare function runtimeDependenciesOf(manifest: PackageManifest): string;
113
109
  export declare function planComposeSync(projectRoot: string, profileName: string, runner?: CommandRunner): ComposeSyncPlan;