@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,414 @@
1
+ # 数据接口访问规范
2
+
3
+ > **目标**:统一前后端数据接口访问方式,确保性能最优、数据准确
4
+ >
5
+ > **适用范围**:前端页面开发、Backend Function 编写、SQL 查询编写
6
+
7
+ ---
8
+
9
+ ## 核心原则
10
+
11
+ | 原则 | 说明 |
12
+ |------|------|
13
+ | **先获取数据集详情** | 使用 CLI 命令获取字段信息和依赖关系 |
14
+ | **分析主外键关系** | 理解表间关联,正确处理下拉框数据 |
15
+ | **使用真实接口** | 不使用 mock 数据,直接调用数据集接口 |
16
+ | **避免循环访问** | 批量查询替代循环单个查询 |
17
+ | **性能优先** | 单次接口调用次数 < 50 次 |
18
+
19
+ ---
20
+
21
+ ## 编写前强制检查清单
22
+
23
+ 在编写任何数据访问代码前,**必须先完成以下检查**:
24
+
25
+ - [ ] 使用 `rabetbase dataset detail --code <数据集编码> --format json` 获取数据集完整字段与操作信息
26
+ - [ ] 核对字段名(区分大小写)、类型、是否必填、枚举选项
27
+ - [ ] 分析数据集依赖关系(主外键约束)
28
+ - [ ] 识别外键字段,确定下拉框数据来源
29
+
30
+ **注意**:系统自动维护字段(id、create_time 等)的处理方式,详见 `backend-function.md`。
31
+
32
+ **CLI 信封、`data.*` 键位、平台 `get-driven-data` 与 CLI 归一化对照**:单一权威见 [`references/rabetbase-dataset-detail.md`](../references/rabetbase-dataset-detail.md)。
33
+
34
+ **不要复制示例字段名。** 本指南里的表名、字段名、枚举值只用于说明形态;真实代码必须从当前项目的 `rabetbase dataset detail` 输出中取 `data.fields[]`、`data.relations[]` 和 `data.dbtable`。
35
+
36
+ ---
37
+
38
+ ## 先判定数据访问路线
39
+
40
+ 在决定写 SQL、BFF 还是直接查数据前,先看 `rabetbase dataset detail --code <数据集编码> --format json` 的 `source`:
41
+
42
+ | `source` | 建议路线 |
43
+ |----------|----------|
44
+ | `METADATA` | **不要走 SQL / aggregate**;优先 `filter` / `getOne` / `create` / `update` / `delete` 等平台返回的标准操作;BFF HOOK 可挂载,operation 以后端返回为准 |
45
+ | `CUSTOM` / `DB` | 可继续评估 SQL、BFF 或标准数据接口 |
46
+
47
+ ---
48
+
49
+ ## 元数据取值规则
50
+
51
+ 字段事实以 `rabetbase dataset detail` 的归一化输出为准:
52
+
53
+ | 目标 | 路径 | 规则 |
54
+ |------|------|------|
55
+ | 字段名 | `data.fields[].name` | 查询、写入、SQL 列名均使用它,不猜通用字段名 |
56
+ | 聚合列名 | `aggregate[].column` | SDK aggregate 定义使用 `column`,不要写旧别名 `field` |
57
+ | 必填字段 | `data.fields[].required` | `true` 表示创建/写入时需处理,平台自动维护字段除外 |
58
+ | 枚举/选择值 | `data.fields[].options[].value` | 写入持久化 `value`,不要写展示用的 `label` |
59
+ | 外键关系 | `data.relations[]` / `dataset relations` | 只有确认存在关系后才写关联查询或校验 |
60
+
61
+ 常用投影:
62
+
63
+ ```bash
64
+ rabetbase dataset detail --code <数据集编码> --format compress \
65
+ --jq '.data.fields[] | {name, displayName, type, required, options}'
66
+ ```
67
+
68
+ ---
69
+
70
+ ## 可选:`lovrabet` CLI 查数(`data filter` / `data getOne`)
71
+
72
+ 本 skill 的**主路径**始终基于 **`rabetbase`**(`dataset detail`、`sql exec` 等),**不要求**安装其它 CLI。
73
+
74
+ 若开发者本机已单独安装 **Lovrabet 运行时 CLI**(npm 包 **`@lovrabet/lovrabet-cli`**,命令名 **`lovrabet`**),可在终端用 **`lovrabet data filter`**、**`lovrabet data getOne`** 按 **与 `@lovrabet/sdk` 相同的语义** 查询数据集行数据,并直接查看 JSON 结构,便于与前端 / BFF 里的 `filter`、`getOne` 对照调试。
75
+
76
+ **版本要求:须 `lovrabet` CLI ≥ 2.0**(主版本 2 及以上)。低于 2.0 的旧包**没有**与本文一致的 `data filter` / `data getOne` 能力(或行为不同),请勿按本节操作;请升级:`npm install -g @lovrabet/lovrabet-cli@^2.0.0`(或 `latest`)。自检:`lovrabet --version`。
77
+
78
+ **注意:**
79
+
80
+ | 点 | 说明 |
81
+ |----|------|
82
+ | **非必备** | 团队未必全局安装 `lovrabet`;**不要**在文档或 Agent 流程里把 `lovrabet` 写成前置条件。 |
83
+ | **≥ 2.0** | 本节所述 `data` 子命令以 **2.0+** 为准;版本不符时先升级,勿将异常当作 skill 错误。 |
84
+ | **未安装时** | 仍用 `rabetbase dataset detail` 拿结构;要看真实数据可用 **`rabetbase sql exec`**(已有对应 `sqlCode`)、或平台控制台;勿假设用户会去装第二个 CLI。 |
85
+ | **配置与认证** | `lovrabet` 与 `rabetbase` 的配置项、鉴权方式**可能不完全相同**,需按各自 CLI 文档分别配置;勿照搬一条 `rabetbase` 的 flag 就认为 `lovrabet` 等价。 |
86
+ | **详细用法** | 以 `lovrabet data --help`、`lovrabet data filter --help` 为准(参数多为 `--code` + `--params` JSON)。 |
87
+
88
+ 示例(仅作形态参考,需本机已安装且已登录/配置):
89
+
90
+ ```bash
91
+ lovrabet data filter --code <数据集code> --params '{"where":{...},"currentPage":1,"pageSize":10}' --format json
92
+ lovrabet data getOne --code <数据集code> --params '{"id":123}' --format json
93
+ ```
94
+
95
+ ---
96
+
97
+ ## 步骤 1: 获取数据集详情
98
+
99
+ ```bash
100
+ rabetbase dataset detail --code <数据集编码> --format json
101
+ ```
102
+
103
+ 字段表、归一化规则、`dbtable`、jq 示例:**见 [`references/rabetbase-dataset-detail.md`](../references/rabetbase-dataset-detail.md)**。
104
+
105
+ 做行数据验证时,补一个现实预期:
106
+
107
+ - **不要默认 `filter()` 返回完整字段**。列表接口常为展示做裁剪,某些字段可能缺失。
108
+ - 需要确认“某条记录的完整字段”或依赖关键字段时,优先 `getOne({ id })`。
109
+ - 遇到 `USER` 类型字段时,留意同名的 `_label` 扩展对象(如 `creator_id_label`、`assignee_id_label`),很多展示信息已在其中,无需立刻反查 SQL 或额外写 BFF。
110
+
111
+ ### 错误处理
112
+
113
+ **CLI 命令执行失败时**:
114
+
115
+ 检查以下常见问题:
116
+ 1. 数据集编码是否正确
117
+ 2. 是否有权限访问该数据集
118
+ 3. CLI 是否已正确认证(`rabetbase auth`)
119
+
120
+ **Backend Function 中的错误处理**:
121
+
122
+ ```javascript
123
+ export default async function validateRelatedRecord(params, context) {
124
+ const result = await context.client.models["dataset_0123456789abcdef0123456789abcdef"].filter({
125
+ where: { id: { $eq: params.related_id } },
126
+ select: ['id', '<displayField>']
127
+ });
128
+
129
+ if (!result.tableData || result.tableData.length === 0) {
130
+ throw new Error(`关联记录 ${params.related_id} 不存在`);
131
+ }
132
+
133
+ // 继续业务逻辑...
134
+ }
135
+ ```
136
+
137
+ ---
138
+
139
+ ## 步骤 2: 分析字段依赖关系
140
+
141
+ ### 主外键关系分析
142
+
143
+ **从数据集详情中获取依赖关系**,重点关注:
144
+
145
+ ```
146
+ 主数据集依赖关系示例:
147
+ 1. related_id → related_table.id (外键)
148
+ - 创建主记录时 related_id 必须存在
149
+ - 下拉框数据来自关联数据集
150
+ - 需要显示关联记录名称,存储 related_id
151
+
152
+ 2. item_id → item_table.id (外键)
153
+ - 下拉框数据来自另一关联数据集
154
+ - 需要显示条目名称,存储 item_id
155
+
156
+ 3. status (无外键,`type` 为 SELECT)
157
+ - 枚举字段,直接使用 `data.fields[].options` 数组
158
+ - 不需要额外接口请求
159
+ ```
160
+
161
+ ### 下拉框数据来源推理
162
+
163
+ | 字段类型 | 识别方式 | 数据来源 | 处理方式 |
164
+ |---------|---------|---------|---------|
165
+ | **外键字段** | `relations[]` 中有对应记录 | 关联的数据集 | 调用关联数据集的 filter 接口 |
166
+ | **枚举字段** | `type === "SELECT"` 且 `options` 非空 | `data.fields[].options` | 写入 `option.value`,展示 `option.label` |
167
+ | **级联选择** | 父字段决定子字段 | 父字段变化时动态加载 | 监听父字段变化,动态加载子选项 |
168
+
169
+ 枚举/选择字段的 `label` 只用于展示,写入 BFF、SDK 或 SQL 参数时使用对应 `value`。`value` 的类型以数据集详情为准,可能是字符串、数字或其它平台约定类型。
170
+
171
+ **前端示例**:
172
+
173
+ ```tsx
174
+ // 分析:status 字段 type === "SELECT",options 已有枚举值
175
+ // 直接从字段定义取,不需要接口请求
176
+ const statusOptions = field.options.map(o => ({ label: o.label, value: o.value }));
177
+
178
+ // 分析:related_id 是外键,关联另一个数据集
179
+ // 需要获取关联记录列表作为下拉框数据
180
+ const [relatedRecords, setRelatedRecords] = useState([]);
181
+
182
+ useEffect(() => {
183
+ client.models.related.filter({
184
+ select: ['id', '<displayField>'],
185
+ where: { status: { $eq: 'active' } }
186
+ }).then(result => {
187
+ setRelatedRecords(result.tableData || []);
188
+ });
189
+ }, []);
190
+
191
+ // 下拉框配置
192
+ const relatedOptions = relatedRecords.map(record => ({
193
+ label: record["<displayField>"],
194
+ value: record.id,
195
+ }));
196
+ ```
197
+
198
+ **Backend Function 示例**:
199
+
200
+ ```javascript
201
+ // 分析:related_id 是外键
202
+ // 创建记录前需要校验关联记录是否存在
203
+
204
+ const related = await relatedDS.getOne({ id: params.related_id });
205
+ if (!related) {
206
+ throw new Error(`关联记录 ${params.related_id} 不存在`);
207
+ }
208
+ ```
209
+
210
+ ---
211
+
212
+ ## 步骤 3: 使用真实接口
213
+
214
+ ### 禁止使用 Mock 数据
215
+
216
+ ```tsx
217
+ // ❌ 错误:使用 mock 数据
218
+ const STATIC_OPTIONS = [
219
+ { label: '示例A', value: 1 },
220
+ { label: '示例B', value: 2 },
221
+ ];
222
+
223
+ // ✅ 正确:使用真实接口
224
+ const [relatedRecords, setRelatedRecords] = useState([]);
225
+ useEffect(() => {
226
+ client.models.related.filter({
227
+ select: ['id', '<displayField>'],
228
+ }).then(result => {
229
+ setRelatedRecords(result.tableData || []);
230
+ });
231
+ }, []);
232
+ ```
233
+
234
+ ### 标准接口调用方式
235
+
236
+ **前端**:
237
+
238
+ ```tsx
239
+ import { createClient } from '@lovrabet/sdk';
240
+
241
+ const client = createClient({ appCode: 'your-app-code' });
242
+
243
+ // 查询列表
244
+ const result = await client.models.dataset_0123456789abcdef0123456789abcdef.filter({
245
+ where: { status: { $eq: 'active' } },
246
+ select: ['id', 'name'],
247
+ pageSize: 100,
248
+ });
249
+
250
+ const data = result.tableData || [];
251
+ ```
252
+
253
+ **Backend Function**:
254
+
255
+ ```javascript
256
+ // 使用 context.client 访问数据集
257
+ const models = context.client.models;
258
+ const TABLES = {
259
+ primary: 'dataset_0123456789abcdef0123456789abcdef', // 数据集: <displayName> | 数据表: <tableName>
260
+ };
261
+
262
+ const result = await models[TABLES.primary].filter({
263
+ where: { status: { $eq: 'active' } },
264
+ select: ['id', '<fieldName>'],
265
+ });
266
+ ```
267
+
268
+ ---
269
+
270
+ ## 步骤 4: 性能优化(避免循环访问)
271
+
272
+ ### 场景识别
273
+
274
+ 代码中出现**循环内调用接口**时,必须优化:
275
+
276
+ ```tsx
277
+ // ❌ 性能灾难:N 次接口调用
278
+ for (const row of rows) {
279
+ const related = await getRelatedRecord(row.related_id);
280
+ }
281
+ ```
282
+
283
+ ### 优化方案选择
284
+
285
+ ```
286
+ 循环访问接口(N 次调用)
287
+ │
288
+ ├─ 关联类型是 1:1 或 N:1?
289
+ │ │
290
+ │ ├─ 是 → 使用 filter 多表关联查询(推荐)
291
+ │ │ 一次查询,自动 JOIN
292
+ │ │
293
+ │ └─ 否 → 使用批量查询($in)
294
+ │ 一次查询,手动映射
295
+ ```
296
+
297
+ ### 方案 1:多表关联查询(推荐)
298
+
299
+ <span style={{fontSize: '0.9em', color: '#888'}}>v1.2.0+</span>
300
+
301
+ **适用于**:1:1 或 N:1 关联(主记录→关联记录、成员→组织等)
302
+
303
+ ```tsx
304
+ // ✅ 一次查询,自动 JOIN
305
+ const result = await client.models.primary.filter({
306
+ select: [
307
+ "id", "record_no",
308
+ "related.name", // 关联表字段
309
+ "related.level" // 关联表字段
310
+ ],
311
+ where: {
312
+ status: { $eq: "pending" },
313
+ "related.level": { $eq: "important" }
314
+ },
315
+ });
316
+
317
+ // result.tableData[0].related.name ← 直接可用
318
+ ```
319
+
320
+ ### 方案 2:批量查询
321
+
322
+ **适用于**:复杂场景或不支持多表关联时
323
+
324
+ ```tsx
325
+ // ✅ 一次查询,$in 批量获取
326
+ const relatedIds = [...new Set(rows.map(row => row.related_id))];
327
+ const relatedRows = await client.models.related.filter({
328
+ where: { id: { $in: relatedIds } },
329
+ select: ['id', 'name']
330
+ });
331
+ const relatedMap = Object.fromEntries(
332
+ relatedRows.tableData?.map(row => [row.id, row.name]) || []
333
+ );
334
+ rows.forEach(row => row.relatedName = relatedMap[row.related_id]);
335
+ ```
336
+
337
+ ### 性能对比
338
+
339
+ | 方案 | 调用次数 | 耗时 |
340
+ |------|---------|------|
341
+ | 循环单条(100 条) | 100 次 | ~10 秒 |
342
+ | 多表关联 | 1 次 | ~0.1 秒 |
343
+ | 批量查询 | 1 次 | ~0.1 秒 |
344
+
345
+ ---
346
+
347
+ ## 步骤 5: 批量操作优化
348
+
349
+ ### 大量数据写入场景
350
+
351
+ **场景**:批量复制 100 条记录
352
+
353
+ ```javascript
354
+ // ❌ 错误:循环创建(100 次接口调用)
355
+ for (const row of rows) {
356
+ await model.create(row);
357
+ }
358
+
359
+ // ✅ 正确:使用自定义 SQL(1 次接口调用)
360
+ await context.client.sql.execute({
361
+ sqlCode: "batch-copy-records",
362
+ params: { sourceId, targetId }
363
+ });
364
+ ```
365
+
366
+ **自定义 SQL 创建流程**:
367
+
368
+ 1. 优先使用 `rabetbase sql create` 创建 SQL(此时平台端已创建记录),再在本地同步目录中编辑并通过 `sql push` 更新
369
+ 2. 获得返回或已存在的 `sqlCode`
370
+ 3. 在代码中调用 `context.client.sql.execute({ sqlCode, params })`
371
+
372
+ 详见:`sql-creation-workflow.md`
373
+
374
+ ---
375
+
376
+ ## 检查清单
377
+
378
+ ### 前端页面开发
379
+
380
+ - [ ] **已获取数据集详情**:使用 CLI 命令获取字段和依赖关系
381
+ - [ ] **外键字段已识别**:下拉框数据来自关联数据集接口
382
+ - [ ] **枚举字段已处理**:展示使用 `options[].label`,写入使用 `options[].value`
383
+ - [ ] **未使用 mock 数据**:所有下拉框数据来自真实接口
384
+ - [ ] **无循环访问**:优先使用多表关联查询,或使用批量查询
385
+ - [ ] **字段名正确**:使用 `data.fields[].name`(列名),区分大小写,与数据集定义一致
386
+ - [ ] **系统字段已识别**:结合 `data.dbtable` 与 `backend-function.md`,创建/更新时间等按平台约定不传
387
+ - [ ] **关联表使用表名**:多表关联时使用 `tableName.fieldName` 格式
388
+
389
+ ### Backend Function 开发
390
+
391
+ - [ ] **已获取数据集详情**:使用 CLI 命令获取字段和依赖关系
392
+ - [ ] **主外键关系已分析**:理解表间关联关系
393
+ - [ ] **必填字段已覆盖**:`data.fields[].required === true` 的业务字段已提供值
394
+ - [ ] **枚举字段写入正确**:写入 `options[].value`,不是展示 `label`
395
+ - [ ] **外键校验已处理**:创建/更新前校验外键有效性
396
+ - [ ] **系统字段未设置**:主键自增、系统时间等按平台约定不手工传入,详见 `backend-function.md`
397
+ - [ ] **无循环访问**:使用 filter + $in 批量查询
398
+ - [ ] **批量操作已优化**:大量数据操作使用自定义 SQL
399
+
400
+ ### SQL 开发
401
+
402
+ - [ ] **已获取数据集详情**:通过 `data.dbtable.tableName` 确认表名,通过 `data.dbtable.dbId` 确认数据库
403
+ - [ ] **必填字段已确认**:INSERT 包含所有业务必填字段(`data.fields[].required === true` 中需由调用方传入的列)
404
+ - [ ] **主外键关系已分析**:JOIN 条件使用 `data.dbtable.pkField` 等
405
+ - [ ] **SQL 已验证**:使用 `rabetbase sql validate` 验证
406
+ - [ ] **SELECT 已测试**:使用 `rabetbase sql exec` 测试
407
+
408
+ ---
409
+
410
+ ## 相关指南
411
+
412
+ - **前端页面开发**:`frontend-development.md`
413
+ - **SQL 创建工作流**:`sql-creation-workflow.md`
414
+ - **Backend Function 规范**:`backend-function.md`
@@ -0,0 +1,169 @@
1
+ # 数据库连接(db)工作流
2
+
3
+ 前置知识:`auth` 已登录,并已通过 `.rabetbase.json` 或 `--appcode` 提供 **appcode**。详见 [SKILL.md](../SKILL.md)「前置条件」。
4
+
5
+ ## 解决什么问题
6
+
7
+ | 场景 | 说明 |
8
+ |------|------|
9
+ | 接入已有 MySQL/PostgreSQL 等 | 在平台登记 **dblink**,供后续同步表结构、生成数据集 |
10
+ | 改连接串 / 账号 | 更新已有连接,避免在界面点来点去 |
11
+ | 验证网络与白名单 | **测连**确认研发环境能打到库 |
12
+ | 同步结构到 Lovrabet | **分析任务**把表结构同步到平台;可看进度、取消 |
13
+ | 看物理表与差异 | **tables / diff** 在写 SQL、对表前确认真实库状态 |
14
+
15
+ **与 `dataset` 的区别**:`dataset detail` 里的 `dbId` 来自数据集绑定;**`db list` 的 `id` 是 dblink 主键**,二者数值上通常一致,但 **CLI 管连接用 `db *`,管模型用 `dataset *`**。
16
+
17
+ ## 前置参数从哪拿
18
+
19
+ ```text
20
+ appcode → 配置 / rabetbase app list / --appcode app-xxxx
21
+ dblink id → rabetbase db list 返回 connections[].id(或工作台「数据库连接」列表上的 id)
22
+ trace/plan → 见下一节(分析任务专用)
23
+ ```
24
+
25
+ ## traceId / planId(`db analyze-*` 用)
26
+
27
+ 三者等价说法:**分析任务 id、plan id、trace id**(平台字段名多为 `latestAnalysisTraceId`)。
28
+
29
+ | 来源 | 命令 | 字段 |
30
+ |------|------|------|
31
+ | 列表快照 | `db list` | 每条连接 `latestAnalysisTraceId`、`latestAnalysisStatus` |
32
+ | 单条详情 | `db detail --id <n>` | 同上 |
33
+ | 刚启动的任务 | `db analyze-start --id <n>` | 响应 `data.planId` |
34
+
35
+ **`db analyze-status`**:必须传 **`--plan <id>`**,值来自上表之一。
36
+
37
+ **`db analyze-cancel`**:必须显式传入要取消的既有任务 **`--plan <id>`**。优先使用当前正在跟踪的原 `planId`;`latestAnalysisTraceId` 只是连接快照,不得覆盖已知目标。
38
+
39
+ ## 推荐流程(Agent)
40
+
41
+ ### A. 取消已有任务
42
+
43
+ ```text
44
+ 已知需要取消的原 <planId>:
45
+ db analyze-cancel --id <id> --plan <原 planId>
46
+ → 只取消该 planId 对应的既有任务,不调用 analyze-start
47
+ db analyze-status --id <id> --plan <原 planId>
48
+ → 继续查询同一 planId;取消请求已提交不等于已到达 CANCELLED
49
+ ```
50
+
51
+ - 取消分支不得调用 `analyze-start`,不得为了获得 planId 新建全量或单表任务。
52
+ - 只取消该 `planId` 对应的既有任务,不得用连接级最新快照替换明确目标。
53
+ - `CANCELING` 不是终态;只有状态真实变为 `CANCELLED` 或其它既有终态后,才按后续业务意图决定是否启动新分析。
54
+
55
+ ### B. 只读排查(已有连接)
56
+
57
+ ```text
58
+ db list --format compress
59
+ → 记下目标 connections[].id
60
+ db test --id <id>
61
+ db tables --id <id>
62
+ db diff --id <id> # 可选:看与上次分析的 schema 差异
63
+ ```
64
+
65
+ ### C. 新建连接并跑分析
66
+
67
+ ```text
68
+ db create --dbname … --dbtype MYSQL --dburl host:port --username … --password … [--autostart]
69
+ → 记下返回的 data.connection.id;可把 data.links.databasePage 返回给用户按需查看
70
+ db test --id <id> # 可选
71
+ db analyze-start --id <id>
72
+ → 记下 data.planId;把 data.links.erPage 返回给用户确认 ER 图
73
+ db analyze-status --id <id> --plan <planId> # 轮询直到终态
74
+ → data.isTerminal=true 后复跑 db diff,确认目标差异收敛
75
+ → 检查并返回 data.links.erPage,引导用户确认 ER 图与数据集同步结果
76
+ ```
77
+
78
+ ### D. 既有连接增量分析
79
+
80
+ ```text
81
+ db detail --id <id>
82
+ db diff --id <id> --all --changed-only
83
+ → 只取 data.toAnalyzeTables;用户要求跳过的表先从列表中剔除
84
+ db analyze-batch-plan --id <id> --tables <toAnalyzeTables> --format compress
85
+ → 保存 data.batches;这是本地 batch plan,不是服务端任务 plan
86
+ → 命令不创建或预留任务,输出不包含 `planId`
87
+ → data.planningEstimate 与 batches[].estimatedDurationSeconds 按每表 60 秒估算,仅用于排期
88
+
89
+ 按 data.batches[].index 顺序处理,每批严格串行:
90
+ db analyze-start --id <id> --tables <当前 batch.tableNames>
91
+ → 只有此时才创建服务端任务;每批只调用一次并独立保存返回的 data.planId
92
+ → 如果没有明确返回 `data.planId`,立即停止;请求结果不确定时不得盲目重试
93
+ db analyze-status --id <id> --plan <当前批次 planId>
94
+ → 始终查询当前批次的同一 planId
95
+ → 对照 data.requestedAnalysis 核验最初提交范围;它不代表实际执行范围
96
+ → data.hasMultipleAttempts=true 只表示观察到多个执行尝试,不推断执行连续性或实际分析范围
97
+ → PENDING / RUNNING / RETRYING / CANCELING:继续等待,不启动下一批
98
+ → SUCCESS:进入下一批
99
+ → PARTIAL_SUCCESS:记录失败事实后进入下一批
100
+ → FAILED / CANCELLED:停止整个批次编排,不再启动后续批次
101
+ → 未知状态:停止自动推进并报告,不猜测为终态
102
+
103
+ 全部批次处理完毕:
104
+ db diff --id <id> --all --changed-only
105
+ → 重新读取完整事实;目标差异收敛后才算本轮分析完成
106
+ → 仍未收敛则只对剩余非删除表进入下面的逐表恢复
107
+ ```
108
+
109
+ 全部批次终态后,如果新的 `data.toAnalyzeTables` 仍非空,按返回顺序逐表处理,每张表在本轮只恢复一次:
110
+
111
+ ```text
112
+ 对每个 <tableName>(每次只传一张表):
113
+ db analyze-start --id <id> --tables <tableName>
114
+ → 保存本次返回的 data.planId
115
+ db analyze-status --id <id> --plan <本次 planId>
116
+ → 使用本次 planId 重复查询,直到 data.isTerminal=true
117
+ → 到达终态后才处理下一张表
118
+
119
+ 全部单表任务结束后:
120
+ db diff --id <id> --all --changed-only
121
+ → 以最终 `db diff --all --changed-only` 的 data.toAnalyzeTables 判断是否收敛
122
+ → 已尝试的剩余表只恢复一次,不再次循环提交
123
+ ```
124
+
125
+ 规划估算的 `basis` 固定为 `heuristic`。排队、表复杂度、关系分析和自动重试可能延长实际耗时,因此估算不是服务端 SLA,也不得驱动超时、取消、重试、自动重启或状态判断;任务事实与实际耗时始终以同一 `planId` 的 `db analyze-status` 返回为准。
126
+
127
+ - 规划出的每个批次对应一个真实且独立的 `planId`;不存在聚合父 planId,也不得把多个 planId 合成为一个虚假标识。
128
+ - 状态查询超时、断网或临时 API 失败时,继续使用同一 `planId` 恢复查询,不重新执行 `analyze-start`。
129
+ - `data.attemptElapsedMs` 是当前或最近执行尝试耗时;累计墙钟时间看 `data.totalElapsedMs`。两者都只用于观察,不驱动自动超时或重启。
130
+ - `data.requestedAnalysis` 只还原最初请求范围;`data.hasMultipleAttempts` 只表示观察到多个执行尝试。两者都不能证明实际执行范围。
131
+ - 同一个 dblink 不并行启动多个单表任务。单表任务进入 `PARTIAL_SUCCESS`、`FAILED` 或 `CANCELLED` 后记录结果并继续下一张,避免一张异常表阻断其它表。
132
+ - 同一张表到达终态后,本轮编排不再无限提交;最终仍未收敛时返回表名、单表任务 `planId`、原始终态及可用排障信息。
133
+ - `data.accumulatedErrorTypeCounts` 只原样展示并注明可能不完整;字段缺失、为空或原因码大小写不一致均不得改变编排。
134
+ - Agent 可以语义理解 `data.status.errorMsg`,用于解释、建议和问题上报,但要标明它是低置信度辅助证据;不得仅凭文案判断终态、计算失败表数或重新提交任务。
135
+
136
+ - `PARTIAL_SUCCESS` 是任务终态,不等于目标差异已经收敛。
137
+ - `data.isRetrying=true` 只对应后端 `RETRYING`;运行中的 `failedTables` 不是最终失败结论。
138
+ - `DELETED_TABLE` 只进入 `data.deletedTables` 供人工确认,不传给 `analyze-start`,也不自动清理。
139
+ - 未知状态的 `data.isTerminal` 为 `false`,继续查询或人工排查,不猜测结果。
140
+
141
+ ### E. 改连接再测
142
+
143
+ ```text
144
+ db detail --id <id>
145
+ db update --id <id> --dburl … [--username …] [--password …] # 只传要改的字段
146
+ db test --id <id>
147
+ ```
148
+
149
+ ### F. 删除连接(高危)
150
+
151
+ ```text
152
+ db delete --id <id> --yes # high-risk-write,非交互必须 --yes
153
+ ```
154
+
155
+ ## 与其它命令的配合
156
+
157
+ - **写 SQL 前要 `dbId`**:`dataset detail --code …` 里 `db.id`;或 `db list` 的 `id` 与数据集侧 `dbId` 对应。
158
+ - **看模型关系**:用 `dataset relations`;物理库连接和表清单仍用 `db list` / `db tables` 对照。
159
+ - **给用户确认页面**:DB 更新或分析完成后返回 `data.links.erPage`;新建连接后返回 `data.links.databasePage`。
160
+ - **不确定 flags**:`rabetbase schema`(无需登录)查契约。
161
+
162
+ ## 输出格式
163
+
164
+ db 子命令默认 **`--format compress`**(省 token)。需要人工读时用 `--format json`。
165
+
166
+ ## 参考
167
+
168
+ - 各子命令单页:`../references/rabetbase-db-*.md`
169
+ - [SKILL.md](../SKILL.md)