cabloy 5.1.49 → 5.1.51

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 (276) 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 +288 -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 +29 -0
  17. package/.github/workflows/docs-pages.yml +54 -0
  18. package/.gitignore +1 -0
  19. package/CHANGELOG.md +46 -0
  20. package/CLAUDE.md +59 -0
  21. package/README.md +137 -0
  22. package/cabloy-docs/.vitepress/config.mjs +222 -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 +138 -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 +167 -0
  31. package/cabloy-docs/ai/edition-detection.md +30 -0
  32. package/cabloy-docs/ai/future-skill-roadmap.md +135 -0
  33. package/cabloy-docs/ai/global-bean-lookup.md +157 -0
  34. package/cabloy-docs/ai/introduction.md +62 -0
  35. package/cabloy-docs/ai/playbook-backend-module.md +111 -0
  36. package/cabloy-docs/ai/playbook-contract-regeneration.md +100 -0
  37. package/cabloy-docs/ai/playbook-frontend-page.md +99 -0
  38. package/cabloy-docs/ai/playbook-metadata-refresh.md +67 -0
  39. package/cabloy-docs/ai/repo-guidance.md +58 -0
  40. package/cabloy-docs/ai/rules-and-config.md +29 -0
  41. package/cabloy-docs/ai/skills.md +35 -0
  42. package/cabloy-docs/ai/verification.md +30 -0
  43. package/cabloy-docs/backend/aop-overview.md +128 -0
  44. package/cabloy-docs/backend/auth-guide.md +151 -0
  45. package/cabloy-docs/backend/backend-essentials.md +128 -0
  46. package/cabloy-docs/backend/broadcast-guide.md +138 -0
  47. package/cabloy-docs/backend/cache-guide.md +70 -0
  48. package/cabloy-docs/backend/captcha-guide.md +162 -0
  49. package/cabloy-docs/backend/cli.md +173 -0
  50. package/cabloy-docs/backend/config-guide.md +249 -0
  51. package/cabloy-docs/backend/controller-aop-guide.md +270 -0
  52. package/cabloy-docs/backend/controller-guide.md +347 -0
  53. package/cabloy-docs/backend/crud-workflow.md +118 -0
  54. package/cabloy-docs/backend/dto-guide.md +161 -0
  55. package/cabloy-docs/backend/dto-infer-generation.md +153 -0
  56. package/cabloy-docs/backend/dynamic-datasource-guide.md +70 -0
  57. package/cabloy-docs/backend/election-guide.md +141 -0
  58. package/cabloy-docs/backend/entity-guide.md +150 -0
  59. package/cabloy-docs/backend/error-guide.md +108 -0
  60. package/cabloy-docs/backend/event-guide.md +183 -0
  61. package/cabloy-docs/backend/external-aop-guide.md +149 -0
  62. package/cabloy-docs/backend/field-indexes.md +79 -0
  63. package/cabloy-docs/backend/foundation.md +281 -0
  64. package/cabloy-docs/backend/i18n-guide.md +211 -0
  65. package/cabloy-docs/backend/internal-aop-guide.md +181 -0
  66. package/cabloy-docs/backend/introduction.md +95 -0
  67. package/cabloy-docs/backend/jwt-guide.md +276 -0
  68. package/cabloy-docs/backend/logger-guide.md +223 -0
  69. package/cabloy-docs/backend/mail-guide.md +189 -0
  70. package/cabloy-docs/backend/menu-guide.md +80 -0
  71. package/cabloy-docs/backend/migration-and-changes.md +192 -0
  72. package/cabloy-docs/backend/model-guide.md +274 -0
  73. package/cabloy-docs/backend/multi-database-datasource.md +171 -0
  74. package/cabloy-docs/backend/multi-instance-and-instance-resolution.md +196 -0
  75. package/cabloy-docs/backend/openapi-guide.md +118 -0
  76. package/cabloy-docs/backend/orm-aggregate-group-guide.md +210 -0
  77. package/cabloy-docs/backend/orm-configuration-guide.md +165 -0
  78. package/cabloy-docs/backend/orm-guide.md +109 -0
  79. package/cabloy-docs/backend/orm-mutation-guide.md +195 -0
  80. package/cabloy-docs/backend/orm-select-guide.md +243 -0
  81. package/cabloy-docs/backend/queue-guide.md +271 -0
  82. package/cabloy-docs/backend/quickstart.md +141 -0
  83. package/cabloy-docs/backend/redis-guide.md +70 -0
  84. package/cabloy-docs/backend/redlock-guide.md +60 -0
  85. package/cabloy-docs/backend/relations-guide.md +250 -0
  86. package/cabloy-docs/backend/runtime-and-flavors.md +304 -0
  87. package/cabloy-docs/backend/schedule-guide.md +81 -0
  88. package/cabloy-docs/backend/scripts.md +116 -0
  89. package/cabloy-docs/backend/serialization-guide.md +192 -0
  90. package/cabloy-docs/backend/service-guide.md +166 -0
  91. package/cabloy-docs/backend/sharding-guide.md +49 -0
  92. package/cabloy-docs/backend/startup-guide.md +326 -0
  93. package/cabloy-docs/backend/transaction-guide.md +82 -0
  94. package/cabloy-docs/backend/unit-testing.md +209 -0
  95. package/cabloy-docs/backend/upload-guide.md +160 -0
  96. package/cabloy-docs/backend/user-access-guide.md +157 -0
  97. package/cabloy-docs/backend/validation-guide.md +80 -0
  98. package/cabloy-docs/backend/worker-guide.md +59 -0
  99. package/cabloy-docs/editions/cabloy-basic.md +25 -0
  100. package/cabloy-docs/editions/cabloy-start.md +24 -0
  101. package/cabloy-docs/editions/detection.md +31 -0
  102. package/cabloy-docs/editions/overview.md +44 -0
  103. package/cabloy-docs/frontend/api-guide.md +93 -0
  104. package/cabloy-docs/frontend/api-schema-guide.md +43 -0
  105. package/cabloy-docs/frontend/app-startup-guide.md +185 -0
  106. package/cabloy-docs/frontend/cli.md +78 -0
  107. package/cabloy-docs/frontend/component-guide.md +105 -0
  108. package/cabloy-docs/frontend/component-props-guide.md +97 -0
  109. package/cabloy-docs/frontend/component-v-model-guide.md +110 -0
  110. package/cabloy-docs/frontend/css-in-js-guide.md +151 -0
  111. package/cabloy-docs/frontend/design-principles.md +55 -0
  112. package/cabloy-docs/frontend/environment-config-guide.md +250 -0
  113. package/cabloy-docs/frontend/foundation.md +57 -0
  114. package/cabloy-docs/frontend/generic-component-guide.md +35 -0
  115. package/cabloy-docs/frontend/icon-engine-guide.md +88 -0
  116. package/cabloy-docs/frontend/introduction.md +32 -0
  117. package/cabloy-docs/frontend/ioc-and-beans.md +211 -0
  118. package/cabloy-docs/frontend/mock-guide.md +109 -0
  119. package/cabloy-docs/frontend/model-architecture.md +87 -0
  120. package/cabloy-docs/frontend/model-state-guide.md +70 -0
  121. package/cabloy-docs/frontend/module-scope.md +168 -0
  122. package/cabloy-docs/frontend/modules-and-suites.md +179 -0
  123. package/cabloy-docs/frontend/navigation-guards-guide.md +68 -0
  124. package/cabloy-docs/frontend/openapi-sdk-guide.md +102 -0
  125. package/cabloy-docs/frontend/page-guide.md +223 -0
  126. package/cabloy-docs/frontend/page-params-guide.md +87 -0
  127. package/cabloy-docs/frontend/page-query-guide.md +96 -0
  128. package/cabloy-docs/frontend/page-route-guide.md +147 -0
  129. package/cabloy-docs/frontend/quickstart.md +201 -0
  130. package/cabloy-docs/frontend/route-alias-guide.md +61 -0
  131. package/cabloy-docs/frontend/scripts.md +86 -0
  132. package/cabloy-docs/frontend/sdk-guide.md +45 -0
  133. package/cabloy-docs/frontend/server-data.md +74 -0
  134. package/cabloy-docs/frontend/ssr-client-only.md +40 -0
  135. package/cabloy-docs/frontend/ssr-env.md +51 -0
  136. package/cabloy-docs/frontend/ssr-init-data.md +46 -0
  137. package/cabloy-docs/frontend/ssr-overview.md +48 -0
  138. package/cabloy-docs/frontend/ssr-seo-meta.md +52 -0
  139. package/cabloy-docs/frontend/system-startup-guide.md +186 -0
  140. package/cabloy-docs/frontend/theme-guide.md +154 -0
  141. package/cabloy-docs/frontend/zod-guide.md +161 -0
  142. package/cabloy-docs/fullstack/edition-collaboration-differences.md +61 -0
  143. package/cabloy-docs/fullstack/frontend-metadata-to-backend.md +64 -0
  144. package/cabloy-docs/fullstack/introduction.md +69 -0
  145. package/cabloy-docs/fullstack/openapi-to-sdk.md +116 -0
  146. package/cabloy-docs/fullstack/quickstart.md +86 -0
  147. package/cabloy-docs/fullstack/vona-zova-integration.md +86 -0
  148. package/cabloy-docs/index.md +73 -0
  149. package/cabloy-docs/package.json +16 -0
  150. package/cabloy-docs/pnpm-lock.yaml +1607 -0
  151. package/cabloy-docs/reference/backend-directory-structure.md +88 -0
  152. package/cabloy-docs/reference/cli-reference.md +49 -0
  153. package/cabloy-docs/reference/glossary.md +38 -0
  154. package/cabloy-docs/reference/package-map.md +105 -0
  155. package/cabloy-docs/reference/repo-scripts.md +36 -0
  156. package/package.json +4 -1
  157. package/scripts/init.ts +12 -0
  158. package/scripts/upgrade.ts +31 -3
  159. package/vona/README.md +3 -3
  160. package/vona/README.zh-CN.md +4 -4
  161. package/vona/packages-vona/vona/package.json +1 -1
  162. package/vona/src/suite-vendor/a-cabloy/modules/a-datasharding/package.json +1 -1
  163. package/vona/src/suite-vendor/a-cabloy/modules/a-datasharding/src/bean/summerCache.datasourceWrite.ts +2 -2
  164. package/vona/src/suite-vendor/a-cabloy/package.json +1 -1
  165. package/vona/src/suite-vendor/a-captcha/modules/a-captcha/package.json +1 -1
  166. package/vona/src/suite-vendor/a-captcha/modules/a-captcha/src/bean/cacheRedis.captcha.ts +2 -2
  167. package/vona/src/suite-vendor/a-captcha/package.json +1 -1
  168. package/vona/src/suite-vendor/a-vona/modules/a-bean/cli/bean/metadata/generate.ts +5 -6
  169. package/vona/src/suite-vendor/a-vona/modules/a-bean/package.json +1 -1
  170. package/vona/src/suite-vendor/a-vona/modules/a-cache/cli/cacheMem/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
  171. package/vona/src/suite-vendor/a-vona/modules/a-cache/cli/cacheRedis/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
  172. package/vona/src/suite-vendor/a-vona/modules/a-cache/package.json +1 -1
  173. package/vona/src/suite-vendor/a-vona/modules/a-cache/src/.metadata/index.ts +13 -2
  174. package/vona/src/suite-vendor/a-vona/modules/a-cache/src/bean/bean.cache.ts +6 -7
  175. package/vona/src/suite-vendor/a-vona/modules/a-cache/src/{bean/bean.cacheMemBase.ts → service/cacheMemBase_.ts} +3 -3
  176. package/vona/src/suite-vendor/a-vona/modules/a-cache/src/{bean/bean.cacheRedisBase.ts → service/cacheRedisBase_.ts} +3 -3
  177. package/vona/src/suite-vendor/a-vona/modules/a-mailconfirm/package.json +1 -1
  178. package/vona/src/suite-vendor/a-vona/modules/a-mailconfirm/src/bean/cacheRedis.emailConfirm.ts +2 -2
  179. package/vona/src/suite-vendor/a-vona/modules/a-mailconfirm/src/bean/cacheRedis.passwordReset.ts +2 -2
  180. package/vona/src/suite-vendor/a-vona/modules/a-openapi/package.json +1 -1
  181. package/vona/src/suite-vendor/a-vona/modules/a-openapi/src/bean/summerCache.json.ts +2 -2
  182. package/vona/src/suite-vendor/a-vona/modules/a-orm/cli/databaseDialect/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
  183. package/vona/src/suite-vendor/a-vona/modules/a-orm/package.json +1 -1
  184. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/.metadata/index.ts +4 -3
  185. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/bean/bean.database.ts +3 -3
  186. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/bean/bean.model.ts +1 -1
  187. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/bean/schedule.softDeletionPrune.ts +1 -1
  188. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/common/utils.ts +1 -1
  189. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/index.ts +1 -1
  190. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_cache.ts +1 -1
  191. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_meta.ts +1 -1
  192. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.modelBase.ts +0 -5
  193. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoAggregate.ts +1 -1
  194. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoCreate.ts +1 -1
  195. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoGet.ts +1 -1
  196. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoGroup.ts +1 -1
  197. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoMutate.ts +1 -1
  198. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoSelectAndCount.ts +1 -1
  199. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoUpdate.ts +1 -1
  200. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/index.ts +1 -0
  201. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/modelCacheBase.ts +3 -3
  202. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relations.ts +1 -1
  203. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relationsDynamic.ts +1 -1
  204. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relationsMutate.ts +1 -1
  205. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relationsStatic.ts +1 -1
  206. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/cacheEntity_.ts +1 -1
  207. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/cacheQuery_.ts +1 -1
  208. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/database.ts +2 -2
  209. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean/bean.databaseDialectBase.ts → service/databaseDialectBase_.ts} +38 -41
  210. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/db_.ts +2 -2
  211. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/relations_.ts +3 -3
  212. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/database.ts +0 -5
  213. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/dto/dtoGet.ts +1 -1
  214. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/dto/dtoMutate.ts +1 -1
  215. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/dto/dtoSelectAndCount.ts +1 -1
  216. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/model.ts +1 -1
  217. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelAggr.ts +1 -1
  218. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelCount.ts +1 -1
  219. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelGeneral.ts +1 -1
  220. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelGroup.ts +1 -1
  221. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelIncrement.ts +1 -1
  222. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relations.ts +1 -1
  223. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsColumns.ts +1 -1
  224. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsDef.ts +1 -1
  225. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsDefDynamic.ts +1 -1
  226. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsDefMutate.ts +1 -1
  227. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsMutate.ts +1 -1
  228. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsTables.ts +1 -1
  229. package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/package.json +1 -1
  230. package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/src/bean/databaseDialect.betterSqlite3.ts +2 -2
  231. package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/src/bean/databaseDialect.mysql.ts +2 -2
  232. package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/src/bean/databaseDialect.pg.ts +2 -2
  233. package/vona/src/suite-vendor/a-vona/modules/a-permission/package.json +1 -1
  234. package/vona/src/suite-vendor/a-vona/modules/a-permission/src/bean/bean.permission.ts +109 -40
  235. package/vona/src/suite-vendor/a-vona/modules/a-permission/src/bean/summerCache.permission.ts +2 -2
  236. package/vona/src/suite-vendor/a-vona/modules/a-startup/package.json +1 -1
  237. package/vona/src/suite-vendor/a-vona/modules/a-startup/src/bean/cacheRedis.startupDebounce.ts +2 -2
  238. package/vona/src/suite-vendor/a-vona/modules/a-summer/cli/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
  239. package/vona/src/suite-vendor/a-vona/modules/a-summer/package.json +1 -1
  240. package/vona/src/suite-vendor/a-vona/modules/a-summer/src/.metadata/index.ts +1 -1
  241. package/vona/src/suite-vendor/a-vona/modules/a-summer/src/bean/bean.summer.ts +3 -3
  242. package/vona/src/suite-vendor/a-vona/modules/a-summer/src/service/localMem_.ts +3 -3
  243. package/vona/src/suite-vendor/a-vona/modules/a-summer/src/service/localRedis_.ts +3 -3
  244. package/vona/src/suite-vendor/a-vona/modules/a-summer/src/{bean/bean.summerCacheBase.ts → service/summerCacheBase_.ts} +3 -3
  245. package/vona/src/suite-vendor/a-vona/modules/a-swagger/package.json +1 -1
  246. package/vona/src/suite-vendor/a-vona/modules/a-swagger/src/bean/summerCache.rapidoc.ts +2 -2
  247. package/vona/src/suite-vendor/a-vona/modules/a-swagger/src/bean/summerCache.swagger.ts +2 -2
  248. package/vona/src/suite-vendor/a-vona/modules/a-user/package.json +1 -1
  249. package/vona/src/suite-vendor/a-vona/modules/a-user/src/bean/cacheRedis.authToken.ts +2 -2
  250. package/vona/src/suite-vendor/a-vona/modules/a-worker/package.json +1 -1
  251. package/vona/src/suite-vendor/a-vona/modules/a-worker/src/bean/cacheRedis.workerAlive.ts +2 -2
  252. package/vona/src/suite-vendor/a-vona/package.json +1 -1
  253. package/zova/README.md +4 -4
  254. package/zova/README.zh-CN.md +4 -4
  255. package/zova/packages-zova/zova/package.json +2 -2
  256. package/zova/src/suite/a-demo/modules/demo-basic/src/page/toolTwo/controller.tsx +0 -2
  257. package/zova/src/suite/a-home/modules/home-base/src/config/locale/en-us.ts +1 -0
  258. package/zova/src/suite/a-home/modules/home-base/src/config/locale/zh-cn.ts +1 -0
  259. package/zova/src/suite/a-home/modules/home-base/src/page/errorNotFound/controller.tsx +8 -2
  260. package/zova/src/suite/a-home/modules/home-layoutweb/src/component/layoutWeb/controller.tsx +1 -1
  261. package/zova/src/suite/a-home/modules/home-layoutweb/src/component/layoutWeb/render.header.tsx +1 -1
  262. package/zova/src/suite/a-home/modules/home-layoutweb/src/component/layoutWeb/render.locale.tsx +2 -5
  263. package/zova/src/suite/a-home/modules/home-layoutweb/src/component/layoutWeb/render.tabs.tsx +1 -4
  264. package/zova/src/suite-vendor/a-zova/modules/a-router/package.json +1 -1
  265. package/zova/src/suite-vendor/a-zova/modules/a-router/src/bean/sys.router.ts +28 -6
  266. package/zova/src/suite-vendor/a-zova/modules/a-router/src/monkeySys.ts +15 -3
  267. package/zova/src/suite-vendor/a-zova/modules/a-router/src/types/router.ts +1 -0
  268. package/zova/src/suite-vendor/a-zova/modules/a-routertabs/package.json +1 -1
  269. package/zova/src/suite-vendor/a-zova/modules/a-routertabs/src/model/tabs.ts +4 -0
  270. package/zova/src/suite-vendor/a-zova/package.json +3 -3
  271. /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_crud.ts +0 -0
  272. /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_crud_inner.ts +0 -0
  273. /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_crud_table.ts +0 -0
  274. /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_knex.ts +0 -0
  275. /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_utils.ts +0 -0
  276. /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_view.ts +0 -0
@@ -0,0 +1,162 @@
1
+ # Captcha Guide
2
+
3
+ ## Why captcha matters in Vona
4
+
5
+ Vona treats captcha as a reusable framework capability rather than a one-off image challenge.
6
+
7
+ That matters because different business flows may need different captcha types, different verification strategies, and different frontend/backend interaction patterns.
8
+
9
+ ## Core captcha model
10
+
11
+ The `a-captcha` module provides a general captcha system built around two concepts:
12
+
13
+ - **captcha provider**
14
+ - **captcha scene**
15
+
16
+ ### Provider
17
+
18
+ A provider implements a captcha mechanism, such as image-text captcha or another verification style.
19
+
20
+ ### Scene
21
+
22
+ A scene chooses how captcha should be used in a specific business context.
23
+
24
+ A scene can:
25
+
26
+ - select one provider
27
+ - rotate across multiple providers
28
+ - vary provider choice by user state or other business context
29
+
30
+ ## `bean.captcha`
31
+
32
+ Vona exposes a global bean `bean.captcha` so backend code can work with captcha through one unified entrypoint.
33
+
34
+ Representative generation workflow:
35
+
36
+ ```bash
37
+ npm run vona :create:bean captchaProvider imageText -- --module=captcha-simple
38
+ npm run vona :create:bean captchaScene simple -- --module=captcha-simple
39
+ ```
40
+
41
+ The main operations are:
42
+
43
+ - `create`
44
+ - `refresh`
45
+ - `verify`
46
+ - `verifyImmediate`
47
+
48
+ ### Create captcha
49
+
50
+ ```typescript
51
+ const captcha = await this.bean.captcha.create('captcha-simple:simple');
52
+ ```
53
+
54
+ ### Refresh captcha
55
+
56
+ ```typescript
57
+ const captchaNew = await this.bean.captcha.refresh(captchaId, 'captcha-simple:simple');
58
+ ```
59
+
60
+ ### Verify captcha
61
+
62
+ ```typescript
63
+ const passed = await this.bean.captcha.verify(captchaId, '1234', 'captcha-simple:simple');
64
+ ```
65
+
66
+ ### Immediate verification
67
+
68
+ ```typescript
69
+ const tokenOrFalse = await this.bean.captcha.verifyImmediate(captchaId, '1234');
70
+ ```
71
+
72
+ Immediate verification can return a secondary token that must still be verified again on form submission.
73
+
74
+ ## Provider model
75
+
76
+ A provider defines:
77
+
78
+ - token type
79
+ - payload type
80
+ - creation logic
81
+ - verification logic
82
+ - provider-specific options
83
+
84
+ A representative provider can implement image-text captcha with fields such as:
85
+
86
+ - `type`
87
+ - `fontPath`
88
+ - `opts`
89
+
90
+ That makes captcha providers extensible rather than hardcoded to one built-in shape.
91
+
92
+ The image-text example is a good mental model: provider code decides how to create and verify one captcha mechanism, while scene code decides when and why that mechanism should be chosen.
93
+
94
+ ## Scene model
95
+
96
+ A scene defines:
97
+
98
+ - which providers are available
99
+ - how one provider is resolved for the current request
100
+ - how provider-level options can be configured or overridden
101
+
102
+ That means business policy can be expressed at the scene layer while implementation details remain in the provider layer.
103
+
104
+ A representative scene can choose one provider statically, rotate among several providers, or vary difficulty and provider options by request context or user state.
105
+
106
+ ## Captcha verify interceptor
107
+
108
+ Vona also provides a local interceptor for captcha verification:
109
+
110
+ ```typescript
111
+ @Core.captchaVerify({ scene: 'captcha-simple:simple' })
112
+ ```
113
+
114
+ This interceptor supports:
115
+
116
+ - normal form verification
117
+ - secondary verification after `verifyImmediate`
118
+
119
+ This is the most important request-path integration point for captcha in ordinary controller code.
120
+
121
+ ## Built-in captcha API
122
+
123
+ The `a-captcha` module exposes out-of-the-box captcha APIs for:
124
+
125
+ - `create`
126
+ - `refresh`
127
+ - `verifyImmediate`
128
+
129
+ The direct `verify` path is usually consumed through the interceptor-oriented request flow.
130
+
131
+ ## Configuration
132
+
133
+ Captcha behavior can be configured through app config, including:
134
+
135
+ - whether to expose the token for debugging
136
+ - captcha token TTL
137
+ - secondary-token TTL
138
+ - provider-specific options
139
+ - scene-specific provider setup
140
+
141
+ A useful separation rule is:
142
+
143
+ - module config for broad captcha defaults such as `showToken`
144
+ - `config.onions.captchaProvider` for provider-level TTL and option tuning
145
+ - `config.onions.captchaScene` for scene-level provider selection and overrides
146
+
147
+ ## Relationship to auth flows
148
+
149
+ Captcha is often used in login, registration, or other user-facing flows, but it should remain a separate framework concern.
150
+
151
+ That makes it easier to reuse the same captcha capability across different account-related APIs.
152
+
153
+ ## Implementation checks for captcha-sensitive changes
154
+
155
+ When editing captcha-sensitive flows, ask:
156
+
157
+ 1. is the right layer the provider, the scene, or the request interceptor?
158
+ 2. does the flow need immediate verification, form verification, or both?
159
+ 3. should the captcha policy vary by business scenario?
160
+ 4. is there already an existing scene/provider combination that should be reused?
161
+
162
+ That helps AI keep captcha behavior aligned with Vona’s reusable verification model.
@@ -0,0 +1,173 @@
1
+ # Backend CLI
2
+
3
+ This guide explains how to use the Vona CLI in the Cabloy monorepo.
4
+
5
+ ## Why the CLI matters
6
+
7
+ Vona provides a large number of CLI commands for generating code skeletons and running backend workflows.
8
+
9
+ For implementation work, the CLI is especially important because it encodes framework conventions directly. If a command already exists, use it before writing backend scaffolding manually.
10
+
11
+ ## Entry from repo root
12
+
13
+ The current monorepo entrypoint is defined at the repo root:
14
+
15
+ ```bash
16
+ npm run vona :
17
+ ```
18
+
19
+ That wrapper points to the Vona CLI under `vona/packages-cli/` while preserving the monorepo project path.
20
+
21
+ ## Command discovery pattern
22
+
23
+ Vona commands follow a consistent discovery model.
24
+
25
+ ### 1. List all command groups and commands
26
+
27
+ ```bash
28
+ npm run vona :
29
+ ```
30
+
31
+ ### 2. List commands for a specific group
32
+
33
+ ```bash
34
+ npm run vona :create
35
+ ```
36
+
37
+ ### 3. Inspect help for one command
38
+
39
+ ```bash
40
+ npm run vona :create:bean --help
41
+ ```
42
+
43
+ This discovery pattern should be the default contributor workflow before inventing manual scaffolding steps.
44
+
45
+ ## High-value command families
46
+
47
+ From the current source tree, the most useful Vona command families for day-to-day development are:
48
+
49
+ - `bin:*`
50
+ - `create:*`
51
+ - `init:*`
52
+ - `tools:*`
53
+
54
+ Typical use cases include:
55
+
56
+ - scaffold suites, modules, beans, and tests
57
+ - initialize config, locale, constants, assets, types, and related module-scope resources
58
+ - generate CRUD-oriented resources
59
+ - refresh metadata and dependency-related output
60
+ - run build, dev, test, typecheck, playground, and database reset flows
61
+
62
+ ## Generator-first workflow
63
+
64
+ A practical backend workflow is:
65
+
66
+ 1. inspect the command family
67
+ 2. run the generator or initializer
68
+ 3. inspect the generated suite/module/bean structure
69
+ 4. only then add the minimal manual logic the task actually needs
70
+
71
+ This matters because backend modularization, naming, and bean scenes are part of the framework architecture, not only coding style.
72
+
73
+ ## Representative generation examples
74
+
75
+ ### Create a suite
76
+
77
+ ```bash
78
+ npm run vona :create:suite suiteName
79
+ ```
80
+
81
+ ### Create a module
82
+
83
+ ```bash
84
+ npm run vona :create:module moduleName -- [--suite=]
85
+ ```
86
+
87
+ ### Create a service bean
88
+
89
+ ```bash
90
+ npm run vona :create:bean service student -- --module=demo-student
91
+ ```
92
+
93
+ ### Create a model bean
94
+
95
+ ```bash
96
+ npm run vona :create:bean model student -- --module=demo-student
97
+ ```
98
+
99
+ ### Create an entity bean
100
+
101
+ ```bash
102
+ npm run vona :create:bean entity student -- --module=demo-student
103
+ ```
104
+
105
+ ### Create a DTO bean
106
+
107
+ ```bash
108
+ npm run vona :create:bean dto studentCreate -- --module=demo-student
109
+ ```
110
+
111
+ ### Create a startup bean
112
+
113
+ ```bash
114
+ npm run vona :create:bean startup log -- --module=demo-student
115
+ ```
116
+
117
+ These examples show that the CLI is tightly connected to module boundaries and bean scenes such as service, model, entity, DTO, and startup.
118
+
119
+ A practical bean-scene reading is:
120
+
121
+ - `service`, `model`, `entity`, `dto`, and `startup` are representative bean scenes
122
+ - `:create:bean sceneName beanName -- --module=...` uses `sceneName` as the operational family slot inside the bean identifier
123
+ - this is why generated bean names later appear in forms such as `module.scene.bean`
124
+
125
+ ## Initializer-family examples
126
+
127
+ Not every backend resource is created through bean scenes.
128
+
129
+ Representative initializer commands include:
130
+
131
+ ```bash
132
+ npm run vona :init:constant demo-student
133
+ npm run vona :init:types demo-student
134
+ npm run vona :init:asset static -- --module=demo-student
135
+ ```
136
+
137
+ A practical distinction is:
138
+
139
+ - `:create:bean` creates scene-based backend beans
140
+ - `:init:*` commands create module-scope resources such as constants, typings, or asset-resource structure
141
+
142
+ ## Relationship to modules, suites, and package metadata
143
+
144
+ The backend CLI is not only a code generator. It is also one of the clearest expressions of Vona’s modular architecture.
145
+
146
+ CLI generation decisions affect:
147
+
148
+ - where files live
149
+ - which suite or module owns the resource
150
+ - how bean identifiers and onion names are derived
151
+ - how package metadata and dependencies should be interpreted later
152
+
153
+ For the current repo structure, also see [Package Map](/reference/package-map).
154
+
155
+ ## CLI vs scripts
156
+
157
+ A practical distinction is:
158
+
159
+ - use [Backend Scripts](/backend/scripts) for root dev/build/start/test workflows
160
+ - use the Vona CLI when you are discovering commands, generating backend resources, or running backend-specific tool flows
161
+
162
+ This keeps contributor workflows clear instead of mixing runtime scripts with generator commands.
163
+
164
+ ## Generator-first workflow checklist
165
+
166
+ When creating backend code:
167
+
168
+ 1. inspect `npm run vona :` or the relevant command family
169
+ 2. prefer the matching generator or initializer
170
+ 3. inspect the generated output
171
+ 4. only then make minimal follow-up edits
172
+
173
+ This reduces unnecessary manual scaffolding and keeps the implementation aligned with Vona conventions.
@@ -0,0 +1,249 @@
1
+ # Config Guide
2
+
3
+ ## Why config matters as a backend scope resource
4
+
5
+ In Vona, configuration is not only a global backend settings concern. It is also a module-scoped resource that can be defined close to a module and then accessed through scope.
6
+
7
+ That matters because backend capabilities often need both:
8
+
9
+ - reusable module-local defaults
10
+ - project-level overrides for the current application
11
+ - runtime-sensitive configuration chosen by mode, flavor, and instance
12
+
13
+ ## Initialize the config skeleton
14
+
15
+ Example: initialize config for module `demo-student`.
16
+
17
+ ```bash
18
+ npm run vona :init:config demo-student
19
+ ```
20
+
21
+ This gives the module its own config file under the module’s config area.
22
+
23
+ ## Define module config
24
+
25
+ Representative pattern:
26
+
27
+ ```typescript
28
+ export function config(_app: VonaApplication) {
29
+ return {
30
+ title: 'Hello World',
31
+ };
32
+ }
33
+ ```
34
+
35
+ The important point is that module config fields are declared directly, and the framework extracts the config typing from that shape.
36
+
37
+ ## Use config within the current module
38
+
39
+ The current module’s config can be accessed through scope.
40
+
41
+ Representative pattern:
42
+
43
+ ```typescript
44
+ console.log(this.scope.config.title);
45
+ ```
46
+
47
+ This keeps config access aligned with the same module-resource model used for service, model, entity, locale, and error.
48
+
49
+ ## Use config across modules
50
+
51
+ Cross-module config access uses the cross-module scope surface.
52
+
53
+ Representative pattern:
54
+
55
+ ```typescript
56
+ console.log(this.$scope.demoStudent.config.title);
57
+ ```
58
+
59
+ A practical distinction is:
60
+
61
+ - `this.scope.config` for the current module
62
+ - `this.$scope.<module>.config` for another module
63
+
64
+ ## Project config is layered, not single-file
65
+
66
+ At the application level, Vona config is assembled from a cascading set of config files.
67
+
68
+ In the current repo, representative project config files include:
69
+
70
+ - `config.ts`
71
+ - `config.dev.ts`
72
+ - `config.dev.play.ts`
73
+ - `config.test.ts`
74
+ - `config.prod.ts`
75
+ - `config.dev.local.ts`
76
+ - `config.test.local.ts`
77
+ - `config.prod.local.ts`
78
+ - `config.local.tsx`
79
+
80
+ That means effective config is built by merging general config with more specific runtime/flavor/local layers.
81
+
82
+ A practical mental model is:
83
+
84
+ 1. start from the shared base config
85
+ 2. merge mode-specific config
86
+ 3. merge flavor-specific config when present
87
+ 4. merge local override config last
88
+
89
+ This is one of the main reasons backend config should be understood together with [Runtime and Flavors](/backend/runtime-and-flavors).
90
+
91
+ ## Async config loading is normal
92
+
93
+ In the current Vona startup flow, project config items are loaded asynchronously and then deep-merged.
94
+
95
+ That means async config is a normal part of the framework model rather than a special workaround.
96
+
97
+ A practical implication is:
98
+
99
+ - config can safely derive values from runtime information, filesystem state, or other async setup needs during config assembly
100
+
101
+ ## How runtime env and flavor affect config
102
+
103
+ Runtime metadata does not only choose env files. It also participates directly in config assembly.
104
+
105
+ In the current app config, representative fields derived from env/meta include:
106
+
107
+ - `config.meta.mode`
108
+ - `config.meta.flavor`
109
+ - `config.server.workers`
110
+ - `config.server.listen.*`
111
+ - `config.server.serve.*`
112
+ - `config.database.defaultClient`
113
+ - logger, Redis, and mail client settings
114
+
115
+ That means config selection and runtime selection are part of one continuous flow rather than two unrelated systems.
116
+
117
+ ## Override module config at the project level
118
+
119
+ Project-level config can override module-level defaults.
120
+
121
+ Representative pattern:
122
+
123
+ ```typescript
124
+ config.modules = {
125
+ 'demo-student': {
126
+ title: 'Hello World!!',
127
+ },
128
+ };
129
+ ```
130
+
131
+ This is the key ownership rule:
132
+
133
+ - module config defines reusable defaults close to the module
134
+ - project config overrides those defaults for the current backend application
135
+
136
+ ## App config vs instance-merged config
137
+
138
+ One important Vona distinction is:
139
+
140
+ - `this.app.config` is the global application config
141
+ - `this.ctx.config` is the effective config for the current instance-aware request context
142
+
143
+ That matters in multi-instance or multi-tenant scenarios.
144
+
145
+ In the current runtime, instance config is assembled by merging:
146
+
147
+ 1. the global app config
148
+ 2. any static config under `config.instance.instances[instanceName].config`
149
+ 3. any stored instance config data from the instance record
150
+
151
+ A practical interpretation is:
152
+
153
+ - use `app.config` when you need the backend-wide config baseline
154
+ - use `ctx.config` when behavior should respect the active instance
155
+
156
+ ## Config access surfaces at a glance
157
+
158
+ | Access surface | Typical meaning |
159
+ | ----------------------------- | ------------------------------------------------------ |
160
+ | `app.config` | app-wide baseline config |
161
+ | `ctx.config` | effective config for the active instance-aware context |
162
+ | `this.scope.config` | current-module config resource |
163
+ | `this.$scope.<module>.config` | another module’s config resource |
164
+
165
+ A practical rule is:
166
+
167
+ - use `scope` access when the task is about module-owned config
168
+ - use `app.config` when the task is about backend-wide baseline behavior
169
+ - use `ctx.config` when request-scoped behavior must respect the active instance
170
+
171
+ ## Effective instance-aware config merge order
172
+
173
+ This page owns the config-layering view. For env-file precedence and mode/flavor selection, see [Runtime and Flavors](/backend/runtime-and-flavors). For the fuller request-context view of instance resolution and instance-aware config behavior, see [Multi-Instance and Instance Resolution](/backend/multi-instance-and-instance-resolution).
174
+
175
+ In the current runtime, the effective instance-aware config can be understood at a high level like this:
176
+
177
+ 1. start from the app-wide baseline config
178
+ 2. merge static config from `config.instance.instances[instanceName].config`
179
+ 3. merge any persisted config stored on the instance record
180
+ 4. expose the merged result as `ctx.config`
181
+
182
+ That means `ctx.config` is not just a pointer to `app.config`. It is the instance-aware effective config surface.
183
+
184
+ ## Instance config shape
185
+
186
+ Representative instance config shape in the current repo looks like:
187
+
188
+ ```typescript
189
+ config.instance = {
190
+ getInstanceName: undefined,
191
+ queryField: $protocolKey('x-vona-instance-name'),
192
+ headerField: $protocolKey('x-vona-instance-name'),
193
+ instances: {
194
+ '': { password: '', title: '' },
195
+ 'isolateTest': {
196
+ password: '',
197
+ title: '',
198
+ id: 1000,
199
+ isolate: true,
200
+ isolateClient: 'isolateTest',
201
+ },
202
+ },
203
+ };
204
+ ```
205
+
206
+ The key point is that instance configuration is part of the config system itself, not an external plugin layer.
207
+
208
+ ## Config ownership layers
209
+
210
+ A useful backend mental model is:
211
+
212
+ - env files provide deployable runtime values
213
+ - project config translates and organizes those values into backend config
214
+ - module config provides reusable module-local defaults
215
+ - `config.modules[...]` overrides module-local defaults for the current app
216
+ - `config.instance.instances[...]` adds static per-instance behavior
217
+ - `ctx.config` is the effective instance-aware result seen by request-scoped code
218
+
219
+ This layered model is the safest way to reason about config changes in Cabloy.
220
+
221
+ ## Relationship to startup, model, and datasource behavior
222
+
223
+ Config does not live in isolation. In many backend tasks, config interacts directly with:
224
+
225
+ - runtime environment and flavor
226
+ - startup lifecycle and startup bean overrides
227
+ - model options
228
+ - datasource defaults and isolated-instance routing
229
+
230
+ Read this guide together with:
231
+
232
+ - [Backend Essentials](/backend/backend-essentials)
233
+ - [Backend Foundation](/backend/foundation)
234
+ - [Runtime and Flavors](/backend/runtime-and-flavors)
235
+ - [Backend Startup Guide](/backend/startup-guide)
236
+ - [Model Guide](/backend/model-guide)
237
+ - [Multi-Database and Datasource Guide](/backend/multi-database-datasource)
238
+
239
+ ## Implementation checks for backend configuration changes
240
+
241
+ When editing backend configuration behavior, ask:
242
+
243
+ 1. should this value live in env files, project config, or module config?
244
+ 2. is the value consumed through current-module scope, cross-module scope, `app.config`, or `ctx.config`?
245
+ 3. does the config depend on runtime mode, flavor, or instance?
246
+ 4. is there already a module config skeleton or project config layer that should be extended instead of inventing a new pattern?
247
+ 5. will a config change alter startup, datasource, or model behavior indirectly?
248
+
249
+ That helps AI keep backend configuration aligned with Vona’s module-resource model and current runtime layering.