@lovrabet/rabetbase-cli 2.3.16-beta.7 → 2.4.1

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 (435) hide show
  1. package/README.md +4 -10
  2. package/lib/api/api-doc.js +1 -1
  3. package/lib/api/fetch-model-list.js +1 -1
  4. package/lib/api/generate-api-file.js +1 -1
  5. package/lib/auth/auth-server-ui.js +1 -1
  6. package/lib/auth/auth-server.js +1 -1
  7. package/lib/auth/constant.js +1 -1
  8. package/lib/auth/get-cookie.js +1 -1
  9. package/lib/auth/get-session-user.js +1 -1
  10. package/lib/auth/is-session-valid.js +1 -1
  11. package/lib/auth/login-success-html.js +1 -1
  12. package/lib/auth/logout.js +1 -1
  13. package/lib/cli-flags.js +1 -1
  14. package/lib/cli.js +1 -1
  15. package/lib/commands/api/generate.js +1 -1
  16. package/lib/commands/api/index.js +1 -1
  17. package/lib/commands/api/list.js +1 -1
  18. package/lib/commands/api/pull.js +1 -1
  19. package/lib/commands/api/shared.js +1 -1
  20. package/lib/commands/app/index.js +1 -1
  21. package/lib/commands/app/list.js +1 -1
  22. package/lib/commands/app/members-list.js +1 -1
  23. package/lib/commands/app/remote-directory.js +1 -1
  24. package/lib/commands/app/shared.js +1 -1
  25. package/lib/commands/app-config/delete.js +1 -1
  26. package/lib/commands/app-config/get.js +1 -1
  27. package/lib/commands/app-config/index.js +1 -1
  28. package/lib/commands/app-config/list.js +1 -1
  29. package/lib/commands/app-config/set.js +1 -1
  30. package/lib/commands/app-config/shared.js +1 -1
  31. package/lib/commands/auth/index.js +1 -1
  32. package/lib/commands/bff/create.js +1 -1
  33. package/lib/commands/bff/delete.js +1 -1
  34. package/lib/commands/bff/detail.js +1 -1
  35. package/lib/commands/bff/index.js +1 -1
  36. package/lib/commands/bff/list.js +1 -1
  37. package/lib/commands/bff/pull.js +1 -1
  38. package/lib/commands/bff/push.js +1 -1
  39. package/lib/commands/bff/status.js +1 -1
  40. package/lib/commands/cli-skill/index.js +1 -1
  41. package/lib/commands/cli-update.js +1 -1
  42. package/lib/commands/codegen/index.js +1 -1
  43. package/lib/commands/codegen/sdk.js +1 -1
  44. package/lib/commands/codegen/sql.js +1 -1
  45. package/lib/commands/common/app-registry.js +1 -1
  46. package/lib/commands/common/app-selector.js +1 -1
  47. package/lib/commands/common/async-task.js +1 -1
  48. package/lib/commands/common/dry-run.js +1 -1
  49. package/lib/commands/common/flags.js +1 -1
  50. package/lib/commands/common/local-file.js +1 -1
  51. package/lib/commands/common/validate.js +1 -1
  52. package/lib/commands/config/get.js +1 -1
  53. package/lib/commands/config/index.js +1 -1
  54. package/lib/commands/config/list.js +1 -1
  55. package/lib/commands/config/set.js +1 -1
  56. package/lib/commands/config/shared.js +1 -1
  57. package/lib/commands/data/filter.js +1 -1
  58. package/lib/commands/data/getOne.js +1 -1
  59. package/lib/commands/data/index.js +1 -1
  60. package/lib/commands/data/shared.js +1 -1
  61. package/lib/commands/dataset/business-group-update.js +1 -1
  62. package/lib/commands/dataset/capability.js +1 -1
  63. package/lib/commands/dataset/delete.js +1 -1
  64. package/lib/commands/dataset/detail.js +1 -1
  65. package/lib/commands/dataset/extend-update.js +1 -1
  66. package/lib/commands/dataset/field-update.js +1 -1
  67. package/lib/commands/dataset/generate.js +1 -1
  68. package/lib/commands/dataset/index.js +1 -1
  69. package/lib/commands/dataset/list.js +1 -1
  70. package/lib/commands/dataset/operations.js +1 -1
  71. package/lib/commands/dataset/relation-audit.js +1 -1
  72. package/lib/commands/dataset/relation-create.js +1 -1
  73. package/lib/commands/dataset/relation-delete.js +1 -1
  74. package/lib/commands/dataset/relation-shared.js +1 -1
  75. package/lib/commands/dataset/relation-update.js +1 -1
  76. package/lib/commands/dataset/relations.js +1 -1
  77. package/lib/commands/dataset/rename.js +1 -1
  78. package/lib/commands/dataset/restore.js +1 -1
  79. package/lib/commands/db/analysis-batching.js +1 -1
  80. package/lib/commands/db/analyze-batch-plan.js +1 -1
  81. package/lib/commands/db/analyze-cancel.js +1 -1
  82. package/lib/commands/db/analyze-start.js +1 -1
  83. package/lib/commands/db/analyze-status.js +1 -1
  84. package/lib/commands/db/create.js +1 -1
  85. package/lib/commands/db/delete.js +1 -1
  86. package/lib/commands/db/detail.js +1 -1
  87. package/lib/commands/db/diff.js +1 -1
  88. package/lib/commands/db/index.js +1 -1
  89. package/lib/commands/db/list.js +1 -1
  90. package/lib/commands/db/shared.js +1 -1
  91. package/lib/commands/db/tables.js +1 -1
  92. package/lib/commands/db/test.js +1 -1
  93. package/lib/commands/db/update.js +1 -1
  94. package/lib/commands/doctor.js +1 -1
  95. package/lib/commands/file/index.js +1 -1
  96. package/lib/commands/init/index.js +1 -1
  97. package/lib/commands/issue/index.js +1 -1
  98. package/lib/commands/issue/nudge.js +1 -1
  99. package/lib/commands/issue/report.js +1 -1
  100. package/lib/commands/issue/shared.js +1 -1
  101. package/lib/commands/kb/create.js +1 -1
  102. package/lib/commands/kb/delete.js +1 -1
  103. package/lib/commands/kb/detail.js +1 -1
  104. package/lib/commands/kb/index.js +1 -1
  105. package/lib/commands/kb/list.js +1 -1
  106. package/lib/commands/kb/shared.js +1 -1
  107. package/lib/commands/kb/update.js +1 -1
  108. package/lib/commands/logs/index.js +1 -1
  109. package/lib/commands/menu/asset-update.js +1 -1
  110. package/lib/commands/menu/delete.js +1 -1
  111. package/lib/commands/menu/external-link-create.js +1 -1
  112. package/lib/commands/menu/external-link-update.js +1 -1
  113. package/lib/commands/menu/group-create.js +1 -1
  114. package/lib/commands/menu/group-update.js +1 -1
  115. package/lib/commands/menu/index.js +1 -1
  116. package/lib/commands/menu/list.js +1 -1
  117. package/lib/commands/menu/move.js +1 -1
  118. package/lib/commands/menu/regroup-start.js +1 -1
  119. package/lib/commands/menu/rename.js +1 -1
  120. package/lib/commands/menu/shared/compare-table.js +1 -1
  121. package/lib/commands/menu/shared/delete-plan.js +1 -1
  122. package/lib/commands/menu/shared/facts.js +1 -1
  123. package/lib/commands/menu/shared/index.js +1 -1
  124. package/lib/commands/menu/shared/inquirer.js +1 -1
  125. package/lib/commands/menu/shared/local-pages.js +1 -1
  126. package/lib/commands/menu/shared/logic.js +1 -1
  127. package/lib/commands/menu/shared/mutations.js +1 -1
  128. package/lib/commands/menu/shared/service.js +1 -1
  129. package/lib/commands/menu/shared/sync-core.js +1 -1
  130. package/lib/commands/menu/shared/update-core.js +1 -1
  131. package/lib/commands/menu/shared/valid-url.js +1 -1
  132. package/lib/commands/menu/sync.js +1 -1
  133. package/lib/commands/notification/config-list.js +1 -1
  134. package/lib/commands/notification/index.js +1 -1
  135. package/lib/commands/ocr/index.js +1 -1
  136. package/lib/commands/page/generate-start.js +1 -1
  137. package/lib/commands/page/generate-status.js +1 -1
  138. package/lib/commands/page/index.js +1 -1
  139. package/lib/commands/page/pull.js +1 -1
  140. package/lib/commands/page/push.js +1 -1
  141. package/lib/commands/page/react/create.d.ts +2 -0
  142. package/lib/commands/page/react/create.js +1 -0
  143. package/lib/commands/page/react/detail.d.ts +2 -0
  144. package/lib/commands/page/react/detail.js +1 -0
  145. package/lib/commands/page/react/list.d.ts +2 -0
  146. package/lib/commands/page/react/list.js +1 -0
  147. package/lib/commands/page/react/publish.d.ts +2 -0
  148. package/lib/commands/page/react/publish.js +1 -0
  149. package/lib/commands/page/react/shared.d.ts +78 -0
  150. package/lib/commands/page/react/shared.js +1 -0
  151. package/lib/commands/page/react/syntax.d.ts +18 -0
  152. package/lib/commands/page/react/syntax.js +1 -0
  153. package/lib/commands/page/react/template.d.ts +8 -0
  154. package/lib/commands/page/react/template.js +1 -0
  155. package/lib/commands/page/react/update.d.ts +2 -0
  156. package/lib/commands/page/react/update.js +1 -0
  157. package/lib/commands/page/relation-audit.js +1 -1
  158. package/lib/commands/page/restore.js +1 -1
  159. package/lib/commands/page/shared.d.ts +1 -0
  160. package/lib/commands/page/shared.js +1 -1
  161. package/lib/commands/page/standard-page-status.js +1 -1
  162. package/lib/commands/page/sync.js +1 -1
  163. package/lib/commands/permit/index.js +1 -1
  164. package/lib/commands/permit/page-get.js +1 -1
  165. package/lib/commands/permit/page-set.js +1 -1
  166. package/lib/commands/permit/role-apis-set.js +1 -1
  167. package/lib/commands/permit/role-menus-set.js +1 -1
  168. package/lib/commands/permit/role-menus.js +1 -1
  169. package/lib/commands/permit/shared.js +1 -1
  170. package/lib/commands/project/create/enhanced-guided-create.js +1 -1
  171. package/lib/commands/project/create/format-elapsed.js +1 -1
  172. package/lib/commands/project/create/main.js +1 -1
  173. package/lib/commands/project/create/non-interactive.js +1 -1
  174. package/lib/commands/project/create/project-template-path.js +1 -1
  175. package/lib/commands/project/create/use-copy-project-template.js +1 -1
  176. package/lib/commands/project/create/use-format-code.js +1 -1
  177. package/lib/commands/project/create/use-install-dependencies.js +1 -1
  178. package/lib/commands/project/index.js +1 -1
  179. package/lib/commands/project/upgrade.js +1 -1
  180. package/lib/commands/registry.js +1 -1
  181. package/lib/commands/role/create.js +1 -1
  182. package/lib/commands/role/delete.js +1 -1
  183. package/lib/commands/role/detail.js +1 -1
  184. package/lib/commands/role/index.js +1 -1
  185. package/lib/commands/role/list.js +1 -1
  186. package/lib/commands/role/shared.js +1 -1
  187. package/lib/commands/role/update.js +1 -1
  188. package/lib/commands/role/user-add.js +1 -1
  189. package/lib/commands/role/user-remove.js +1 -1
  190. package/lib/commands/role/user-resolve.js +1 -1
  191. package/lib/commands/run/index.js +1 -1
  192. package/lib/commands/schema.js +1 -1
  193. package/lib/commands/sql/create.js +1 -1
  194. package/lib/commands/sql/delete.js +1 -1
  195. package/lib/commands/sql/detail.js +1 -1
  196. package/lib/commands/sql/exec.js +1 -1
  197. package/lib/commands/sql/index.js +1 -1
  198. package/lib/commands/sql/list.js +1 -1
  199. package/lib/commands/sql/pull.js +1 -1
  200. package/lib/commands/sql/push.js +1 -1
  201. package/lib/commands/sql/shared.js +1 -1
  202. package/lib/commands/sql/status.js +1 -1
  203. package/lib/commands/sql/validate.js +1 -1
  204. package/lib/commands/task/index.js +1 -1
  205. package/lib/commands/task/status.js +1 -1
  206. package/lib/commands/tenant/index.js +1 -1
  207. package/lib/commands/tenant/members-list.js +1 -1
  208. package/lib/commands/tenant/shared.js +1 -1
  209. package/lib/commands/user-account/dingding-sandbox-bind.d.ts +2 -0
  210. package/lib/commands/user-account/dingding-sandbox-bind.js +1 -0
  211. package/lib/commands/user-account/index.d.ts +2 -0
  212. package/lib/commands/user-account/index.js +1 -0
  213. package/lib/commands/workspace/add.js +1 -1
  214. package/lib/commands/workspace/index.js +1 -1
  215. package/lib/commands/workspace/remove.js +1 -1
  216. package/lib/config/schema.js +1 -1
  217. package/lib/constant/cdn.js +1 -1
  218. package/lib/constant/cli.js +1 -1
  219. package/lib/constant/defaults.js +1 -1
  220. package/lib/constant/domain.js +1 -1
  221. package/lib/constant/env.js +1 -1
  222. package/lib/constant/output.js +1 -1
  223. package/lib/constant/paths.js +1 -1
  224. package/lib/constant/risk.js +1 -1
  225. package/lib/context/app-resolver.js +1 -1
  226. package/lib/context/auth-resolver.js +1 -1
  227. package/lib/context/config-loader.js +1 -1
  228. package/lib/context.js +1 -1
  229. package/lib/core/alias-resolver.js +1 -1
  230. package/lib/core/api-client.d.ts +117 -0
  231. package/lib/core/api-client.js +1 -1
  232. package/lib/core/bff/config.js +1 -1
  233. package/lib/core/bff/file-system.js +1 -1
  234. package/lib/core/bff/hash.js +1 -1
  235. package/lib/core/bff/lock.js +1 -1
  236. package/lib/core/bff/utils.js +1 -1
  237. package/lib/core/db-resolver.js +1 -1
  238. package/lib/core/page/file-system.js +1 -1
  239. package/lib/core/page/hash.js +1 -1
  240. package/lib/core/page/lock.js +1 -1
  241. package/lib/core/sql-index-auditor.js +1 -1
  242. package/lib/core/sql-sync/config.js +1 -1
  243. package/lib/core/sql-sync/file-system.js +1 -1
  244. package/lib/core/sql-sync/hash.js +1 -1
  245. package/lib/core/sql-sync/lock.js +1 -1
  246. package/lib/core/sql-sync/utils.js +1 -1
  247. package/lib/core/sql-validator.js +1 -1
  248. package/lib/errors.js +1 -1
  249. package/lib/framework/build-all-flags.js +1 -1
  250. package/lib/framework/error-output.js +1 -1
  251. package/lib/framework/explicit-yes.js +1 -1
  252. package/lib/framework/flags.js +1 -1
  253. package/lib/framework/help.js +1 -1
  254. package/lib/framework/index.js +1 -1
  255. package/lib/framework/output.js +1 -1
  256. package/lib/framework/response.js +1 -1
  257. package/lib/framework/runner-alias.js +1 -1
  258. package/lib/framework/runner.js +1 -1
  259. package/lib/framework/schema-export.js +1 -1
  260. package/lib/framework/types.js +1 -1
  261. package/lib/generated/build-info.d.ts +4 -4
  262. package/lib/generated/build-info.js +1 -1
  263. package/lib/help.js +1 -1
  264. package/lib/postinstall.d.ts +3 -0
  265. package/lib/postinstall.js +1 -0
  266. package/lib/runtime/confirmation.js +1 -1
  267. package/lib/runtime/event.js +1 -1
  268. package/lib/runtime/index.js +1 -1
  269. package/lib/runtime/queue.js +1 -1
  270. package/lib/runtime/resolve.js +1 -1
  271. package/lib/skills/builtin-skill.d.ts +37 -0
  272. package/lib/skills/builtin-skill.js +1 -0
  273. package/lib/skills/main.js +1 -1
  274. package/lib/skills/npx-skills-add.d.ts +4 -2
  275. package/lib/skills/npx-skills-add.js +1 -1
  276. package/lib/skills/skill-presence.js +1 -1
  277. package/lib/telemetry/cli-command-trace.js +1 -1
  278. package/lib/telemetry/cli-help-trace.js +1 -1
  279. package/lib/telemetry/ensure-cli-otel-config.js +1 -1
  280. package/lib/telemetry/register-otel-exit-shutdown.js +1 -1
  281. package/lib/telemetry/send-cli-trace-log.js +1 -1
  282. package/lib/telemetry/send-platform-issue-collect-log.js +1 -1
  283. package/lib/utils/ai_config.js +1 -1
  284. package/lib/utils/apply-jq-filter.js +1 -1
  285. package/lib/utils/cdn-config.js +1 -1
  286. package/lib/utils/check-sdk-version.js +1 -1
  287. package/lib/utils/cli-version-check.js +1 -1
  288. package/lib/utils/cli-version-policy.js +1 -1
  289. package/lib/utils/config.js +1 -1
  290. package/lib/utils/copy-directory.js +1 -1
  291. package/lib/utils/entity-with-id.js +1 -1
  292. package/lib/utils/file-utils.js +1 -1
  293. package/lib/utils/guides-cdn.js +1 -1
  294. package/lib/utils/http-client.js +1 -1
  295. package/lib/utils/is-non-interactive.js +1 -1
  296. package/lib/utils/logger.js +1 -1
  297. package/lib/utils/params.js +1 -1
  298. package/lib/utils/platform.js +1 -1
  299. package/lib/utils/rules-cdn.js +1 -1
  300. package/lib/utils/sleep.js +1 -1
  301. package/lib/utils/template-replacer.js +1 -1
  302. package/lib/utils/update-notice.js +1 -1
  303. package/lib/utils/version.js +1 -1
  304. package/lib/utils/with-active-cookie.js +1 -1
  305. package/lib/utils/write-cli-side-channel.js +1 -1
  306. package/package.json +9 -3
  307. package/scripts/postinstall.mjs +24 -0
  308. package/skills/rabetbase/SKILL.md +493 -0
  309. package/skills/rabetbase/guides/backend-function.md +835 -0
  310. package/skills/rabetbase/guides/best-practices.md +137 -0
  311. package/skills/rabetbase/guides/bff-creation-workflow.md +148 -0
  312. package/skills/rabetbase/guides/conflict-detection.md +119 -0
  313. package/skills/rabetbase/guides/data-api-guidelines.md +414 -0
  314. package/skills/rabetbase/guides/database-connection-workflow.md +169 -0
  315. package/skills/rabetbase/guides/frontend-development.md +179 -0
  316. package/skills/rabetbase/guides/legacy-application-blueprint-workflow.md +495 -0
  317. package/skills/rabetbase/guides/menu-anomaly-manual-cleanup.md +137 -0
  318. package/skills/rabetbase/guides/page-development-workflow.md +187 -0
  319. package/skills/rabetbase/guides/react-custom-page-workflow.md +184 -0
  320. package/skills/rabetbase/guides/role-permit-workflow.md +127 -0
  321. package/skills/rabetbase/guides/sql-creation-workflow.md +173 -0
  322. package/skills/rabetbase/guides/sql-mybatis.md +126 -0
  323. package/skills/rabetbase/guides/troubleshooting.md +67 -0
  324. package/skills/rabetbase/guides/typescript-sdk.md +227 -0
  325. package/skills/rabetbase/knowledge/page-schema/LrSmartCreate.md +367 -0
  326. package/skills/rabetbase/knowledge/page-schema/LrSmartDetail.md +153 -0
  327. package/skills/rabetbase/knowledge/page-schema/LrSmartEcharts.md +291 -0
  328. package/skills/rabetbase/knowledge/page-schema/LrSmartFilter.md +478 -0
  329. package/skills/rabetbase/knowledge/page-schema/LrSmartJsx.md +119 -0
  330. package/skills/rabetbase/knowledge/page-schema/LrSmartStatistic.md +223 -0
  331. package/skills/rabetbase/knowledge/page-schema/LrSmartTable.md +632 -0
  332. package/skills/rabetbase/knowledge/page-schema/YtPage.md +172 -0
  333. package/skills/rabetbase/knowledge/page-schema/dataset-relations.md +126 -0
  334. package/skills/rabetbase/knowledge/page-schema/external-resources-usage.md +232 -0
  335. package/skills/rabetbase/knowledge/page-schema/field-components.md +312 -0
  336. package/skills/rabetbase/knowledge/page-schema/syntax-reference.md +278 -0
  337. package/skills/rabetbase/knowledge/react-page/components.md +225 -0
  338. package/skills/rabetbase/knowledge/react-page/generation-standards.md +385 -0
  339. package/skills/rabetbase/references/rabetbase-api-list.md +58 -0
  340. package/skills/rabetbase/references/rabetbase-api-pull.md +82 -0
  341. package/skills/rabetbase/references/rabetbase-app-config.md +95 -0
  342. package/skills/rabetbase/references/rabetbase-app-list.md +79 -0
  343. package/skills/rabetbase/references/rabetbase-app-members-list.md +64 -0
  344. package/skills/rabetbase/references/rabetbase-auth-login.md +53 -0
  345. package/skills/rabetbase/references/rabetbase-auth-logout.md +29 -0
  346. package/skills/rabetbase/references/rabetbase-bff-create.md +59 -0
  347. package/skills/rabetbase/references/rabetbase-bff-delete.md +42 -0
  348. package/skills/rabetbase/references/rabetbase-bff-detail.md +38 -0
  349. package/skills/rabetbase/references/rabetbase-bff-list.md +61 -0
  350. package/skills/rabetbase/references/rabetbase-bff-pull.md +42 -0
  351. package/skills/rabetbase/references/rabetbase-bff-push.md +65 -0
  352. package/skills/rabetbase/references/rabetbase-bff-save.md +63 -0
  353. package/skills/rabetbase/references/rabetbase-bff-status.md +37 -0
  354. package/skills/rabetbase/references/rabetbase-cli-skill-install.md +42 -0
  355. package/skills/rabetbase/references/rabetbase-codegen-sdk.md +35 -0
  356. package/skills/rabetbase/references/rabetbase-codegen-sql.md +33 -0
  357. package/skills/rabetbase/references/rabetbase-config.md +296 -0
  358. package/skills/rabetbase/references/rabetbase-dataset-business-group-update.md +84 -0
  359. package/skills/rabetbase/references/rabetbase-dataset-delete.md +54 -0
  360. package/skills/rabetbase/references/rabetbase-dataset-detail.md +106 -0
  361. package/skills/rabetbase/references/rabetbase-dataset-extend-update.md +70 -0
  362. package/skills/rabetbase/references/rabetbase-dataset-field-update.md +117 -0
  363. package/skills/rabetbase/references/rabetbase-dataset-generate.md +206 -0
  364. package/skills/rabetbase/references/rabetbase-dataset-list.md +42 -0
  365. package/skills/rabetbase/references/rabetbase-dataset-operations.md +34 -0
  366. package/skills/rabetbase/references/rabetbase-dataset-relation-audit.md +63 -0
  367. package/skills/rabetbase/references/rabetbase-dataset-relation-mutations.md +141 -0
  368. package/skills/rabetbase/references/rabetbase-dataset-relations.md +71 -0
  369. package/skills/rabetbase/references/rabetbase-dataset-rename.md +107 -0
  370. package/skills/rabetbase/references/rabetbase-dataset-restore.md +54 -0
  371. package/skills/rabetbase/references/rabetbase-db-analyze.md +135 -0
  372. package/skills/rabetbase/references/rabetbase-db-create.md +54 -0
  373. package/skills/rabetbase/references/rabetbase-db-delete.md +26 -0
  374. package/skills/rabetbase/references/rabetbase-db-detail.md +27 -0
  375. package/skills/rabetbase/references/rabetbase-db-diff.md +57 -0
  376. package/skills/rabetbase/references/rabetbase-db-list.md +37 -0
  377. package/skills/rabetbase/references/rabetbase-db-tables.md +25 -0
  378. package/skills/rabetbase/references/rabetbase-db-test.md +29 -0
  379. package/skills/rabetbase/references/rabetbase-db-update.md +29 -0
  380. package/skills/rabetbase/references/rabetbase-doctor.md +62 -0
  381. package/skills/rabetbase/references/rabetbase-file.md +35 -0
  382. package/skills/rabetbase/references/rabetbase-init.md +70 -0
  383. package/skills/rabetbase/references/rabetbase-issue-report.md +132 -0
  384. package/skills/rabetbase/references/rabetbase-kb.md +62 -0
  385. package/skills/rabetbase/references/rabetbase-menu-asset-update.md +135 -0
  386. package/skills/rabetbase/references/rabetbase-menu-delete.md +54 -0
  387. package/skills/rabetbase/references/rabetbase-menu-external-link-create.md +63 -0
  388. package/skills/rabetbase/references/rabetbase-menu-external-link-update.md +74 -0
  389. package/skills/rabetbase/references/rabetbase-menu-group-create.md +33 -0
  390. package/skills/rabetbase/references/rabetbase-menu-group-update.md +38 -0
  391. package/skills/rabetbase/references/rabetbase-menu-list.md +144 -0
  392. package/skills/rabetbase/references/rabetbase-menu-move.md +54 -0
  393. package/skills/rabetbase/references/rabetbase-menu-regroup-start.md +45 -0
  394. package/skills/rabetbase/references/rabetbase-menu-rename.md +48 -0
  395. package/skills/rabetbase/references/rabetbase-menu-sync.md +60 -0
  396. package/skills/rabetbase/references/rabetbase-notification-config-list.md +80 -0
  397. package/skills/rabetbase/references/rabetbase-ocr.md +86 -0
  398. package/skills/rabetbase/references/rabetbase-page-generate-start.md +32 -0
  399. package/skills/rabetbase/references/rabetbase-page-generate-status.md +32 -0
  400. package/skills/rabetbase/references/rabetbase-page-pull.md +47 -0
  401. package/skills/rabetbase/references/rabetbase-page-push.md +45 -0
  402. package/skills/rabetbase/references/rabetbase-page-react-create.md +29 -0
  403. package/skills/rabetbase/references/rabetbase-page-react-detail.md +26 -0
  404. package/skills/rabetbase/references/rabetbase-page-react-list.md +23 -0
  405. package/skills/rabetbase/references/rabetbase-page-react-publish.md +23 -0
  406. package/skills/rabetbase/references/rabetbase-page-react-update.md +24 -0
  407. package/skills/rabetbase/references/rabetbase-page-relation-binding.md +72 -0
  408. package/skills/rabetbase/references/rabetbase-page-restore.md +45 -0
  409. package/skills/rabetbase/references/rabetbase-page-sync.md +36 -0
  410. package/skills/rabetbase/references/rabetbase-permit-page-set.md +69 -0
  411. package/skills/rabetbase/references/rabetbase-permit-role-apis-set.md +53 -0
  412. package/skills/rabetbase/references/rabetbase-permit-role-menus-set.md +57 -0
  413. package/skills/rabetbase/references/rabetbase-project-create.md +46 -0
  414. package/skills/rabetbase/references/rabetbase-project-upgrade.md +57 -0
  415. package/skills/rabetbase/references/rabetbase-role-list.md +68 -0
  416. package/skills/rabetbase/references/rabetbase-role-user-add.md +54 -0
  417. package/skills/rabetbase/references/rabetbase-role-user-resolve.md +27 -0
  418. package/skills/rabetbase/references/rabetbase-run.md +53 -0
  419. package/skills/rabetbase/references/rabetbase-schema.md +22 -0
  420. package/skills/rabetbase/references/rabetbase-sql-create.md +41 -0
  421. package/skills/rabetbase/references/rabetbase-sql-delete.md +37 -0
  422. package/skills/rabetbase/references/rabetbase-sql-detail.md +32 -0
  423. package/skills/rabetbase/references/rabetbase-sql-exec.md +34 -0
  424. package/skills/rabetbase/references/rabetbase-sql-list.md +54 -0
  425. package/skills/rabetbase/references/rabetbase-sql-pull.md +54 -0
  426. package/skills/rabetbase/references/rabetbase-sql-push.md +46 -0
  427. package/skills/rabetbase/references/rabetbase-sql-status.md +39 -0
  428. package/skills/rabetbase/references/rabetbase-sql-validate.md +73 -0
  429. package/skills/rabetbase/references/rabetbase-standard-page-status.md +31 -0
  430. package/skills/rabetbase/references/rabetbase-task-status.md +40 -0
  431. package/skills/rabetbase/references/rabetbase-tenant-members-list.md +69 -0
  432. package/skills/rabetbase/references/rabetbase-update.md +56 -0
  433. package/skills/rabetbase/references/rabetbase-user-account.md +45 -0
  434. package/skills/rabetbase/references/rabetbase-workspace.md +60 -0
  435. package/skills/rabetbase.manifest.json +137 -0
@@ -0,0 +1,173 @@
1
+ # SQL 工作流规则
2
+
3
+ 前置知识:`data-api-guidelines.md`
4
+
5
+ ## 核心原则
6
+
7
+ 平台是唯一 source of truth。团队长期维护 SQL 时,优先使用 **本地同步工作流**:`sql create / pull / status / push / delete` + `.rabetbase/sql.lock.json`。
8
+
9
+ ## 工作流
10
+
11
+ ```
12
+ 确认需求 → [按需]查现有 SQL → 校验字段 → 拉/落本地(pull/new)→ 编辑本地文件 → [建议]validate → status → push/delete → detail/exec 验证
13
+ ```
14
+
15
+ ### 1. 确认需求
16
+ 写 SQL 前必须明确:查询目标、字段、筛选条件、排序分页、是否 JOIN、新建还是修改。缺失则先问用户。
17
+
18
+ ### 2. 查现有 SQL(按需)
19
+ * 新建 → 可跳过
20
+ * 修改已有 → 执行 `rabetbase sql list --format json` 找到目标,确认 `sqlCode`
21
+ * 不确定 → 查一下
22
+
23
+ 命中同名或同语义 SQL 时,停下问用户:沿用还是另建。
24
+
25
+ ### 3. 校验字段
26
+ 执行 `rabetbase dataset detail --code <数据集编码> --format json` 确认表名、字段名、字段类型。禁止凭经验猜。
27
+
28
+ ### 4. 先把 SQL 拉/落到同步目录
29
+
30
+ #### 修改已有 SQL
31
+
32
+ 先执行:
33
+
34
+ ```bash
35
+ rabetbase sql pull --sqlcode <sqlCode> --format json
36
+ ```
37
+
38
+ 把平台最新内容同步到本地。
39
+
40
+ #### 新建 SQL
41
+
42
+ 先执行:
43
+
44
+ ```bash
45
+ rabetbase sql create --name <sqlName> --db-id <dbId> --mode sql --format json
46
+ ```
47
+
48
+ 或 MyBatis XML:
49
+
50
+ ```bash
51
+ rabetbase sql create --name <sqlName> --db-id <dbId> --mode mybatisXml --format json
52
+ ```
53
+
54
+ `sql create` 会先在远端创建 SQL,再生成本地文件并写入 `.rabetbase/sql.lock.json`。
55
+
56
+ ### 5. 编辑本地 SQL(规范路径)
57
+
58
+ 长期维护的文件路径统一为:
59
+
60
+ ```text
61
+ .rabetbase/sql/<appCode>/<dbName|db-<id>>/<sqlCode>_<sqlName>.sql|xml
62
+ ```
63
+
64
+ 不要默认把长期源文件放在 `queries/`、`src/` 等目录;长期维护统一使用同步目录。
65
+
66
+ CLI 会自动维护 `@lovrabet` 头注释,例如:
67
+
68
+ ```sql
69
+ -- @lovrabet.sqlCode: 2305f915-dd48cd4c
70
+ -- @lovrabet.sqlName: getUserList
71
+ -- @lovrabet.dbId: 10001
72
+ -- @lovrabet.dbName: sample_db
73
+ -- @lovrabet.mode: sql
74
+ -- @lovrabet.syncedAt: 2026-04-11T06:47:24.325Z
75
+
76
+ select * from users
77
+ ```
78
+
79
+ 可以保留并编辑这段头注释;`sql push` 上传时会自动剥离,不会把本地元信息写回平台正文。
80
+
81
+ ### 6. 验证(建议)
82
+ 执行 `rabetbase sql validate --file <sql文件路径> --format json` 传入 SQL 文件。未通过则修正后重新验证。
83
+
84
+ ### 7. 查看同步状态
85
+
86
+ 执行:
87
+
88
+ ```bash
89
+ rabetbase sql status --format json
90
+ ```
91
+
92
+ 必要时补充:
93
+
94
+ ```bash
95
+ rabetbase sql status --remote --format json
96
+ ```
97
+
98
+ 状态含义:
99
+
100
+ * `added`:本地文件存在,但 lock 未跟踪
101
+ * `modified`:本地文件 hash、路径或文件名(`sqlName`)变化
102
+ * `missing`:lock 有记录,但本地文件缺失
103
+ * `unchanged`:本地与 lock 一致
104
+ * `remoteOnly`:只有 `--remote` 时检查远端孤儿项
105
+
106
+ ### 8. 推送到平台
107
+
108
+ 先预览:
109
+
110
+ ```bash
111
+ rabetbase sql push --sqlcode <sqlCode> --dry-run --format json
112
+ ```
113
+
114
+ 确认无误后正式执行:
115
+
116
+ ```bash
117
+ rabetbase sql push --sqlcode <sqlCode> --yes --format json
118
+ ```
119
+
120
+ 补充规则:
121
+
122
+ * 仅文件名变化时,`sql push` 会把新的文件名视作新的 `sqlName` 并回写远端
123
+ * 文件移动到新的数据库目录时,`sql push` 会尝试按目录名重新绑定 `dbId`
124
+ * 若提示 `missing remote version`,先执行 `sql pull` 刷新 lock 中的 `version`
125
+
126
+ ### 9. 测试
127
+
128
+ 推送成功后执行:
129
+
130
+ ```bash
131
+ rabetbase sql detail --sqlcode <sqlCode> --format json
132
+ rabetbase sql exec --sqlcode <sqlCode> --format json
133
+ ```
134
+
135
+ 失败则修正 → validate → status → push → detail/exec。
136
+
137
+ ### 10. 删除工作流
138
+
139
+ 先预览:
140
+
141
+ ```bash
142
+ rabetbase sql delete --sqlcode <sqlCode> --dry-run --format json
143
+ ```
144
+
145
+ 确认无误后:
146
+
147
+ ```bash
148
+ rabetbase sql delete --sqlcode <sqlCode> --yes --format json
149
+ ```
150
+
151
+ 成功后会删除远端记录,并把本地文件移动到 `.rabetbase/sql-trash/`。
152
+
153
+ ## 非 SELECT 语句
154
+
155
+ DELETE / DDL(DROP / ALTER / CREATE / TRUNCATE)属高风险,不建议进入同步主路径。
156
+ 将 SQL 写入本地草稿文件,告知用户手动在平台操作。
157
+ 草稿路径可放在同步目录旁的 `.draft.sql`,例如:
158
+
159
+ ```text
160
+ .rabetbase/sql/<appCode>/<dbName|db-<id>>/<sqlCode>_<sqlName>.draft.sql
161
+ ```
162
+
163
+ ## 冲突处理
164
+
165
+ * `sql pull` 提示 `local differs from remote` → 说明本地与远端已漂移;先和用户确认是否 `--force`
166
+ * `sql push` 失败 → 明确告诉用户是哪一条 `sqlCode` 失败、为什么失败,不要粉饰为已同步
167
+
168
+ ## SQL 调用差异
169
+
170
+ | 场景 | 前端 SDK | BFF (context.client) |
171
+ |------|---------|---------------------|
172
+ | 返回值 | `{ execSuccess, execResult }` | 直接返回数组 |
173
+ | 调用 | `client.sql.execute({ sqlCode, params })` | `context.client.sql.execute({ sqlCode, params })` |
@@ -0,0 +1,126 @@
1
+ # SQL CLI 命令与 MyBatis 语法指南
2
+
3
+ > 目标:指导 AI 如何正确使用 CLI 命令来完成 SQL 的查询、本地同步、验证、推送与测试,并提供平台支持的 MyBatis 动态 SQL 语法参考。
4
+ >
5
+ > 前置阅读:`sql-creation-workflow.md`(整体流程)、`data-api-guidelines.md`(字段约束)
6
+
7
+ ## 何时使用
8
+
9
+ 当任务满足任一条件时,必须阅读并遵守本指南:
10
+
11
+ * 需要使用 CLI 命令处理自定义 SQL
12
+ * 编写需要动态条件的复杂 SQL(如可选参数、范围过滤)
13
+ * SQL 验证报错,需要排查语法或字段问题
14
+
15
+ ## CLI 命令调用规范
16
+
17
+ 在执行 `sql-creation-workflow.md` 规定的流程时,AI 必须严格按以下方式使用 CLI 命令。
18
+
19
+ ### 1. `rabetbase sql list --format json`
20
+ * **用途**:创建或修改前,搜索同名或相似语义的 SQL。
21
+ * **动作**:若发现相似项,必须与开发者确认是否复用或另起新名,避免冗余创建。
22
+
23
+ ### 2. `rabetbase dataset detail --code xxx --format json`
24
+ * **用途**:写 SQL 前获取表结构,**绝对禁止凭空编造表名或字段名**。
25
+ * **提取项**:
26
+ * 真实表名:`basic.tableName`
27
+ * 真实字段列表:`fields` 下的 `code`、`type`、`required`
28
+ * 数据库 ID:`basic.database.dbId`(`sql create` 时需要)
29
+
30
+ ### 3. `rabetbase sql pull --sqlcode xxx` / `rabetbase sql create --name ... --db-id ... --mode ...`
31
+ * **用途**:把 SQL 先落到本地同步目录,再编辑。
32
+ * **动作**:
33
+ * 修改已有 SQL → 先 `sql pull --sqlcode <sqlCode>`
34
+ * 新建 SQL → 先 `sql create --name <sqlName> --db-id <dbId> --mode sql|mybatisXml`
35
+ * **目录**:长期维护的文件统一放在 `.rabetbase/sql/<appCode>/<dbName|db-<id>>/<sqlCode>_<sqlName>.sql|xml`
36
+
37
+ ### 4. `rabetbase sql validate --file xxx --format json`
38
+ * **用途**:推送前的建议卡点。
39
+ * **动作**:如果 `valid: false`,必须根据 `errors` 提示修改 SQL 内容,然后重新执行此命令,直到通过。
40
+
41
+ ### 5. `rabetbase sql status --format json`
42
+ * **用途**:确认当前本地文件是否被识别为 `modified` / `added` / `missing` / `unchanged`。
43
+ * **动作**:若状态与预期不符,先解释原因再继续,不要跳过状态检查直接推送。
44
+
45
+ ### 6. `rabetbase sql push --sqlcode xxx --dry-run|--yes --format json`
46
+ * **用途**:将同步目录中的本地文件上传到平台。
47
+ * **动作**:
48
+ * 先 `--dry-run` 看预览
49
+ * 再 `--yes` 正式执行
50
+ * **补充**:
51
+ * 文件名变化会驱动远端 `sqlName` 更新
52
+ * 文件移动到新的数据库目录时,会尝试按目录重绑 `dbId`
53
+ * 如果提示 `missing remote version`,先执行 `sql pull`
54
+
55
+ ### 7. `rabetbase sql exec --sqlcode xxx --format json`
56
+ * **用途**:推送成功后的功能测试。
57
+ * **动作**:测试失败(如语法错、数据不符合预期)时,必须在本地文件中修改 SQL -> 重新 validate -> 重新 status -> 重新 push -> 重新 execute,形成闭环。
58
+
59
+
60
+ ---
61
+
62
+ ## 📚 MyBatis 动态 SQL 语法参考(核心)
63
+
64
+ 平台支持 MyBatis 语法。在自定义 SQL 中处理动态参数时,必须遵守以下规范。
65
+
66
+ ### 简单参数 vs 动态参数
67
+
68
+ | 类型 | 语法 | `jdbcType` | 适用场景 |
69
+ |---|---|---|---|
70
+ | **简单参数** | `#{param}` | ❌ 不加 | 必定传入的固定条件 |
71
+ | **动态参数** | `#{param, jdbcType=TYPE}` | ✅ 必须加 | `<if>` 标签内的可选条件 |
72
+
73
+ ### 动态 SQL 示例(推荐)
74
+
75
+ ```sql
76
+ SELECT id, name, status_code
77
+ FROM company
78
+ <where>
79
+ <if test="statusCode != null and statusCode != ''">
80
+ AND status_code = #{statusCode, jdbcType=VARCHAR}
81
+ </if>
82
+ <if test="name != null and name != ''">
83
+ AND name LIKE CONCAT('%', #{name, jdbcType=VARCHAR}, '%')
84
+ </if>
85
+ <if test="startDate != null">
86
+ AND created_at &gt;= #{startDate, jdbcType=DATE}
87
+ </if>
88
+ </where>
89
+ ORDER BY id DESC
90
+ ```
91
+
92
+ ### 常用标签说明
93
+
94
+ * `<where>`:自动处理内部的 `AND` / `OR` 前缀,当内部没有条件成立时,整个 `WHERE` 关键字也不会出现。
95
+ * `<if test="条件">`:用于判空。注意:字符串应同时判断 `!= null` 和 `!= ''`,数字/布尔只需判断 `!= null`。
96
+ * `<foreach>`:常用于 `IN` 语句的数组遍历。
97
+
98
+ ### `jdbcType` 对照表
99
+
100
+ 在 `<if>` 标签内使用参数时,必须带上对应的 `jdbcType`:
101
+
102
+ | 数据类型 | `jdbcType` |
103
+ |---|---|
104
+ | 字符串 | `VARCHAR` |
105
+ | 整数 | `INTEGER` |
106
+ | 小数 | `DECIMAL` |
107
+ | 日期 | `DATE` |
108
+ | 时间戳 | `TIMESTAMP` |
109
+
110
+ ### XML 转义规则
111
+
112
+ 由于 SQL 内容会被解析为 XML,符号需要正确转义:
113
+
114
+ * **SQL 文本中**:必须转义!
115
+ * 大于号 `>` 写作 `&gt;`
116
+ * 小于号 `<` 写作 `&lt;`
117
+ * 示例:`AND created_at &gt;= #{startDate, jdbcType=DATE}`
118
+ * **`<if test="...">` 属性内**:不需要转义!
119
+ * 示例:`<if test="amount > 100">`
120
+
121
+ ## 禁止事项
122
+
123
+ * ❌ 禁止在未执行 `rabetbase sql validate` 通过前,直接执行 `rabetbase sql push`
124
+ * ❌ 禁止在 `<if>` 标签的参数绑定中漏写 `jdbcType`
125
+ * ❌ 禁止在简单固定参数(不在标签内)里加 `jdbcType`
126
+ * ❌ 禁止把 `<` 或 `>` 直接写在 SQL 正文中(必须用 `&lt;` / `&gt;`)
@@ -0,0 +1,67 @@
1
+ # AI 故障诊断手册 (Troubleshooting)
2
+
3
+ > 目标:当执行代码报错,或用户向 AI 抛出"报错日志 / 没数据 / 查不到"时,约束 AI 的第一排查反应,避免顺着错误方向盲目改代码。
4
+ >
5
+ > 前置阅读:`data-api-guidelines.md`
6
+
7
+ ## 何时使用
8
+
9
+ 当遇到以下情况时,AI 必须进入本指南定义的诊断模式:
10
+ * 用户说"查询没有结果"、"空数组"
11
+ * 控制台报错"参数格式不正确"、"字段不存在"、"表不存在"
12
+ * 用户说"BFF 返回结构不对"、"SQL 报错"
13
+ * CLI 命令执行失败,提示"Dataset not found"
14
+
15
+ ---
16
+
17
+ ## 诊断肌肉记忆(强制)
18
+
19
+ ### 1. 听到"查不到数据"、"空数组"
20
+ **AI 的第一反应**:检查是否漏写了操作符。
21
+
22
+ * ❌ 错误排查方向:怀疑数据库没连上、怀疑数据集配错
23
+ * ✅ **强制动作**:检查 `where` 对象里是否直接写了值(如 `status: "active"`)。必须补上操作符(如 `status: { $eq: "active" }`)。
24
+
25
+ ### 2. 听到"参数格式不正确"
26
+ **AI 的第一反应**:检查分页、排序、字段选择的参数名是否写成了老旧格式。
27
+
28
+ * ❌ 错误排查方向:怀疑后端 API 坏了
29
+ * ✅ **强制动作**:
30
+ * 检查是否误用了 `fields`,必须改为 `select`
31
+ * 检查是否误用了 `sort`,必须改为 `orderBy`
32
+ * 检查是否误用了 `page` / `limit`,必须改为 `currentPage` / `pageSize`
33
+
34
+ ### 3. 听到"SQL 报错:表不存在/字段不存在"
35
+ **AI 的第一反应**:立刻执行 `rabetbase dataset detail --code xxx --format json` 核对 Schema。
36
+
37
+ * ❌ 错误排查方向:按自己的猜测随便换一个字段名重试
38
+ * ✅ **强制动作**:
39
+ 1. 执行 `rabetbase dataset detail --code xxx --format json` 获取真实数据集信息
40
+ 2. 提取 `basic.tableName` 作为表名
41
+ 3. 逐一核查报错字段是否存在于 `fields` 列表中,注意大小写
42
+ 4. 确认无误后再重新生成 SQL 并通过 `rabetbase sql validate --file xxx --format json` 验证
43
+
44
+ ### 4. 听到"BFF 查不到数据 / 字段是 undefined"
45
+ **AI 的第一反应**:检查 BFF 中的 API 调用方式和 SQL 结果提取。
46
+
47
+ * ❌ 错误排查方向:给 BFF 增加前端 SDK 包装结构
48
+ * ✅ **强制动作**:
49
+ * 检查单条查询是否误用了 `findOne`,必须改为 `getOne`
50
+ * 检查 SQL 执行是否用了 `result.execResult`,在 BFF 中,`context.client.sql.execute` **直接返回数组**,没有 `execResult` 这一层
51
+
52
+ ### 5. 听到"CLI 报错 / Dataset not found"
53
+ **AI 的第一反应**:检查基础连通性,指导用户确认环境。
54
+
55
+ * ❌ 错误排查方向:建议用户重装各种库
56
+ * ✅ **强制动作**:
57
+ * 建议用户检查 `.lovrabetrc`(或其他配置)中的 `appcode` 是否正确
58
+ * 建议用户在终端执行 `rabetbase auth` 检查是否未登录或 Cookie 过期
59
+ * 帮用户执行 `rabetbase dataset list --format json` 确认该环境到底有哪些可用数据集
60
+
61
+ ---
62
+
63
+ ## 核心原则
64
+
65
+ * **不要猜**:只要涉及"不存在"、"不匹配",第一步永远是通过 CLI 命令(如 `rabetbase dataset detail`)拉取最新真实数据。
66
+ * **不要盲试**:在没有分析出具体根因前,不要试图通过微调参数名盲目重试。
67
+ * **分清端环境**:报错若是发生在前/后端交互边界,第一时间弄清是前端 SDK 的事,还是 BFF 脚本里的事,两者的返回值和对象结构不同。
@@ -0,0 +1,227 @@
1
+ # SDK 编码规则与 API 约束
2
+
3
+ > 目标:约束 AI 在前端与 Node 环境中生成 Lovrabet SDK 代码时的用法,杜绝凭借通用经验瞎猜 API 结构。
4
+ >
5
+ > 适用范围:前端 / Node 环境中通过 `@lovrabet/sdk` 初始化后的 `client` 调用。
6
+ > BFF 脚本中的 `context.client` 由平台注入,API 子集与前端 SDK 有差异;编写 BFF 时以 `backend-function.md` 为准。
7
+
8
+ ## 何时使用
9
+
10
+ 当任务涉及以下动作时,必须阅读并遵守本指南:
11
+ * 初始化 Lovrabet Client
12
+ * 编写模型/数据集的查询与写入代码
13
+ * 在前端或中台服务中执行自定义 SQL
14
+ * 在前端调用 Backend Function (BFF)
15
+ * 处理 API 返回的错误或业务异常
16
+
17
+ 不要把本指南里的 `createClient`、`registerModels` 等前端 / Node SDK 初始化能力套用到 BFF。BFF 内只使用平台注入的 `context.client`。
18
+
19
+ ## 初始化规则
20
+
21
+ 必须使用 `createClient` 命名导出,禁止使用 `new LovrabetClient()`:
22
+
23
+ ```typescript
24
+ import { createClient } from "@lovrabet/sdk";
25
+
26
+ const client = createClient({
27
+ appCode: "your-app-code",
28
+ accessKey: process.env.RABETBASE_ACCESS_KEY, // 仅在服务端使用
29
+ models: [
30
+ { tableName: "users", datasetCode: "39f758e7b38c476b8bb3996771a601a1", alias: "users" }
31
+ ],
32
+ });
33
+ ```
34
+
35
+ ## 1. 模型查询 (Filter API)
36
+
37
+ 这是操作模型(表)的**最高优** API。
38
+
39
+ ### 强制参数名称
40
+ 绝不允许用错以下参数名:
41
+ * ❌ `fields` -> ✅ `select`
42
+ * ❌ `sort` -> ✅ `orderBy`
43
+ * ❌ `page` / `limit` -> ✅ `currentPage` / `pageSize`
44
+
45
+ ### 强制操作符
46
+ `where` 条件中**禁止直接写值**,必须使用操作符:
47
+ * ❌ `where: { status: 'active' }`
48
+ * ✅ `where: { status: { $eq: 'active' } }`
49
+
50
+ 支持的操作符:`$eq`, `$ne`, `$gte`, `$lte`, `$gt`, `$lt`, `$contain`, `$startWith`, `$endWith`, `$in`。
51
+
52
+ 逻辑组合:
53
+ ```typescript
54
+ where: {
55
+ $and: [
56
+ { age: { $gte: 18 } },
57
+ { $or: [{ status: { $eq: "pending" } }, { status: { $eq: "processing" } }] }
58
+ ]
59
+ }
60
+ ```
61
+
62
+ ### 多表关联(自动 JOIN)
63
+ * 仅支持 1:1 或 N:1
64
+ * 关联字段引用必须使用**表名**(如 `profile.username`),不能用 datasetCode。
65
+ * 只有提前通过 CLI 命令分析出有外键关联的,才能这么写。
66
+
67
+ ```typescript
68
+ // 示例:查询文章及其关联的作者信息
69
+ const result = await client.models.article.filter({
70
+ select: ["id", "title", "profile.username"],
71
+ where: { "profile.is_signed": { $eq: true } }
72
+ });
73
+ ```
74
+
75
+ ### 写入与删除操作(SDK >= 1.2.0)
76
+
77
+ 从 SDK v1.2.0 开始,update 和 delete 支持对象模式(推荐,与 BFF 一致)和兼容模式两种写法,单次最多 **1000 条**记录。
78
+
79
+ #### 更新(Update)
80
+
81
+ **接口**:
82
+ ```typescript
83
+ client.models.dataset_[code].update({
84
+ id: number | string | (number | string)[]; [key: string]: any
85
+ })
86
+ ```
87
+
88
+ **示例**:
89
+ ```typescript
90
+ // 单条更新
91
+ await client.models.customer.update({ id: 1001, status: 'active' });
92
+
93
+ // 批量更新
94
+ await client.models.customer.update({
95
+ id: [1, 2, 3, 4, 5],
96
+ status: 'active',
97
+ updateTime: new Date().toISOString()
98
+ });
99
+ ```
100
+
101
+ **注意事项**:
102
+ - 单次最多更新 **1000 条**
103
+ - 原子操作:要么全部成功,要么全部失败
104
+ - 不能批量修改主键字段
105
+ - 不能将必填字段设置为空值
106
+
107
+ #### 删除(Delete)
108
+
109
+ **接口**:
110
+ ```typescript
111
+ client.models.dataset_[code].delete({ id: number | string | (number | string)[] })
112
+ ```
113
+
114
+ **示例**:
115
+ ```typescript
116
+ // 单条删除
117
+ await client.models.customer.delete({ id: 1001 });
118
+
119
+ // 批量删除
120
+ const inactiveUsers = await client.models.customer.filter({
121
+ where: { lastLoginTime: { $lt: '2026-01-01' } },
122
+ select: ['id']
123
+ });
124
+
125
+ await client.models.customer.delete({
126
+ id: inactiveUsers.map(u => u.id)
127
+ });
128
+ ```
129
+
130
+ **注意事项**:
131
+ - 单次最多删除 **1000 条**
132
+ - 删除操作不可逆,建议先备份
133
+ - 如果有外键约束,需要先删除关联数据
134
+
135
+ #### 分批处理超过 1000 条的数据
136
+
137
+ 当数据量超过 1000 时,需要手动分批:
138
+
139
+ ```typescript
140
+ async function updateInBatches(ids: number[], batchSize = 1000) {
141
+ for (let i = 0; i < ids.length; i += batchSize) {
142
+ const batch = ids.slice(i, i + batchSize);
143
+ await client.models.customer.update({ id: batch, status: 'processed' });
144
+ console.log(`已处理 ${i + batch.length} / ${ids.length}`);
145
+ }
146
+ }
147
+ ```
148
+
149
+ ### 别名模式(Alias Pattern)
150
+
151
+ 如果在前端 / Node SDK 中使用 `registerModels` 定义了别名,批量操作同样支持。此能力不适用于 BFF 的 `context.client`。
152
+
153
+ ```typescript
154
+ // 注册别名
155
+ client.registerModels({
156
+ primary: 'dataset_abc123',
157
+ detail: 'dataset_def456'
158
+ });
159
+
160
+ // 使用别名批量操作
161
+ await client.models.primary.update({ id: [1, 2, 3], status: 'active' });
162
+ ```
163
+
164
+ ## 2. 自定义 SQL (SQL API)
165
+
166
+ ### 强制返回值处理
167
+ SDK 中的 SQL API 返回的是**业务数据层**,包含 `execSuccess` 和 `execResult`:
168
+ * **必须**判断 `execSuccess`,不能直接读结果。
169
+ * 这与 BFF 环境中直接返回数组(不带 execResult)有本质区别,**不要混用**。
170
+
171
+ ```typescript
172
+ // ✅ 前端/Node SDK 调用 SQL:
173
+ const data = await client.sql.execute<MyRowType>({
174
+ sqlCode: "fc8e7777-06e3847d",
175
+ params: { userId: "123" },
176
+ });
177
+
178
+ if (data.execSuccess && data.execResult) {
179
+ console.log(data.execResult); // T[]
180
+ } else {
181
+ console.error("业务级SQL执行失败");
182
+ }
183
+ ```
184
+
185
+ ## 3. 前端 / Node 调用 Backend Function (BFF API)
186
+
187
+ ### 强制返回值处理
188
+ 调用 BFF 返回的直接是你在脚本中 `return` 的业务数据对象。
189
+ * 这里**没有** `execSuccess` 或 `execResult`。
190
+
191
+ ```typescript
192
+ // ✅ 调用 BFF
193
+ const dashboard = await client.bff.execute<DashboardData>({
194
+ scriptName: "getUserDashboard",
195
+ params: { userId: "123" },
196
+ });
197
+
198
+ // 直接使用业务数据
199
+ console.log(dashboard.userCount);
200
+ ```
201
+
202
+ ## 异常处理底线
203
+
204
+ 所有通过 `client` 发起的网络调用都可能抛出 HTTP 级别的错误,AI 必须养成使用 `try...catch` 包裹代码的习惯,并识别 `LovrabetError`。
205
+
206
+ ```typescript
207
+ import { LovrabetError } from "@lovrabet/sdk";
208
+
209
+ try {
210
+ const result = await client.models.users.getOne({ id });
211
+ } catch (error) {
212
+ if (error instanceof LovrabetError) {
213
+ console.error("HTTP/框架级错误:", error.message, error.code);
214
+ } else {
215
+ console.error("其他运行时错误:", error);
216
+ }
217
+ }
218
+ ```
219
+
220
+ ## AI 自检清单
221
+ 每次生成 SDK 相关代码时,AI 应隐式自问:
222
+ * [ ] 是否把 `select` 写成了 `fields`?
223
+ * [ ] 是否把 `orderBy` 写成了 `sort`?
224
+ * [ ] `where` 对象里是否老老实实带了 `$eq` 等操作符?
225
+ * [ ] 处理 SQL 的返回值时,判断了 `execSuccess` 吗?
226
+ * [ ] 处理 BFF 的返回值时,是不是直接使用了业务数据?
227
+ * [ ] 加入了 `try...catch` 块防止整个应用崩溃吗?