cabloy 5.1.50 → 5.1.52

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 (300) hide show
  1. package/.claude/skills/cabloy-backend-scaffold/SKILL.md +207 -0
  2. package/.claude/skills/cabloy-backend-scaffold/evals/evals.json +29 -0
  3. package/.claude/skills/cabloy-backend-scaffold/references/backend-thread-map.md +52 -0
  4. package/.claude/skills/cabloy-backend-scaffold/references/follow-up-checklist.md +39 -0
  5. package/.claude/skills/cabloy-contract-loop/SKILL.md +201 -0
  6. package/.claude/skills/cabloy-contract-loop/evals/evals.json +29 -0
  7. package/.claude/skills/cabloy-contract-loop/references/contract-loop-map.md +47 -0
  8. package/.claude/skills/cabloy-contract-loop/references/verification-checklist.md +32 -0
  9. package/.claude/skills/cabloy-frontend-scaffold/SKILL.md +230 -0
  10. package/.claude/skills/cabloy-frontend-scaffold/evals/evals.json +35 -0
  11. package/.claude/skills/cabloy-frontend-scaffold/references/follow-up-checklist.md +41 -0
  12. package/.claude/skills/cabloy-frontend-scaffold/references/frontend-thread-map.md +54 -0
  13. package/.claude/skills/cabloy-workflow/SKILL.md +292 -0
  14. package/.claude/skills/cabloy-workflow/evals/evals.json +35 -0
  15. package/.claude/skills/cabloy-workflow/references/cli-strategy.md +39 -0
  16. package/.claude/skills/cabloy-workflow/references/edition-detection.md +30 -0
  17. package/.github/workflows/docs-pages.yml +56 -0
  18. package/.gitignore +1 -0
  19. package/CHANGELOG.md +54 -0
  20. package/CLAUDE.md +59 -0
  21. package/README.md +152 -0
  22. package/cabloy-docs/.vitepress/config.mjs +255 -0
  23. package/cabloy-docs/.vitepress/public/CNAME +1 -0
  24. package/cabloy-docs/.vitepress/theme/custom.css +64 -0
  25. package/cabloy-docs/.vitepress/theme/edition-badges.md +5 -0
  26. package/cabloy-docs/.vitepress/theme/index.js +5 -0
  27. package/cabloy-docs/ai/class-placement-rule.md +139 -0
  28. package/cabloy-docs/ai/cli-for-agents.md +56 -0
  29. package/cabloy-docs/ai/cli-to-skill-map.md +165 -0
  30. package/cabloy-docs/ai/docs-skills-rules-mapping.md +168 -0
  31. package/cabloy-docs/ai/edition-consistency-checklist.md +150 -0
  32. package/cabloy-docs/ai/edition-detection.md +30 -0
  33. package/cabloy-docs/ai/future-skill-roadmap.md +135 -0
  34. package/cabloy-docs/ai/global-bean-lookup.md +158 -0
  35. package/cabloy-docs/ai/introduction.md +62 -0
  36. package/cabloy-docs/ai/playbook-backend-module.md +111 -0
  37. package/cabloy-docs/ai/playbook-contract-regeneration.md +100 -0
  38. package/cabloy-docs/ai/playbook-frontend-page.md +99 -0
  39. package/cabloy-docs/ai/playbook-metadata-refresh.md +67 -0
  40. package/cabloy-docs/ai/repo-guidance.md +58 -0
  41. package/cabloy-docs/ai/rules-and-config.md +29 -0
  42. package/cabloy-docs/ai/skills.md +37 -0
  43. package/cabloy-docs/ai/verification.md +31 -0
  44. package/cabloy-docs/ai/virtual-decorator-guidance.md +206 -0
  45. package/cabloy-docs/backend/aop-overview.md +128 -0
  46. package/cabloy-docs/backend/auth-guide.md +151 -0
  47. package/cabloy-docs/backend/backend-essentials.md +128 -0
  48. package/cabloy-docs/backend/broadcast-guide.md +138 -0
  49. package/cabloy-docs/backend/cache-guide.md +70 -0
  50. package/cabloy-docs/backend/captcha-guide.md +162 -0
  51. package/cabloy-docs/backend/cli.md +173 -0
  52. package/cabloy-docs/backend/config-guide.md +249 -0
  53. package/cabloy-docs/backend/controller-aop-guide.md +270 -0
  54. package/cabloy-docs/backend/controller-guide.md +347 -0
  55. package/cabloy-docs/backend/crud-workflow.md +118 -0
  56. package/cabloy-docs/backend/dto-guide.md +161 -0
  57. package/cabloy-docs/backend/dto-infer-generation.md +153 -0
  58. package/cabloy-docs/backend/dynamic-datasource-guide.md +70 -0
  59. package/cabloy-docs/backend/election-guide.md +141 -0
  60. package/cabloy-docs/backend/entity-guide.md +150 -0
  61. package/cabloy-docs/backend/error-guide.md +108 -0
  62. package/cabloy-docs/backend/event-guide.md +183 -0
  63. package/cabloy-docs/backend/external-aop-guide.md +149 -0
  64. package/cabloy-docs/backend/field-indexes.md +79 -0
  65. package/cabloy-docs/backend/foundation.md +281 -0
  66. package/cabloy-docs/backend/i18n-guide.md +211 -0
  67. package/cabloy-docs/backend/internal-aop-guide.md +181 -0
  68. package/cabloy-docs/backend/introduction.md +95 -0
  69. package/cabloy-docs/backend/jwt-guide.md +276 -0
  70. package/cabloy-docs/backend/logger-guide.md +223 -0
  71. package/cabloy-docs/backend/mail-guide.md +189 -0
  72. package/cabloy-docs/backend/menu-guide.md +80 -0
  73. package/cabloy-docs/backend/migration-and-changes.md +192 -0
  74. package/cabloy-docs/backend/model-guide.md +274 -0
  75. package/cabloy-docs/backend/multi-database-datasource.md +171 -0
  76. package/cabloy-docs/backend/multi-instance-and-instance-resolution.md +196 -0
  77. package/cabloy-docs/backend/openapi-guide.md +118 -0
  78. package/cabloy-docs/backend/orm-aggregate-group-guide.md +210 -0
  79. package/cabloy-docs/backend/orm-configuration-guide.md +165 -0
  80. package/cabloy-docs/backend/orm-guide.md +109 -0
  81. package/cabloy-docs/backend/orm-mutation-guide.md +195 -0
  82. package/cabloy-docs/backend/orm-select-guide.md +243 -0
  83. package/cabloy-docs/backend/queue-guide.md +271 -0
  84. package/cabloy-docs/backend/quickstart.md +141 -0
  85. package/cabloy-docs/backend/redis-guide.md +70 -0
  86. package/cabloy-docs/backend/redlock-guide.md +60 -0
  87. package/cabloy-docs/backend/relations-guide.md +250 -0
  88. package/cabloy-docs/backend/runtime-and-flavors.md +304 -0
  89. package/cabloy-docs/backend/schedule-guide.md +81 -0
  90. package/cabloy-docs/backend/scripts.md +116 -0
  91. package/cabloy-docs/backend/serialization-guide.md +192 -0
  92. package/cabloy-docs/backend/service-guide.md +166 -0
  93. package/cabloy-docs/backend/sharding-guide.md +49 -0
  94. package/cabloy-docs/backend/startup-guide.md +326 -0
  95. package/cabloy-docs/backend/transaction-guide.md +82 -0
  96. package/cabloy-docs/backend/unit-testing.md +209 -0
  97. package/cabloy-docs/backend/upload-guide.md +160 -0
  98. package/cabloy-docs/backend/user-access-guide.md +157 -0
  99. package/cabloy-docs/backend/validation-guide.md +80 -0
  100. package/cabloy-docs/backend/worker-guide.md +59 -0
  101. package/cabloy-docs/editions/cabloy-basic.md +26 -0
  102. package/cabloy-docs/editions/cabloy-start.md +55 -0
  103. package/cabloy-docs/editions/choosing-between-basic-and-start.md +84 -0
  104. package/cabloy-docs/editions/detection.md +31 -0
  105. package/cabloy-docs/editions/overview.md +107 -0
  106. package/cabloy-docs/frontend/api-guide.md +93 -0
  107. package/cabloy-docs/frontend/api-schema-guide.md +43 -0
  108. package/cabloy-docs/frontend/app-startup-guide.md +185 -0
  109. package/cabloy-docs/frontend/cli.md +78 -0
  110. package/cabloy-docs/frontend/component-guide.md +105 -0
  111. package/cabloy-docs/frontend/component-props-guide.md +97 -0
  112. package/cabloy-docs/frontend/component-v-model-guide.md +110 -0
  113. package/cabloy-docs/frontend/css-in-js-guide.md +151 -0
  114. package/cabloy-docs/frontend/design-principles.md +55 -0
  115. package/cabloy-docs/frontend/environment-config-guide.md +250 -0
  116. package/cabloy-docs/frontend/foundation.md +58 -0
  117. package/cabloy-docs/frontend/generic-component-guide.md +35 -0
  118. package/cabloy-docs/frontend/icon-engine-guide.md +88 -0
  119. package/cabloy-docs/frontend/introduction.md +33 -0
  120. package/cabloy-docs/frontend/ioc-and-beans.md +211 -0
  121. package/cabloy-docs/frontend/mock-guide.md +109 -0
  122. package/cabloy-docs/frontend/model-architecture.md +87 -0
  123. package/cabloy-docs/frontend/model-state-guide.md +70 -0
  124. package/cabloy-docs/frontend/module-scope.md +168 -0
  125. package/cabloy-docs/frontend/modules-and-suites.md +179 -0
  126. package/cabloy-docs/frontend/navigation-guards-guide.md +68 -0
  127. package/cabloy-docs/frontend/openapi-sdk-guide.md +102 -0
  128. package/cabloy-docs/frontend/page-guide.md +223 -0
  129. package/cabloy-docs/frontend/page-params-guide.md +87 -0
  130. package/cabloy-docs/frontend/page-query-guide.md +96 -0
  131. package/cabloy-docs/frontend/page-route-guide.md +147 -0
  132. package/cabloy-docs/frontend/quickstart.md +202 -0
  133. package/cabloy-docs/frontend/route-alias-guide.md +61 -0
  134. package/cabloy-docs/frontend/scripts.md +86 -0
  135. package/cabloy-docs/frontend/sdk-guide.md +45 -0
  136. package/cabloy-docs/frontend/server-data.md +74 -0
  137. package/cabloy-docs/frontend/ssr-client-only.md +40 -0
  138. package/cabloy-docs/frontend/ssr-env.md +51 -0
  139. package/cabloy-docs/frontend/ssr-init-data.md +46 -0
  140. package/cabloy-docs/frontend/ssr-overview.md +48 -0
  141. package/cabloy-docs/frontend/ssr-seo-meta.md +52 -0
  142. package/cabloy-docs/frontend/system-startup-guide.md +186 -0
  143. package/cabloy-docs/frontend/theme-guide.md +154 -0
  144. package/cabloy-docs/frontend/zod-guide.md +161 -0
  145. package/cabloy-docs/fullstack/cli.md +118 -0
  146. package/cabloy-docs/fullstack/comparison-with-other-frameworks.md +117 -0
  147. package/cabloy-docs/fullstack/edition-collaboration-differences.md +62 -0
  148. package/cabloy-docs/fullstack/frontend-metadata-to-backend.md +64 -0
  149. package/cabloy-docs/fullstack/introduction.md +81 -0
  150. package/cabloy-docs/fullstack/openapi-to-sdk.md +116 -0
  151. package/cabloy-docs/fullstack/quickstart.md +89 -0
  152. package/cabloy-docs/fullstack/vona-zova-integration.md +86 -0
  153. package/cabloy-docs/fullstack/vscode-extensions.md +126 -0
  154. package/cabloy-docs/index.md +72 -0
  155. package/cabloy-docs/package.json +16 -0
  156. package/cabloy-docs/pnpm-lock.yaml +1607 -0
  157. package/cabloy-docs/reference/backend-directory-structure.md +88 -0
  158. package/cabloy-docs/reference/cli-reference.md +49 -0
  159. package/cabloy-docs/reference/glossary.md +38 -0
  160. package/cabloy-docs/reference/package-map.md +105 -0
  161. package/cabloy-docs/reference/repo-scripts.md +36 -0
  162. package/package.json +4 -1
  163. package/scripts/init.ts +12 -0
  164. package/scripts/upgrade.ts +31 -3
  165. package/vona/README.md +4 -4
  166. package/vona/README.zh-CN.md +4 -4
  167. package/vona/packages-vona/vona/package.json +1 -1
  168. package/vona/pnpm-lock.yaml +383 -38
  169. package/vona/src/suite-vendor/a-cabloy/modules/a-datasharding/package.json +1 -1
  170. package/vona/src/suite-vendor/a-cabloy/modules/a-datasharding/src/bean/summerCache.datasourceWrite.ts +2 -2
  171. package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/package.json +1 -1
  172. package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/src/.metadata/index.ts +49 -1
  173. package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/src/controller/memoryDiag.ts +97 -0
  174. package/vona/src/suite-vendor/a-cabloy/package.json +1 -1
  175. package/vona/src/suite-vendor/a-captcha/modules/a-captcha/package.json +1 -1
  176. package/vona/src/suite-vendor/a-captcha/modules/a-captcha/src/bean/cacheRedis.captcha.ts +2 -2
  177. package/vona/src/suite-vendor/a-captcha/package.json +1 -1
  178. package/vona/src/suite-vendor/a-vona/modules/a-bean/cli/bean/metadata/generate.ts +5 -6
  179. package/vona/src/suite-vendor/a-vona/modules/a-bean/package.json +1 -1
  180. package/vona/src/suite-vendor/a-vona/modules/a-cache/cli/cacheMem/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
  181. package/vona/src/suite-vendor/a-vona/modules/a-cache/cli/cacheRedis/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
  182. package/vona/src/suite-vendor/a-vona/modules/a-cache/package.json +1 -1
  183. package/vona/src/suite-vendor/a-vona/modules/a-cache/src/.metadata/index.ts +13 -2
  184. package/vona/src/suite-vendor/a-vona/modules/a-cache/src/bean/bean.cache.ts +6 -7
  185. package/vona/src/suite-vendor/a-vona/modules/a-cache/src/{bean/bean.cacheMemBase.ts → service/cacheMemBase_.ts} +3 -3
  186. package/vona/src/suite-vendor/a-vona/modules/a-cache/src/{bean/bean.cacheRedisBase.ts → service/cacheRedisBase_.ts} +3 -3
  187. package/vona/src/suite-vendor/a-vona/modules/a-mailconfirm/package.json +1 -1
  188. package/vona/src/suite-vendor/a-vona/modules/a-mailconfirm/src/bean/cacheRedis.emailConfirm.ts +2 -2
  189. package/vona/src/suite-vendor/a-vona/modules/a-mailconfirm/src/bean/cacheRedis.passwordReset.ts +2 -2
  190. package/vona/src/suite-vendor/a-vona/modules/a-openapi/package.json +1 -1
  191. package/vona/src/suite-vendor/a-vona/modules/a-openapi/src/bean/summerCache.json.ts +2 -2
  192. package/vona/src/suite-vendor/a-vona/modules/a-orm/cli/databaseDialect/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
  193. package/vona/src/suite-vendor/a-vona/modules/a-orm/package.json +1 -1
  194. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/.metadata/index.ts +4 -3
  195. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/bean/bean.database.ts +3 -3
  196. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/bean/bean.model.ts +1 -1
  197. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/bean/schedule.softDeletionPrune.ts +1 -1
  198. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/common/utils.ts +1 -1
  199. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/index.ts +1 -1
  200. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_cache.ts +1 -1
  201. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_meta.ts +1 -1
  202. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.modelBase.ts +0 -5
  203. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoAggregate.ts +1 -1
  204. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoCreate.ts +1 -1
  205. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoGet.ts +1 -1
  206. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoGroup.ts +1 -1
  207. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoMutate.ts +1 -1
  208. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoSelectAndCount.ts +1 -1
  209. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoUpdate.ts +1 -1
  210. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/index.ts +1 -0
  211. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/modelCacheBase.ts +3 -3
  212. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relations.ts +1 -1
  213. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relationsDynamic.ts +1 -1
  214. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relationsMutate.ts +1 -1
  215. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relationsStatic.ts +1 -1
  216. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/cacheEntity_.ts +1 -1
  217. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/cacheQuery_.ts +1 -1
  218. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/database.ts +2 -2
  219. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean/bean.databaseDialectBase.ts → service/databaseDialectBase_.ts} +38 -41
  220. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/db_.ts +2 -2
  221. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/relations_.ts +3 -3
  222. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/database.ts +0 -5
  223. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/dto/dtoGet.ts +1 -1
  224. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/dto/dtoMutate.ts +1 -1
  225. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/dto/dtoSelectAndCount.ts +1 -1
  226. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/model.ts +1 -1
  227. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelAggr.ts +1 -1
  228. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelCount.ts +1 -1
  229. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelGeneral.ts +1 -1
  230. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelGroup.ts +1 -1
  231. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelIncrement.ts +1 -1
  232. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relations.ts +1 -1
  233. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsColumns.ts +1 -1
  234. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsDef.ts +1 -1
  235. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsDefDynamic.ts +1 -1
  236. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsDefMutate.ts +1 -1
  237. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsMutate.ts +1 -1
  238. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsTables.ts +1 -1
  239. package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/package.json +1 -1
  240. package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/src/bean/databaseDialect.betterSqlite3.ts +2 -2
  241. package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/src/bean/databaseDialect.mysql.ts +2 -2
  242. package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/src/bean/databaseDialect.pg.ts +2 -2
  243. package/vona/src/suite-vendor/a-vona/modules/a-permission/package.json +1 -1
  244. package/vona/src/suite-vendor/a-vona/modules/a-permission/src/bean/bean.permission.ts +109 -40
  245. package/vona/src/suite-vendor/a-vona/modules/a-permission/src/bean/summerCache.permission.ts +2 -2
  246. package/vona/src/suite-vendor/a-vona/modules/a-startup/package.json +1 -1
  247. package/vona/src/suite-vendor/a-vona/modules/a-startup/src/bean/cacheRedis.startupDebounce.ts +2 -2
  248. package/vona/src/suite-vendor/a-vona/modules/a-summer/cli/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
  249. package/vona/src/suite-vendor/a-vona/modules/a-summer/package.json +1 -1
  250. package/vona/src/suite-vendor/a-vona/modules/a-summer/src/.metadata/index.ts +1 -1
  251. package/vona/src/suite-vendor/a-vona/modules/a-summer/src/bean/bean.summer.ts +3 -3
  252. package/vona/src/suite-vendor/a-vona/modules/a-summer/src/service/localMem_.ts +3 -3
  253. package/vona/src/suite-vendor/a-vona/modules/a-summer/src/service/localRedis_.ts +3 -3
  254. package/vona/src/suite-vendor/a-vona/modules/a-summer/src/{bean/bean.summerCacheBase.ts → service/summerCacheBase_.ts} +3 -3
  255. package/vona/src/suite-vendor/a-vona/modules/a-swagger/package.json +1 -1
  256. package/vona/src/suite-vendor/a-vona/modules/a-swagger/src/bean/summerCache.rapidoc.ts +2 -2
  257. package/vona/src/suite-vendor/a-vona/modules/a-swagger/src/bean/summerCache.swagger.ts +2 -2
  258. package/vona/src/suite-vendor/a-vona/modules/a-user/package.json +1 -1
  259. package/vona/src/suite-vendor/a-vona/modules/a-user/src/bean/cacheRedis.authToken.ts +2 -2
  260. package/vona/src/suite-vendor/a-vona/modules/a-worker/package.json +1 -1
  261. package/vona/src/suite-vendor/a-vona/modules/a-worker/src/bean/cacheRedis.workerAlive.ts +2 -2
  262. package/vona/src/suite-vendor/a-vona/package.json +1 -1
  263. package/zova/README.md +5 -5
  264. package/zova/README.zh-CN.md +4 -4
  265. package/zova/package.original.json +4 -4
  266. package/zova/packages-cli/cli/package.json +2 -2
  267. package/zova/packages-cli/cli-set-front/package.json +2 -2
  268. package/zova/packages-utils/zova-jsx/package.json +2 -2
  269. package/zova/packages-utils/zova-vite/package.json +2 -2
  270. package/zova/packages-utils/zova-vite/templates/app/controller.tsx_ +3 -3
  271. package/zova/packages-zova/zova/package.json +3 -3
  272. package/zova/packages-zova/zova-core/package.json +2 -2
  273. package/zova/packages-zova/zova-core/src/bean/beanContainer.ts +3 -3
  274. package/zova/packages-zova/zova-core/src/bean/beanControllerPageBase.ts +1 -0
  275. package/zova/packages-zova/zova-core/src/core/component/module.ts +16 -16
  276. package/zova/packages-zova/zova-core/src/core/context/component.ts +35 -3
  277. package/zova/packages-zova/zova-core/src/core/context/util.ts +15 -11
  278. package/zova/pnpm-lock.yaml +1596 -1679
  279. package/zova/src/suite/a-demo/modules/demo-basic/src/.metadata/index.ts +11 -0
  280. package/zova/src/suite/a-demo/modules/demo-basic/src/.metadata/page/toolMinimal.ts +9 -0
  281. package/zova/src/suite/a-demo/modules/demo-basic/src/page/toolMinimal/controller.tsx +11 -0
  282. package/zova/src/suite/a-demo/modules/demo-basic/src/routes.ts +10 -0
  283. package/zova/src/suite-vendor/a-zova/modules/a-model/package.json +1 -1
  284. package/zova/src/suite-vendor/a-zova/modules/a-model/src/service/storage.ts +4 -5
  285. package/zova/src/suite-vendor/a-zova/modules/a-openapi/package.json +1 -1
  286. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/monkey.ts +1 -1
  287. package/zova/src/suite-vendor/a-zova/modules/a-ssr/package.json +1 -1
  288. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/lib/ssr.ts +36 -1
  289. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/lib/ssrMetaStore.ts +7 -2
  290. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/monkey.ts +3 -0
  291. package/zova/src/suite-vendor/a-zova/modules/a-ssrserver/package.json +1 -1
  292. package/zova/src/suite-vendor/a-zova/modules/a-ssrserver/src/service/ssrHandler.ts +70 -29
  293. package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +2 -2
  294. package/zova/src/suite-vendor/a-zova/package.json +6 -6
  295. /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_crud.ts +0 -0
  296. /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_crud_inner.ts +0 -0
  297. /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_crud_table.ts +0 -0
  298. /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_knex.ts +0 -0
  299. /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_utils.ts +0 -0
  300. /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_view.ts +0 -0
@@ -0,0 +1,55 @@
1
+ # Cabloy Start
2
+
3
+ Cabloy Start is the private commercial edition. It is a sibling private repository that shares the Cabloy fullstack direction while intentionally differing from Cabloy Basic.
4
+
5
+ ## Repository marker
6
+
7
+ The Cabloy Start root contains:
8
+
9
+ - `__CABLOY_START__`
10
+
11
+ Use that marker before choosing examples, UI assumptions, or automation behavior.
12
+
13
+ ## Typical role
14
+
15
+ Use Cabloy Start as the edition-aware target when work depends on:
16
+
17
+ - direct use of the licensed private repository source
18
+ - Vuetify-specific frontend workflows
19
+ - Cabloy Start flavor names in frontend scripts
20
+ - modules that exist in the private Start repository but not in Basic
21
+ - licensed private-repo structure and Start-specific project composition
22
+ - Start-specific SSR site baselines and project assets
23
+
24
+ ## Get access and initialize
25
+
26
+ Cabloy Start is the private commercial edition. It does not use the default `npm create cabloy` project route.
27
+
28
+ To use Cabloy Start:
29
+
30
+ 1. purchase a license and obtain repository access
31
+ 2. clone the private repository source directly
32
+ 3. run the edition initialization flow in the cloned project
33
+
34
+ Access surfaces:
35
+
36
+ - Purchase page: `https://cabloy.com/module/cabloy-start`
37
+ - Repository: `https://github.com/cabloy/cabloy-start`
38
+
39
+ Clone the repository:
40
+
41
+ ```bash
42
+ git clone git@github.com:cabloy/cabloy-start.git
43
+ ```
44
+
45
+ After cloning, run:
46
+
47
+ ```bash
48
+ npm run init
49
+ ```
50
+
51
+ This initializes the project and installs dependencies.
52
+
53
+ ## Relationship to this docs site
54
+
55
+ This unified docs site treats Cabloy Start as a supported edition, not as a clone of Cabloy Basic. Shared architecture should remain shared, but any Start-specific script, module path, or UI workflow must be labeled explicitly.
@@ -0,0 +1,84 @@
1
+ # Choosing Between Cabloy Basic and Cabloy Start
2
+
3
+ This guide helps you choose the right Cabloy edition before you start a new project, adopt a frontend UI strategy, or prepare AI workflow guidance.
4
+
5
+ ## Short answer
6
+
7
+ Choose **Cabloy Basic** when you want the public framework/reference edition, the default `npm create cabloy` project route, and a faster path for open, community-oriented, or small-to-medium system development.
8
+
9
+ Choose **Cabloy Start** when you want the private commercial edition, purchase-based access to the licensed private repository source, and a stronger baseline for more complex business systems built around the Start-specific suites, SSR sites, project assets, and Vuetify UI layer.
10
+
11
+ ## What stays the same in both editions
12
+
13
+ Both editions share the same Cabloy fullstack core:
14
+
15
+ - **Vona** as the backend framework
16
+ - **Zova** as the frontend framework
17
+ - suite-based modular architecture
18
+ - CLI-first workflows
19
+ - shared frontend engineering direction built around Vue, Vite, Quasar tooling, and related libraries
20
+
21
+ So the decision is not about choosing two unrelated products. It is about choosing the edition baseline that fits your delivery goals best.
22
+
23
+ ## Choose Cabloy Basic when
24
+
25
+ Cabloy Basic is usually the better fit when you want:
26
+
27
+ - the public framework/reference edition
28
+ - the default project route created by `npm create cabloy`
29
+ - open-source visibility and community-friendly workflows
30
+ - public examples and docs that match your repo directly
31
+ - a UI layer aligned with DaisyUI + Tailwind CSS
32
+ - a faster path for small-to-medium system development
33
+
34
+ ## Choose Cabloy Start when
35
+
36
+ Cabloy Start is usually the better fit when you want:
37
+
38
+ - the private commercial edition
39
+ - purchase-based access to the licensed private repository source
40
+ - direct cloning of the Start repository after authorization
41
+ - Start-specific suites, flavors, SSR site baselines, and project assets
42
+ - a UI layer aligned with Vuetify
43
+ - a stronger starting point for more complex business systems
44
+ - edition-specific rules, skills, and docs optimized for the Start repo assumptions
45
+
46
+ ## The most practical decision factors
47
+
48
+ ### Project creation path
49
+
50
+ - **Cabloy Basic**: create the project with `npm create cabloy`
51
+ - **Cabloy Start**: purchase access, clone the licensed private repository source directly, then run `npm run init`
52
+
53
+ ### UI strategy
54
+
55
+ - **Cabloy Basic**: DaisyUI + Tailwind CSS
56
+ - **Cabloy Start**: Vuetify
57
+
58
+ ### Repo and asset model
59
+
60
+ - **Cabloy Basic**: public repository and public reference materials
61
+ - **Cabloy Start**: private repository with Start-specific suites, SSR sites, and project assets
62
+
63
+ ### AI workflow assumptions
64
+
65
+ - **Cabloy Basic**: use Basic-specific examples, flavors, modules, and UI assumptions
66
+ - **Cabloy Start**: use Start-specific examples, flavors, modules, SSR site baselines, and UI assumptions
67
+
68
+ This is why edition detection matters so much for AI vibe coding.
69
+
70
+ ## A simple recommendation rule
71
+
72
+ Use this rule when you need a fast decision:
73
+
74
+ 1. If you want the public, default, `npm create cabloy` path, choose **Cabloy Basic**.
75
+ 2. If you want the licensed private repo with Start-specific assets, a Vuetify-based business-system baseline, and a clone-plus-`npm run init` onboarding path, choose **Cabloy Start**.
76
+ 3. If AI workflow accuracy matters for UI generation, SSR site assumptions, or flavor-specific commands, confirm the edition before writing prompts, rules, skills, or docs.
77
+
78
+ ## Read together with
79
+
80
+ - [Editions Overview](/editions/overview)
81
+ - [Cabloy Basic](/editions/cabloy-basic)
82
+ - [Cabloy Start](/editions/cabloy-start)
83
+ - [Edition Detection](/editions/detection)
84
+ - [Fullstack Quickstart](/fullstack/quickstart)
@@ -0,0 +1,31 @@
1
+ # Edition Detection
2
+
3
+ Edition detection is a first-class requirement for documentation, rules, and skills.
4
+
5
+ ## Repository markers
6
+
7
+ Use these root markers:
8
+
9
+ - `__CABLOY_BASIC__` → Cabloy Basic
10
+ - `__CABLOY_START__` → Cabloy Start
11
+
12
+ ## Why this matters
13
+
14
+ The two editions share many concepts but differ in important operational details, especially around:
15
+
16
+ - frontend UI library assumptions
17
+ - flavor-specific frontend scripts
18
+ - module availability
19
+ - value-add project content in the private Start repository
20
+
21
+ If an agent skips edition detection, it may generate the wrong instructions, recommend the wrong module, or use the wrong UI stack.
22
+
23
+ ## Recommended rule for skills and repo guidance
24
+
25
+ Before suggesting a cross-stack implementation path:
26
+
27
+ 1. check the repository marker
28
+ 2. verify the relevant root scripts or package scripts
29
+ 3. only then choose the edition-specific example or workflow branch
30
+
31
+ When neither marker is present, fall back to code inspection and ask the user before making a strong edition-specific assumption.
@@ -0,0 +1,107 @@
1
+ # Editions Overview
2
+
3
+ Cabloy currently supports two related but distinct editions:
4
+
5
+ - **Cabloy Basic**
6
+ - **Cabloy Start**
7
+
8
+ They share one Cabloy fullstack architecture, but they are distributed, composed, and optimized differently.
9
+
10
+ If you need a recommendation path, start with [Choosing Between Cabloy Basic and Cabloy Start](/editions/choosing-between-basic-and-start).
11
+
12
+ ## Shared fullstack core
13
+
14
+ Both editions are built around the same core direction:
15
+
16
+ - **Vona** as the backend framework
17
+ - **Zova** as the frontend framework
18
+ - suite-based modules across the stack
19
+ - root-level `npm run vona` and `npm run zova` entrypoints
20
+ - CLI-backed workflows for generation, refactoring, metadata, and verification
21
+
22
+ This means the editions are related fullstack baselines, not unrelated products.
23
+
24
+ ## What "Basic" means
25
+
26
+ Cabloy Basic is the public framework/reference edition.
27
+
28
+ - this public repository is marked with `__CABLOY_BASIC__`
29
+ - projects created with `npm create cabloy` follow the Cabloy Basic route
30
+ - the public docs and examples in this repo use Cabloy Basic as the default baseline
31
+
32
+ Cabloy Basic is the open-source community edition and is optimized for public reference, learning, and fast development workflows.
33
+
34
+ ## What "Start" means
35
+
36
+ Cabloy Start is the private commercial edition.
37
+
38
+ - the private repository is marked with `__CABLOY_START__`
39
+ - users first purchase a license and obtain repository access, then clone the private repository source directly
40
+ - after cloning, the project is initialized through the Start edition workflow
41
+ - Start provides its own suites, flavors, SSR sites, and project assets for that edition
42
+
43
+ Cabloy Start is optimized as a commercial baseline for more complex business systems while staying on the same Cabloy fullstack direction.
44
+
45
+ ## Architecture layering
46
+
47
+ Most of the frontend engineering layer is shared, while the edition-specific UI layer differs.
48
+
49
+ ### Shared frontend engineering layer
50
+
51
+ Across editions, Zova uses the same frontend framework direction and engineering tooling, including:
52
+
53
+ - Vue
54
+ - Vite
55
+ - Quasar tooling such as `quasar dev` and `quasar build`
56
+ - TanStack libraries where applicable
57
+
58
+ Here, Quasar is used for engineering tooling rather than as the edition UI component library.
59
+
60
+ ### Edition-specific UI layer
61
+
62
+ The UI component strategy diverges by edition:
63
+
64
+ - **Cabloy Basic**: DaisyUI + Tailwind CSS
65
+ - **Cabloy Start**: Vuetify
66
+
67
+ This difference affects not only UI code, but also module composition, frontend flavor assumptions, SSR site baselines, examples, and AI workflow guidance.
68
+
69
+ ## Edition-specific assets
70
+
71
+ The editions intentionally diverge in several surfaces:
72
+
73
+ - UI layer assumptions
74
+ - frontend flavor names
75
+ - suite and module composition
76
+ - admin/web SSR site baselines
77
+ - licensed private-repo structure and Start-specific project assets
78
+ - rules, skills, and docs used for AI vibe coding
79
+
80
+ For example:
81
+
82
+ - **Cabloy Basic** provides the `cabloy-basic` suites and the `cabloyBasicAdmin` / `cabloyBasicWeb` Zova flavors
83
+ - **Cabloy Start** provides the `cabloy-start` suites and the `cabloyStartAdmin` / `cabloyStartWeb` Zova flavors
84
+
85
+ ## Why the repo markers matter
86
+
87
+ The edition markers are not just labels for humans.
88
+
89
+ `__CABLOY_BASIC__` and `__CABLOY_START__` help tools, docs, and AI workflows choose the correct assumptions for:
90
+
91
+ - UI component usage
92
+ - flavor selection
93
+ - module availability
94
+ - SSR site expectations
95
+ - rules, skills, and verification guidance
96
+
97
+ This is why the two editions should be identified explicitly instead of being treated as interchangeable.
98
+
99
+ ## Documentation rule
100
+
101
+ Write shared explanations once. Split or annotate only when a workflow changes because of:
102
+
103
+ - UI library assumptions
104
+ - frontend flavor names
105
+ - different modules or assets
106
+ - distribution and authorization model
107
+ - edition-specific scripts, generated outputs, or AI workflow guidance
@@ -0,0 +1,93 @@
1
+ # API Guide
2
+
3
+ This guide explains how `$api` works in Zova within the Cabloy monorepo.
4
+
5
+ ## What `$api` is for
6
+
7
+ Zova provides business-oriented API services on top of lower-level request access.
8
+
9
+ That means frontend code does not need to scatter raw request details everywhere. Instead, API calls can be encapsulated into named services that match business intent.
10
+
11
+ ## Create an API service
12
+
13
+ Example: create an API service named `menu` in module `demo-student`.
14
+
15
+ ```bash
16
+ npm run zova :create:bean api menu -- --module=demo-student
17
+ ```
18
+
19
+ ## API definition
20
+
21
+ Representative pattern:
22
+
23
+ ```typescript
24
+ export interface ApiMenuRetrieveMenusResult {
25
+ title: string;
26
+ link: string;
27
+ }
28
+
29
+ @Api()
30
+ export class ApiMenu extends BeanApiBase {
31
+ retrieveMenus() {
32
+ return this.$fetch.get<any, ApiMenuRetrieveMenusResult>('/home/base/menu/');
33
+ }
34
+ }
35
+ ```
36
+
37
+ This shows the intended layering clearly:
38
+
39
+ - `$fetch` handles the lower-level request
40
+ - the API service exposes a business-oriented method such as `retrieveMenus()`
41
+
42
+ API is also one of the core module-scope resource categories; see [Module Scope](/frontend/module-scope).
43
+
44
+ ## Using the API through module scope
45
+
46
+ Typical pattern:
47
+
48
+ ```typescript
49
+ class ControllerTest {
50
+ async retrieveMenus() {
51
+ const menus = await this.scope.api.menu.retrieveMenus();
52
+ }
53
+ }
54
+ ```
55
+
56
+ ## Cross-module API access
57
+
58
+ Cross-module usage is also supported through scope injection.
59
+
60
+ Representative pattern:
61
+
62
+ ```typescript
63
+ @UseScope()
64
+ $$scopeDemoStudent: ScopeModuleDemoStudent;
65
+
66
+ const menus = await this.$$scopeDemoStudent.api.menu.retrieveMenus();
67
+ ```
68
+
69
+ ## Built-in `$api` access
70
+
71
+ The framework also supports accessing certain API services through `this.$api` on bean instances.
72
+
73
+ Representative pattern:
74
+
75
+ ```typescript
76
+ const menus = await this.$api.homeBaseMenu.retrieveMenus({
77
+ params: { publicPath: '' },
78
+ });
79
+ ```
80
+
81
+ ## Implementation checks for frontend data-access changes
82
+
83
+ When adding frontend data access, avoid jumping straight from UI code to ad hoc request logic.
84
+
85
+ A better default is:
86
+
87
+ 1. decide whether the request belongs in a named API service
88
+ 2. create or reuse that API service
89
+ 3. let pages, components, or models consume the API service instead of duplicating request details
90
+
91
+ That keeps the frontend code more business-oriented and easier to evolve.
92
+
93
+ When the backend contract is not ready yet, a temporary frontend-side mock route may be the right bridge; see [Mock Guide](/frontend/mock-guide).
@@ -0,0 +1,43 @@
1
+ # API Schema Guide
2
+
3
+ This page expands the legacy `$apiSchema` placeholder into a practical guidance page for the new docs site.
4
+
5
+ ## What `$apiSchema` represents
6
+
7
+ `$apiSchema` is the schema-oriented layer of the server-data model.
8
+
9
+ While `$api` and generated SDKs focus on calling backend operations, `$apiSchema` focuses on the API metadata itself.
10
+
11
+ That matters when frontend behavior needs to be driven by schema, not just by returned values.
12
+
13
+ ## Why schema access matters
14
+
15
+ In the Cabloy/Zova model, schema metadata can support higher-level frontend behavior such as:
16
+
17
+ - validation
18
+ - automatic form rendering
19
+ - automatic field behavior
20
+ - metadata-driven UI logic
21
+
22
+ This is one reason the server-data thread in Zova is more powerful than a plain request library.
23
+
24
+ ## How to think about `$apiSchema`
25
+
26
+ Use `$apiSchema` when the frontend needs to inspect what the backend contract says, not just call the backend endpoint.
27
+
28
+ That usually means the problem is shifting from “fetch data” to “use metadata to drive behavior.”
29
+
30
+ ## Read together with
31
+
32
+ Use this page together with:
33
+
34
+ - [Server Data](/frontend/server-data)
35
+ - [OpenAPI SDK Guide](/frontend/openapi-sdk-guide)
36
+ - [Backend OpenAPI to Frontend SDK](/fullstack/openapi-to-sdk)
37
+ - [SDK Guide](/frontend/sdk-guide)
38
+
39
+ ## Implementation checks for schema-driven UI changes
40
+
41
+ When asked to build dynamic forms, metadata-driven UI, or schema-aware validation, consider whether the right source is `$apiSchema` rather than hand-authored frontend-only field definitions.
42
+
43
+ That keeps the frontend closer to backend truth and reduces duplicate configuration.
@@ -0,0 +1,185 @@
1
+ # App Startup Guide
2
+
3
+ ## Why app startup matters
4
+
5
+ In Zova, application startup is a structured lifecycle rather than a single opaque bootstrap step.
6
+
7
+ That matters because routing, guards, business initialization, and extension hooks often need to run at different startup phases.
8
+
9
+ ## App startup vs system startup
10
+
11
+ App startup is not the same as system startup.
12
+
13
+ In SSR scenarios especially, app startup can be request-scoped, while system startup is not.
14
+
15
+ This guide focuses on the application lifecycle after the lower-level system wiring is already in place. For system-level lifecycle hooks such as route registration and config loading, see [System Startup Guide](/frontend/system-startup-guide).
16
+
17
+ ## App startup timings
18
+
19
+ Zova provides three main app startup timings:
20
+
21
+ - `appInitialize`
22
+ - `appInitialized`
23
+ - `appReady`
24
+
25
+ These timings allow business modules to run initialization logic at the earliest appropriate stage.
26
+
27
+ ## App shutdown timing
28
+
29
+ App shutdown is represented by:
30
+
31
+ - `appClose`
32
+
33
+ ## Module load timings
34
+
35
+ The app lifecycle also intersects with module loading:
36
+
37
+ - `moduleLoading`
38
+ - `moduleLoaded`
39
+
40
+ These allow module-aware logic to participate before or after the app becomes fully ready.
41
+
42
+ ## Hook response scenarios
43
+
44
+ Zova supports several implementation locations for these hooks:
45
+
46
+ - **Module Main** in a module-local main file
47
+ - **Module Monkey** in a module-local monkey file
48
+ - **App Monkey** in the project frontend config area
49
+
50
+ This makes startup behavior extensible at both module and project levels.
51
+
52
+ ## Hook interface model
53
+
54
+ Different hooks correspond to different interfaces depending on where they are implemented.
55
+
56
+ The important architectural point is not the exact interface matrix alone, but that startup behavior is typed and structured rather than improvised.
57
+
58
+ A compact mental model is:
59
+
60
+ - **Module Main** handles a module’s own loading lifecycle
61
+ - **Module Monkey** lets a module participate in app-wide hook timings
62
+ - **App Monkey** lets the project frontend config layer participate in the same hook system
63
+
64
+ ## Module Main
65
+
66
+ A module can provide its own main lifecycle entrypoints.
67
+
68
+ Representative creation command:
69
+
70
+ ```bash
71
+ npm run zova :init:main demo-student
72
+ ```
73
+
74
+ Representative pattern:
75
+
76
+ ```typescript
77
+ export class Main extends BeanSimple implements IModuleMain {
78
+ async moduleLoading() {}
79
+ async moduleLoaded() {}
80
+ }
81
+ ```
82
+
83
+ ## Module Monkey
84
+
85
+ A module can also provide broader app hook behavior through a monkey entry.
86
+
87
+ Representative creation command:
88
+
89
+ ```bash
90
+ npm run zova :init:monkey demo-student
91
+ ```
92
+
93
+ Representative pattern:
94
+
95
+ ```typescript
96
+ export class Monkey
97
+ extends BeanSimple
98
+ implements
99
+ IMonkeyModule,
100
+ IMonkeyAppInitialize,
101
+ IMonkeyAppInitialized,
102
+ IMonkeyAppReady,
103
+ IMonkeyAppClose
104
+ {
105
+ async moduleLoading(_module: IModule) {}
106
+ async moduleLoaded(_module: IModule) {}
107
+ async appInitialize() {}
108
+ async appInitialized() {}
109
+ async appReady() {}
110
+ async appClose() {}
111
+ }
112
+ ```
113
+
114
+ ## App Monkey
115
+
116
+ Project-level app lifecycle customization can be placed in the frontend config area.
117
+
118
+ This is useful when startup behavior belongs to the application as a whole rather than to one module.
119
+
120
+ Representative creation command:
121
+
122
+ ```bash
123
+ npm run zova :init:appMonkey
124
+ ```
125
+
126
+ Representative file location:
127
+
128
+ ```text
129
+ src/front/config/monkey.ts
130
+ ```
131
+
132
+ ## Practical interpretation of the phases
133
+
134
+ A useful rule of thumb is:
135
+
136
+ - use the earliest timing that still satisfies the need
137
+ - reserve later timings for behavior that depends on earlier framework or module setup already being finished
138
+
139
+ That keeps initialization extensible without creating unnecessary ordering coupling.
140
+
141
+ A representative lifecycle interpretation is:
142
+
143
+ - `appInitialize` for the earliest app-level service setup
144
+ - `appInitialized` when other modules should be able to react to the initialized state
145
+ - `appReady` for behavior that depends on the app becoming operational, such as final router-facing readiness
146
+ - `appClose` for teardown and listener cleanup
147
+
148
+ ## Relationship to routing and guards
149
+
150
+ This page is the second half of the startup story: once system startup has registered routes and loaded config, app startup makes router services, guards, and first-screen navigation operational.
151
+
152
+ Startup timing is closely related to frontend routing and guards, because route services and route-guard behavior often need to be initialized before the app is considered ready.
153
+
154
+ The legacy startup docs explicitly used the router module as the core example:
155
+
156
+ - `appInitialize` as an early route-guard service setup point
157
+ - `appInitialized` as the point where route-guard events can begin involving other business modules
158
+ - `appReady` as the point where Vue Router can be injected and initial navigation can run
159
+ - `appClose` as the teardown point for route-guard listeners
160
+
161
+ Read this guide together with [Navigation Guards Guide](/frontend/navigation-guards-guide) when route lifecycle is involved.
162
+
163
+ A practical reading sequence is:
164
+
165
+ 1. [System Startup Guide](/frontend/system-startup-guide)
166
+ 2. this page for router/guard readiness
167
+ 3. [Page Route Guide](/frontend/page-route-guide)
168
+ 4. [Navigation Guards Guide](/frontend/navigation-guards-guide)
169
+
170
+ ## Relationship to environment/config selection
171
+
172
+ The chosen scripts, mode, appMode, and flavor determine which config and env values are active while startup hooks run.
173
+
174
+ Read this guide together with [Environment and Config Guide](/frontend/environment-config-guide).
175
+
176
+ ## Implementation checks for app-startup changes
177
+
178
+ When editing frontend startup behavior, ask:
179
+
180
+ 1. does this logic belong to app startup or system startup?
181
+ 2. what is the earliest safe hook timing for this behavior?
182
+ 3. should the logic live in module main, module monkey, or app monkey?
183
+ 4. does the behavior depend on routing, SSR, or environment-specific config already being ready?
184
+
185
+ That helps AI place initialization logic correctly instead of pushing everything into one late-stage bootstrap step.
@@ -0,0 +1,78 @@
1
+ # Frontend CLI
2
+
3
+ This guide explains how to use the Zova CLI in the Cabloy monorepo.
4
+
5
+ ## Why the CLI matters
6
+
7
+ Zova provides a large number of CLI commands for generating code skeletons and running frontend workflows.
8
+
9
+ For AI-assisted development, the CLI should be the default starting point whenever a generator or refactor command already exists.
10
+
11
+ ## Example
12
+
13
+ Create a `component` named `test` in module `demo-student`:
14
+
15
+ ```bash
16
+ npm run zova :create:component test -- --module=demo-student
17
+ ```
18
+
19
+ ## Command discovery pattern
20
+
21
+ Zova commands follow a consistent discovery model.
22
+
23
+ ### 1. List all command groups and commands
24
+
25
+ ```bash
26
+ npm run zova :
27
+ ```
28
+
29
+ ### 2. List commands for a specific group
30
+
31
+ ```bash
32
+ npm run zova :create
33
+ ```
34
+
35
+ ### 3. Inspect help for one command
36
+
37
+ ```bash
38
+ npm run zova :create:component --help
39
+ ```
40
+
41
+ ## High-value command families
42
+
43
+ From the current source tree, the most useful Zova command families for day-to-day development are:
44
+
45
+ - `bin:*`
46
+ - `create:*`
47
+ - `init:*`
48
+ - `refactor:*`
49
+ - `tools:*`
50
+ - `openapi:*`
51
+
52
+ Typical use cases include:
53
+
54
+ - scaffold suites, modules, pages, components, mocks, and beans
55
+ - initialize frontend config, locale, constants, assets, and typing helpers
56
+ - run focused refactors such as page query, page params, component props, generic component updates, and related migrations
57
+ - generate OpenAPI-related output
58
+ - refresh metadata and dependency-related output
59
+
60
+ ## VS Code menus and the CLI
61
+
62
+ In practice, Zova workflows can be reached from two surfaces:
63
+
64
+ - VS Code menus for discovery and ergonomics
65
+ - the CLI for explicit, scriptable command execution
66
+
67
+ A practical rule is:
68
+
69
+ - use menus when you want to discover the available workflow quickly in the editor
70
+ - use the CLI when you want reproducible automation, explicit command history, or terminal-first documentation
71
+
72
+ These are not competing workflow systems. They are two entrypoints to the same underlying Zova command families.
73
+
74
+ ## Practical workflow rule
75
+
76
+ When creating or refactoring frontend code, inspect `npm run zova :` or the relevant command family first, prefer the matching generator or refactor command, inspect the generated or transformed output, and only then make minimal follow-up edits.
77
+
78
+ This keeps frontend work aligned with Zova conventions and avoids avoidable manual scaffolding.