@lovrabet/lovrabet-cli 2.2.3 → 2.2.4-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/lib/cli.js +1 -1
  2. package/lib/commands/api-doc/index.js +1 -1
  3. package/lib/commands/app/cache.js +1 -1
  4. package/lib/commands/app/definitions.js +1 -1
  5. package/lib/commands/app/eligibility.js +1 -1
  6. package/lib/commands/app/mock-loader.js +1 -1
  7. package/lib/commands/app/remote-source.js +1 -1
  8. package/lib/commands/app/shared.js +1 -1
  9. package/lib/commands/app-config/get.js +1 -1
  10. package/lib/commands/app-config/index.js +1 -1
  11. package/lib/commands/artifact/index.js +1 -1
  12. package/lib/commands/auth/device.js +1 -1
  13. package/lib/commands/auth/index.js +1 -1
  14. package/lib/commands/auth/prompt.js +1 -1
  15. package/lib/commands/bff/detail.js +1 -1
  16. package/lib/commands/bff/exec.js +1 -1
  17. package/lib/commands/bff/index.js +1 -1
  18. package/lib/commands/cli-skill/index.js +1 -1
  19. package/lib/commands/common/config-policy.js +1 -1
  20. package/lib/commands/common/constraints.js +1 -1
  21. package/lib/commands/common/flags.js +1 -1
  22. package/lib/commands/common/local-file.js +1 -1
  23. package/lib/commands/config/definitions.js +1 -1
  24. package/lib/commands/config/shared.js +1 -1
  25. package/lib/commands/data/index.js +1 -1
  26. package/lib/commands/dataset/detail.js +1 -1
  27. package/lib/commands/dataset/index.js +1 -1
  28. package/lib/commands/dataset/list.js +1 -1
  29. package/lib/commands/dataset/sdk-doc.js +1 -1
  30. package/lib/commands/doctor.js +1 -1
  31. package/lib/commands/file/index.js +1 -1
  32. package/lib/commands/init.js +1 -1
  33. package/lib/commands/kb/index.js +1 -1
  34. package/lib/commands/logs/index.js +1 -1
  35. package/lib/commands/notification/config-list.d.ts +2 -0
  36. package/lib/commands/notification/config-list.js +1 -0
  37. package/lib/commands/notification/index.d.ts +2 -0
  38. package/lib/commands/notification/index.js +1 -0
  39. package/lib/commands/notification/shared.d.ts +13 -0
  40. package/lib/commands/notification/shared.js +1 -0
  41. package/lib/commands/ocr/index.js +1 -1
  42. package/lib/commands/permit/dataset-get.d.ts +2 -0
  43. package/lib/commands/permit/dataset-get.js +1 -0
  44. package/lib/commands/permit/dataset-set.d.ts +2 -0
  45. package/lib/commands/permit/dataset-set.js +1 -0
  46. package/lib/commands/permit/index.d.ts +2 -0
  47. package/lib/commands/permit/index.js +1 -0
  48. package/lib/commands/permit/page-get.d.ts +2 -0
  49. package/lib/commands/permit/page-get.js +1 -0
  50. package/lib/commands/permit/page-set.d.ts +2 -0
  51. package/lib/commands/permit/page-set.js +1 -0
  52. package/lib/commands/permit/role-menus-set.d.ts +2 -0
  53. package/lib/commands/permit/role-menus-set.js +1 -0
  54. package/lib/commands/permit/role-menus.d.ts +2 -0
  55. package/lib/commands/permit/role-menus.js +1 -0
  56. package/lib/commands/permit/shared.d.ts +52 -0
  57. package/lib/commands/permit/shared.js +1 -0
  58. package/lib/commands/personal-bff/index.js +1 -1
  59. package/lib/commands/registry.js +1 -1
  60. package/lib/commands/role/create.d.ts +2 -0
  61. package/lib/commands/role/create.js +1 -0
  62. package/lib/commands/role/delete.d.ts +2 -0
  63. package/lib/commands/role/delete.js +1 -0
  64. package/lib/commands/role/detail.d.ts +2 -0
  65. package/lib/commands/role/detail.js +1 -0
  66. package/lib/commands/role/index.d.ts +2 -0
  67. package/lib/commands/role/index.js +1 -0
  68. package/lib/commands/role/list.d.ts +2 -0
  69. package/lib/commands/role/list.js +1 -0
  70. package/lib/commands/role/shared.d.ts +33 -0
  71. package/lib/commands/role/shared.js +1 -0
  72. package/lib/commands/role/update.d.ts +2 -0
  73. package/lib/commands/role/update.js +1 -0
  74. package/lib/commands/role/user-add.d.ts +2 -0
  75. package/lib/commands/role/user-add.js +1 -0
  76. package/lib/commands/role/user-remove.d.ts +2 -0
  77. package/lib/commands/role/user-remove.js +1 -0
  78. package/lib/commands/schedule/index.js +1 -1
  79. package/lib/commands/schema.js +1 -1
  80. package/lib/commands/service/dynamic.js +1 -1
  81. package/lib/commands/service/function-name-adapter.js +1 -1
  82. package/lib/commands/service/index.js +1 -1
  83. package/lib/commands/service/registry.js +1 -1
  84. package/lib/commands/skill/commands/create.js +1 -1
  85. package/lib/commands/skill/commands/diagram.js +1 -1
  86. package/lib/commands/skill/commands/install.js +1 -1
  87. package/lib/commands/skill/commands/list.js +1 -1
  88. package/lib/commands/skill/commands/push.js +1 -1
  89. package/lib/commands/skill/commands/validate.js +1 -1
  90. package/lib/commands/skill/diagram.js +1 -1
  91. package/lib/commands/skill/flags.js +1 -1
  92. package/lib/commands/skill/index.js +1 -1
  93. package/lib/commands/skill/manifest-helpers.js +1 -1
  94. package/lib/commands/skill/push-execute.js +1 -1
  95. package/lib/commands/skill/push-flow-helpers.js +1 -1
  96. package/lib/commands/skill/push-retarget.js +1 -1
  97. package/lib/commands/skill/scopes.js +1 -1
  98. package/lib/commands/skill/summary.js +1 -1
  99. package/lib/commands/skill/templates.js +1 -1
  100. package/lib/commands/skill/validate.js +1 -1
  101. package/lib/commands/sql/detail.js +1 -1
  102. package/lib/commands/sql/exec.js +1 -1
  103. package/lib/commands/sql/index.js +1 -1
  104. package/lib/commands/update.js +1 -1
  105. package/lib/commands/user-account/bind.js +1 -1
  106. package/lib/commands/user-account/index.js +1 -1
  107. package/lib/commands/workspace/index.js +1 -1
  108. package/lib/config/schema.js +1 -1
  109. package/lib/constant/app.js +1 -1
  110. package/lib/constant/auth-mode.js +1 -1
  111. package/lib/constant/cli.js +1 -1
  112. package/lib/constant/defaults.js +1 -1
  113. package/lib/constant/distribution.js +1 -1
  114. package/lib/constant/domain.js +1 -1
  115. package/lib/constant/env.js +1 -1
  116. package/lib/constant/output.js +1 -1
  117. package/lib/constant/product.js +1 -1
  118. package/lib/constant/risk.js +1 -1
  119. package/lib/constant/url.js +1 -1
  120. package/lib/context.js +1 -1
  121. package/lib/core/api-client.d.ts +161 -0
  122. package/lib/core/api-client.js +1 -1
  123. package/lib/core/db-resolver.js +1 -1
  124. package/lib/core/sdk-client.js +1 -1
  125. package/lib/errors.js +1 -1
  126. package/lib/framework/build-all-flags.js +1 -1
  127. package/lib/framework/dryrun.js +1 -1
  128. package/lib/framework/flags.js +1 -1
  129. package/lib/framework/help.js +1 -1
  130. package/lib/framework/index.js +1 -1
  131. package/lib/framework/output.js +1 -1
  132. package/lib/framework/preparse.js +1 -1
  133. package/lib/framework/rate-limit.js +1 -1
  134. package/lib/framework/raw-flags.js +1 -1
  135. package/lib/framework/response.js +1 -1
  136. package/lib/framework/runner-confirmation.js +1 -1
  137. package/lib/framework/runner-error.js +1 -1
  138. package/lib/framework/runner.js +1 -1
  139. package/lib/framework/schema-export.js +1 -1
  140. package/lib/framework/service-order.js +1 -1
  141. package/lib/framework/types.js +1 -1
  142. package/lib/generated/build-info.d.ts +4 -4
  143. package/lib/generated/build-info.js +1 -1
  144. package/lib/help.js +1 -1
  145. package/lib/postinstall.js +1 -1
  146. package/lib/runtime/confirmation.js +1 -1
  147. package/lib/runtime/event.js +1 -1
  148. package/lib/runtime/index.js +1 -1
  149. package/lib/runtime/queue.js +1 -1
  150. package/lib/runtime/resolve.js +1 -1
  151. package/lib/skills/builtin-skill.js +1 -1
  152. package/lib/skills/npx-skills-add.js +1 -1
  153. package/lib/skills/runtime-skill-sync/constants.js +1 -1
  154. package/lib/skills/runtime-skill-sync/fs-utils.js +1 -1
  155. package/lib/skills/runtime-skill-sync/hashing.js +1 -1
  156. package/lib/skills/runtime-skill-sync/install-target.js +1 -1
  157. package/lib/skills/runtime-skill-sync/links.js +1 -1
  158. package/lib/skills/runtime-skill-sync/list-local.js +1 -1
  159. package/lib/skills/runtime-skill-sync/local-files.js +1 -1
  160. package/lib/skills/runtime-skill-sync/materialize.js +1 -1
  161. package/lib/skills/runtime-skill-sync/metadata.js +1 -1
  162. package/lib/skills/runtime-skill-sync/paths.js +1 -1
  163. package/lib/skills/runtime-skill-sync/push.js +1 -1
  164. package/lib/skills/runtime-skill-sync/scopes.js +1 -1
  165. package/lib/skills/runtime-skill-sync/types.d.ts +1 -0
  166. package/lib/skills/runtime-skill-sync/zip-codec.js +1 -1
  167. package/lib/skills/runtime-skill-sync/zip-package.js +1 -1
  168. package/lib/skills/runtime-skill-sync.js +1 -1
  169. package/lib/skills/skill-presence.js +1 -1
  170. package/lib/utils/apply-jq-filter.js +1 -1
  171. package/lib/utils/logger.js +1 -1
  172. package/lib/utils/lossless-json.js +1 -1
  173. package/lib/utils/params.js +1 -1
  174. package/lib/utils/platform.js +1 -1
  175. package/lib/utils/update-notice.js +1 -1
  176. package/lib/utils/version.js +1 -1
  177. package/lib/utils/write-cli-side-channel.js +1 -1
  178. package/package.json +1 -1
  179. package/skills/lovrabet/SKILL.md +20 -7
  180. package/skills/lovrabet/guides/role-and-permission-workflow.md +139 -0
  181. package/skills/lovrabet/references/lovrabet-auth.md +1 -5
  182. package/skills/lovrabet/references/lovrabet-notification-config-list.md +81 -0
  183. package/skills/lovrabet/references/lovrabet-skill-authoring.md +5 -4
  184. package/skills/lovrabet.manifest.json +5 -3
@@ -1 +1 @@
1
- function a129_0x37b1(_0x5a7d54,_0x252b9c){_0x5a7d54=_0x5a7d54-0x1bc;const _0x155505=a129_0x1555();let _0x37b1fc=_0x155505[_0x5a7d54];return _0x37b1fc;}const a129_0x3577e3=a129_0x37b1;function a129_0x1555(){const _0x1314e2=['addColors','readFileSync','Completed:\x20','3pldNve','error','1307052wZJlPn','30kcMSsu','trim','join','320616kWIKzC','1255270cOpYOF','parse','message','success','mkdirSync','blue','format','116156zvefwA','rawCommand','red','1944992zEEQtl','combine','log','filter','currentRawCommand','split','logTask','timestamp','initWinstonLogger','stringify','winstonLogger','green','existsSync','now','duration','setRawCommand','readLogs','command','errors','printf','clear','toISOString','142806AblTQT','Failed:\x20','setLogPath','dirname','info','3448fJqVyx','transports','logFileName','warn','File','unknown','map','Starting:\x20','207sWAZxc','clearLogs','33HIXLvg','logFilePath','writeFileSync','yellow','Failed\x20to\x20clear\x20logs:'];a129_0x1555=function(){return _0x1314e2;};return a129_0x1555();}(function(_0x3af521,_0x28cb89){const _0x3cfbc2=a129_0x37b1,_0x4d6010=_0x3af521();while(!![]){try{const _0x352172=-parseInt(_0x3cfbc2(0x1de))/0x1+parseInt(_0x3cfbc2(0x1e6))/0x2+parseInt(_0x3cfbc2(0x1d8))/0x3*(-parseInt(_0x3cfbc2(0x1da))/0x4)+parseInt(_0x3cfbc2(0x1db))/0x5*(parseInt(_0x3cfbc2(0x1c1))/0x6)+parseInt(_0x3cfbc2(0x1e9))/0x7+-parseInt(_0x3cfbc2(0x1c6))/0x8*(parseInt(_0x3cfbc2(0x1ce))/0x9)+parseInt(_0x3cfbc2(0x1df))/0xa*(parseInt(_0x3cfbc2(0x1d0))/0xb);if(_0x352172===_0x28cb89)break;else _0x4d6010['push'](_0x4d6010['shift']());}catch(_0x51cb36){_0x4d6010['push'](_0x4d6010['shift']());}}}(a129_0x1555,0x3058d));import a129_0x172cc4 from'winston';import a129_0x1fe133 from'node:fs';import a129_0x2641a9 from'node:path';import{PRODUCT_CONFIG}from'../constant/product.js';class Logger{[a129_0x3577e3(0x1f3)];[a129_0x3577e3(0x1d1)]='';[a129_0x3577e3(0x1ed)]='';constructor(){}[a129_0x3577e3(0x1f8)](_0x581012){const _0x156c2c=a129_0x3577e3;this[_0x156c2c(0x1ed)]=_0x581012;}[a129_0x3577e3(0x1c3)](_0x5b290f){const _0x103b98=a129_0x3577e3;this[_0x103b98(0x1d1)]=a129_0x2641a9[_0x103b98(0x1dd)](_0x5b290f,PRODUCT_CONFIG[_0x103b98(0x1c8)]),this[_0x103b98(0x1f3)]&&this['winstonLogger'][_0x103b98(0x1bf)](),this[_0x103b98(0x1f1)]();}[a129_0x3577e3(0x1f1)](){const _0xd2eda8=a129_0x3577e3,_0x8cf83c=a129_0x2641a9[_0xd2eda8(0x1c4)](this[_0xd2eda8(0x1d1)]);!a129_0x1fe133[_0xd2eda8(0x1f5)](_0x8cf83c)&&a129_0x1fe133[_0xd2eda8(0x1e3)](_0x8cf83c,{'recursive':!![]});const _0x28e5a8=a129_0x172cc4[_0xd2eda8(0x1e5)][_0xd2eda8(0x1ea)](a129_0x172cc4[_0xd2eda8(0x1e5)][_0xd2eda8(0x1f0)](),a129_0x172cc4[_0xd2eda8(0x1e5)][_0xd2eda8(0x1bd)]({'stack':!![]}),a129_0x172cc4['format'][_0xd2eda8(0x1be)](_0x5c3d32=>{const _0x26f56b=_0xd2eda8,_0x4a627b={'timestamp':_0x5c3d32['timestamp']||new Date()[_0x26f56b(0x1c0)](),'level':_0x5c3d32['level']||_0x26f56b(0x1c5),'command':_0x5c3d32[_0x26f56b(0x1bc)]||_0x26f56b(0x1cb),'rawCommand':_0x5c3d32[_0x26f56b(0x1e7)]||this[_0x26f56b(0x1ed)]||undefined,'message':_0x5c3d32[_0x26f56b(0x1e1)]||'','duration':_0x5c3d32[_0x26f56b(0x1f7)]||undefined,'details':_0x5c3d32['details']||undefined};return JSON[_0x26f56b(0x1f2)](_0x4a627b);}));this['winstonLogger']=a129_0x172cc4['createLogger']({'level':_0xd2eda8(0x1c5),'format':_0x28e5a8,'transports':[new a129_0x172cc4[(_0xd2eda8(0x1c7))][(_0xd2eda8(0x1ca))]({'filename':this[_0xd2eda8(0x1d1)],'level':_0xd2eda8(0x1c5)})],'silent':![]}),a129_0x172cc4[_0xd2eda8(0x1d5)]({'success':_0xd2eda8(0x1f4),'error':_0xd2eda8(0x1e8),'warn':_0xd2eda8(0x1d3),'info':_0xd2eda8(0x1e4)});}[a129_0x3577e3(0x1c5)](_0x312dfb,_0x359a30,_0x26f43a){const _0x3ba3d7=a129_0x3577e3;if(!this[_0x3ba3d7(0x1d1)]||!this[_0x3ba3d7(0x1f3)])return;this[_0x3ba3d7(0x1f3)][_0x3ba3d7(0x1c5)](_0x359a30,{'command':_0x312dfb,'details':_0x26f43a});}[a129_0x3577e3(0x1e2)](_0x517f22,_0x473c1c,_0x3e6aed,_0x3c6599){const _0xb0d38e=a129_0x3577e3;if(!this[_0xb0d38e(0x1d1)]||!this['winstonLogger'])return;this[_0xb0d38e(0x1f3)][_0xb0d38e(0x1eb)](_0xb0d38e(0x1c5),_0x473c1c,{'level':'success','command':_0x517f22,'duration':_0x3e6aed,'details':_0x3c6599});}[a129_0x3577e3(0x1d9)](_0xf39d47,_0x2d6ea0,_0x21e2b0){const _0x3762ad=a129_0x3577e3;if(!this[_0x3762ad(0x1d1)]||!this['winstonLogger'])return;this[_0x3762ad(0x1f3)][_0x3762ad(0x1d9)](_0x2d6ea0,{'command':_0xf39d47,'details':_0x21e2b0});}[a129_0x3577e3(0x1c9)](_0x470566,_0x4eb90b,_0x369259){const _0x2e3dae=a129_0x3577e3;if(!this[_0x2e3dae(0x1d1)]||!this['winstonLogger'])return;this[_0x2e3dae(0x1f3)][_0x2e3dae(0x1c9)](_0x4eb90b,{'command':_0x470566,'details':_0x369259});}async[a129_0x3577e3(0x1ef)](_0x47cf7c,_0x13577e,_0x21214b){const _0x5477b3=a129_0x3577e3,_0xd6fd08=Date[_0x5477b3(0x1f6)]();this[_0x5477b3(0x1c5)](_0x47cf7c,_0x5477b3(0x1cd)+_0x13577e);try{const _0x1d118b=await _0x21214b(),_0x39cdbf=Date['now']()-_0xd6fd08;return this['success'](_0x47cf7c,_0x5477b3(0x1d7)+_0x13577e,_0x39cdbf),_0x1d118b;}catch(_0x1e3533){const _0x37ff6e=Date[_0x5477b3(0x1f6)]()-_0xd6fd08;this['error'](_0x47cf7c,_0x5477b3(0x1c2)+_0x13577e,{'error':_0x1e3533 instanceof Error?_0x1e3533[_0x5477b3(0x1e1)]:String(_0x1e3533),'duration':_0x37ff6e});throw _0x1e3533;}}[a129_0x3577e3(0x1f9)](){const _0x1beeea=a129_0x3577e3;try{if(!a129_0x1fe133[_0x1beeea(0x1f5)](this['logFilePath']))return[];const _0x230afb=a129_0x1fe133[_0x1beeea(0x1d6)](this[_0x1beeea(0x1d1)],'utf8');return _0x230afb[_0x1beeea(0x1ee)](/\r?\n/)[_0x1beeea(0x1ec)](_0x545b95=>_0x545b95[_0x1beeea(0x1dc)]())[_0x1beeea(0x1cc)](_0x57491f=>JSON[_0x1beeea(0x1e0)](_0x57491f));}catch(_0x3ebbee){return console[_0x1beeea(0x1c9)]('Failed\x20to\x20read\x20logs:',_0x3ebbee),[];}}[a129_0x3577e3(0x1cf)](){const _0x3a0eb7=a129_0x3577e3;try{a129_0x1fe133[_0x3a0eb7(0x1f5)](this[_0x3a0eb7(0x1d1)])&&a129_0x1fe133[_0x3a0eb7(0x1d2)](this['logFilePath'],'','utf8');}catch(_0x2b83e3){console['warn'](_0x3a0eb7(0x1d4),_0x2b83e3);}}['getWinstonInstance'](){const _0x148b9b=a129_0x3577e3;return this[_0x148b9b(0x1f3)];}}export const logger=new Logger();
1
+ const a149_0x245311=a149_0x3334;function a149_0x244e(){const _0x4234b0=['dirname','yellow','currentRawCommand','setRawCommand','stringify','9616005nJVKoP','details','86382pozkTG','green','blue','duration','1070kMaloZ','readLogs','combine','utf8','parse','7630952wOUGTM','File','6SrezfP','level','warn','success','clearLogs','setLogPath','logFilePath','error','errors','Completed:\x20','logFileName','info','now','split','format','32161943irXAFF','timestamp','existsSync','rawCommand','Failed\x20to\x20read\x20logs:','readFileSync','10371pAmXlV','508BaYQcx','Failed:\x20','command','printf','initWinstonLogger','log','red','transports','filter','toISOString','message','winstonLogger','1520023iMpKgO','trim','10973011IECZGY','map','4svCLKI'];a149_0x244e=function(){return _0x4234b0;};return a149_0x244e();}(function(_0x228100,_0x2786a8){const _0x5820af=a149_0x3334,_0x300da4=_0x228100();while(!![]){try{const _0x4f371e=parseInt(_0x5820af(0x17f))/0x1+parseInt(_0x5820af(0x1ac))/0x2*(parseInt(_0x5820af(0x1ab))/0x3)+parseInt(_0x5820af(0x183))/0x4*(parseInt(_0x5820af(0x189))/0x5)+parseInt(_0x5820af(0x196))/0x6*(parseInt(_0x5820af(0x181))/0x7)+-parseInt(_0x5820af(0x194))/0x8+-parseInt(_0x5820af(0x18b))/0x9*(parseInt(_0x5820af(0x18f))/0xa)+-parseInt(_0x5820af(0x1a5))/0xb;if(_0x4f371e===_0x2786a8)break;else _0x300da4['push'](_0x300da4['shift']());}catch(_0x3c1b3b){_0x300da4['push'](_0x300da4['shift']());}}}(a149_0x244e,0xf048f));import a149_0x21501d from'winston';import a149_0xfe101 from'node:fs';import a149_0x2d1bb0 from'node:path';import{PRODUCT_CONFIG}from'../constant/product.js';function a149_0x3334(_0x19d887,_0x196880){_0x19d887=_0x19d887-0x175;const _0x244e04=a149_0x244e();let _0x333445=_0x244e04[_0x19d887];return _0x333445;}class Logger{[a149_0x245311(0x17e)];[a149_0x245311(0x19c)]='';[a149_0x245311(0x186)]='';constructor(){}[a149_0x245311(0x187)](_0x3831ac){this['currentRawCommand']=_0x3831ac;}[a149_0x245311(0x19b)](_0x4dfcc0){const _0x5d37d0=a149_0x245311;this['logFilePath']=a149_0x2d1bb0['join'](_0x4dfcc0,PRODUCT_CONFIG[_0x5d37d0(0x1a0)]),this[_0x5d37d0(0x17e)]&&this[_0x5d37d0(0x17e)]['clear'](),this[_0x5d37d0(0x177)]();}[a149_0x245311(0x177)](){const _0x284c5c=a149_0x245311,_0x280042=a149_0x2d1bb0[_0x284c5c(0x184)](this['logFilePath']);!a149_0xfe101[_0x284c5c(0x1a7)](_0x280042)&&a149_0xfe101['mkdirSync'](_0x280042,{'recursive':!![]});const _0x44a04c=a149_0x21501d[_0x284c5c(0x1a4)][_0x284c5c(0x191)](a149_0x21501d[_0x284c5c(0x1a4)]['timestamp'](),a149_0x21501d[_0x284c5c(0x1a4)][_0x284c5c(0x19e)]({'stack':!![]}),a149_0x21501d[_0x284c5c(0x1a4)][_0x284c5c(0x176)](_0x1ddbf9=>{const _0x2237be=_0x284c5c,_0x29baae={'timestamp':_0x1ddbf9[_0x2237be(0x1a6)]||new Date()[_0x2237be(0x17c)](),'level':_0x1ddbf9[_0x2237be(0x197)]||'info','command':_0x1ddbf9[_0x2237be(0x175)]||'unknown','rawCommand':_0x1ddbf9[_0x2237be(0x1a8)]||this[_0x2237be(0x186)]||undefined,'message':_0x1ddbf9[_0x2237be(0x17d)]||'','duration':_0x1ddbf9[_0x2237be(0x18e)]||undefined,'details':_0x1ddbf9[_0x2237be(0x18a)]||undefined};return JSON[_0x2237be(0x188)](_0x29baae);}));this[_0x284c5c(0x17e)]=a149_0x21501d['createLogger']({'level':_0x284c5c(0x1a1),'format':_0x44a04c,'transports':[new a149_0x21501d[(_0x284c5c(0x17a))][(_0x284c5c(0x195))]({'filename':this[_0x284c5c(0x19c)],'level':_0x284c5c(0x1a1)})],'silent':![]}),a149_0x21501d['addColors']({'success':_0x284c5c(0x18c),'error':_0x284c5c(0x179),'warn':_0x284c5c(0x185),'info':_0x284c5c(0x18d)});}[a149_0x245311(0x1a1)](_0x9a6090,_0x1e230f,_0x38d00b){const _0x3ed558=a149_0x245311;if(!this[_0x3ed558(0x19c)]||!this[_0x3ed558(0x17e)])return;this[_0x3ed558(0x17e)]['info'](_0x1e230f,{'command':_0x9a6090,'details':_0x38d00b});}[a149_0x245311(0x199)](_0x174b58,_0x334e37,_0x47466f,_0x59cf14){const _0x2b6d84=a149_0x245311;if(!this[_0x2b6d84(0x19c)]||!this[_0x2b6d84(0x17e)])return;this['winstonLogger'][_0x2b6d84(0x178)](_0x2b6d84(0x1a1),_0x334e37,{'level':'success','command':_0x174b58,'duration':_0x47466f,'details':_0x59cf14});}['error'](_0x3e92eb,_0xd29022,_0x5e1b86){const _0x158694=a149_0x245311;if(!this[_0x158694(0x19c)]||!this['winstonLogger'])return;this[_0x158694(0x17e)][_0x158694(0x19d)](_0xd29022,{'command':_0x3e92eb,'details':_0x5e1b86});}['warn'](_0x52e23e,_0x10bbc9,_0x5847b0){const _0x45bb93=a149_0x245311;if(!this[_0x45bb93(0x19c)]||!this['winstonLogger'])return;this['winstonLogger']['warn'](_0x10bbc9,{'command':_0x52e23e,'details':_0x5847b0});}async['logTask'](_0xc71f23,_0x5d11d3,_0x40b61f){const _0x14a58f=a149_0x245311,_0x52c948=Date[_0x14a58f(0x1a2)]();this[_0x14a58f(0x1a1)](_0xc71f23,'Starting:\x20'+_0x5d11d3);try{const _0x16e733=await _0x40b61f(),_0x6f35e9=Date['now']()-_0x52c948;return this[_0x14a58f(0x199)](_0xc71f23,_0x14a58f(0x19f)+_0x5d11d3,_0x6f35e9),_0x16e733;}catch(_0x5b8c3f){const _0x4936fb=Date[_0x14a58f(0x1a2)]()-_0x52c948;this['error'](_0xc71f23,_0x14a58f(0x1ad)+_0x5d11d3,{'error':_0x5b8c3f instanceof Error?_0x5b8c3f[_0x14a58f(0x17d)]:String(_0x5b8c3f),'duration':_0x4936fb});throw _0x5b8c3f;}}[a149_0x245311(0x190)](){const _0x3c5079=a149_0x245311;try{if(!a149_0xfe101[_0x3c5079(0x1a7)](this[_0x3c5079(0x19c)]))return[];const _0x1ff423=a149_0xfe101[_0x3c5079(0x1aa)](this['logFilePath'],'utf8');return _0x1ff423[_0x3c5079(0x1a3)](/\r?\n/)[_0x3c5079(0x17b)](_0x38f31c=>_0x38f31c[_0x3c5079(0x180)]())[_0x3c5079(0x182)](_0x272356=>JSON[_0x3c5079(0x193)](_0x272356));}catch(_0xe8cfec){return console['warn'](_0x3c5079(0x1a9),_0xe8cfec),[];}}[a149_0x245311(0x19a)](){const _0x872761=a149_0x245311;try{a149_0xfe101[_0x872761(0x1a7)](this[_0x872761(0x19c)])&&a149_0xfe101['writeFileSync'](this[_0x872761(0x19c)],'',_0x872761(0x192));}catch(_0xe61f52){console[_0x872761(0x198)]('Failed\x20to\x20clear\x20logs:',_0xe61f52);}}['getWinstonInstance'](){return this['winstonLogger'];}}export const logger=new Logger();
@@ -1 +1 @@
1
- function a130_0x4dca(_0x445775,_0x11d94f){_0x445775=_0x445775-0x1b2;const _0x5ed944=a130_0x5ed9();let _0x4dca1c=_0x5ed944[_0x445775];return _0x4dca1c;}(function(_0x20b642,_0x3f5103){const _0x6cdbdb=a130_0x4dca,_0xf3956f=_0x20b642();while(!![]){try{const _0x16be2a=parseInt(_0x6cdbdb(0x1c5))/0x1*(-parseInt(_0x6cdbdb(0x1b5))/0x2)+parseInt(_0x6cdbdb(0x1c3))/0x3*(-parseInt(_0x6cdbdb(0x1c4))/0x4)+-parseInt(_0x6cdbdb(0x1ba))/0x5+parseInt(_0x6cdbdb(0x1b9))/0x6+-parseInt(_0x6cdbdb(0x1b8))/0x7*(-parseInt(_0x6cdbdb(0x1bb))/0x8)+-parseInt(_0x6cdbdb(0x1b6))/0x9*(-parseInt(_0x6cdbdb(0x1c2))/0xa)+-parseInt(_0x6cdbdb(0x1bf))/0xb;if(_0x16be2a===_0x3f5103)break;else _0xf3956f['push'](_0xf3956f['shift']());}catch(_0x23b4d0){_0xf3956f['push'](_0xf3956f['shift']());}}}(a130_0x5ed9,0xabfaf));const JSON_NUMBER_PATTERN=/^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?/,MAX_SAFE_INTEGER=BigInt(Number['MAX_SAFE_INTEGER']),MIN_SAFE_INTEGER=BigInt(Number['MIN_SAFE_INTEGER']);function a130_0x5ed9(){const _0x156740=['prototype','1116951emgUcy','exec','slice','1810iPQXfV','2955ZJKDPn','2644vWStVj','5OTXMSZ','json','defineProperty','parse','82664tzSOrw','27243tnwVkc','getOwnPropertyDescriptor','336PAwrvV','1297542ZcjufM','1656455MeLICG','205144jevUHL','includes','undefined'];a130_0x5ed9=function(){return _0x156740;};return a130_0x5ed9();}let restoreResponseJsonParser,responseJsonPrototype,originalResponseJsonDescriptor;function isUnsafeIntegerLiteral(_0x1645f6){const _0xe5989c=a130_0x4dca;if(_0x1645f6[_0xe5989c(0x1bc)]('.')||_0x1645f6[_0xe5989c(0x1bc)]('e')||_0x1645f6['includes']('E'))return![];const _0x249438=BigInt(_0x1645f6);return _0x249438>MAX_SAFE_INTEGER||_0x249438<MIN_SAFE_INTEGER;}function quoteUnsafeIntegerLiterals(_0x336e07){const _0x3f707d=a130_0x4dca;let _0x23aec7='',_0x436a06=![],_0x1145bc=![];for(let _0x26e6d7=0x0;_0x26e6d7<_0x336e07['length'];){const _0x45fcb0=_0x336e07[_0x26e6d7];if(_0x436a06){_0x23aec7+=_0x45fcb0,_0x26e6d7+=0x1;if(_0x1145bc)_0x1145bc=![];else{if(_0x45fcb0==='\x5c')_0x1145bc=!![];else _0x45fcb0==='\x22'&&(_0x436a06=![]);}continue;}if(_0x45fcb0==='\x22'){_0x436a06=!![],_0x23aec7+=_0x45fcb0,_0x26e6d7+=0x1;continue;}if(_0x45fcb0==='-'||_0x45fcb0>='0'&&_0x45fcb0<='9'){const _0x5dd38c=JSON_NUMBER_PATTERN[_0x3f707d(0x1c0)](_0x336e07[_0x3f707d(0x1c1)](_0x26e6d7))?.[0x0];if(_0x5dd38c){_0x23aec7+=isUnsafeIntegerLiteral(_0x5dd38c)?'\x22'+_0x5dd38c+'\x22':_0x5dd38c,_0x26e6d7+=_0x5dd38c['length'];continue;}}_0x23aec7+=_0x45fcb0,_0x26e6d7+=0x1;}return _0x23aec7;}export function parseLosslessJson(_0x31b0fc){const _0x5263ce=a130_0x4dca;return JSON[_0x5263ce(0x1b4)](quoteUnsafeIntegerLiterals(_0x31b0fc));}export function installLosslessJsonResponseParser(){const _0x697a00=a130_0x4dca;if(typeof Response===_0x697a00(0x1bd))return()=>{};if(restoreResponseJsonParser)return restoreResponseJsonParser;return responseJsonPrototype=Response[_0x697a00(0x1be)],originalResponseJsonDescriptor=Object[_0x697a00(0x1b7)](responseJsonPrototype,_0x697a00(0x1b2)),Object['defineProperty'](responseJsonPrototype,'json',{...originalResponseJsonDescriptor??{'configurable':!![],'enumerable':![],'writable':!![]},'value':async function _0x2f1020(){return parseLosslessJson(await this['text']());}}),restoreResponseJsonParser=()=>{const _0x2269af=_0x697a00;if(!responseJsonPrototype)return;originalResponseJsonDescriptor?Object[_0x2269af(0x1b3)](responseJsonPrototype,_0x2269af(0x1b2),originalResponseJsonDescriptor):delete responseJsonPrototype[_0x2269af(0x1b2)],responseJsonPrototype=undefined,originalResponseJsonDescriptor=undefined,restoreResponseJsonParser=undefined;},restoreResponseJsonParser;}export function restoreLosslessJsonResponseParser(){restoreResponseJsonParser?.();}
1
+ function a150_0x49ac(_0x12b39c,_0x531058){_0x12b39c=_0x12b39c-0xdb;const _0x207212=a150_0x2072();let _0x49ac2f=_0x207212[_0x12b39c];return _0x49ac2f;}function a150_0x2072(){const _0x92b1ec=['exec','undefined','1086160VccluD','MIN_SAFE_INTEGER','prototype','length','defineProperty','slice','2306874FOkyNv','6582qWwizU','MAX_SAFE_INTEGER','1205OLoMEA','getOwnPropertyDescriptor','text','16OmLUrq','parse','763213QDthkn','includes','291870APMpeA','4DYeVVq','json','18Xihodb','1082908nmpZHf','3684569DflsJP'];a150_0x2072=function(){return _0x92b1ec;};return a150_0x2072();}const a150_0x52d219=a150_0x49ac;(function(_0x58ebbd,_0x61b7ca){const _0x3bd1bd=a150_0x49ac,_0x3da4ab=_0x58ebbd();while(!![]){try{const _0x50b671=-parseInt(_0x3bd1bd(0xde))/0x1+-parseInt(_0x3bd1bd(0xf2))/0x2+-parseInt(_0x3bd1bd(0xe8))/0x3*(-parseInt(_0x3bd1bd(0xdb))/0x4)+-parseInt(_0x3bd1bd(0xeb))/0x5*(-parseInt(_0x3bd1bd(0xe9))/0x6)+-parseInt(_0x3bd1bd(0xdf))/0x7*(-parseInt(_0x3bd1bd(0xee))/0x8)+-parseInt(_0x3bd1bd(0xdd))/0x9*(parseInt(_0x3bd1bd(0xe2))/0xa)+-parseInt(_0x3bd1bd(0xf0))/0xb;if(_0x50b671===_0x61b7ca)break;else _0x3da4ab['push'](_0x3da4ab['shift']());}catch(_0x181020){_0x3da4ab['push'](_0x3da4ab['shift']());}}}(a150_0x2072,0x8b4f3));const JSON_NUMBER_PATTERN=/^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?/,MAX_SAFE_INTEGER=BigInt(Number[a150_0x52d219(0xea)]),MIN_SAFE_INTEGER=BigInt(Number[a150_0x52d219(0xe3)]);let restoreResponseJsonParser,responseJsonPrototype,originalResponseJsonDescriptor;function isUnsafeIntegerLiteral(_0x3e3c90){const _0x5bac04=a150_0x52d219;if(_0x3e3c90[_0x5bac04(0xf1)]('.')||_0x3e3c90[_0x5bac04(0xf1)]('e')||_0x3e3c90[_0x5bac04(0xf1)]('E'))return![];const _0x1874fe=BigInt(_0x3e3c90);return _0x1874fe>MAX_SAFE_INTEGER||_0x1874fe<MIN_SAFE_INTEGER;}function quoteUnsafeIntegerLiterals(_0x5e19cc){const _0x34faad=a150_0x52d219;let _0x3324b5='',_0x32e7b9=![],_0x1d3af0=![];for(let _0x1cde5f=0x0;_0x1cde5f<_0x5e19cc['length'];){const _0x57f1dd=_0x5e19cc[_0x1cde5f];if(_0x32e7b9){_0x3324b5+=_0x57f1dd,_0x1cde5f+=0x1;if(_0x1d3af0)_0x1d3af0=![];else{if(_0x57f1dd==='\x5c')_0x1d3af0=!![];else _0x57f1dd==='\x22'&&(_0x32e7b9=![]);}continue;}if(_0x57f1dd==='\x22'){_0x32e7b9=!![],_0x3324b5+=_0x57f1dd,_0x1cde5f+=0x1;continue;}if(_0x57f1dd==='-'||_0x57f1dd>='0'&&_0x57f1dd<='9'){const _0x17551a=JSON_NUMBER_PATTERN[_0x34faad(0xe0)](_0x5e19cc[_0x34faad(0xe7)](_0x1cde5f))?.[0x0];if(_0x17551a){_0x3324b5+=isUnsafeIntegerLiteral(_0x17551a)?'\x22'+_0x17551a+'\x22':_0x17551a,_0x1cde5f+=_0x17551a[_0x34faad(0xe5)];continue;}}_0x3324b5+=_0x57f1dd,_0x1cde5f+=0x1;}return _0x3324b5;}export function parseLosslessJson(_0x90d041){const _0x22d96f=a150_0x52d219;return JSON[_0x22d96f(0xef)](quoteUnsafeIntegerLiterals(_0x90d041));}export function installLosslessJsonResponseParser(){const _0x470b01=a150_0x52d219;if(typeof Response===_0x470b01(0xe1))return()=>{};if(restoreResponseJsonParser)return restoreResponseJsonParser;return responseJsonPrototype=Response[_0x470b01(0xe4)],originalResponseJsonDescriptor=Object[_0x470b01(0xec)](responseJsonPrototype,_0x470b01(0xdc)),Object[_0x470b01(0xe6)](responseJsonPrototype,_0x470b01(0xdc),{...originalResponseJsonDescriptor??{'configurable':!![],'enumerable':![],'writable':!![]},'value':async function _0x39c6cb(){const _0x4adf65=_0x470b01;return parseLosslessJson(await this[_0x4adf65(0xed)]());}}),restoreResponseJsonParser=()=>{const _0x11d87c=_0x470b01;if(!responseJsonPrototype)return;originalResponseJsonDescriptor?Object[_0x11d87c(0xe6)](responseJsonPrototype,_0x11d87c(0xdc),originalResponseJsonDescriptor):delete responseJsonPrototype['json'],responseJsonPrototype=undefined,originalResponseJsonDescriptor=undefined,restoreResponseJsonParser=undefined;},restoreResponseJsonParser;}export function restoreLosslessJsonResponseParser(){restoreResponseJsonParser?.();}
@@ -1 +1 @@
1
- function a131_0x527a(){const _0x1730be=['length','Invalid\x20JSON\x20for\x20--params:\x20','4982944RKslgT','join','isSafeInteger','\x20must\x20be\x20a\x20positive\x20integer\x20or\x20numeric\x20string.','items','id[','1156458MSXPXX','\x20records\x20per\x20call;\x20received\x20','number','61092828RcvTIh','4972389CdSrfZ','map','data\x20update\x20id\x20array\x20cannot\x20be\x20empty.','data\x20update\x20--params.','validation','364zCrabK','9128bgQvfI','isArray','data\x20update\x20--params\x20must\x20be\x20a\x20JSON\x20object\x20with\x20id.','96040UxnIjO','object','string','1915546BxmLUf','7158LSsohg','test','data\x20update\x20requires\x20\x22id\x22\x20in\x20--params.','Example:\x20--params\x20\x27{\x22id\x22:[1,2,3],\x22status\x22:\x22done\x22}\x27'];a131_0x527a=function(){return _0x1730be;};return a131_0x527a();}(function(_0x4cbc5c,_0x463680){const _0x82ca=a131_0x3b3f,_0x5df818=_0x4cbc5c();while(!![]){try{const _0x2be2d9=parseInt(_0x82ca(0x1c6))/0x1+parseInt(_0x82ca(0x1d6))/0x2+parseInt(_0x82ca(0x1ca))/0x3+-parseInt(_0x82ca(0x1cf))/0x4*(-parseInt(_0x82ca(0x1d3))/0x5)+-parseInt(_0x82ca(0x1d7))/0x6*(-parseInt(_0x82ca(0x1d0))/0x7)+parseInt(_0x82ca(0x1c0))/0x8+-parseInt(_0x82ca(0x1c9))/0x9;if(_0x2be2d9===_0x463680)break;else _0x5df818['push'](_0x5df818['shift']());}catch(_0x56e00d){_0x5df818['push'](_0x5df818['shift']());}}}(a131_0x527a,0xde2f6));import{CliErrors}from'../errors.js';import{parseLosslessJson}from'../utils/lossless-json.js';export const MAX_DATA_UPDATE_IDS=0x3e8;export function parseJsonParams(_0x2588df){const _0x46c763=a131_0x3b3f;if(!_0x2588df)return undefined;try{return parseLosslessJson(_0x2588df);}catch{throw CliErrors['validation'](_0x46c763(0x1bf)+_0x2588df);}}export function parseJsonParamsValue(_0x26f86c){const _0x201bca=a131_0x3b3f;if(!_0x26f86c)return undefined;try{return parseLosslessJson(_0x26f86c);}catch{throw CliErrors[_0x201bca(0x1ce)]('Invalid\x20JSON\x20for\x20--params:\x20'+_0x26f86c);}}export function parseBatchCreateItemsFromParams(_0x12028b){const _0x24c502=a131_0x3b3f;if(Array[_0x24c502(0x1d1)](_0x12028b))return _0x12028b;if(_0x12028b!==null&&_0x12028b!==undefined&&typeof _0x12028b===_0x24c502(0x1d4)&&Array[_0x24c502(0x1d1)](_0x12028b[_0x24c502(0x1c4)]))return _0x12028b[_0x24c502(0x1c4)];throw CliErrors[_0x24c502(0x1ce)]('batchCreate\x20--params\x20must\x20be\x20a\x20JSON\x20array\x20or\x20{\x22items\x22:[...]}','Example:\x20--params\x20\x27[{\x22name\x22:\x22a\x22},{\x22name\x22:\x22b\x22}]\x27');}function parseDataUpdateId(_0x2e21e0,_0x5e16f1){const _0x2d5dda=a131_0x3b3f;if(typeof _0x2e21e0===_0x2d5dda(0x1c8)&&Number[_0x2d5dda(0x1c2)](_0x2e21e0)&&_0x2e21e0>0x0)return _0x2e21e0;if(typeof _0x2e21e0===_0x2d5dda(0x1d5)){if(/^[1-9]\d*$/[_0x2d5dda(0x1bb)](_0x2e21e0))return _0x2e21e0;}throw CliErrors[_0x2d5dda(0x1ce)](_0x2d5dda(0x1cd)+_0x5e16f1+_0x2d5dda(0x1c3));}function a131_0x3b3f(_0x565a3e,_0x1f242a){_0x565a3e=_0x565a3e-0x1bb;const _0x527aba=a131_0x527a();let _0x3b3fe5=_0x527aba[_0x565a3e];return _0x3b3fe5;}export function parseUpdateIdsFromParams(_0x1d6df8){const _0x1f6d55=a131_0x3b3f;if(_0x1d6df8===null||_0x1d6df8===undefined||typeof _0x1d6df8!==_0x1f6d55(0x1d4)||Array[_0x1f6d55(0x1d1)](_0x1d6df8))throw CliErrors['validation'](_0x1f6d55(0x1d2),_0x1f6d55(0x1bd));const _0x1b2197=_0x1d6df8['id'];if(_0x1b2197===undefined||_0x1b2197===null)throw CliErrors[_0x1f6d55(0x1ce)](_0x1f6d55(0x1bc),'Example:\x20--params\x20\x27{\x22id\x22:[1,2,3],\x22status\x22:\x22done\x22}\x27');const _0x482225=Array['isArray'](_0x1b2197)?_0x1b2197:[_0x1b2197];if(_0x482225[_0x1f6d55(0x1be)]===0x0)throw CliErrors[_0x1f6d55(0x1ce)](_0x1f6d55(0x1cc));if(_0x482225[_0x1f6d55(0x1be)]>MAX_DATA_UPDATE_IDS)throw CliErrors[_0x1f6d55(0x1ce)]('data\x20update\x20can\x20update\x20at\x20most\x20'+MAX_DATA_UPDATE_IDS+_0x1f6d55(0x1c7)+_0x482225['length']+'.');return _0x482225[_0x1f6d55(0x1cb)]((_0x41f3d8,_0x5b6809)=>parseDataUpdateId(_0x41f3d8,Array[_0x1f6d55(0x1d1)](_0x1b2197)?_0x1f6d55(0x1c5)+_0x5b6809+']':'id'));}export function normalizeUpdateParamsForRuntime(_0x41e3a0,_0x307236){const _0x24a1be=a131_0x3b3f;if(Array[_0x24a1be(0x1d1)](_0x41e3a0['id'])&&_0x307236[_0x24a1be(0x1be)]>0x1)return{..._0x41e3a0,'id':_0x307236[_0x24a1be(0x1c1)](',')};return _0x41e3a0;}
1
+ (function(_0x455dd7,_0x4ec5b2){const _0xbaf3b0=a151_0x3f0a,_0x242aaf=_0x455dd7();while(!![]){try{const _0x45710a=parseInt(_0xbaf3b0(0x1c5))/0x1*(-parseInt(_0xbaf3b0(0x1bd))/0x2)+parseInt(_0xbaf3b0(0x1ae))/0x3*(-parseInt(_0xbaf3b0(0x1a9))/0x4)+-parseInt(_0xbaf3b0(0x1b1))/0x5*(parseInt(_0xbaf3b0(0x1c4))/0x6)+parseInt(_0xbaf3b0(0x1c2))/0x7+-parseInt(_0xbaf3b0(0x1b8))/0x8+-parseInt(_0xbaf3b0(0x1b7))/0x9*(-parseInt(_0xbaf3b0(0x1c6))/0xa)+parseInt(_0xbaf3b0(0x1c1))/0xb;if(_0x45710a===_0x4ec5b2)break;else _0x242aaf['push'](_0x242aaf['shift']());}catch(_0x99ecf){_0x242aaf['push'](_0x242aaf['shift']());}}}(a151_0xc133,0xdde8c));import{CliErrors}from'../errors.js';import{parseLosslessJson}from'../utils/lossless-json.js';export const MAX_DATA_UPDATE_IDS=0x3e8;export function parseJsonParams(_0x258b8e){const _0x470a99=a151_0x3f0a;if(!_0x258b8e)return undefined;try{return parseLosslessJson(_0x258b8e);}catch{throw CliErrors[_0x470a99(0x1b6)]('Invalid\x20JSON\x20for\x20--params:\x20'+_0x258b8e);}}function a151_0xc133(){const _0x9e1af1=['20deSaod','4kAMzjP','isSafeInteger','join','items','Example:\x20--params\x20\x27{\x22id\x22:[1,2,3],\x22status\x22:\x22done\x22}\x27','3647580pQWvZQ','id[','Invalid\x20JSON\x20for\x20--params:\x20','347365sizXzY','isArray','length','map','data\x20update\x20id\x20array\x20cannot\x20be\x20empty.','validation','7433154qiHxmp','10876880nLEXxY','data\x20update\x20requires\x20\x22id\x22\x20in\x20--params.','\x20must\x20be\x20a\x20positive\x20integer\x20or\x20numeric\x20string.','data\x20update\x20--params\x20must\x20be\x20a\x20JSON\x20object\x20with\x20id.','batchCreate\x20--params\x20must\x20be\x20a\x20JSON\x20array\x20or\x20{\x22items\x22:[...]}','236WOOHOP','string','data\x20update\x20can\x20update\x20at\x20most\x20','number','47330008tOLYFC','4661370ddKhiT','data\x20update\x20--params.','156iawAPy','11269hdIOSp'];a151_0xc133=function(){return _0x9e1af1;};return a151_0xc133();}export function parseJsonParamsValue(_0x1e0586){const _0xa91258=a151_0x3f0a;if(!_0x1e0586)return undefined;try{return parseLosslessJson(_0x1e0586);}catch{throw CliErrors[_0xa91258(0x1b6)](_0xa91258(0x1b0)+_0x1e0586);}}export function parseBatchCreateItemsFromParams(_0x2fdcd8){const _0x333088=a151_0x3f0a;if(Array[_0x333088(0x1b2)](_0x2fdcd8))return _0x2fdcd8;if(_0x2fdcd8!==null&&_0x2fdcd8!==undefined&&typeof _0x2fdcd8==='object'&&Array['isArray'](_0x2fdcd8[_0x333088(0x1ac)]))return _0x2fdcd8['items'];throw CliErrors[_0x333088(0x1b6)](_0x333088(0x1bc),'Example:\x20--params\x20\x27[{\x22name\x22:\x22a\x22},{\x22name\x22:\x22b\x22}]\x27');}function parseDataUpdateId(_0x45264a,_0x5cfdcc){const _0x542623=a151_0x3f0a;if(typeof _0x45264a===_0x542623(0x1c0)&&Number[_0x542623(0x1aa)](_0x45264a)&&_0x45264a>0x0)return _0x45264a;if(typeof _0x45264a===_0x542623(0x1be)){if(/^[1-9]\d*$/['test'](_0x45264a))return _0x45264a;}throw CliErrors[_0x542623(0x1b6)](_0x542623(0x1c3)+_0x5cfdcc+_0x542623(0x1ba));}function a151_0x3f0a(_0x3f5b48,_0x158e20){_0x3f5b48=_0x3f5b48-0x1a9;const _0xc13327=a151_0xc133();let _0x3f0af2=_0xc13327[_0x3f5b48];return _0x3f0af2;}export function parseUpdateIdsFromParams(_0x3c25d8){const _0x28726f=a151_0x3f0a;if(_0x3c25d8===null||_0x3c25d8===undefined||typeof _0x3c25d8!=='object'||Array[_0x28726f(0x1b2)](_0x3c25d8))throw CliErrors[_0x28726f(0x1b6)](_0x28726f(0x1bb),_0x28726f(0x1ad));const _0x2a58f0=_0x3c25d8['id'];if(_0x2a58f0===undefined||_0x2a58f0===null)throw CliErrors[_0x28726f(0x1b6)](_0x28726f(0x1b9),_0x28726f(0x1ad));const _0x5ef876=Array[_0x28726f(0x1b2)](_0x2a58f0)?_0x2a58f0:[_0x2a58f0];if(_0x5ef876[_0x28726f(0x1b3)]===0x0)throw CliErrors['validation'](_0x28726f(0x1b5));if(_0x5ef876[_0x28726f(0x1b3)]>MAX_DATA_UPDATE_IDS)throw CliErrors[_0x28726f(0x1b6)](_0x28726f(0x1bf)+MAX_DATA_UPDATE_IDS+'\x20records\x20per\x20call;\x20received\x20'+_0x5ef876[_0x28726f(0x1b3)]+'.');return _0x5ef876[_0x28726f(0x1b4)]((_0x5e4de0,_0x4e65a2)=>parseDataUpdateId(_0x5e4de0,Array['isArray'](_0x2a58f0)?_0x28726f(0x1af)+_0x4e65a2+']':'id'));}export function normalizeUpdateParamsForRuntime(_0x59bdb2,_0x594d1b){const _0x12c9d0=a151_0x3f0a;if(Array['isArray'](_0x59bdb2['id'])&&_0x594d1b[_0x12c9d0(0x1b3)]>0x1)return{..._0x59bdb2,'id':_0x594d1b[_0x12c9d0(0x1ab)](',')};return _0x59bdb2;}
@@ -1 +1 @@
1
- const a132_0x433aa1=a132_0x2e15;(function(_0x2b0cd3,_0x323f87){const _0x3483aa=a132_0x2e15,_0x4a4444=_0x2b0cd3();while(!![]){try{const _0x2cda10=parseInt(_0x3483aa(0x148))/0x1*(parseInt(_0x3483aa(0x146))/0x2)+-parseInt(_0x3483aa(0x14c))/0x3+parseInt(_0x3483aa(0x14d))/0x4*(parseInt(_0x3483aa(0x147))/0x5)+parseInt(_0x3483aa(0x149))/0x6*(parseInt(_0x3483aa(0x144))/0x7)+parseInt(_0x3483aa(0x14b))/0x8+-parseInt(_0x3483aa(0x14f))/0x9+-parseInt(_0x3483aa(0x143))/0xa;if(_0x2cda10===_0x323f87)break;else _0x4a4444['push'](_0x4a4444['shift']());}catch(_0x57c205){_0x4a4444['push'](_0x4a4444['shift']());}}}(a132_0x5e45,0x234c6));function a132_0x5e45(){const _0x36c6e6=['1523250thpXUd','381353rrTKmX','win32','270046XxhdpP','1120295glPDed','1JwhnAX','12uXjnci','.cmd','1544904aQYziQ','341121eHqoIu','4scBiMS','platform','2254851ZZYcLw'];a132_0x5e45=function(){return _0x36c6e6;};return a132_0x5e45();}function a132_0x2e15(_0x3e1ade,_0xc1ab16){_0x3e1ade=_0x3e1ade-0x143;const _0x5e45a2=a132_0x5e45();let _0x2e1509=_0x5e45a2[_0x3e1ade];return _0x2e1509;}export const isWindows=process[a132_0x433aa1(0x14e)]===a132_0x433aa1(0x145);export function resolveNpmBin(_0x535866){const _0x52777c=a132_0x433aa1;return isWindows?_0x535866+_0x52777c(0x14a):_0x535866;}
1
+ function a152_0x1465(){const _0x509f32=['7SLGgeq','1176IzgjyU','360EMqrHa','982808UCWnmy','1460365kKjniv','win32','81632UtFGxd','11DvcJcD','platform','.cmd','1414BYaCUZ','279530jbqgBN','9810BrPFhE','1066329GBEKFY'];a152_0x1465=function(){return _0x509f32;};return a152_0x1465();}const a152_0xf0e7f5=a152_0x5bcc;function a152_0x5bcc(_0x24a622,_0x55423e){_0x24a622=_0x24a622-0xcd;const _0x14653b=a152_0x1465();let _0x5bcc4d=_0x14653b[_0x24a622];return _0x5bcc4d;}(function(_0x188e49,_0x3b3ec9){const _0x35f93a=a152_0x5bcc,_0x21aeb7=_0x188e49();while(!![]){try{const _0x464282=-parseInt(_0x35f93a(0xd4))/0x1*(-parseInt(_0x35f93a(0xda))/0x2)+-parseInt(_0x35f93a(0xd6))/0x3*(parseInt(_0x35f93a(0xd5))/0x4)+parseInt(_0x35f93a(0xd8))/0x5+-parseInt(_0x35f93a(0xd2))/0x6*(parseInt(_0x35f93a(0xd0))/0x7)+parseInt(_0x35f93a(0xd7))/0x8+-parseInt(_0x35f93a(0xd3))/0x9+parseInt(_0x35f93a(0xd1))/0xa*(-parseInt(_0x35f93a(0xcd))/0xb);if(_0x464282===_0x3b3ec9)break;else _0x21aeb7['push'](_0x21aeb7['shift']());}catch(_0x5b5dfa){_0x21aeb7['push'](_0x21aeb7['shift']());}}}(a152_0x1465,0x2e0ec));export const isWindows=process[a152_0xf0e7f5(0xce)]===a152_0xf0e7f5(0xd9);export function resolveNpmBin(_0x59c350){const _0x18f582=a152_0xf0e7f5;return isWindows?_0x59c350+_0x18f582(0xcf):_0x59c350;}
@@ -1 +1 @@
1
- function a133_0x3b78(){const _0x106e6c=['Invalid\x20semver',',\x20run:\x20','30920XvpoVw','stringify','parse','true','https://www.npmjs.com/package/','major','match','patch','json','4UwCVNp','toLowerCase','625342BBrWHj','3519402nyiRsk','6322168lDLgGN','map','5157gkiqYO','1022320fHtBZO','entries','checkedAt','/dist-tags','filter','string','\x20update','.cache','1615910yWRzGr','\x20available,\x20current\x20','object','7OiCMBr','lastNotifiedVersion','number','utf8','/v/','prerelease','fromEntries','1828665xPGSIc','minor','update-check.json','lastNotifiedAt','trim'];a133_0x3b78=function(){return _0x106e6c;};return a133_0x3b78();}(function(_0x3f408e,_0x583887){const _0x483fcd=a133_0x185b,_0x4bb5a7=_0x3f408e();while(!![]){try{const _0xfb3f02=parseInt(_0x483fcd(0x121))/0x1+parseInt(_0x483fcd(0x126))/0x2+-parseInt(_0x483fcd(0x138))/0x3*(-parseInt(_0x483fcd(0x11f))/0x4)+parseInt(_0x483fcd(0x12e))/0x5+-parseInt(_0x483fcd(0x122))/0x6+parseInt(_0x483fcd(0x131))/0x7*(parseInt(_0x483fcd(0x123))/0x8)+parseInt(_0x483fcd(0x125))/0x9*(-parseInt(_0x483fcd(0x116))/0xa);if(_0xfb3f02===_0x583887)break;else _0x4bb5a7['push'](_0x4bb5a7['shift']());}catch(_0x33b6ac){_0x4bb5a7['push'](_0x4bb5a7['shift']());}}}(a133_0x3b78,0x7a5eb));import{mkdir,readFile,writeFile}from'node:fs/promises';import{homedir}from'node:os';import{dirname,join}from'node:path';import{LOVRABET_NPM_PACKAGE_NAME,NPM_REGISTRY_BASE_URL}from'../constant/distribution.js';import{CLI_BIN_NAME}from'../constant/cli.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 a133_0x185b(_0x102e4f,_0xc1b057){_0x102e4f=_0x102e4f-0x116;const _0x3b78d2=a133_0x3b78();let _0x185b54=_0x3b78d2[_0x102e4f];return _0x185b54;}function parseSemver(_0x3df74e){const _0x2dcbcd=a133_0x185b,_0x124d63=_0x3df74e[_0x2dcbcd(0x13c)]()[_0x2dcbcd(0x11c)](/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?$/);if(!_0x124d63)return null;return{'major':Number(_0x124d63[0x1]),'minor':Number(_0x124d63[0x2]),'patch':Number(_0x124d63[0x3]),'prerelease':_0x124d63[0x4]};}function compareSemver(_0x2d1837,_0x2774e0){const _0x44c2b2=a133_0x185b,_0x36a3a9=parseSemver(_0x2d1837),_0x92e68e=parseSemver(_0x2774e0);if(!_0x36a3a9||!_0x92e68e)throw new Error(_0x44c2b2(0x13d));for(const _0x1ebcce of[_0x44c2b2(0x11b),_0x44c2b2(0x139),_0x44c2b2(0x11d)]){if(_0x36a3a9[_0x1ebcce]<_0x92e68e[_0x1ebcce])return-0x1;if(_0x36a3a9[_0x1ebcce]>_0x92e68e[_0x1ebcce])return 0x1;}if(!_0x36a3a9['prerelease']&&!_0x92e68e['prerelease'])return 0x0;if(!_0x36a3a9['prerelease'])return 0x1;if(!_0x92e68e[_0x44c2b2(0x136)])return-0x1;if(_0x36a3a9['prerelease']===_0x92e68e['prerelease'])return 0x0;return _0x36a3a9[_0x44c2b2(0x136)]<_0x92e68e[_0x44c2b2(0x136)]?-0x1:0x1;}function isUpdateNoticeDisabled(){const _0x341465=a133_0x185b,_0x1e7f27=process.env.LOVRABET_NO_UPDATE_NOTICE?.[_0x341465(0x13c)]()[_0x341465(0x120)]();return _0x1e7f27==='1'||_0x1e7f27===_0x341465(0x119)||_0x1e7f27==='yes';}function cacheRoot(){const _0x5b0082=a133_0x185b;return process.env.XDG_CACHE_HOME||process.env.LOCALAPPDATA||join(homedir(),_0x5b0082(0x12d));}export function getUpdateNoticeCachePath(){const _0x250e24=a133_0x185b;return join(cacheRoot(),'lovrabet-cli',_0x250e24(0x13a));}async function readUpdateNoticeCache(){const _0x300f91=a133_0x185b;try{const _0x38bb99=await readFile(getUpdateNoticeCachePath(),_0x300f91(0x134)),_0x4f6d2b=JSON[_0x300f91(0x118)](_0x38bb99);if(!_0x4f6d2b||typeof _0x4f6d2b!==_0x300f91(0x130))return{};return _0x4f6d2b;}catch{return{};}}async function writeUpdateNoticeCache(_0x14abc5){const _0x21d730=a133_0x185b;try{const _0x2c91b7=getUpdateNoticeCachePath();await mkdir(dirname(_0x2c91b7),{'recursive':!![]}),await writeFile(_0x2c91b7,JSON[_0x21d730(0x117)](_0x14abc5,null,0x2)+'\x0a','utf8');}catch{}}function isFreshCheck(_0xc7d1fe,_0x34db9a){const _0x52af96=a133_0x185b;return typeof _0xc7d1fe[_0x52af96(0x128)]===_0x52af96(0x133)&&_0x34db9a-_0xc7d1fe['checkedAt']<UPDATE_CHECK_TTL_MS;}function isRecentlyNotified(_0x2868db,_0x1c9b38,_0xb5c386){const _0x951f8=a133_0x185b;return _0x2868db[_0x951f8(0x132)]===_0x1c9b38&&typeof _0x2868db['lastNotifiedAt']===_0x951f8(0x133)&&_0xb5c386-_0x2868db[_0x951f8(0x13b)]<UPDATE_NOTICE_TTL_MS;}async function fetchNpmDistTags(_0x582be4=0x5dc){const _0x1b7d00=a133_0x185b;try{const _0x2d82cd=NPM_REGISTRY_BASE_URL+'/-/package/'+encodeURIComponent(LOVRABET_NPM_PACKAGE_NAME)+_0x1b7d00(0x129),_0xc77b74=await fetch(_0x2d82cd,{'signal':AbortSignal['timeout'](_0x582be4)});if(!_0xc77b74['ok'])return null;const _0x112fec=await _0xc77b74[_0x1b7d00(0x11e)]();if(!_0x112fec||typeof _0x112fec!==_0x1b7d00(0x130))return null;return Object[_0x1b7d00(0x137)](Object[_0x1b7d00(0x127)](_0x112fec)[_0x1b7d00(0x12a)](([,_0x1a680c])=>typeof _0x1a680c===_0x1b7d00(0x12b)&&_0x1a680c['trim']())[_0x1b7d00(0x124)](([_0x533f70,_0x7c6ac4])=>[_0x533f70,String(_0x7c6ac4)[_0x1b7d00(0x13c)]()]));}catch{return null;}}export function buildNpmVersionUrl(_0x45daa7){const _0x5270d3=a133_0x185b;return _0x5270d3(0x11a)+LOVRABET_NPM_PACKAGE_NAME+_0x5270d3(0x135)+_0x45daa7;}export async function resolveLatestUpdateNotice(){const _0x2a8942=a133_0x185b;if(isUpdateNoticeDisabled())return null;try{const _0x340b9e=Date['now'](),_0x58bfdf=getCliVersion(),_0x1a377f=await readUpdateNoticeCache();let _0x17738b=isFreshCheck(_0x1a377f,_0x340b9e)?_0x1a377f['latest']?.[_0x2a8942(0x13c)]():undefined;if(!_0x17738b&&!isFreshCheck(_0x1a377f,_0x340b9e)){const _0x589718=await fetchNpmDistTags();_0x17738b=_0x589718?.['latest']?.[_0x2a8942(0x13c)](),await writeUpdateNoticeCache({..._0x1a377f,'checkedAt':_0x340b9e,'latest':_0x17738b,'failed':!_0x17738b});}if(!_0x17738b||compareSemver(_0x58bfdf,_0x17738b)>=0x0)return null;if(isRecentlyNotified(_0x1a377f,_0x17738b,_0x340b9e))return null;const _0x12379b=CLI_BIN_NAME+_0x2a8942(0x12c);return await writeUpdateNoticeCache({..._0x1a377f,'checkedAt':isFreshCheck(_0x1a377f,_0x340b9e)?_0x1a377f[_0x2a8942(0x128)]:_0x340b9e,'latest':_0x17738b,'failed':![],'lastNotifiedVersion':_0x17738b,'lastNotifiedAt':_0x340b9e}),{'command':_0x12379b,'current':_0x58bfdf,'latest':_0x17738b,'url':buildNpmVersionUrl(_0x17738b),'message':CLI_BIN_NAME+'\x20'+_0x17738b+_0x2a8942(0x12f)+_0x58bfdf+_0x2a8942(0x13e)+_0x12379b};}catch{return null;}}
1
+ (function(_0x172967,_0x36c4a9){const _0x276c91=a153_0x2573,_0x2fc0c4=_0x172967();while(!![]){try{const _0x2ccbd0=-parseInt(_0x276c91(0x133))/0x1+parseInt(_0x276c91(0x131))/0x2+-parseInt(_0x276c91(0x128))/0x3*(parseInt(_0x276c91(0x11f))/0x4)+-parseInt(_0x276c91(0x12b))/0x5*(-parseInt(_0x276c91(0x145))/0x6)+parseInt(_0x276c91(0x12c))/0x7+parseInt(_0x276c91(0x147))/0x8*(-parseInt(_0x276c91(0x143))/0x9)+parseInt(_0x276c91(0x137))/0xa;if(_0x2ccbd0===_0x36c4a9)break;else _0x2fc0c4['push'](_0x2fc0c4['shift']());}catch(_0x209342){_0x2fc0c4['push'](_0x2fc0c4['shift']());}}}(a153_0x2d72,0x408ec));import{mkdir,readFile,writeFile}from'node:fs/promises';import{homedir}from'node:os';import{dirname,join}from'node:path';function a153_0x2d72(){const _0x66924f=['utf8','map',',\x20run:\x20','trim','match','1965258pfZzeR','checkedAt','66diZqcX','stringify','16IfLyou','entries','100wLzJYF','major','timeout','now','yes','Invalid\x20semver','https://www.npmjs.com/package/','object','parse','47631dHIKuL','\x20available,\x20current\x20','number','29285yaymFq','3356199xEDNaL','lastNotifiedAt','patch','json','lastNotifiedVersion','272784AgnSWV','filter','489211XcegyI','update-check.json','fromEntries','true','9070120OlnLzn','\x20update','string','prerelease','latest','minor','/-/package/'];a153_0x2d72=function(){return _0x66924f;};return a153_0x2d72();}import{LOVRABET_NPM_PACKAGE_NAME,NPM_REGISTRY_BASE_URL}from'../constant/distribution.js';import{CLI_BIN_NAME}from'../constant/cli.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 a153_0x2573(_0x43a0e6,_0x35e84d){_0x43a0e6=_0x43a0e6-0x11e;const _0x2d7284=a153_0x2d72();let _0x25730a=_0x2d7284[_0x43a0e6];return _0x25730a;}function parseSemver(_0xfe1b85){const _0x2375eb=a153_0x2573,_0x214314=_0xfe1b85[_0x2375eb(0x141)]()[_0x2375eb(0x142)](/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?$/);if(!_0x214314)return null;return{'major':Number(_0x214314[0x1]),'minor':Number(_0x214314[0x2]),'patch':Number(_0x214314[0x3]),'prerelease':_0x214314[0x4]};}function compareSemver(_0x4dcf70,_0x5f5195){const _0x68d5b=a153_0x2573,_0x3a458a=parseSemver(_0x4dcf70),_0x53e1b3=parseSemver(_0x5f5195);if(!_0x3a458a||!_0x53e1b3)throw new Error(_0x68d5b(0x124));for(const _0x2449a1 of[_0x68d5b(0x120),_0x68d5b(0x13c),_0x68d5b(0x12e)]){if(_0x3a458a[_0x2449a1]<_0x53e1b3[_0x2449a1])return-0x1;if(_0x3a458a[_0x2449a1]>_0x53e1b3[_0x2449a1])return 0x1;}if(!_0x3a458a[_0x68d5b(0x13a)]&&!_0x53e1b3['prerelease'])return 0x0;if(!_0x3a458a[_0x68d5b(0x13a)])return 0x1;if(!_0x53e1b3[_0x68d5b(0x13a)])return-0x1;if(_0x3a458a[_0x68d5b(0x13a)]===_0x53e1b3[_0x68d5b(0x13a)])return 0x0;return _0x3a458a[_0x68d5b(0x13a)]<_0x53e1b3['prerelease']?-0x1:0x1;}function isUpdateNoticeDisabled(){const _0x1f1ab3=a153_0x2573,_0x4d8812=process.env.LOVRABET_NO_UPDATE_NOTICE?.[_0x1f1ab3(0x141)]()['toLowerCase']();return _0x4d8812==='1'||_0x4d8812===_0x1f1ab3(0x136)||_0x4d8812===_0x1f1ab3(0x123);}function cacheRoot(){return process.env.XDG_CACHE_HOME||process.env.LOCALAPPDATA||join(homedir(),'.cache');}export function getUpdateNoticeCachePath(){const _0x1a8ae9=a153_0x2573;return join(cacheRoot(),'lovrabet-cli',_0x1a8ae9(0x134));}async function readUpdateNoticeCache(){const _0x583c6a=a153_0x2573;try{const _0x474072=await readFile(getUpdateNoticeCachePath(),_0x583c6a(0x13e)),_0x2d6270=JSON[_0x583c6a(0x127)](_0x474072);if(!_0x2d6270||typeof _0x2d6270!==_0x583c6a(0x126))return{};return _0x2d6270;}catch{return{};}}async function writeUpdateNoticeCache(_0x522283){const _0x1df929=a153_0x2573;try{const _0x1af118=getUpdateNoticeCachePath();await mkdir(dirname(_0x1af118),{'recursive':!![]}),await writeFile(_0x1af118,JSON[_0x1df929(0x146)](_0x522283,null,0x2)+'\x0a','utf8');}catch{}}function isFreshCheck(_0x1b66ee,_0x5efd96){const _0x3c4bf9=a153_0x2573;return typeof _0x1b66ee[_0x3c4bf9(0x144)]===_0x3c4bf9(0x12a)&&_0x5efd96-_0x1b66ee[_0x3c4bf9(0x144)]<UPDATE_CHECK_TTL_MS;}function isRecentlyNotified(_0x138ea0,_0x1613cf,_0x5c8b57){const _0x4d3a6d=a153_0x2573;return _0x138ea0[_0x4d3a6d(0x130)]===_0x1613cf&&typeof _0x138ea0[_0x4d3a6d(0x12d)]==='number'&&_0x5c8b57-_0x138ea0[_0x4d3a6d(0x12d)]<UPDATE_NOTICE_TTL_MS;}async function fetchNpmDistTags(_0x2207a5=0x5dc){const _0x494a63=a153_0x2573;try{const _0x5ee79a=NPM_REGISTRY_BASE_URL+_0x494a63(0x13d)+encodeURIComponent(LOVRABET_NPM_PACKAGE_NAME)+'/dist-tags',_0x4f481a=await fetch(_0x5ee79a,{'signal':AbortSignal[_0x494a63(0x121)](_0x2207a5)});if(!_0x4f481a['ok'])return null;const _0x369d7c=await _0x4f481a[_0x494a63(0x12f)]();if(!_0x369d7c||typeof _0x369d7c!==_0x494a63(0x126))return null;return Object[_0x494a63(0x135)](Object[_0x494a63(0x11e)](_0x369d7c)[_0x494a63(0x132)](([,_0x5c561d])=>typeof _0x5c561d===_0x494a63(0x139)&&_0x5c561d[_0x494a63(0x141)]())[_0x494a63(0x13f)](([_0x49668a,_0x298710])=>[_0x49668a,String(_0x298710)[_0x494a63(0x141)]()]));}catch{return null;}}export function buildNpmVersionUrl(_0xef13d9){const _0x54e160=a153_0x2573;return _0x54e160(0x125)+LOVRABET_NPM_PACKAGE_NAME+'/v/'+_0xef13d9;}export async function resolveLatestUpdateNotice(){const _0x23c0d9=a153_0x2573;if(isUpdateNoticeDisabled())return null;try{const _0x17ef64=Date[_0x23c0d9(0x122)](),_0x34fc71=getCliVersion(),_0x41576c=await readUpdateNoticeCache();let _0x991ce6=isFreshCheck(_0x41576c,_0x17ef64)?_0x41576c[_0x23c0d9(0x13b)]?.['trim']():undefined;if(!_0x991ce6&&!isFreshCheck(_0x41576c,_0x17ef64)){const _0x5704d5=await fetchNpmDistTags();_0x991ce6=_0x5704d5?.['latest']?.[_0x23c0d9(0x141)](),await writeUpdateNoticeCache({..._0x41576c,'checkedAt':_0x17ef64,'latest':_0x991ce6,'failed':!_0x991ce6});}if(!_0x991ce6||compareSemver(_0x34fc71,_0x991ce6)>=0x0)return null;if(isRecentlyNotified(_0x41576c,_0x991ce6,_0x17ef64))return null;const _0x55c9d3=CLI_BIN_NAME+_0x23c0d9(0x138);return await writeUpdateNoticeCache({..._0x41576c,'checkedAt':isFreshCheck(_0x41576c,_0x17ef64)?_0x41576c[_0x23c0d9(0x144)]:_0x17ef64,'latest':_0x991ce6,'failed':![],'lastNotifiedVersion':_0x991ce6,'lastNotifiedAt':_0x17ef64}),{'command':_0x55c9d3,'current':_0x34fc71,'latest':_0x991ce6,'url':buildNpmVersionUrl(_0x991ce6),'message':CLI_BIN_NAME+'\x20'+_0x991ce6+_0x23c0d9(0x129)+_0x34fc71+_0x23c0d9(0x140)+_0x55c9d3};}catch{return null;}}
@@ -1 +1 @@
1
- function a134_0x500f(){const _0x46b9ed=['8TXaWkI','6148255lLUdds','8471848nJoIqZ','1459799aSHwWK','unknown','989846zhAtTf','219368IWopuF','3612sdFMFV','6ySFuwI','7870XYJKmt','1263XpTSAa','72yANtXB','13401CaXwjv'];a134_0x500f=function(){return _0x46b9ed;};return a134_0x500f();}(function(_0x5f798e,_0x3c62a0){const _0x2909df=a134_0x83d5,_0x366da8=_0x5f798e();while(!![]){try{const _0x30bddf=-parseInt(_0x2909df(0x1d6))/0x1+parseInt(_0x2909df(0x1d7))/0x2+-parseInt(_0x2909df(0x1db))/0x3*(parseInt(_0x2909df(0x1d8))/0x4)+-parseInt(_0x2909df(0x1df))/0x5*(parseInt(_0x2909df(0x1d9))/0x6)+parseInt(_0x2909df(0x1e0))/0x7*(parseInt(_0x2909df(0x1de))/0x8)+parseInt(_0x2909df(0x1dd))/0x9*(parseInt(_0x2909df(0x1da))/0xa)+parseInt(_0x2909df(0x1e1))/0xb*(parseInt(_0x2909df(0x1dc))/0xc);if(_0x30bddf===_0x3c62a0)break;else _0x366da8['push'](_0x366da8['shift']());}catch(_0x2d6893){_0x366da8['push'](_0x366da8['shift']());}}}(a134_0x500f,0xa8101));function a134_0x83d5(_0x487911,_0x22fe8a){_0x487911=_0x487911-0x1d5;const _0x500f53=a134_0x500f();let _0x83d5be=_0x500f53[_0x487911];return _0x83d5be;}import{BUILD_TIME,GIT_COMMIT,VERSION}from'../generated/build-info.js';export function getCliVersion(){return VERSION;}export function getCliGitCommit(){const _0x314542=a134_0x83d5,_0x2aa4e9=String(GIT_COMMIT);return _0x2aa4e9&&_0x2aa4e9!==_0x314542(0x1d5)?_0x2aa4e9:'';}export function getCliVersionDisplay(){const _0x420b57=getCliGitCommit(),_0x26638a=BUILD_TIME['slice'](0x0,0xa);if(!_0x420b57||!_0x26638a)return VERSION;return VERSION+'\x20('+_0x420b57+',\x20'+_0x26638a+')';}
1
+ (function(_0x11cae4,_0x33390b){const _0x3947c1=a154_0x27f6,_0x42ad34=_0x11cae4();while(!![]){try{const _0x11d37a=parseInt(_0x3947c1(0x137))/0x1+parseInt(_0x3947c1(0x13a))/0x2+parseInt(_0x3947c1(0x139))/0x3*(-parseInt(_0x3947c1(0x138))/0x4)+parseInt(_0x3947c1(0x13d))/0x5+parseInt(_0x3947c1(0x13f))/0x6+-parseInt(_0x3947c1(0x140))/0x7+-parseInt(_0x3947c1(0x13b))/0x8;if(_0x11d37a===_0x33390b)break;else _0x42ad34['push'](_0x42ad34['shift']());}catch(_0x1b3ce5){_0x42ad34['push'](_0x42ad34['shift']());}}}(a154_0x4df3,0x551a7));function a154_0x27f6(_0x564b6d,_0x476f35){_0x564b6d=_0x564b6d-0x137;const _0x4df334=a154_0x4df3();let _0x27f674=_0x4df334[_0x564b6d];return _0x27f674;}import{BUILD_TIME,GIT_COMMIT,VERSION}from'../generated/build-info.js';function a154_0x4df3(){const _0x473a0a=['352292cTwVyp','2507164hNaknN','3BSfKRL','1057058VjaPJx','5000112ESluga','unknown','796365MhJOVZ','slice','4035882xPzicH','786471DadsCZ'];a154_0x4df3=function(){return _0x473a0a;};return a154_0x4df3();}export function getCliVersion(){return VERSION;}export function getCliGitCommit(){const _0xbb06b6=a154_0x27f6,_0x4a09aa=String(GIT_COMMIT);return _0x4a09aa&&_0x4a09aa!==_0xbb06b6(0x13c)?_0x4a09aa:'';}export function getCliVersionDisplay(){const _0x5049e9=a154_0x27f6,_0x5f0353=getCliGitCommit(),_0x3e2df2=BUILD_TIME[_0x5049e9(0x13e)](0x0,0xa);if(!_0x5f0353||!_0x3e2df2)return VERSION;return VERSION+'\x20('+_0x5f0353+',\x20'+_0x3e2df2+')';}
@@ -1 +1 @@
1
- function a135_0x4297(){var _0x62cdcc=['4330452eRRcMi','185cCojGC','86252PaaKdL','18InyzAe','146067VmjWQJ','stderr','5721450bjKZYa','5988682yvBQOt','24jviFfs','406953AxSapN','99616JlYSfv'];a135_0x4297=function(){return _0x62cdcc;};return a135_0x4297();}(function(_0x4066b1,_0x231856){var _0x14096c=a135_0x5882,_0x7a5d7f=_0x4066b1();while(!![]){try{var _0x3e0f88=-parseInt(_0x14096c(0x1ba))/0x1*(-parseInt(_0x14096c(0x1c4))/0x2)+parseInt(_0x14096c(0x1bb))/0x3+-parseInt(_0x14096c(0x1c1))/0x4*(parseInt(_0x14096c(0x1c3))/0x5)+parseInt(_0x14096c(0x1c2))/0x6+-parseInt(_0x14096c(0x1be))/0x7+parseInt(_0x14096c(0x1bf))/0x8*(parseInt(_0x14096c(0x1c0))/0x9)+parseInt(_0x14096c(0x1bd))/0xa;if(_0x3e0f88===_0x231856)break;else _0x7a5d7f['push'](_0x7a5d7f['shift']());}catch(_0x35c16b){_0x7a5d7f['push'](_0x7a5d7f['shift']());}}}(a135_0x4297,0x74951));function a135_0x5882(_0x4f43a7,_0x190f20){_0x4f43a7=_0x4f43a7-0x1ba;var _0x429718=a135_0x4297();var _0x5882ff=_0x429718[_0x4f43a7];return _0x5882ff;}export function writeCliSideChannelLine(_0x3303a9){var _0x2be6c4=a135_0x5882;process[_0x2be6c4(0x1bc)]['write'](_0x3303a9+'\x0a');}
1
+ function a155_0x5b3c(){var _0x4fee98=['2020610qgBIeh','4893588NHyAQJ','20510nIqEXy','109112MeTxsi','6193WegShb','387MHXZYp','stderr','8CbeGbA','write','2424075rKMEwm','14uYXFQr','372393wFWzEd','97392GhcRrb'];a155_0x5b3c=function(){return _0x4fee98;};return a155_0x5b3c();}function a155_0xf7b1(_0x78cb3a,_0x51a468){_0x78cb3a=_0x78cb3a-0x158;var _0x5b3c37=a155_0x5b3c();var _0xf7b15b=_0x5b3c37[_0x78cb3a];return _0xf7b15b;}(function(_0x76fedb,_0x5d0532){var _0x19bc78=a155_0xf7b1,_0x3eee71=_0x76fedb();while(!![]){try{var _0x52ead5=parseInt(_0x19bc78(0x158))/0x1*(-parseInt(_0x19bc78(0x163))/0x2)+parseInt(_0x19bc78(0x162))/0x3+-parseInt(_0x19bc78(0x160))/0x4*(parseInt(_0x19bc78(0x159))/0x5)+parseInt(_0x19bc78(0x15a))/0x6+-parseInt(_0x19bc78(0x164))/0x7+-parseInt(_0x19bc78(0x15c))/0x8*(parseInt(_0x19bc78(0x15e))/0x9)+-parseInt(_0x19bc78(0x15b))/0xa*(-parseInt(_0x19bc78(0x15d))/0xb);if(_0x52ead5===_0x5d0532)break;else _0x3eee71['push'](_0x3eee71['shift']());}catch(_0x2b828b){_0x3eee71['push'](_0x3eee71['shift']());}}}(a155_0x5b3c,0x9e5e0));export function writeCliSideChannelLine(_0x43c6f1){var _0x5e5a45=a155_0xf7b1;process[_0x5e5a45(0x15f)][_0x5e5a45(0x161)](_0x43c6f1+'\x0a');}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lovrabet/lovrabet-cli",
3
- "version": "2.2.3",
3
+ "version": "2.2.4-beta.2",
4
4
  "description": "Runtime CLI for Lovrabet apps, datasets, SQL, BFF, skills, and AI agent workflows.",
5
5
  "license": "Apache-2.0",
6
6
  "keywords": [
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  name: lovrabet
3
3
  displayName: Lovrabet 运行态 CLI
4
- version: 2.2.3
5
- description: "Lovrabet 运行态 CLI — 面向业务场景的 AI 操作套件,通过 lovrabet 命令管理应用目录、用户级外部账号、Service Tree 业务命令、API 文档发现、数据集查询、Instant API 数据操作、Custom SQL/Backend Function、personal BFF、文件上传、OCR 识别、定时任务、Skill、知识库与运行态 app-config key 状态检查。触发词:云图、lovrabet、lovrabet-cli、user-account bind、provider 外部账号绑定、钉钉 userId 绑定、service tree、业务服务树、api-doc、dataset、data filter、file upload、file query-url、ocr recognize、发票识别、图片识别、附件上传、personal-bff、schedule、定时任务、cron、kb、skill、sql exec、bff exec、app-config、accessKey、compress、jq。"
4
+ version: 2.2.4-beta.2
5
+ description: "Lovrabet 运行态 CLI — 面向业务场景的 AI 操作套件,通过 lovrabet 命令管理应用目录、业务角色与权限、用户级外部账号、Service Tree 业务命令、API 文档发现、数据集查询、Instant API 数据操作、Custom SQL/Backend Function、personal BFF、文件上传、OCR 识别、定时任务、Skill、知识库与运行态 app-config key 状态检查。触发词:云图、lovrabet、lovrabet-cli、业务角色、角色成员、页面权限、菜单权限、数据集权限、user-account bind、provider 外部账号绑定、钉钉 userId 绑定、service tree、业务服务树、api-doc、dataset、data filter、file upload、file query-url、ocr recognize、发票识别、图片识别、附件上传、personal-bff、schedule、定时任务、cron、kb、skill、sql exec、bff exec、app-config、accessKey、compress、jq。"
6
6
  metadata:
7
7
  requires:
8
8
  bins: ["lovrabet"]
@@ -12,7 +12,7 @@ metadata:
12
12
 
13
13
  # Lovrabet 运行态 CLI
14
14
 
15
- 面向业务系统运行态的 AI 操作套件。它把应用目录、数据集、Instant API 数据操作、Custom SQL、Backend Function、文件上传、OCR、定时任务和诊断能力收束成稳定命令,让业务人员、交付实施、业务运维和 AI Agent 可以从客户、订单、库存、工单、发票和附件等真实业务对象出发,完成查询、核对、执行、识别、联调和排障。
15
+ 面向业务系统运行态的 AI 操作套件。它把应用目录、业务角色与权限、数据集、Instant API 数据操作、Custom SQL、Backend Function、文件上传、OCR、定时任务和诊断能力收束成稳定命令,让业务人员、交付实施、业务运维和 AI Agent 可以从客户、订单、库存、工单、发票和附件等真实业务对象出发,完成查询、核对、执行、识别、联调和排障。
16
16
 
17
17
  它不是让团队重新学习一套后台路径,而是把企业系统里的数据、规则、接口和历史经验整理成 AI 可以理解、调用、审计和复用的业务操作入口。
18
18
 
@@ -24,6 +24,7 @@ metadata:
24
24
 
25
25
  - 流程 / 决策:
26
26
  - [应用决议](guides/app-resolution.md)
27
+ - [运行态角色与权限](guides/role-and-permission-workflow.md)
27
28
  - [数据集与数据流程](guides/dataset-and-data-workflow.md)
28
29
  - [Custom SQL 与 Backend Function 流程](guides/sql-and-bff-workflow.md)
29
30
  - [排障](guides/troubleshooting.md)
@@ -40,10 +41,9 @@ npm 包会自动安装同版本 Built-in Skill。若 `lovrabet doctor` 报告缺
40
41
 
41
42
  ## 认证
42
43
 
43
- 当前主路径是 **User Access Key(client-ak)**。优先级:**CLI flags > 环境变量 > 配置文件**。
44
+ 只支持 **User Access Key(client-ak)**。优先级:**CLI flags > 环境变量 > 配置文件**。
44
45
 
45
- 1. **User AK**:`.lovrabet.json` 或 `LOVRABET_ACCESS_KEY` 配 **`accessKey`**(适合 CI);有 `accessKey` 时走 **client-ak**
46
- 2. **Cookie**:历史兼容读取,已不是推荐主路径;新文档与 Agent 指导默认按 AK 流程处理
46
+ `.lovrabet.json` 或 `LOVRABET_ACCESS_KEY` 配置 **`accessKey`**(适合 CI);所有需要认证的运行态命令均使用该身份。
47
47
 
48
48
  详见 [认证参考](references/lovrabet-auth.md)。
49
49
 
@@ -111,6 +111,7 @@ npm 包会自动安装同版本 Built-in Skill。若 `lovrabet doctor` 报告缺
111
111
  - `dataset detail` 核对当前数据集字段、关联和操作信息。
112
112
  - `sql detail` 核对当前应用下的 Custom SQL 名称、数据库和 SQL 内容。它不单独证明业务口径、参数约束或副作用。
113
113
  - `bff detail` 按当前 `appCode + functionName` 解析运行态 Backend Function ENDPOINT,只返回名称、描述、版本和更新时间等元数据,不返回输入输出、函数类型或副作用契约。
114
+ - `notification config-list` 按当前应用和渠道类型查询应用级通知配置,只返回用于选择配置的安全身份字段和 `configCode`;它不返回渠道地址或凭证,也不证明后续通知发送已经获得授权。
114
115
  - 后续新增能力如果通过 schema、manifest、签名元数据或其他已注册入口提供可信契约,按该适配器验证,不强制仿造 `detail` 命令。
115
116
 
116
117
  参数值、执行意图和执行授权可以由用户明确提供;参数结构、输入输出和真实副作用必须来自可信业务 Skill 或平台已确认契约。技术契约无法补齐时保持未知,不自动执行。
@@ -278,6 +279,11 @@ Service Tree 未命中不是失败条件,也不代表业务能力不存在。
278
279
  | **config** | `get` | 读取配置项 | read | 本地 |
279
280
  | **config** | `set` | 写入配置项 | write | 本地 |
280
281
  | **config** | `delete` | 删除配置项 | write | 本地 |
282
+ | **role** | `list` / `detail` | 查询当前应用的业务角色 | read | AK |
283
+ | **role** | `create` / `update` / `delete` | 管理当前应用的自定义业务角色 | high-risk-write | AK |
284
+ | **role** | `user-add` / `user-remove` | 调整业务角色成员 | high-risk-write | AK |
285
+ | **permit** | `page-get` / `role-menus` / `dataset-get` | 查询页面、菜单和数据集权限 | read | AK |
286
+ | **permit** | `page-set` / `role-menus-set` / `dataset-set` | 调整页面、菜单和数据集权限 | high-risk-write | AK |
281
287
  | **service** | `validate` | 校验 Service Tree manifest 或本地 registry | read | 本地 |
282
288
  | **service** | `import` | 导入 Service Tree manifest 或 registry 到 `~/.lovrabet/service.json` | write | 本地 |
283
289
  | **service** | `export` | 从本地 registry 导出 Service Tree manifest | write | 本地 |
@@ -310,6 +316,7 @@ Service Tree 未命中不是失败条件,也不代表业务能力不存在。
310
316
  | **sql** | `exec` | 执行 Custom SQL | read | AK |
311
317
  | **bff** | `detail` | 查看 Backend Function 详情 | read | AK |
312
318
  | **bff** | `exec` | 执行 Backend Function | read | AK |
319
+ | **notification** | `config-list` | 查询当前应用的应用级通知渠道配置和 configCode | read | AK |
313
320
  | **app-config** | `get` | 按 key 获取当前应用的运行态 app-config value | read | AK |
314
321
  | **user-account** | `bind` | 按 provider 绑定当前 AccessKey 所属用户的外部账号 | write | AK |
315
322
  | **personal-bff** | `list` | 查看当前用户 personal BFF | read | AK |
@@ -422,6 +429,7 @@ Service Tree 未命中不是失败条件,也不代表业务能力不存在。
422
429
  | 执行 Custom SQL | `lovrabet sql exec --sqlcode <code> --params '{"key":"value"}'` |
423
430
  | 查看 Backend Function | `lovrabet bff detail --name <functionName>` |
424
431
  | 执行 Backend Function | `lovrabet bff exec --name <functionName> --params '{"key":"value"}'` |
432
+ | 查询应用级通知配置 | `lovrabet notification config-list [--type EMAIL|FEISHU|DINGTALK|WECOM|WEBHOOK]` |
425
433
  | 获取运行态 app-config value | `lovrabet app-config get <key>` |
426
434
  | Agent 使用 app-config value | Agent 调用 `lovrabet app-config get <key>` 获取并在当前任务中消费 |
427
435
  | 查看 personal BFF | `lovrabet personal-bff detail --id <id>` |
@@ -537,6 +545,10 @@ lovrabet data delete --code <datasetCode> --params '{"id":123}' --yes
537
545
 
538
546
  `lovrabet schedule` 用于校验、创建、查询、立即运行和删除当前应用下的 UTC 定时任务。创建前必须核对应用、执行时间、重复规则、标题、完整 prompt 和 channel;创建、立即运行和删除都先执行 `--dry-run`,取得用户明确确认后再执行。详见 [定时任务工作流](references/lovrabet-schedule-workflow.md)。
539
547
 
548
+ ## 应用级通知配置查询
549
+
550
+ `lovrabet notification config-list` 按当前应用和渠道类型查询应用级通知配置,用于获得已存在配置的 `configCode`。`--type` 默认 `EMAIL`;返回结果只用于选择配置,不发送通知,也不修改渠道。多个候选无法唯一判断时,向用户确认,不要默认取第一条。完整参数、安全输出和 `configCode` / `channelCode` 边界见 [应用级通知配置查询](references/lovrabet-notification-config-list.md)。
551
+
540
552
  ## Skill 与知识库边界
541
553
 
542
554
  `lovrabet app-config get <key>` 按当前 appCode 和 key 返回运行态 app-config value。它不支持 `--reveal`,不提供 set/delete/list 管理入口。该返回值可能包含敏感信息,不要把它写入本地配置、缓存、日志、命令参数或业务 Skill 入参。
@@ -547,7 +559,7 @@ Agent 执行 Skill 需要 app-config value 时,也调用 `lovrabet app-config
547
559
 
548
560
  `skill push` 上传前先检查 `SKILL.md` 和 frontmatter 必要字段;Agent 还必须根据本次源码直接编写 Mermaid 作用流程图并通过 `--diagram-file` 提交,不要求用户提供流程图。CLI 先在本地校验 Mermaid,再把 Skill 包和流程图放在同一次发布请求中;任一部分失败都不报告版本发布成功。历史版本补图或修图时先运行 `skill diagram-show`,只使用它本次返回的 `sourceFingerprint` 和 `expectedDiagramRevision`;`found=false` 仍必须返回版本 fingerprint,且首次写入 revision 为 `0`,不得猜测或复用旧并发参数。随后 CLI 用本地 skillCode 在当前 App namespace 下精确查询远端 Skill,并把远端 metadata 写回 `lovrabet.skill.json`,之后才进入打包上传;`skill push --scope company --dir <dir> --diagram-file <mermaid-file>` 会先做 SkillHub publish validate,再用 `visibility=NAMESPACE_ONLY` 提交审核,不代表版本已立即生效。
549
561
 
550
- frontmatter `name` 固定写稳定 `skillCode`,`displayName` 根据用户实际展示诉求填写人类可读名称并会随 push 更新远端;install 会始终物化顶层 `displayName`,缺失时 validate 会给 warning。`description` 应写模型触发语义,说明何时使用、不要使用的边界和关键词;可选的顶层 `example` 应写一句用户可直接发送的推荐触发话术,缺失或空白时 validate 只给 warning,不阻断 push。create 只生成 `displayName` 与 `example` 注释提示,不自动编造字段值。Skill 正文、章节、references、占位符、输出协议、明文凭证和外部链接不参与 CLI validate。RuntimeAgent 的 `skill_load`、`skill_update` 等原生工具不属于 CLI 命令,不要把它们写进 `lovrabet` 命令步骤。
562
+ frontmatter `name` 固定写稳定 `skillCode`,`displayName` 根据用户实际展示诉求填写人类可读名称并会随 push 更新远端;install 会始终物化顶层 `displayName`,缺失时 validate 会给 warning。`description` 应写模型触发语义,说明何时使用、不要使用的边界和关键词;可选的顶层 `example` 应从 `description` 已覆盖的应触发场景中选取一句具体、典型、用户可直接发送的诉求,不能写成“处理这个 Skill”等泛化占位话术。调用方可将它补全为 `/skillCode <example>`;`example` 只面向用户展示,不参与 Agent 隐式路由,也不包含 Skill 名、内部命令或执行步骤。缺失或空白时 validate 只给 warning,不阻断 push。create 只生成 `displayName` 与 `example` 注释提示,不自动编造字段值。Skill 正文、章节、references、占位符、输出协议、明文凭证和外部链接不参与 CLI validate。RuntimeAgent 的 `skill_load`、`skill_update` 等原生工具不属于 CLI 命令,不要把它们写进 `lovrabet` 命令步骤。
551
563
 
552
564
  用户明确要求配置业务 Skill 的 YAML frontmatter 时,按 [Skill 创建、更新与发布工作流](references/lovrabet-skill-authoring.md) 最小编辑目标 `SKILL.md`:只改用户指定字段,保持稳定 `name`,`metadata.type` 仅使用 `read | write`,不创建或开启 `metadata.internal`,并保留语义不明确的未知字段。修改后先 validate;push scope 必须来自用户明确要求,不得仅根据已安装 Skill 的现有 scope 推断 company 更新授权。company 新版本审核通过前不得声称已经生效。
553
565
 
@@ -698,6 +710,7 @@ personal KB 使用文件型 create/update。更新前先 `kb detail` 查看正
698
710
  | Instant API | [instant-api-workflow.md](references/instant-api-workflow.md) |
699
711
  | Custom SQL 工作流 | [lovrabet-sql-workflow.md](references/lovrabet-sql-workflow.md) |
700
712
  | Backend Function 工作流 | [lovrabet-bff-workflow.md](references/lovrabet-bff-workflow.md) |
713
+ | 应用级通知配置查询 | [lovrabet-notification-config-list.md](references/lovrabet-notification-config-list.md) |
701
714
  | app-config value 查询 | [lovrabet-app-config.md](references/lovrabet-app-config.md) |
702
715
  | 用户级外部账号绑定 | [lovrabet-user-account.md](references/lovrabet-user-account.md) |
703
716
  | 文件上传工作流 | [lovrabet-file-workflow.md](references/lovrabet-file-workflow.md) |
@@ -0,0 +1,139 @@
1
+ # 运行态角色与权限
2
+
3
+ 用于管理业务人员的角色、角色成员,以及页面、菜单和数据集权限。
4
+
5
+ 只在目标应用、角色、人员和资源都能唯一确认时执行写入。推荐顺序是:**先读取,再预览,最后确认写入**。
6
+
7
+ ## 开始前
8
+
9
+ 1. 使用明确的 `--appcode <code>`、`--app <name>` 或已经确认的当前应用。
10
+ 2. 使用 `lovrabet role list` 获取真实角色 ID 和类型。
11
+ 3. 写操作先加 `--dry-run` 检查目标和变更内容。
12
+ 4. 只有用户明确授权后才去掉 `--dry-run` 并加 `--yes`。
13
+
14
+ 角色名称可能重复。命令接受角色名称时,如果不能唯一匹配,应改用角色 ID。
15
+
16
+ ## 角色
17
+
18
+ ### 查询角色
19
+
20
+ ```bash
21
+ lovrabet role list --format compress
22
+ lovrabet role list --type CUSTOM --name 销售 --format compress
23
+ lovrabet role detail --id <roleId> --format compress
24
+ ```
25
+
26
+ `role list` 返回内置角色和自定义角色。`builtin=true` 表示不能通过角色更新或删除命令修改。
27
+
28
+ ### 创建和修改自定义角色
29
+
30
+ ```bash
31
+ lovrabet role create --name <roleName> --remark <remark> --dry-run --format compress
32
+ lovrabet role create --name <roleName> --remark <remark> --yes --format compress
33
+
34
+ lovrabet role update --id <roleId> --name <newName> --dry-run --format compress
35
+ lovrabet role update --id <roleId> --remark <newRemark> --yes --format compress
36
+
37
+ lovrabet role delete --id <roleId> --dry-run --format compress
38
+ lovrabet role delete --id <roleId> --yes --format compress
39
+ ```
40
+
41
+ - 只能创建、更新和删除 CUSTOM 角色。
42
+ - 备注只能设置为非空内容,不能用空字符串清除。
43
+ - 删除可能影响已有成员和权限;必须先确认角色确实不再使用。
44
+
45
+ ## 角色成员
46
+
47
+ ```bash
48
+ lovrabet role user-add --role <roleId|exactName> --user <userId> --expect-user-count <count> --dry-run --format compress
49
+ lovrabet role user-add --role <roleId|exactName> --user <userId> --expect-user-count <count> --yes --format compress
50
+
51
+ lovrabet role user-remove --role <roleId|exactName> --user <userId> --expect-user-count <count> --dry-run --format compress
52
+ lovrabet role user-remove --role <roleId|exactName> --user <userId> --expect-user-count <count> --yes --format compress
53
+ ```
54
+
55
+ - `--user` 使用数字用户 ID;添加时该人员必须已经属于目标应用。
56
+ - `--expect-user-count` 用于防止读取后成员数量已变化,建议每次写入都提供。
57
+ - 重复添加已有成员或移出不存在的成员不会重复写入。
58
+ - OWNER 成员不能用这些命令调整。
59
+ - 如果人员身份不明确,停止写入并要求用户确认数字用户 ID。
60
+
61
+ ## 页面权限
62
+
63
+ 先读取页面权限:
64
+
65
+ ```bash
66
+ lovrabet permit page-get --menu-id <menuId> --format compress
67
+ ```
68
+
69
+ 只设置明确指定的权限槽位,其他槽位保持不变:
70
+
71
+ ```bash
72
+ lovrabet permit page-set --menu-id <menuId> --menu-roles <roleIdsOrNames> --dry-run --format compress
73
+ lovrabet permit page-set --menu-id <menuId> --row-roles SELF --yes --format compress
74
+ ```
75
+
76
+ 可用参数:
77
+
78
+ - `--menu-roles`
79
+ - `--create-roles`
80
+ - `--update-roles`
81
+ - `--delete-roles`
82
+ - `--detail-roles`
83
+ - `--export-roles`
84
+ - `--row-roles`
85
+
86
+ 多个角色用英文逗号分隔。`SELF` 只用于 `--row-roles`。
87
+
88
+ ## 菜单权限
89
+
90
+ 查看一个角色的菜单访问结果:
91
+
92
+ ```bash
93
+ lovrabet permit role-menus --role <roleId|exactName> --format compress
94
+ ```
95
+
96
+ 授权或撤权:
97
+
98
+ ```bash
99
+ lovrabet permit role-menus-set --role <roleId|exactName> --grant --menus <menuIds> --dry-run --format compress
100
+ lovrabet permit role-menus-set --role <roleId|exactName> --revoke --menus <menuIds> --yes --format compress
101
+ ```
102
+
103
+ `--grant` 与 `--revoke` 必须且只能选择一个。多个菜单 ID 用英文逗号分隔。
104
+
105
+ ## 数据集权限
106
+
107
+ 查看一个角色的数据集权限:
108
+
109
+ ```bash
110
+ lovrabet permit dataset-get --role <roleId|exactName> --format compress
111
+ ```
112
+
113
+ 授权或撤权:
114
+
115
+ ```bash
116
+ lovrabet permit dataset-set --role <roleId|exactName> --grant --datasets <datasetCodes> --actions <actions> --dry-run --format compress
117
+ lovrabet permit dataset-set --role <roleId|exactName> --revoke --datasets <datasetCodes> --actions <actions> --yes --format compress
118
+ ```
119
+
120
+ 动作值:
121
+
122
+ - `DATA_CREATE`
123
+ - `DATA_UPDATE`
124
+ - `DATA_DELETE`
125
+ - `DATA_DETAIL`
126
+ - `DATA_EXPORT`
127
+ - `DATA_ROW`
128
+
129
+ 多个数据集或动作使用英文逗号分隔。
130
+
131
+ ## 安全边界
132
+
133
+ - 只有 ADMIN 或 OWNER 可以执行页面、菜单和数据集权限写入。
134
+ - ADMIN 和 OWNER 拥有完整运行权限,不作为页面、菜单或数据集权限调整目标。
135
+ - 权限设置只修改显式选择的页面槽位、菜单或数据集动作。
136
+ - 菜单或数据集权限不能撤销最后一个角色;需要先为另一个角色授权,再执行撤权。
137
+ - dry-run 只预览请求,不代表已经获得授权,也不代表变更已经生效。
138
+ - 写入后重新执行对应读取命令,核对角色、成员或权限结果。
139
+ - 遇到权限不足、目标不存在、成员数量变化或候选不唯一时停止,不更换身份、不猜测目标。
@@ -1,6 +1,6 @@
1
1
  # auth — 认证管理
2
2
 
3
- 当前推荐的认证路径是 **User Access Key(client-ak)**。
3
+ Lovrabet CLI 只使用 User Access Key(client-ak)认证。
4
4
 
5
5
  ## auth login — 保存 accessKey
6
6
 
@@ -126,10 +126,6 @@ CLI flag (--access-key)
126
126
 
127
127
  `auth login` / `auth init` 本身都不会主动把应用目录写进 `.lovrabet.json`。
128
128
 
129
- ## Cookie
130
-
131
- Cookie 仍保留历史兼容读取,但不再是推荐主路径。新的 Agent 指导和用户文档应默认使用 AK 流程。
132
-
133
129
  ## 参考
134
130
 
135
131
  - [SKILL.md](../SKILL.md)
@@ -0,0 +1,81 @@
1
+ # lovrabet notification config-list
2
+
3
+ 只读查询当前应用的应用级通知渠道配置,主要用于获得已存在通知配置的 `configCode`。
4
+
5
+ ## 命令
6
+
7
+ ```bash
8
+ lovrabet notification config-list --format compress
9
+ lovrabet notification config-list --type EMAIL --format compress
10
+ lovrabet notification config-list --type EMAIL --appcode <appCode> --format json
11
+ ```
12
+
13
+ `--type` 默认 `EMAIL`,支持:
14
+
15
+ - `EMAIL`
16
+ - `FEISHU`
17
+ - `DINGTALK`
18
+ - `WECOM`
19
+ - `WEBHOOK`
20
+
21
+ 类型值使用大写。完整参数写法为 `--type EMAIL|FEISHU|DINGTALK|WECOM|WEBHOOK`。
22
+
23
+ ## 安全输出
24
+
25
+ 每个配置项只返回用于识别和选择配置的字段:
26
+
27
+ - `id`
28
+ - `configCode`
29
+ - `configName`
30
+ - `channelType`
31
+ - `description`
32
+ - `createTime`
33
+ - `updateTime`
34
+
35
+ 该命令不会输出 `endpointUrl`、`channelConfig`、SMTP 用户名或密码、token、secret、连接超时和人员身份审计字段。若任一配置缺少可用的 `configCode`、`configName` 或 `channelType`,命令返回错误,不把残缺记录包装成成功结果。
36
+
37
+ 示例输出:
38
+
39
+ ```json
40
+ {
41
+ "ok": true,
42
+ "data": {
43
+ "appCode": "app-xxxxx",
44
+ "channelType": "EMAIL",
45
+ "count": 1,
46
+ "configs": [
47
+ {
48
+ "id": 7,
49
+ "configCode": "ncc_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
50
+ "configName": "官方邮件",
51
+ "channelType": "EMAIL",
52
+ "description": "业务通知邮件",
53
+ "createTime": "2026-07-01T00:00:00Z",
54
+ "updateTime": "2026-07-02T00:00:00Z"
55
+ }
56
+ ]
57
+ },
58
+ "message": "Found 1 EMAIL notification config(s)"
59
+ }
60
+ ```
61
+
62
+ ## 选择与消费边界
63
+
64
+ - `configCode` 是应用级通知渠道配置编码,可供已确认契约的通知型 Backend Function 使用。
65
+ - dataset 级通知通道的 `channelCode` 不能替代应用级 `configCode`。
66
+ - 没有结果时,不要猜测或从其他应用复制配置编码。
67
+ - 多个候选能够根据用户明确给出的配置名称或用途唯一匹配时,使用该项;多个候选仍无法判断时,向用户确认,不要默认取第一条。
68
+ - 查询结果不代表已经授权发送通知。发送前仍须确认目标应用、Backend Function 契约、`configCode`、接收对象、消息摘要和真实外发副作用。
69
+ - 该命令不会发送通知,也不会创建、更新或删除平台配置。
70
+
71
+ ## 失败处理
72
+
73
+ - AccessKey 无效或无权访问目标应用时,先用 `lovrabet auth info` 核对当前身份,再确认应用权限。
74
+ - 应用不明确时,显式传入 `--app` 或 `--appcode`;不要修改本地配置来抬高权限或切换到未经授权的应用。
75
+ - 渠道类型不支持时,使用上面列出的五种大写值之一。
76
+ - 查询失败时保持 `configCode` 未知,不继续执行依赖该编码的通知发送。
77
+
78
+ ## 参考
79
+
80
+ - [Backend Function 工作流](lovrabet-bff-workflow.md)
81
+ - [输出格式与 --jq](lovrabet-output-format-jq.md)
@@ -11,7 +11,8 @@
11
11
  - `lovrabet.skill.json` 必须位于 Skill 目录根部。
12
12
  - 需要较长规则、schema、示例或脚本时,放入 `references/`、`scripts/` 或 `assets/`,并在 `SKILL.md` 中说明读取时机。
13
13
  - `SKILL.md` frontmatter 中 `name` 固定写稳定 `skillCode`,不要写展示文案;面向用户的业务展示名写顶层 `displayName`,即使展示名暂时等于 `skillCode` 也应显式保留。
14
- - 顶层 `example` 是一条用户可以直接发送、用于触发该 Skill 的推荐话术,例如 `example: 上传这份产品资料`。
14
+ - 顶层 `example` 是一条用户可以直接发送的推荐话术;调用方可展示或填入 `/skillCode <example>`,但它不参与 Agent 隐式路由。
15
+ - `example` 必须从 `description` 已覆盖的应触发场景中选取一个具体、典型诉求,并保留该场景的关键业务对象或变量,例如产品资料 Skill 可写 `example: 校验并导入这份产品资料`;不要写“处理这个业务 Skill”等与能力无关的泛化占位句。
15
16
  - `example` 可选;缺失、空白或不是单个标量时,`lovrabet skill validate` 会给出 warning,但不阻断 push。
16
17
  - 不要把正文说明、内部 CLI 命令、执行步骤或多个示例写入 `example`,也不要自动生成该字段。
17
18
 
@@ -19,7 +20,7 @@
19
20
 
20
21
  用户 Prompt 只表达本次任务相对于稳定契约发生变化的目标、对象、范围等变量;稳定规则、执行步骤、能力标识、输出契约、安全边界和降级策略由业务 Skill 承载,不要求用户重复输入。
21
22
 
22
- - `example`:一句用户可直接发送的最简典型诉求。
23
+ - `example`:从 `description` 的应触发场景中抽取的一句最简典型诉求,仅用于用户可见的调用提示。
23
24
  - `description`:说明触发语义以及何时使用或不使用。
24
25
  - `SKILL.md` 与其明确引用的 `references/`:承载完整稳定契约。
25
26
 
@@ -35,7 +36,7 @@ lovrabet skill push --dir .agents/skills/<skillCode> --diagram-file ./<skillCode
35
36
 
36
37
  业务 Skill 模板类型仅支持 `read | write`。Agent 必须根据业务目标显式传入 `--type`;无法判断是否存在业务副作用时,停止并请求澄清。仅查询、汇总或核对且不改变业务状态时选择 `read`;涉及创建、更新、删除、状态流转、发送、发布或上传等业务副作用时选择 `write`,并在 Skill 契约中定义预览、用户确认、正式执行、读回核对和失败恢复。
37
38
 
38
- `displayName` 是给人看的展示名,`description` 是触发依据,要说明 Skill 做什么、什么时候使用、什么时候不要使用;`example` 则是一句推荐给用户直接发送的最简触发话术。
39
+ `displayName` 是给人看的展示名,`description` 是触发依据,要说明 Skill 做什么、什么时候使用、什么时候不要使用;`example` 则是与其中一个应触发场景强相关、推荐给用户直接发送的最简典型话术,不承担触发判断。
39
40
 
40
41
  ## 更新
41
42
 
@@ -58,7 +59,7 @@ lovrabet skill push --dir .agents/skills/<skillCode> --diagram-file ./<skillCode
58
59
  - 只修改用户明确指定的字段,保留其他字段和 Markdown 正文。
59
60
  - `name` 是稳定 `skillCode`,普通配置任务不得修改。
60
61
  - `displayName` 根据用户实际展示诉求填写人类可读名称。
61
- - `example` 写一句用户可直接发送的最简触发话术。
62
+ - `example` 从 `description` 已覆盖的应触发场景中选一句具体、典型、用户可直接发送的话术。
62
63
  - `metadata.type` 只能是 `read` 或 `write`。
63
64
  - 不创建或开启 `metadata.internal`;未知字段默认保留,语义不明确时不修改。
64
65