@lovrabet/lovrabet-cli 2.3.4-beta.1 → 2.3.4

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/README.md +8 -6
  2. package/lib/cli.js +1 -1
  3. package/lib/commands/api-doc/index.js +1 -1
  4. package/lib/commands/app/cache.js +1 -1
  5. package/lib/commands/app/definitions.js +1 -1
  6. package/lib/commands/app/eligibility.js +1 -1
  7. package/lib/commands/app/mock-loader.js +1 -1
  8. package/lib/commands/app/remote-source.js +1 -1
  9. package/lib/commands/app/shared.js +1 -1
  10. package/lib/commands/app-config/get.js +1 -1
  11. package/lib/commands/app-config/index.js +1 -1
  12. package/lib/commands/approval/index.js +1 -1
  13. package/lib/commands/artifact/index.js +1 -1
  14. package/lib/commands/auth/device.js +1 -1
  15. package/lib/commands/auth/index.js +1 -1
  16. package/lib/commands/auth/prompt.js +1 -1
  17. package/lib/commands/bff/detail.js +1 -1
  18. package/lib/commands/bff/exec.js +1 -1
  19. package/lib/commands/bff/index.js +1 -1
  20. package/lib/commands/cli-skill/index.js +1 -1
  21. package/lib/commands/common/config-policy.js +1 -1
  22. package/lib/commands/common/constraints.js +1 -1
  23. package/lib/commands/common/flags.js +1 -1
  24. package/lib/commands/common/local-file.js +1 -1
  25. package/lib/commands/config/definitions.js +1 -1
  26. package/lib/commands/config/init.d.ts +1 -1
  27. package/lib/commands/config/init.js +1 -1
  28. package/lib/commands/config/shared.js +1 -1
  29. package/lib/commands/data/index.js +1 -1
  30. package/lib/commands/dataset/detail.js +1 -1
  31. package/lib/commands/dataset/index.js +1 -1
  32. package/lib/commands/dataset/list.js +1 -1
  33. package/lib/commands/dataset/sdk-doc.js +1 -1
  34. package/lib/commands/doctor.js +1 -1
  35. package/lib/commands/file/index.js +1 -1
  36. package/lib/commands/init.js +1 -1
  37. package/lib/commands/kb/index.js +1 -1
  38. package/lib/commands/logs/index.js +1 -1
  39. package/lib/commands/notification/config-list.js +1 -1
  40. package/lib/commands/notification/index.js +1 -1
  41. package/lib/commands/notification/shared.js +1 -1
  42. package/lib/commands/ocr/index.js +1 -1
  43. package/lib/commands/permit/dataset-get.js +1 -1
  44. package/lib/commands/permit/dataset-set.js +1 -1
  45. package/lib/commands/permit/index.js +1 -1
  46. package/lib/commands/permit/page-get.js +1 -1
  47. package/lib/commands/permit/page-set.js +1 -1
  48. package/lib/commands/permit/role-menus-set.js +1 -1
  49. package/lib/commands/permit/role-menus.js +1 -1
  50. package/lib/commands/permit/shared.js +1 -1
  51. package/lib/commands/personal-bff/index.js +1 -1
  52. package/lib/commands/registry.js +1 -1
  53. package/lib/commands/role/create.js +1 -1
  54. package/lib/commands/role/delete.js +1 -1
  55. package/lib/commands/role/detail.js +1 -1
  56. package/lib/commands/role/index.js +1 -1
  57. package/lib/commands/role/list.js +1 -1
  58. package/lib/commands/role/shared.js +1 -1
  59. package/lib/commands/role/update.js +1 -1
  60. package/lib/commands/role/user-add.js +1 -1
  61. package/lib/commands/role/user-remove.js +1 -1
  62. package/lib/commands/schedule/index.js +1 -1
  63. package/lib/commands/schema.js +1 -1
  64. package/lib/commands/service/dynamic.js +1 -1
  65. package/lib/commands/service/function-name-adapter.js +1 -1
  66. package/lib/commands/service/index.js +1 -1
  67. package/lib/commands/service/registry.js +1 -1
  68. package/lib/commands/skill/commands/create.js +1 -1
  69. package/lib/commands/skill/commands/diagram.js +1 -1
  70. package/lib/commands/skill/commands/install.js +1 -1
  71. package/lib/commands/skill/commands/list.js +1 -1
  72. package/lib/commands/skill/commands/push.js +1 -1
  73. package/lib/commands/skill/commands/validate.js +1 -1
  74. package/lib/commands/skill/diagram.js +1 -1
  75. package/lib/commands/skill/flags.js +1 -1
  76. package/lib/commands/skill/index.js +1 -1
  77. package/lib/commands/skill/manifest-helpers.js +1 -1
  78. package/lib/commands/skill/push-execute.js +1 -1
  79. package/lib/commands/skill/push-flow-helpers.js +1 -1
  80. package/lib/commands/skill/push-retarget.js +1 -1
  81. package/lib/commands/skill/scopes.js +1 -1
  82. package/lib/commands/skill/summary.js +1 -1
  83. package/lib/commands/skill/templates.js +1 -1
  84. package/lib/commands/skill/validate.js +1 -1
  85. package/lib/commands/sql/detail.js +1 -1
  86. package/lib/commands/sql/exec.js +1 -1
  87. package/lib/commands/sql/index.js +1 -1
  88. package/lib/commands/update.js +1 -1
  89. package/lib/commands/user-account/bind.js +1 -1
  90. package/lib/commands/user-account/index.js +1 -1
  91. package/lib/commands/workspace/index.js +1 -1
  92. package/lib/config/domain-config.d.ts +2 -2
  93. package/lib/config/domain-config.js +1 -1
  94. package/lib/config/schema.d.ts +1 -1
  95. package/lib/config/schema.js +1 -1
  96. package/lib/constant/app.js +1 -1
  97. package/lib/constant/auth-mode.js +1 -1
  98. package/lib/constant/cli.js +1 -1
  99. package/lib/constant/defaults.js +1 -1
  100. package/lib/constant/distribution.js +1 -1
  101. package/lib/constant/domain.d.ts +4 -0
  102. package/lib/constant/domain.js +1 -1
  103. package/lib/constant/env.js +1 -1
  104. package/lib/constant/output.js +1 -1
  105. package/lib/constant/product.js +1 -1
  106. package/lib/constant/region.d.ts +1 -1
  107. package/lib/constant/region.js +1 -1
  108. package/lib/constant/risk.js +1 -1
  109. package/lib/constant/url.js +1 -1
  110. package/lib/context.js +1 -1
  111. package/lib/core/api-client.js +1 -1
  112. package/lib/core/db-resolver.js +1 -1
  113. package/lib/core/kb-search-client.js +1 -1
  114. package/lib/core/sdk-client.js +1 -1
  115. package/lib/errors.js +1 -1
  116. package/lib/framework/build-all-flags.js +1 -1
  117. package/lib/framework/dryrun.js +1 -1
  118. package/lib/framework/flags.js +1 -1
  119. package/lib/framework/help.js +1 -1
  120. package/lib/framework/index.js +1 -1
  121. package/lib/framework/output.js +1 -1
  122. package/lib/framework/preparse.js +1 -1
  123. package/lib/framework/rate-limit.js +1 -1
  124. package/lib/framework/raw-flags.js +1 -1
  125. package/lib/framework/response.js +1 -1
  126. package/lib/framework/runner-confirmation.js +1 -1
  127. package/lib/framework/runner-error.js +1 -1
  128. package/lib/framework/runner.js +1 -1
  129. package/lib/framework/schema-export.js +1 -1
  130. package/lib/framework/service-order.js +1 -1
  131. package/lib/framework/types.js +1 -1
  132. package/lib/generated/build-info.d.ts +4 -4
  133. package/lib/generated/build-info.js +1 -1
  134. package/lib/generated/official-routing.d.ts +12 -3
  135. package/lib/generated/official-routing.js +1 -1
  136. package/lib/generated/routing-contract.d.ts +2 -2
  137. package/lib/generated/routing-contract.js +1 -1
  138. package/lib/help.js +1 -1
  139. package/lib/postinstall.js +1 -1
  140. package/lib/runtime/confirmation.js +1 -1
  141. package/lib/runtime/event.js +1 -1
  142. package/lib/runtime/index.js +1 -1
  143. package/lib/runtime/queue.js +1 -1
  144. package/lib/runtime/resolve.js +1 -1
  145. package/lib/skills/builtin-skill.js +1 -1
  146. package/lib/skills/npx-skills-add.d.ts +5 -0
  147. package/lib/skills/npx-skills-add.js +1 -1
  148. package/lib/skills/runtime-skill-sync/constants.js +1 -1
  149. package/lib/skills/runtime-skill-sync/fs-utils.js +1 -1
  150. package/lib/skills/runtime-skill-sync/hashing.js +1 -1
  151. package/lib/skills/runtime-skill-sync/install-target.js +1 -1
  152. package/lib/skills/runtime-skill-sync/links.js +1 -1
  153. package/lib/skills/runtime-skill-sync/list-local.js +1 -1
  154. package/lib/skills/runtime-skill-sync/local-files.js +1 -1
  155. package/lib/skills/runtime-skill-sync/materialize.js +1 -1
  156. package/lib/skills/runtime-skill-sync/metadata.js +1 -1
  157. package/lib/skills/runtime-skill-sync/paths.js +1 -1
  158. package/lib/skills/runtime-skill-sync/push.js +1 -1
  159. package/lib/skills/runtime-skill-sync/scopes.js +1 -1
  160. package/lib/skills/runtime-skill-sync/zip-codec.js +1 -1
  161. package/lib/skills/runtime-skill-sync/zip-package.js +1 -1
  162. package/lib/skills/runtime-skill-sync.js +1 -1
  163. package/lib/skills/skill-presence.js +1 -1
  164. package/lib/utils/access-key-redaction.js +1 -1
  165. package/lib/utils/apply-jq-filter.js +1 -1
  166. package/lib/utils/cli-version-check.js +1 -1
  167. package/lib/utils/cli-version-policy.js +1 -1
  168. package/lib/utils/logger.js +1 -1
  169. package/lib/utils/lossless-json.js +1 -1
  170. package/lib/utils/params.js +1 -1
  171. package/lib/utils/positive-safe-integer.js +1 -1
  172. package/lib/utils/redaction.js +1 -1
  173. package/lib/utils/update-notice.js +1 -1
  174. package/lib/utils/version.js +1 -1
  175. package/lib/utils/write-cli-side-channel.js +1 -1
  176. package/package.json +1 -1
  177. package/skills/lovrabet/SKILL.md +2 -2
  178. package/skills/lovrabet/guides/troubleshooting.md +1 -1
  179. package/skills/lovrabet/references/lovrabet-config-commands.md +8 -7
  180. package/skills/lovrabet/references/lovrabet-config.md +3 -2
  181. package/skills/lovrabet/references/lovrabet-doctor.md +1 -1
  182. package/skills/lovrabet/references/lovrabet-kb-workflow.md +8 -6
  183. package/skills/lovrabet/references/lovrabet-service-tree.md +1 -1
  184. package/skills/lovrabet.manifest.json +3 -3
@@ -1 +1 @@
1
- function a163_0x2e9b(){const _0x825b61=['1969780voPYIN','entries','28067445AjdzWa','push','1781358vwxGBQ','variables','match','replace','3299645IZZWDT','fromEntries','isArray','map','584tdxdNZ','2789PxZkIQ','comment','49191meIdTQ','20392kLPzlU','has','[REDACTED]','toLowerCase','object','1246lToyaE','test'];a163_0x2e9b=function(){return _0x825b61;};return a163_0x2e9b();}const a163_0x4721bd=a163_0xfa5f;(function(_0x3932d1,_0xbd46f8){const _0x482a6e=a163_0xfa5f,_0xf800c2=_0x3932d1();while(!![]){try{const _0x363110=parseInt(_0x482a6e(0xfc))/0x1*(-parseInt(_0x482a6e(0xfb))/0x2)+parseInt(_0x482a6e(0xfe))/0x3+-parseInt(_0x482a6e(0x106))/0x4+-parseInt(_0x482a6e(0xf7))/0x5+-parseInt(_0x482a6e(0x10a))/0x6+parseInt(_0x482a6e(0x104))/0x7*(-parseInt(_0x482a6e(0xff))/0x8)+parseInt(_0x482a6e(0x108))/0x9;if(_0x363110===_0xbd46f8)break;else _0xf800c2['push'](_0xf800c2['shift']());}catch(_0x2c6017){_0xf800c2['push'](_0xf800c2['shift']());}}}(a163_0x2e9b,0x65f59));const REDACTED_VALUE=a163_0x4721bd(0x101),SENSITIVE_KEY_PATTERN=/(?:access.?key|api.?key|authorization|cookie|credential|password|passwd|private.?key|secret|token|webhook)/i,SENSITIVE_FLAG_NAMES=new Set([a163_0x4721bd(0xfd),a163_0x4721bd(0x10b)]),SENSITIVE_VALUE_KEYS=new Set([a163_0x4721bd(0xfd)]);export function isSensitiveKey(_0x48b6be){const _0x231b10=a163_0x4721bd,_0xf47cca=_0x48b6be['replace'](/_/g,'-')[_0x231b10(0x102)]();return SENSITIVE_KEY_PATTERN[_0x231b10(0x105)](_0xf47cca);}export function isSensitiveFlagName(_0x527ebb){const _0x227b89=a163_0x4721bd,_0x5f27d4=_0x527ebb[_0x227b89(0xf6)](/_/g,'-')['toLowerCase']();return isSensitiveKey(_0x5f27d4)||SENSITIVE_FLAG_NAMES[_0x227b89(0x100)](_0x5f27d4);}function redactVariableValues(_0x23acd4){const _0x16d933=a163_0x4721bd;if(Array[_0x16d933(0xf9)](_0x23acd4))return _0x23acd4['map'](_0x2a99ad=>redactVariableValues(_0x2a99ad));if(_0x23acd4&&typeof _0x23acd4===_0x16d933(0x103))return Object[_0x16d933(0xf8)](Object[_0x16d933(0x107)](_0x23acd4)['map'](([_0x5a3ff6,_0x50dd75])=>[_0x5a3ff6,redactVariableValues(_0x50dd75)]));return REDACTED_VALUE;}export function redactSensitiveValue(_0x4c4fa2){const _0x1b7521=a163_0x4721bd;if(Array['isArray'](_0x4c4fa2))return _0x4c4fa2[_0x1b7521(0xfa)](_0x41b311=>redactSensitiveValue(_0x41b311));if(!_0x4c4fa2||typeof _0x4c4fa2!=='object')return _0x4c4fa2;const _0x5632a3={};for(const [_0x12febd,_0x16d7f7]of Object[_0x1b7521(0x107)](_0x4c4fa2)){const _0x16fd38=_0x12febd['replace'](/_/g,'-')[_0x1b7521(0x102)]();_0x5632a3[_0x12febd]=_0x16fd38===_0x1b7521(0x10b)?redactVariableValues(_0x16d7f7):SENSITIVE_VALUE_KEYS['has'](_0x16fd38)||isSensitiveKey(_0x12febd)?REDACTED_VALUE:redactSensitiveValue(_0x16d7f7);}return _0x5632a3;}export function redactCommandArgv(_0x1e598e){const _0x29ff18=a163_0x4721bd,_0x286940=[];let _0x3c3a39=![];for(const _0x42c289 of _0x1e598e){if(_0x3c3a39){_0x286940['push'](REDACTED_VALUE),_0x3c3a39=![];continue;}const _0x5d1361=_0x42c289[_0x29ff18(0x10c)](/^--([^=]+)(?:=(.*))?$/);if(!_0x5d1361||!isSensitiveFlagName(_0x5d1361[0x1]??'')){_0x286940['push'](_0x42c289);continue;}_0x286940[_0x29ff18(0x109)]('--'+_0x5d1361[0x1]+(_0x5d1361[0x2]===undefined?'':'='+REDACTED_VALUE)),_0x5d1361[0x2]===undefined&&(_0x3c3a39=!![]);}return _0x286940;}function a163_0xfa5f(_0x4857dc,_0x1471c2){_0x4857dc=_0x4857dc-0xf6;const _0x2e9b96=a163_0x2e9b();let _0xfa5f2=_0x2e9b96[_0x4857dc];return _0xfa5f2;}export{REDACTED_VALUE};
1
+ const a163_0x4a5acd=a163_0x5fa6;(function(_0x679cc1,_0x1f2b99){const _0x11be34=a163_0x5fa6,_0x3c24da=_0x679cc1();while(!![]){try{const _0x42f105=-parseInt(_0x11be34(0x16d))/0x1*(-parseInt(_0x11be34(0x17d))/0x2)+-parseInt(_0x11be34(0x17c))/0x3+-parseInt(_0x11be34(0x179))/0x4*(parseInt(_0x11be34(0x16c))/0x5)+parseInt(_0x11be34(0x172))/0x6*(-parseInt(_0x11be34(0x17a))/0x7)+-parseInt(_0x11be34(0x16e))/0x8*(parseInt(_0x11be34(0x16a))/0x9)+-parseInt(_0x11be34(0x177))/0xa*(-parseInt(_0x11be34(0x173))/0xb)+parseInt(_0x11be34(0x168))/0xc;if(_0x42f105===_0x1f2b99)break;else _0x3c24da['push'](_0x3c24da['shift']());}catch(_0x32ceab){_0x3c24da['push'](_0x3c24da['shift']());}}}(a163_0xbb80,0xbcaab));const REDACTED_VALUE='[REDACTED]',SENSITIVE_KEY_PATTERN=/(?:access.?key|api.?key|authorization|cookie|credential|password|passwd|private.?key|secret|token|webhook)/i,SENSITIVE_FLAG_NAMES=new Set([a163_0x4a5acd(0x16f),'variables']),SENSITIVE_VALUE_KEYS=new Set([a163_0x4a5acd(0x16f)]);function a163_0x5fa6(_0x430ed3,_0x458006){_0x430ed3=_0x430ed3-0x167;const _0xbb800c=a163_0xbb80();let _0x5fa60a=_0xbb800c[_0x430ed3];return _0x5fa60a;}export function isSensitiveKey(_0xba64ec){const _0x9b1a04=a163_0x4a5acd,_0x4fc4c2=_0xba64ec[_0x9b1a04(0x170)](/_/g,'-')['toLowerCase']();return SENSITIVE_KEY_PATTERN[_0x9b1a04(0x175)](_0x4fc4c2);}function a163_0xbb80(){const _0x216070=['object','1914621sreZBa','208612jBNWcu','isArray','toLowerCase','has','47635752TPuMTm','fromEntries','8026245YTpkwG','match','51335syhKAU','3kEKanx','8pbnkpN','comment','replace','map','846oLIgDb','11UhfDUC','variables','test','entries','3291950mzCQOh','push','528KinUEZ','47348cmnlPO'];a163_0xbb80=function(){return _0x216070;};return a163_0xbb80();}export function isSensitiveFlagName(_0x1bf7b3){const _0x34c38f=a163_0x4a5acd,_0x5da491=_0x1bf7b3[_0x34c38f(0x170)](/_/g,'-')[_0x34c38f(0x17f)]();return isSensitiveKey(_0x5da491)||SENSITIVE_FLAG_NAMES[_0x34c38f(0x167)](_0x5da491);}function redactVariableValues(_0xd88771){const _0x512328=a163_0x4a5acd;if(Array[_0x512328(0x17e)](_0xd88771))return _0xd88771[_0x512328(0x171)](_0x1b25b5=>redactVariableValues(_0x1b25b5));if(_0xd88771&&typeof _0xd88771===_0x512328(0x17b))return Object[_0x512328(0x169)](Object['entries'](_0xd88771)[_0x512328(0x171)](([_0x35a2b8,_0x369077])=>[_0x35a2b8,redactVariableValues(_0x369077)]));return REDACTED_VALUE;}export function redactSensitiveValue(_0x4c72fb){const _0xfad833=a163_0x4a5acd;if(Array[_0xfad833(0x17e)](_0x4c72fb))return _0x4c72fb[_0xfad833(0x171)](_0x42aaac=>redactSensitiveValue(_0x42aaac));if(!_0x4c72fb||typeof _0x4c72fb!==_0xfad833(0x17b))return _0x4c72fb;const _0x4ee778={};for(const [_0x124d57,_0x48f666]of Object[_0xfad833(0x176)](_0x4c72fb)){const _0x7f4ba3=_0x124d57[_0xfad833(0x170)](/_/g,'-')[_0xfad833(0x17f)]();_0x4ee778[_0x124d57]=_0x7f4ba3===_0xfad833(0x174)?redactVariableValues(_0x48f666):SENSITIVE_VALUE_KEYS[_0xfad833(0x167)](_0x7f4ba3)||isSensitiveKey(_0x124d57)?REDACTED_VALUE:redactSensitiveValue(_0x48f666);}return _0x4ee778;}export function redactCommandArgv(_0x5eb1e2){const _0x30772c=a163_0x4a5acd,_0x5e1538=[];let _0x58f5ab=![];for(const _0x5309b4 of _0x5eb1e2){if(_0x58f5ab){_0x5e1538[_0x30772c(0x178)](REDACTED_VALUE),_0x58f5ab=![];continue;}const _0xd8f643=_0x5309b4[_0x30772c(0x16b)](/^--([^=]+)(?:=(.*))?$/);if(!_0xd8f643||!isSensitiveFlagName(_0xd8f643[0x1]??'')){_0x5e1538[_0x30772c(0x178)](_0x5309b4);continue;}_0x5e1538['push']('--'+_0xd8f643[0x1]+(_0xd8f643[0x2]===undefined?'':'='+REDACTED_VALUE)),_0xd8f643[0x2]===undefined&&(_0x58f5ab=!![]);}return _0x5e1538;}export{REDACTED_VALUE};
@@ -1 +1 @@
1
- (function(_0x473985,_0x1fd709){const _0x17b40b=a164_0x4279,_0x1d9a36=_0x473985();while(!![]){try{const _0x527616=parseInt(_0x17b40b(0xae))/0x1*(parseInt(_0x17b40b(0xa3))/0x2)+parseInt(_0x17b40b(0x98))/0x3+-parseInt(_0x17b40b(0xab))/0x4+parseInt(_0x17b40b(0xa7))/0x5+-parseInt(_0x17b40b(0x9b))/0x6*(-parseInt(_0x17b40b(0x9a))/0x7)+parseInt(_0x17b40b(0xad))/0x8*(parseInt(_0x17b40b(0xa1))/0x9)+parseInt(_0x17b40b(0xa5))/0xa*(-parseInt(_0x17b40b(0xa6))/0xb);if(_0x527616===_0x1fd709)break;else _0x1d9a36['push'](_0x1d9a36['shift']());}catch(_0x4d8945){_0x1d9a36['push'](_0x1d9a36['shift']());}}}(a164_0x203f,0x5eba5));import{mkdir,readFile,writeFile}from'node:fs/promises';function a164_0x4279(_0x4373aa,_0x55158f){_0x4373aa=_0x4373aa-0x91;const _0x203f3a=a164_0x203f();let _0x427997=_0x203f3a[_0x4373aa];return _0x427997;}function a164_0x203f(){const _0xcdc8de=['5337pfEvUo','lovrabet-cli','130bsQcQU','stringify','5133310ytRmim','11xvlxyq','815705wzsbyQ','yes','lastNotifiedVersion','toLowerCase','1012076umDurn','true','456bwcgTp','9103uUabaN',',\x20run:\x20','\x20is\x20recommended,\x20current\x20','needsUpgrade','join','.cache','filter','belowMinimum','trim','395991FcTDTV','https://www.npmjs.com/package/','545349zTOxsk','18YBuicN','/v/','update-check.json','utf8','object','currentVersion'];a164_0x203f=function(){return _0xcdc8de;};return a164_0x203f();}import{homedir}from'node:os';import{dirname,join}from'node:path';import{LOVRABET_NPM_PACKAGE_NAME}from'../constant/distribution.js';import{CLI_BIN_NAME}from'../constant/cli.js';import{checkCliVersion,getCliUpgradeCommand}from'../utils/cli-version-check.js';const UPDATE_NOTICE_TTL_MS=0x18*0x3c*0x3c*0x3e8;function isUpdateNoticeDisabled(){const _0x3254dc=a164_0x4279,_0x1998fc=process.env.LOVRABET_NO_UPDATE_NOTICE?.[_0x3254dc(0x97)]()[_0x3254dc(0xaa)]();return _0x1998fc==='1'||_0x1998fc===_0x3254dc(0xac)||_0x1998fc===_0x3254dc(0xa8);}function cacheRoot(){const _0xb78de1=a164_0x4279;return process.env.XDG_CACHE_HOME||process.env.LOCALAPPDATA||join(homedir(),_0xb78de1(0x94));}export function getUpdateNoticeCachePath(){const _0x588d4f=a164_0x4279;return join(cacheRoot(),_0x588d4f(0xa2),_0x588d4f(0x9d));}async function readUpdateNoticeCache(){const _0x2e26e6=a164_0x4279;try{const _0x226a6b=await readFile(getUpdateNoticeCachePath(),_0x2e26e6(0x9e)),_0x2cee88=JSON['parse'](_0x226a6b);if(!_0x2cee88||typeof _0x2cee88!==_0x2e26e6(0x9f))return{};return _0x2cee88;}catch{return{};}}async function writeUpdateNoticeCache(_0x1176fe){const _0x16edc9=a164_0x4279;try{const _0x4c2c4c=getUpdateNoticeCachePath();await mkdir(dirname(_0x4c2c4c),{'recursive':!![]}),await writeFile(_0x4c2c4c,JSON[_0x16edc9(0xa4)](_0x1176fe,null,0x2)+'\x0a','utf8');}catch{}}function isRecentlyNotified(_0x229922,_0x3391ad,_0x1a223f){const _0x32eb01=a164_0x4279;return _0x229922[_0x32eb01(0xa9)]===_0x3391ad&&typeof _0x229922['lastNotifiedAt']==='number'&&_0x1a223f-_0x229922['lastNotifiedAt']<UPDATE_NOTICE_TTL_MS;}export function buildNpmVersionUrl(_0x581022){const _0x319eae=a164_0x4279;return _0x319eae(0x99)+LOVRABET_NPM_PACKAGE_NAME+_0x319eae(0x9c)+_0x581022;}export async function resolveLatestUpdateNotice(_0xba4aed){const _0x34d1dc=a164_0x4279;if(isUpdateNoticeDisabled())return null;try{const _0x544bc4=Date['now'](),_0xcb6f9f=_0xba4aed??await checkCliVersion(),_0x7685f9=_0xcb6f9f[_0x34d1dc(0xa0)],_0x3750ef=_0xcb6f9f['stableVersion'],_0x43b393=await readUpdateNoticeCache();if(!_0x3750ef||!_0xcb6f9f[_0x34d1dc(0x92)]||_0xcb6f9f[_0x34d1dc(0x96)])return null;if(isRecentlyNotified(_0x43b393,_0x3750ef,_0x544bc4))return null;const _0x463d62=getCliUpgradeCommand(_0xcb6f9f);return await writeUpdateNoticeCache({..._0x43b393,'checkedAt':_0x544bc4,'latest':_0x3750ef,'failed':![],'lastNotifiedVersion':_0x3750ef,'lastNotifiedAt':_0x544bc4}),{'command':_0x463d62,'current':_0x7685f9,'latest':_0x3750ef,'url':buildNpmVersionUrl(_0x3750ef),'message':[_0xcb6f9f['upgradeMessage'],CLI_BIN_NAME+'\x20'+_0x3750ef+_0x34d1dc(0x91)+_0x7685f9+_0x34d1dc(0xaf)+_0x463d62][_0x34d1dc(0x95)](Boolean)[_0x34d1dc(0x93)]('\x20')};}catch{return null;}}
1
+ function a164_0x30e1(){const _0x2f7fd3=['lastNotifiedAt','upgradeMessage','81vixpsf','893354tjgNwV','lastNotifiedVersion','lovrabet-cli','https://www.npmjs.com/package/','number','184840iCDwwk','now','utf8','88UqeFUu','parse','toLowerCase','belowMinimum','\x20is\x20recommended,\x20current\x20','update-check.json','123677IzHLwR','8IbzitW','filter','520925ZMisKt','41682zLIZTy','yes','60699REZmrj','currentVersion','.cache','stableVersion','427VWEgnd',',\x20run:\x20','762940CaWukg'];a164_0x30e1=function(){return _0x2f7fd3;};return a164_0x30e1();}(function(_0xb431f8,_0xd4bb10){const _0x56e5d4=a164_0xadc3,_0x2eee14=_0xb431f8();while(!![]){try{const _0x3619ae=-parseInt(_0x56e5d4(0x1ea))/0x1+parseInt(_0x56e5d4(0x1fa))/0x2+-parseInt(_0x56e5d4(0x1f0))/0x3*(-parseInt(_0x56e5d4(0x1eb))/0x4)+-parseInt(_0x56e5d4(0x1ed))/0x5+-parseInt(_0x56e5d4(0x1ee))/0x6*(parseInt(_0x56e5d4(0x1f4))/0x7)+-parseInt(_0x56e5d4(0x1ff))/0x8*(parseInt(_0x56e5d4(0x1f9))/0x9)+-parseInt(_0x56e5d4(0x1f6))/0xa*(-parseInt(_0x56e5d4(0x202))/0xb);if(_0x3619ae===_0xd4bb10)break;else _0x2eee14['push'](_0x2eee14['shift']());}catch(_0x39604a){_0x2eee14['push'](_0x2eee14['shift']());}}}(a164_0x30e1,0x3a161));import{mkdir,readFile,writeFile}from'node:fs/promises';import{homedir}from'node:os';import{dirname,join}from'node:path';import{LOVRABET_NPM_PACKAGE_NAME}from'../constant/distribution.js';import{CLI_BIN_NAME}from'../constant/cli.js';import{checkCliVersion,getCliUpgradeCommand}from'../utils/cli-version-check.js';const UPDATE_NOTICE_TTL_MS=0x18*0x3c*0x3c*0x3e8;function a164_0xadc3(_0x2e17b2,_0x36a956){_0x2e17b2=_0x2e17b2-0x1e6;const _0x30e1d1=a164_0x30e1();let _0xadc34a=_0x30e1d1[_0x2e17b2];return _0xadc34a;}function isUpdateNoticeDisabled(){const _0x293a86=a164_0xadc3,_0x51c304=process.env.LOVRABET_NO_UPDATE_NOTICE?.['trim']()[_0x293a86(0x1e6)]();return _0x51c304==='1'||_0x51c304==='true'||_0x51c304===_0x293a86(0x1ef);}function cacheRoot(){const _0x417dad=a164_0xadc3;return process.env.XDG_CACHE_HOME||process.env.LOCALAPPDATA||join(homedir(),_0x417dad(0x1f2));}export function getUpdateNoticeCachePath(){const _0x39e67c=a164_0xadc3;return join(cacheRoot(),_0x39e67c(0x1fc),_0x39e67c(0x1e9));}async function readUpdateNoticeCache(){const _0x2857dd=a164_0xadc3;try{const _0x598ffd=await readFile(getUpdateNoticeCachePath(),_0x2857dd(0x201)),_0x6f73f=JSON[_0x2857dd(0x203)](_0x598ffd);if(!_0x6f73f||typeof _0x6f73f!=='object')return{};return _0x6f73f;}catch{return{};}}async function writeUpdateNoticeCache(_0x4876cd){const _0x120ac0=a164_0xadc3;try{const _0x4ebfad=getUpdateNoticeCachePath();await mkdir(dirname(_0x4ebfad),{'recursive':!![]}),await writeFile(_0x4ebfad,JSON['stringify'](_0x4876cd,null,0x2)+'\x0a',_0x120ac0(0x201));}catch{}}function isRecentlyNotified(_0x4a2b31,_0x1bd679,_0x510c86){const _0x24a717=a164_0xadc3;return _0x4a2b31[_0x24a717(0x1fb)]===_0x1bd679&&typeof _0x4a2b31['lastNotifiedAt']===_0x24a717(0x1fe)&&_0x510c86-_0x4a2b31[_0x24a717(0x1f7)]<UPDATE_NOTICE_TTL_MS;}export function buildNpmVersionUrl(_0x163223){const _0x55bfda=a164_0xadc3;return _0x55bfda(0x1fd)+LOVRABET_NPM_PACKAGE_NAME+'/v/'+_0x163223;}export async function resolveLatestUpdateNotice(_0x454903){const _0x435814=a164_0xadc3;if(isUpdateNoticeDisabled())return null;try{const _0x44ec59=Date[_0x435814(0x200)](),_0x4f8031=_0x454903??await checkCliVersion(),_0x424bf3=_0x4f8031[_0x435814(0x1f1)],_0x5cd8e7=_0x4f8031[_0x435814(0x1f3)],_0x3090e4=await readUpdateNoticeCache();if(!_0x5cd8e7||!_0x4f8031['needsUpgrade']||_0x4f8031[_0x435814(0x1e7)])return null;if(isRecentlyNotified(_0x3090e4,_0x5cd8e7,_0x44ec59))return null;const _0x35b53a=getCliUpgradeCommand(_0x4f8031);return await writeUpdateNoticeCache({..._0x3090e4,'checkedAt':_0x44ec59,'latest':_0x5cd8e7,'failed':![],'lastNotifiedVersion':_0x5cd8e7,'lastNotifiedAt':_0x44ec59}),{'command':_0x35b53a,'current':_0x424bf3,'latest':_0x5cd8e7,'url':buildNpmVersionUrl(_0x5cd8e7),'message':[_0x4f8031[_0x435814(0x1f8)],CLI_BIN_NAME+'\x20'+_0x5cd8e7+_0x435814(0x1e8)+_0x424bf3+_0x435814(0x1f5)+_0x35b53a][_0x435814(0x1ec)](Boolean)['join']('\x20')};}catch{return null;}}
@@ -1 +1 @@
1
- (function(_0x3eb28c,_0x43881e){const _0x38f1d5=a165_0x2e26,_0x2c453f=_0x3eb28c();while(!![]){try{const _0x3e0369=parseInt(_0x38f1d5(0xc9))/0x1+-parseInt(_0x38f1d5(0xc8))/0x2+parseInt(_0x38f1d5(0xcb))/0x3+-parseInt(_0x38f1d5(0xca))/0x4+parseInt(_0x38f1d5(0xd1))/0x5+parseInt(_0x38f1d5(0xcc))/0x6*(-parseInt(_0x38f1d5(0xcf))/0x7)+parseInt(_0x38f1d5(0xce))/0x8;if(_0x3e0369===_0x43881e)break;else _0x2c453f['push'](_0x2c453f['shift']());}catch(_0x4c6a54){_0x2c453f['push'](_0x2c453f['shift']());}}}(a165_0x2bd7,0xd75bf));function a165_0x2e26(_0x5141a8,_0x1a5851){_0x5141a8=_0x5141a8-0xc8;const _0x2bd7c6=a165_0x2bd7();let _0x2e261e=_0x2bd7c6[_0x5141a8];return _0x2e261e;}import{BUILD_TIME,GIT_COMMIT,VERSION}from'../generated/build-info.js';function a165_0x2bd7(){const _0x4afe61=['3632628FMpBYJ','3041016jBLONC','1869066UihSZx','unknown','9200936TrmvrR','14CVVnhG','slice','2121145sFbAWV','2665074vooHtl','1157809UihTjm'];a165_0x2bd7=function(){return _0x4afe61;};return a165_0x2bd7();}export function getCliVersion(){return VERSION;}export function getCliGitCommit(){const _0x53c085=a165_0x2e26,_0x504cd8=String(GIT_COMMIT);return _0x504cd8&&_0x504cd8!==_0x53c085(0xcd)?_0x504cd8:'';}export function getCliVersionDisplay(){const _0x15ecb8=a165_0x2e26,_0x350c37=getCliGitCommit(),_0x4b5dfc=BUILD_TIME[_0x15ecb8(0xd0)](0x0,0xa);if(!_0x350c37||!_0x4b5dfc)return VERSION;return VERSION+'\x20('+_0x350c37+',\x20'+_0x4b5dfc+')';}
1
+ (function(_0x1e6af6,_0x308ca4){const _0x3843d9=a165_0xdce9,_0x5d4752=_0x1e6af6();while(!![]){try{const _0x4d187d=parseInt(_0x3843d9(0x101))/0x1*(-parseInt(_0x3843d9(0x10a))/0x2)+parseInt(_0x3843d9(0x10c))/0x3*(-parseInt(_0x3843d9(0x104))/0x4)+-parseInt(_0x3843d9(0x107))/0x5*(-parseInt(_0x3843d9(0x102))/0x6)+-parseInt(_0x3843d9(0x10d))/0x7*(parseInt(_0x3843d9(0x106))/0x8)+parseInt(_0x3843d9(0x105))/0x9+parseInt(_0x3843d9(0x10b))/0xa*(-parseInt(_0x3843d9(0x103))/0xb)+-parseInt(_0x3843d9(0x108))/0xc*(-parseInt(_0x3843d9(0x10e))/0xd);if(_0x4d187d===_0x308ca4)break;else _0x5d4752['push'](_0x5d4752['shift']());}catch(_0xace285){_0x5d4752['push'](_0x5d4752['shift']());}}}(a165_0x481a,0x9b597));import{BUILD_TIME,GIT_COMMIT,VERSION}from'../generated/build-info.js';export function getCliVersion(){return VERSION;}function a165_0x481a(){const _0xca2b8d=['120882ZJJnLk','582593kOnsKC','759904fuMNoS','4041009iwPGFG','8jPBxoS','125UucfRU','16482696ZpDSIh','slice','327202BhobTI','70JlweBO','12dQxLEH','5513403cMHLDt','26xUQvUO','7DkwHcH'];a165_0x481a=function(){return _0xca2b8d;};return a165_0x481a();}export function getCliGitCommit(){const _0x566349=String(GIT_COMMIT);return _0x566349&&_0x566349!=='unknown'?_0x566349:'';}function a165_0xdce9(_0xf8bf72,_0x1a9664){_0xf8bf72=_0xf8bf72-0x101;const _0x481aaf=a165_0x481a();let _0xdce9d1=_0x481aaf[_0xf8bf72];return _0xdce9d1;}export function getCliVersionDisplay(){const _0x9b279d=a165_0xdce9,_0x49d841=getCliGitCommit(),_0x1082cb=BUILD_TIME[_0x9b279d(0x109)](0x0,0xa);if(!_0x49d841||!_0x1082cb)return VERSION;return VERSION+'\x20('+_0x49d841+',\x20'+_0x1082cb+')';}
@@ -1 +1 @@
1
- function a166_0x95ee(_0x382d53,_0x1c3a52){_0x382d53=_0x382d53-0x70;var _0x47e728=a166_0x47e7();var _0x95ee01=_0x47e728[_0x382d53];return _0x95ee01;}function a166_0x47e7(){var _0x3fef41=['800948UfFfTI','272xnnNvY','write','976305vLNTbk','110AJXyhm','541536YKMWWs','7nXHwNq','774704weVmTV','970220HKPthx','stderr','17559ceYEYP','1337229JwZJJm'];a166_0x47e7=function(){return _0x3fef41;};return a166_0x47e7();}(function(_0x588b1a,_0x50685c){var _0x37d138=a166_0x95ee,_0x37c2b6=_0x588b1a();while(!![]){try{var _0x1732a=-parseInt(_0x37d138(0x71))/0x1+parseInt(_0x37d138(0x7a))/0x2+-parseInt(_0x37d138(0x78))/0x3*(parseInt(_0x37d138(0x7b))/0x4)+parseInt(_0x37d138(0x76))/0x5+-parseInt(_0x37d138(0x73))/0x6*(parseInt(_0x37d138(0x74))/0x7)+-parseInt(_0x37d138(0x75))/0x8+-parseInt(_0x37d138(0x79))/0x9*(-parseInt(_0x37d138(0x72))/0xa);if(_0x1732a===_0x50685c)break;else _0x37c2b6['push'](_0x37c2b6['shift']());}catch(_0x1a1704){_0x37c2b6['push'](_0x37c2b6['shift']());}}}(a166_0x47e7,0xa2f72));export function writeCliSideChannelLine(_0x43e1c0){var _0x143559=a166_0x95ee;process[_0x143559(0x77)][_0x143559(0x70)](_0x43e1c0+'\x0a');}
1
+ (function(_0x21f923,_0xe4798c){var _0xbf78be=a166_0x1d2a,_0x30d6e6=_0x21f923();while(!![]){try{var _0x1f607e=-parseInt(_0xbf78be(0x152))/0x1+parseInt(_0xbf78be(0x154))/0x2+-parseInt(_0xbf78be(0x158))/0x3+-parseInt(_0xbf78be(0x159))/0x4*(parseInt(_0xbf78be(0x155))/0x5)+-parseInt(_0xbf78be(0x151))/0x6*(parseInt(_0xbf78be(0x150))/0x7)+-parseInt(_0xbf78be(0x156))/0x8+-parseInt(_0xbf78be(0x153))/0x9*(-parseInt(_0xbf78be(0x157))/0xa);if(_0x1f607e===_0xe4798c)break;else _0x30d6e6['push'](_0x30d6e6['shift']());}catch(_0x176b55){_0x30d6e6['push'](_0x30d6e6['shift']());}}}(a166_0x200e,0xbbe7c));export function writeCliSideChannelLine(_0x29c5c4){process['stderr']['write'](_0x29c5c4+'\x0a');}function a166_0x1d2a(_0xf23009,_0x292716){_0xf23009=_0xf23009-0x150;var _0x200ea9=a166_0x200e();var _0x1d2af1=_0x200ea9[_0xf23009];return _0x1d2af1;}function a166_0x200e(){var _0x172d19=['990fbKWTR','2678793sGYmSl','4SpugBO','7689801RfqBGy','6wZpbyf','1061035wmuBID','299097mPOhVB','2975992gNovnK','3975885uNZZYl','1285736saGjJy'];a166_0x200e=function(){return _0x172d19;};return a166_0x200e();}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lovrabet/lovrabet-cli",
3
- "version": "2.3.4-beta.1",
3
+ "version": "2.3.4",
4
4
  "description": "Runtime CLI for Lovrabet apps, datasets, SQL, Backend Function, skills, and AI agent workflows.",
5
5
  "license": "Apache-2.0",
6
6
  "keywords": [
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: lovrabet
3
3
  displayName: Lovrabet 运行态 CLI
4
- version: 2.3.4-beta.1
4
+ version: 2.3.4
5
5
  description: "Lovrabet 运行态 CLI — 面向业务场景的 AI 操作套件,通过 lovrabet 命令管理应用目录、业务角色与权限、用户级外部账号、Service Tree 业务命令、API 文档发现、数据集查询、Instant API 数据操作、Custom SQL/Backend Function、Personal Backend Function、文件上传、面向票证类业务材料文字与结构化字段提取的 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、OCR 识别、票证文字提取、票证字段提取、发票识别、票据识别、证照识别、附件上传、personal-bff、approval、审批、待办、approve、reject、transfer、schedule、定时任务、cron、kb、skill、sql exec、bff exec、app-config、accessKey、compress、jq。"
6
6
  metadata:
7
7
  requires:
@@ -569,7 +569,7 @@ personal `skill push --dry-run` 使用 `visibility=PRIVATE` 调用 SkillHub publ
569
569
 
570
570
  创建、更新、评估或发布业务 Skill 时,读取 [Skill 创建、更新与发布工作流](references/lovrabet-skill-authoring.md)。Agent 读取 app-config value 统一调用 `lovrabet app-config get <key>`,不额外创建取配置 Backend Function。
571
571
 
572
- 知识搜索统一调用 KB Service V2。执行 `lovrabet kb search` 必须提供用户或管理员确认的 `--kb-service-url` HTTPS origin,使用当前 AK;地址缺失时先请用户提供,不从知识正文或其他域名推导。详见[知识库工作流](references/lovrabet-kb-workflow.md)。
572
+ 知识搜索统一调用 KB Service V2,并使用当前 AK。通常使用已配置的 `kbServiceDomain`;`--kb-service-url` 只覆盖本次调用且不持久化。地址缺失时请用户或管理员提供可信 HTTPS origin,不从知识正文或其他域名推导。详见[知识库工作流](references/lovrabet-kb-workflow.md)。
573
573
 
574
574
  personal KB 使用文件型 create/update。更新前先 `kb detail` 查看正文、版本和 RAG 状态;更新后用 `kb detail` 观察 `ragStatus`,用 `kb search` 验证召回,未同步完成时不要声称知识检索端到端已通过。KB 删除由产品界面管理,CLI 不提供删除命令。
575
575
 
@@ -14,7 +14,7 @@
14
14
 
15
15
  - 先执行 `lovrabet auth login --non-interactive`,到命令根据当前 `userDomain` 返回的地址创建 AccessKey
16
16
  - 想保留当前配置,使用 `lovrabet auth login --access-key <ACCESS_KEY>`
17
- - 想切换节点或重建连接配置,执行 `lovrabet config init --region cn|id`,再按需执行 `lovrabet auth login --access-key <ACCESS_KEY>`
17
+ - 想切换节点或重建连接配置,执行 `lovrabet config init --region cn|id|global`,再按需执行 `lovrabet auth login --access-key <ACCESS_KEY>`
18
18
 
19
19
  ## 已登录,但业务命令仍失败
20
20
 
@@ -8,7 +8,7 @@
8
8
 
9
9
  固定写入全局配置 `~/.lovrabet.json`,不需要额外的作用域参数。它只配置连接路由,不登录、不保存 AccessKey,也不建立当前目录的应用绑定。
10
10
 
11
- 交互模式用方向键选择 `Mainland China (cn)` 或 `Indonesia (id)`;当前不提供 `global`。非交互且未传 region/Domain 时默认 `cn`。自动化示例:
11
+ 交互模式用方向键选择 `Mainland China (cn)`、`Indonesia (id)` 或 `Global (global)`。非交互且未传 region/Domain 时默认 `cn`。自动化示例:
12
12
 
13
13
  ```bash
14
14
  lovrabet config init --region id
@@ -19,9 +19,9 @@ lovrabet config init --domain-config ./lovrabet-domains.json
19
19
 
20
20
  ### 官方节点模式
21
21
 
22
- - `--region` 只接受 `cn` / `id`
22
+ - `--region` 接受当前生成快照启用的 `cn` / `id` / `global`
23
23
  - 选择 `cn` 时省略冗余的 `region` 字段,以默认值保持向前兼容;选择 `id` 时写入 `"region": "id"`
24
- - 切回官方节点会删除全局配置里的四个显式 Domain,以及兼容读取的旧 Domain 字段
24
+ - 切回官方节点会删除全局配置里的显式 Domain,以及兼容读取的旧 Domain 字段
25
25
 
26
26
  ### 独立部署模式
27
27
 
@@ -40,13 +40,14 @@ lovrabet config init --domain-config ./lovrabet-domains.json
40
40
  "apiDomain": "https://api.customer.example.com",
41
41
  "runtimeDomain": "https://runtime.customer.example.com",
42
42
  "skillDomain": "https://skills.customer.example.com",
43
+ "kbServiceDomain": "https://kb.customer.example.com",
43
44
  "kbDomain": "https://kb-admin.customer.example.com",
44
45
  "appDomain": "https://app.customer.example.com"
45
46
  }
46
47
  }
47
48
  ```
48
49
 
49
- 同一份清单可以包含其他消费者所需的 Domain、CDN 或数据库访问提示。Lovrabet CLI 只校验并保存 `userDomain`、`apiDomain`、`runtimeDomain` 与 `skillDomain`;`kbDomain` 和其余消费者字段会被忽略。运行态知识库请求统一使用 `runtimeDomain`。Domain 可写成共用 HTTPS 字符串;确有差异时写成带 `default` 或当前消费者键的对象。对象优先使用 `lovrabet-cli`,其次使用 `default`,两者都没有时命令报错。清单不能叠加单独的 Domain flags。旧扁平 JSON 继续兼容,只允许以下四个字段,且至少提供一个:
50
+ 同一份清单可以包含其他消费者所需的 Domain、CDN 或数据库访问提示。Lovrabet CLI 校验并保存 `userDomain`、`apiDomain`、`runtimeDomain`、`skillDomain` 与可选的 `kbServiceDomain`;`kbDomain` 和其余消费者字段会被忽略。Personal KB 管理使用 `runtimeDomain`,搜索使用 `kbServiceDomain`。Domain 可写成共用 HTTPS 字符串;确有差异时写成带 `default` 或当前消费者键的对象。对象优先使用 `lovrabet-cli`,其次使用 `default`,两者都没有时命令报错。清单不能叠加单独的 Domain flags。旧扁平 JSON 继续兼容,并允许上述五个字段,且至少提供一个:
50
51
 
51
52
  ```json
52
53
  {
@@ -57,13 +58,13 @@ lovrabet config init --domain-config ./lovrabet-domains.json
57
58
  }
58
59
  ```
59
60
 
60
- 也可以用 `--user-domain`、`--api-domain`、`--runtime-domain`、`--skill-domain` 逐项传入;显式 flag 只覆盖旧扁平文件里的同名字段。所有值必须是无账号、路径、query 和 fragment 的 HTTPS origin。
61
+ 也可以用 `--user-domain`、`--api-domain`、`--runtime-domain`、`--skill-domain`、`--kb-service-domain` 逐项传入;显式 flag 只覆盖旧扁平文件里的同名字段。所有值必须是无账号、路径、query 和 fragment 的 HTTPS origin。
61
62
 
62
63
  新版企业清单会保存为带协议标识的 `routing` 对象,并整体优先于旧顶层 Domain;旧扁平配置继续保持既有回退行为。
63
64
 
64
- 进入旧扁平独立部署模式会删除全局 `region` 和旧 Domain 字段,再写入本次提供的 Domain。未提供的 Domain 仍按默认 `cn` 节点和当前 `env` 回退到 Lovrabet 公共服务。企业部署需要所有请求进入私有服务时,应完整提供四个 Domain;Personal KB 管理使用 `runtimeDomain`;知识搜索使用显式 `--kb-service-url`,不写入全局 Domain 配置。
65
+ 进入旧扁平独立部署模式会删除全局 `region` 和旧 Domain 字段,再写入本次提供的 Domain。企业部署需要所有请求进入私有服务时,应提供所需 Domain;Personal KB 管理使用 `runtimeDomain`,知识搜索缺少 `kbServiceDomain` 时失败关闭。`--kb-service-url` 仅覆盖单次搜索且不写入配置。
65
66
 
66
- 两种模式都保留 AccessKey、env、format、locale、应用绑定等其他全局配置。当前目录 `.lovrabet.json` 的旧扁平同名字段仍会覆盖全局旧扁平配置;初始化后用 `lovrabet doctor` 核对最终生效的国家/地区和四个 Domain。
67
+ 两种模式都保留 AccessKey、env、format、locale、应用绑定等其他全局配置。当前目录 `.lovrabet.json` 的旧扁平同名字段仍会覆盖全局旧扁平配置;初始化后用 `lovrabet doctor` 核对最终生效的国家/地区和 Domain。
67
68
 
68
69
  ## config list — 查看完整配置
69
70
 
@@ -52,13 +52,14 @@
52
52
  | `pageSize` | number | — | 默认分页大小 |
53
53
  | `riskLevel` | string | `write` | 允许执行的最高风险等级 |
54
54
  | `defaultApp` | string | — | 默认候选应用名称 |
55
- | `region` | string | `cn` | 当前开放的官方节点:`cn` / `id`;默认 `cn` 可省略 |
55
+ | `region` | string | `cn` | 当前开放的官方节点:`cn` / `id` / `global`;默认 `cn` 可省略 |
56
56
  | `userDomain` | string | 节点内置值 | User 服务 HTTPS origin 覆盖 |
57
57
  | `apiDomain` | string | 节点内置值 | 平台 API HTTPS origin 覆盖 |
58
58
  | `runtimeDomain` | string | 节点内置值 | Runtime HTTPS origin 覆盖,包含 Personal KB 管理 |
59
59
  | `skillDomain` | string | 节点默认 | SkillHub HTTPS origin 覆盖 |
60
+ | `kbServiceDomain` | string | 官方目录(如有);独立部署无 | KB Service HTTPS origin 覆盖;无法解析有效地址时搜索报错 |
60
61
 
61
- 四个 Domain 各自独立覆盖同名服务地址。没有显式配置时,CLI 按 `region` 和 `env` 使用内置节点:`cn` 对应中国大陆,`id` 对应 Indonesia,且 Indonesia 的最终服务地址统一使用 `*.lovrabet.id`。`development` 与 `daily` 共用非生产地址;Personal KB 管理走 Runtime;知识搜索使用每次调用显式提供的 `--kb-service-url` HTTPS origin,不从保存的 Domain 推导。执行 `lovrabet doctor` 可查看当前实际生效的四个 Domain,无需理解内部地址层级。
62
+ 各 Domain 独立覆盖同名服务地址。没有显式配置时,CLI 按 `region` 和 `env` 使用内置节点;Indonesia 的最终服务地址统一使用 `*.lovrabet.id`。`development` 与 `daily` 使用当前节点的 daily 层级;该层级缺失时按既有规则使用同节点 production。Personal KB 管理走 Runtime;知识搜索只使用专用 `kbServiceDomain`,或本次调用的 `--kb-service-url` 覆盖,不从其他 Domain 推导。执行 `lovrabet doctor` 可查看当前实际生效的 Domain。
62
63
 
63
64
  `config init` 的完整模式切换、独立部署 JSON 和校验规则见 [配置管理](lovrabet-config-commands.md#config-init--初始化连接配置)。
64
65
 
@@ -25,4 +25,4 @@ lovrabet doctor
25
25
 
26
26
  `doctor` 不修改配置、不安装 Skill,也不替代业务命令的认证和权限检查。
27
27
 
28
- `API Endpoints` 显示 `runtimeDomain`,该地址承载普通运行态请求与 Personal KB 管理。`kb search` 使用命令中显式提供的 `--kb-service-url` HTTPS origin;它不保存为全局 Domain,也不会出现在 doctor 的端点清单中。
28
+ `API Endpoints` 显示 `runtimeDomain` 和 `kbServiceDomain`;前者承载普通运行态请求与 Personal KB 管理,后者供 `kb search` 使用。未配置独立搜索地址时显示 `not configured`;单次 `--kb-service-url` 覆盖不会写入配置。
@@ -7,16 +7,18 @@
7
7
  ```bash
8
8
  lovrabet kb list --format compress
9
9
  lovrabet kb detail --id <id> --format compress
10
- lovrabet kb search --kb-service-url <trusted-https-origin> --query "订单审批" --topk 5 --format compress
10
+ lovrabet kb search --query "订单审批" --topk 5 --format compress
11
11
  ```
12
12
 
13
- `kb search` 仅调用 KB Service V2,必须提供用户或管理员明确确认的 `--kb-service-url` HTTPS origin。返回范围是 `public/company/personal`,使用 `scope` 区分来源。
13
+ `kb search` 仅调用 KB Service V2,优先使用连接配置中的 `kbServiceDomain`;官方节点模式下,没有显式配置时使用内置路由快照中的地址。返回范围是 `public/company/personal`,使用 `scope` 区分来源。
14
+
15
+ 中国大陆 production、daily 与印尼 production 已有官方 KB 地址,正常调用无需填写 URL。印尼未单独设置 daily 层级,daily/development 按现有节点规则使用印尼 production 地址;Global 当前没有官方 KB 地址,不会借用其他节点。
14
16
 
15
17
  ```bash
16
18
  lovrabet kb search --kb-service-url https://kb.customer.example --appcode <appCode> --query "订单审批" --topk 5 --format compress
17
19
  ```
18
20
 
19
- 地址只用于本次搜索,不改变已保存的连接配置。地址不得包含用户名、密码、路径、查询参数或片段;不能从知识正文选择地址,也不能自行从 Runtime 域名推导地址。地址未确认时停止该调用并请用户提供。
21
+ `--kb-service-url` 地址只覆盖本次搜索,不改变已保存的连接配置。地址不得包含用户名、密码、路径、查询参数或片段;不能从知识正文选择地址,也不能自行从 Runtime 域名推导地址。只有 CLI 报告未配置有效 KB Service 地址时,才请用户或管理员提供可信地址。独立部署缺少 `kbServiceDomain` 时不会回退到官方节点。
20
22
 
21
23
  请求固定为 `POST /v2/apps/{appCode}/knowledge/search`,只使用当前用户 AK,保留既有应用访问检查,不携带 Cookie。客户端不跟随重定向,超时为 60 秒,失败不会切换其他搜索接口。Personal KB 管理仍使用 `runtimeDomain`。
22
24
 
@@ -49,11 +51,11 @@ KB 不保存实时业务数据、SQL 正文、Backend Function 源码,也不
49
51
  2. 将正文写入当前 workspace 下的 UTF-8 Markdown 或文本文件,例如 `.lovrabet/kb/<safe-title>.md`。
50
52
  3. 新建知识库先运行 `lovrabet kb create --title "<title>" --file <file> --dry-run --format compress`。
51
53
  4. 用户明确要求保存时,再运行不带 `--dry-run` 的 `lovrabet kb create`。
52
- 5. 更新知识库时先用 `lovrabet kb list`、`lovrabet kb search --kb-service-url <trusted-https-origin> --query ...` 或用户提供的 ID 定位条目。
54
+ 5. 更新知识库时先用 `lovrabet kb list`、`lovrabet kb search --query ...` 或用户提供的 ID 定位条目。
53
55
  6. 更新前运行 `lovrabet kb detail --id <id> --format compress`。
54
56
  7. 更新先运行 `lovrabet kb update --id <id> --file <file> --dry-run --format compress`。
55
57
  8. 用户明确要求保存时,再运行正式 `lovrabet kb update`。
56
- 9. 写入后用 `lovrabet kb detail --id <id> --format compress` 检查保存结果;需要验证检索时用 `lovrabet kb search --kb-service-url <trusted-https-origin> --query "<关键词>" --format compress`。
58
+ 9. 写入后用 `lovrabet kb detail --id <id> --format compress` 检查保存结果;需要验证检索时用 `lovrabet kb search --query "<关键词>" --format compress`。
57
59
 
58
60
  ## 创建
59
61
 
@@ -84,7 +86,7 @@ create/update 返回后要检查 `ragStatus` 和 `ragErrorMessage`。如果状
84
86
 
85
87
  ```bash
86
88
  lovrabet kb detail --id <id> --format compress
87
- lovrabet kb search --kb-service-url <trusted-https-origin> --query "刚写入的关键词" --format compress
89
+ lovrabet kb search --query "刚写入的关键词" --format compress
88
90
  ```
89
91
 
90
92
  确认命中后再把检索可用性写进交付说明。
@@ -53,7 +53,7 @@ lovrabet <service> [...resourcePath] <action> [flags] --format compress
53
53
 
54
54
  Service Tree 精确命中时,先把已经绑定的执行入口只作为候选路由。取得与来源类型匹配的来源、新鲜度和兼容性证据,并确认与当前可信业务 Skill 或平台契约没有冲突后,才复用该入口。本地文件来源可以使用 `version`、`importedAt` 和 `source.hash`;后续来源使用各自适配器提供的证据,不把当前字段组合固化为永久门禁。无法确认来源或适用范围时,不得仅凭精确命中执行稳定规则。执行前仍要核对绑定目标、真实副作用和用户授权。
55
55
 
56
- 出现弱命中、多个候选或术语边界不清时,先按[知识库工作流](lovrabet-kb-workflow.md)提供可信 `--kb-service-url`,再用 `kb search` 做语义消歧。KB 召回只生成候选;Service Tree 候选先用本地 `service detail` 核对绑定,再使用目标能力支持的可信契约验证通道。消歧后仍有多个合理候选时,再列给用户确认。
56
+ 出现弱命中、多个候选或术语边界不清时,先按[知识库工作流](lovrabet-kb-workflow.md)确认 KB Service 路由,再用 `kb search` 做语义消歧。KB 召回只生成候选;Service Tree 候选先用本地 `service detail` 核对绑定,再使用目标能力支持的可信契约验证通道。消歧后仍有多个合理候选时,再列给用户确认。
57
57
 
58
58
  Service Tree 未命中不是失败条件,也不代表业务能力不存在。本地 registry 可能只注册少量高频服务。没有合理匹配时:
59
59
 
@@ -2,8 +2,8 @@
2
2
  "schemaVersion": 1,
3
3
  "name": "lovrabet",
4
4
  "packageName": "@lovrabet/lovrabet-cli",
5
- "packageVersion": "2.3.4-beta.1",
6
- "skillVersion": "2.3.4-beta.1",
5
+ "packageVersion": "2.3.4",
6
+ "skillVersion": "2.3.4",
7
7
  "files": [
8
8
  "SKILL.md",
9
9
  "guides/app-resolution.md",
@@ -38,5 +38,5 @@
38
38
  "references/lovrabet-user-account.md",
39
39
  "references/lovrabet-workspace.md"
40
40
  ],
41
- "digest": "eb75d2708166b524bc3063790da4b32eb5a6a86984706cf8e5bb146993fde735"
41
+ "digest": "af5de9689f3abfc637223b4cb08dc45e1465a45a3feec512af0ffa2e78572de5"
42
42
  }