@lovrabet/rabetbase-cli 2.5.1-beta.1 → 2.5.1-beta.2

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 (316) hide show
  1. package/lib/api/api-doc.js +1 -1
  2. package/lib/api/fetch-model-list.js +1 -1
  3. package/lib/api/generate-api-file.js +1 -1
  4. package/lib/api/generate-sdk-config-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/delete.js +1 -1
  53. package/lib/commands/config/get.js +1 -1
  54. package/lib/commands/config/index.js +1 -1
  55. package/lib/commands/config/init.js +1 -1
  56. package/lib/commands/config/list.js +1 -1
  57. package/lib/commands/config/set.js +1 -1
  58. package/lib/commands/config/shared.js +1 -1
  59. package/lib/commands/dataset/business-group-update.js +1 -1
  60. package/lib/commands/dataset/business-groups.js +1 -1
  61. package/lib/commands/dataset/capability.js +1 -1
  62. package/lib/commands/dataset/delete.js +1 -1
  63. package/lib/commands/dataset/detail.js +1 -1
  64. package/lib/commands/dataset/extend-update.js +1 -1
  65. package/lib/commands/dataset/field-restore.d.ts +107 -0
  66. package/lib/commands/dataset/field-restore.js +1 -0
  67. package/lib/commands/dataset/field-update.js +1 -1
  68. package/lib/commands/dataset/generate.js +1 -1
  69. package/lib/commands/dataset/index.js +1 -1
  70. package/lib/commands/dataset/list.js +1 -1
  71. package/lib/commands/dataset/operations.js +1 -1
  72. package/lib/commands/dataset/relation-audit.js +1 -1
  73. package/lib/commands/dataset/relation-create.js +1 -1
  74. package/lib/commands/dataset/relation-delete.js +1 -1
  75. package/lib/commands/dataset/relation-shared.js +1 -1
  76. package/lib/commands/dataset/relation-update.js +1 -1
  77. package/lib/commands/dataset/relations.js +1 -1
  78. package/lib/commands/dataset/rename.js +1 -1
  79. package/lib/commands/dataset/restore.js +1 -1
  80. package/lib/commands/dataset/user-deleted-field-list.d.ts +36 -0
  81. package/lib/commands/dataset/user-deleted-field-list.js +1 -0
  82. package/lib/commands/db/analysis-batching.js +1 -1
  83. package/lib/commands/db/analyze-batch-plan.js +1 -1
  84. package/lib/commands/db/analyze-cancel.js +1 -1
  85. package/lib/commands/db/analyze-start.js +1 -1
  86. package/lib/commands/db/analyze-status.js +1 -1
  87. package/lib/commands/db/create.js +1 -1
  88. package/lib/commands/db/delete.js +1 -1
  89. package/lib/commands/db/detail.js +1 -1
  90. package/lib/commands/db/diff-refresh-start.js +1 -1
  91. package/lib/commands/db/diff-refresh-status.js +1 -1
  92. package/lib/commands/db/diff.js +1 -1
  93. package/lib/commands/db/index.js +1 -1
  94. package/lib/commands/db/list.js +1 -1
  95. package/lib/commands/db/shared.js +1 -1
  96. package/lib/commands/db/table-diff-shared.js +1 -1
  97. package/lib/commands/db/tables.js +1 -1
  98. package/lib/commands/db/test.js +1 -1
  99. package/lib/commands/db/update.js +1 -1
  100. package/lib/commands/deployment/auto-sync.d.ts +28 -0
  101. package/lib/commands/deployment/auto-sync.js +1 -0
  102. package/lib/commands/deployment/index.d.ts +2 -0
  103. package/lib/commands/deployment/index.js +1 -0
  104. package/lib/commands/deployment/sync.d.ts +2 -0
  105. package/lib/commands/deployment/sync.js +1 -0
  106. package/lib/commands/doctor.js +1 -1
  107. package/lib/commands/file/index.js +1 -1
  108. package/lib/commands/issue/index.js +1 -1
  109. package/lib/commands/issue/nudge.js +1 -1
  110. package/lib/commands/issue/report.js +1 -1
  111. package/lib/commands/issue/shared.js +1 -1
  112. package/lib/commands/kb/create.js +1 -1
  113. package/lib/commands/kb/delete.js +1 -1
  114. package/lib/commands/kb/detail.js +1 -1
  115. package/lib/commands/kb/index.js +1 -1
  116. package/lib/commands/kb/list.js +1 -1
  117. package/lib/commands/kb/search.js +1 -1
  118. package/lib/commands/kb/shared.js +1 -1
  119. package/lib/commands/kb/update.js +1 -1
  120. package/lib/commands/logs/index.js +1 -1
  121. package/lib/commands/menu/asset-update.js +1 -1
  122. package/lib/commands/menu/delete.js +1 -1
  123. package/lib/commands/menu/external-link-create.js +1 -1
  124. package/lib/commands/menu/external-link-update.js +1 -1
  125. package/lib/commands/menu/group-create.js +1 -1
  126. package/lib/commands/menu/group-update.js +1 -1
  127. package/lib/commands/menu/index.js +1 -1
  128. package/lib/commands/menu/list.js +1 -1
  129. package/lib/commands/menu/move.js +1 -1
  130. package/lib/commands/menu/regroup-start.js +1 -1
  131. package/lib/commands/menu/rename.js +1 -1
  132. package/lib/commands/menu/shared/compare-table.js +1 -1
  133. package/lib/commands/menu/shared/delete-plan.js +1 -1
  134. package/lib/commands/menu/shared/facts.js +1 -1
  135. package/lib/commands/menu/shared/index.js +1 -1
  136. package/lib/commands/menu/shared/inquirer.js +1 -1
  137. package/lib/commands/menu/shared/local-pages.js +1 -1
  138. package/lib/commands/menu/shared/logic.js +1 -1
  139. package/lib/commands/menu/shared/mutations.js +1 -1
  140. package/lib/commands/menu/shared/service.js +1 -1
  141. package/lib/commands/menu/shared/sync-core.js +1 -1
  142. package/lib/commands/menu/shared/update-core.js +1 -1
  143. package/lib/commands/menu/shared/valid-url.js +1 -1
  144. package/lib/commands/menu/sync.js +1 -1
  145. package/lib/commands/menu/visibility-update.js +1 -1
  146. package/lib/commands/notification/config-create.js +1 -1
  147. package/lib/commands/notification/config-delete.js +1 -1
  148. package/lib/commands/notification/config-list.js +1 -1
  149. package/lib/commands/notification/config-update.js +1 -1
  150. package/lib/commands/notification/index.js +1 -1
  151. package/lib/commands/notification/shared.js +1 -1
  152. package/lib/commands/ocr/index.js +1 -1
  153. package/lib/commands/page/create.js +1 -1
  154. package/lib/commands/page/custom/detail.js +1 -1
  155. package/lib/commands/page/custom/list.js +1 -1
  156. package/lib/commands/page/custom/publish.js +1 -1
  157. package/lib/commands/page/custom/shared.js +1 -1
  158. package/lib/commands/page/custom/syntax.js +1 -1
  159. package/lib/commands/page/custom/template.js +1 -1
  160. package/lib/commands/page/custom/update.js +1 -1
  161. package/lib/commands/page/data-list-status.js +1 -1
  162. package/lib/commands/page/generate-start.js +1 -1
  163. package/lib/commands/page/generate-status.js +1 -1
  164. package/lib/commands/page/index.js +1 -1
  165. package/lib/commands/page/pull.js +1 -1
  166. package/lib/commands/page/push.js +1 -1
  167. package/lib/commands/page/relation-audit.js +1 -1
  168. package/lib/commands/page/restore.js +1 -1
  169. package/lib/commands/page/shared.js +1 -1
  170. package/lib/commands/page/sync.js +1 -1
  171. package/lib/commands/project/create/enhanced-guided-create.js +1 -1
  172. package/lib/commands/project/create/format-elapsed.js +1 -1
  173. package/lib/commands/project/create/main.js +1 -1
  174. package/lib/commands/project/create/materialize-project-template.js +1 -1
  175. package/lib/commands/project/create/project-name.js +1 -1
  176. package/lib/commands/project/create/project-template-archive.js +1 -1
  177. package/lib/commands/project/create/project-template-path.js +1 -1
  178. package/lib/commands/project/create/use-copy-project-template.js +1 -1
  179. package/lib/commands/project/create/use-format-code.js +1 -1
  180. package/lib/commands/project/create/use-install-dependencies.js +1 -1
  181. package/lib/commands/project/index.js +1 -1
  182. package/lib/commands/project/upgrade.js +1 -1
  183. package/lib/commands/registry.js +1 -1
  184. package/lib/commands/role/delete.js +1 -1
  185. package/lib/commands/role/detail.js +1 -1
  186. package/lib/commands/role/index.js +1 -1
  187. package/lib/commands/role/list.js +1 -1
  188. package/lib/commands/role/shared.js +1 -1
  189. package/lib/commands/role/update.js +1 -1
  190. package/lib/commands/role/user-add.js +1 -1
  191. package/lib/commands/role/user-remove.js +1 -1
  192. package/lib/commands/role/user-resolve.js +1 -1
  193. package/lib/commands/run/index.js +1 -1
  194. package/lib/commands/schema.js +1 -1
  195. package/lib/commands/sql/create.js +1 -1
  196. package/lib/commands/sql/delete.js +1 -1
  197. package/lib/commands/sql/detail.js +1 -1
  198. package/lib/commands/sql/exec.js +1 -1
  199. package/lib/commands/sql/index.js +1 -1
  200. package/lib/commands/sql/list.js +1 -1
  201. package/lib/commands/sql/pull.js +1 -1
  202. package/lib/commands/sql/push.js +1 -1
  203. package/lib/commands/sql/shared.js +1 -1
  204. package/lib/commands/sql/status.js +1 -1
  205. package/lib/commands/sql/validate.js +1 -1
  206. package/lib/commands/task/index.js +1 -1
  207. package/lib/commands/task/status.js +1 -1
  208. package/lib/commands/tenant/index.js +1 -1
  209. package/lib/commands/tenant/members-list.js +1 -1
  210. package/lib/commands/tenant/shared.js +1 -1
  211. package/lib/commands/user-account/dingding-sandbox-bind.js +1 -1
  212. package/lib/commands/user-account/index.js +1 -1
  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/deployment-sync.d.ts +10 -0
  217. package/lib/config/deployment-sync.js +1 -0
  218. package/lib/config/domain-config.js +1 -1
  219. package/lib/config/project-routing.js +1 -1
  220. package/lib/config/schema.js +1 -1
  221. package/lib/constant/cdn.js +1 -1
  222. package/lib/constant/cli.js +1 -1
  223. package/lib/constant/defaults.js +1 -1
  224. package/lib/constant/domain.js +1 -1
  225. package/lib/constant/env.js +1 -1
  226. package/lib/constant/output.js +1 -1
  227. package/lib/constant/paths.js +1 -1
  228. package/lib/constant/region.js +1 -1
  229. package/lib/constant/risk.js +1 -1
  230. package/lib/constant/routing-profile.js +1 -1
  231. package/lib/context/app-resolver.d.ts +2 -0
  232. package/lib/context/app-resolver.js +1 -1
  233. package/lib/context/auth-resolver.js +1 -1
  234. package/lib/context/config-loader.js +1 -1
  235. package/lib/context.js +1 -1
  236. package/lib/core/alias-resolver.js +1 -1
  237. package/lib/core/api-client.d.ts +35 -0
  238. package/lib/core/api-client.js +1 -1
  239. package/lib/core/bff/config.js +1 -1
  240. package/lib/core/bff/file-system.js +1 -1
  241. package/lib/core/bff/hash.js +1 -1
  242. package/lib/core/bff/lock.js +1 -1
  243. package/lib/core/bff/utils.js +1 -1
  244. package/lib/core/db-resolver.js +1 -1
  245. package/lib/core/page/file-system.js +1 -1
  246. package/lib/core/page/hash.js +1 -1
  247. package/lib/core/page/lock.js +1 -1
  248. package/lib/core/sql-index-auditor.js +1 -1
  249. package/lib/core/sql-sync/config.js +1 -1
  250. package/lib/core/sql-sync/file-system.js +1 -1
  251. package/lib/core/sql-sync/hash.js +1 -1
  252. package/lib/core/sql-sync/lock.js +1 -1
  253. package/lib/core/sql-sync/utils.js +1 -1
  254. package/lib/core/sql-validator.js +1 -1
  255. package/lib/errors.js +1 -1
  256. package/lib/framework/build-all-flags.js +1 -1
  257. package/lib/framework/error-output.js +1 -1
  258. package/lib/framework/explicit-yes.js +1 -1
  259. package/lib/framework/flags.js +1 -1
  260. package/lib/framework/help.js +1 -1
  261. package/lib/framework/index.js +1 -1
  262. package/lib/framework/output.js +1 -1
  263. package/lib/framework/response.js +1 -1
  264. package/lib/framework/runner-alias.js +1 -1
  265. package/lib/framework/runner.js +1 -1
  266. package/lib/framework/schema-export.js +1 -1
  267. package/lib/framework/types.d.ts +4 -0
  268. package/lib/framework/types.js +1 -1
  269. package/lib/generated/build-info.d.ts +4 -4
  270. package/lib/generated/build-info.js +1 -1
  271. package/lib/help.js +1 -1
  272. package/lib/postinstall.js +1 -1
  273. package/lib/runtime/confirmation.js +1 -1
  274. package/lib/runtime/event.js +1 -1
  275. package/lib/runtime/index.js +1 -1
  276. package/lib/runtime/queue.js +1 -1
  277. package/lib/runtime/resolve.js +1 -1
  278. package/lib/skills/builtin-skill.js +1 -1
  279. package/lib/skills/main.js +1 -1
  280. package/lib/skills/npx-skills-add.js +1 -1
  281. package/lib/skills/skill-presence.js +1 -1
  282. package/lib/telemetry/cli-command-trace.js +1 -1
  283. package/lib/telemetry/cli-help-trace.js +1 -1
  284. package/lib/telemetry/ensure-cli-otel-config.js +1 -1
  285. package/lib/telemetry/register-otel-exit-shutdown.js +1 -1
  286. package/lib/telemetry/send-cli-trace-log.js +1 -1
  287. package/lib/telemetry/send-platform-issue-collect-log.js +1 -1
  288. package/lib/utils/ai_config.js +1 -1
  289. package/lib/utils/apply-jq-filter.js +1 -1
  290. package/lib/utils/cdn-config.js +1 -1
  291. package/lib/utils/check-sdk-version.js +1 -1
  292. package/lib/utils/cli-version-check.js +1 -1
  293. package/lib/utils/cli-version-policy.js +1 -1
  294. package/lib/utils/config.js +1 -1
  295. package/lib/utils/entity-with-id.js +1 -1
  296. package/lib/utils/file-utils.js +1 -1
  297. package/lib/utils/guides-cdn.js +1 -1
  298. package/lib/utils/http-client.js +1 -1
  299. package/lib/utils/is-non-interactive.js +1 -1
  300. package/lib/utils/logger.js +1 -1
  301. package/lib/utils/params.js +1 -1
  302. package/lib/utils/platform.js +1 -1
  303. package/lib/utils/sleep.js +1 -1
  304. package/lib/utils/template-replacer.js +1 -1
  305. package/lib/utils/update-notice.js +1 -1
  306. package/lib/utils/version.js +1 -1
  307. package/lib/utils/with-active-cookie.js +1 -1
  308. package/lib/utils/write-cli-side-channel.js +1 -1
  309. package/package.json +1 -1
  310. package/skills/rabetbase/SKILL.md +11 -5
  311. package/skills/rabetbase/references/rabetbase-dataset-business-group-update.md +9 -9
  312. package/skills/rabetbase/references/rabetbase-dataset-business-groups.md +1 -1
  313. package/skills/rabetbase/references/rabetbase-dataset-field-restore.md +59 -0
  314. package/skills/rabetbase/references/rabetbase-dataset-user-deleted-field-list.md +47 -0
  315. package/skills/rabetbase/references/rabetbase-deployment-sync.md +92 -0
  316. package/skills/rabetbase.manifest.json +6 -3
@@ -1 +1 @@
1
- (function(_0x4c137b,_0x37b25d){const _0x5dc9bd=a294_0x2e3e,_0x2aec6d=_0x4c137b();while(!![]){try{const _0x116341=-parseInt(_0x5dc9bd(0x1ed))/0x1+-parseInt(_0x5dc9bd(0x1f8))/0x2*(-parseInt(_0x5dc9bd(0x1ff))/0x3)+-parseInt(_0x5dc9bd(0x1f4))/0x4+-parseInt(_0x5dc9bd(0x201))/0x5*(parseInt(_0x5dc9bd(0x1f9))/0x6)+-parseInt(_0x5dc9bd(0x1ef))/0x7*(parseInt(_0x5dc9bd(0x1fe))/0x8)+-parseInt(_0x5dc9bd(0x204))/0x9+-parseInt(_0x5dc9bd(0x1f3))/0xa*(-parseInt(_0x5dc9bd(0x1e8))/0xb);if(_0x116341===_0x37b25d)break;else _0x2aec6d['push'](_0x2aec6d['shift']());}catch(_0x2c803a){_0x2aec6d['push'](_0x2aec6d['shift']());}}}(a294_0x50bc,0xd74ff));import{mkdir,readFile,writeFile}from'node:fs/promises';import{homedir}from'node:os';import{dirname,join}from'node:path';import a294_0x2044ed from'semver';import{CLI_BIN_NAME,NPM_PACKAGE_NAME}from'../constant/cli.js';import{getCliVersionPolicy}from'../utils/cli-version-policy.js';function a294_0x2e3e(_0x2de038,_0x26b890){_0x2de038=_0x2de038-0x1e8;const _0x50bc48=a294_0x50bc();let _0x2e3ee4=_0x50bc48[_0x2de038];return _0x2e3ee4;}import{getCliVersion}from'../utils/version.js';const UPDATE_CHECK_TTL_MS=0xc*0x3c*0x3c*0x3e8,UPDATE_NOTICE_TTL_MS=0x18*0x3c*0x3c*0x3e8;function isUpdateNoticeDisabled(){const _0x296126=a294_0x2e3e,_0x5d3592=process.env.RABETBASE_NO_UPDATE_NOTICE?.['trim']()[_0x296126(0x1fb)]();return _0x5d3592==='1'||_0x5d3592===_0x296126(0x1ec)||_0x5d3592===_0x296126(0x1ea);}function cacheRoot(){return process.env.XDG_CACHE_HOME||process.env.LOCALAPPDATA||join(homedir(),'.cache');}export function getUpdateNoticeCachePath(){const _0x3b058e=a294_0x2e3e;return join(cacheRoot(),'rabetbase-cli',_0x3b058e(0x1f5));}async function readUpdateNoticeCache(){const _0x51fbb7=a294_0x2e3e;try{const _0xb7f7d1=await readFile(getUpdateNoticeCachePath(),_0x51fbb7(0x206)),_0x805817=JSON[_0x51fbb7(0x1fa)](_0xb7f7d1);if(!_0x805817||typeof _0x805817!==_0x51fbb7(0x200))return{};return _0x805817;}catch{return{};}}async function writeUpdateNoticeCache(_0x491c9b){const _0x4d59de=a294_0x2e3e;try{const _0x3c15b3=getUpdateNoticeCachePath();await mkdir(dirname(_0x3c15b3),{'recursive':!![]}),await writeFile(_0x3c15b3,JSON['stringify'](_0x491c9b,null,0x2)+'\x0a',_0x4d59de(0x206));}catch{}}function isFreshCheck(_0x4dbf9a,_0x952631){const _0x43439c=a294_0x2e3e;return typeof _0x4dbf9a[_0x43439c(0x1eb)]===_0x43439c(0x202)&&_0x952631-_0x4dbf9a[_0x43439c(0x1eb)]<UPDATE_CHECK_TTL_MS;}function isRecentlyNotified(_0x584b52,_0x274702,_0x5df010){const _0x598198=a294_0x2e3e;return _0x584b52['lastNotifiedVersion']===_0x274702&&typeof _0x584b52['lastNotifiedAt']===_0x598198(0x202)&&_0x5df010-_0x584b52[_0x598198(0x1fd)]<UPDATE_NOTICE_TTL_MS;}function a294_0x50bc(){const _0x37501d=['62962yqPhGz','78lDWWGh','parse','toLowerCase','gte','lastNotifiedAt','29096kzROBN','57gIpOeB','object','142640wncJSi','number','/v/','7121106ORKojs','https://www.npmjs.com/package/','utf8',',\x20run:\x20','5533KsStnj','latest','yes','checkedAt','true','515924sawXDd','\x20available,\x20current\x20','889ghDqoW','now','valid','trim','66860CLWOsL','3757428tjWOnL','update-check.json','\x20update','stableVersion'];a294_0x50bc=function(){return _0x37501d;};return a294_0x50bc();}export function buildNpmVersionUrl(_0x322f62){const _0x1f9585=a294_0x2e3e;return _0x1f9585(0x205)+NPM_PACKAGE_NAME+_0x1f9585(0x203)+_0x322f62;}export async function resolveLatestUpdateNotice(){const _0x101666=a294_0x2e3e;if(isUpdateNoticeDisabled())return null;try{const _0xd0f5d1=Date[_0x101666(0x1f0)](),_0x2c3b0f=getCliVersion(),_0x15d97b=await readUpdateNoticeCache();let _0x47f0ba=isFreshCheck(_0x15d97b,_0xd0f5d1)?_0x15d97b[_0x101666(0x1e9)]?.[_0x101666(0x1f2)]():undefined;if(!_0x47f0ba&&!isFreshCheck(_0x15d97b,_0xd0f5d1)){const _0x31ac44=await getCliVersionPolicy();_0x47f0ba=_0x31ac44?.[_0x101666(0x1f7)]?.[_0x101666(0x1f2)]()||undefined,await writeUpdateNoticeCache({..._0x15d97b,'checkedAt':_0xd0f5d1,'latest':_0x47f0ba,'failed':!_0x47f0ba});}if(!_0x47f0ba||!a294_0x2044ed[_0x101666(0x1f1)](_0x2c3b0f)||!a294_0x2044ed[_0x101666(0x1f1)](_0x47f0ba))return null;if(a294_0x2044ed[_0x101666(0x1fc)](_0x2c3b0f,_0x47f0ba))return null;if(isRecentlyNotified(_0x15d97b,_0x47f0ba,_0xd0f5d1))return null;const _0x2c913a=CLI_BIN_NAME+_0x101666(0x1f6);return await writeUpdateNoticeCache({..._0x15d97b,'checkedAt':isFreshCheck(_0x15d97b,_0xd0f5d1)?_0x15d97b[_0x101666(0x1eb)]:_0xd0f5d1,'latest':_0x47f0ba,'failed':![],'lastNotifiedVersion':_0x47f0ba,'lastNotifiedAt':_0xd0f5d1}),{'command':_0x2c913a,'current':_0x2c3b0f,'latest':_0x47f0ba,'url':buildNpmVersionUrl(_0x47f0ba),'message':CLI_BIN_NAME+'\x20'+_0x47f0ba+_0x101666(0x1ee)+_0x2c3b0f+_0x101666(0x207)+_0x2c913a};}catch{return null;}}
1
+ (function(_0x2d7633,_0x55ebf7){const _0x54bde7=a300_0x49a6,_0x4e2dac=_0x2d7633();while(!![]){try{const _0x2efe7e=parseInt(_0x54bde7(0x1ce))/0x1+-parseInt(_0x54bde7(0x1d0))/0x2+-parseInt(_0x54bde7(0x1c8))/0x3*(parseInt(_0x54bde7(0x1c9))/0x4)+parseInt(_0x54bde7(0x1d2))/0x5+-parseInt(_0x54bde7(0x1d6))/0x6+-parseInt(_0x54bde7(0x1c6))/0x7+parseInt(_0x54bde7(0x1d5))/0x8*(parseInt(_0x54bde7(0x1cb))/0x9);if(_0x2efe7e===_0x55ebf7)break;else _0x4e2dac['push'](_0x4e2dac['shift']());}catch(_0x12b6fc){_0x4e2dac['push'](_0x4e2dac['shift']());}}}(a300_0xd12d,0x5fa94));import{mkdir,readFile,writeFile}from'node:fs/promises';import{homedir}from'node:os';import{dirname,join}from'node:path';function a300_0x49a6(_0x2d0dc4,_0x44024a){_0x2d0dc4=_0x2d0dc4-0x1c1;const _0xd12d1f=a300_0xd12d();let _0x49a609=_0xd12d1f[_0x2d0dc4];return _0x49a609;}import a300_0x23dcb7 from'semver';import{CLI_BIN_NAME,NPM_PACKAGE_NAME}from'../constant/cli.js';import{getCliVersionPolicy}from'../utils/cli-version-policy.js';function a300_0xd12d(){const _0x16c827=['lastNotifiedVersion','latest','lastNotifiedAt','true','utf8','trim','parse','valid','now','4358214aLtdES','/v/','6JUonAF','558084YDqngO','object','783fRlQTQ','\x20update','stringify','769824jApLBF','gte','1315486kBhwyN','checkedAt','281835oCLeKs','number',',\x20run:\x20','125792bzNUaL','1457784KEItVV','stableVersion','toLowerCase','rabetbase-cli'];a300_0xd12d=function(){return _0x16c827;};return a300_0xd12d();}import{getCliVersion}from'../utils/version.js';const UPDATE_CHECK_TTL_MS=0xc*0x3c*0x3c*0x3e8,UPDATE_NOTICE_TTL_MS=0x18*0x3c*0x3c*0x3e8;function isUpdateNoticeDisabled(){const _0x4129f8=a300_0x49a6,_0x4a37b8=process.env.RABETBASE_NO_UPDATE_NOTICE?.[_0x4129f8(0x1c2)]()[_0x4129f8(0x1d8)]();return _0x4a37b8==='1'||_0x4a37b8===_0x4129f8(0x1dd)||_0x4a37b8==='yes';}function cacheRoot(){return process.env.XDG_CACHE_HOME||process.env.LOCALAPPDATA||join(homedir(),'.cache');}export function getUpdateNoticeCachePath(){const _0x10f18c=a300_0x49a6;return join(cacheRoot(),_0x10f18c(0x1d9),'update-check.json');}async function readUpdateNoticeCache(){const _0x27ec24=a300_0x49a6;try{const _0x5a6b06=await readFile(getUpdateNoticeCachePath(),_0x27ec24(0x1c1)),_0x130fdc=JSON[_0x27ec24(0x1c3)](_0x5a6b06);if(!_0x130fdc||typeof _0x130fdc!==_0x27ec24(0x1ca))return{};return _0x130fdc;}catch{return{};}}async function writeUpdateNoticeCache(_0x4578e7){const _0x25923a=a300_0x49a6;try{const _0x1c8235=getUpdateNoticeCachePath();await mkdir(dirname(_0x1c8235),{'recursive':!![]}),await writeFile(_0x1c8235,JSON[_0x25923a(0x1cd)](_0x4578e7,null,0x2)+'\x0a',_0x25923a(0x1c1));}catch{}}function isFreshCheck(_0x31021e,_0x51c0f3){const _0x1e8ae9=a300_0x49a6;return typeof _0x31021e[_0x1e8ae9(0x1d1)]===_0x1e8ae9(0x1d3)&&_0x51c0f3-_0x31021e['checkedAt']<UPDATE_CHECK_TTL_MS;}function isRecentlyNotified(_0x563b88,_0x336b97,_0x11671d){const _0x416501=a300_0x49a6;return _0x563b88[_0x416501(0x1da)]===_0x336b97&&typeof _0x563b88[_0x416501(0x1dc)]===_0x416501(0x1d3)&&_0x11671d-_0x563b88['lastNotifiedAt']<UPDATE_NOTICE_TTL_MS;}export function buildNpmVersionUrl(_0x1cd07c){const _0x46c9b9=a300_0x49a6;return'https://www.npmjs.com/package/'+NPM_PACKAGE_NAME+_0x46c9b9(0x1c7)+_0x1cd07c;}export async function resolveLatestUpdateNotice(){const _0x6f0d4=a300_0x49a6;if(isUpdateNoticeDisabled())return null;try{const _0x25b564=Date[_0x6f0d4(0x1c5)](),_0x402cf3=getCliVersion(),_0x50ccd9=await readUpdateNoticeCache();let _0x29ac69=isFreshCheck(_0x50ccd9,_0x25b564)?_0x50ccd9[_0x6f0d4(0x1db)]?.['trim']():undefined;if(!_0x29ac69&&!isFreshCheck(_0x50ccd9,_0x25b564)){const _0xdf01d=await getCliVersionPolicy();_0x29ac69=_0xdf01d?.[_0x6f0d4(0x1d7)]?.[_0x6f0d4(0x1c2)]()||undefined,await writeUpdateNoticeCache({..._0x50ccd9,'checkedAt':_0x25b564,'latest':_0x29ac69,'failed':!_0x29ac69});}if(!_0x29ac69||!a300_0x23dcb7[_0x6f0d4(0x1c4)](_0x402cf3)||!a300_0x23dcb7['valid'](_0x29ac69))return null;if(a300_0x23dcb7[_0x6f0d4(0x1cf)](_0x402cf3,_0x29ac69))return null;if(isRecentlyNotified(_0x50ccd9,_0x29ac69,_0x25b564))return null;const _0x58d19f=CLI_BIN_NAME+_0x6f0d4(0x1cc);return await writeUpdateNoticeCache({..._0x50ccd9,'checkedAt':isFreshCheck(_0x50ccd9,_0x25b564)?_0x50ccd9[_0x6f0d4(0x1d1)]:_0x25b564,'latest':_0x29ac69,'failed':![],'lastNotifiedVersion':_0x29ac69,'lastNotifiedAt':_0x25b564}),{'command':_0x58d19f,'current':_0x402cf3,'latest':_0x29ac69,'url':buildNpmVersionUrl(_0x29ac69),'message':CLI_BIN_NAME+'\x20'+_0x29ac69+'\x20available,\x20current\x20'+_0x402cf3+_0x6f0d4(0x1d4)+_0x58d19f};}catch{return null;}}
@@ -1 +1 @@
1
- function a295_0xccb1(){var _0xe3d790=['408UPWclH','1822812IxsEWA','343612GWPwpQ','668261IUeHLp','27GqbJwH','7qwtNLP','1860768zxKRmC','293000YcsqGL','464630IqjxfI','270drGCLU','3tchKpE'];a295_0xccb1=function(){return _0xe3d790;};return a295_0xccb1();}(function(_0x1665ca,_0x41811d){var _0x2051e0=a295_0x2568,_0x2e2099=_0x1665ca();while(!![]){try{var _0x1af83e=-parseInt(_0x2051e0(0xa0))/0x1+parseInt(_0x2051e0(0xa6))/0x2*(-parseInt(_0x2051e0(0xa3))/0x3)+parseInt(_0x2051e0(0xa4))/0x4*(parseInt(_0x2051e0(0xa2))/0x5)+-parseInt(_0x2051e0(0xa5))/0x6*(-parseInt(_0x2051e0(0x9e))/0x7)+parseInt(_0x2051e0(0x9f))/0x8+parseInt(_0x2051e0(0xa8))/0x9*(parseInt(_0x2051e0(0xa1))/0xa)+-parseInt(_0x2051e0(0xa7))/0xb;if(_0x1af83e===_0x41811d)break;else _0x2e2099['push'](_0x2e2099['shift']());}catch(_0x27e8c6){_0x2e2099['push'](_0x2e2099['shift']());}}}(a295_0xccb1,0x2605a));function a295_0x2568(_0x540867,_0x4212ad){_0x540867=_0x540867-0x9e;var _0xccb131=a295_0xccb1();var _0x2568b2=_0xccb131[_0x540867];return _0x2568b2;}import{VERSION}from'../generated/build-info.js';export function getCliVersion(){return VERSION;}
1
+ function a301_0x28c8(){var _0x577f53=['178426PXZcrG','2DoIopM','6583653dsnUHn','6nPmiGC','3649555SXNLwf','5185026PdVtDg','2400732AJHegp','1815908ynPRMA','8gFGsnP','22137930jmhfDr'];a301_0x28c8=function(){return _0x577f53;};return a301_0x28c8();}(function(_0x2cad59,_0x5dd866){var _0x2976a3=a301_0x191e,_0x510b5d=_0x2cad59();while(!![]){try{var _0x415bd9=-parseInt(_0x2976a3(0x9d))/0x1*(-parseInt(_0x2976a3(0x94))/0x2)+-parseInt(_0x2976a3(0x99))/0x3+-parseInt(_0x2976a3(0x9a))/0x4+parseInt(_0x2976a3(0x97))/0x5*(-parseInt(_0x2976a3(0x96))/0x6)+parseInt(_0x2976a3(0x98))/0x7+-parseInt(_0x2976a3(0x9b))/0x8*(parseInt(_0x2976a3(0x95))/0x9)+parseInt(_0x2976a3(0x9c))/0xa;if(_0x415bd9===_0x5dd866)break;else _0x510b5d['push'](_0x510b5d['shift']());}catch(_0x3b1d69){_0x510b5d['push'](_0x510b5d['shift']());}}}(a301_0x28c8,0x65e08));import{VERSION}from'../generated/build-info.js';function a301_0x191e(_0x55bd31,_0xc7f04b){_0x55bd31=_0x55bd31-0x94;var _0x28c861=a301_0x28c8();var _0x191e9f=_0x28c861[_0x55bd31];return _0x191e9f;}export function getCliVersion(){return VERSION;}
@@ -1 +1 @@
1
- function a296_0x3226(){var _0x5048a7=['425IzPSut','452845kLpuqo','4ddlWKJ','10sQEJNQ','7061576XVKsCx','41016drgkZu','319815OIFEOS','2028387axsxNW','6700260VjYSvR','1893648lxsDzc'];a296_0x3226=function(){return _0x5048a7;};return a296_0x3226();}function a296_0x16fa(_0x76ec02,_0x124570){_0x76ec02=_0x76ec02-0x15d;var _0x3226ee=a296_0x3226();var _0x16fac0=_0x3226ee[_0x76ec02];return _0x16fac0;}(function(_0x1f076e,_0x3caed4){var _0x5891f6=a296_0x16fa,_0x5cd822=_0x1f076e();while(!![]){try{var _0x650e4d=-parseInt(_0x5891f6(0x15e))/0x1+-parseInt(_0x5891f6(0x166))/0x2+parseInt(_0x5891f6(0x164))/0x3*(parseInt(_0x5891f6(0x15f))/0x4)+parseInt(_0x5891f6(0x15d))/0x5*(-parseInt(_0x5891f6(0x162))/0x6)+parseInt(_0x5891f6(0x165))/0x7+parseInt(_0x5891f6(0x161))/0x8+parseInt(_0x5891f6(0x163))/0x9*(-parseInt(_0x5891f6(0x160))/0xa);if(_0x650e4d===_0x3caed4)break;else _0x5cd822['push'](_0x5cd822['shift']());}catch(_0x55a9f2){_0x5cd822['push'](_0x5cd822['shift']());}}}(a296_0x3226,0x7a01e));import{setActiveCookie,clearActiveCookie}from'../core/api-client.js';export async function withActiveCookie(_0x1377b6,_0x538d32){setActiveCookie(_0x1377b6);try{return await _0x538d32();}finally{clearActiveCookie();}}
1
+ function a302_0x4e60(){var _0x1248c5=['356KfutEO','784869LcPgVo','930lIDYIT','86090Pzlabo','1164MxHUXw','10221632drTTIv','4Casich','30468qJTdBw','12122UmmJDe','92763CMjJBd','61817KTxJDQ','4293381NZviHv'];a302_0x4e60=function(){return _0x1248c5;};return a302_0x4e60();}(function(_0x22c3f7,_0x3a0a11){var _0x4c1f97=a302_0x1b2d,_0x23f4f6=_0x22c3f7();while(!![]){try{var _0x24bba7=-parseInt(_0x4c1f97(0x17e))/0x1*(-parseInt(_0x4c1f97(0x183))/0x2)+-parseInt(_0x4c1f97(0x17c))/0x3+parseInt(_0x4c1f97(0x17d))/0x4*(-parseInt(_0x4c1f97(0x180))/0x5)+parseInt(_0x4c1f97(0x181))/0x6*(parseInt(_0x4c1f97(0x17b))/0x7)+-parseInt(_0x4c1f97(0x182))/0x8+parseInt(_0x4c1f97(0x17a))/0x9*(-parseInt(_0x4c1f97(0x17f))/0xa)+-parseInt(_0x4c1f97(0x179))/0xb*(-parseInt(_0x4c1f97(0x178))/0xc);if(_0x24bba7===_0x3a0a11)break;else _0x23f4f6['push'](_0x23f4f6['shift']());}catch(_0x80c01d){_0x23f4f6['push'](_0x23f4f6['shift']());}}}(a302_0x4e60,0xd71fa));function a302_0x1b2d(_0x492c00,_0x442990){_0x492c00=_0x492c00-0x178;var _0x4e6035=a302_0x4e60();var _0x1b2d56=_0x4e6035[_0x492c00];return _0x1b2d56;}import{setActiveCookie,clearActiveCookie}from'../core/api-client.js';export async function withActiveCookie(_0xd32e3f,_0x18f9cf){setActiveCookie(_0xd32e3f);try{return await _0x18f9cf();}finally{clearActiveCookie();}}
@@ -1 +1 @@
1
- function a297_0x35b0(_0x59e167,_0x346f96){_0x59e167=_0x59e167-0x15b;var _0x42c766=a297_0x42c7();var _0x35b04e=_0x42c766[_0x59e167];return _0x35b04e;}function a297_0x42c7(){var _0x3402ec=['12LoQOFP','21384kmdNJv','92dsYKfW','7JOWCPC','24oKSccq','117VjrRCZ','7692509liEUXr','219390aLVvOd','59474mimdkV','542488uLnbvz','370245WWdEur','3893334YRRxAS'];a297_0x42c7=function(){return _0x3402ec;};return a297_0x42c7();}(function(_0x28a5df,_0x28f9f0){var _0x381714=a297_0x35b0,_0x369f95=_0x28a5df();while(!![]){try{var _0x41f6f8=parseInt(_0x381714(0x15c))/0x1+parseInt(_0x381714(0x162))/0x2*(-parseInt(_0x381714(0x161))/0x3)+-parseInt(_0x381714(0x164))/0x4*(-parseInt(_0x381714(0x15e))/0x5)+-parseInt(_0x381714(0x15f))/0x6*(-parseInt(_0x381714(0x163))/0x7)+-parseInt(_0x381714(0x15d))/0x8+-parseInt(_0x381714(0x165))/0x9*(-parseInt(_0x381714(0x15b))/0xa)+parseInt(_0x381714(0x166))/0xb*(-parseInt(_0x381714(0x160))/0xc);if(_0x41f6f8===_0x28f9f0)break;else _0x369f95['push'](_0x369f95['shift']());}catch(_0x121291){_0x369f95['push'](_0x369f95['shift']());}}}(a297_0x42c7,0x53b3e));export function writeCliSideChannelLine(_0x1b341c){process['stderr']['write'](_0x1b341c+'\x0a');}
1
+ function a303_0x2a47(_0x2c4609,_0x262771){_0x2c4609=_0x2c4609-0xaf;var _0x4364a9=a303_0x4364();var _0x2a47c6=_0x4364a9[_0x2c4609];return _0x2a47c6;}(function(_0x3bba14,_0x2eea3d){var _0x1efc06=a303_0x2a47,_0x2c7481=_0x3bba14();while(!![]){try{var _0x59ab68=parseInt(_0x1efc06(0xb2))/0x1+-parseInt(_0x1efc06(0xb0))/0x2*(-parseInt(_0x1efc06(0xb3))/0x3)+-parseInt(_0x1efc06(0xb7))/0x4+parseInt(_0x1efc06(0xb6))/0x5+parseInt(_0x1efc06(0xb9))/0x6+-parseInt(_0x1efc06(0xaf))/0x7+-parseInt(_0x1efc06(0xb4))/0x8*(parseInt(_0x1efc06(0xb1))/0x9);if(_0x59ab68===_0x2eea3d)break;else _0x2c7481['push'](_0x2c7481['shift']());}catch(_0x314f7e){_0x2c7481['push'](_0x2c7481['shift']());}}}(a303_0x4364,0x67911));export function writeCliSideChannelLine(_0x29ce77){var _0x5cfca6=a303_0x2a47;process[_0x5cfca6(0xb8)][_0x5cfca6(0xb5)](_0x29ce77+'\x0a');}function a303_0x4364(){var _0x2562e5=['write','2051660CyZNlq','907548CMcCYI','stderr','4174944OalGAq','2403534Looivw','7700qKdFFF','99ojhIlv','82991zWnwjb','534BBYSsx','639992rviUho'];a303_0x4364=function(){return _0x2562e5;};return a303_0x4364();}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lovrabet/rabetbase-cli",
3
- "version": "2.5.1-beta.1",
3
+ "version": "2.5.1-beta.2",
4
4
  "description": "Developer CLI for Lovrabet apps, datasets, pages, SQL, Backend Function, database connections, skills, and AI agent workflows.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "keywords": [
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: rabetbase
3
- version: 2.5.1-beta.1
4
- description: "Lovrabet 开发工作流 CLI — 通过 rabetbase 命令管理数据集、数据库连接(dblink)、数据列表页(Data List Page)、自定义页面(Custom Page)、SQL 查询、Backend Function 脚本、通知配置、企业知识库、菜单事实读取与同步、开发角色与协作者、应用文件、面向票证类业务材料文字与结构化字段提取的 OCR、代码生成,以及平台问题上报。触发词:数据集、数据表、dataset relation-audit、dataset delete、dataset restore、废弃数据集、恢复数据集、dataset rename、dataset field-update、dataset extend-update、dataset business-groups、dataset business-group-update、businessGroup、字段对象更新、doType、options、数据列表页、Data List Page、自定义页面、Custom Page、page create、page custom-list、page custom-detail、page custom-update、page custom-publish、page generate-start、page generate-status、page relation-audit、page sync、page pull、page push、page restore、恢复已删除页面、dblink、数据库连接、schema 分析、db list、db detail、db create、db update、db delete、db test、db tables、db diff、db diff-refresh-start、db diff-refresh-status、db analyze-batch-plan、db analyze-start、analyze-cancel、analyze-status、traceId、自定义 SQL、sql.execute、bff.execute、BF 消息通知、Backend Function 消息通知、notification config-list、EMAIL configCode、通知配置、notification.send、企业知识库、公司知识、公共知识、kb search、get_dataset_detail、validate_sql_content、save_or_update_custom_sql、@lovrabet/sdk、lovrabet 开发、rabetbase、filter、codegen、init、appcode、app list、app members-list、tenant members-list、应用人员列表、租户人员列表、workspace、workspace init、workspace use、workspace add、workspace remove、多应用、默认应用、menu list、menu visibility-update、菜单显示、菜单隐藏、visible、menu external-link-create、menu external-link-update、menu rename、菜单改名、外链菜单创建、外链 URL 更新、菜单异常审计、菜单手动删除清单、menu sync、menu asset-update、菜单资源更新、menu move、菜单移动、开发角色、开发协作者、role、role list、role user-add、role user-remove、user-resolve、加入开发者、ADMIN、DEV、OWNER、CUSTOM、project create、project upgrade、schema、jq、compress、file upload、file query-url、ocr recognize、文件上传、OCR 识别、票证文字提取、票证字段提取、发票识别、票据识别、证照识别、长期链接、issue report、平台问题、platform issue、问题上报、user-account dingding-sandbox-bind、钉钉沙箱账号绑定。"
3
+ version: 2.5.1-beta.2
4
+ description: "Lovrabet 开发工作流 CLI — 通过 rabetbase 命令管理数据集、数据库连接(dblink)、局部部署研发元数据同步、数据列表页(Data List Page)、自定义页面(Custom Page)、SQL 查询、Backend Function 脚本、通知配置、企业知识库、菜单事实读取与同步、开发角色与协作者、应用文件、面向票证类业务材料文字与结构化字段提取的 OCR、代码生成,以及平台问题上报。触发词:数据集、数据表、dataset relation-audit、dataset delete、dataset restore、dataset user-deleted-field-list、dataset field-restore、用户删除字段、恢复数据集字段、废弃数据集、恢复数据集、dataset rename、dataset field-update、dataset extend-update、dataset business-groups、dataset business-group-update、businessGroup、字段对象更新、doType、options、数据列表页、Data List Page、自定义页面、Custom Page、page create、page custom-list、page custom-detail、page custom-update、page custom-publish、page generate-start、page generate-status、page relation-audit、page sync、page pull、page push、page restore、恢复已删除页面、dblink、数据库连接、schema 分析、db list、db detail、db create、db update、db delete、db test、db tables、db diff、db diff-refresh-start、db diff-refresh-status、db analyze-batch-plan、db analyze-start、analyze-cancel、analyze-status、traceId、deployment sync、局部部署、研发元数据同步、target-env、direct、自定义 SQL、sql.execute、bff.execute、BF 消息通知、Backend Function 消息通知、notification config-list、EMAIL configCode、通知配置、notification.send、企业知识库、公司知识、公共知识、kb search、get_dataset_detail、validate_sql_content、save_or_update_custom_sql、@lovrabet/sdk、lovrabet 开发、rabetbase、filter、codegen、init、appcode、app list、app members-list、tenant members-list、应用人员列表、租户人员列表、workspace、workspace init、workspace use、workspace add、workspace remove、多应用、默认应用、menu list、menu visibility-update、菜单显示、菜单隐藏、visible、menu external-link-create、menu external-link-update、menu rename、菜单改名、外链菜单创建、外链 URL 更新、菜单异常审计、菜单手动删除清单、menu sync、menu asset-update、菜单资源更新、menu move、菜单移动、开发角色、开发协作者、role、role list、role user-add、role user-remove、user-resolve、加入开发者、ADMIN、DEV、OWNER、CUSTOM、project create、project upgrade、schema、jq、compress、file upload、file query-url、ocr recognize、文件上传、OCR 识别、票证文字提取、票证字段提取、发票识别、票据识别、证照识别、长期链接、issue report、平台问题、platform issue、问题上报、user-account dingding-sandbox-bind、钉钉沙箱账号绑定。"
5
5
  metadata:
6
6
  requires:
7
7
  bins: ["rabetbase"]
@@ -53,6 +53,7 @@ metadata:
53
53
  - 需要了解数据集关联关系时用 `rabetbase dataset relations --format compress`(或 `json`);需要审计关系事实错误和人工复核项时用 `rabetbase dataset relation-audit --format compress`
54
54
  - 需要从文本需求创建新的 `METADATA` 数据集时,先读 [`dataset generate-start/status`](references/rabetbase-dataset-generate.md),执行 preview 写出 design 文件,审阅后用 `generate-start --apply --design-file` 提交任务,再用 `generate-status` 查询到成功
55
55
  - **管理物理库连接 / 测连 / 同步表结构分析**时用 `rabetbase db …`(先 [`db list`](references/rabetbase-db-list.md),trace/plan id 见 [`database-connection-workflow.md`](guides/database-connection-workflow.md))
56
+ - **为独立部署局部同步研发元数据**时用 [`rabetbase deployment sync`](references/rabetbase-deployment-sync.md);CLI 只调用带 appCode 开关检查的同步接口,未开启时服务端正常跳过;日常非生产 BFF/SQL 变更可在用户明确要求后配置 push 后置同步,生产、直连和 Dataset 保持显式确认
56
57
  - DBAgent 增量分析默认先执行一次异步差异刷新:调用 `db diff-refresh-start`,保存 traceId,并用 `db diff-refresh-status` 查询同一任务到终态;成功后按原始意图执行 `db diff --all`(差异表)或 `db tables`(全部表)。无论 `tableCount` 大小都执行刷新;只有用户明确表示“不需要分析”“不刷新”或“只看现有结果”时才跳过异步刷新,并说明结果可能不是最新事实
57
58
  - 需要查看全部表(含无差异表)或主动重新分析既有表时,用 `db tables`;它固定聚合全表分页。`db diff --all` 只聚合全部差异分页
58
59
  - DB 增量分析先对完整 `toAnalyzeTables` 执行 `db analyze-batch-plan`;它生成的是本地批次方案,不是服务端 `planId`,也不会创建任务。再严格按批次顺序启动;每批独立保存 `planId`(即 `analyze-start` 返回值),当前批次到达已知终态前不得启动下一批
@@ -194,6 +195,7 @@ metadata:
194
195
  - **不要猜字段名** — 必须从 `dataset detail` 返回值获取真实字段名、类型、枚举值
195
196
  - **不要跳过 validate 与 dry-run** — 修改已有 SQL 并准备 `sql push` 前,必须先跑 `sql validate`;创建 SQL 或执行高风险同步前至少确认过 `sql create --dry-run`、`sql push --dry-run` 或 `sql delete --dry-run` 的预览
196
197
  - **不要手动拼 API URL** — 所有操作通过 CLI 命令完成,不要直接调 HTTP 接口
198
+ - **不要自动重提局部部署同步** — `deployment sync` 部分失败时保留逐项结果交给用户判断;结果不确定时先人工核对目标端,不得把非零退出误报为全部成功或直接重试
197
199
  - **不要向产品用户展开研发实现** — 回答角色权限操作时,不输出工程仓库、Controller、数据库表、接口路径、MR 排查或迁移过程;只说明 CLI 命令、角色边界、风险和可验证结果
198
200
  - **不要臆测 sqlCode / id** — 从 `sql list` 或 `bff list` 获取真实标识
199
201
  - **不要臆测 dblink id 或分析 trace/plan id** — 从 `db list` / `db detail` / `db analyze-start` 的返回字段获取(见 [database-connection-workflow.md](guides/database-connection-workflow.md))
@@ -337,12 +339,14 @@ const result = await client.bff.execute<DashboardData>({
337
339
  | 查看表结构和字段 | [`rabetbase dataset detail --code xxx`](references/rabetbase-dataset-detail.md) | 含字段定义和操作列表 |
338
340
  | 废弃数据集 | [`rabetbase dataset delete`](references/rabetbase-dataset-delete.md) | high-risk-write;默认非级联,显式 `--cascade --confirm` 才删除关联页;必须先 `--dry-run`,批量推荐 `--expected-count` |
339
341
  | 恢复已删除数据集 | [`rabetbase dataset restore`](references/rabetbase-dataset-restore.md) | high-risk-write;按唯一回收站日志只恢复 Dataset,页面用 `page restore` 明确恢复;必须先 `--dry-run` |
342
+ | 查询用户明确删除的字段 | [`rabetbase dataset user-deleted-field-list`](references/rabetbase-dataset-user-deleted-field-list.md) | read;只返回用户删除墓碑字段的安全投影,空列表正常成功 |
343
+ | 恢复一个用户删除字段 | [`rabetbase dataset field-restore`](references/rabetbase-dataset-field-restore.md) | write;先精确查询再 dry-run;只提交一个 column ID,并以恢复数量和双重回读确认;不自动同步页面 |
340
344
  | 修改 Dataset 展示名 | [`rabetbase dataset rename`](references/rabetbase-dataset-rename.md) | 只更新 Dataset 展示名;必须先 `--dry-run`,用 `--expect-name` 防漂移;连续重命名先读对应章节 |
341
345
  | 从文本生成新 METADATA 数据集 | [`rabetbase dataset generate-start`](references/rabetbase-dataset-generate.md) / [`generate-status`](references/rabetbase-dataset-generate.md) | 三步:preview;审阅后提交;随后执行 `data.query.command`,优先按同一个 taskId 查询。`PENDING/PROCESSING` 非终态,未知或响应丢失不得自动重提;只在返回 `createdDataset.code` 后使用 Dataset |
342
346
  | 安全更新 Dataset 原始字段对象 | [`rabetbase dataset field-update`](references/rabetbase-dataset-field-update.md) | 使用 `--code` 定位 Dataset,只允许 patch 已知可变业务配置字段;必须先 `--dry-run`,用 `--expect-json` 防漂移 |
343
347
  | Dataset 顶层 extend 更新命令 | [`rabetbase dataset extend-update`](references/rabetbase-dataset-extend-update.md) | 当前无可写字段;不得用于 `businessGroup`。业务场景分组只能使用 `rabetbase dataset business-group-update` |
344
- | 发现已有业务分组 | [`rabetbase dataset business-groups`](references/rabetbase-dataset-business-groups.md) | read;按 `--dbid` 汇总 DB_TABLE Dataset,不含 METADATA;空字符串桶表示未分组 |
345
- | 更新业务场景分组 | [`rabetbase dataset business-group-update`](references/rabetbase-dataset-business-group-update.md) | 唯一入口;使用 `--code` 定位 Dataset;必须先 `--dry-run`,推荐用 `--expect-business-group` 防漂移 |
348
+ | 发现已有业务分组 | [`rabetbase dataset business-groups`](references/rabetbase-dataset-business-groups.md) | read;按 `--dbid` 汇总 DB_TABLE Dataset,不含 METADATA;未分组桶统一显示为 `ungrouped` |
349
+ | 更新业务场景分组 | [`rabetbase dataset business-group-update`](references/rabetbase-dataset-business-group-update.md) | 使用 `--code` 定位 Dataset;DB_TABLE 与 METADATA 可设置非空分组,METADATA 可用 `ungrouped` 清空;必须先 `--dry-run`,推荐用 `--expect-business-group` 防漂移 |
346
350
  | 查看 Dataset 操作定义 | [`rabetbase dataset operations --code xxx`](references/rabetbase-dataset-operations.md) | 获取 filter/getOne/create 等参数定义 |
347
351
  | 查看数据集关联关系 | [`rabetbase dataset relations`](references/rabetbase-dataset-relations.md) | 标准只读入口,输出 `datasetCode + field` 关系事实;支持 `DB_TABLE -> DB_TABLE`、`DB_TABLE -> METADATA`、`METADATA -> METADATA` |
348
352
  | 审计数据集关联关系 | [`rabetbase dataset relation-audit`](references/rabetbase-dataset-relation-audit.md) | 只读审计关系事实结构错误、风险和人工复核项 |
@@ -362,6 +366,7 @@ const result = await client.bff.execute<DashboardData>({
362
366
  | 推送本地数据列表页 schema | [`rabetbase page push --id <pageId>`](references/rabetbase-page-push.md) | 推送后自动回拉 canonical schema 覆盖本地 |
363
367
  | 恢复已删除页面 | [`rabetbase page restore --id <pageId>`](references/rabetbase-page-restore.md) | 支持 `DATA_LIST|CUSTOM` 自动识别;跨类型同 ID 时显式传 `--page-type` |
364
368
  | 数据库连接(dblink)/ 测连 / 结构分析 | [`rabetbase db list`](references/rabetbase-db-list.md) 起 | **`id`**、**trace/plan id** 与“终态 + 复跑 diff”完成口径见 [database-connection-workflow.md](guides/database-connection-workflow.md);各子命令见 `references/rabetbase-db-*.md` |
369
+ | 独立部署局部同步研发元数据 | [`rabetbase deployment sync`](references/rabetbase-deployment-sync.md) | 显式命令为 `write`;服务端仅允许应用 Admin 操作并原子检查 appCode 开关,未开启时正常 no-op;非生产 BFF/SQL 可配置 push 后置同步;生产、直连、Dataset 保持显式确认;失败或结果不确定时不自动重试 |
365
370
  | 生成 / 更新 API 客户端代码 | [`rabetbase api pull`](references/rabetbase-api-pull.md) → [`sdk-client-generation.md`](guides/sdk-client-generation.md) | `api pull` 拉 Dataset 事实并刷新 `sdk-config.ts` 与 `rabetbase.routing.json`;已有 `api.ts`/`client.ts` 按 guide 合并更新 |
366
371
  | 查看生成的 API 模型 | [`rabetbase api list`](references/rabetbase-api-list.md) | 列出已生成的数据模型 |
367
372
  | 查看现有 SQL | [`rabetbase sql list --name "xxx"`](references/rabetbase-sql-list.md) | 分页,按名称过滤;默认查当前决议到的单个应用 |
@@ -420,10 +425,11 @@ const result = await client.bff.execute<DashboardData>({
420
425
  | Roles | [`list`](references/rabetbase-role-list.md) / `detail` / `update` / `delete` / [`user-resolve`](references/rabetbase-role-user-resolve.md) / [`user-add` / `user-remove`](references/rabetbase-role-user-add.md) |
421
426
  | Tenant Members | [`tenant members-list`](references/rabetbase-tenant-members-list.md)(当前账号所属租户的全量人员目录) |
422
427
  | app commands | [`list`](references/rabetbase-app-list.md)(只读应用事实;平台目录用 `list --remote`)/ [`members-list`](references/rabetbase-app-members-list.md)(应用人员及角色归属)。登记/移除应用改用 `workspace add` / `workspace remove` |
423
- | dataset commands | [`list`](references/rabetbase-dataset-list.md) / [`detail`](references/rabetbase-dataset-detail.md) / [`delete`](references/rabetbase-dataset-delete.md) / [`restore`](references/rabetbase-dataset-restore.md) / [`generate-start/status`](references/rabetbase-dataset-generate.md) / [`rename`](references/rabetbase-dataset-rename.md) / [`field-update`](references/rabetbase-dataset-field-update.md) / [`extend-update`](references/rabetbase-dataset-extend-update.md) / [`business-group-update`](references/rabetbase-dataset-business-group-update.md) / [`operations`](references/rabetbase-dataset-operations.md) / [`relations`](references/rabetbase-dataset-relations.md) / [`relation-audit`](references/rabetbase-dataset-relation-audit.md) / [`relation-create/update/delete`](references/rabetbase-dataset-relation-mutations.md) |
428
+ | dataset commands | [`list`](references/rabetbase-dataset-list.md) / [`detail`](references/rabetbase-dataset-detail.md) / [`delete`](references/rabetbase-dataset-delete.md) / [`restore`](references/rabetbase-dataset-restore.md) / [`user-deleted-field-list`](references/rabetbase-dataset-user-deleted-field-list.md) / [`field-restore`](references/rabetbase-dataset-field-restore.md) / [`generate-start/status`](references/rabetbase-dataset-generate.md) / [`rename`](references/rabetbase-dataset-rename.md) / [`field-update`](references/rabetbase-dataset-field-update.md) / [`extend-update`](references/rabetbase-dataset-extend-update.md) / [`business-group-update`](references/rabetbase-dataset-business-group-update.md) / [`operations`](references/rabetbase-dataset-operations.md) / [`relations`](references/rabetbase-dataset-relations.md) / [`relation-audit`](references/rabetbase-dataset-relation-audit.md) / [`relation-create/update/delete`](references/rabetbase-dataset-relation-mutations.md) |
424
429
  | Data List Page commands | [`generate-start`](references/rabetbase-page-generate-start.md) / [`generate-status`](references/rabetbase-page-generate-status.md) / [`data-list-status`](references/rabetbase-data-list-status.md) / [`relation-audit`](references/rabetbase-page-relation-binding.md) / [`sync`](references/rabetbase-page-sync.md) / [`pull`](references/rabetbase-page-pull.md) / [`push`](references/rabetbase-page-push.md) |
425
430
  | Custom Page commands | [`create`](references/rabetbase-page-create.md) / [`custom-list`](references/rabetbase-page-custom-list.md) / [`custom-detail`](references/rabetbase-page-custom-detail.md) / [`custom-update`](references/rabetbase-page-custom-update.md) / [`custom-publish`](references/rabetbase-page-custom-publish.md) |
426
431
  | Database Connections (`db`) | [`list`](references/rabetbase-db-list.md) / [`detail`](references/rabetbase-db-detail.md) / [`create`](references/rabetbase-db-create.md) / [`update`](references/rabetbase-db-update.md) / [`delete`](references/rabetbase-db-delete.md) / [`test`](references/rabetbase-db-test.md) / [`analyze`](references/rabetbase-db-analyze.md) / [`tables`](references/rabetbase-db-tables.md) / [`diff`](references/rabetbase-db-diff.md) / [`diff-refresh-start/status`](references/rabetbase-db-diff-refresh.md) |
432
+ | Deployment | [`sync`](references/rabetbase-deployment-sync.md) |
427
433
  | api commands | [`pull`](references/rabetbase-api-pull.md) / [`list`](references/rabetbase-api-list.md) |
428
434
  | sql commands | [`list`](references/rabetbase-sql-list.md) / [`detail`](references/rabetbase-sql-detail.md) / [`create`](references/rabetbase-sql-create.md) / [`status`](references/rabetbase-sql-status.md) / [`pull`](references/rabetbase-sql-pull.md) / [`push`](references/rabetbase-sql-push.md) / [`delete`](references/rabetbase-sql-delete.md) / [`validate`](references/rabetbase-sql-validate.md) / [`save`(deprecated)](references/rabetbase-sql-save.md) / [`exec`](references/rabetbase-sql-exec.md) |
429
435
  | bff commands | [`list`](references/rabetbase-bff-list.md) / [`detail`](references/rabetbase-bff-detail.md) / [`create`](references/rabetbase-bff-create.md) / [`status`](references/rabetbase-bff-status.md) / [`pull`](references/rabetbase-bff-pull.md) / [`push`](references/rabetbase-bff-push.md) / [`delete`](references/rabetbase-bff-delete.md) |
@@ -2,7 +2,7 @@
2
2
 
3
3
  安全更新业务场景分组(`businessGroup`)。
4
4
 
5
- 本命令用于修改业务场景分组。它不同于 `dataset extend-update`:`extend-update` 当前可写 key 白名单为空,且不支持修改 `businessGroup`。
5
+ 使用 Dataset code 修改业务场景分组。DB_TABLE 与 METADATA 可设置非空分组,METADATA 还可清空分组。
6
6
 
7
7
  ## 命令
8
8
 
@@ -18,7 +18,7 @@ rabetbase dataset business-group-update \
18
18
 
19
19
  确认 dry-run 结果无误后再去掉 `--dry-run` 执行。
20
20
 
21
- 清空当前业务场景分组:
21
+ 清空 METADATA Dataset 的当前业务场景分组:
22
22
 
23
23
  ```bash
24
24
  rabetbase dataset business-group-update \
@@ -35,7 +35,7 @@ rabetbase dataset business-group-update \
35
35
  | --- | --- | --- |
36
36
  | `--appcode <code>` | 否 | 目标应用编码;未配置默认 app 时必填 |
37
37
  | `--code <code>` | 是 | Dataset code,32 位 hex UUID |
38
- | `--business-group <name>` | 是 | 目标业务场景分组;保留值 `ungrouped` 表示清空 |
38
+ | `--business-group <name>` | 是 | 目标业务场景分组;METADATA 可用保留值 `ungrouped` 清空,DB_TABLE 不支持清空 |
39
39
  | `--expect-business-group <name>` | 否 | 当前业务场景分组保护;使用 `ungrouped` 表示期望当前未分组;不匹配即中止且不写入 |
40
40
  | `--dry-run` | 否 | 只返回 before/after 预览,不执行写入 |
41
41
  | `--format <fmt>` | 否 | 输出格式,AI Agent 优先用 `compress` |
@@ -43,9 +43,9 @@ rabetbase dataset business-group-update \
43
43
  ## 行为
44
44
 
45
45
  - 命令用 `--code` 定位 Dataset。
46
- - 当前值和写后校验都按 Dataset code 读取业务场景分组;不需要 `dblinkId`、`tableName` 或 `sourceType`。
47
- - `--business-group ungrouped` 表示清空业务场景分组;`ungrouped` 是保留值,不能作为分组名称使用。
48
- - 平台原始详情可能以空字符串返回 `businessGroup`,也可能省略 `extend.businessGroup`;CLI 会将这两种形态统一归一化为空字符串,表示未分组。
46
+ - DB_TABLE 与 METADATA 都可设置非空业务场景分组。
47
+ - METADATA 使用 `--business-group ungrouped` 清空分组;DB_TABLE 使用该值时会失败且不写入。
48
+ - 当前分组为空、`null` 或字段缺失时统一显示为 `ungrouped`。
49
49
  - `--expect-business-group` 用于保护当前值;当前未分组时传 `ungrouped`,不匹配时中止且不写入。
50
50
  - `--dry-run` 只预览 before/after,不执行写入。
51
51
  - 正式写入后会校验目标值已生效。
@@ -81,11 +81,11 @@ rabetbase dataset business-group-update \
81
81
  ## 提示
82
82
 
83
83
  - 写入前必须先运行 `--dry-run`。
84
- - `businessGroup` 用于按业务场景组织 Dataset,而不是按数据库、表类型或服务名等技术结构分组。优先按业务场景命名并复用当前应用已有分组;需要跨领域消歧或沿用既有两级分组体系时,可使用 `<业务领域>---<业务场景>`,否则使用 `<业务场景>`。表数量不决定是否拆分层级。建议最多两级,层级不得为空或带首尾空白;使用保留值 `ungrouped` 清空。CLI 仅描述推荐格式并保持兼容,不额外拒绝历史非标准值。
84
+ - `businessGroup` 用于按业务场景组织 Dataset,而不是按数据库、表类型或服务名等技术结构分组。优先复用当前应用已有分组;需要跨领域消歧时可使用 `<业务领域>---<业务场景>`,否则使用 `<业务场景>`。建议最多两级,层级不得为空或带首尾空白。
85
+ - `ungrouped` 表示未分组;可用于 METADATA 清空和任意 Dataset 的当前值保护,不作为真实分组名称。
85
86
  - 推荐用 `--expect-business-group` 保护当前值。
86
87
  - 不确定 Dataset code 时,先用 `rabetbase dataset list --name <name> --format compress` 定位。
87
- - 业务场景分组只能使用本命令更新,不要通过 `dataset extend-update` 或 `/smartapi/dataset/update-driven-data` 修改。
88
- - `dataset extend-update` 当前可写 key 白名单为空;未来如开放其他 Dataset 顶层 `extend` 字段,以 `dataset extend-update` reference 为准。
88
+ - 业务场景分组只使用本命令更新。
89
89
 
90
90
  ## 参考
91
91
 
@@ -19,7 +19,7 @@ rabetbase dataset business-groups --dbid 10282 --format compress
19
19
 
20
20
  - `scope` 固定为 `DB_TABLE`。
21
21
  - `totalDatasetCount` 是该连接下参与统计的有效 DB_TABLE Dataset 数。
22
- - `groups[]` 只包含 `businessGroup` 与 `datasetCount`;空字符串原样表示未分组。
22
+ - `groups[]` 每项只包含 `businessGroup` 和 `datasetCount`;未分组项的 `businessGroup` 固定为 `ungrouped`。
23
23
  - 本命令不修改分组。写入仍使用 `dataset business-group-update --code ...`,建议先复用这里发现的已有业务场景名。
24
24
 
25
25
  ## 参考
@@ -0,0 +1,59 @@
1
+ # dataset field-restore
2
+
3
+ 恢复一个由用户明确删除的 Dataset 字段。命令只恢复 Dataset 字段元数据,不恢复或校验物理列,也不自动同步、保存或发布关联页面。
4
+
5
+ ## 安全流程
6
+
7
+ ```bash
8
+ rabetbase dataset user-deleted-field-list \
9
+ --code 1a90dbff5f094a9a89936fa99b10984c \
10
+ --format compress
11
+
12
+ rabetbase dataset field-restore \
13
+ --code 1a90dbff5f094a9a89936fa99b10984c \
14
+ --field space_type_code \
15
+ --dry-run \
16
+ --format compress
17
+
18
+ rabetbase dataset field-restore \
19
+ --code 1a90dbff5f094a9a89936fa99b10984c \
20
+ --field space_type_code \
21
+ --format compress
22
+ ```
23
+
24
+ ## 参数
25
+
26
+ | Flag | 必填 | 说明 |
27
+ |------|------|------|
28
+ | `--appcode <code>` | 否 | 目标应用编码;未配置默认 app 时必填 |
29
+ | `--code <code>` | 是 | Dataset code |
30
+ | `--field <code>` | 是 | 用户删除列表中的精确字段 code |
31
+ | `--dry-run` | 否 | 只预览唯一字段和写请求,不调用恢复接口 |
32
+ | `--format <fmt>` | 否 | 输出格式,AI Agent 优先用 `compress` |
33
+
34
+ `--field` 对应 `dataset detail` 归一化输出的 `data.fields[].name`,不是 `displayName`。命令不支持逗号批量、模糊匹配或交互选择;传入 `--all`、`--fields`、`--confirm` 或 `--yes` 会被明确拒绝。
35
+
36
+ ## 完成口径
37
+
38
+ 正式执行只提交一个 column ID。以下条件全部满足才返回 `ok=true`:
39
+
40
+ 1. 服务端实际恢复数量等于 `1`。
41
+ 2. 写后用户删除字段列表中已不存在目标 column ID。
42
+ 3. 写后 Dataset 活动字段集合中存在相同 ID 和 code。
43
+
44
+ dry-run 输出包含 `operation`、`selector`、`dataset`、`before/after`、`dryRun`、`backend`、`verification`、`warnings`,并以 `body` 精确展示 `{ datasetId, columnIds: [id] }`。正式执行的 `after` 来自真实回读,找不到活动字段时为 `null`。服务端返回 `0`、字段仍在删除列表或活动字段未出现时返回结构化失败,Agent 不得自动重试写请求。
45
+
46
+ ## 失败路径
47
+
48
+ - 找不到精确 field code:先重新运行 `user-deleted-field-list`,不要改用展示名猜测。
49
+ - 同一 field code 出现多条:视为服务端元数据歧义,命令在写入前中止。
50
+ - 写请求传输结果不确定:CLI 不会再次 POST,而会尝试双回读并返回 `ok=false`;只重新查询列表和详情,不要直接重试。
51
+ - 写后回读失败:保留已提交请求的 backend 上下文并返回 `ok=false`;只重新查询列表和详情,不要直接重试。
52
+ - 恢复成功但页面仍无字段:这是预期边界。单独评估页面状态,确有需要时显式执行 `rabetbase page sync`;字段恢复命令本身不调用页面同步。
53
+
54
+ ## 参考
55
+
56
+ - [dataset user-deleted-field-list](rabetbase-dataset-user-deleted-field-list.md)
57
+ - [dataset detail](rabetbase-dataset-detail.md)
58
+ - [page sync](rabetbase-page-sync.md)
59
+ - [SKILL.md](../SKILL.md)
@@ -0,0 +1,47 @@
1
+ # dataset user-deleted-field-list
2
+
3
+ 列出指定 Dataset 中由用户明确删除的字段。只读命令不会修改 Dataset、物理表或关联页面。
4
+
5
+ ## 命令
6
+
7
+ ```bash
8
+ rabetbase dataset user-deleted-field-list \
9
+ --code 1a90dbff5f094a9a89936fa99b10984c \
10
+ --format compress
11
+ ```
12
+
13
+ ## 参数
14
+
15
+ | Flag | 必填 | 说明 |
16
+ |------|------|------|
17
+ | `--appcode <code>` | 否 | 目标应用编码;未配置默认 app 时必填 |
18
+ | `--code <code>` | 是 | Dataset code |
19
+ | `--format <fmt>` | 否 | 输出格式,AI Agent 优先用 `compress` |
20
+
21
+ ## 输出与语义
22
+
23
+ - 输出 `operation`、Dataset 摘要、`count` 和排序稳定的 `fields`。
24
+ - 每个字段只包含 `id`、`code`、`displayName`、`deleted=true`、`deletionSource=user`。
25
+ - 不透传服务端原始 `extend` 或 `_userModifiedKeys`。
26
+ - 空列表正常返回 `ok=true` 和 `count=0`。
27
+ - 这里只包含用户删除墓碑字段,不包含没有用户墓碑的普通 AI 软删字段。
28
+
29
+ DB 分析 `SUCCESS` 表示任务按当前规则完成;用户删除墓碑会阻止同名物理列自动重新生成。因此排查“物理列存在但 Dataset 字段缺失”时,先运行本命令。
30
+
31
+ ## 后续恢复
32
+
33
+ 需要恢复时,将返回的精确 `fields[].code` 传给 `field-restore --field`。不要传展示名或字段 ID:
34
+
35
+ ```bash
36
+ rabetbase dataset field-restore \
37
+ --code 1a90dbff5f094a9a89936fa99b10984c \
38
+ --field space_type_code \
39
+ --dry-run \
40
+ --format compress
41
+ ```
42
+
43
+ ## 参考
44
+
45
+ - [dataset field-restore](rabetbase-dataset-field-restore.md)
46
+ - [dataset detail](rabetbase-dataset-detail.md)
47
+ - [SKILL.md](../SKILL.md)
@@ -0,0 +1,92 @@
1
+ # rabetbase deployment sync
2
+
3
+ 将当前应用中指定数据库连接下的少量研发元数据同步到独立部署目标。命令只同步显式给出的业务编码,支持 `dataset`、`bff`、`sql`。
4
+
5
+ ## 使用前确认
6
+
7
+ - 已完成 rabetbase 认证,并明确目标应用的 `appCode`。
8
+ - 从可信事实中取得基础 dblink/环境连接组 ID 和业务编码,不猜测 ID 或编码。
9
+ - `--target-env` 只选择服务端维护的环境连接映射;CLI 不保存数据库 URL、账号、密码或环境到连接 ID 的映射。
10
+ - 服务端同步接口会检查目标 appCode 的一键部署开关;未开启时正常跳过,不属于异常或无权限。
11
+ - 同一批最多 100 个编码;需要分批时逐批确认结果,不并发执行。
12
+
13
+ ## 先预览
14
+
15
+ 环境部署:
16
+
17
+ ```sh
18
+ rabetbase deployment sync \
19
+ --appcode <appCode> \
20
+ --db-id <dbLinkId> \
21
+ --target-env test \
22
+ --type dataset \
23
+ --codes <code1,code2> \
24
+ --dry-run \
25
+ --format compress
26
+ ```
27
+
28
+ 直连部署:
29
+
30
+ ```sh
31
+ rabetbase deployment sync \
32
+ --appcode <appCode> \
33
+ --db-id <dbLinkId> \
34
+ --direct \
35
+ --type bff \
36
+ --codes <code1> \
37
+ --dry-run \
38
+ --format compress
39
+ ```
40
+
41
+ 检查输出中的 `data.selector.targetMode`、`data.selector.targetEnv`、`data.selector.bizType`、`data.selector.bizCodes` 和 `data.selector.dbLinkId`。dry-run 不发起同步请求。
42
+
43
+ ## 正式执行
44
+
45
+ 复用已审阅的参数,移除 `--dry-run` 并追加 `--confirm`。CI 或非交互环境还需要全局 `--yes`:
46
+
47
+ ```sh
48
+ rabetbase deployment sync \
49
+ --appcode <appCode> \
50
+ --db-id <dbLinkId> \
51
+ --target-env test \
52
+ --type dataset \
53
+ --codes <code1,code2> \
54
+ --confirm \
55
+ --yes \
56
+ --format compress
57
+ ```
58
+
59
+ ## 参数约束
60
+
61
+ - `--db-id`:正整数基础 dblink/环境连接组 ID;不是某个环境的最终连接 ID。
62
+ - `--target-env dev|test|pre|prod`:服务端环境连接映射选择器;与 `--direct` 必须且只能选择一个。
63
+ - `--type dataset|bff|sql`:同步资源类型。
64
+ - `--codes`:逗号分隔;命令 trim、过滤空项并按首次出现顺序去重,最多 100 个。
65
+ - 全局 `--env production|daily` 只决定 CLI 服务域,不是部署目标;不要用它替代 `--target-env`。
66
+
67
+ ## 结果与失败处理
68
+
69
+ - 退出码 `0`:服务端没有返回 `FAILED`;`SKIPPED`、`UNCHANGED` 等 no-op action 或空 items 均表示无需执行,不作为异常。
70
+ - 退出码 `1`:至少一个条目为 `FAILED`。读取结构化输出的 `data.items[]`,保留成功项和失败项的完整事实,不要把整批误报为失败或成功,也不要自动重提整批。
71
+ - 退出码 `2`:写请求响应丢失或响应无法证明结果。同步可能已经生效;先人工核对目标部署,再决定是否处理未完成项,禁止直接重试。
72
+
73
+ Dataset 同步会先确保目标数据库连接存在,再逐项同步 Dataset,不是跨资源原子事务。命令当前不提供目标端只读回查;部署后的业务可用性仍需单独验收。
74
+
75
+ ## 日常 BFF / SQL push 自动同步
76
+
77
+ 只有用户明确要求将日常开发变更持续同步到独立部署测试环境时,才写入 app profile:
78
+
79
+ ```sh
80
+ rabetbase workspace use --app <appName> --appcode <appCode> \
81
+ --deployment-db-id <dbLinkId> --deployment-target-env dev
82
+ ```
83
+
84
+ - 自动目标仅允许 `dev`、`test`、`pre`;生产和直连仍用显式命令并要求确认。
85
+ - 每个 app profile 只保存一个明确的自动目标,不根据 Git 分支、CLI 服务域或登录状态推断环境。
86
+ - 存在实际变更且主 push 成功后调用一次同步接口,由服务端检查 appCode 开关并按 `(dbLinkId, targetEnv)` 解析真实连接;未开启时正常 no-op,环境映射缺失则是配置错误。
87
+ - `bff push` 只同步本次上传成功且完成缓存清理的 function name。
88
+ - `sql push` 只同步本次 pushed sqlCode;未变化项不触发同步。
89
+ - Dataset 没有统一 push 入口,暂不自动同步。
90
+ - dry-run 展示配置目标和精确 code,但不发请求。
91
+ - 主 push 成功但后置同步失败时,不声称回滚主操作;只有同步请求已提交后才按 `data.deploymentSync.recoveryCommand` 人工处理。
92
+ - `partial_failure`、`failed`、`outcome_unknown` 均不得自动重试。
@@ -2,8 +2,8 @@
2
2
  "schemaVersion": 1,
3
3
  "name": "rabetbase",
4
4
  "packageName": "@lovrabet/rabetbase-cli",
5
- "packageVersion": "2.5.1-beta.1",
6
- "skillVersion": "2.5.1-beta.1",
5
+ "packageVersion": "2.5.1-beta.2",
6
+ "skillVersion": "2.5.1-beta.2",
7
7
  "files": [
8
8
  "SKILL.md",
9
9
  "guides/backend-function.md",
@@ -59,6 +59,7 @@
59
59
  "references/rabetbase-dataset-delete.md",
60
60
  "references/rabetbase-dataset-detail.md",
61
61
  "references/rabetbase-dataset-extend-update.md",
62
+ "references/rabetbase-dataset-field-restore.md",
62
63
  "references/rabetbase-dataset-field-update.md",
63
64
  "references/rabetbase-dataset-generate.md",
64
65
  "references/rabetbase-dataset-list.md",
@@ -68,6 +69,7 @@
68
69
  "references/rabetbase-dataset-relations.md",
69
70
  "references/rabetbase-dataset-rename.md",
70
71
  "references/rabetbase-dataset-restore.md",
72
+ "references/rabetbase-dataset-user-deleted-field-list.md",
71
73
  "references/rabetbase-db-analyze.md",
72
74
  "references/rabetbase-db-create.md",
73
75
  "references/rabetbase-db-delete.md",
@@ -78,6 +80,7 @@
78
80
  "references/rabetbase-db-tables.md",
79
81
  "references/rabetbase-db-test.md",
80
82
  "references/rabetbase-db-update.md",
83
+ "references/rabetbase-deployment-sync.md",
81
84
  "references/rabetbase-doctor.md",
82
85
  "references/rabetbase-file.md",
83
86
  "references/rabetbase-init.md",
@@ -132,5 +135,5 @@
132
135
  "references/rabetbase-user-account.md",
133
136
  "references/rabetbase-workspace.md"
134
137
  ],
135
- "digest": "a115d40353c6e1a7dd167f84e0dedeba993b267ede3bb7a4e950d8096c2d81c7"
138
+ "digest": "11bce5b48dd571defc4c17a16fe89045ec5d55e8988f91220676c8bcb3efd2c0"
136
139
  }