@lovrabet/rabetbase-cli 2.5.3-beta.1 → 2.5.3-beta.3

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 (419) hide show
  1. package/lib/api/api-doc.js +1 -1
  2. package/lib/api/api-group.d.ts +22 -0
  3. package/lib/api/api-group.js +1 -0
  4. package/lib/api/fetch-model-list.js +1 -1
  5. package/lib/api/generate-api-file.d.ts +18 -2
  6. package/lib/api/generate-api-file.js +1 -1
  7. package/lib/api/generate-sdk-config-file.js +1 -1
  8. package/lib/api/legacy-api-file.d.ts +11 -0
  9. package/lib/api/legacy-api-file.js +1 -0
  10. package/lib/api/model-registry-file.d.ts +36 -0
  11. package/lib/api/model-registry-file.js +1 -0
  12. package/lib/api/model-registry-scaffold.d.ts +7 -0
  13. package/lib/api/model-registry-scaffold.js +1 -0
  14. package/lib/api/model-source.d.ts +6 -0
  15. package/lib/api/model-source.js +1 -0
  16. package/lib/auth/auth-server-ui.js +1 -1
  17. package/lib/auth/auth-server.js +1 -1
  18. package/lib/auth/constant.js +1 -1
  19. package/lib/auth/get-cookie.js +1 -1
  20. package/lib/auth/get-session-user.js +1 -1
  21. package/lib/auth/is-session-valid.js +1 -1
  22. package/lib/auth/login-success-html.js +1 -1
  23. package/lib/auth/logout.js +1 -1
  24. package/lib/cli-flags.js +1 -1
  25. package/lib/cli.js +1 -1
  26. package/lib/commands/api/generate.js +1 -1
  27. package/lib/commands/api/index.js +1 -1
  28. package/lib/commands/api/list.js +1 -1
  29. package/lib/commands/api/pull.js +1 -1
  30. package/lib/commands/api/shared.js +1 -1
  31. package/lib/commands/app/index.js +1 -1
  32. package/lib/commands/app/list.js +1 -1
  33. package/lib/commands/app/members-list.js +1 -1
  34. package/lib/commands/app/remote-directory.js +1 -1
  35. package/lib/commands/app/shared.js +1 -1
  36. package/lib/commands/app-config/delete.js +1 -1
  37. package/lib/commands/app-config/get.js +1 -1
  38. package/lib/commands/app-config/index.js +1 -1
  39. package/lib/commands/app-config/list.js +1 -1
  40. package/lib/commands/app-config/set.js +1 -1
  41. package/lib/commands/app-config/shared.js +1 -1
  42. package/lib/commands/auth/index.js +1 -1
  43. package/lib/commands/bff/create.js +1 -1
  44. package/lib/commands/bff/delete.js +1 -1
  45. package/lib/commands/bff/detail.js +1 -1
  46. package/lib/commands/bff/index.js +1 -1
  47. package/lib/commands/bff/list.js +1 -1
  48. package/lib/commands/bff/logs.d.ts +7 -0
  49. package/lib/commands/bff/logs.js +1 -0
  50. package/lib/commands/bff/pull.js +1 -1
  51. package/lib/commands/bff/push.js +1 -1
  52. package/lib/commands/bff/status.js +1 -1
  53. package/lib/commands/cli-skill/index.js +1 -1
  54. package/lib/commands/cli-update.js +1 -1
  55. package/lib/commands/codegen/index.js +1 -1
  56. package/lib/commands/codegen/sdk.js +1 -1
  57. package/lib/commands/codegen/sql.js +1 -1
  58. package/lib/commands/common/app-registry.js +1 -1
  59. package/lib/commands/common/app-selector.js +1 -1
  60. package/lib/commands/common/async-task.js +1 -1
  61. package/lib/commands/common/dry-run.js +1 -1
  62. package/lib/commands/common/flags.d.ts +7 -0
  63. package/lib/commands/common/flags.js +1 -1
  64. package/lib/commands/common/local-file.js +1 -1
  65. package/lib/commands/common/validate.js +1 -1
  66. package/lib/commands/config/delete.js +1 -1
  67. package/lib/commands/config/get.js +1 -1
  68. package/lib/commands/config/index.js +1 -1
  69. package/lib/commands/config/init.js +1 -1
  70. package/lib/commands/config/list.js +1 -1
  71. package/lib/commands/config/set.js +1 -1
  72. package/lib/commands/config/shared.js +1 -1
  73. package/lib/commands/dataset/batch-design.d.ts +21 -0
  74. package/lib/commands/dataset/batch-design.js +1 -0
  75. package/lib/commands/dataset/business-group-update.js +1 -1
  76. package/lib/commands/dataset/business-groups.js +1 -1
  77. package/lib/commands/dataset/capability.js +1 -1
  78. package/lib/commands/dataset/cross-relation-create.d.ts +2 -0
  79. package/lib/commands/dataset/cross-relation-create.js +1 -0
  80. package/lib/commands/dataset/cross-relation-delete.d.ts +2 -0
  81. package/lib/commands/dataset/cross-relation-delete.js +1 -0
  82. package/lib/commands/dataset/cross-relation-list.d.ts +2 -0
  83. package/lib/commands/dataset/cross-relation-list.js +1 -0
  84. package/lib/commands/dataset/cross-relation-shared.d.ts +190 -0
  85. package/lib/commands/dataset/cross-relation-shared.js +1 -0
  86. package/lib/commands/dataset/cross-relation-update.d.ts +2 -0
  87. package/lib/commands/dataset/cross-relation-update.js +1 -0
  88. package/lib/commands/dataset/delete.js +1 -1
  89. package/lib/commands/dataset/detail.js +1 -1
  90. package/lib/commands/dataset/extend-update.js +1 -1
  91. package/lib/commands/dataset/field-restore.js +1 -1
  92. package/lib/commands/dataset/field-update.js +1 -1
  93. package/lib/commands/dataset/generate.js +1 -1
  94. package/lib/commands/dataset/index.js +1 -1
  95. package/lib/commands/dataset/list.js +1 -1
  96. package/lib/commands/dataset/operations.js +1 -1
  97. package/lib/commands/dataset/relation-audit.js +1 -1
  98. package/lib/commands/dataset/relation-create.js +1 -1
  99. package/lib/commands/dataset/relation-delete.js +1 -1
  100. package/lib/commands/dataset/relation-shared.js +1 -1
  101. package/lib/commands/dataset/relation-update.js +1 -1
  102. package/lib/commands/dataset/relations.js +1 -1
  103. package/lib/commands/dataset/rename.js +1 -1
  104. package/lib/commands/dataset/restore.js +1 -1
  105. package/lib/commands/dataset/user-deleted-field-list.js +1 -1
  106. package/lib/commands/db/analysis-batching.js +1 -1
  107. package/lib/commands/db/analyze-batch-plan.js +1 -1
  108. package/lib/commands/db/analyze-cancel.js +1 -1
  109. package/lib/commands/db/analyze-start.js +1 -1
  110. package/lib/commands/db/analyze-status.js +1 -1
  111. package/lib/commands/db/create.js +1 -1
  112. package/lib/commands/db/delete.js +1 -1
  113. package/lib/commands/db/detail.js +1 -1
  114. package/lib/commands/db/diff-refresh-start.js +1 -1
  115. package/lib/commands/db/diff-refresh-status.js +1 -1
  116. package/lib/commands/db/diff.js +1 -1
  117. package/lib/commands/db/index.js +1 -1
  118. package/lib/commands/db/list.js +1 -1
  119. package/lib/commands/db/shared.js +1 -1
  120. package/lib/commands/db/table-diff-shared.js +1 -1
  121. package/lib/commands/db/tables.js +1 -1
  122. package/lib/commands/db/test.js +1 -1
  123. package/lib/commands/db/update.js +1 -1
  124. package/lib/commands/deployment/index.js +1 -1
  125. package/lib/commands/deployment/sync-all.js +1 -1
  126. package/lib/commands/deployment/sync-jobs.js +1 -1
  127. package/lib/commands/deployment/sync-status.js +1 -1
  128. package/lib/commands/doctor.js +1 -1
  129. package/lib/commands/file/index.js +1 -1
  130. package/lib/commands/flow/create.d.ts +2 -0
  131. package/lib/commands/flow/create.js +1 -0
  132. package/lib/commands/flow/detail.d.ts +2 -0
  133. package/lib/commands/flow/detail.js +1 -0
  134. package/lib/commands/flow/index.d.ts +3 -0
  135. package/lib/commands/flow/index.js +1 -0
  136. package/lib/commands/flow/list.d.ts +2 -0
  137. package/lib/commands/flow/list.js +1 -0
  138. package/lib/commands/flow/publish.d.ts +2 -0
  139. package/lib/commands/flow/publish.js +1 -0
  140. package/lib/commands/flow/runtime-resources-shared.d.ts +40 -0
  141. package/lib/commands/flow/runtime-resources-shared.js +1 -0
  142. package/lib/commands/flow/runtime-role-list.d.ts +2 -0
  143. package/lib/commands/flow/runtime-role-list.js +1 -0
  144. package/lib/commands/flow/runtime-role-user-list.d.ts +2 -0
  145. package/lib/commands/flow/runtime-role-user-list.js +1 -0
  146. package/lib/commands/flow/runtime-user-search.d.ts +2 -0
  147. package/lib/commands/flow/runtime-user-search.js +1 -0
  148. package/lib/commands/flow/shared.d.ts +41 -0
  149. package/lib/commands/flow/shared.js +1 -0
  150. package/lib/commands/flow/update.d.ts +2 -0
  151. package/lib/commands/flow/update.js +1 -0
  152. package/lib/commands/flow/validate.d.ts +3 -0
  153. package/lib/commands/flow/validate.js +1 -0
  154. package/lib/commands/instant-api-policy/current.js +1 -1
  155. package/lib/commands/instant-api-policy/index.js +1 -1
  156. package/lib/commands/instant-api-policy/init.js +1 -1
  157. package/lib/commands/instant-api-policy/publish.js +1 -1
  158. package/lib/commands/instant-api-policy/pull.js +1 -1
  159. package/lib/commands/instant-api-policy/revision.js +1 -1
  160. package/lib/commands/instant-api-policy/revisions.js +1 -1
  161. package/lib/commands/instant-api-policy/rollback.js +1 -1
  162. package/lib/commands/instant-api-policy/shared.js +1 -1
  163. package/lib/commands/instant-api-policy/validate.js +1 -1
  164. package/lib/commands/issue/index.js +1 -1
  165. package/lib/commands/issue/nudge.js +1 -1
  166. package/lib/commands/issue/report.js +1 -1
  167. package/lib/commands/issue/shared.js +1 -1
  168. package/lib/commands/kb/create.js +1 -1
  169. package/lib/commands/kb/delete.js +1 -1
  170. package/lib/commands/kb/detail.js +1 -1
  171. package/lib/commands/kb/index.js +1 -1
  172. package/lib/commands/kb/list.js +1 -1
  173. package/lib/commands/kb/search.js +1 -1
  174. package/lib/commands/kb/shared.js +1 -1
  175. package/lib/commands/kb/update.js +1 -1
  176. package/lib/commands/logs/index.js +1 -1
  177. package/lib/commands/menu/asset-update.js +1 -1
  178. package/lib/commands/menu/delete.js +1 -1
  179. package/lib/commands/menu/external-link-create.js +1 -1
  180. package/lib/commands/menu/external-link-update.js +1 -1
  181. package/lib/commands/menu/group-create.js +1 -1
  182. package/lib/commands/menu/group-update.js +1 -1
  183. package/lib/commands/menu/index.js +1 -1
  184. package/lib/commands/menu/list.js +1 -1
  185. package/lib/commands/menu/move.js +1 -1
  186. package/lib/commands/menu/regroup-start.js +1 -1
  187. package/lib/commands/menu/rename.js +1 -1
  188. package/lib/commands/menu/shared/compare-table.js +1 -1
  189. package/lib/commands/menu/shared/delete-plan.js +1 -1
  190. package/lib/commands/menu/shared/facts.js +1 -1
  191. package/lib/commands/menu/shared/index.js +1 -1
  192. package/lib/commands/menu/shared/inquirer.js +1 -1
  193. package/lib/commands/menu/shared/local-pages.js +1 -1
  194. package/lib/commands/menu/shared/logic.js +1 -1
  195. package/lib/commands/menu/shared/mutations.js +1 -1
  196. package/lib/commands/menu/shared/service.js +1 -1
  197. package/lib/commands/menu/shared/sync-core.js +1 -1
  198. package/lib/commands/menu/shared/update-core.js +1 -1
  199. package/lib/commands/menu/shared/valid-url.js +1 -1
  200. package/lib/commands/menu/sync.js +1 -1
  201. package/lib/commands/menu/visibility-update.js +1 -1
  202. package/lib/commands/notification/config-create.js +1 -1
  203. package/lib/commands/notification/config-delete.js +1 -1
  204. package/lib/commands/notification/config-list.js +1 -1
  205. package/lib/commands/notification/config-update.js +1 -1
  206. package/lib/commands/notification/index.js +1 -1
  207. package/lib/commands/notification/shared.js +1 -1
  208. package/lib/commands/ocr/index.js +1 -1
  209. package/lib/commands/page/create.js +1 -1
  210. package/lib/commands/page/custom/detail.js +1 -1
  211. package/lib/commands/page/custom/list.js +1 -1
  212. package/lib/commands/page/custom/publish.js +1 -1
  213. package/lib/commands/page/custom/shared.js +1 -1
  214. package/lib/commands/page/custom/syntax.js +1 -1
  215. package/lib/commands/page/custom/update.js +1 -1
  216. package/lib/commands/page/data-list-status.js +1 -1
  217. package/lib/commands/page/generate-start.js +1 -1
  218. package/lib/commands/page/generate-status.js +1 -1
  219. package/lib/commands/page/index.js +1 -1
  220. package/lib/commands/page/pull.js +1 -1
  221. package/lib/commands/page/push.js +1 -1
  222. package/lib/commands/page/relation-audit.js +1 -1
  223. package/lib/commands/page/restore.js +1 -1
  224. package/lib/commands/page/shared.js +1 -1
  225. package/lib/commands/page/sync.js +1 -1
  226. package/lib/commands/project/api-architecture-upgrade.d.ts +28 -0
  227. package/lib/commands/project/api-architecture-upgrade.js +1 -0
  228. package/lib/commands/project/create/enhanced-guided-create.js +1 -1
  229. package/lib/commands/project/create/format-elapsed.js +1 -1
  230. package/lib/commands/project/create/main.js +1 -1
  231. package/lib/commands/project/create/materialize-project-template.js +1 -1
  232. package/lib/commands/project/create/project-name.js +1 -1
  233. package/lib/commands/project/create/project-template-archive.js +1 -1
  234. package/lib/commands/project/create/project-template-path.js +1 -1
  235. package/lib/commands/project/create/use-copy-project-template.js +1 -1
  236. package/lib/commands/project/create/use-format-code.js +1 -1
  237. package/lib/commands/project/create/use-install-dependencies.js +1 -1
  238. package/lib/commands/project/domain-routing-sync.js +1 -1
  239. package/lib/commands/project/index.js +1 -1
  240. package/lib/commands/project/upgrade.d.ts +30 -1
  241. package/lib/commands/project/upgrade.js +1 -1
  242. package/lib/commands/registry.js +1 -1
  243. package/lib/commands/role/delete.js +1 -1
  244. package/lib/commands/role/detail.js +1 -1
  245. package/lib/commands/role/index.js +1 -1
  246. package/lib/commands/role/list.js +1 -1
  247. package/lib/commands/role/shared.js +1 -1
  248. package/lib/commands/role/update.js +1 -1
  249. package/lib/commands/role/user-add.js +1 -1
  250. package/lib/commands/role/user-remove.js +1 -1
  251. package/lib/commands/role/user-resolve.js +1 -1
  252. package/lib/commands/rule/get.js +1 -1
  253. package/lib/commands/rule/index.js +1 -1
  254. package/lib/commands/rule/list.js +1 -1
  255. package/lib/commands/rule/set.js +1 -1
  256. package/lib/commands/rule/shared.js +1 -1
  257. package/lib/commands/run/index.js +1 -1
  258. package/lib/commands/schema.js +1 -1
  259. package/lib/commands/sql/create.js +1 -1
  260. package/lib/commands/sql/delete.js +1 -1
  261. package/lib/commands/sql/detail.js +1 -1
  262. package/lib/commands/sql/exec.js +1 -1
  263. package/lib/commands/sql/index.js +1 -1
  264. package/lib/commands/sql/list.js +1 -1
  265. package/lib/commands/sql/pull.js +1 -1
  266. package/lib/commands/sql/push.js +1 -1
  267. package/lib/commands/sql/shared.js +1 -1
  268. package/lib/commands/sql/status.js +1 -1
  269. package/lib/commands/sql/validate.js +1 -1
  270. package/lib/commands/task/index.js +1 -1
  271. package/lib/commands/task/status.js +1 -1
  272. package/lib/commands/tenant/index.js +1 -1
  273. package/lib/commands/tenant/members-list.js +1 -1
  274. package/lib/commands/tenant/shared.js +1 -1
  275. package/lib/commands/user-account/dingding-sandbox-bind.js +1 -1
  276. package/lib/commands/user-account/index.js +1 -1
  277. package/lib/commands/workspace/add.js +1 -1
  278. package/lib/commands/workspace/index.js +1 -1
  279. package/lib/commands/workspace/remove.js +1 -1
  280. package/lib/config/domain-config.js +1 -1
  281. package/lib/config/project-domain-routing.js +1 -1
  282. package/lib/config/region-config.js +1 -1
  283. package/lib/config/schema.js +1 -1
  284. package/lib/constant/cdn.js +1 -1
  285. package/lib/constant/cli.js +1 -1
  286. package/lib/constant/defaults.js +1 -1
  287. package/lib/constant/domain.js +1 -1
  288. package/lib/constant/env.js +1 -1
  289. package/lib/constant/output.js +1 -1
  290. package/lib/constant/paths.js +1 -1
  291. package/lib/constant/region.js +1 -1
  292. package/lib/constant/risk.js +1 -1
  293. package/lib/constant/routing-profile.js +1 -1
  294. package/lib/context/app-resolver.d.ts +2 -0
  295. package/lib/context/app-resolver.js +1 -1
  296. package/lib/context/auth-resolver.js +1 -1
  297. package/lib/context/config-loader.js +1 -1
  298. package/lib/context.d.ts +2 -1
  299. package/lib/context.js +1 -1
  300. package/lib/core/alias-resolver.d.ts +13 -17
  301. package/lib/core/alias-resolver.js +1 -1
  302. package/lib/core/api-client.d.ts +176 -1
  303. package/lib/core/api-client.js +1 -1
  304. package/lib/core/bff/config.js +1 -1
  305. package/lib/core/bff/file-system.js +1 -1
  306. package/lib/core/bff/hash.js +1 -1
  307. package/lib/core/bff/hook-directory.d.ts +55 -0
  308. package/lib/core/bff/hook-directory.js +1 -0
  309. package/lib/core/bff/lock.js +1 -1
  310. package/lib/core/bff/types.d.ts +15 -0
  311. package/lib/core/bff/utils.js +1 -1
  312. package/lib/core/cross-db-relation.d.ts +41 -0
  313. package/lib/core/cross-db-relation.js +1 -0
  314. package/lib/core/db-resolver.js +1 -1
  315. package/lib/core/flow-config.d.ts +628 -0
  316. package/lib/core/flow-config.js +1 -0
  317. package/lib/core/instant-api-policy/config.js +1 -1
  318. package/lib/core/kb-search-client.js +1 -1
  319. package/lib/core/page/file-system.js +1 -1
  320. package/lib/core/page/hash.js +1 -1
  321. package/lib/core/page/lock.js +1 -1
  322. package/lib/core/page/lr-smart-jsx.js +1 -1
  323. package/lib/core/sql-index-auditor.js +1 -1
  324. package/lib/core/sql-sync/config.js +1 -1
  325. package/lib/core/sql-sync/file-system.js +1 -1
  326. package/lib/core/sql-sync/hash.js +1 -1
  327. package/lib/core/sql-sync/lock.js +1 -1
  328. package/lib/core/sql-sync/utils.js +1 -1
  329. package/lib/core/sql-validator.js +1 -1
  330. package/lib/errors.js +1 -1
  331. package/lib/framework/build-all-flags.js +1 -1
  332. package/lib/framework/error-output.js +1 -1
  333. package/lib/framework/explicit-yes.js +1 -1
  334. package/lib/framework/flags.js +1 -1
  335. package/lib/framework/help.js +1 -1
  336. package/lib/framework/index.js +1 -1
  337. package/lib/framework/output.js +1 -1
  338. package/lib/framework/response.js +1 -1
  339. package/lib/framework/runner-alias.d.ts +1 -1
  340. package/lib/framework/runner-alias.js +1 -1
  341. package/lib/framework/runner.js +1 -1
  342. package/lib/framework/schema-export.js +1 -1
  343. package/lib/framework/supported-flags.js +1 -1
  344. package/lib/framework/types.js +1 -1
  345. package/lib/generated/build-info.d.ts +4 -4
  346. package/lib/generated/build-info.js +1 -1
  347. package/lib/generated/official-routing.js +1 -1
  348. package/lib/generated/routing-contract.js +1 -1
  349. package/lib/help.js +1 -1
  350. package/lib/postinstall.js +1 -1
  351. package/lib/runtime/confirmation.js +1 -1
  352. package/lib/runtime/event.js +1 -1
  353. package/lib/runtime/index.js +1 -1
  354. package/lib/runtime/queue.js +1 -1
  355. package/lib/runtime/resolve.js +1 -1
  356. package/lib/skills/builtin-skill.js +1 -1
  357. package/lib/skills/main.js +1 -1
  358. package/lib/skills/npx-skills-add.d.ts +0 -10
  359. package/lib/skills/npx-skills-add.js +1 -1
  360. package/lib/skills/skill-presence.js +1 -1
  361. package/lib/telemetry/cli-command-trace.js +1 -1
  362. package/lib/telemetry/cli-help-trace.js +1 -1
  363. package/lib/telemetry/ensure-cli-otel-config.js +1 -1
  364. package/lib/telemetry/register-otel-exit-shutdown.js +1 -1
  365. package/lib/telemetry/send-cli-trace-log.js +1 -1
  366. package/lib/telemetry/send-platform-issue-collect-log.js +1 -1
  367. package/lib/types/index.d.ts +11 -1
  368. package/lib/utils/ai_config.js +1 -1
  369. package/lib/utils/apply-jq-filter.js +1 -1
  370. package/lib/utils/cdn-config.js +1 -1
  371. package/lib/utils/check-sdk-version.js +1 -1
  372. package/lib/utils/cli-version-check.js +1 -1
  373. package/lib/utils/cli-version-policy.d.ts +12 -0
  374. package/lib/utils/cli-version-policy.js +1 -1
  375. package/lib/utils/config.js +1 -1
  376. package/lib/utils/entity-with-id.js +1 -1
  377. package/lib/utils/file-utils.js +1 -1
  378. package/lib/utils/guides-cdn.js +1 -1
  379. package/lib/utils/http-client.js +1 -1
  380. package/lib/utils/is-non-interactive.js +1 -1
  381. package/lib/utils/logger.js +1 -1
  382. package/lib/utils/params.js +1 -1
  383. package/lib/utils/platform.js +1 -1
  384. package/lib/utils/sleep.js +1 -1
  385. package/lib/utils/template-replacer.js +1 -1
  386. package/lib/utils/update-notice.js +1 -1
  387. package/lib/utils/version.js +1 -1
  388. package/lib/utils/with-active-cookie.js +1 -1
  389. package/lib/utils/write-cli-side-channel.js +1 -1
  390. package/package.json +4 -1
  391. package/skills/rabetbase/SKILL.md +31 -9
  392. package/skills/rabetbase/guides/approval-flow-development-workflow.md +137 -0
  393. package/skills/rabetbase/guides/backend-function.md +19 -9
  394. package/skills/rabetbase/guides/bff-creation-workflow.md +10 -1
  395. package/skills/rabetbase/guides/conflict-detection.md +2 -0
  396. package/skills/rabetbase/guides/sdk-client-generation.md +112 -60
  397. package/skills/rabetbase/guides/typescript-sdk.md +9 -0
  398. package/skills/rabetbase/knowledge/approval-flow/config-json-schema.md +290 -0
  399. package/skills/rabetbase/references/rabetbase-api-pull.md +30 -19
  400. package/skills/rabetbase/references/rabetbase-app-list.md +1 -1
  401. package/skills/rabetbase/references/rabetbase-bff-create.md +1 -1
  402. package/skills/rabetbase/references/rabetbase-bff-logs.md +47 -0
  403. package/skills/rabetbase/references/rabetbase-bff-pull.md +7 -3
  404. package/skills/rabetbase/references/rabetbase-bff-push.md +10 -2
  405. package/skills/rabetbase/references/rabetbase-config.md +2 -1
  406. package/skills/rabetbase/references/rabetbase-dataset-cross-relations.md +60 -0
  407. package/skills/rabetbase/references/rabetbase-dataset-generate.md +52 -2
  408. package/skills/rabetbase/references/rabetbase-flow-commands.md +86 -0
  409. package/skills/rabetbase/references/rabetbase-flow-resources.md +83 -0
  410. package/skills/rabetbase/references/rabetbase-flow-runtime-boundary.md +25 -0
  411. package/skills/rabetbase/references/rabetbase-instant-api-policy.md +103 -11
  412. package/skills/rabetbase/references/rabetbase-notification-config-list.md +17 -0
  413. package/skills/rabetbase/references/rabetbase-project-create.md +3 -3
  414. package/skills/rabetbase/references/rabetbase-project-upgrade.md +24 -13
  415. package/skills/rabetbase.manifest.json +10 -3
  416. package/templates/README.md +16 -4
  417. package/templates/generate-api/model-runtime.ts.tpl +101 -0
  418. package/templates/generate-api/profile-api.ts.tpl +21 -0
  419. package/templates/generate-api/profile-client.ts.tpl +14 -0
@@ -12,29 +12,114 @@
12
12
 
13
13
  `init`、`pull`、`validate` 和 `publish` 只使用该路径,不提供 `--file`。目标应用来自当前工作区、`--app <name>` 或 `--appcode <code>`。策略不存入 `.rabetbase.json` 或运行态 app-config。
14
14
 
15
- `version` 固定为字符串 `"1"`,表示 JSON 结构版本。`revision` 是服务端发布历史版本,首次发布为 1,后续发布和回滚递增;两者含义不同。
15
+ `version` 是 JSON 结构版本:`"1"` 保持精确匹配兼容,`"2"` 支持通配选择和排除项;新版 CLI 的 `init` 默认创建版本 2。`revision` 是服务端发布历史版本,首次发布为 1,后续发布和回滚递增;两者含义不同。
16
16
 
17
17
  ## 配置结构
18
18
 
19
+ ### 先取得真实 Dataset 选择器
20
+
21
+ 策略匹配的是平台 Dataset,不是前端 SDK 的变量名。编辑前按下面顺序取得当前应用的事实:
22
+
23
+ ```bash
24
+ # 更新当前应用的本地模型事实;多应用项目显式选择目标
25
+ rabetbase api pull --appcode <appCode> --yes --format compress
26
+
27
+ # 对将被规则覆盖的 Dataset 确认真实 code、字段和支持的操作
28
+ rabetbase dataset detail --appcode <appCode> --code <datasetCode> --format compress
29
+ ```
30
+
31
+ `api pull` 生成的模型条目包含 `datasetCode`、可选 `tableName` 和 SDK `alias`。规则中优先只写这个 `datasetCode`;**不能**写 `alias`。例如模型中的 `alias: "brand"` 只是 SDK 调用名,不是策略选择器。只有无法取得 code 的兼容场景才使用 `tableName`;若两者同时填写,服务端要求它们解析为同一个 Dataset。
32
+
33
+ 认证不可用、`api pull` 失败或模型文件明显过期时,停止配置并先恢复认证;不要根据业务名称、SDK alias 或旧截图猜测 `datasetCode`。
34
+
35
+ ### Dataset 选择器规则
36
+
37
+ | 场景 | 合法写法 | 约束 |
38
+ | --- | --- | --- |
39
+ | v1/v2 的精确 Dataset | `{ "datasetCode": "<real-dataset-code>" }` | 首选;code 来自当前应用的 `api pull` 或 `dataset detail` |
40
+ | v1/v2 的精确物理表 | `{ "tableName": "<real-table-name>" }` | 可用作兼容选择器;不能填 SDK alias |
41
+ | v1/v2 双字段精确选择 | `{ "datasetCode": "…", "tableName": "…" }` | 两值必须解析为同一个 Dataset;已知 code 时不要冗余填写 tableName |
42
+ | 仅 v2 的全部 Dataset | `{ "datasetCode": "*" }` | `datasets` 的唯一元素;不能附带 `tableName`,也不能与精确选择器混用 |
43
+
44
+ `{ "tableName": "*" }` 在任何版本都不支持。版本 1 只接受上面的精确选择器,不能使用 Dataset/API 通配或 `excludes`。
45
+
46
+ ### 顶层字段
47
+
48
+ | 字段 | 必填 | 取值 / 约束 | 作用 |
49
+ | --- | --- | --- | --- |
50
+ | `version` | 是 | `"1"` 或 `"2"`;新文件使用 `"2"` | JSON 结构版本,不是服务端发布 revision |
51
+ | `appCode` | 是 | 必须等于当前命令解析出的应用 | 防止跨应用误发布 |
52
+ | `defaults.instantApi` | 是 | `"allow"` 或 `"deny"` | 没有任何规则命中时的最终动作;不能是 `"route"` |
53
+ | `rules` | 否 | 规则数组;缺省或空数组表示全部使用默认动作 | 对特定 Dataset + API 组合覆盖默认动作 |
54
+
55
+ ### 规则字段
56
+
57
+ | 字段 | 必填 | 取值 / 约束 |
58
+ | --- | --- | --- |
59
+ | `name` | 是 | 稳定、可读的规则标识,方便审阅和版本回溯 |
60
+ | `description` | 否 | 说明规则的业务目的和影响范围 |
61
+ | `datasets` | 是 | 非空数组;每项优先仅 `{ "datasetCode": "<real-dataset-code>" }` |
62
+ | `apis` | 是 | 非空数组,每项是独立 API 名;不能把多个 API 拼为一个逗号字符串 |
63
+ | `action` | 是 | `"allow"`、`"deny"` 或 `"route"` |
64
+ | `backendFunction` | 条件必填 | 仅 `action: "route"` 时填写;必须是同一应用的普通 `ENDPOINT`,不能是 Personal Backend Function |
65
+ | `excludes` | 仅 v2 可用 | 从本规则的 Dataset × API 匹配集合中扣除的数组;每项都要有 `datasets` 和 `apis`,且不得超出父规则范围 |
66
+
67
+ 支持的 API 名称为:`getSelectOptions`、`getList`、`excelExport`、`filter`、`aggregate`、`getOne`、`getOneOrigin`、`create`、`batchCreate`、`update`、`delete`。
68
+
69
+ 规则数组**没有优先级**。服务端会先按每条规则的 Dataset × API 组合(扣除 `excludes` 后)计算覆盖范围;仍有重叠就校验失败,而不是“后一条覆盖前一条”。未被任何规则覆盖的组合回退到 `defaults.instantApi`。
70
+
71
+ ### 精确匹配示例
72
+
73
+ 下面的 `<real-dataset-code>` 必须替换为刚由 `api pull` 得到的 code,不能替换成 alias 或展示名称:
74
+
75
+ ```json
76
+ {
77
+ "version": "2",
78
+ "appCode": "app-example",
79
+ "defaults": { "instantApi": "allow" },
80
+ "rules": [
81
+ {
82
+ "name": "deny-sensitive-export",
83
+ "description": "禁止敏感数据集通过 Instant API 导出",
84
+ "datasets": [{ "datasetCode": "<real-dataset-code>" }],
85
+ "apis": ["excelExport"],
86
+ "action": "deny"
87
+ }
88
+ ]
89
+ }
90
+ ```
91
+
92
+ 这是默认放行下的最小收紧方式:仅该 Dataset 的 `excelExport` 被禁止,其他组合继续由默认动作处理。
93
+
94
+ ### 版本 2 通配与排除示例
95
+
19
96
  ```json
20
97
  {
21
- "version": "1",
98
+ "version": "2",
22
99
  "appCode": "app-example",
23
100
  "defaults": {
24
101
  "instantApi": "allow"
25
102
  },
26
103
  "rules": [
27
104
  {
28
- "name": "route-student-filter",
29
- "description": "学生筛选交给业务 Backend Function",
30
- "datasets": [
105
+ "name": "route-all-except-student-create",
106
+ "description": "除学生新增外,全部数据集操作交给统一 Backend Function",
107
+ "datasets": [{"datasetCode": "*"}],
108
+ "apis": ["*"],
109
+ "excludes": [
31
110
  {
32
- "datasetCode": "student23"
111
+ "datasets": [{"datasetCode": "student23"}],
112
+ "apis": ["create"]
33
113
  }
34
114
  ],
35
- "apis": ["filter"],
36
115
  "action": "route",
37
- "backendFunction": "filterStudents"
116
+ "backendFunction": "unifiedGateway"
117
+ },
118
+ {
119
+ "name": "allow-student-create",
120
+ "datasets": [{"datasetCode": "student23"}],
121
+ "apis": ["create"],
122
+ "action": "allow"
38
123
  }
39
124
  ]
40
125
  }
@@ -43,8 +128,13 @@
43
128
  - `defaults.instantApi` 只允许 `allow` 或 `deny`,不能是 `route`。
44
129
  - `rules[].action` 允许 `allow`、`deny`、`route`。
45
130
  - `route` 必须填写 `backendFunction`;其他 action 禁止填写。
46
- - `datasets[]` 至少填写 `datasetCode` 或 `tableName`;建议优先使用稳定的 `datasetCode`。两者同时填写时必须指向同一 Dataset。
47
- - 同一个 `datasetCode + api` 只能命中一条规则;重复覆盖会校验失败。
131
+ - `datasets[]` 至少填写 `datasetCode` 或 `tableName`;已知 code 时只填写稳定的 `datasetCode`。两者同时填写时必须指向同一 Dataset。
132
+ - 版本 1 只支持精确匹配,不允许 `*` 或 `excludes`。
133
+ - 版本 2 的全部数据集写为 `datasets: [{"datasetCode":"*"}]`。通配项必须是数组唯一元素且不能包含 `tableName`;不支持 `tableName: "*"`。
134
+ - 版本 2 的全部 API 写为 `apis: ["*"]`,`"*"` 必须是数组唯一元素。
135
+ - `excludes[]` 每项包含 `datasets` 和 `apis`,表示从父规则中扣除两者笛卡尔积;排除范围不能超出父规则。
136
+ - 被排除的组合可以由后续其他规则处理;没有其他规则时执行 `defaults.instantApi`。
137
+ - 排除后仍重复的 `datasetCode + api` 会校验失败,规则数组顺序不表示优先级。
48
138
  - `apis` 的每个元素是一个独立值。`["filter,create"]` 或包含中文逗号的 `["filter,create"]` 都不是两个 API。
49
139
  - 支持的 API:`getSelectOptions`、`getList`、`excelExport`、`filter`、`aggregate`、`getOne`、`getOneOrigin`、`create`、`batchCreate`、`update`、`delete`。
50
140
 
@@ -70,7 +160,7 @@ rabetbase instant-api-policy publish --expected-revision 0 --change-summary "ini
70
160
  rabetbase instant-api-policy publish --expected-revision 0 --change-summary "initial policy" --yes --format compress
71
161
  ```
72
162
 
73
- `init --default-action deny` 可以创建默认禁止草稿。`init` 和 `pull` 遇到不同的既有文件时停止;只有 `--force --yes` 可以替换。
163
+ `init --default-action deny` 可以创建版本 2 的默认禁止草稿。`init` 和 `pull` 遇到不同的既有文件时停止;只有 `--force --yes` 可以替换。已有版本 1 文件仍可继续校验和发布。
74
164
 
75
165
  `validate` 调用服务端完整校验,返回 `configHash` 和 `normalizedConfig`,但不发布、不生成 revision。Dataset、API、规则重叠以及 Backend Function 合法性以该结果为准。
76
166
 
@@ -90,3 +180,5 @@ rabetbase instant-api-policy rollback --revision 2 --expected-revision 5 --chang
90
180
  回滚不会把 revision 倒退,也不会覆盖历史。例如当前 revision 为 5,恢复 revision 2 后会生成新的 revision 6。
91
181
 
92
182
  发布和回滚最多提交一次。CLI 随后读取当前策略,要求 configHash 匹配且 revision 推进。响应丢失但回读可以证明结果时返回 verified;证据不足时停止并提示执行 `current`,不得自动重提。Runtime 最迟约 30 秒感知新策略。
183
+
184
+ 数据集通配项按应用当前有效数据集展开;应用新增数据集后,会在 Runtime 策略缓存刷新时自动进入通配规则范围。
@@ -7,6 +7,7 @@
7
7
  ```bash
8
8
  rabetbase notification config-list --format compress
9
9
  rabetbase notification config-list --type EMAIL --format compress
10
+ rabetbase notification config-list --all --format compress
10
11
  rabetbase notification config-list --type EMAIL --appcode app-xxxxx --format json
11
12
  ```
12
13
 
@@ -20,6 +21,8 @@ rabetbase notification config-list --type EMAIL --appcode app-xxxxx --format jso
20
21
 
21
22
  类型值使用大写。
22
23
 
24
+ `--all` 会分别查询 `EMAIL`、`FEISHU`、`DINGTALK`、`WECOM`、`WEBHOOK`,合并为同一份安全摘要。`--all` 与 `--type` 互斥;不传二者时继续保持默认 `EMAIL` 行为。
25
+
23
26
  ## 输出
24
27
 
25
28
  ```json
@@ -45,6 +48,20 @@ rabetbase notification config-list --type EMAIL --appcode app-xxxxx --format jso
45
48
  }
46
49
  ```
47
50
 
51
+ `--all` 输出使用 `data.channelTypes` 代替单个 `data.channelType`,`configs` 为五种类型结果的合并列表:
52
+
53
+ ```json
54
+ {
55
+ "ok": true,
56
+ "data": {
57
+ "appCode": "app-xxxxx",
58
+ "channelTypes": ["EMAIL", "FEISHU", "DINGTALK", "WECOM", "WEBHOOK"],
59
+ "count": 2,
60
+ "configs": []
61
+ }
62
+ }
63
+ ```
64
+
48
65
  CLI 只输出用于选择配置的安全字段,不输出:
49
66
 
50
67
  * `channelConfig`
@@ -51,8 +51,8 @@ rabetbase project create my-project --appcode <code>
51
51
  **关键边界:**
52
52
 
53
53
  - 当前目录非空时不得覆盖、移动或删除已有内容,应报告冲突。
54
- - `needsAgentMerge` 只表示已有 TypeScript 被保留,是检查提示,不代表必须改写文件;仅在模型事实存在差异时合并。
55
- - `--force --yes` 只用于首次脚手架拉取明确失败,或用户明确要求放弃本地定制的场景。
54
+ - `needsProjectUpgrade` 表示模型事实已刷新,但已有项目尚未安装稳定源码入口;新建项目模板正常不会出现该状态。
55
+ - `--force --yes` 在注册表模式只用于确认远端空清单,不用于源码迁移。
56
56
  - 此意图只授权本地工程创建与平台事实读取,不授权修改线上业务数据或平台资源。
57
57
 
58
58
  `api pull` 的单应用/项目应用清单输出结构见 [`rabetbase-api-pull.md`](rabetbase-api-pull.md),TypeScript 合并规则见 [`sdk-client-generation.md`](../guides/sdk-client-generation.md)。Agent 可根据实际输出选择检查、修复和验证方式。
@@ -70,7 +70,7 @@ rabetbase project create my-project --appcode <code>
70
70
  - 交互与非交互模式使用同一创建流程,都会安装依赖、格式化代码并写入项目配置
71
71
  - 项目模板从 CDN 下载并校验 SHA-256;CDN 不可用、模板不兼容或校验失败时命令停止,修复后重试
72
72
  - 新项目中的 `.rabetbase.json` **只继承**全局中的少量偏好及 `region` / Domain 路由配置,**不会**把全局的 `apps` / `defaultApp` 复制进新项目
73
- - `src/api/sdk-config.ts` 与 `rabetbase.domain-routing.json` 只生成浏览器可公开的最终路由,不会写入 `cookie`、`accessKey` 等认证配置;`rabetbase run start|dev|build|preview` 会在执行脚本前刷新公开 Domain 快照,也可用 [`project domain-routing-sync`](rabetbase-project-domain-routing-sync.md) 立即显式刷新。`api.ts` / `client.ts` 仅在缺失时由 CLI 写脚手架,已有文件按 [`sdk-client-generation.md`](../guides/sdk-client-generation.md) 更新;若项目创建时首次拉取失败,按 CLI 提示执行 `rabetbase api pull --force --yes` 完成占位脚手架初始化
73
+ - `src/api/sdk-config.ts` 与 `rabetbase.domain-routing.json` 只生成浏览器可公开的最终路由,不会写入 `cookie`、`accessKey` 等认证配置;`rabetbase run start|dev|build|preview` 会在执行脚本前刷新公开 Domain 快照,也可用 [`project domain-routing-sync`](rabetbase-project-domain-routing-sync.md) 立即显式刷新。新项目模板已经包含稳定 `api.ts` / `client.ts`;若首次拉取失败,修复登录或连接后执行普通 `rabetbase api pull --format compress` 刷新占位注册表
74
74
 
75
75
  | 当前有效路由 | `src/api/sdk-config.ts` |
76
76
  |--------------|-------------------------|
@@ -1,6 +1,8 @@
1
1
  # project upgrade
2
2
 
3
- 从 lovrabet-cli 迁移到 rabetbase-cli。
3
+ 升级已有项目的 SDK 依赖与应用源码结构。新项目继续使用 `project create`;Dataset 事实刷新继续使用 `api pull`。
4
+
5
+ `.lovrabet.json`、`.lovrabet/` 与 Lovrabet Skill 属于 Lovrabet 运行态 CLI,可与 Rabetbase 项目配置和源码共存。该命令不会读取、迁移、改写或删除这些运行态资产。
4
6
 
5
7
  ## 命令
6
8
 
@@ -8,6 +10,9 @@
8
10
  # 交互模式(先分析 → 展示报告 → 确认 → 执行)
9
11
  rabetbase project upgrade
10
12
 
13
+ # 只查看完整迁移计划,不写文件
14
+ rabetbase project upgrade --dry-run
15
+
11
16
  # 自动模式(跳过确认)
12
17
  rabetbase project upgrade --yes
13
18
  ```
@@ -17,27 +22,33 @@ rabetbase project upgrade --yes
17
22
  | Flag | 类型 | 必填 | 默认 | 说明 |
18
23
  |------|------|------|------|------|
19
24
  | `--yes` | boolean | 否 | `false` | 跳过确认提示,直接执行 |
25
+ | `--dry-run` | boolean | 否 | `false` | 只输出依赖和源码升级计划 |
20
26
 
21
27
  ## 执行流程
22
28
 
23
- 两阶段模式:先分析 → 展示报告 → 确认 → 执行 6 步:
29
+ 两阶段模式:先分析 → 展示报告 → 确认 → 执行 2 步:
24
30
 
25
31
  | 步骤 | 操作 | 说明 |
26
32
  |------|------|------|
27
- | 1 | 配置文件迁移 | 旧配置(`.lovrabet.json` 等)→ `.rabetbase.json`,旧文件备份为 `.bak` |
28
- | 2 | 删除 `.lovrabet/` | 移除旧的工作目录 |
29
- | 3 | 删除旧 IDE skill 文件 | 移除 `.cursor/rules/lovrabet_rules.mdc`、`.claude/skills/lovrabet` 等 |
30
- | 4 | 清理 MCP 配置 | 从 `.cursor/mcp.json` 移除引用 `@lovrabet/dataset-mcp-server` 的条目 |
31
- | 5 | 移除旧 skill | 清理旧的 Lovrabet Skill 安装记录 |
32
- | 6 | 安装新 skill | `npx skills add lovrabet/rabetbase -g -y` |
33
+ | 1 | 升级 SDK 依赖 | 将已有 `@lovrabet/sdk` 依赖更新到当前维护版本 |
34
+ | 2 | 升级应用源码 | 迁移稳定 API 入口、模型注册表、运行时选择器和项目 Domain 路由 |
35
+
36
+ ## 源码迁移安全规则
37
+
38
+ - 先执行 `rabetbase project upgrade --dry-run`;确认 `apiArchitecture.groups[].files[]` 的动作后再正式执行。
39
+ - 缺失文件直接创建;可识别的旧 CLI 生成文件先备份到 `.rabetbase/project-upgrade/api-model-registry-v2/backups/` 再替换。
40
+ - 发现业务定制的 `api.ts` / `client.ts` 时不覆盖原文件,在 `candidates/` 下写入候选文件,并返回 `manualMergeRequired: true`。
41
+ - 旧 `api.ts` 中可识别的 Dataset 事实迁入 `models.generated.ts`,迁移后再运行 `rabetbase api pull --format compress` 刷新远端事实。
42
+ - 多个未配置 `apiGroup` 且共用同一 `apiDir` 的历史 profile 保留 `[name-]api.ts` / `[name-]client.ts`,不会被静默归并。
43
+ - 命令可重复执行;已是最新稳定入口时不重复改写。
33
44
 
34
45
  ## 分析报告
35
46
 
36
47
  执行前会扫描并展示:
37
- - 旧配置文件路径和待迁移字段
38
- - 旧文件/目录列表
39
- - MCP 配置中待清理的条目
40
- - 是否需要 skill 替换
48
+ - `@lovrabet/sdk` 是否需要更新
49
+ - 每个 API 目录的 profile、文件动作、备份或候选文件路径
50
+
51
+ 不会把 `.lovrabet.json`、`.lovrabet/`、Lovrabet Skill 或 Lovrabet 的 IDE 配置列为待清理项。
41
52
 
42
53
  ## 输出
43
54
 
@@ -49,7 +60,7 @@ rabetbase project upgrade --yes
49
60
  ## 触发方式
50
61
 
51
62
  - 手动执行:`rabetbase project upgrade`
52
- - 显式执行:`rabetbase project upgrade` 检测并迁移旧配置
63
+ - 已有应用需要采用当前源码架构:先 `rabetbase project upgrade --dry-run`,再正式升级
53
64
 
54
65
  ## 参考
55
66
 
@@ -2,10 +2,11 @@
2
2
  "schemaVersion": 1,
3
3
  "name": "rabetbase",
4
4
  "packageName": "@lovrabet/rabetbase-cli",
5
- "packageVersion": "2.5.3-beta.1",
6
- "skillVersion": "2.5.3-beta.1",
5
+ "packageVersion": "2.5.3-beta.3",
6
+ "skillVersion": "2.5.3-beta.3",
7
7
  "files": [
8
8
  "SKILL.md",
9
+ "guides/approval-flow-development-workflow.md",
9
10
  "guides/backend-function.md",
10
11
  "guides/best-practices.md",
11
12
  "guides/bff-creation-workflow.md",
@@ -22,6 +23,7 @@
22
23
  "guides/sql-mybatis.md",
23
24
  "guides/troubleshooting.md",
24
25
  "guides/typescript-sdk.md",
26
+ "knowledge/approval-flow/config-json-schema.md",
25
27
  "knowledge/components.md",
26
28
  "knowledge/custom-page/generation-standards.md",
27
29
  "knowledge/custom-page/page-templates.md",
@@ -46,6 +48,7 @@
46
48
  "references/rabetbase-bff-delete.md",
47
49
  "references/rabetbase-bff-detail.md",
48
50
  "references/rabetbase-bff-list.md",
51
+ "references/rabetbase-bff-logs.md",
49
52
  "references/rabetbase-bff-pull.md",
50
53
  "references/rabetbase-bff-push.md",
51
54
  "references/rabetbase-bff-save.md",
@@ -58,6 +61,7 @@
58
61
  "references/rabetbase-database-template.md",
59
62
  "references/rabetbase-dataset-business-group-update.md",
60
63
  "references/rabetbase-dataset-business-groups.md",
64
+ "references/rabetbase-dataset-cross-relations.md",
61
65
  "references/rabetbase-dataset-delete.md",
62
66
  "references/rabetbase-dataset-detail.md",
63
67
  "references/rabetbase-dataset-extend-update.md",
@@ -85,6 +89,9 @@
85
89
  "references/rabetbase-deployment-sync-all.md",
86
90
  "references/rabetbase-doctor.md",
87
91
  "references/rabetbase-file.md",
92
+ "references/rabetbase-flow-commands.md",
93
+ "references/rabetbase-flow-resources.md",
94
+ "references/rabetbase-flow-runtime-boundary.md",
88
95
  "references/rabetbase-init.md",
89
96
  "references/rabetbase-instant-api-policy.md",
90
97
  "references/rabetbase-issue-report.md",
@@ -140,5 +147,5 @@
140
147
  "references/rabetbase-user-account.md",
141
148
  "references/rabetbase-workspace.md"
142
149
  ],
143
- "digest": "737d15dee0512e879514bb4ab5e657b2e817656ba483dd285f5fbfe59adabc05"
150
+ "digest": "fb687c0d57936cfcba5e4f4d395e8695309e549ce848c5834befbade117e83e8"
144
151
  }
@@ -52,12 +52,24 @@ node lib/cli.js project create template-verify --template-source templates/proje
52
52
  模板同步完成后,更新模板自身的 `package.json#version`,再生成待发布的 CDN 资产:
53
53
 
54
54
  ```bash
55
+ # 正式模板:更新顶层 projectTemplate
55
56
  npm run sync:cdn
57
+
58
+ # beta 模板:只更新 beta.projectTemplate
59
+ npm run sync:cdn:beta
60
+
61
+ # 只读校验:发布门禁会按目标自动执行其中一条
62
+ npm run check:cdn
63
+ npm run check:cdn:beta
56
64
  ```
57
65
 
58
- 该命令会在 `dist/rabetbase-cli/templates/projects/` 下生成
59
- `sub-app-react-demo.zip`,并把版本、文件名、大小和 SHA-256 写入现有
60
- `dist/rabetbase-cli/config/index.json`。ZIP 使用固定地址,每次发布直接覆盖。
66
+ 两个命令都只从同一个正式模板真源生成产物,并写入同一个
67
+ `dist/rabetbase-cli/config/index.json`。正式模板使用顶层 `projectTemplate` 和
68
+ `sub-app-react-demo.zip`;beta 模板使用 `beta.projectTemplate` 和
69
+ `sub-app-react-demo-beta.zip`,两条发布通道互不覆盖。旧 CLI 继续读取顶层字段;
70
+ 新版 beta CLI 在 beta 描述缺失时兼容回退到顶层正式模板。
71
+ `check:cdn` / `check:cdn:beta` 在系统临时目录重建 ZIP,只读比对模板描述和仓内归档,
72
+ 不会改动 `cdn/` 或 `dist/`。
61
73
 
62
74
  ### 模板结构
63
75
 
@@ -81,7 +93,7 @@ npm run sync:cdn
81
93
  ## 注意事项
82
94
 
83
95
  - `templates/projects/sub-app-react-demo/` 是项目模板真源,不是独立 Git 仓,也不是外部仓快照
84
- - `rabetbase project create` 从 CDN 下载 ZIP,然后更新 `package.json` 与 `.rabetbase.json`;此仓库模板不进入 npm 发布包
96
+ - `rabetbase project create` 从 CDN 下载 ZIP,然后更新 `package.json` 与 `.rabetbase.json`;正式 CLI 读取顶层模板,beta CLI 优先读取 `beta.projectTemplate`;此仓库模板不进入 npm 发布包
85
97
  - 模板文件名必须兼容 Windows、macOS 和 Linux;禁止符号链接、大小写冲突路径和 Windows 保留名称
86
98
  - 有 AppCode 时,CLI 会重新生成 `src/api/api.ts` 和 `src/api/client.ts`
87
99
  - 项目模板中不要保留真实 AppCode、真实数据集模型、`.git`、`node_modules`、`dist` 或个人配置
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Profile-aware model selection generated by Rabetbase CLI.
3
+ * Do not add application-specific Dataset codes to this file.
4
+ */
5
+
6
+ import type { ModelsConfig } from "@lovrabet/sdk";
7
+
8
+ interface ModelProfile {
9
+ appCode: string;
10
+ runtimeDomain: string;
11
+ }
12
+
13
+ interface ModelEntryMetadata {
14
+ alias: string;
15
+ tableName: string;
16
+ name: string;
17
+ }
18
+
19
+ type ModelEntry = ModelEntryMetadata &
20
+ (
21
+ | { datasetCode: string; datasetCodes?: never }
22
+ | { datasetCode?: never; datasetCodes: Record<string, string> }
23
+ );
24
+
25
+ interface ModelRegistry {
26
+ defaultProfile: string;
27
+ profiles: Record<string, ModelProfile>;
28
+ models: readonly ModelEntry[];
29
+ }
30
+
31
+ function normalizeDomain(value: string | undefined): string | undefined {
32
+ return value?.trim().replace(/\/+$/, "");
33
+ }
34
+
35
+ function injectedRuntimeDomain(): string | undefined {
36
+ if (typeof window === "undefined") return undefined;
37
+ const globalWindow = window as Window & {
38
+ __GLOBAL__?: {
39
+ deploymentConfig?: { RUNTIME_API_DOMAIN?: string };
40
+ };
41
+ };
42
+ return normalizeDomain(
43
+ globalWindow.__GLOBAL__?.deploymentConfig?.RUNTIME_API_DOMAIN,
44
+ );
45
+ }
46
+
47
+ function selectProfile(
48
+ registry: ModelRegistry,
49
+ projectRuntimeDomain: string,
50
+ ): readonly [string, ModelProfile] {
51
+ const runtimeDomain =
52
+ injectedRuntimeDomain() ?? normalizeDomain(projectRuntimeDomain);
53
+ const matches = Object.entries(registry.profiles).filter(
54
+ ([, profile]) => normalizeDomain(profile.runtimeDomain) === runtimeDomain,
55
+ );
56
+
57
+ if (matches.length > 1) {
58
+ throw new Error(
59
+ `Multiple Lovrabet model profiles match Runtime Domain "${runtimeDomain}". ` +
60
+ "Give each profile a distinct Runtime Domain.",
61
+ );
62
+ }
63
+ if (matches.length === 1) return matches[0]!;
64
+
65
+ throw new Error(
66
+ `No Lovrabet model profile matches Runtime Domain "${runtimeDomain ?? "(not set)"}". ` +
67
+ "Run `rabetbase api pull` after verifying the current project routing.",
68
+ );
69
+ }
70
+
71
+ export function resolveActiveModelConfig(
72
+ registry: ModelRegistry,
73
+ projectRuntimeDomain: string,
74
+ ): {
75
+ profileName: string;
76
+ appCode: string;
77
+ runtimeDomain: string;
78
+ modelsConfig: ModelsConfig;
79
+ } {
80
+ const [profileName, profile] = selectProfile(registry, projectRuntimeDomain);
81
+ const models = registry.models.flatMap((model) => {
82
+ const datasetCode = model.datasetCode ?? model.datasetCodes?.[profileName];
83
+ return datasetCode
84
+ ? [
85
+ {
86
+ datasetCode,
87
+ tableName: model.tableName,
88
+ name: model.name,
89
+ alias: model.alias,
90
+ },
91
+ ]
92
+ : [];
93
+ });
94
+
95
+ return {
96
+ profileName,
97
+ appCode: profile.appCode,
98
+ runtimeDomain: profile.runtimeDomain,
99
+ modelsConfig: { appCode: profile.appCode, models },
100
+ };
101
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Stable Lovrabet SDK model entrypoint.
3
+ * Generated by Rabetbase CLI.
4
+ */
5
+
6
+ import { registerModels, CONFIG_NAMES } from "@lovrabet/sdk";
7
+ import projectRouting from "{ProjectRoutingImport}";
8
+ import { LOVRABET_MODEL_REGISTRY } from "./models.generated";
9
+ import { resolveActiveModelConfig } from "./model-runtime";
10
+
11
+ const activeModelConfig = resolveActiveModelConfig(
12
+ LOVRABET_MODEL_REGISTRY,
13
+ projectRouting.domains.runtime,
14
+ );
15
+
16
+ export const LOVRABET_PROFILE_NAME = activeModelConfig.profileName;
17
+ export const LOVRABET_APP_CODE = activeModelConfig.appCode;
18
+ export const LOVRABET_RUNTIME_DOMAIN = activeModelConfig.runtimeDomain;
19
+ export const LOVRABET_MODELS_CONFIG = activeModelConfig.modelsConfig;
20
+
21
+ registerModels(LOVRABET_MODELS_CONFIG, CONFIG_NAMES.DEFAULT);
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Stable Lovrabet SDK client entrypoint.
3
+ * Generated by Rabetbase CLI.
4
+ */
5
+
6
+ import { createClient, CONFIG_NAMES } from "@lovrabet/sdk";
7
+ import { LOVRABET_RUNTIME_DOMAIN } from "./api";
8
+ import { LOVRABET_SDK_CONFIG } from "./sdk-config";
9
+
10
+ export const lovrabetClient = createClient({
11
+ apiConfigName: CONFIG_NAMES.DEFAULT,
12
+ ...LOVRABET_SDK_CONFIG,
13
+ runtimeDomain: LOVRABET_RUNTIME_DOMAIN,
14
+ });