@lovrabet/rabetbase-cli 2.4.4 → 2.4.5-beta.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 (330) 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/auth/auth-server-ui.js +1 -1
  5. package/lib/auth/auth-server.js +1 -1
  6. package/lib/auth/constant.js +1 -1
  7. package/lib/auth/get-cookie.js +1 -1
  8. package/lib/auth/get-session-user.js +1 -1
  9. package/lib/auth/is-session-valid.js +1 -1
  10. package/lib/auth/login-success-html.js +1 -1
  11. package/lib/auth/logout.js +1 -1
  12. package/lib/cli-flags.js +1 -1
  13. package/lib/cli.js +1 -1
  14. package/lib/commands/api/generate.js +1 -1
  15. package/lib/commands/api/index.js +1 -1
  16. package/lib/commands/api/list.js +1 -1
  17. package/lib/commands/api/pull.js +1 -1
  18. package/lib/commands/api/shared.js +1 -1
  19. package/lib/commands/app/index.js +1 -1
  20. package/lib/commands/app/list.js +1 -1
  21. package/lib/commands/app/members-list.js +1 -1
  22. package/lib/commands/app/remote-directory.js +1 -1
  23. package/lib/commands/app/shared.js +1 -1
  24. package/lib/commands/app-config/delete.js +1 -1
  25. package/lib/commands/app-config/get.js +1 -1
  26. package/lib/commands/app-config/index.js +1 -1
  27. package/lib/commands/app-config/list.js +1 -1
  28. package/lib/commands/app-config/set.js +1 -1
  29. package/lib/commands/app-config/shared.js +1 -1
  30. package/lib/commands/auth/index.js +1 -1
  31. package/lib/commands/bff/create.js +1 -1
  32. package/lib/commands/bff/delete.js +1 -1
  33. package/lib/commands/bff/detail.js +1 -1
  34. package/lib/commands/bff/index.js +1 -1
  35. package/lib/commands/bff/list.js +1 -1
  36. package/lib/commands/bff/pull.js +1 -1
  37. package/lib/commands/bff/push.js +1 -1
  38. package/lib/commands/bff/status.js +1 -1
  39. package/lib/commands/cli-skill/index.js +1 -1
  40. package/lib/commands/cli-update.js +1 -1
  41. package/lib/commands/codegen/index.js +1 -1
  42. package/lib/commands/codegen/sdk.js +1 -1
  43. package/lib/commands/codegen/sql.js +1 -1
  44. package/lib/commands/common/app-registry.js +1 -1
  45. package/lib/commands/common/app-selector.js +1 -1
  46. package/lib/commands/common/async-task.js +1 -1
  47. package/lib/commands/common/dry-run.js +1 -1
  48. package/lib/commands/common/flags.d.ts +1 -0
  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/{permit/index.d.ts → dataset/business-groups.d.ts} +1 -1
  63. package/lib/commands/dataset/business-groups.js +1 -0
  64. package/lib/commands/dataset/capability.js +1 -1
  65. package/lib/commands/dataset/delete.js +1 -1
  66. package/lib/commands/dataset/detail.js +1 -1
  67. package/lib/commands/dataset/extend-update.js +1 -1
  68. package/lib/commands/dataset/field-update.js +1 -1
  69. package/lib/commands/dataset/generate.js +1 -1
  70. package/lib/commands/dataset/index.js +1 -1
  71. package/lib/commands/dataset/list.js +1 -1
  72. package/lib/commands/dataset/operations.js +1 -1
  73. package/lib/commands/dataset/relation-audit.js +1 -1
  74. package/lib/commands/dataset/relation-create.js +1 -1
  75. package/lib/commands/dataset/relation-delete.js +1 -1
  76. package/lib/commands/dataset/relation-shared.js +1 -1
  77. package/lib/commands/dataset/relation-update.js +1 -1
  78. package/lib/commands/dataset/relations.js +1 -1
  79. package/lib/commands/dataset/rename.js +1 -1
  80. package/lib/commands/dataset/restore.js +1 -1
  81. package/lib/commands/db/analysis-batching.js +1 -1
  82. package/lib/commands/db/analyze-batch-plan.js +1 -1
  83. package/lib/commands/db/analyze-cancel.js +1 -1
  84. package/lib/commands/db/analyze-start.js +1 -1
  85. package/lib/commands/db/analyze-status.js +1 -1
  86. package/lib/commands/db/create.js +1 -1
  87. package/lib/commands/db/delete.js +1 -1
  88. package/lib/commands/db/detail.js +1 -1
  89. package/lib/commands/db/diff-refresh-start.js +1 -1
  90. package/lib/commands/db/diff-refresh-status.js +1 -1
  91. package/lib/commands/db/diff.js +1 -1
  92. package/lib/commands/db/index.js +1 -1
  93. package/lib/commands/db/list.js +1 -1
  94. package/lib/commands/db/shared.d.ts +15 -1
  95. package/lib/commands/db/shared.js +1 -1
  96. package/lib/commands/db/tables.js +1 -1
  97. package/lib/commands/db/test.js +1 -1
  98. package/lib/commands/db/update.js +1 -1
  99. package/lib/commands/doctor.js +1 -1
  100. package/lib/commands/file/index.js +1 -1
  101. package/lib/commands/init/index.js +1 -1
  102. package/lib/commands/issue/index.js +1 -1
  103. package/lib/commands/issue/nudge.js +1 -1
  104. package/lib/commands/issue/report.js +1 -1
  105. package/lib/commands/issue/shared.js +1 -1
  106. package/lib/commands/kb/create.js +1 -1
  107. package/lib/commands/kb/delete.js +1 -1
  108. package/lib/commands/kb/detail.js +1 -1
  109. package/lib/commands/kb/index.js +1 -1
  110. package/lib/commands/kb/list.js +1 -1
  111. package/lib/commands/kb/shared.js +1 -1
  112. package/lib/commands/kb/update.js +1 -1
  113. package/lib/commands/logs/index.js +1 -1
  114. package/lib/commands/menu/asset-update.js +1 -1
  115. package/lib/commands/menu/delete.js +1 -1
  116. package/lib/commands/menu/external-link-create.js +1 -1
  117. package/lib/commands/menu/external-link-update.js +1 -1
  118. package/lib/commands/menu/group-create.js +1 -1
  119. package/lib/commands/menu/group-update.js +1 -1
  120. package/lib/commands/menu/index.js +1 -1
  121. package/lib/commands/menu/list.js +1 -1
  122. package/lib/commands/menu/move.js +1 -1
  123. package/lib/commands/menu/regroup-start.js +1 -1
  124. package/lib/commands/menu/rename.js +1 -1
  125. package/lib/commands/menu/shared/compare-table.js +1 -1
  126. package/lib/commands/menu/shared/delete-plan.js +1 -1
  127. package/lib/commands/menu/shared/facts.js +1 -1
  128. package/lib/commands/menu/shared/index.js +1 -1
  129. package/lib/commands/menu/shared/inquirer.js +1 -1
  130. package/lib/commands/menu/shared/local-pages.js +1 -1
  131. package/lib/commands/menu/shared/logic.js +1 -1
  132. package/lib/commands/menu/shared/mutations.js +1 -1
  133. package/lib/commands/menu/shared/service.js +1 -1
  134. package/lib/commands/menu/shared/sync-core.js +1 -1
  135. package/lib/commands/menu/shared/update-core.js +1 -1
  136. package/lib/commands/menu/shared/valid-url.js +1 -1
  137. package/lib/commands/menu/sync.js +1 -1
  138. package/lib/commands/notification/config-create.js +1 -1
  139. package/lib/commands/notification/config-delete.js +1 -1
  140. package/lib/commands/notification/config-list.js +1 -1
  141. package/lib/commands/notification/config-update.js +1 -1
  142. package/lib/commands/notification/index.js +1 -1
  143. package/lib/commands/notification/shared.js +1 -1
  144. package/lib/commands/ocr/index.js +1 -1
  145. package/lib/commands/page/generate-start.js +1 -1
  146. package/lib/commands/page/generate-status.js +1 -1
  147. package/lib/commands/page/index.js +1 -1
  148. package/lib/commands/page/pull.js +1 -1
  149. package/lib/commands/page/push.js +1 -1
  150. package/lib/commands/page/react/create.js +1 -1
  151. package/lib/commands/page/react/detail.js +1 -1
  152. package/lib/commands/page/react/list.js +1 -1
  153. package/lib/commands/page/react/publish.js +1 -1
  154. package/lib/commands/page/react/shared.js +1 -1
  155. package/lib/commands/page/react/syntax.js +1 -1
  156. package/lib/commands/page/react/template.js +1 -1
  157. package/lib/commands/page/react/update.js +1 -1
  158. package/lib/commands/page/relation-audit.js +1 -1
  159. package/lib/commands/page/restore.js +1 -1
  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/project/create/enhanced-guided-create.js +1 -1
  164. package/lib/commands/project/create/format-elapsed.js +1 -1
  165. package/lib/commands/project/create/main.js +1 -1
  166. package/lib/commands/project/create/materialize-project-template.js +1 -1
  167. package/lib/commands/project/create/project-name.js +1 -1
  168. package/lib/commands/project/create/project-template-archive.js +1 -1
  169. package/lib/commands/project/create/project-template-path.js +1 -1
  170. package/lib/commands/project/create/use-copy-project-template.js +1 -1
  171. package/lib/commands/project/create/use-format-code.js +1 -1
  172. package/lib/commands/project/create/use-install-dependencies.js +1 -1
  173. package/lib/commands/project/index.js +1 -1
  174. package/lib/commands/project/upgrade.js +1 -1
  175. package/lib/commands/registry.js +1 -1
  176. package/lib/commands/role/delete.js +1 -1
  177. package/lib/commands/role/detail.js +1 -1
  178. package/lib/commands/role/index.js +1 -1
  179. package/lib/commands/role/list.js +1 -1
  180. package/lib/commands/role/shared.d.ts +15 -17
  181. package/lib/commands/role/shared.js +1 -1
  182. package/lib/commands/role/update.js +1 -1
  183. package/lib/commands/role/user-add.js +1 -1
  184. package/lib/commands/role/user-remove.js +1 -1
  185. package/lib/commands/role/user-resolve.js +1 -1
  186. package/lib/commands/run/index.js +1 -1
  187. package/lib/commands/schema.js +1 -1
  188. package/lib/commands/sql/create.js +1 -1
  189. package/lib/commands/sql/delete.js +1 -1
  190. package/lib/commands/sql/detail.js +1 -1
  191. package/lib/commands/sql/exec.js +1 -1
  192. package/lib/commands/sql/index.js +1 -1
  193. package/lib/commands/sql/list.js +1 -1
  194. package/lib/commands/sql/pull.js +1 -1
  195. package/lib/commands/sql/push.js +1 -1
  196. package/lib/commands/sql/shared.js +1 -1
  197. package/lib/commands/sql/status.js +1 -1
  198. package/lib/commands/sql/validate.js +1 -1
  199. package/lib/commands/task/index.js +1 -1
  200. package/lib/commands/task/status.js +1 -1
  201. package/lib/commands/tenant/index.js +1 -1
  202. package/lib/commands/tenant/members-list.js +1 -1
  203. package/lib/commands/tenant/shared.js +1 -1
  204. package/lib/commands/user-account/dingding-sandbox-bind.js +1 -1
  205. package/lib/commands/user-account/index.js +1 -1
  206. package/lib/commands/workspace/add.js +1 -1
  207. package/lib/commands/workspace/index.js +1 -1
  208. package/lib/commands/workspace/remove.js +1 -1
  209. package/lib/config/schema.js +1 -1
  210. package/lib/constant/cdn.js +1 -1
  211. package/lib/constant/cli.js +1 -1
  212. package/lib/constant/defaults.js +1 -1
  213. package/lib/constant/domain.js +1 -1
  214. package/lib/constant/env.js +1 -1
  215. package/lib/constant/output.js +1 -1
  216. package/lib/constant/paths.js +1 -1
  217. package/lib/constant/risk.js +1 -1
  218. package/lib/context/app-resolver.js +1 -1
  219. package/lib/context/auth-resolver.js +1 -1
  220. package/lib/context/config-loader.js +1 -1
  221. package/lib/context.js +1 -1
  222. package/lib/core/alias-resolver.js +1 -1
  223. package/lib/core/api-client.d.ts +70 -79
  224. package/lib/core/api-client.js +1 -1
  225. package/lib/core/bff/config.js +1 -1
  226. package/lib/core/bff/file-system.d.ts +1 -0
  227. package/lib/core/bff/file-system.js +1 -1
  228. package/lib/core/bff/hash.js +1 -1
  229. package/lib/core/bff/lock.js +1 -1
  230. package/lib/core/bff/utils.js +1 -1
  231. package/lib/core/db-resolver.js +1 -1
  232. package/lib/core/page/file-system.js +1 -1
  233. package/lib/core/page/hash.js +1 -1
  234. package/lib/core/page/lock.js +1 -1
  235. package/lib/core/sql-index-auditor.js +1 -1
  236. package/lib/core/sql-sync/config.js +1 -1
  237. package/lib/core/sql-sync/file-system.js +1 -1
  238. package/lib/core/sql-sync/hash.js +1 -1
  239. package/lib/core/sql-sync/lock.js +1 -1
  240. package/lib/core/sql-sync/utils.js +1 -1
  241. package/lib/core/sql-validator.js +1 -1
  242. package/lib/errors.js +1 -1
  243. package/lib/framework/build-all-flags.js +1 -1
  244. package/lib/framework/error-output.js +1 -1
  245. package/lib/framework/explicit-yes.js +1 -1
  246. package/lib/framework/flags.js +1 -1
  247. package/lib/framework/help.js +1 -1
  248. package/lib/framework/index.js +1 -1
  249. package/lib/framework/output.js +1 -1
  250. package/lib/framework/response.js +1 -1
  251. package/lib/framework/runner-alias.js +1 -1
  252. package/lib/framework/runner.js +1 -1
  253. package/lib/framework/schema-export.js +1 -1
  254. package/lib/framework/types.js +1 -1
  255. package/lib/generated/build-info.d.ts +4 -4
  256. package/lib/generated/build-info.js +1 -1
  257. package/lib/help.js +1 -1
  258. package/lib/postinstall.js +1 -1
  259. package/lib/runtime/confirmation.js +1 -1
  260. package/lib/runtime/event.js +1 -1
  261. package/lib/runtime/index.js +1 -1
  262. package/lib/runtime/queue.js +1 -1
  263. package/lib/runtime/resolve.js +1 -1
  264. package/lib/skills/builtin-skill.js +1 -1
  265. package/lib/skills/main.js +1 -1
  266. package/lib/skills/npx-skills-add.js +1 -1
  267. package/lib/skills/skill-presence.js +1 -1
  268. package/lib/telemetry/cli-command-trace.js +1 -1
  269. package/lib/telemetry/cli-help-trace.js +1 -1
  270. package/lib/telemetry/ensure-cli-otel-config.js +1 -1
  271. package/lib/telemetry/register-otel-exit-shutdown.js +1 -1
  272. package/lib/telemetry/send-cli-trace-log.js +1 -1
  273. package/lib/telemetry/send-platform-issue-collect-log.js +1 -1
  274. package/lib/utils/ai_config.js +1 -1
  275. package/lib/utils/apply-jq-filter.js +1 -1
  276. package/lib/utils/cdn-config.js +1 -1
  277. package/lib/utils/check-sdk-version.js +1 -1
  278. package/lib/utils/cli-version-check.js +1 -1
  279. package/lib/utils/cli-version-policy.js +1 -1
  280. package/lib/utils/config.js +1 -1
  281. package/lib/utils/entity-with-id.js +1 -1
  282. package/lib/utils/file-utils.js +1 -1
  283. package/lib/utils/guides-cdn.js +1 -1
  284. package/lib/utils/http-client.js +1 -1
  285. package/lib/utils/is-non-interactive.js +1 -1
  286. package/lib/utils/logger.js +1 -1
  287. package/lib/utils/params.js +1 -1
  288. package/lib/utils/platform.js +1 -1
  289. package/lib/utils/rules-cdn.js +1 -1
  290. package/lib/utils/sleep.js +1 -1
  291. package/lib/utils/template-replacer.js +1 -1
  292. package/lib/utils/update-notice.js +1 -1
  293. package/lib/utils/version.js +1 -1
  294. package/lib/utils/with-active-cookie.js +1 -1
  295. package/lib/utils/write-cli-side-channel.js +1 -1
  296. package/package.json +1 -1
  297. package/skills/rabetbase/SKILL.md +18 -24
  298. package/skills/rabetbase/guides/database-connection-workflow.md +6 -2
  299. package/skills/rabetbase/references/rabetbase-dataset-business-groups.md +28 -0
  300. package/skills/rabetbase/references/rabetbase-dataset-delete.md +7 -5
  301. package/skills/rabetbase/references/rabetbase-dataset-list.md +6 -6
  302. package/skills/rabetbase/references/rabetbase-dataset-restore.md +5 -5
  303. package/skills/rabetbase/references/rabetbase-db-create.md +3 -0
  304. package/skills/rabetbase/references/rabetbase-db-delete.md +10 -2
  305. package/skills/rabetbase/references/rabetbase-db-detail.md +2 -0
  306. package/skills/rabetbase/references/rabetbase-db-list.md +3 -2
  307. package/skills/rabetbase/references/rabetbase-db-update.md +4 -2
  308. package/skills/rabetbase/references/rabetbase-role-list.md +9 -17
  309. package/skills/rabetbase/references/rabetbase-role-user-add.md +44 -16
  310. package/skills/rabetbase/references/rabetbase-role-user-resolve.md +2 -2
  311. package/skills/rabetbase.manifest.json +4 -7
  312. package/lib/commands/permit/index.js +0 -1
  313. package/lib/commands/permit/page-get.d.ts +0 -2
  314. package/lib/commands/permit/page-get.js +0 -1
  315. package/lib/commands/permit/page-set.d.ts +0 -2
  316. package/lib/commands/permit/page-set.js +0 -1
  317. package/lib/commands/permit/role-apis-set.d.ts +0 -2
  318. package/lib/commands/permit/role-apis-set.js +0 -1
  319. package/lib/commands/permit/role-menus-set.d.ts +0 -2
  320. package/lib/commands/permit/role-menus-set.js +0 -1
  321. package/lib/commands/permit/role-menus.d.ts +0 -2
  322. package/lib/commands/permit/role-menus.js +0 -1
  323. package/lib/commands/permit/shared.d.ts +0 -74
  324. package/lib/commands/permit/shared.js +0 -1
  325. package/lib/commands/role/create.d.ts +0 -2
  326. package/lib/commands/role/create.js +0 -1
  327. package/skills/rabetbase/guides/role-permit-workflow.md +0 -127
  328. package/skills/rabetbase/references/rabetbase-permit-page-set.md +0 -69
  329. package/skills/rabetbase/references/rabetbase-permit-role-apis-set.md +0 -53
  330. package/skills/rabetbase/references/rabetbase-permit-role-menus-set.md +0 -57
@@ -1 +1 @@
1
- const a291_0x4d5686=a291_0x3072;function a291_0x3072(_0x295e3e,_0x48df25){_0x295e3e=_0x295e3e-0xbb;const _0x1e9672=a291_0x1e96();let _0x3072e4=_0x1e9672[_0x295e3e];return _0x3072e4;}(function(_0x236f10,_0x41c6a5){const _0x3a6e77=a291_0x3072,_0x48d36f=_0x236f10();while(!![]){try{const _0x3e1cdf=-parseInt(_0x3a6e77(0xd1))/0x1*(-parseInt(_0x3a6e77(0xdd))/0x2)+parseInt(_0x3a6e77(0xbf))/0x3*(parseInt(_0x3a6e77(0xbc))/0x4)+parseInt(_0x3a6e77(0xc3))/0x5+parseInt(_0x3a6e77(0xe4))/0x6+parseInt(_0x3a6e77(0xee))/0x7*(-parseInt(_0x3a6e77(0xd5))/0x8)+parseInt(_0x3a6e77(0xbe))/0x9*(parseInt(_0x3a6e77(0xd9))/0xa)+-parseInt(_0x3a6e77(0xc7))/0xb;if(_0x3e1cdf===_0x41c6a5)break;else _0x48d36f['push'](_0x48d36f['shift']());}catch(_0x38037e){_0x48d36f['push'](_0x48d36f['shift']());}}}(a291_0x1e96,0x31c46));import a291_0x287d38 from'winston';function a291_0x1e96(){const _0x3102b8=['message','red','error','info','1KWRlPj','clear','logFilePath','map','8IJbawE','warn','.lovrabet.log','setLogPath','475990PArWHk','transports','unknown','level','379396tacGEu','existsSync','combine','command','now','details','utf8','2150040yAlRdG','parse','trim','clearLogs','timestamp','printf','Failed\x20to\x20read\x20logs:','success','mkdirSync','toISOString','2661337pIUtbc','duration','dirname','stringify','rawCommand','开始执行:\x20','1364468yADLbx','format','18zveuWD','3NEuqII','失败:\x20','winstonLogger','yellow','1616620eDjHsE','blue','currentRawCommand','initWinstonLogger','7960040dJJkzh','File','logTask','readLogs','split','readFileSync'];a291_0x1e96=function(){return _0x3102b8;};return a291_0x1e96();}import a291_0x52d2b3 from'node:fs';import a291_0x590050 from'node:path';class Logger{[a291_0x4d5686(0xc1)];[a291_0x4d5686(0xd3)];[a291_0x4d5686(0xc5)]='';constructor(){const _0x47d418=a291_0x4d5686;this[_0x47d418(0xd3)]='';}['setRawCommand'](_0x460e50){const _0x200f7f=a291_0x4d5686;this[_0x200f7f(0xc5)]=_0x460e50;}[a291_0x4d5686(0xc6)](){const _0x357880=a291_0x4d5686,_0x15d35d=a291_0x590050[_0x357880(0xf0)](this['logFilePath']);!a291_0x52d2b3[_0x357880(0xde)](_0x15d35d)&&a291_0x52d2b3[_0x357880(0xec)](_0x15d35d,{'recursive':!![]});const _0x4c39f2=a291_0x287d38[_0x357880(0xbd)][_0x357880(0xdf)](a291_0x287d38['format']['timestamp'](),a291_0x287d38[_0x357880(0xbd)]['errors']({'stack':!![]}),a291_0x287d38['format'][_0x357880(0xe9)](_0x47e51a=>{const _0x36c03e=_0x357880,_0x131eca={'timestamp':_0x47e51a[_0x36c03e(0xe8)]||new Date()[_0x36c03e(0xed)](),'level':_0x47e51a[_0x36c03e(0xdc)]||_0x36c03e(0xd0),'command':_0x47e51a[_0x36c03e(0xe0)]||_0x36c03e(0xdb),'rawCommand':_0x47e51a[_0x36c03e(0xf2)]||this[_0x36c03e(0xc5)]||undefined,'message':_0x47e51a[_0x36c03e(0xcd)]||'','duration':_0x47e51a[_0x36c03e(0xef)]||undefined,'details':_0x47e51a[_0x36c03e(0xe2)]||undefined};return JSON[_0x36c03e(0xf1)](_0x131eca);}));this['winstonLogger']=a291_0x287d38['createLogger']({'level':_0x357880(0xd0),'format':_0x4c39f2,'transports':[new a291_0x287d38[(_0x357880(0xda))][(_0x357880(0xc8))]({'filename':this['logFilePath'],'level':_0x357880(0xd0)})],'silent':![]}),a291_0x287d38['addColors']({'success':'green','error':_0x357880(0xce),'warn':_0x357880(0xc2),'info':_0x357880(0xc4)});}[a291_0x4d5686(0xd8)](_0x4989c8){const _0x4443f3=a291_0x4d5686;this[_0x4443f3(0xd3)]=a291_0x590050['join'](_0x4989c8,_0x4443f3(0xd7)),this[_0x4443f3(0xc1)]&&this[_0x4443f3(0xc1)][_0x4443f3(0xd2)](),this['initWinstonLogger']();}['info'](_0x40e139,_0x3eba69,_0x183f2d){const _0x163046=a291_0x4d5686;if(!this[_0x163046(0xd3)]||!this['winstonLogger'])return;this[_0x163046(0xc1)][_0x163046(0xd0)](_0x3eba69,{'command':_0x40e139,'details':_0x183f2d});}['success'](_0x16828f,_0x4029f1,_0x43c6c4,_0x3220f5){const _0x3d5c63=a291_0x4d5686;if(!this[_0x3d5c63(0xd3)]||!this[_0x3d5c63(0xc1)])return;this[_0x3d5c63(0xc1)]['log']('info',_0x4029f1,{'level':_0x3d5c63(0xeb),'command':_0x16828f,'duration':_0x43c6c4,'details':_0x3220f5});}['error'](_0x5b51f9,_0x4920dd,_0x391879){const _0x243510=a291_0x4d5686;if(!this['logFilePath']||!this[_0x243510(0xc1)])return;this[_0x243510(0xc1)][_0x243510(0xcf)](_0x4920dd,{'command':_0x5b51f9,'details':_0x391879});}[a291_0x4d5686(0xd6)](_0x19b4b3,_0x5acce9,_0x26c88d){const _0x29f2c0=a291_0x4d5686;if(!this[_0x29f2c0(0xd3)]||!this[_0x29f2c0(0xc1)])return;this[_0x29f2c0(0xc1)]['warn'](_0x5acce9,{'command':_0x19b4b3,'details':_0x26c88d});}async[a291_0x4d5686(0xc9)](_0x103582,_0x19cdd5,_0xd22cfc){const _0x1e2b7e=a291_0x4d5686,_0x8dd6bb=Date['now']();this[_0x1e2b7e(0xd0)](_0x103582,_0x1e2b7e(0xbb)+_0x19cdd5);try{const _0x7f60e2=await _0xd22cfc(),_0x2d226c=Date[_0x1e2b7e(0xe1)]()-_0x8dd6bb;return this[_0x1e2b7e(0xeb)](_0x103582,'完成:\x20'+_0x19cdd5,_0x2d226c),_0x7f60e2;}catch(_0xe9bb1f){const _0x58b417=Date[_0x1e2b7e(0xe1)]()-_0x8dd6bb;this[_0x1e2b7e(0xcf)](_0x103582,_0x1e2b7e(0xc0)+_0x19cdd5,{'error':_0xe9bb1f instanceof Error?_0xe9bb1f[_0x1e2b7e(0xcd)]:String(_0xe9bb1f),'duration':_0x58b417});throw _0xe9bb1f;}}[a291_0x4d5686(0xca)](){const _0x36469c=a291_0x4d5686;try{if(!a291_0x52d2b3[_0x36469c(0xde)](this[_0x36469c(0xd3)]))return[];const _0x52697f=a291_0x52d2b3[_0x36469c(0xcc)](this['logFilePath'],'utf8');return _0x52697f[_0x36469c(0xcb)]('\x0a')['filter'](_0x258dde=>_0x258dde[_0x36469c(0xe6)]())[_0x36469c(0xd4)](_0x5480c9=>JSON[_0x36469c(0xe5)](_0x5480c9));}catch(_0x106f2d){return console[_0x36469c(0xd6)](_0x36469c(0xea),_0x106f2d),[];}}[a291_0x4d5686(0xe7)](){const _0x4e97fa=a291_0x4d5686;try{a291_0x52d2b3[_0x4e97fa(0xde)](this[_0x4e97fa(0xd3)])&&a291_0x52d2b3['writeFileSync'](this[_0x4e97fa(0xd3)],'',_0x4e97fa(0xe3));}catch(_0x1b7246){console[_0x4e97fa(0xd6)]('Failed\x20to\x20clear\x20logs:',_0x1b7246);}}['getWinstonInstance'](){const _0x252c09=a291_0x4d5686;return this[_0x252c09(0xc1)];}}export const logger=new Logger();
1
+ const a284_0xf49431=a284_0x2352;(function(_0x674ef3,_0x31546d){const _0x47264b=a284_0x2352,_0x1b95fb=_0x674ef3();while(!![]){try{const _0x353000=parseInt(_0x47264b(0x14d))/0x1*(-parseInt(_0x47264b(0x13d))/0x2)+-parseInt(_0x47264b(0x120))/0x3+parseInt(_0x47264b(0x123))/0x4+-parseInt(_0x47264b(0x13a))/0x5+-parseInt(_0x47264b(0x12c))/0x6*(-parseInt(_0x47264b(0x14a))/0x7)+-parseInt(_0x47264b(0x11f))/0x8*(parseInt(_0x47264b(0x139))/0x9)+-parseInt(_0x47264b(0x144))/0xa*(-parseInt(_0x47264b(0x11b))/0xb);if(_0x353000===_0x31546d)break;else _0x1b95fb['push'](_0x1b95fb['shift']());}catch(_0x3a8514){_0x1b95fb['push'](_0x1b95fb['shift']());}}}(a284_0x10cd,0x21ccf));import a284_0x16af43 from'winston';function a284_0x2352(_0x54e051,_0x2626ce){_0x54e051=_0x54e051-0x116;const _0x10cddd=a284_0x10cd();let _0x2352b2=_0x10cddd[_0x54e051];return _0x2352b2;}import a284_0x30f0c5 from'node:fs';import a284_0x595412 from'node:path';function a284_0x10cd(){const _0x10e23e=['.lovrabet.log','1FfHvYC','unknown','parse','yellow','readFileSync','error','stringify','11xKcBjs','writeFileSync','combine','currentRawCommand','24EttQja','268368rALDSe','timestamp','setLogPath','416516QSGmIF','duration','readLogs','command','existsSync','失败:\x20','File','log','Failed\x20to\x20read\x20logs:','3918Ixixkh','initWinstonLogger','getWinstonInstance','red','info','warn','success','now','trim','blue','format','map','clear','509751YTGUpp','1244625XCTfcK','mkdirSync','green','383342DixmXi','utf8','开始执行:\x20','message','createLogger','logFilePath','logTask','5971570qhMcVD','Failed\x20to\x20clear\x20logs:','setRawCommand','errors','printf','details','1470bPZtsS','winstonLogger'];a284_0x10cd=function(){return _0x10e23e;};return a284_0x10cd();}class Logger{[a284_0xf49431(0x14b)];[a284_0xf49431(0x142)];[a284_0xf49431(0x11e)]='';constructor(){this['logFilePath']='';}[a284_0xf49431(0x146)](_0x2f0b6b){this['currentRawCommand']=_0x2f0b6b;}[a284_0xf49431(0x12d)](){const _0x298e37=a284_0xf49431,_0x39f69e=a284_0x595412['dirname'](this['logFilePath']);!a284_0x30f0c5['existsSync'](_0x39f69e)&&a284_0x30f0c5[_0x298e37(0x13b)](_0x39f69e,{'recursive':!![]});const _0x155c1c=a284_0x16af43[_0x298e37(0x136)][_0x298e37(0x11d)](a284_0x16af43[_0x298e37(0x136)][_0x298e37(0x121)](),a284_0x16af43['format'][_0x298e37(0x147)]({'stack':!![]}),a284_0x16af43['format'][_0x298e37(0x148)](_0x649c9e=>{const _0x1d1517=_0x298e37,_0x2bbd00={'timestamp':_0x649c9e[_0x1d1517(0x121)]||new Date()['toISOString'](),'level':_0x649c9e['level']||_0x1d1517(0x130),'command':_0x649c9e[_0x1d1517(0x126)]||_0x1d1517(0x14e),'rawCommand':_0x649c9e['rawCommand']||this[_0x1d1517(0x11e)]||undefined,'message':_0x649c9e[_0x1d1517(0x140)]||'','duration':_0x649c9e[_0x1d1517(0x124)]||undefined,'details':_0x649c9e[_0x1d1517(0x149)]||undefined};return JSON[_0x1d1517(0x11a)](_0x2bbd00);}));this[_0x298e37(0x14b)]=a284_0x16af43[_0x298e37(0x141)]({'level':'info','format':_0x155c1c,'transports':[new a284_0x16af43['transports'][(_0x298e37(0x129))]({'filename':this[_0x298e37(0x142)],'level':_0x298e37(0x130)})],'silent':![]}),a284_0x16af43['addColors']({'success':_0x298e37(0x13c),'error':_0x298e37(0x12f),'warn':_0x298e37(0x117),'info':_0x298e37(0x135)});}[a284_0xf49431(0x122)](_0x1dc774){const _0x3bc478=a284_0xf49431;this[_0x3bc478(0x142)]=a284_0x595412['join'](_0x1dc774,_0x3bc478(0x14c)),this[_0x3bc478(0x14b)]&&this[_0x3bc478(0x14b)][_0x3bc478(0x138)](),this[_0x3bc478(0x12d)]();}['info'](_0x4f7097,_0x395834,_0x3d594f){const _0x57245f=a284_0xf49431;if(!this[_0x57245f(0x142)]||!this[_0x57245f(0x14b)])return;this[_0x57245f(0x14b)][_0x57245f(0x130)](_0x395834,{'command':_0x4f7097,'details':_0x3d594f});}[a284_0xf49431(0x132)](_0x4c7d39,_0x25b4fe,_0x36ee0f,_0x542591){const _0x5cb58a=a284_0xf49431;if(!this['logFilePath']||!this['winstonLogger'])return;this[_0x5cb58a(0x14b)][_0x5cb58a(0x12a)]('info',_0x25b4fe,{'level':_0x5cb58a(0x132),'command':_0x4c7d39,'duration':_0x36ee0f,'details':_0x542591});}[a284_0xf49431(0x119)](_0x140184,_0x1cf283,_0x2faa62){const _0x46305d=a284_0xf49431;if(!this['logFilePath']||!this['winstonLogger'])return;this[_0x46305d(0x14b)][_0x46305d(0x119)](_0x1cf283,{'command':_0x140184,'details':_0x2faa62});}[a284_0xf49431(0x131)](_0x7344a9,_0x2a867b,_0x30b8bb){const _0x16e9d0=a284_0xf49431;if(!this[_0x16e9d0(0x142)]||!this['winstonLogger'])return;this[_0x16e9d0(0x14b)][_0x16e9d0(0x131)](_0x2a867b,{'command':_0x7344a9,'details':_0x30b8bb});}async[a284_0xf49431(0x143)](_0x380ad0,_0x34a6b5,_0x3b5351){const _0x5ee781=a284_0xf49431,_0x621152=Date[_0x5ee781(0x133)]();this[_0x5ee781(0x130)](_0x380ad0,_0x5ee781(0x13f)+_0x34a6b5);try{const _0x465b73=await _0x3b5351(),_0x49bd99=Date[_0x5ee781(0x133)]()-_0x621152;return this[_0x5ee781(0x132)](_0x380ad0,'完成:\x20'+_0x34a6b5,_0x49bd99),_0x465b73;}catch(_0x51b1fd){const _0x12f29a=Date['now']()-_0x621152;this['error'](_0x380ad0,_0x5ee781(0x128)+_0x34a6b5,{'error':_0x51b1fd instanceof Error?_0x51b1fd[_0x5ee781(0x140)]:String(_0x51b1fd),'duration':_0x12f29a});throw _0x51b1fd;}}[a284_0xf49431(0x125)](){const _0x55f0a2=a284_0xf49431;try{if(!a284_0x30f0c5[_0x55f0a2(0x127)](this[_0x55f0a2(0x142)]))return[];const _0x1b7e85=a284_0x30f0c5[_0x55f0a2(0x118)](this[_0x55f0a2(0x142)],'utf8');return _0x1b7e85['split']('\x0a')['filter'](_0x21e41c=>_0x21e41c[_0x55f0a2(0x134)]())[_0x55f0a2(0x137)](_0x10b1fa=>JSON[_0x55f0a2(0x116)](_0x10b1fa));}catch(_0x5a99a3){return console['warn'](_0x55f0a2(0x12b),_0x5a99a3),[];}}['clearLogs'](){const _0x2311a2=a284_0xf49431;try{a284_0x30f0c5[_0x2311a2(0x127)](this[_0x2311a2(0x142)])&&a284_0x30f0c5[_0x2311a2(0x11c)](this[_0x2311a2(0x142)],'',_0x2311a2(0x13e));}catch(_0x58790e){console[_0x2311a2(0x131)](_0x2311a2(0x145),_0x58790e);}}[a284_0xf49431(0x12e)](){return this['winstonLogger'];}}export const logger=new Logger();
@@ -1 +1 @@
1
- function a292_0x7a67(){const _0x405c5b=['3117185wsqToH','550109lMDmaM','364962PqxUni','isArray','285825bHbfkZ','Invalid\x20JSON\x20for\x20--params:\x20','--params\x20must\x20be\x20a\x20JSON\x20object','80tFGQZY','2031078yllRQc','Example:\x20--params\x20\x27{\x22id\x22:123}\x27','3222852TKeUnl','400712ZDVjXM','validation'];a292_0x7a67=function(){return _0x405c5b;};return a292_0x7a67();}(function(_0x482b9b,_0x2c02e9){const _0x5ef4c7=a292_0x1009,_0x146ddb=_0x482b9b();while(!![]){try{const _0x3f1d98=-parseInt(_0x5ef4c7(0x1c6))/0x1+-parseInt(_0x5ef4c7(0x1c4))/0x2+parseInt(_0x5ef4c7(0x1ca))/0x3+-parseInt(_0x5ef4c7(0x1cd))/0x4+parseInt(_0x5ef4c7(0x1cf))/0x5+parseInt(_0x5ef4c7(0x1cc))/0x6+parseInt(_0x5ef4c7(0x1d0))/0x7*(-parseInt(_0x5ef4c7(0x1c9))/0x8);if(_0x3f1d98===_0x2c02e9)break;else _0x146ddb['push'](_0x146ddb['shift']());}catch(_0x3d81dd){_0x146ddb['push'](_0x146ddb['shift']());}}}(a292_0x7a67,0x75fb3));import{CliErrors}from'../errors.js';function a292_0x1009(_0x38f6f4,_0x1f7188){_0x38f6f4=_0x38f6f4-0x1c4;const _0x7a6735=a292_0x7a67();let _0x1009a8=_0x7a6735[_0x38f6f4];return _0x1009a8;}export function parseJsonParams(_0x460728){const _0x463ae8=a292_0x1009;if(!_0x460728)return undefined;let _0x35b664;try{_0x35b664=JSON['parse'](_0x460728);}catch{throw CliErrors[_0x463ae8(0x1ce)](_0x463ae8(0x1c7)+_0x460728);}if(!_0x35b664||typeof _0x35b664!=='object'||Array[_0x463ae8(0x1c5)](_0x35b664))throw CliErrors[_0x463ae8(0x1ce)](_0x463ae8(0x1c8),_0x463ae8(0x1cb));return _0x35b664;}
1
+ (function(_0x43e312,_0x5a6fc7){const _0x17b077=a285_0x55fd,_0x54206e=_0x43e312();while(!![]){try{const _0x292788=parseInt(_0x17b077(0x107))/0x1+parseInt(_0x17b077(0x115))/0x2*(parseInt(_0x17b077(0x113))/0x3)+-parseInt(_0x17b077(0x112))/0x4*(-parseInt(_0x17b077(0x10a))/0x5)+parseInt(_0x17b077(0x109))/0x6+-parseInt(_0x17b077(0x110))/0x7*(parseInt(_0x17b077(0x10d))/0x8)+-parseInt(_0x17b077(0x10f))/0x9*(-parseInt(_0x17b077(0x10e))/0xa)+-parseInt(_0x17b077(0x106))/0xb*(parseInt(_0x17b077(0x114))/0xc);if(_0x292788===_0x5a6fc7)break;else _0x54206e['push'](_0x54206e['shift']());}catch(_0x187312){_0x54206e['push'](_0x54206e['shift']());}}}(a285_0x2232,0x3ada0));function a285_0x2232(){const _0x24dc99=['12ApqAyq','2RMRAZV','validation','Example:\x20--params\x20\x27{\x22id\x22:123}\x27','13817177OcsQFU','395807XcmfRN','--params\x20must\x20be\x20a\x20JSON\x20object','2429844irgmqq','920ErIVre','isArray','parse','1900768AfmOAn','40ShvCZx','462843ITEqpc','7oMECJf','Invalid\x20JSON\x20for\x20--params:\x20','9604TlePoX','859458kpLfgg'];a285_0x2232=function(){return _0x24dc99;};return a285_0x2232();}import{CliErrors}from'../errors.js';function a285_0x55fd(_0x200320,_0x15a56e){_0x200320=_0x200320-0x105;const _0x2232e8=a285_0x2232();let _0x55fdbc=_0x2232e8[_0x200320];return _0x55fdbc;}export function parseJsonParams(_0x18ca2b){const _0x2a9c57=a285_0x55fd;if(!_0x18ca2b)return undefined;let _0x2190b1;try{_0x2190b1=JSON[_0x2a9c57(0x10c)](_0x18ca2b);}catch{throw CliErrors[_0x2a9c57(0x116)](_0x2a9c57(0x111)+_0x18ca2b);}if(!_0x2190b1||typeof _0x2190b1!=='object'||Array[_0x2a9c57(0x10b)](_0x2190b1))throw CliErrors[_0x2a9c57(0x116)](_0x2a9c57(0x108),_0x2a9c57(0x105));return _0x2190b1;}
@@ -1 +1 @@
1
- function a293_0x5762(_0x4937f0,_0x1fa4b3){_0x4937f0=_0x4937f0-0x1d3;const _0x43d4ab=a293_0x43d4();let _0x576206=_0x43d4ab[_0x4937f0];return _0x576206;}const a293_0x4f61da=a293_0x5762;(function(_0x53a802,_0x57cada){const _0x5d6ed9=a293_0x5762,_0x254ae3=_0x53a802();while(!![]){try{const _0x31e6ef=-parseInt(_0x5d6ed9(0x1d3))/0x1+-parseInt(_0x5d6ed9(0x1d8))/0x2+-parseInt(_0x5d6ed9(0x1dd))/0x3*(parseInt(_0x5d6ed9(0x1da))/0x4)+-parseInt(_0x5d6ed9(0x1d7))/0x5+parseInt(_0x5d6ed9(0x1dc))/0x6*(-parseInt(_0x5d6ed9(0x1d5))/0x7)+-parseInt(_0x5d6ed9(0x1d9))/0x8+parseInt(_0x5d6ed9(0x1db))/0x9;if(_0x31e6ef===_0x57cada)break;else _0x254ae3['push'](_0x254ae3['shift']());}catch(_0xa48200){_0x254ae3['push'](_0x254ae3['shift']());}}}(a293_0x43d4,0x64a31));function a293_0x43d4(){const _0x2a935b=['472674ifKyxG','2348528YzPgTR','284CKlwob','25567407PHXebC','188022eZapep','22413WLuRdM','209320iuaoJz','win32','161OnaJlL','.cmd','2190995GIbxcv'];a293_0x43d4=function(){return _0x2a935b;};return a293_0x43d4();}export const isWindows=process['platform']===a293_0x4f61da(0x1d4);export function resolveNpmBin(_0x1fa38f){const _0x2985e9=a293_0x4f61da;return isWindows?_0x1fa38f+_0x2985e9(0x1d6):_0x1fa38f;}
1
+ const a286_0x55d2be=a286_0x1a89;function a286_0x1a89(_0x9c4bad,_0x25a353){_0x9c4bad=_0x9c4bad-0x157;const _0x517130=a286_0x5171();let _0x1a891a=_0x517130[_0x9c4bad];return _0x1a891a;}function a286_0x5171(){const _0x51ef23=['1611835ZByTbn','52874yUAkkq','3tPjvTu','.cmd','70MmbpYM','4137948vadkPV','platform','2049004qzXtly','21201273yEOOHw','12740120uaTTPA','9972228jpPWGW'];a286_0x5171=function(){return _0x51ef23;};return a286_0x5171();}(function(_0x56122a,_0x5c687d){const _0x460e28=a286_0x1a89,_0x47324d=_0x56122a();while(!![]){try{const _0x590429=parseInt(_0x460e28(0x15a))/0x1*(parseInt(_0x460e28(0x157))/0x2)+parseInt(_0x460e28(0x158))/0x3*(-parseInt(_0x460e28(0x15d))/0x4)+-parseInt(_0x460e28(0x161))/0x5+-parseInt(_0x460e28(0x15b))/0x6+parseInt(_0x460e28(0x160))/0x7+parseInt(_0x460e28(0x15f))/0x8+-parseInt(_0x460e28(0x15e))/0x9;if(_0x590429===_0x5c687d)break;else _0x47324d['push'](_0x47324d['shift']());}catch(_0xab18b5){_0x47324d['push'](_0x47324d['shift']());}}}(a286_0x5171,0xf1258));export const isWindows=process[a286_0x55d2be(0x15c)]==='win32';export function resolveNpmBin(_0x4b9bee){const _0x24c72c=a286_0x55d2be;return isWindows?_0x4b9bee+_0x24c72c(0x159):_0x4b9bee;}
@@ -1 +1 @@
1
- (function(_0x2bab6e,_0x161114){const _0x134a1a=a294_0x3b45,_0x4c546b=_0x2bab6e();while(!![]){try{const _0x23b96a=parseInt(_0x134a1a(0x110))/0x1*(-parseInt(_0x134a1a(0x111))/0x2)+-parseInt(_0x134a1a(0x100))/0x3*(-parseInt(_0x134a1a(0x10c))/0x4)+parseInt(_0x134a1a(0x114))/0x5*(-parseInt(_0x134a1a(0x108))/0x6)+-parseInt(_0x134a1a(0x105))/0x7+-parseInt(_0x134a1a(0x115))/0x8*(-parseInt(_0x134a1a(0x10f))/0x9)+parseInt(_0x134a1a(0x102))/0xa*(parseInt(_0x134a1a(0x10b))/0xb)+parseInt(_0x134a1a(0x107))/0xc;if(_0x23b96a===_0x161114)break;else _0x4c546b['push'](_0x4c546b['shift']());}catch(_0x25bb1c){_0x4c546b['push'](_0x4c546b['shift']());}}}(a294_0xd038,0xf1354));import{existsSync,mkdirSync,readFileSync,writeFileSync}from'node:fs';function a294_0x3b45(_0x47bbfc,_0x2e1774){_0x47bbfc=_0x47bbfc-0x100;const _0xd038e1=a294_0xd038();let _0x3b4568=_0xd038e1[_0x47bbfc];return _0x3b4568;}import{dirname,join,resolve}from'node:path';import{fileURLToPath}from'node:url';import{getTemplateBaseUrl}from'../utils/config.js';import{appendUpdateTime}from'../utils/guides-cdn.js';const __filename=fileURLToPath(import.meta.url),__dirname=dirname(__filename);function a294_0xd038(){const _0x586aa3=['lastUpdated','16110lWGOjj','72ThBTnA','CDN\x20返回数据格式错误','5288253jcVzdX','.cursor/rules','283860ySaAPu','string','content','7692405dVSRFi','CDN\x20请求失败:\x20','25128408yhFoJx','564UJruol','本地模板文件不存在:\x20','application/json','11nyedMN','4XjWZvy','agents.md','json','178731vYxjFX','109dkSpde','30718mBxrzu','lovrabet_rules.mdc'];a294_0xd038=function(){return _0x586aa3;};return a294_0xd038();}function getRulesCdnUrl(){const _0x385f1b=getTemplateBaseUrl();return _0x385f1b+'/rules/rules.json';}const LOCAL_TEMPLATE_PATH=resolve(__dirname,'../../templates/rules/lovrabet_rules.mdc.tpl');export async function fetchRulesFromCDN(){const _0x6b7662=a294_0x3b45,_0x29c051=getRulesCdnUrl(),_0x245c5e=await fetch(_0x29c051,{'headers':{'Accept':_0x6b7662(0x10a)}});if(!_0x245c5e['ok'])throw new Error(_0x6b7662(0x106)+_0x245c5e['status']+'\x20'+_0x245c5e['statusText']);const _0x2f98e0=await _0x245c5e[_0x6b7662(0x10e)]();if(!_0x2f98e0['content']||typeof _0x2f98e0['content']!==_0x6b7662(0x103))throw new Error(_0x6b7662(0x116));return _0x2f98e0;}export async function getRulesContent(){const _0x2143ef=a294_0x3b45;try{const _0xba09ed=await fetchRulesFromCDN();return _0xba09ed[_0x2143ef(0x104)];}catch{return readLocalTemplate();}}export function readLocalTemplate(){const _0x38d272=a294_0x3b45;if(existsSync(LOCAL_TEMPLATE_PATH))return readFileSync(LOCAL_TEMPLATE_PATH,'utf-8');throw new Error(_0x38d272(0x109)+LOCAL_TEMPLATE_PATH);}export async function writeRulesFile(_0x1f82ff){const _0x16d1a3=a294_0x3b45,_0x25bfea=await fetchRulesFromCDN()['catch'](()=>null);let _0x2c0167;_0x25bfea?(_0x2c0167=_0x25bfea[_0x16d1a3(0x104)],_0x25bfea[_0x16d1a3(0x113)]&&(_0x2c0167=appendUpdateTime(_0x2c0167,_0x25bfea['lastUpdated']))):_0x2c0167=readLocalTemplate();const _0x4c3bf0=dirname(_0x1f82ff);!existsSync(_0x4c3bf0)&&mkdirSync(_0x4c3bf0,{'recursive':!![]}),writeFileSync(_0x1f82ff,_0x2c0167,'utf-8');}export async function copyRulesToCursor(_0x393c7b){const _0x29abca=a294_0x3b45,_0x66da49=join(_0x393c7b,_0x29abca(0x101)),_0x211dc3=join(_0x66da49,_0x29abca(0x112));if(existsSync(_0x211dc3))return![];return await writeRulesFile(_0x211dc3),!![];}export async function copyRulesToAgentsMd(_0x8b7579){const _0x2ef79b=a294_0x3b45,_0x307405=join(_0x8b7579,_0x2ef79b(0x10d));if(existsSync(_0x307405))return![];return await writeRulesFile(_0x307405),!![];}
1
+ const a287_0x153e41=a287_0x7938;(function(_0x113e59,_0x418448){const _0x1e5e44=a287_0x7938,_0x332e84=_0x113e59();while(!![]){try{const _0x228663=-parseInt(_0x1e5e44(0x186))/0x1+-parseInt(_0x1e5e44(0x181))/0x2*(parseInt(_0x1e5e44(0x194))/0x3)+parseInt(_0x1e5e44(0x193))/0x4+parseInt(_0x1e5e44(0x18d))/0x5+-parseInt(_0x1e5e44(0x185))/0x6*(parseInt(_0x1e5e44(0x184))/0x7)+parseInt(_0x1e5e44(0x17f))/0x8+parseInt(_0x1e5e44(0x190))/0x9*(parseInt(_0x1e5e44(0x195))/0xa);if(_0x228663===_0x418448)break;else _0x332e84['push'](_0x332e84['shift']());}catch(_0x3eaca9){_0x332e84['push'](_0x332e84['shift']());}}}(a287_0x3615,0xca89e));import{existsSync,mkdirSync,readFileSync,writeFileSync}from'node:fs';import{dirname,join,resolve}from'node:path';import{fileURLToPath}from'node:url';function a287_0x3615(){const _0x397c29=['195084yHKDNC','statusText','../../templates/rules/lovrabet_rules.mdc.tpl','1573196EsFYLb','12444BvyFWd','70oFJAuG','string','1862288TfbanU','本地模板文件不存在:\x20','98kKbdDj','lastUpdated','agents.md','409346BzPCzl','18FVdZNY','955351pEKrgY','CDN\x20请求失败:\x20','application/json','/rules/rules.json','content','lovrabet_rules.mdc','json','6929090xmeyyn','status','catch'];a287_0x3615=function(){return _0x397c29;};return a287_0x3615();}import{getTemplateBaseUrl}from'../utils/config.js';function a287_0x7938(_0x21fe43,_0x26ff23){_0x21fe43=_0x21fe43-0x17e;const _0x3615a8=a287_0x3615();let _0x7938be=_0x3615a8[_0x21fe43];return _0x7938be;}import{appendUpdateTime}from'../utils/guides-cdn.js';const __filename=fileURLToPath(import.meta.url),__dirname=dirname(__filename);function getRulesCdnUrl(){const _0x3070f1=a287_0x7938,_0x242c70=getTemplateBaseUrl();return _0x242c70+_0x3070f1(0x189);}const LOCAL_TEMPLATE_PATH=resolve(__dirname,a287_0x153e41(0x192));export async function fetchRulesFromCDN(){const _0xd02626=a287_0x153e41,_0x2c7ab6=getRulesCdnUrl(),_0xc36115=await fetch(_0x2c7ab6,{'headers':{'Accept':_0xd02626(0x188)}});if(!_0xc36115['ok'])throw new Error(_0xd02626(0x187)+_0xc36115[_0xd02626(0x18e)]+'\x20'+_0xc36115[_0xd02626(0x191)]);const _0xa3e015=await _0xc36115[_0xd02626(0x18c)]();if(!_0xa3e015[_0xd02626(0x18a)]||typeof _0xa3e015['content']!==_0xd02626(0x17e))throw new Error('CDN\x20返回数据格式错误');return _0xa3e015;}export async function getRulesContent(){const _0x19bbf8=a287_0x153e41;try{const _0x31bf33=await fetchRulesFromCDN();return _0x31bf33[_0x19bbf8(0x18a)];}catch{return readLocalTemplate();}}export function readLocalTemplate(){const _0x35d8b9=a287_0x153e41;if(existsSync(LOCAL_TEMPLATE_PATH))return readFileSync(LOCAL_TEMPLATE_PATH,'utf-8');throw new Error(_0x35d8b9(0x180)+LOCAL_TEMPLATE_PATH);}export async function writeRulesFile(_0x36219b){const _0x2b7218=a287_0x153e41,_0xe76144=await fetchRulesFromCDN()[_0x2b7218(0x18f)](()=>null);let _0x494455;_0xe76144?(_0x494455=_0xe76144[_0x2b7218(0x18a)],_0xe76144[_0x2b7218(0x182)]&&(_0x494455=appendUpdateTime(_0x494455,_0xe76144[_0x2b7218(0x182)]))):_0x494455=readLocalTemplate();const _0x48fa84=dirname(_0x36219b);!existsSync(_0x48fa84)&&mkdirSync(_0x48fa84,{'recursive':!![]}),writeFileSync(_0x36219b,_0x494455,'utf-8');}export async function copyRulesToCursor(_0x12928a){const _0x4664bc=a287_0x153e41,_0x616b68=join(_0x12928a,'.cursor/rules'),_0x49aa89=join(_0x616b68,_0x4664bc(0x18b));if(existsSync(_0x49aa89))return![];return await writeRulesFile(_0x49aa89),!![];}export async function copyRulesToAgentsMd(_0x4c6984){const _0x58e97d=a287_0x153e41,_0x507e37=join(_0x4c6984,_0x58e97d(0x183));if(existsSync(_0x507e37))return![];return await writeRulesFile(_0x507e37),!![];}
@@ -1 +1 @@
1
- export function sleep(_0x54067f){return new Promise(_0x4bc9ab=>setTimeout(_0x4bc9ab,_0x54067f));}
1
+ export function sleep(_0x1e4249){return new Promise(_0x21ff9c=>setTimeout(_0x21ff9c,_0x1e4249));}
@@ -1 +1 @@
1
- const a296_0x57b255=a296_0x5694;(function(_0x86522d,_0x2f4978){const _0x58316c=a296_0x5694,_0x597749=_0x86522d();while(!![]){try{const _0x342da6=parseInt(_0x58316c(0x1a0))/0x1*(parseInt(_0x58316c(0x199))/0x2)+-parseInt(_0x58316c(0x1c1))/0x3+-parseInt(_0x58316c(0x1ba))/0x4*(-parseInt(_0x58316c(0x194))/0x5)+-parseInt(_0x58316c(0x1b8))/0x6*(parseInt(_0x58316c(0x1a3))/0x7)+parseInt(_0x58316c(0x1a4))/0x8+parseInt(_0x58316c(0x1a5))/0x9*(-parseInt(_0x58316c(0x1ca))/0xa)+parseInt(_0x58316c(0x1c2))/0xb;if(_0x342da6===_0x2f4978)break;else _0x597749['push'](_0x597749['shift']());}catch(_0xa822d4){_0x597749['push'](_0x597749['shift']());}}}(a296_0x3cb5,0xdaaf7));import a296_0x15a3c1 from'node:fs';import a296_0x4021bf from'node:path';import{logger}from'../utils/logger.js';function a296_0x5694(_0x1a0435,_0x59e030){_0x1a0435=_0x1a0435-0x18c;const _0x3cb58a=a296_0x3cb5();let _0x56948f=_0x3cb58a[_0x1a0435];return _0x56948f;}function a296_0x3cb5(){const _0x4eae1f=['alias','7mtUkpS','processDirectory','getSeconds','7qdoCEd','3222344ycGTne','6245361drhbuW','processTemplate','isFile','pad','endsWith','promises','toComponentName','message','info','getFullYear','writeFile','datasetCode','.tpl','toLowerCase','map','utf8','.jsx','replaceApiContent','mkdir','10153974QdsqTv','push','1077980CHxNNd','slice','readFile','.css','\x0a\x20\x20\x20\x20{\x20','readdir','isDirectory','1511718KiaXBi','27214077WvaBxY','default','toUpperCase','processFile','getMinutes','.js','toDisplayTitle','LOVRABET','10xKWsmn','replaceContent','.scss','error','.ts','name:\x20\x22','split','.tsx','formatLocalTimestamp','datasetCode:\x20\x22','.md','includes','开始处理模板内容替换','toISOString','charAt','copyFile','getDate','replace','5xQBYsm','pop','模板内容替换失败','success','now','182744Oqudgy','name','template','tableName:\x20\x22','.json','join'];a296_0x3cb5=function(){return _0x4eae1f;};return a296_0x3cb5();}import{getCliVersion}from'../utils/version.js';const CLI_VERSION=getCliVersion();export class TemplateReplacer{static[a296_0x57b255(0x1a8)](_0x27d7df){return String(_0x27d7df)['padStart'](0x2,'0');}static[a296_0x57b255(0x1d2)](_0x50699e){const _0x5e54f1=a296_0x57b255,_0x31d430=_0x50699e[_0x5e54f1(0x1ae)](),_0x11bc9f=this[_0x5e54f1(0x1a8)](_0x50699e['getMonth']()+0x1),_0x1d47c5=this[_0x5e54f1(0x1a8)](_0x50699e[_0x5e54f1(0x192)]()),_0x223c6b=this['pad'](_0x50699e['getHours']()),_0x7c7217=this[_0x5e54f1(0x1a8)](_0x50699e[_0x5e54f1(0x1c6)]()),_0x1d29b9=this[_0x5e54f1(0x1a8)](_0x50699e[_0x5e54f1(0x1a2)]());return{'createdAt':_0x31d430+'-'+_0x11bc9f+'-'+_0x1d47c5+'\x20'+_0x223c6b+':'+_0x7c7217+':'+_0x1d29b9,'createdDate':_0x31d430+'-'+_0x11bc9f+'-'+_0x1d47c5,'createdTime':_0x223c6b+':'+_0x7c7217+':'+_0x1d29b9};}static[a296_0x57b255(0x1ab)](_0xbdeb){const _0xbadade=a296_0x57b255,_0x5dd7a7=_0xbdeb['split']('/')[_0xbadade(0x195)]()||_0xbdeb;return _0x5dd7a7[_0xbadade(0x1d0)]('-')[_0xbadade(0x1b3)](_0x2614e8=>_0x2614e8[_0xbadade(0x190)](0x0)[_0xbadade(0x1c4)]()+_0x2614e8[_0xbadade(0x1bb)](0x1)['toLowerCase']())[_0xbadade(0x19e)]('');}static[a296_0x57b255(0x1c8)](_0x3bafbc){const _0x22a183=a296_0x57b255,_0x42e2a0=_0x3bafbc[_0x22a183(0x1d0)]('/')[_0x22a183(0x195)]()||_0x3bafbc;return _0x42e2a0[_0x22a183(0x1d0)]('-')[_0x22a183(0x1b3)](_0x23fabd=>_0x23fabd[_0x22a183(0x190)](0x0)[_0x22a183(0x1c4)]()+_0x23fabd[_0x22a183(0x1bb)](0x1)[_0x22a183(0x1b2)]())[_0x22a183(0x19e)]('\x20');}static[a296_0x57b255(0x1cb)](_0x17e37f,_0x353e9f,_0x12d40a){const _0x55ef63=a296_0x57b255,_0x4beba6=this[_0x55ef63(0x1ab)](_0x353e9f),_0x548fc0=this[_0x55ef63(0x1c8)](_0x353e9f),{createdAt:_0xb4924e,createdDate:_0x3013de,createdTime:_0x24f3a5}=this['formatLocalTimestamp'](new Date());let _0x39a87b=_0x17e37f['replace'](/\{CliVersion\}/g,CLI_VERSION)['replace'](/\{ComponentName\}/g,_0x4beba6)['replace'](/\{DisplayTitle\}/g,_0x548fc0)['replace'](/\{PageName\}/g,_0x353e9f)['replace'](/\{TemplateName\}/g,_0x12d40a)['replace'](/\{CreatedAt\}/g,_0xb4924e)[_0x55ef63(0x193)](/\{CreatedDate\}/g,_0x3013de)[_0x55ef63(0x193)](/\{CreatedTime\}/g,_0x24f3a5);return _0x39a87b;}static[a296_0x57b255(0x1b6)](_0x32d310,_0x3bc305,_0x49a8f3,_0x5f535b,_0x4934ef,_0x457ad1,_0x16c117,_0x469d8f){const _0x2ecb6a=a296_0x57b255,_0x5b77cd=new Date(),_0x3d2789=_0x5b77cd[_0x2ecb6a(0x18f)](),_0x5061e9=_0x49a8f3[_0x2ecb6a(0x1b3)](_0x5cc5f9=>{const _0x4d59d0=_0x2ecb6a,_0x139c50=[_0x4d59d0(0x1d3)+_0x5cc5f9[_0x4d59d0(0x1b0)]+'\x22',_0x4d59d0(0x19c)+_0x5cc5f9['tableName']+'\x22',_0x4d59d0(0x1cf)+_0x5cc5f9[_0x4d59d0(0x19a)]+'\x22'];return _0x5cc5f9['alias']&&_0x139c50[_0x4d59d0(0x1b9)]('alias:\x20\x22'+_0x5cc5f9[_0x4d59d0(0x19f)]+'\x22'),_0x4d59d0(0x1be)+_0x139c50[_0x4d59d0(0x19e)](',\x20')+'\x20},';})[_0x2ecb6a(0x19e)](''),_0x11e67e=_0x5f535b||_0x49a8f3[0x0]?.[_0x2ecb6a(0x19f)]||'YourModel';let _0x20b62e=_0x32d310[_0x2ecb6a(0x193)](/\{AppCode\}/g,_0x3bc305)[_0x2ecb6a(0x193)](/\{ModelConfigs\}/g,_0x5061e9)['replace'](/\{ExampleModelName\}/g,_0x11e67e)[_0x2ecb6a(0x193)](/\{ApiFileName\}/g,_0x4934ef||'api')[_0x2ecb6a(0x193)](/\{ConfigName\}/g,_0x457ad1||_0x2ecb6a(0x1c3))['replace'](/\{ClientConfigParam\}/g,_0x16c117||'')[_0x2ecb6a(0x193)](/\{VarPrefix\}/g,_0x469d8f||_0x2ecb6a(0x1c9))['replace'](/\{CreatedAt\}/g,_0x3d2789);return _0x20b62e;}static async[a296_0x57b255(0x1a6)](_0x392799,_0x4ab714,_0x276af6,_0x1e3cbd,_0x5d2049=!![]){const _0x374ae4=a296_0x57b255,_0x3e417b=Date[_0x374ae4(0x198)]();try{_0x5d2049&&logger[_0x374ae4(0x1ad)]('template',_0x374ae4(0x18e),{'templatePath':_0x392799,'targetPath':_0x4ab714,'pageName':_0x276af6,'templateName':_0x1e3cbd});await a296_0x15a3c1['promises'][_0x374ae4(0x1b7)](_0x4ab714,{'recursive':!![]}),await this[_0x374ae4(0x1a1)](_0x392799,_0x4ab714,_0x276af6,_0x1e3cbd);if(_0x5d2049){const _0x1f7167=Date[_0x374ae4(0x198)]()-_0x3e417b;logger[_0x374ae4(0x197)]('template','模板内容替换完成',_0x1f7167,{'pageName':_0x276af6,'templateName':_0x1e3cbd});}}catch(_0xf7817f){if(_0x5d2049){const _0x212cd1=Date['now']()-_0x3e417b;logger[_0x374ae4(0x1cd)](_0x374ae4(0x19b),_0x374ae4(0x196),{'templatePath':_0x392799,'targetPath':_0x4ab714,'pageName':_0x276af6,'templateName':_0x1e3cbd,'error':_0xf7817f instanceof Error?_0xf7817f[_0x374ae4(0x1ac)]:String(_0xf7817f),'duration':_0x212cd1});}throw _0xf7817f;}}static async[a296_0x57b255(0x1a1)](_0x385094,_0x4705ed,_0x1419e6,_0x23bbb6){const _0x547bc3=a296_0x57b255,_0x315078=await a296_0x15a3c1[_0x547bc3(0x1aa)][_0x547bc3(0x1bf)](_0x385094,{'withFileTypes':!![]});for(const _0x56dfda of _0x315078){const _0x20e2c5=a296_0x4021bf['join'](_0x385094,_0x56dfda[_0x547bc3(0x19a)]);let _0x26f638=a296_0x4021bf[_0x547bc3(0x19e)](_0x4705ed,_0x56dfda[_0x547bc3(0x19a)]);_0x56dfda['name'][_0x547bc3(0x1a9)](_0x547bc3(0x1b1))&&(_0x26f638=a296_0x4021bf['join'](_0x4705ed,_0x56dfda[_0x547bc3(0x19a)][_0x547bc3(0x193)](/\.tpl$/,'')));if(_0x56dfda[_0x547bc3(0x1c0)]())await a296_0x15a3c1[_0x547bc3(0x1aa)]['mkdir'](_0x26f638,{'recursive':!![]}),await this[_0x547bc3(0x1a1)](_0x20e2c5,_0x26f638,_0x1419e6,_0x23bbb6);else _0x56dfda[_0x547bc3(0x1a7)]()&&await this[_0x547bc3(0x1c5)](_0x20e2c5,_0x26f638,_0x1419e6,_0x23bbb6);}}static async[a296_0x57b255(0x1c5)](_0x339b12,_0x218083,_0x2e94e5,_0xe03c0f){const _0x59843f=a296_0x57b255,_0x50af95=a296_0x4021bf['extname'](_0x339b12)[_0x59843f(0x1b2)]();_0x339b12['endsWith'](_0x59843f(0x1b1))&&(_0x218083=_0x218083[_0x59843f(0x193)](/\.tpl$/,''));const _0x4e538d=[_0x59843f(0x1d1),_0x59843f(0x1ce),_0x59843f(0x1b5),_0x59843f(0x1c7),_0x59843f(0x19d),_0x59843f(0x18c),_0x59843f(0x1bd),_0x59843f(0x1cc),_0x59843f(0x1b1)];if(_0x4e538d[_0x59843f(0x18d)](_0x50af95)||_0x339b12[_0x59843f(0x1a9)](_0x59843f(0x1b1))){const _0x1c5fac=await a296_0x15a3c1['promises'][_0x59843f(0x1bc)](_0x339b12,_0x59843f(0x1b4)),_0x2f7a58=this[_0x59843f(0x1cb)](_0x1c5fac,_0x2e94e5,_0xe03c0f);await a296_0x15a3c1[_0x59843f(0x1aa)][_0x59843f(0x1af)](_0x218083,_0x2f7a58,_0x59843f(0x1b4));}else await a296_0x15a3c1['promises'][_0x59843f(0x191)](_0x339b12,_0x218083);}}
1
+ const a289_0x449bba=a289_0x45eb;(function(_0x39df5f,_0x81a571){const _0x596516=a289_0x45eb,_0x406a87=_0x39df5f();while(!![]){try{const _0xe98b37=parseInt(_0x596516(0x1ee))/0x1*(-parseInt(_0x596516(0x1f6))/0x2)+-parseInt(_0x596516(0x1cd))/0x3*(parseInt(_0x596516(0x202))/0x4)+-parseInt(_0x596516(0x1e1))/0x5*(-parseInt(_0x596516(0x211))/0x6)+-parseInt(_0x596516(0x1eb))/0x7*(-parseInt(_0x596516(0x1ea))/0x8)+-parseInt(_0x596516(0x1f9))/0x9+parseInt(_0x596516(0x203))/0xa+parseInt(_0x596516(0x200))/0xb*(parseInt(_0x596516(0x1fc))/0xc);if(_0xe98b37===_0x81a571)break;else _0x406a87['push'](_0x406a87['shift']());}catch(_0x306f9e){_0x406a87['push'](_0x406a87['shift']());}}}(a289_0x3f07,0x7dd8c));import a289_0x3b22e3 from'node:fs';import a289_0x3dc092 from'node:path';import{logger}from'../utils/logger.js';function a289_0x45eb(_0x3082d4,_0x35896a){_0x3082d4=_0x3082d4-0x1c8;const _0x3f076c=a289_0x3f07();let _0x45ebe2=_0x3f076c[_0x3082d4];return _0x45ebe2;}import{getCliVersion}from'../utils/version.js';const CLI_VERSION=getCliVersion();export class TemplateReplacer{static[a289_0x449bba(0x209)](_0x105f3d){const _0x3ad275=a289_0x449bba;return String(_0x105f3d)[_0x3ad275(0x1ec)](0x2,'0');}static[a289_0x449bba(0x1cb)](_0xac095e){const _0xcadc2d=a289_0x449bba,_0x57bccb=_0xac095e[_0xcadc2d(0x1ca)](),_0x3d2d19=this[_0xcadc2d(0x209)](_0xac095e[_0xcadc2d(0x1e8)]()+0x1),_0x47afd6=this[_0xcadc2d(0x209)](_0xac095e[_0xcadc2d(0x1d7)]()),_0x28c6d5=this[_0xcadc2d(0x209)](_0xac095e[_0xcadc2d(0x1f3)]()),_0x3d2842=this[_0xcadc2d(0x209)](_0xac095e[_0xcadc2d(0x1db)]()),_0x180184=this[_0xcadc2d(0x209)](_0xac095e[_0xcadc2d(0x1df)]());return{'createdAt':_0x57bccb+'-'+_0x3d2d19+'-'+_0x47afd6+'\x20'+_0x28c6d5+':'+_0x3d2842+':'+_0x180184,'createdDate':_0x57bccb+'-'+_0x3d2d19+'-'+_0x47afd6,'createdTime':_0x28c6d5+':'+_0x3d2842+':'+_0x180184};}static[a289_0x449bba(0x20c)](_0x4ef1e0){const _0x5324c1=a289_0x449bba,_0xcbc7b5=_0x4ef1e0[_0x5324c1(0x1cc)]('/')[_0x5324c1(0x1e0)]()||_0x4ef1e0;return _0xcbc7b5[_0x5324c1(0x1cc)]('-')['map'](_0x5bf557=>_0x5bf557['charAt'](0x0)[_0x5324c1(0x1f7)]()+_0x5bf557[_0x5324c1(0x20f)](0x1)[_0x5324c1(0x1e9)]())[_0x5324c1(0x1ef)]('');}static['toDisplayTitle'](_0x25ce81){const _0x2ed4c6=a289_0x449bba,_0x1012fd=_0x25ce81[_0x2ed4c6(0x1cc)]('/')[_0x2ed4c6(0x1e0)]()||_0x25ce81;return _0x1012fd[_0x2ed4c6(0x1cc)]('-')[_0x2ed4c6(0x1de)](_0x156615=>_0x156615[_0x2ed4c6(0x208)](0x0)['toUpperCase']()+_0x156615['slice'](0x1)[_0x2ed4c6(0x1e9)]())['join']('\x20');}static[a289_0x449bba(0x1d9)](_0x30c3e3,_0x509ce5,_0x4b0f47){const _0x147b7f=a289_0x449bba,_0x57932c=this[_0x147b7f(0x20c)](_0x509ce5),_0x10e120=this[_0x147b7f(0x1e2)](_0x509ce5),{createdAt:_0x765aaa,createdDate:_0x3a16a2,createdTime:_0x4fbca0}=this[_0x147b7f(0x1cb)](new Date());let _0x4dfd3d=_0x30c3e3[_0x147b7f(0x1d2)](/\{CliVersion\}/g,CLI_VERSION)[_0x147b7f(0x1d2)](/\{ComponentName\}/g,_0x57932c)[_0x147b7f(0x1d2)](/\{DisplayTitle\}/g,_0x10e120)[_0x147b7f(0x1d2)](/\{PageName\}/g,_0x509ce5)[_0x147b7f(0x1d2)](/\{TemplateName\}/g,_0x4b0f47)[_0x147b7f(0x1d2)](/\{CreatedAt\}/g,_0x765aaa)[_0x147b7f(0x1d2)](/\{CreatedDate\}/g,_0x3a16a2)['replace'](/\{CreatedTime\}/g,_0x4fbca0);return _0x4dfd3d;}static['replaceApiContent'](_0x5ed8d0,_0x559d49,_0x5f1b65,_0x6013f9,_0x13a93e,_0x5ac8eb,_0x4027ff,_0x6ec176){const _0x5cc660=a289_0x449bba,_0x5ed798=new Date(),_0x337ff1=_0x5ed798['toISOString'](),_0x4a7b34=_0x5f1b65['map'](_0x9f917c=>{const _0x112063=a289_0x45eb,_0x38aea1=[_0x112063(0x204)+_0x9f917c['datasetCode']+'\x22','tableName:\x20\x22'+_0x9f917c[_0x112063(0x1e5)]+'\x22',_0x112063(0x20b)+_0x9f917c[_0x112063(0x1da)]+'\x22'];return _0x9f917c[_0x112063(0x20d)]&&_0x38aea1[_0x112063(0x205)](_0x112063(0x1f0)+_0x9f917c[_0x112063(0x20d)]+'\x22'),'\x0a\x20\x20\x20\x20{\x20'+_0x38aea1[_0x112063(0x1ef)](',\x20')+'\x20},';})[_0x5cc660(0x1ef)](''),_0x18a72d=_0x6013f9||_0x5f1b65[0x0]?.['alias']||'YourModel';let _0x5f066b=_0x5ed8d0[_0x5cc660(0x1d2)](/\{AppCode\}/g,_0x559d49)[_0x5cc660(0x1d2)](/\{ModelConfigs\}/g,_0x4a7b34)['replace'](/\{ExampleModelName\}/g,_0x18a72d)[_0x5cc660(0x1d2)](/\{ApiFileName\}/g,_0x13a93e||_0x5cc660(0x1d6))[_0x5cc660(0x1d2)](/\{ConfigName\}/g,_0x5ac8eb||_0x5cc660(0x1e3))[_0x5cc660(0x1d2)](/\{ClientConfigParam\}/g,_0x4027ff||'')[_0x5cc660(0x1d2)](/\{VarPrefix\}/g,_0x6ec176||_0x5cc660(0x1ff))[_0x5cc660(0x1d2)](/\{CreatedAt\}/g,_0x337ff1);return _0x5f066b;}static async[a289_0x449bba(0x1dc)](_0x3c2bad,_0x3ed426,_0xb41f44,_0x4357b8,_0x1508ba=!![]){const _0x4b0824=a289_0x449bba,_0x5c0c20=Date[_0x4b0824(0x1dd)]();try{_0x1508ba&&logger[_0x4b0824(0x1fb)](_0x4b0824(0x1c8),_0x4b0824(0x1fa),{'templatePath':_0x3c2bad,'targetPath':_0x3ed426,'pageName':_0xb41f44,'templateName':_0x4357b8});await a289_0x3b22e3[_0x4b0824(0x1fd)]['mkdir'](_0x3ed426,{'recursive':!![]}),await this['processDirectory'](_0x3c2bad,_0x3ed426,_0xb41f44,_0x4357b8);if(_0x1508ba){const _0x2af19e=Date[_0x4b0824(0x1dd)]()-_0x5c0c20;logger['success'](_0x4b0824(0x1c8),_0x4b0824(0x201),_0x2af19e,{'pageName':_0xb41f44,'templateName':_0x4357b8});}}catch(_0x183de0){if(_0x1508ba){const _0x1834e1=Date[_0x4b0824(0x1dd)]()-_0x5c0c20;logger[_0x4b0824(0x1d0)]('template',_0x4b0824(0x20a),{'templatePath':_0x3c2bad,'targetPath':_0x3ed426,'pageName':_0xb41f44,'templateName':_0x4357b8,'error':_0x183de0 instanceof Error?_0x183de0[_0x4b0824(0x1ed)]:String(_0x183de0),'duration':_0x1834e1});}throw _0x183de0;}}static async[a289_0x449bba(0x1ce)](_0x1252dd,_0x578f68,_0x3e0315,_0x20e250){const _0x1335d6=a289_0x449bba,_0x2b1f6a=await a289_0x3b22e3[_0x1335d6(0x1fd)][_0x1335d6(0x1d5)](_0x1252dd,{'withFileTypes':!![]});for(const _0x5c2902 of _0x2b1f6a){const _0x48d7bb=a289_0x3dc092[_0x1335d6(0x1ef)](_0x1252dd,_0x5c2902[_0x1335d6(0x1da)]);let _0x34f967=a289_0x3dc092['join'](_0x578f68,_0x5c2902['name']);_0x5c2902['name']['endsWith']('.tpl')&&(_0x34f967=a289_0x3dc092[_0x1335d6(0x1ef)](_0x578f68,_0x5c2902['name'][_0x1335d6(0x1d2)](/\.tpl$/,'')));if(_0x5c2902[_0x1335d6(0x1d4)]())await a289_0x3b22e3[_0x1335d6(0x1fd)][_0x1335d6(0x1d8)](_0x34f967,{'recursive':!![]}),await this['processDirectory'](_0x48d7bb,_0x34f967,_0x3e0315,_0x20e250);else _0x5c2902[_0x1335d6(0x1f5)]()&&await this[_0x1335d6(0x20e)](_0x48d7bb,_0x34f967,_0x3e0315,_0x20e250);}}static async[a289_0x449bba(0x20e)](_0x5001df,_0x4b9b2b,_0x18616e,_0xd1e63){const _0x3f8b4b=a289_0x449bba,_0x51be8a=a289_0x3dc092[_0x3f8b4b(0x1f8)](_0x5001df)[_0x3f8b4b(0x1e9)]();_0x5001df['endsWith'](_0x3f8b4b(0x1c9))&&(_0x4b9b2b=_0x4b9b2b['replace'](/\.tpl$/,''));const _0x4bdd61=[_0x3f8b4b(0x1fe),_0x3f8b4b(0x1f1),_0x3f8b4b(0x1e6),_0x3f8b4b(0x210),'.json',_0x3f8b4b(0x1e7),_0x3f8b4b(0x1cf),_0x3f8b4b(0x1d3),_0x3f8b4b(0x1c9)];if(_0x4bdd61[_0x3f8b4b(0x1f2)](_0x51be8a)||_0x5001df[_0x3f8b4b(0x1e4)](_0x3f8b4b(0x1c9))){const _0x1e2d14=await a289_0x3b22e3[_0x3f8b4b(0x1fd)][_0x3f8b4b(0x1f4)](_0x5001df,'utf8'),_0x3fba2e=this[_0x3f8b4b(0x1d9)](_0x1e2d14,_0x18616e,_0xd1e63);await a289_0x3b22e3[_0x3f8b4b(0x1fd)][_0x3f8b4b(0x206)](_0x4b9b2b,_0x3fba2e,_0x3f8b4b(0x1d1));}else await a289_0x3b22e3[_0x3f8b4b(0x1fd)][_0x3f8b4b(0x207)](_0x5001df,_0x4b9b2b);}}function a289_0x3f07(){const _0x2eade0=['235dXzqyE','toDisplayTitle','default','endsWith','tableName','.jsx','.md','getMonth','toLowerCase','8AMxQXH','2833768zEKlCF','padStart','message','11981vGuYNv','join','alias:\x20\x22','.ts','includes','getHours','readFile','isFile','22DmJMWg','toUpperCase','extname','2214549IEsXic','开始处理模板内容替换','info','60qtayIu','promises','.tsx','LOVRABET','1451208shKSGa','模板内容替换完成','8UVtZfi','3364790hHmsXR','datasetCode:\x20\x22','push','writeFile','copyFile','charAt','pad','模板内容替换失败','name:\x20\x22','toComponentName','alias','processFile','slice','.js','13002cDsSXZ','template','.tpl','getFullYear','formatLocalTimestamp','split','914208WbyKVY','processDirectory','.css','error','utf8','replace','.scss','isDirectory','readdir','api','getDate','mkdir','replaceContent','name','getMinutes','processTemplate','now','map','getSeconds','pop'];a289_0x3f07=function(){return _0x2eade0;};return a289_0x3f07();}
@@ -1 +1 @@
1
- function a297_0x5ca6(_0x3138b9,_0x4caa0c){_0x3138b9=_0x3138b9-0x173;const _0x519eab=a297_0x519e();let _0x5ca623=_0x519eab[_0x3138b9];return _0x5ca623;}(function(_0xcb97e3,_0xf52a06){const _0x77de4d=a297_0x5ca6,_0x151f38=_0xcb97e3();while(!![]){try{const _0x3bd0ac=parseInt(_0x77de4d(0x187))/0x1+-parseInt(_0x77de4d(0x190))/0x2*(parseInt(_0x77de4d(0x18b))/0x3)+-parseInt(_0x77de4d(0x179))/0x4*(parseInt(_0x77de4d(0x17a))/0x5)+-parseInt(_0x77de4d(0x18f))/0x6*(-parseInt(_0x77de4d(0x18d))/0x7)+-parseInt(_0x77de4d(0x186))/0x8*(-parseInt(_0x77de4d(0x17b))/0x9)+-parseInt(_0x77de4d(0x180))/0xa*(-parseInt(_0x77de4d(0x176))/0xb)+parseInt(_0x77de4d(0x183))/0xc*(-parseInt(_0x77de4d(0x182))/0xd);if(_0x3bd0ac===_0xf52a06)break;else _0x151f38['push'](_0x151f38['shift']());}catch(_0x126123){_0x151f38['push'](_0x151f38['shift']());}}}(a297_0x519e,0xb2a1c));function a297_0x519e(){const _0x112bb7=['https://www.npmjs.com/package/','true','number','4829TDckTi','valid','object','92xXTFJN','116485lajiAu','18cvNjzd','now','checkedAt','update-check.json','rabetbase-cli','28680LDSFjY','stableVersion','922493XYRRsn','156XQJrTX','yes','toLowerCase','2361616eQIVRT','1096515zOKxhu','latest','trim',',\x20run:\x20','12whITgI','lastNotifiedVersion','480039YiQDaP','parse','30zhZTYW','549428PmzcOT','lastNotifiedAt','\x20available,\x20current\x20','stringify','utf8','/v/'];a297_0x519e=function(){return _0x112bb7;};return a297_0x519e();}import{mkdir,readFile,writeFile}from'node:fs/promises';import{homedir}from'node:os';import{dirname,join}from'node:path';import a297_0x48fda4 from'semver';import{CLI_BIN_NAME,NPM_PACKAGE_NAME}from'../constant/cli.js';import{getCliVersionPolicy}from'../utils/cli-version-policy.js';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 _0x519ebd=a297_0x5ca6,_0x8583ca=process.env.RABETBASE_NO_UPDATE_NOTICE?.[_0x519ebd(0x189)]()[_0x519ebd(0x185)]();return _0x8583ca==='1'||_0x8583ca===_0x519ebd(0x174)||_0x8583ca===_0x519ebd(0x184);}function cacheRoot(){return process.env.XDG_CACHE_HOME||process.env.LOCALAPPDATA||join(homedir(),'.cache');}export function getUpdateNoticeCachePath(){const _0xd4d537=a297_0x5ca6;return join(cacheRoot(),_0xd4d537(0x17f),_0xd4d537(0x17e));}async function readUpdateNoticeCache(){const _0x93ec0a=a297_0x5ca6;try{const _0x199f2f=await readFile(getUpdateNoticeCachePath(),_0x93ec0a(0x194)),_0x4afe4d=JSON[_0x93ec0a(0x18e)](_0x199f2f);if(!_0x4afe4d||typeof _0x4afe4d!==_0x93ec0a(0x178))return{};return _0x4afe4d;}catch{return{};}}async function writeUpdateNoticeCache(_0x2d54ca){const _0x377d17=a297_0x5ca6;try{const _0x2a6adb=getUpdateNoticeCachePath();await mkdir(dirname(_0x2a6adb),{'recursive':!![]}),await writeFile(_0x2a6adb,JSON[_0x377d17(0x193)](_0x2d54ca,null,0x2)+'\x0a',_0x377d17(0x194));}catch{}}function isFreshCheck(_0x113b3b,_0x3cc282){const _0x1ffb93=a297_0x5ca6;return typeof _0x113b3b[_0x1ffb93(0x17d)]===_0x1ffb93(0x175)&&_0x3cc282-_0x113b3b[_0x1ffb93(0x17d)]<UPDATE_CHECK_TTL_MS;}function isRecentlyNotified(_0x25b82b,_0x55ceef,_0x26bc9d){const _0x2909d7=a297_0x5ca6;return _0x25b82b[_0x2909d7(0x18c)]===_0x55ceef&&typeof _0x25b82b[_0x2909d7(0x191)]===_0x2909d7(0x175)&&_0x26bc9d-_0x25b82b[_0x2909d7(0x191)]<UPDATE_NOTICE_TTL_MS;}export function buildNpmVersionUrl(_0x5e6ffe){const _0x1854a7=a297_0x5ca6;return _0x1854a7(0x173)+NPM_PACKAGE_NAME+_0x1854a7(0x195)+_0x5e6ffe;}export async function resolveLatestUpdateNotice(){const _0x9ad8e7=a297_0x5ca6;if(isUpdateNoticeDisabled())return null;try{const _0x5b6ab2=Date[_0x9ad8e7(0x17c)](),_0x42ec44=getCliVersion(),_0x38b28f=await readUpdateNoticeCache();let _0x5ce99a=isFreshCheck(_0x38b28f,_0x5b6ab2)?_0x38b28f[_0x9ad8e7(0x188)]?.[_0x9ad8e7(0x189)]():undefined;if(!_0x5ce99a&&!isFreshCheck(_0x38b28f,_0x5b6ab2)){const _0x482418=await getCliVersionPolicy();_0x5ce99a=_0x482418?.[_0x9ad8e7(0x181)]?.[_0x9ad8e7(0x189)]()||undefined,await writeUpdateNoticeCache({..._0x38b28f,'checkedAt':_0x5b6ab2,'latest':_0x5ce99a,'failed':!_0x5ce99a});}if(!_0x5ce99a||!a297_0x48fda4[_0x9ad8e7(0x177)](_0x42ec44)||!a297_0x48fda4[_0x9ad8e7(0x177)](_0x5ce99a))return null;if(a297_0x48fda4['gte'](_0x42ec44,_0x5ce99a))return null;if(isRecentlyNotified(_0x38b28f,_0x5ce99a,_0x5b6ab2))return null;const _0x142a4c=CLI_BIN_NAME+'\x20update';return await writeUpdateNoticeCache({..._0x38b28f,'checkedAt':isFreshCheck(_0x38b28f,_0x5b6ab2)?_0x38b28f[_0x9ad8e7(0x17d)]:_0x5b6ab2,'latest':_0x5ce99a,'failed':![],'lastNotifiedVersion':_0x5ce99a,'lastNotifiedAt':_0x5b6ab2}),{'command':_0x142a4c,'current':_0x42ec44,'latest':_0x5ce99a,'url':buildNpmVersionUrl(_0x5ce99a),'message':CLI_BIN_NAME+'\x20'+_0x5ce99a+_0x9ad8e7(0x192)+_0x42ec44+_0x9ad8e7(0x18a)+_0x142a4c};}catch{return null;}}
1
+ (function(_0x4a7ad8,_0x4b3438){const _0x323470=a290_0x254c,_0x3874c7=_0x4a7ad8();while(!![]){try{const _0x3de6e3=-parseInt(_0x323470(0x171))/0x1*(parseInt(_0x323470(0x17d))/0x2)+-parseInt(_0x323470(0x190))/0x3+-parseInt(_0x323470(0x178))/0x4*(parseInt(_0x323470(0x187))/0x5)+parseInt(_0x323470(0x175))/0x6*(-parseInt(_0x323470(0x18c))/0x7)+-parseInt(_0x323470(0x17b))/0x8+parseInt(_0x323470(0x181))/0x9*(parseInt(_0x323470(0x189))/0xa)+parseInt(_0x323470(0x174))/0xb*(parseInt(_0x323470(0x185))/0xc);if(_0x3de6e3===_0x4b3438)break;else _0x3874c7['push'](_0x3874c7['shift']());}catch(_0x33879f){_0x3874c7['push'](_0x3874c7['shift']());}}}(a290_0x4767,0x2f85c));import{mkdir,readFile,writeFile}from'node:fs/promises';import{homedir}from'node:os';import{dirname,join}from'node:path';import a290_0x5f1226 from'semver';import{CLI_BIN_NAME,NPM_PACKAGE_NAME}from'../constant/cli.js';import{getCliVersionPolicy}from'../utils/cli-version-policy.js';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 _0x1ab6d9=a290_0x254c,_0x4c0aa7=process.env.RABETBASE_NO_UPDATE_NOTICE?.['trim']()['toLowerCase']();return _0x4c0aa7==='1'||_0x4c0aa7===_0x1ab6d9(0x18f)||_0x4c0aa7===_0x1ab6d9(0x17e);}function cacheRoot(){const _0x39c154=a290_0x254c;return process.env.XDG_CACHE_HOME||process.env.LOCALAPPDATA||join(homedir(),_0x39c154(0x182));}export function getUpdateNoticeCachePath(){const _0x3b2d16=a290_0x254c;return join(cacheRoot(),_0x3b2d16(0x177),_0x3b2d16(0x183));}async function readUpdateNoticeCache(){const _0x5e6b27=a290_0x254c;try{const _0x29ac4a=await readFile(getUpdateNoticeCachePath(),_0x5e6b27(0x18b)),_0x220dde=JSON[_0x5e6b27(0x179)](_0x29ac4a);if(!_0x220dde||typeof _0x220dde!==_0x5e6b27(0x176))return{};return _0x220dde;}catch{return{};}}async function writeUpdateNoticeCache(_0x1cb78d){const _0x1f692f=a290_0x254c;try{const _0xedb530=getUpdateNoticeCachePath();await mkdir(dirname(_0xedb530),{'recursive':!![]}),await writeFile(_0xedb530,JSON['stringify'](_0x1cb78d,null,0x2)+'\x0a',_0x1f692f(0x18b));}catch{}}function a290_0x254c(_0x130a95,_0x466353){_0x130a95=_0x130a95-0x171;const _0x476777=a290_0x4767();let _0x254cb1=_0x476777[_0x130a95];return _0x254cb1;}function isFreshCheck(_0xac58bf,_0x2bd32e){return typeof _0xac58bf['checkedAt']==='number'&&_0x2bd32e-_0xac58bf['checkedAt']<UPDATE_CHECK_TTL_MS;}function a290_0x4767(){const _0x3cf390=['986440TdHnsM',',\x20run:\x20','3351930FojRlh','checkedAt','utf8','77KJkUHi','/v/','gte','true','200799sKSefU','trim','1BRKRcO','now','\x20available,\x20current\x20','866921wkmEKi','39396YyTUrN','object','rabetbase-cli','4sPmXfZ','parse','number','2122992xzIrJY','valid','180794QgvPyz','yes','https://www.npmjs.com/package/','latest','9VQwbfT','.cache','update-check.json','\x20update','84XRhXkY','lastNotifiedAt'];a290_0x4767=function(){return _0x3cf390;};return a290_0x4767();}function isRecentlyNotified(_0x173294,_0x1cfe20,_0x1b5188){const _0x4e7941=a290_0x254c;return _0x173294['lastNotifiedVersion']===_0x1cfe20&&typeof _0x173294[_0x4e7941(0x186)]===_0x4e7941(0x17a)&&_0x1b5188-_0x173294[_0x4e7941(0x186)]<UPDATE_NOTICE_TTL_MS;}export function buildNpmVersionUrl(_0x12c786){const _0x5c7b3f=a290_0x254c;return _0x5c7b3f(0x17f)+NPM_PACKAGE_NAME+_0x5c7b3f(0x18d)+_0x12c786;}export async function resolveLatestUpdateNotice(){const _0x1123cb=a290_0x254c;if(isUpdateNoticeDisabled())return null;try{const _0x3d9a23=Date[_0x1123cb(0x172)](),_0x3dc847=getCliVersion(),_0x2e16c9=await readUpdateNoticeCache();let _0x41253d=isFreshCheck(_0x2e16c9,_0x3d9a23)?_0x2e16c9[_0x1123cb(0x180)]?.[_0x1123cb(0x191)]():undefined;if(!_0x41253d&&!isFreshCheck(_0x2e16c9,_0x3d9a23)){const _0x50d4f3=await getCliVersionPolicy();_0x41253d=_0x50d4f3?.['stableVersion']?.[_0x1123cb(0x191)]()||undefined,await writeUpdateNoticeCache({..._0x2e16c9,'checkedAt':_0x3d9a23,'latest':_0x41253d,'failed':!_0x41253d});}if(!_0x41253d||!a290_0x5f1226['valid'](_0x3dc847)||!a290_0x5f1226[_0x1123cb(0x17c)](_0x41253d))return null;if(a290_0x5f1226[_0x1123cb(0x18e)](_0x3dc847,_0x41253d))return null;if(isRecentlyNotified(_0x2e16c9,_0x41253d,_0x3d9a23))return null;const _0x1395e2=CLI_BIN_NAME+_0x1123cb(0x184);return await writeUpdateNoticeCache({..._0x2e16c9,'checkedAt':isFreshCheck(_0x2e16c9,_0x3d9a23)?_0x2e16c9[_0x1123cb(0x18a)]:_0x3d9a23,'latest':_0x41253d,'failed':![],'lastNotifiedVersion':_0x41253d,'lastNotifiedAt':_0x3d9a23}),{'command':_0x1395e2,'current':_0x3dc847,'latest':_0x41253d,'url':buildNpmVersionUrl(_0x41253d),'message':CLI_BIN_NAME+'\x20'+_0x41253d+_0x1123cb(0x173)+_0x3dc847+_0x1123cb(0x188)+_0x1395e2};}catch{return null;}}
@@ -1 +1 @@
1
- function a298_0x50b3(_0x3b7b86,_0x2424ff){_0x3b7b86=_0x3b7b86-0x94;var _0x55c761=a298_0x55c7();var _0x50b32d=_0x55c761[_0x3b7b86];return _0x50b32d;}(function(_0x15df15,_0x246201){var _0x990b14=a298_0x50b3,_0x451865=_0x15df15();while(!![]){try{var _0x4ed8c8=-parseInt(_0x990b14(0x97))/0x1+parseInt(_0x990b14(0x9b))/0x2+parseInt(_0x990b14(0x9a))/0x3+parseInt(_0x990b14(0x94))/0x4+-parseInt(_0x990b14(0x95))/0x5+parseInt(_0x990b14(0x98))/0x6*(parseInt(_0x990b14(0x96))/0x7)+parseInt(_0x990b14(0x99))/0x8;if(_0x4ed8c8===_0x246201)break;else _0x451865['push'](_0x451865['shift']());}catch(_0x954daf){_0x451865['push'](_0x451865['shift']());}}}(a298_0x55c7,0xd8497));import{VERSION}from'../generated/build-info.js';function a298_0x55c7(){var _0xaa5e3d=['1810938blaYZA','664836zXLNmn','1725684BRxNpf','3750170VAZrjL','7fRhdkc','592296VmhRZt','4374522MOwblL','1053352ljMCTg'];a298_0x55c7=function(){return _0xaa5e3d;};return a298_0x55c7();}export function getCliVersion(){return VERSION;}
1
+ function a291_0x47ab(_0x29f7ac,_0x27b17b){_0x29f7ac=_0x29f7ac-0x10b;var _0x2d6348=a291_0x2d63();var _0x47abc2=_0x2d6348[_0x29f7ac];return _0x47abc2;}function a291_0x2d63(){var _0xc24b49=['8005151ZTHkaJ','114353Rumdad','9036EsfbHO','7592gTSBSe','15528eLhdUN','13494JcPKYt','92257HnkNIR','1670OPzyZU','1377WfvQCx','16YDXRYW','55068OycXTj','990hoYzxd','2150LcxrLp'];a291_0x2d63=function(){return _0xc24b49;};return a291_0x2d63();}(function(_0x24aa40,_0x56b9a6){var _0x231335=a291_0x47ab,_0xde072=_0x24aa40();while(!![]){try{var _0x3b777f=parseInt(_0x231335(0x10f))/0x1*(parseInt(_0x231335(0x117))/0x2)+-parseInt(_0x231335(0x116))/0x3*(parseInt(_0x231335(0x110))/0x4)+-parseInt(_0x231335(0x10d))/0x5*(-parseInt(_0x231335(0x113))/0x6)+parseInt(_0x231335(0x10e))/0x7+-parseInt(_0x231335(0x112))/0x8*(-parseInt(_0x231335(0x10c))/0x9)+-parseInt(_0x231335(0x115))/0xa*(-parseInt(_0x231335(0x114))/0xb)+-parseInt(_0x231335(0x10b))/0xc*(parseInt(_0x231335(0x111))/0xd);if(_0x3b777f===_0x56b9a6)break;else _0xde072['push'](_0xde072['shift']());}catch(_0x199286){_0xde072['push'](_0xde072['shift']());}}}(a291_0x2d63,0xe1491));import{VERSION}from'../generated/build-info.js';export function getCliVersion(){return VERSION;}
@@ -1 +1 @@
1
- (function(_0x299776,_0x2b50ab){var _0x46bbf2=a299_0x1642,_0x4f2c8a=_0x299776();while(!![]){try{var _0x317665=parseInt(_0x46bbf2(0xea))/0x1+parseInt(_0x46bbf2(0xf0))/0x2+-parseInt(_0x46bbf2(0xed))/0x3*(parseInt(_0x46bbf2(0xef))/0x4)+parseInt(_0x46bbf2(0xee))/0x5+parseInt(_0x46bbf2(0xe9))/0x6+parseInt(_0x46bbf2(0xf1))/0x7+parseInt(_0x46bbf2(0xeb))/0x8*(-parseInt(_0x46bbf2(0xec))/0x9);if(_0x317665===_0x2b50ab)break;else _0x4f2c8a['push'](_0x4f2c8a['shift']());}catch(_0x4c8043){_0x4f2c8a['push'](_0x4f2c8a['shift']());}}}(a299_0x9efd,0xd3847));function a299_0x1642(_0x56bbe9,_0x103afe){_0x56bbe9=_0x56bbe9-0xe9;var _0x9efd36=a299_0x9efd();var _0x1642d9=_0x9efd36[_0x56bbe9];return _0x1642d9;}import{setActiveCookie,clearActiveCookie}from'../core/api-client.js';export async function withActiveCookie(_0x157e49,_0x38760b){setActiveCookie(_0x157e49);try{return await _0x38760b();}finally{clearActiveCookie();}}function a299_0x9efd(){var _0x39ac97=['341128jDkzTq','819cGbyJU','2011821wDWRPm','4380720IaHuCg','4MFupJA','3364112KFXleB','6747937kqpblV','6038328McvctF','888734IVJChs'];a299_0x9efd=function(){return _0x39ac97;};return a299_0x9efd();}
1
+ (function(_0x57afb8,_0x50ee0b){var _0x34f302=a292_0x5342,_0x29678c=_0x57afb8();while(!![]){try{var _0xa988f7=parseInt(_0x34f302(0x192))/0x1+-parseInt(_0x34f302(0x193))/0x2*(-parseInt(_0x34f302(0x190))/0x3)+-parseInt(_0x34f302(0x18e))/0x4*(-parseInt(_0x34f302(0x196))/0x5)+-parseInt(_0x34f302(0x194))/0x6+parseInt(_0x34f302(0x18f))/0x7+-parseInt(_0x34f302(0x191))/0x8+-parseInt(_0x34f302(0x195))/0x9*(parseInt(_0x34f302(0x18d))/0xa);if(_0xa988f7===_0x50ee0b)break;else _0x29678c['push'](_0x29678c['shift']());}catch(_0x442fe5){_0x29678c['push'](_0x29678c['shift']());}}}(a292_0x3010,0x99532));import{setActiveCookie,clearActiveCookie}from'../core/api-client.js';function a292_0x5342(_0x2f3dea,_0xf2ede3){_0x2f3dea=_0x2f3dea-0x18d;var _0x3010df=a292_0x3010();var _0x53421f=_0x3010df[_0x2f3dea];return _0x53421f;}function a292_0x3010(){var _0x1c3cc1=['460aWLcsV','36DnKIyY','6998775RjMAcr','1614oqwEXq','4404752bQRBBT','131489tdtStg','3698hSlanp','1917390IakqNX','194607LErpUI','203755yFTIpP'];a292_0x3010=function(){return _0x1c3cc1;};return a292_0x3010();}export async function withActiveCookie(_0x235d8d,_0x2449c4){setActiveCookie(_0x235d8d);try{return await _0x2449c4();}finally{clearActiveCookie();}}
@@ -1 +1 @@
1
- function a300_0x3e24(_0x1b1bfc,_0x4183e2){_0x1b1bfc=_0x1b1bfc-0x1ba;var _0x43799e=a300_0x4379();var _0x3e245b=_0x43799e[_0x1b1bfc];return _0x3e245b;}(function(_0x36c898,_0x4a4ba7){var _0x2e3bf5=a300_0x3e24,_0x43b8b5=_0x36c898();while(!![]){try{var _0xda82ce=-parseInt(_0x2e3bf5(0x1c0))/0x1*(parseInt(_0x2e3bf5(0x1ba))/0x2)+parseInt(_0x2e3bf5(0x1bf))/0x3+-parseInt(_0x2e3bf5(0x1c2))/0x4+parseInt(_0x2e3bf5(0x1c1))/0x5+parseInt(_0x2e3bf5(0x1bb))/0x6*(-parseInt(_0x2e3bf5(0x1bd))/0x7)+-parseInt(_0x2e3bf5(0x1be))/0x8+parseInt(_0x2e3bf5(0x1c3))/0x9*(parseInt(_0x2e3bf5(0x1bc))/0xa);if(_0xda82ce===_0x4a4ba7)break;else _0x43b8b5['push'](_0x43b8b5['shift']());}catch(_0xee0844){_0x43b8b5['push'](_0x43b8b5['shift']());}}}(a300_0x4379,0xea9d2));export function writeCliSideChannelLine(_0xda8c1c){process['stderr']['write'](_0xda8c1c+'\x0a');}function a300_0x4379(){var _0x4a9b8=['2370342zYtdHf','1nkUfqO','1670050eZMoZG','1306928kJzBCh','667971rcudWI','1281910NyhHpz','65388MhyipS','370VLFkBO','1057MxaeIe','2367712CtVpIN'];a300_0x4379=function(){return _0x4a9b8;};return a300_0x4379();}
1
+ (function(_0x43bbac,_0xa83adf){var _0xc524ff=a293_0x2f76,_0x229ffd=_0x43bbac();while(!![]){try{var _0x5b5159=parseInt(_0xc524ff(0x1e3))/0x1+parseInt(_0xc524ff(0x1dd))/0x2*(-parseInt(_0xc524ff(0x1df))/0x3)+parseInt(_0xc524ff(0x1da))/0x4+-parseInt(_0xc524ff(0x1e4))/0x5*(-parseInt(_0xc524ff(0x1e2))/0x6)+-parseInt(_0xc524ff(0x1dc))/0x7*(parseInt(_0xc524ff(0x1db))/0x8)+parseInt(_0xc524ff(0x1e0))/0x9+parseInt(_0xc524ff(0x1de))/0xa*(-parseInt(_0xc524ff(0x1e1))/0xb);if(_0x5b5159===_0xa83adf)break;else _0x229ffd['push'](_0x229ffd['shift']());}catch(_0x355809){_0x229ffd['push'](_0x229ffd['shift']());}}}(a293_0x36e3,0x8083c));function a293_0x2f76(_0x40d666,_0x538da6){_0x40d666=_0x40d666-0x1da;var _0x36e37e=a293_0x36e3();var _0x2f76a1=_0x36e37e[_0x40d666];return _0x2f76a1;}function a293_0x36e3(){var _0x3e2ad4=['stderr','2827464IZPWis','8FYSkNH','218813ayBKvn','1552HdCBZB','1322500dTClWM','2265mEoptx','3545577VWQjMe','66JbGuSN','71334PTdBkE','265544fxoSaC','240znHqLF'];a293_0x36e3=function(){return _0x3e2ad4;};return a293_0x36e3();}export function writeCliSideChannelLine(_0x437294){var _0x4eb781=a293_0x2f76;process[_0x4eb781(0x1e5)]['write'](_0x437294+'\x0a');}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lovrabet/rabetbase-cli",
3
- "version": "2.4.4",
3
+ "version": "2.4.5-beta.1",
4
4
  "description": "Developer CLI for Lovrabet apps, datasets, pages, SQL, BFF, database connections, skills, and AI agent workflows.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "keywords": [
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: rabetbase
3
- version: 2.4.4
4
- description: "Lovrabet 开发工作流 CLI — 通过 rabetbase 命令管理数据集、数据库连接(dblink)、智能列表页(Smart List Page)、React 自定义页面(JSX 页面)、SQL 查询、BFF 脚本、通知配置、菜单事实读取与同步、应用文件、OCR 识别、代码生成,以及平台问题上报。触发词:数据集、数据表、dataset relation-audit、dataset delete、dataset restore、废弃数据集、恢复数据集、dataset rename、dataset field-update、dataset extend-update、dataset business-group-update、businessGroup、字段对象更新、doType、options、智能列表页、Smart List Page、React 自定义页面、JSX 页面、page react-create、page react-list、page react-detail、page react-update、page react-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 test、db tables、db diff、db diff --view all、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 消息通知、BFF 消息通知、Backend Function 消息通知、notification config-list、EMAIL configCode、通知配置、notification.send、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 external-link-create、menu external-link-update、menu rename、菜单改名、外链菜单创建、外链 URL 更新、菜单异常审计、菜单手动删除清单、menu sync、menu asset-update、菜单资源更新、menu move、菜单移动、角色、用户组、权限、role、permit、role list、role create、role user-add、role user-remove、user-resolve、销售组、加入开发者、page-set、page-get、row-roles、SELF、ALL、行级权限、role-menus-set、role-apis-set、菜单权限、API 权限、DEV、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.4.5-beta.1
4
+ description: "Lovrabet 开发工作流 CLI — 通过 rabetbase 命令管理数据集、数据库连接(dblink)、智能列表页(Smart List Page)、React 自定义页面(JSX 页面)、SQL 查询、BFF 脚本、通知配置、菜单事实读取与同步、开发角色与协作者、应用文件、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、智能列表页、Smart List Page、React 自定义页面、JSX 页面、page react-create、page react-list、page react-detail、page react-update、page react-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 --view all、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 消息通知、BFF 消息通知、Backend Function 消息通知、notification config-list、EMAIL configCode、通知配置、notification.send、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 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"]
8
- node: ">=20"
8
+ node: ">=22.20"
9
9
  cliHelp: "rabetbase --help"
10
10
  ---
11
11
 
@@ -139,21 +139,18 @@ metadata:
139
139
  - **取消已有任务**:只使用正在跟踪的原 `planId` 执行 `analyze-cancel --plan <原 planId>`;取消分支不得调用 `analyze-start`,也不得用可能变化的 `latestAnalysisTraceId` 替换已知目标。
140
140
  - **失败恢复**:全部批次结束后按 200 表阈值刷新或直接读取完整 `db diff --all --changed-only` 获取未收敛表,逐表串行执行 `analyze-start --tables <单表>`,每表只恢复一次;累计原因计数只作可能不完整的参考展示。Agent 可语义理解原始 `errorMsg` 辅助解释和建议,但两者都不驱动任务状态、重提任务或收敛判断。
141
141
  - **ER 图引导**:`db analyze-status` 终态成功后,检查并转述 `data.links.erPage`;若没有 `data.links`,补 `--appcode` 或进入已配置 app 的项目上下文后重查。
142
- - **写入**:[`db create`](references/rabetbase-db-create.md) / [`db update`](references/rabetbase-db-update.md) / [`db delete`](references/rabetbase-db-delete.md)(高危删连需确认);`create`/`update` 支持 **`--dry-run`** 预览。`db create` 成功后返回连接信息与数据库连接页链接。
142
+ - **写入**:[`db create`](references/rabetbase-db-create.md) / [`db update`](references/rabetbase-db-update.md) 默认先测试未保存配置,只有显式 `--skip-connection-test` 才跳过;[`db delete`](references/rabetbase-db-delete.md) 必须先 dry-run,执行前重新检查 DB_TABLE Dataset 依赖,有依赖即阻止且无 force。三者都支持 **`--dry-run`**。
143
143
  - **横切流程与 trace/plan**:[`database-connection-workflow.md`](guides/database-connection-workflow.md)。**单命令细则**见 `references/rabetbase-db-*.md`(与仓库 `src/commands/db/` 一一对应)。
144
144
 
145
- ## 用户组与权限(`role` / `permit`)
145
+ ## 开发角色与协作者(`role`)
146
146
 
147
- 先分清两个层面再动手:**成员归属**(谁在组里,用 `role user-*`)与**能力授权**(组能看什么/做什么,用 `permit *`)。「某人不能看财务」通常是收紧其所在 `CUSTOM` 组的能力,而不是把人移出组;内置 `DEV`/`ADMIN` 的权限矩阵不可改。
147
+ `rabetbase role` 只管理开发角色与开发协作者关系,输出明确包含 `scope: "dev"`。业务人员角色、用户组成员以及页面、菜单、数据集权限属于 `lovrabet`。若 `lovrabet` 当前 Help/Schema 尚未提供对应命令,应明确告知能力暂不可用,不得改用 rabetbase 代替,也不得跨端双写。
148
148
 
149
- - **横切工作流与决策树**(问题 → 命令、`role-menus-set` vs `page-set --menu-roles` 的区别、5 个剧本)先读 [`guides/role-permit-workflow.md`](guides/role-permit-workflow.md)。
150
- - **角色类型**:`ADMIN`/`DEV`/`USER`(内置)与 `CUSTOM`(用户创建);`update`/`delete` 仅 `CUSTOM`。
149
+ - **角色类型**:`ADMIN` / `DEV` / `OWNER`(内置)与已有 `CUSTOM`;`update` / `delete` 仅 `CUSTOM`。当前不提供 `role create`。
151
150
  - **只读人员目录**:租户全员查询用 [`tenant members-list`](references/rabetbase-tenant-members-list.md);应用成员及角色归属查询用 [`app members-list`](references/rabetbase-app-members-list.md)。只查看事实时不要调用 `role user-add`/`user-remove`。
152
- - **加人/移人**:先 [`role user-resolve`](references/rabetbase-role-user-resolve.md) 拿 userId,再 [`role user-add`/`user-remove`](references/rabetbase-role-user-add.md)(`high-risk-write`,内部 read-merge-write,只改目标组)。
153
- - **建/改/删组**:[`role list/detail/create/update/delete`](references/rabetbase-role-list.md)。
154
- - **收紧菜单/接口(按组)**:[`role-menus-set`](references/rabetbase-permit-role-menus-set.md) / [`role-apis-set`](references/rabetbase-permit-role-apis-set.md),必须显式 `--menus`/`--datasets`。
155
- - **单页权限(含行级只看自己)**:[`page-get`/`page-set`](references/rabetbase-permit-page-set.md);行级 `SELF` 只用于 `--row-roles`。
156
- - **铁律**:写前先 `page-get`/`role-menus` 拿真实标识 → `--dry-run` 看 `data.before/after` → `--yes`;行级/接口收紧的运行态效果交给 `lovrabet data filter` 验证。
151
+ - **加人/移人**:先 [`role user-resolve`](references/rabetbase-role-user-resolve.md) 拿 userId,再 [`role user-add`/`user-remove`](references/rabetbase-role-user-add.md)(`high-risk-write`,只改目标开发角色;OWNER 直接拒绝)。
152
+ - **查看/改/删已有组**:[`role list/detail/update/delete`](references/rabetbase-role-list.md)。
153
+ - **铁律**:写前先读取当前角色/成员事实 → `--dry-run` 看 `data.before/after` → 高风险写显式 `--yes`;不要用 rabetbase 修改运行态权限。
157
154
 
158
155
  ## 配置作用域原则(`--global`)
159
156
 
@@ -196,6 +193,7 @@ metadata:
196
193
  - **不要猜字段名** — 必须从 `dataset detail` 返回值获取真实字段名、类型、枚举值
197
194
  - **不要跳过 validate 与 dry-run** — 修改已有 SQL 并准备 `sql push` 前,必须先跑 `sql validate`;创建 SQL 或执行高风险同步前至少确认过 `sql create --dry-run`、`sql push --dry-run` 或 `sql delete --dry-run` 的预览
198
195
  - **不要手动拼 API URL** — 所有操作通过 CLI 命令完成,不要直接调 HTTP 接口
196
+ - **不要向产品用户展开研发实现** — 回答角色权限操作时,不输出工程仓库、Controller、数据库表、接口路径、MR 排查或迁移过程;只说明 CLI 命令、角色边界、风险和可验证结果
199
197
  - **不要臆测 sqlCode / id** — 从 `sql list` 或 `bff list` 获取真实标识
200
198
  - **不要臆测 dblink id 或分析 trace/plan id** — 从 `db list` / `db detail` / `db analyze-start` 的返回字段获取(见 [database-connection-workflow.md](guides/database-connection-workflow.md))
201
199
  - **只使用可见命令** — 以本 skill、`rabetbase schema`、`rabetbase --help` 中出现的命令为准;不要凭训练记忆调用未出现的旧别名
@@ -314,28 +312,26 @@ const result = await client.bff.execute<DashboardData>({
314
312
  | 修改任意类型菜单名称 | [`rabetbase menu rename`](references/rabetbase-menu-rename.md) | 精确单 ID、label-only;使用 `--expect-label` 防漂移,先 dry-run 并检查 before/after |
315
313
  | 同步本地微前端路由到平台 | [`rabetbase menu sync`](references/rabetbase-menu-sync.md) | 扫描 `src/pages` 创建缺失的 `procode` 菜单;不上传构建产物;正式执行前先 `--dry-run` |
316
314
  | 修改微前端菜单资源 URL | [`rabetbase menu asset-update`](references/rabetbase-menu-asset-update.md) | `write`;用 ID/path 精确选目标或显式 `--all`,默认 patch 且保留加载模式,先 dry-run 再复用参数正式执行 |
317
- | 用户组与权限总览(先读工作流/决策树) | [`guides/role-permit-workflow.md`](guides/role-permit-workflow.md) | 先分清「成员归属」vs「能力授权」,再定位到具体命令;含 `role-menus-set` 与 `page-set` 的区别与 5 个剧本 |
318
- | 查看/创建/管理角色(用户组) | [`rabetbase role list/detail/create/update/delete`](references/rabetbase-role-list.md) | 仅 CUSTOM 可改/删;DEV/ADMIN 拒绝;写操作先 `--dry-run` 再 `--yes` |
315
+ | 查看/管理开发角色 | [`rabetbase role list/detail/update/delete`](references/rabetbase-role-list.md) | 角色类型为 ADMIN/DEV/OWNER/CUSTOM;仅 CUSTOM 可改/删;当前不提供 create;输出 `scope: dev` |
319
316
  | 解析昵称/用户名到 userId | [`rabetbase role user-resolve`](references/rabetbase-role-user-resolve.md) | 基于租户成员目录;重名报错要求 `--user <id>` 消歧 |
320
317
  | 查询租户人员列表 | [`rabetbase tenant members-list --tenant-code <code>`](references/rabetbase-tenant-members-list.md) | 先校验当前账号所属租户,再返回全量人员;不分页、不输出邮箱/手机号/头像 |
321
318
  | 查询应用人员及角色列表 | [`rabetbase app members-list --appcode <code>`](references/rabetbase-app-members-list.md) | 按 userId 去重并聚合 `roles[]`;同时保留 ACTIVE/PENDING 角色归属 |
322
- | 把员工加入/移出角色 | [`rabetbase role user-add / user-remove`](references/rabetbase-role-user-add.md) | 内部全量 read-merge-write,只改目标角色;`high-risk-write`,先 `--dry-run` |
323
- | 配置页面权限 / 行级只看自己 | [`rabetbase permit page-get / page-set`](references/rabetbase-permit-page-set.md) | 行级 SELF 用 `page-set --row-roles SELF`;只改传入槽位,其余原样回写 |
324
- | 收紧角色菜单/接口访问(如销售组不看财务) | [`rabetbase permit role-menus-set / role-apis-set`](references/rabetbase-permit-role-menus-set.md) | 先 `dataset list`/`menu list` 定位,再显式 `--menus`/`--datasets`;一期不自动 suggest |
319
+ | 把开发协作者加入/移出角色 | [`rabetbase role user-add / user-remove`](references/rabetbase-role-user-add.md) | 只改目标开发角色;OWNER 直接拒绝;`high-risk-write`,先 `--dry-run` |
325
320
  | 按 ID 删除菜单或目录树 | [`rabetbase menu delete`](references/rabetbase-menu-delete.md) | 精确删除空 folder/非 folder 叶子;非空 folder 显式 `--recursive`,计划按叶子优先批量提交并回读 |
326
321
  | 创建空菜单分组 | [`rabetbase menu group-create`](references/rabetbase-menu-group-create.md) | group 持久化为 `type=folder`,保留平台生成的非空 path;先 dry-run 并检查创建位置与排序 |
327
322
  | 修改菜单分组排序 | [`rabetbase menu group-update`](references/rabetbase-menu-group-update.md) | 目标必须为 folder;修改任意菜单类型的名称统一使用 `menu rename`;先 dry-run 并检查 before/after |
328
323
  | 移动已有叶子菜单 | [`rabetbase menu move`](references/rabetbase-menu-move.md) | 使用精确源 ID、目标父级 ID 和当前父级断言;逐项 dry-run 并检查写后回读 |
329
324
  | 异步新建根分组 | [`rabetbase menu regroup-start`](references/rabetbase-menu-regroup-start.md) | `write`;只接收精确非 folder 叶子 ID;返回 taskId,非幂等请求不自动重提 |
330
325
  | 查询通用异步任务 | [`rabetbase task status`](references/rabetbase-task-status.md) | 按 taskId + appCode 查询 `PENDING / PROCESSING / SUCCESS / FAILED`;只读,不重启业务操作 |
331
- | 查找数据集 | [`rabetbase dataset list --name "xxx"`](references/rabetbase-dataset-list.md) | 默认返回全部 DO V2 数据集;查指定来源用 `--source DB_TABLE` / `--source METADATA`;也可 `--code` 精确查 |
326
+ | 查找数据集 | [`rabetbase dataset list --name "xxx"`](references/rabetbase-dataset-list.md) | 默认返回支持的 `DB_TABLE` 和 `METADATA` 数据集;查指定来源用 `--source DB_TABLE` / `--source METADATA`;也可 `--code` 精确查 |
332
327
  | 查看表结构和字段 | [`rabetbase dataset detail --code xxx`](references/rabetbase-dataset-detail.md) | 含字段定义和操作列表 |
333
- | 废弃数据集 | [`rabetbase dataset delete`](references/rabetbase-dataset-delete.md) | high-risk-write;只从未删除数据集中定位,必须先 `--dry-run`,正式执行加 `--confirm --yes`,批量废弃推荐 `--expected-count` |
334
- | 恢复已删除数据集 | [`rabetbase dataset restore`](references/rabetbase-dataset-restore.md) | high-risk-write;只从已删除数据集中定位,必须先 `--dry-run`,正式执行加 `--confirm --yes`,批量恢复推荐 `--expected-count` |
328
+ | 废弃数据集 | [`rabetbase dataset delete`](references/rabetbase-dataset-delete.md) | high-risk-write;默认非级联,显式 `--cascade --confirm` 才删除关联页;必须先 `--dry-run`,批量推荐 `--expected-count` |
329
+ | 恢复已删除数据集 | [`rabetbase dataset restore`](references/rabetbase-dataset-restore.md) | high-risk-write;按唯一回收站日志只恢复 Dataset,页面用 `page restore` 明确恢复;必须先 `--dry-run` |
335
330
  | 修改 Dataset 展示名 | [`rabetbase dataset rename`](references/rabetbase-dataset-rename.md) | 只更新 Dataset 展示名;必须先 `--dry-run`,用 `--expect-name` 防漂移;连续重命名先读对应章节 |
336
331
  | 从文本生成新 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 |
337
332
  | 安全更新 Dataset 原始字段对象 | [`rabetbase dataset field-update`](references/rabetbase-dataset-field-update.md) | 使用 `--code` 定位 Dataset,只允许 patch 已知可变业务配置字段;必须先 `--dry-run`,用 `--expect-json` 防漂移 |
338
333
  | Dataset 顶层 extend 更新命令 | [`rabetbase dataset extend-update`](references/rabetbase-dataset-extend-update.md) | 当前无可写字段;不得用于 `businessGroup`。业务场景分组只能使用 `rabetbase dataset business-group-update` |
334
+ | 发现已有业务分组 | [`rabetbase dataset business-groups`](references/rabetbase-dataset-business-groups.md) | read;按 `--dbid` 汇总 DB_TABLE Dataset,不含 METADATA;空字符串桶表示未分组 |
339
335
  | 更新业务场景分组 | [`rabetbase dataset business-group-update`](references/rabetbase-dataset-business-group-update.md) | 唯一入口;使用 `--code` 定位 Dataset;必须先 `--dry-run`,推荐用 `--expect-business-group` 防漂移 |
340
336
  | 查看 Dataset 操作定义 | [`rabetbase dataset operations --code xxx`](references/rabetbase-dataset-operations.md) | 获取 filter/getOne/create 等参数定义 |
341
337
  | 查看数据集关联关系 | [`rabetbase dataset relations`](references/rabetbase-dataset-relations.md) | 标准只读入口,输出 `datasetCode + field` 关系事实;支持 `DB_TABLE -> DB_TABLE`、`DB_TABLE -> METADATA`、`METADATA -> METADATA` |
@@ -411,8 +407,7 @@ const result = await client.bff.execute<DashboardData>({
411
407
  | Menu | [`list`](references/rabetbase-menu-list.md) / [`external-link-create`](references/rabetbase-menu-external-link-create.md) / [`external-link-update`](references/rabetbase-menu-external-link-update.md) / [`rename`](references/rabetbase-menu-rename.md) / [`sync`](references/rabetbase-menu-sync.md) / [`asset-update`](references/rabetbase-menu-asset-update.md) / [`delete`](references/rabetbase-menu-delete.md) / [`group-create`](references/rabetbase-menu-group-create.md) / [`group-update`](references/rabetbase-menu-group-update.md) / [`move`](references/rabetbase-menu-move.md) / [`regroup-start`](references/rabetbase-menu-regroup-start.md) |
412
408
  | Async Tasks | [`task status`](references/rabetbase-task-status.md) |
413
409
  | Notification Configuration | [`notification config-list`](references/rabetbase-notification-config-list.md) / [`notification config-create`](references/rabetbase-notification-config-mutations.md) / [`notification config-update`](references/rabetbase-notification-config-mutations.md) / [`notification config-delete`](references/rabetbase-notification-config-mutations.md) |
414
- | Roles | [`list`](references/rabetbase-role-list.md) / `detail` / `create` / `update` / `delete` / [`user-resolve`](references/rabetbase-role-user-resolve.md) / [`user-add` / `user-remove`](references/rabetbase-role-user-add.md) |
415
- | Permissions | [`page-get` / `page-set`](references/rabetbase-permit-page-set.md) / `role-menus` / [`role-menus-set`](references/rabetbase-permit-role-menus-set.md) / [`role-apis-set`](references/rabetbase-permit-role-apis-set.md) |
410
+ | 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) |
416
411
  | Tenant Members | [`tenant members-list`](references/rabetbase-tenant-members-list.md)(当前账号所属租户的全量人员目录) |
417
412
  | app commands | [`list`](references/rabetbase-app-list.md)(只读应用事实;平台目录用 `list --remote`)/ [`members-list`](references/rabetbase-app-members-list.md)(应用人员及角色归属)。登记/移除应用改用 `workspace add` / `workspace remove` |
418
413
  | 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) |
@@ -501,4 +496,3 @@ const result = await client.bff.execute<DashboardData>({
501
496
  | 质量与最佳实践 | 审查 SQL/BFF、命名、高危边界、描述字段 | [`best-practices.md`](guides/best-practices.md) |
502
497
  | 数据库连接与分析 | 接入/改连/测连、`traceId` 来源、`db analyze-*` 与 dataset 分工;子命令速查见上文 **「数据库连接(db)」** | [`database-connection-workflow.md`](guides/database-connection-workflow.md) |
503
498
  | 菜单异常审计与安全修复 | 重复 path、根级菜单重名、空 folder 删除计划和平台处理后回查 | [`menu-anomaly-manual-cleanup.md`](guides/menu-anomaly-manual-cleanup.md) |
504
- | 用户组与权限配置 | 建组/加人、按组收紧菜单与接口、单页权限与行级只看自己;先分清成员归属 vs 能力授权 | [`role-permit-workflow.md`](guides/role-permit-workflow.md) |
@@ -99,6 +99,7 @@ db tables --id <id>
99
99
 
100
100
  ```text
101
101
  db create --dbname … --dbtype MYSQL --dburl host:port --username … --password … [--autostart]
102
+ → 默认先测试未保存配置;失败不创建。只有用户明确要求才加 --skip-connection-test
102
103
  → 记下返回的 data.connection.id;可把 data.links.databasePage 返回给用户按需查看
103
104
  db test --id <id> # 可选
104
105
  db analyze-start --id <id>
@@ -175,14 +176,17 @@ db analyze-batch-plan --id <id> --tables <toAnalyzeTables> --format compress
175
176
 
176
177
  ```text
177
178
  db detail --id <id>
178
- db update --id <id> --dburl … [--username …] [--password …] # 只传要改的字段
179
+ db update --id <id> --dburl … [--username …] [--password …] # 只传要改的字段;默认保存前测试合并配置
179
180
  db test --id <id>
180
181
  ```
181
182
 
182
183
  ### F. 删除连接(高危)
183
184
 
184
185
  ```text
185
- db delete --id <id> --yes # high-risk-write,非交互必须 --yes
186
+ db delete --id <id> --dry-run
187
+ → 检查 datasetDependency、activeDatasetCount 与 datasets
188
+ db delete --id <id> --expected-dataset-count 0 --confirm --yes
189
+ → 执行前重新查询;存在 DB_TABLE Dataset 时中止,无 force
186
190
  ```
187
191
 
188
192
  ## 与其它命令的配合
@@ -0,0 +1,28 @@
1
+ # dataset business-groups
2
+
3
+ 按数据库连接读取已有业务场景分组及有效 Dataset 数量。该命令为只读发现入口,统计范围固定为 `DB_TABLE`,不包含 METADATA。
4
+
5
+ ## 命令
6
+
7
+ ```bash
8
+ rabetbase dataset business-groups --dbid 10282 --format compress
9
+ ```
10
+
11
+ ## 参数
12
+
13
+ | Flag | 必填 | 说明 |
14
+ |------|------|------|
15
+ | `--dbid` | **是** | dblink id(先从 `db list` 获取) |
16
+ | `--appcode` | 否 | 覆盖当前 app |
17
+
18
+ ## 输出
19
+
20
+ - `scope` 固定为 `DB_TABLE`。
21
+ - `totalDatasetCount` 是该连接下参与统计的有效 DB_TABLE Dataset 数。
22
+ - `groups[]` 只包含 `businessGroup` 与 `datasetCount`;空字符串原样表示未分组。
23
+ - 本命令不修改分组。写入仍使用 `dataset business-group-update --code ...`,建议先复用这里发现的已有业务场景名。
24
+
25
+ ## 参考
26
+
27
+ - [dataset business-group-update](rabetbase-dataset-business-group-update.md)
28
+ - [dataset list](rabetbase-dataset-list.md)
@@ -1,6 +1,6 @@
1
1
  # dataset delete
2
2
 
3
- 废弃数据集。命令调用服务端删除接口,将平台数据集置为已删除,并由服务端同步删除关联页面和菜单;不会删除物理数据库或物理表。
3
+ 废弃数据集。默认只删除 Dataset;有关联页面时删除会被阻止。显式 `--cascade --confirm` 才同步删除关联页面和菜单;不会删除物理数据库或物理表。
4
4
 
5
5
  ## 命令
6
6
 
@@ -14,6 +14,7 @@ rabetbase dataset delete --dbid 10282 --expected-count 3 --dry-run --format json
14
14
 
15
15
  ```bash
16
16
  rabetbase dataset delete --dbid 10282 --expected-count 3 --confirm --yes --format json
17
+ rabetbase dataset delete --id 44964 --cascade --confirm --yes --format json
17
18
  ```
18
19
 
19
20
  ## 参数
@@ -25,6 +26,7 @@ rabetbase dataset delete --dbid 10282 --expected-count 3 --confirm --yes --forma
25
26
  | `--code <code>` | 与 `--id` / `--dbid` 三选一 | Dataset code |
26
27
  | `--dbid <id>` | 与 `--id` / `--code` 三选一 | 废弃该数据库连接下所有未删除数据集 |
27
28
  | `--expected-count <n>` | 否 | 命中数量保护;实际命中数不一致时中止 |
29
+ | `--cascade` | 否 | 同时删除关联页面和菜单;默认 `false` |
28
30
  | `--confirm` | 正式执行必填 | 确认执行废弃 |
29
31
  | `--dry-run` | 否 | 只预览目标列表,不调用删除接口 |
30
32
  | `--yes` | 正式执行建议 | 跳过高风险写入确认;非交互环境必填 |
@@ -33,10 +35,10 @@ rabetbase dataset delete --dbid 10282 --expected-count 3 --confirm --yes --forma
33
35
  ## 行为
34
36
 
35
37
  - 命令只在未删除数据集中定位目标。
36
- - 目标列表只用于定位;`relatedPageCount` 读取每个 Dataset 的 `get-driven-data.relatedPageInfoList`,表示当前有效关联页面数。
37
- - 不读取 `get-dataset-list` 响应中的 `relationPages`。
38
- - 正式执行调用 `/smartapi/dataset/delete-dataset`。
39
- - 服务端会软删除数据集,并软删除该数据集关联页面和菜单。
38
+ - dry-run 输出每个 Dataset 的 `relatedPages` / `relatedPageCount` 和最终 `cascade`。
39
+ - 默认非级联删除;有关联页面时操作中止且不改变资源。
40
+ - 只有显式传 `--cascade --confirm` 才同步删除关联页面和菜单;批量操作逐项报告成功/失败,部分成功不会包装成整体成功。
41
+ - 级联成功会输出 `pageRestoreCommands`。恢复时先执行 `dataset restore`,再按需执行这些 `page restore` 命令。
40
42
  - `--dbid` 批量废弃建议始终配合 `--expected-count`。
41
43
  - 该命令不会删除物理数据库、数据库连接或物理表。
42
44
 
@@ -1,6 +1,6 @@
1
1
  # dataset list
2
2
 
3
- 列出当前 App 下所有 DO V2 Dataset,包含 `source = DB_TABLE` 和 `source = METADATA`,支持服务端过滤。返回**精简列表**(每行含 `id`、`name`、`code`、`source`、`db`、`table` 等;若列表接口提供字段摘要,也会透出 `fields` 字段名列表)。单数据集的完整结构请用 **`dataset detail`**。
3
+ 列出当前 App 下支持的 Dataset,来源包含 `DB_TABLE` 和 `METADATA`,支持按名称、code 和来源过滤。返回**精简列表**(每行含 `id`、`name`、`code`、`source`、`db`、`table` 等;若存在字段摘要,也会透出 `fields` 字段名列表)。单数据集的完整结构请用 **`dataset detail`**。
4
4
 
5
5
  ## 命令
6
6
 
@@ -18,21 +18,21 @@ rabetbase dataset list --format table
18
18
 
19
19
  | Flag | 类型 | 必填 | 默认 | 说明 |
20
20
  |------|------|------|------|------|
21
- | `--name <name>` | string | 否 | — | 按名称模糊过滤(服务端) |
22
- | `--code <code>` | string | 否 | — | 按 dataset code 精确过滤(服务端) |
21
+ | `--name <name>` | string | 否 | — | 按名称模糊过滤 |
22
+ | `--code <code>` | string | 否 | — | 按 dataset code 精确过滤 |
23
23
  | `--source <source>` | string | 否 | — | 按来源过滤:`DB_TABLE` / `METADATA` |
24
24
  | `--format <fmt>` | string | 否 | `pretty` | 输出格式:`json` / `pretty` / `table` |
25
25
 
26
26
  ## 输出
27
27
 
28
- 默认返回所有 DO V2 数据集的精简列表(`id`, `name`, `code`, `description`, `source`, `db`, `table`, `datasetKey`, `pk`,以及列表接口提供时的 `fields` 字段名字符串数组)。`dataset list` 不隐式调用详情接口,`fields` 为空是符合预期的轻量列表行为;METADATA 数据集没有物理表配置时,`db` / `table` / `datasetKey` / `pk` 为空是预期行为。需要完整字段定义、操作、关联页等请执行 `rabetbase dataset detail --code …`。
28
+ 默认返回支持的数据集精简列表(`id`, `name`, `code`, `description`, `source`, `db`, `table`, `datasetKey`, `pk`,以及可用时的 `fields` 字段名字符串数组)。`fields` 为空是符合预期的轻量列表行为;METADATA 数据集没有物理表配置时,`db` / `table` / `datasetKey` / `pk` 为空是预期行为。需要完整字段定义、操作、关联页等请执行 `rabetbase dataset detail --code …`。
29
29
 
30
30
  ## 提示
31
31
 
32
- - `--name` 和 `--code` 均为服务端过滤,响应快、带宽小
32
+ - `--name`、`--code` 和 `--source` 可组合使用,同时传递时取交集
33
+ - 传 `--source` 时,结果只包含指定来源
33
34
  - `--code` 为精确匹配,适合已知 datasetCode 的场景
34
35
  - `--name` 为模糊匹配,适合搜索探索
35
- - 两者可组合使用,同时传递时取交集
36
36
  - 要回答“有哪些 METADATA 类型数据集”时,优先使用 `rabetbase dataset list --source METADATA --format json`
37
37
  - AI Agent 推荐始终使用 `--format json`
38
38
  - 列表项较多时可用 `--jq` 只取需要的键,例如:`--jq '.data.datasets[] | {code, name}'`
@@ -1,6 +1,6 @@
1
1
  # dataset restore
2
2
 
3
- 恢复已删除数据集。命令调用服务端恢复接口,将数据集恢复为可用状态,并由服务端恢复该数据集关联的已删除页面和菜单。
3
+ 恢复已删除数据集。命令按 Dataset id 定位唯一回收站删除日志并只恢复 Dataset;不会隐式恢复关联页面和菜单。
4
4
 
5
5
  ## 命令
6
6
 
@@ -33,10 +33,9 @@ rabetbase dataset restore --dbid 10282 --expected-count 3 --confirm --yes --form
33
33
  ## 行为
34
34
 
35
35
  - 命令只在已删除数据集中定位目标。
36
- - 目标列表只用于定位;`relatedPageCount` 分页查询 `getDeletedPageList(type=STANDARD)`,并按页面 `datasetIds` 聚合。
37
- - 不读取 `get-dataset-list` 响应中的 `relationPages`。
38
- - 正式执行调用 `/smartapi/dataset/restore-dataset`。
39
- - 服务端会恢复数据集,并恢复该数据集关联的已删除页面和菜单。
36
+ - dry-run 输出每个 Dataset 的 `relatedPageCount`,便于判断后续是否需要恢复页面。
37
+ - 每个 Dataset 必须恰好匹配一条删除记录;记录缺失或存在多条匹配记录时中止。
38
+ - 恢复结果固定标记 `pagesRestored=false`。关联页面需按需执行 `rabetbase page restore --id <pageId> --appcode <appCode>`;STANDARD 页面恢复会恢复对应菜单。
40
39
  - `--dbid` 批量恢复建议始终配合 `--expected-count`。
41
40
  - 该命令不会创建新的物理表,也不会修改业务数据。
42
41
 
@@ -46,6 +45,7 @@ rabetbase dataset restore --dbid 10282 --expected-count 3 --confirm --yes --form
46
45
 
47
46
  ```bash
48
47
  rabetbase dataset detail --code <datasetCode> --format compress
48
+ rabetbase page restore --id <pageId> --appcode <appCode> --dry-run --format compress
49
49
  ```
50
50
 
51
51
  ## 参考
@@ -22,6 +22,8 @@ rabetbase db create \
22
22
 
23
23
  可选:`--dbparam` 连接串附加参数、`--dbdesc` 描述、`--autostart` 创建成功后自动发起 schema 分析(等同再执行一次 `db analyze-start`)。若分析启动失败,连接仍已创建,响应中会含 `data.analysisStartWarning`。写操作支持 **`--dry-run`** 预览请求体(密码不落盘)。
24
24
 
25
+ 非 dry-run 默认先测试尚未保存的配置;预检失败不会创建连接。只有用户明确要求时才传 `--skip-connection-test`。dry-run 仅展示 `connectionPreflight.enabled`,不会实际建连。
26
+
25
27
  成功响应会返回连接信息与 `data.links.databasePage`,用于引导用户按需打开数据库连接页查看新建连接。
26
28
 
27
29
  ## 参数(节选)
@@ -34,6 +36,7 @@ rabetbase db create \
34
36
  | `--username` / `--password` | 是 | 凭据 |
35
37
  | `--dbversion` | 否 | 默认 `8.0` |
36
38
  | `--autostart` | 否 | 创建后是否自动启动分析 |
39
+ | `--skip-connection-test` | 否 | 明确跳过保存前连接预检;默认不跳过 |
37
40
 
38
41
  ## 输出链接
39
42