@lovrabet/rabetbase-cli 2.4.4 → 2.4.5

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_0x31b047=a284_0x57cf;function a284_0x5f0d(){const _0x26071b=['909198zANMjw','5LvunFd','level','setRawCommand','success','red','3512957wzpwTG','error','File','transports','yellow','timestamp','combine','warn','format','2097788VsZcre','errors','stringify','addColors','Failed\x20to\x20clear\x20logs:','duration','toISOString','winstonLogger','3527721IQrlnF','split','now','1710bhiDXK','utf8','existsSync','失败:\x20','8rbvcok','readLogs','printf','Failed\x20to\x20read\x20logs:','logFilePath','initWinstonLogger','rawCommand','info','dirname','filter','setLogPath','58450GxJGeU','unknown','blue','logTask','log','mkdirSync','currentRawCommand','完成:\x20','开始执行:\x20','getWinstonInstance','details','4372960fhAKsc','817196IfnNgm','clear'];a284_0x5f0d=function(){return _0x26071b;};return a284_0x5f0d();}(function(_0x24c920,_0x516bde){const _0x5989f8=a284_0x57cf,_0x79f09c=_0x24c920();while(!![]){try{const _0xdb3f70=parseInt(_0x5989f8(0xa9))/0x1+-parseInt(_0x5989f8(0xba))/0x2+parseInt(_0x5989f8(0xc2))/0x3+-parseInt(_0x5989f8(0xdf))/0x4+parseInt(_0x5989f8(0xac))/0x5*(parseInt(_0x5989f8(0xab))/0x6)+-parseInt(_0x5989f8(0xb1))/0x7*(parseInt(_0x5989f8(0xc9))/0x8)+parseInt(_0x5989f8(0xc5))/0x9*(parseInt(_0x5989f8(0xd4))/0xa);if(_0xdb3f70===_0x516bde)break;else _0x79f09c['push'](_0x79f09c['shift']());}catch(_0x270cee){_0x79f09c['push'](_0x79f09c['shift']());}}}(a284_0x5f0d,0x95381));function a284_0x57cf(_0x14bb77,_0xaf68e5){_0x14bb77=_0x14bb77-0xa9;const _0x5f0d33=a284_0x5f0d();let _0x57cf7c=_0x5f0d33[_0x14bb77];return _0x57cf7c;}import a284_0x4ba0b0 from'winston';import a284_0x1c0096 from'node:fs';import a284_0x3fcc16 from'node:path';class Logger{['winstonLogger'];[a284_0x31b047(0xcd)];[a284_0x31b047(0xda)]='';constructor(){this['logFilePath']='';}[a284_0x31b047(0xae)](_0x6453e5){const _0x1892f2=a284_0x31b047;this[_0x1892f2(0xda)]=_0x6453e5;}[a284_0x31b047(0xce)](){const _0x5d81c3=a284_0x31b047,_0x3044ae=a284_0x3fcc16[_0x5d81c3(0xd1)](this[_0x5d81c3(0xcd)]);!a284_0x1c0096[_0x5d81c3(0xc7)](_0x3044ae)&&a284_0x1c0096[_0x5d81c3(0xd9)](_0x3044ae,{'recursive':!![]});const _0x5a5170=a284_0x4ba0b0[_0x5d81c3(0xb9)][_0x5d81c3(0xb7)](a284_0x4ba0b0['format'][_0x5d81c3(0xb6)](),a284_0x4ba0b0['format'][_0x5d81c3(0xbb)]({'stack':!![]}),a284_0x4ba0b0[_0x5d81c3(0xb9)][_0x5d81c3(0xcb)](_0x4d4cdc=>{const _0xd4cef8=_0x5d81c3,_0x1250e2={'timestamp':_0x4d4cdc['timestamp']||new Date()[_0xd4cef8(0xc0)](),'level':_0x4d4cdc[_0xd4cef8(0xad)]||_0xd4cef8(0xd0),'command':_0x4d4cdc['command']||_0xd4cef8(0xd5),'rawCommand':_0x4d4cdc[_0xd4cef8(0xcf)]||this[_0xd4cef8(0xda)]||undefined,'message':_0x4d4cdc['message']||'','duration':_0x4d4cdc[_0xd4cef8(0xbf)]||undefined,'details':_0x4d4cdc[_0xd4cef8(0xde)]||undefined};return JSON[_0xd4cef8(0xbc)](_0x1250e2);}));this[_0x5d81c3(0xc1)]=a284_0x4ba0b0['createLogger']({'level':_0x5d81c3(0xd0),'format':_0x5a5170,'transports':[new a284_0x4ba0b0[(_0x5d81c3(0xb4))][(_0x5d81c3(0xb3))]({'filename':this[_0x5d81c3(0xcd)],'level':_0x5d81c3(0xd0)})],'silent':![]}),a284_0x4ba0b0[_0x5d81c3(0xbd)]({'success':'green','error':_0x5d81c3(0xb0),'warn':_0x5d81c3(0xb5),'info':_0x5d81c3(0xd6)});}[a284_0x31b047(0xd3)](_0xfacad3){const _0x5a202e=a284_0x31b047;this[_0x5a202e(0xcd)]=a284_0x3fcc16['join'](_0xfacad3,'.lovrabet.log'),this[_0x5a202e(0xc1)]&&this['winstonLogger'][_0x5a202e(0xaa)](),this[_0x5a202e(0xce)]();}[a284_0x31b047(0xd0)](_0x5d9f87,_0x273cb3,_0x234d03){const _0x272ca5=a284_0x31b047;if(!this['logFilePath']||!this[_0x272ca5(0xc1)])return;this[_0x272ca5(0xc1)]['info'](_0x273cb3,{'command':_0x5d9f87,'details':_0x234d03});}[a284_0x31b047(0xaf)](_0x484602,_0x595a7b,_0x2d429b,_0x4ae76e){const _0x35e6be=a284_0x31b047;if(!this[_0x35e6be(0xcd)]||!this[_0x35e6be(0xc1)])return;this['winstonLogger'][_0x35e6be(0xd8)](_0x35e6be(0xd0),_0x595a7b,{'level':_0x35e6be(0xaf),'command':_0x484602,'duration':_0x2d429b,'details':_0x4ae76e});}[a284_0x31b047(0xb2)](_0x13b7e9,_0x7c775d,_0x1e18df){const _0x3007fb=a284_0x31b047;if(!this[_0x3007fb(0xcd)]||!this['winstonLogger'])return;this[_0x3007fb(0xc1)][_0x3007fb(0xb2)](_0x7c775d,{'command':_0x13b7e9,'details':_0x1e18df});}[a284_0x31b047(0xb8)](_0x364b68,_0x96beb7,_0x2f3d32){const _0x2db149=a284_0x31b047;if(!this[_0x2db149(0xcd)]||!this[_0x2db149(0xc1)])return;this['winstonLogger'][_0x2db149(0xb8)](_0x96beb7,{'command':_0x364b68,'details':_0x2f3d32});}async[a284_0x31b047(0xd7)](_0x393583,_0x2054a3,_0x242496){const _0x386703=a284_0x31b047,_0x530e7e=Date[_0x386703(0xc4)]();this[_0x386703(0xd0)](_0x393583,_0x386703(0xdc)+_0x2054a3);try{const _0x63ab40=await _0x242496(),_0x1c353f=Date[_0x386703(0xc4)]()-_0x530e7e;return this[_0x386703(0xaf)](_0x393583,_0x386703(0xdb)+_0x2054a3,_0x1c353f),_0x63ab40;}catch(_0x276934){const _0x2ded65=Date[_0x386703(0xc4)]()-_0x530e7e;this[_0x386703(0xb2)](_0x393583,_0x386703(0xc8)+_0x2054a3,{'error':_0x276934 instanceof Error?_0x276934['message']:String(_0x276934),'duration':_0x2ded65});throw _0x276934;}}[a284_0x31b047(0xca)](){const _0x4d048b=a284_0x31b047;try{if(!a284_0x1c0096[_0x4d048b(0xc7)](this['logFilePath']))return[];const _0x304d05=a284_0x1c0096['readFileSync'](this[_0x4d048b(0xcd)],_0x4d048b(0xc6));return _0x304d05[_0x4d048b(0xc3)]('\x0a')[_0x4d048b(0xd2)](_0x4c3d58=>_0x4c3d58['trim']())['map'](_0x2f091f=>JSON['parse'](_0x2f091f));}catch(_0x2f1c9b){return console[_0x4d048b(0xb8)](_0x4d048b(0xcc),_0x2f1c9b),[];}}['clearLogs'](){const _0x1eeec8=a284_0x31b047;try{a284_0x1c0096['existsSync'](this[_0x1eeec8(0xcd)])&&a284_0x1c0096['writeFileSync'](this['logFilePath'],'',_0x1eeec8(0xc6));}catch(_0x5568c6){console['warn'](_0x1eeec8(0xbe),_0x5568c6);}}[a284_0x31b047(0xdd)](){const _0x3a6a37=a284_0x31b047;return this[_0x3a6a37(0xc1)];}}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(_0x1ba250,_0x74687d){const _0x17752f=a285_0xe4b8,_0x32e12f=_0x1ba250();while(!![]){try{const _0xc6bf70=parseInt(_0x17752f(0x1b9))/0x1*(parseInt(_0x17752f(0x1b1))/0x2)+-parseInt(_0x17752f(0x1b7))/0x3+-parseInt(_0x17752f(0x1b2))/0x4*(-parseInt(_0x17752f(0x1b8))/0x5)+parseInt(_0x17752f(0x1bd))/0x6*(parseInt(_0x17752f(0x1b6))/0x7)+-parseInt(_0x17752f(0x1b3))/0x8*(parseInt(_0x17752f(0x1be))/0x9)+-parseInt(_0x17752f(0x1b4))/0xa*(-parseInt(_0x17752f(0x1ba))/0xb)+-parseInt(_0x17752f(0x1bc))/0xc;if(_0xc6bf70===_0x74687d)break;else _0x32e12f['push'](_0x32e12f['shift']());}catch(_0x3c134b){_0x32e12f['push'](_0x32e12f['shift']());}}}(a285_0x28f7,0xb8292));import{CliErrors}from'../errors.js';function a285_0xe4b8(_0x48c0ab,_0x29da77){_0x48c0ab=_0x48c0ab-0x1b1;const _0x28f708=a285_0x28f7();let _0xe4b8d3=_0x28f708[_0x48c0ab];return _0xe4b8d3;}export function parseJsonParams(_0x4ddc11){const _0x3db1b9=a285_0xe4b8;if(!_0x4ddc11)return undefined;let _0x454672;try{_0x454672=JSON['parse'](_0x4ddc11);}catch{throw CliErrors[_0x3db1b9(0x1bf)](_0x3db1b9(0x1bb)+_0x4ddc11);}if(!_0x454672||typeof _0x454672!==_0x3db1b9(0x1c0)||Array['isArray'](_0x454672))throw CliErrors[_0x3db1b9(0x1bf)]('--params\x20must\x20be\x20a\x20JSON\x20object',_0x3db1b9(0x1b5));return _0x454672;}function a285_0x28f7(){const _0x464f76=['913PYlmTq','Invalid\x20JSON\x20for\x20--params:\x20','16484076BvUxzs','204tvfqPt','111123ZvuTdM','validation','object','2743384PuDOwb','4GwZXVF','744jFrPbA','106360enVSTl','Example:\x20--params\x20\x27{\x22id\x22:123}\x27','94101yTacBu','864012xpUJnb','4263640bsKkDI','1Utgsvs'];a285_0x28f7=function(){return _0x464f76;};return a285_0x28f7();}
@@ -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_0x85a41f=a286_0x1fd8;(function(_0x3c7120,_0x4cada8){const _0x318afc=a286_0x1fd8,_0x15b5f7=_0x3c7120();while(!![]){try{const _0x5c8089=parseInt(_0x318afc(0xe2))/0x1*(-parseInt(_0x318afc(0xe4))/0x2)+parseInt(_0x318afc(0xde))/0x3*(-parseInt(_0x318afc(0xdd))/0x4)+parseInt(_0x318afc(0xd9))/0x5+parseInt(_0x318afc(0xdf))/0x6*(-parseInt(_0x318afc(0xd7))/0x7)+parseInt(_0x318afc(0xda))/0x8*(parseInt(_0x318afc(0xe1))/0x9)+parseInt(_0x318afc(0xe3))/0xa*(parseInt(_0x318afc(0xdb))/0xb)+-parseInt(_0x318afc(0xdc))/0xc*(parseInt(_0x318afc(0xe0))/0xd);if(_0x5c8089===_0x4cada8)break;else _0x15b5f7['push'](_0x15b5f7['shift']());}catch(_0x1b79a9){_0x15b5f7['push'](_0x15b5f7['shift']());}}}(a286_0x4edd,0xab249));function a286_0x1fd8(_0x53c211,_0xf092a1){_0x53c211=_0x53c211-0xd7;const _0x4eddcf=a286_0x4edd();let _0x1fd864=_0x4eddcf[_0x53c211];return _0x1fd864;}function a286_0x4edd(){const _0x106044=['4264316JKdDjr','3avHxpY','50766Eiuuxt','27287QTAtMV','540blabdq','2WgWcmk','7310pjiDNh','258326prFKEN','.cmd','105ksqOkK','platform','3752535ghnWWn','151888BVlhWw','16555riclpT','4788pLKprk'];a286_0x4edd=function(){return _0x106044;};return a286_0x4edd();}export const isWindows=process[a286_0x85a41f(0xd8)]==='win32';export function resolveNpmBin(_0x31349d){const _0x45bc41=a286_0x85a41f;return isWindows?_0x31349d+_0x45bc41(0xe5):_0x31349d;}
@@ -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
+ (function(_0x1e8136,_0x7e623b){const _0x5e6f83=a287_0x2661,_0x1bb59a=_0x1e8136();while(!![]){try{const _0xd0ab89=parseInt(_0x5e6f83(0x1e5))/0x1*(-parseInt(_0x5e6f83(0x1e9))/0x2)+-parseInt(_0x5e6f83(0x1e7))/0x3*(parseInt(_0x5e6f83(0x1e3))/0x4)+-parseInt(_0x5e6f83(0x1e1))/0x5*(-parseInt(_0x5e6f83(0x1e4))/0x6)+-parseInt(_0x5e6f83(0x1e6))/0x7+parseInt(_0x5e6f83(0x1da))/0x8+-parseInt(_0x5e6f83(0x1db))/0x9*(-parseInt(_0x5e6f83(0x1e2))/0xa)+-parseInt(_0x5e6f83(0x1ee))/0xb*(-parseInt(_0x5e6f83(0x1dc))/0xc);if(_0xd0ab89===_0x7e623b)break;else _0x1bb59a['push'](_0x1bb59a['shift']());}catch(_0x513719){_0x1bb59a['push'](_0x1bb59a['shift']());}}}(a287_0x5691,0x9eb66));import{existsSync,mkdirSync,readFileSync,writeFileSync}from'node:fs';import{dirname,join,resolve}from'node:path';import{fileURLToPath}from'node:url';function a287_0x5691(){const _0x3e3787=['1911102gUYMOA','string','2bhvfgb','本地模板文件不存在:\x20','CDN\x20请求失败:\x20','lovrabet_rules.mdc','utf-8','33XaKObR','lastUpdated','7944528iBTlFH','5126391dXPWSp','1767516XyQAFq','content','status','agents.md','statusText','5lfSrIh','10xQuFOI','4NZLUcR','1563162MPcJrA','752847NWypav','1575728ALneQu'];a287_0x5691=function(){return _0x3e3787;};return a287_0x5691();}import{getTemplateBaseUrl}from'../utils/config.js';import{appendUpdateTime}from'../utils/guides-cdn.js';const __filename=fileURLToPath(import.meta.url),__dirname=dirname(__filename);function getRulesCdnUrl(){const _0x3aeebd=getTemplateBaseUrl();return _0x3aeebd+'/rules/rules.json';}const LOCAL_TEMPLATE_PATH=resolve(__dirname,'../../templates/rules/lovrabet_rules.mdc.tpl');export async function fetchRulesFromCDN(){const _0xa8aece=a287_0x2661,_0x4a5328=getRulesCdnUrl(),_0x942ade=await fetch(_0x4a5328,{'headers':{'Accept':'application/json'}});if(!_0x942ade['ok'])throw new Error(_0xa8aece(0x1eb)+_0x942ade[_0xa8aece(0x1de)]+'\x20'+_0x942ade[_0xa8aece(0x1e0)]);const _0x5d85ac=await _0x942ade['json']();if(!_0x5d85ac[_0xa8aece(0x1dd)]||typeof _0x5d85ac[_0xa8aece(0x1dd)]!==_0xa8aece(0x1e8))throw new Error('CDN\x20返回数据格式错误');return _0x5d85ac;}export async function getRulesContent(){const _0x33aa6e=a287_0x2661;try{const _0x34e0c4=await fetchRulesFromCDN();return _0x34e0c4[_0x33aa6e(0x1dd)];}catch{return readLocalTemplate();}}export function readLocalTemplate(){const _0x2a8c37=a287_0x2661;if(existsSync(LOCAL_TEMPLATE_PATH))return readFileSync(LOCAL_TEMPLATE_PATH,_0x2a8c37(0x1ed));throw new Error(_0x2a8c37(0x1ea)+LOCAL_TEMPLATE_PATH);}function a287_0x2661(_0x44d23e,_0x538718){_0x44d23e=_0x44d23e-0x1d9;const _0x5691cb=a287_0x5691();let _0x2661c5=_0x5691cb[_0x44d23e];return _0x2661c5;}export async function writeRulesFile(_0x45ca42){const _0x47419e=a287_0x2661,_0xe13f4f=await fetchRulesFromCDN()['catch'](()=>null);let _0x41fa68;_0xe13f4f?(_0x41fa68=_0xe13f4f[_0x47419e(0x1dd)],_0xe13f4f[_0x47419e(0x1d9)]&&(_0x41fa68=appendUpdateTime(_0x41fa68,_0xe13f4f[_0x47419e(0x1d9)]))):_0x41fa68=readLocalTemplate();const _0x879eb9=dirname(_0x45ca42);!existsSync(_0x879eb9)&&mkdirSync(_0x879eb9,{'recursive':!![]}),writeFileSync(_0x45ca42,_0x41fa68,_0x47419e(0x1ed));}export async function copyRulesToCursor(_0x27edb5){const _0x10cc8c=a287_0x2661,_0x505280=join(_0x27edb5,'.cursor/rules'),_0x35c4fe=join(_0x505280,_0x10cc8c(0x1ec));if(existsSync(_0x35c4fe))return![];return await writeRulesFile(_0x35c4fe),!![];}export async function copyRulesToAgentsMd(_0x2254ba){const _0x2e8c05=a287_0x2661,_0x51e83d=join(_0x2254ba,_0x2e8c05(0x1df));if(existsSync(_0x51e83d))return![];return await writeRulesFile(_0x51e83d),!![];}
@@ -1 +1 @@
1
- export function sleep(_0x54067f){return new Promise(_0x4bc9ab=>setTimeout(_0x4bc9ab,_0x54067f));}
1
+ export function sleep(_0x3d8ce1){return new Promise(_0x410dba=>setTimeout(_0x410dba,_0x3d8ce1));}
@@ -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_0x433a90=a289_0x41f5;(function(_0x112a2d,_0x48e317){const _0x1297c5=a289_0x41f5,_0x5be978=_0x112a2d();while(!![]){try{const _0x53c784=parseInt(_0x1297c5(0x17e))/0x1*(parseInt(_0x1297c5(0x167))/0x2)+-parseInt(_0x1297c5(0x164))/0x3*(parseInt(_0x1297c5(0x144))/0x4)+parseInt(_0x1297c5(0x175))/0x5*(parseInt(_0x1297c5(0x148))/0x6)+-parseInt(_0x1297c5(0x160))/0x7*(-parseInt(_0x1297c5(0x177))/0x8)+-parseInt(_0x1297c5(0x180))/0x9*(parseInt(_0x1297c5(0x181))/0xa)+parseInt(_0x1297c5(0x156))/0xb*(parseInt(_0x1297c5(0x176))/0xc)+parseInt(_0x1297c5(0x14e))/0xd*(parseInt(_0x1297c5(0x150))/0xe);if(_0x53c784===_0x48e317)break;else _0x5be978['push'](_0x5be978['shift']());}catch(_0x1b489f){_0x5be978['push'](_0x5be978['shift']());}}}(a289_0x367b,0x47353));import a289_0x4a3863 from'node:fs';import a289_0x9098b3 from'node:path';import{logger}from'../utils/logger.js';function a289_0x41f5(_0x1abb0f,_0x2d36b9){_0x1abb0f=_0x1abb0f-0x13b;const _0x367b88=a289_0x367b();let _0x41f551=_0x367b88[_0x1abb0f];return _0x41f551;}function a289_0x367b(){const _0x44e475=['toISOString','6746wtvJHL','.json','replaceContent','split','getFullYear','replace','success','promises','开始处理模板内容替换','alias:\x20\x22','getDate','replaceApiContent','name','join','1295QsphnG','335892EsbcpX','56hRHUSh','isFile','template','toUpperCase','writeFile','datasetCode:\x20\x22','getMinutes','50mRFDQW','info','2268927EOPMfq','10aVoOvR','mkdir','.css','toLowerCase','readFile','YourModel','now','slice','.ts','datasetCode','567244vDKhSb','.jsx','\x0a\x20\x20\x20\x20{\x20','includes','9726BXntYY','message','map','.tsx','.scss','.md','31655jhWTtH','tableName','238JzKXUE','processFile','.js','.tpl','toDisplayTitle','toComponentName','33QIyVee','padStart','pad','name:\x20\x22','error','endsWith','alias','getHours','formatLocalTimestamp','utf8','255346EDtGpH','copyFile','processDirectory','api','9RUkACR','pop'];a289_0x367b=function(){return _0x44e475;};return a289_0x367b();}import{getCliVersion}from'../utils/version.js';const CLI_VERSION=getCliVersion();export class TemplateReplacer{static[a289_0x433a90(0x158)](_0x5eea71){const _0x11105e=a289_0x433a90;return String(_0x5eea71)[_0x11105e(0x157)](0x2,'0');}static[a289_0x433a90(0x15e)](_0xe2738e){const _0x4823be=a289_0x433a90,_0x2db74a=_0xe2738e[_0x4823be(0x16b)](),_0x261127=this[_0x4823be(0x158)](_0xe2738e['getMonth']()+0x1),_0x4ee94f=this['pad'](_0xe2738e[_0x4823be(0x171)]()),_0x1b813d=this['pad'](_0xe2738e[_0x4823be(0x15d)]()),_0x409427=this['pad'](_0xe2738e[_0x4823be(0x17d)]()),_0x13e954=this[_0x4823be(0x158)](_0xe2738e['getSeconds']());return{'createdAt':_0x2db74a+'-'+_0x261127+'-'+_0x4ee94f+'\x20'+_0x1b813d+':'+_0x409427+':'+_0x13e954,'createdDate':_0x2db74a+'-'+_0x261127+'-'+_0x4ee94f,'createdTime':_0x1b813d+':'+_0x409427+':'+_0x13e954};}static[a289_0x433a90(0x155)](_0x2b1dd9){const _0x4c52e=a289_0x433a90,_0x1bffd7=_0x2b1dd9['split']('/')[_0x4c52e(0x165)]()||_0x2b1dd9;return _0x1bffd7[_0x4c52e(0x16a)]('-')[_0x4c52e(0x14a)](_0x59be06=>_0x59be06['charAt'](0x0)[_0x4c52e(0x17a)]()+_0x59be06['slice'](0x1)[_0x4c52e(0x13d)]())[_0x4c52e(0x174)]('');}static['toDisplayTitle'](_0x5b2d79){const _0x2b7fec=a289_0x433a90,_0xa910af=_0x5b2d79[_0x2b7fec(0x16a)]('/')[_0x2b7fec(0x165)]()||_0x5b2d79;return _0xa910af['split']('-')[_0x2b7fec(0x14a)](_0xf80fe6=>_0xf80fe6['charAt'](0x0)[_0x2b7fec(0x17a)]()+_0xf80fe6[_0x2b7fec(0x141)](0x1)[_0x2b7fec(0x13d)]())[_0x2b7fec(0x174)]('\x20');}static[a289_0x433a90(0x169)](_0x20f3ad,_0xb70529,_0x2900f8){const _0x1e8a73=a289_0x433a90,_0x365b81=this[_0x1e8a73(0x155)](_0xb70529),_0x252b28=this[_0x1e8a73(0x154)](_0xb70529),{createdAt:_0x1836d3,createdDate:_0x21cba3,createdTime:_0x1cb492}=this[_0x1e8a73(0x15e)](new Date());let _0x3a0528=_0x20f3ad[_0x1e8a73(0x16c)](/\{CliVersion\}/g,CLI_VERSION)['replace'](/\{ComponentName\}/g,_0x365b81)[_0x1e8a73(0x16c)](/\{DisplayTitle\}/g,_0x252b28)['replace'](/\{PageName\}/g,_0xb70529)[_0x1e8a73(0x16c)](/\{TemplateName\}/g,_0x2900f8)[_0x1e8a73(0x16c)](/\{CreatedAt\}/g,_0x1836d3)[_0x1e8a73(0x16c)](/\{CreatedDate\}/g,_0x21cba3)[_0x1e8a73(0x16c)](/\{CreatedTime\}/g,_0x1cb492);return _0x3a0528;}static[a289_0x433a90(0x172)](_0xf5c531,_0x4c9054,_0x7d4064,_0xa28496,_0x512ba1,_0x586040,_0x4c8d88,_0x59c236){const _0x1eec1a=a289_0x433a90,_0x47ed3a=new Date(),_0x523a16=_0x47ed3a[_0x1eec1a(0x166)](),_0xa5da6f=_0x7d4064['map'](_0x3d926d=>{const _0xea9ea5=_0x1eec1a,_0x20ce40=[_0xea9ea5(0x17c)+_0x3d926d[_0xea9ea5(0x143)]+'\x22','tableName:\x20\x22'+_0x3d926d[_0xea9ea5(0x14f)]+'\x22',_0xea9ea5(0x159)+_0x3d926d[_0xea9ea5(0x173)]+'\x22'];return _0x3d926d[_0xea9ea5(0x15c)]&&_0x20ce40['push'](_0xea9ea5(0x170)+_0x3d926d[_0xea9ea5(0x15c)]+'\x22'),_0xea9ea5(0x146)+_0x20ce40['join'](',\x20')+'\x20},';})['join'](''),_0x1f85ca=_0xa28496||_0x7d4064[0x0]?.[_0x1eec1a(0x15c)]||_0x1eec1a(0x13f);let _0x51f566=_0xf5c531['replace'](/\{AppCode\}/g,_0x4c9054)['replace'](/\{ModelConfigs\}/g,_0xa5da6f)['replace'](/\{ExampleModelName\}/g,_0x1f85ca)['replace'](/\{ApiFileName\}/g,_0x512ba1||_0x1eec1a(0x163))[_0x1eec1a(0x16c)](/\{ConfigName\}/g,_0x586040||'default')[_0x1eec1a(0x16c)](/\{ClientConfigParam\}/g,_0x4c8d88||'')[_0x1eec1a(0x16c)](/\{VarPrefix\}/g,_0x59c236||'LOVRABET')[_0x1eec1a(0x16c)](/\{CreatedAt\}/g,_0x523a16);return _0x51f566;}static async['processTemplate'](_0x43fc4d,_0x4636e0,_0x340c9e,_0x4e0a5b,_0x322cf1=!![]){const _0x462594=a289_0x433a90,_0x1ad73a=Date[_0x462594(0x140)]();try{_0x322cf1&&logger[_0x462594(0x17f)](_0x462594(0x179),_0x462594(0x16f),{'templatePath':_0x43fc4d,'targetPath':_0x4636e0,'pageName':_0x340c9e,'templateName':_0x4e0a5b});await a289_0x4a3863[_0x462594(0x16e)]['mkdir'](_0x4636e0,{'recursive':!![]}),await this['processDirectory'](_0x43fc4d,_0x4636e0,_0x340c9e,_0x4e0a5b);if(_0x322cf1){const _0x27d25a=Date[_0x462594(0x140)]()-_0x1ad73a;logger[_0x462594(0x16d)](_0x462594(0x179),'模板内容替换完成',_0x27d25a,{'pageName':_0x340c9e,'templateName':_0x4e0a5b});}}catch(_0xc9c8ee){if(_0x322cf1){const _0xe25ada=Date[_0x462594(0x140)]()-_0x1ad73a;logger[_0x462594(0x15a)](_0x462594(0x179),'模板内容替换失败',{'templatePath':_0x43fc4d,'targetPath':_0x4636e0,'pageName':_0x340c9e,'templateName':_0x4e0a5b,'error':_0xc9c8ee instanceof Error?_0xc9c8ee[_0x462594(0x149)]:String(_0xc9c8ee),'duration':_0xe25ada});}throw _0xc9c8ee;}}static async[a289_0x433a90(0x162)](_0x43c42f,_0x7fe9c7,_0x3fbd4c,_0xac66ae){const _0x29c3e3=a289_0x433a90,_0x4a26e2=await a289_0x4a3863[_0x29c3e3(0x16e)]['readdir'](_0x43c42f,{'withFileTypes':!![]});for(const _0x501d44 of _0x4a26e2){const _0x4cba12=a289_0x9098b3[_0x29c3e3(0x174)](_0x43c42f,_0x501d44['name']);let _0x2c2d4c=a289_0x9098b3[_0x29c3e3(0x174)](_0x7fe9c7,_0x501d44[_0x29c3e3(0x173)]);_0x501d44[_0x29c3e3(0x173)][_0x29c3e3(0x15b)](_0x29c3e3(0x153))&&(_0x2c2d4c=a289_0x9098b3[_0x29c3e3(0x174)](_0x7fe9c7,_0x501d44[_0x29c3e3(0x173)][_0x29c3e3(0x16c)](/\.tpl$/,'')));if(_0x501d44['isDirectory']())await a289_0x4a3863[_0x29c3e3(0x16e)][_0x29c3e3(0x13b)](_0x2c2d4c,{'recursive':!![]}),await this[_0x29c3e3(0x162)](_0x4cba12,_0x2c2d4c,_0x3fbd4c,_0xac66ae);else _0x501d44[_0x29c3e3(0x178)]()&&await this[_0x29c3e3(0x151)](_0x4cba12,_0x2c2d4c,_0x3fbd4c,_0xac66ae);}}static async[a289_0x433a90(0x151)](_0x47d330,_0x1d1212,_0x33bdf3,_0x1a4bdd){const _0x3f19cc=a289_0x433a90,_0x344e9a=a289_0x9098b3['extname'](_0x47d330)[_0x3f19cc(0x13d)]();_0x47d330[_0x3f19cc(0x15b)](_0x3f19cc(0x153))&&(_0x1d1212=_0x1d1212[_0x3f19cc(0x16c)](/\.tpl$/,''));const _0x41185e=[_0x3f19cc(0x14b),_0x3f19cc(0x142),_0x3f19cc(0x145),_0x3f19cc(0x152),_0x3f19cc(0x168),_0x3f19cc(0x14d),_0x3f19cc(0x13c),_0x3f19cc(0x14c),_0x3f19cc(0x153)];if(_0x41185e[_0x3f19cc(0x147)](_0x344e9a)||_0x47d330[_0x3f19cc(0x15b)]('.tpl')){const _0x41a603=await a289_0x4a3863[_0x3f19cc(0x16e)][_0x3f19cc(0x13e)](_0x47d330,_0x3f19cc(0x15f)),_0x5075dd=this[_0x3f19cc(0x169)](_0x41a603,_0x33bdf3,_0x1a4bdd);await a289_0x4a3863[_0x3f19cc(0x16e)][_0x3f19cc(0x17b)](_0x1d1212,_0x5075dd,'utf8');}else await a289_0x4a3863[_0x3f19cc(0x16e)][_0x3f19cc(0x161)](_0x47d330,_0x1d1212);}}
@@ -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(_0x107409,_0x1d40dc){const _0x2ef64e=a290_0x53a3,_0x44a63d=_0x107409();while(!![]){try{const _0x218f29=-parseInt(_0x2ef64e(0x1f8))/0x1*(parseInt(_0x2ef64e(0x208))/0x2)+parseInt(_0x2ef64e(0x1fc))/0x3+-parseInt(_0x2ef64e(0x203))/0x4+parseInt(_0x2ef64e(0x20f))/0x5*(parseInt(_0x2ef64e(0x1fb))/0x6)+parseInt(_0x2ef64e(0x200))/0x7+-parseInt(_0x2ef64e(0x20d))/0x8+parseInt(_0x2ef64e(0x204))/0x9;if(_0x218f29===_0x1d40dc)break;else _0x44a63d['push'](_0x44a63d['shift']());}catch(_0x509e66){_0x44a63d['push'](_0x44a63d['shift']());}}}(a290_0x59e0,0x60b5c));import{mkdir,readFile,writeFile}from'node:fs/promises';import{homedir}from'node:os';import{dirname,join}from'node:path';import a290_0x17950e 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 _0xdbf91d=a290_0x53a3,_0xefae71=process.env.RABETBASE_NO_UPDATE_NOTICE?.['trim']()[_0xdbf91d(0x1f5)]();return _0xefae71==='1'||_0xefae71===_0xdbf91d(0x210)||_0xefae71===_0xdbf91d(0x207);}function a290_0x59e0(){const _0xb70ad2=['13ppVapR','\x20available,\x20current\x20','\x20update','6kGseXN','967443cEdqGU','rabetbase-cli','valid','update-check.json','3175494AmAIIx',',\x20run:\x20','now','1826436XJzKdh','6633306qEvoDs','trim','/v/','yes','120374ZVvLXQ','stringify','object','stableVersion','checkedAt','5354000iiknco','gte','3956285MQYcLv','true','https://www.npmjs.com/package/','utf8','number','toLowerCase','latest','.cache'];a290_0x59e0=function(){return _0xb70ad2;};return a290_0x59e0();}function cacheRoot(){const _0x1a3c71=a290_0x53a3;return process.env.XDG_CACHE_HOME||process.env.LOCALAPPDATA||join(homedir(),_0x1a3c71(0x1f7));}export function getUpdateNoticeCachePath(){const _0x1b0119=a290_0x53a3;return join(cacheRoot(),_0x1b0119(0x1fd),_0x1b0119(0x1ff));}async function readUpdateNoticeCache(){const _0x1c22a1=a290_0x53a3;try{const _0x245005=await readFile(getUpdateNoticeCachePath(),_0x1c22a1(0x212)),_0x2d3c0f=JSON['parse'](_0x245005);if(!_0x2d3c0f||typeof _0x2d3c0f!==_0x1c22a1(0x20a))return{};return _0x2d3c0f;}catch{return{};}}async function writeUpdateNoticeCache(_0xab0d86){const _0x465656=a290_0x53a3;try{const _0x479197=getUpdateNoticeCachePath();await mkdir(dirname(_0x479197),{'recursive':!![]}),await writeFile(_0x479197,JSON[_0x465656(0x209)](_0xab0d86,null,0x2)+'\x0a',_0x465656(0x212));}catch{}}function a290_0x53a3(_0x49bf64,_0x2e9b46){_0x49bf64=_0x49bf64-0x1f4;const _0x59e032=a290_0x59e0();let _0x53a39d=_0x59e032[_0x49bf64];return _0x53a39d;}function isFreshCheck(_0x44fbb3,_0x4fc882){const _0x3ee912=a290_0x53a3;return typeof _0x44fbb3['checkedAt']===_0x3ee912(0x1f4)&&_0x4fc882-_0x44fbb3[_0x3ee912(0x20c)]<UPDATE_CHECK_TTL_MS;}function isRecentlyNotified(_0x40fb6c,_0xea2149,_0x30169c){const _0x2aef0a=a290_0x53a3;return _0x40fb6c['lastNotifiedVersion']===_0xea2149&&typeof _0x40fb6c['lastNotifiedAt']===_0x2aef0a(0x1f4)&&_0x30169c-_0x40fb6c['lastNotifiedAt']<UPDATE_NOTICE_TTL_MS;}export function buildNpmVersionUrl(_0x1457e8){const _0x794cf1=a290_0x53a3;return _0x794cf1(0x211)+NPM_PACKAGE_NAME+_0x794cf1(0x206)+_0x1457e8;}export async function resolveLatestUpdateNotice(){const _0x535910=a290_0x53a3;if(isUpdateNoticeDisabled())return null;try{const _0x59f028=Date[_0x535910(0x202)](),_0x1d5e99=getCliVersion(),_0x4acab6=await readUpdateNoticeCache();let _0x74be8=isFreshCheck(_0x4acab6,_0x59f028)?_0x4acab6[_0x535910(0x1f6)]?.[_0x535910(0x205)]():undefined;if(!_0x74be8&&!isFreshCheck(_0x4acab6,_0x59f028)){const _0x4ca10f=await getCliVersionPolicy();_0x74be8=_0x4ca10f?.[_0x535910(0x20b)]?.['trim']()||undefined,await writeUpdateNoticeCache({..._0x4acab6,'checkedAt':_0x59f028,'latest':_0x74be8,'failed':!_0x74be8});}if(!_0x74be8||!a290_0x17950e['valid'](_0x1d5e99)||!a290_0x17950e[_0x535910(0x1fe)](_0x74be8))return null;if(a290_0x17950e[_0x535910(0x20e)](_0x1d5e99,_0x74be8))return null;if(isRecentlyNotified(_0x4acab6,_0x74be8,_0x59f028))return null;const _0x444a21=CLI_BIN_NAME+_0x535910(0x1fa);return await writeUpdateNoticeCache({..._0x4acab6,'checkedAt':isFreshCheck(_0x4acab6,_0x59f028)?_0x4acab6[_0x535910(0x20c)]:_0x59f028,'latest':_0x74be8,'failed':![],'lastNotifiedVersion':_0x74be8,'lastNotifiedAt':_0x59f028}),{'command':_0x444a21,'current':_0x1d5e99,'latest':_0x74be8,'url':buildNpmVersionUrl(_0x74be8),'message':CLI_BIN_NAME+'\x20'+_0x74be8+_0x535910(0x1f9)+_0x1d5e99+_0x535910(0x201)+_0x444a21};}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(_0x3f961f,_0x38ce36){var _0xa5c188=a291_0x4622,_0x13c600=_0x3f961f();while(!![]){try{var _0x18516c=parseInt(_0xa5c188(0x155))/0x1*(-parseInt(_0xa5c188(0x15e))/0x2)+-parseInt(_0xa5c188(0x158))/0x3*(parseInt(_0xa5c188(0x15c))/0x4)+parseInt(_0xa5c188(0x159))/0x5*(-parseInt(_0xa5c188(0x156))/0x6)+-parseInt(_0xa5c188(0x15a))/0x7+-parseInt(_0xa5c188(0x157))/0x8+-parseInt(_0xa5c188(0x15f))/0x9*(parseInt(_0xa5c188(0x15b))/0xa)+parseInt(_0xa5c188(0x15d))/0xb;if(_0x18516c===_0x38ce36)break;else _0x13c600['push'](_0x13c600['shift']());}catch(_0x1d005d){_0x13c600['push'](_0x13c600['shift']());}}}(a291_0x4120,0x850cc));function a291_0x4622(_0xbeff97,_0x3feee7){_0xbeff97=_0xbeff97-0x155;var _0x4120b3=a291_0x4120();var _0x462244=_0x4120b3[_0xbeff97];return _0x462244;}import{VERSION}from'../generated/build-info.js';export function getCliVersion(){return VERSION;}function a291_0x4120(){var _0x4dbb81=['4jOJTHU','36111900GYeFMr','2uRcCrS','108dkogAf','564797HfoYFQ','57630ZZkDEc','1210568bHShTa','261255yDrkuJ','125pCMJPV','6835304JDhXCT','598440OspYjM'];a291_0x4120=function(){return _0x4dbb81;};return a291_0x4120();}
@@ -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(_0xaa88c4,_0x56bc62){var _0x75ad04=a292_0x3821,_0x1ae783=_0xaa88c4();while(!![]){try{var _0x41ff88=-parseInt(_0x75ad04(0xe3))/0x1+parseInt(_0x75ad04(0xdf))/0x2+parseInt(_0x75ad04(0xe2))/0x3*(-parseInt(_0x75ad04(0xe1))/0x4)+-parseInt(_0x75ad04(0xdc))/0x5+parseInt(_0x75ad04(0xde))/0x6*(-parseInt(_0x75ad04(0xe0))/0x7)+-parseInt(_0x75ad04(0xe4))/0x8+parseInt(_0x75ad04(0xdd))/0x9;if(_0x41ff88===_0x56bc62)break;else _0x1ae783['push'](_0x1ae783['shift']());}catch(_0x2e5c5a){_0x1ae783['push'](_0x1ae783['shift']());}}}(a292_0x3296,0x72a29));import{setActiveCookie,clearActiveCookie}from'../core/api-client.js';export async function withActiveCookie(_0xf5a5ec,_0x5efe63){setActiveCookie(_0xf5a5ec);try{return await _0x5efe63();}finally{clearActiveCookie();}}function a292_0x3821(_0x5e1c57,_0x20a0dc){_0x5e1c57=_0x5e1c57-0xdc;var _0x329665=a292_0x3296();var _0x3821ae=_0x329665[_0x5e1c57];return _0x3821ae;}function a292_0x3296(){var _0x4bf8ff=['2760942bsJGEJ','137110UxVnip','7ZNMlqE','30612sWFnGD','69nmpahy','625972wYTMSR','7362224CwywzS','769590mIsZaG','24636006XfBNDF'];a292_0x3296=function(){return _0x4bf8ff;};return a292_0x3296();}
@@ -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(_0x5c78d0,_0x4d52de){var _0xe557c4=a293_0x2b01,_0x2abf17=_0x5c78d0();while(!![]){try{var _0xfcdebf=-parseInt(_0xe557c4(0xf1))/0x1*(parseInt(_0xe557c4(0xed))/0x2)+parseInt(_0xe557c4(0xf0))/0x3+-parseInt(_0xe557c4(0xea))/0x4*(parseInt(_0xe557c4(0xef))/0x5)+-parseInt(_0xe557c4(0xee))/0x6*(-parseInt(_0xe557c4(0xf2))/0x7)+parseInt(_0xe557c4(0xeb))/0x8*(parseInt(_0xe557c4(0xf5))/0x9)+-parseInt(_0xe557c4(0xe8))/0xa+-parseInt(_0xe557c4(0xec))/0xb*(-parseInt(_0xe557c4(0xf4))/0xc);if(_0xfcdebf===_0x4d52de)break;else _0x2abf17['push'](_0x2abf17['shift']());}catch(_0x2397f5){_0x2abf17['push'](_0x2abf17['shift']());}}}(a293_0x58af,0xbad38));export function writeCliSideChannelLine(_0x45319e){var _0x4c943f=a293_0x2b01;process[_0x4c943f(0xe9)][_0x4c943f(0xf3)](_0x45319e+'\x0a');}function a293_0x2b01(_0x530b64,_0xe6d663){_0x530b64=_0x530b64-0xe8;var _0x58af09=a293_0x58af();var _0x2b0120=_0x58af09[_0x530b64];return _0x2b0120;}function a293_0x58af(){var _0x47a2c5=['59980xNRsoj','7NYqBVu','write','23954652IJTKqR','202266FPywSS','6500650HBrAXD','stderr','18472dYQsLG','376oehQQI','11bjCPqe','34EDctHD','3911994WVpbhm','1585JVqLRs','583119NXzMlc'];a293_0x58af=function(){return _0x47a2c5;};return a293_0x58af();}
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",
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
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