@sfmc-bds/cli 0.2.0-beta.0 → 0.2.0-beta.10

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 (183) hide show
  1. package/dist/argv-parse.d.ts +11 -0
  2. package/dist/argv-parse.d.ts.map +1 -0
  3. package/dist/argv-parse.js +28 -0
  4. package/dist/argv-parse.js.map +7 -0
  5. package/dist/cli-gate.d.ts +11 -0
  6. package/dist/cli-gate.d.ts.map +1 -0
  7. package/dist/cli-gate.js +46 -0
  8. package/dist/cli-gate.js.map +7 -0
  9. package/dist/command-palette.d.ts +61 -0
  10. package/dist/command-palette.d.ts.map +1 -0
  11. package/dist/command-palette.js +352 -0
  12. package/dist/command-palette.js.map +7 -0
  13. package/dist/command-surface.d.ts +85 -0
  14. package/dist/command-surface.d.ts.map +1 -0
  15. package/dist/command-surface.js +292 -0
  16. package/dist/command-surface.js.map +7 -0
  17. package/dist/commands-reload.js +2 -2
  18. package/dist/commands-reload.js.map +2 -2
  19. package/dist/commands.d.ts +1 -1
  20. package/dist/commands.d.ts.map +1 -1
  21. package/dist/commands.js +196 -21
  22. package/dist/commands.js.map +2 -2
  23. package/dist/debug-command.d.ts +5 -0
  24. package/dist/debug-command.d.ts.map +1 -0
  25. package/dist/debug-command.js +118 -0
  26. package/dist/debug-command.js.map +7 -0
  27. package/dist/help-text.d.ts +3 -0
  28. package/dist/help-text.d.ts.map +1 -0
  29. package/dist/help-text.js +160 -0
  30. package/dist/help-text.js.map +7 -0
  31. package/dist/i18n/locales/en.d.ts +103 -89
  32. package/dist/i18n/locales/en.d.ts.map +1 -1
  33. package/dist/i18n/locales/en.js +105 -91
  34. package/dist/i18n/locales/en.js.map +2 -2
  35. package/dist/i18n/locales/zh-CN.d.ts.map +1 -1
  36. package/dist/i18n/locales/zh-CN.js +138 -118
  37. package/dist/i18n/locales/zh-CN.js.map +2 -2
  38. package/dist/index.d.ts +2 -2
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +9 -4
  41. package/dist/index.js.map +2 -2
  42. package/dist/llbot-launch.d.ts +20 -0
  43. package/dist/llbot-launch.d.ts.map +1 -0
  44. package/dist/llbot-launch.js +40 -0
  45. package/dist/llbot-launch.js.map +7 -0
  46. package/dist/log-filter.d.ts +69 -0
  47. package/dist/log-filter.d.ts.map +1 -0
  48. package/dist/log-filter.js +150 -0
  49. package/dist/log-filter.js.map +7 -0
  50. package/dist/logs.d.ts +29 -7
  51. package/dist/logs.d.ts.map +1 -1
  52. package/dist/logs.js +164 -72
  53. package/dist/logs.js.map +3 -3
  54. package/dist/main.js +55 -46
  55. package/dist/main.js.map +2 -2
  56. package/dist/module-commands.d.ts +17 -40
  57. package/dist/module-commands.d.ts.map +1 -1
  58. package/dist/module-commands.js +129 -85
  59. package/dist/module-commands.js.map +2 -2
  60. package/dist/module-pack-build.d.ts +10 -0
  61. package/dist/module-pack-build.d.ts.map +1 -0
  62. package/dist/module-pack-build.js +434 -0
  63. package/dist/module-pack-build.js.map +7 -0
  64. package/dist/module-toggle.d.ts +33 -0
  65. package/dist/module-toggle.d.ts.map +1 -0
  66. package/dist/module-toggle.js +28 -0
  67. package/dist/module-toggle.js.map +7 -0
  68. package/dist/node-service-probe.d.ts +18 -0
  69. package/dist/node-service-probe.d.ts.map +1 -0
  70. package/dist/node-service-probe.js +97 -0
  71. package/dist/node-service-probe.js.map +7 -0
  72. package/dist/pack-lifecycle.d.ts +1 -1
  73. package/dist/pack-lifecycle.d.ts.map +1 -1
  74. package/dist/pack-lifecycle.js +14 -4
  75. package/dist/pack-lifecycle.js.map +2 -2
  76. package/dist/pack-update/index.d.ts +18 -0
  77. package/dist/pack-update/index.d.ts.map +1 -0
  78. package/dist/pack-update/index.js +113 -0
  79. package/dist/pack-update/index.js.map +7 -0
  80. package/dist/registry.d.ts +7 -4
  81. package/dist/registry.d.ts.map +1 -1
  82. package/dist/registry.js +15 -3
  83. package/dist/registry.js.map +2 -2
  84. package/dist/repl-windows/format-display.d.ts +10 -0
  85. package/dist/repl-windows/format-display.d.ts.map +1 -0
  86. package/dist/repl-windows/format-display.js +57 -0
  87. package/dist/repl-windows/format-display.js.map +7 -0
  88. package/dist/repl-windows/host.d.ts +60 -0
  89. package/dist/repl-windows/host.d.ts.map +1 -0
  90. package/dist/repl-windows/host.js +179 -0
  91. package/dist/repl-windows/host.js.map +7 -0
  92. package/dist/repl-windows/index.d.ts +9 -0
  93. package/dist/repl-windows/index.d.ts.map +1 -0
  94. package/dist/repl-windows/index.js +13 -0
  95. package/dist/repl-windows/index.js.map +7 -0
  96. package/dist/repl-windows/logs-filter-window.d.ts +15 -0
  97. package/dist/repl-windows/logs-filter-window.d.ts.map +1 -0
  98. package/dist/repl-windows/logs-filter-window.js +77 -0
  99. package/dist/repl-windows/logs-filter-window.js.map +7 -0
  100. package/dist/repl-windows/service-window.d.ts +4 -0
  101. package/dist/repl-windows/service-window.d.ts.map +1 -0
  102. package/dist/repl-windows/service-window.js +35 -0
  103. package/dist/repl-windows/service-window.js.map +7 -0
  104. package/dist/repl-windows/types.d.ts +56 -0
  105. package/dist/repl-windows/types.d.ts.map +1 -0
  106. package/dist/repl-windows/types.js +1 -0
  107. package/dist/repl-windows/types.js.map +7 -0
  108. package/dist/repl.d.ts +6 -9
  109. package/dist/repl.d.ts.map +1 -1
  110. package/dist/repl.js +698 -427
  111. package/dist/repl.js.map +3 -3
  112. package/dist/runtime.d.ts +6 -13
  113. package/dist/runtime.d.ts.map +1 -1
  114. package/dist/runtime.js +23 -28
  115. package/dist/runtime.js.map +2 -2
  116. package/dist/send-target.d.ts +11 -0
  117. package/dist/send-target.d.ts.map +1 -0
  118. package/dist/send-target.js +42 -0
  119. package/dist/send-target.js.map +7 -0
  120. package/dist/services.d.ts +50 -4
  121. package/dist/services.d.ts.map +1 -1
  122. package/dist/services.js +244 -20
  123. package/dist/services.js.map +2 -2
  124. package/dist/theme.js +1 -1
  125. package/dist/theme.js.map +2 -2
  126. package/dist/wizard.d.ts.map +1 -1
  127. package/dist/wizard.js +76 -16
  128. package/dist/wizard.js.map +2 -2
  129. package/dist/world-packs.d.ts +15 -0
  130. package/dist/world-packs.d.ts.map +1 -1
  131. package/dist/world-packs.js +90 -87
  132. package/dist/world-packs.js.map +2 -2
  133. package/package.json +24 -21
  134. package/scripts/module-install/check-modules.mjs +204 -0
  135. package/scripts/module-install/fetch-module.mjs +1007 -0
  136. package/scripts/module-install/install-resolver.test.mjs +48 -0
  137. package/scripts/module-install/lib/catalog.mjs +96 -0
  138. package/scripts/module-install/lib/io.mjs +37 -0
  139. package/scripts/module-install/lib/link-from.mjs +80 -0
  140. package/scripts/module-install/lib/lock.mjs +78 -0
  141. package/scripts/module-install/lib/npm-resolver.mjs +55 -0
  142. package/scripts/module-install/lib/packages.mjs +142 -0
  143. package/scripts/module-install/lib/paths.mjs +48 -0
  144. package/scripts/module-install/lib/registry-index.mjs +50 -0
  145. package/scripts/module-install/link-local.test.mjs +51 -0
  146. package/scripts/module-install/local-resolver.test.mjs +51 -0
  147. package/scripts/module-install/registry-index.test.mjs +28 -0
  148. package/dist/module-wizard.d.ts +0 -14
  149. package/dist/module-wizard.d.ts.map +0 -1
  150. package/dist/module-wizard.js +0 -313
  151. package/dist/module-wizard.js.map +0 -7
  152. package/dist/pack-update/bindings.d.ts +0 -12
  153. package/dist/pack-update/bindings.d.ts.map +0 -1
  154. package/dist/pack-update/bindings.js +0 -64
  155. package/dist/pack-update/bindings.js.map +0 -7
  156. package/dist/pack-update/config.d.ts +0 -22
  157. package/dist/pack-update/config.d.ts.map +0 -1
  158. package/dist/pack-update/config.js +0 -141
  159. package/dist/pack-update/config.js.map +0 -7
  160. package/dist/pack-update/providers/curseforge.d.ts +0 -23
  161. package/dist/pack-update/providers/curseforge.d.ts.map +0 -1
  162. package/dist/pack-update/providers/curseforge.js +0 -209
  163. package/dist/pack-update/providers/curseforge.js.map +0 -7
  164. package/dist/pack-update/providers/index.d.ts +0 -16
  165. package/dist/pack-update/providers/index.d.ts.map +0 -1
  166. package/dist/pack-update/providers/index.js +0 -37
  167. package/dist/pack-update/providers/index.js.map +0 -7
  168. package/dist/pack-update/service.d.ts +0 -21
  169. package/dist/pack-update/service.d.ts.map +0 -1
  170. package/dist/pack-update/service.js +0 -567
  171. package/dist/pack-update/service.js.map +0 -7
  172. package/dist/pack-update/types.d.ts +0 -126
  173. package/dist/pack-update/types.d.ts.map +0 -1
  174. package/dist/pack-update/types.js +0 -8
  175. package/dist/pack-update/types.js.map +0 -7
  176. package/dist/pack-update/version-policy.d.ts +0 -80
  177. package/dist/pack-update/version-policy.d.ts.map +0 -1
  178. package/dist/pack-update/version-policy.js +0 -216
  179. package/dist/pack-update/version-policy.js.map +0 -7
  180. package/dist/remote-agent.d.ts +0 -18
  181. package/dist/remote-agent.d.ts.map +0 -1
  182. package/dist/remote-agent.js +0 -196
  183. package/dist/remote-agent.js.map +0 -7
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/i18n/locales/zh-CN.ts"],
4
- "sourcesContent": ["import type { MessageKey } from \"./en.js\";\n\n/** \u7B80\u4F53\u4E2D\u6587\u6587\u6848\uFF1B\u952E\u96C6\u987B\u4E0E en \u4E00\u81F4\u3002 */\nexport const zhCN: Record<MessageKey, string> = {\n \"common.cancelled\": \"\u5DF2\u53D6\u6D88\",\n \"common.done\": \"\u5B8C\u6210\",\n \"common.required\": \"\u5FC5\u586B\",\n \"common.error\": \"\u9519\u8BEF: {message}\",\n \"common.fatal\": \"\u81F4\u547D\u9519\u8BEF\",\n \"common.unknownCommand\": \"\u672A\u77E5\u547D\u4EE4: {cmd}\",\n \"common.unknownShort\": \"\u672A\u77E5: {cmd} \uFF08\u8F93\u5165 help \u67E5\u770B\u5E2E\u52A9\uFF09\",\n \"common.tips\": \"\u63D0\u793A\",\n \"common.path\": \"\u8DEF\u5F84\",\n \"common.hint\": \"\u63D0\u793A\",\n \"common.none\": \"\uFF08\u65E0\uFF09\",\n \"common.all\": \"\u5168\u90E8\",\n\n \"locale.current\": \"\u5F53\u524D\u8BED\u8A00: {locale}\",\n \"locale.set\": \"\u8BED\u8A00\u5DF2\u8BBE\u4E3A {locale}\",\n \"locale.invalid\": \"\u672A\u77E5\u8BED\u8A00: {value}\uFF08\u53EF\u9009: zh-CN, en\uFF09\",\n \"locale.usage\": \"\u7528\u6CD5: locale [zh-CN|en|zh|cn]\",\n \"locale.wizard\": \"CLI language / \u754C\u9762\u8BED\u8A00\",\n \"locale.opt.zh\": \"\u7B80\u4F53\u4E2D\u6587\",\n \"locale.opt.en\": \"English\",\n\n \"help.title\": \"sfmc \u2014 ScriptsForMinecraftServer CLI\",\n \"help.section.service\": \" \u670D\u52A1\u63A7\u5236 \u2500\u2500\u2500\u2500\u2500\u2500\",\n \"help.status\": \"\u67E5\u770B\u6240\u6709\u670D\u52A1\u72B6\u6001\",\n \"help.logs\": \"\u67E5\u770B / \u8DDF\u8E2A\u670D\u52A1\u65E5\u5FD7\",\n \"help.start\": \"\u542F\u52A8\u670D\u52A1\uFF08\u6216\u5168\u90E8\uFF09\",\n \"help.stop\": \"\u505C\u6B62\u670D\u52A1\uFF08\u6216\u5168\u90E8\uFF09\",\n \"help.restart\": \"\u91CD\u542F\u670D\u52A1\uFF08\u6216\u5168\u90E8\uFF09\",\n \"help.send\": \"\u5411\u670D\u52A1 stdin \u53D1\u9001\u547D\u4EE4\",\n \"help.section.update\": \" BDS \u66F4\u65B0 \u2500\u2500\u2500\u2500\u2500\u2500\",\n \"help.update\": \"\u68C0\u67E5 / \u5E94\u7528 BDS \u66F4\u65B0\",\n \"help.section.remote\": \" \u8FDC\u7A0B Agent \u2500\u2500\u2500\u2500\u2500\u2500\",\n \"help.remote.status\": \"\u67E5\u770B\u6CE8\u518C\u72B6\u6001\",\n \"help.remote.enroll\": \"\u5411\u63A7\u5236\u5668\u6CE8\u518C\",\n \"help.remote.disable\": \"\u65AD\u5F00\u5E76\u7981\u7528 agent\",\n \"help.section.module\": \" \u6A21\u5757\u7BA1\u7406 \u2500\u2500\u2500\u2500\u2500\u2500\",\n \"help.module.list\": \"\u5217\u51FA\u5DF2\u5B89\u88C5\u6A21\u5757\",\n \"help.module.search\": \"\u641C\u7D22 registry / \u67E5\u770B\u6A21\u5757\u4FE1\u606F\",\n \"help.module.install\": \"\u5B89\u88C5\u6A21\u5757\uFF08--link = \u7B26\u53F7\u94FE\u63A5\uFF09\",\n \"help.module.uninstall\": \"\u5378\u8F7D\u5DF2\u5B89\u88C5\u6A21\u5757\",\n \"help.module.verify\": \"\u6821\u9A8C SHA-256 \u5B8C\u6574\u6027\",\n \"help.module.info\": \"\u663E\u793A\u6A21\u5757\u8BE6\u60C5\",\n \"help.module.toggle\": \"\u542F\u7528/\u7981\u7528\u6A21\u5757\uFF08\u9700 db-server\uFF09\",\n \"help.module.create\": \"\u4EA4\u4E92\u5F0F\u811A\u624B\u67B6\",\n \"help.module.link\": \"\u94FE\u63A5\u672C\u5730\u6A21\u5757\uFF08--link \u5B89\u88C5\uFF09\",\n \"help.module.dev\": \"\u94FE\u63A5 + \u542F\u7528 + \u6784\u5EFA + \u90E8\u7F72\",\n \"help.module.build\": \"\u4ECE\u5DF2\u542F\u7528\u6A21\u5757\u6784\u5EFA BP+RP\",\n \"help.module.reload\": \"\u6784\u5EFA\u5E76\u90E8\u7F72 BP\uFF1B\u5411 BDS \u53D1\u9001 reload\uFF08\u53EF\u7528 --build-only\uFF09\",\n \"help.section.addon\": \" \u9644\u52A0\u5305\u7BA1\u7406 \u2500\u2500\u2500\u2500\u2500\u2500\",\n \"help.addon\": \"\u4E16\u754C\u4FA7 BP/RP \u6536\u4EF6\u7BB1\u7BA1\u7406\",\n \"help.section.general\": \" \u901A\u7528 \u2500\u2500\u2500\u2500\u2500\u2500\",\n \"help.init\": \"\u521D\u59CB\u5316\u5411\u5BFC\",\n \"help.locale\": \"\u67E5\u770B / \u8BBE\u7F6E CLI \u8BED\u8A00\",\n \"help.version\": \"\u663E\u793A\u7248\u672C\",\n \"help.help\": \"\u663E\u793A\u672C\u5E2E\u52A9\",\n \"help.quit\": \"\u9000\u51FA\",\n \"help.shortcuts\": \"\u5FEB\u6377\u952E:\",\n \"help.shortcut.tab\": \"\u8865\u5168\uFF08\u91CD\u590D\u6309\u5FAA\u73AF\uFF09\",\n \"help.shortcut.right\": \"\u63A5\u53D7\u7070\u8272\u5EFA\u8BAE\",\n \"help.shortcut.ctrll\": \"\u8FC7\u6EE4\u65E5\u5FD7\u7EA7\u522B / \u6765\u6E90 / \u5386\u53F2\",\n \"help.shortcut.history\": \"\u547D\u4EE4\u5386\u53F2\",\n\n \"repl.stopping\": \"\u6B63\u5728\u505C\u6B62\u670D\u52A1...\",\n \"repl.bye\": \"bye...\",\n \"repl.forceStop\": \"\u6B63\u5728\u5F3A\u5236\u505C\u6B62\u670D\u52A1...\",\n \"repl.nonInteractive\": \" \u975E\u4EA4\u4E92\u6A21\u5F0F\uFF08\u68C0\u6D4B\u5230\u7BA1\u9053\uFF09\\n\",\n \"repl.historyHeader\": \"\u2500\u2500 \u5386\u53F2 {count} \u884C \u2500\u2500\",\n \"repl.filter\": \"\u8FC7\u6EE4: {level} / {source} / {history}\",\n \"repl.followRequiresTty\": \"\u8DDF\u8E2A\u6A21\u5F0F\u9700\u8981 TTY\",\n \"repl.history.live\": \"\u4EC5\u5B9E\u65F6\uFF08\u4E0D\u56DE\u653E\uFF09\",\n \"repl.history.last50\": \"\u6700\u8FD1 50 \u6761\",\n \"repl.history.last100\": \"\u6700\u8FD1 100 \u6761\",\n \"repl.history.last500\": \"\u6700\u8FD1 500 \u6761\",\n \"repl.history.last1000\": \"\u6700\u8FD1 1000 \u6761\",\n \"repl.history.last1min\": \"\u6700\u8FD1 1 \u5206\u949F\",\n \"repl.history.last5min\": \"\u6700\u8FD1 5 \u5206\u949F\",\n \"repl.history.last15min\": \"\u6700\u8FD1 15 \u5206\u949F\",\n \"repl.history.last1hour\": \"\u6700\u8FD1 1 \u5C0F\u65F6\",\n \"repl.history.all\": \"\u7F13\u51B2\u5168\u90E8\",\n\n \"svc.header\": \"\u670D\u52A1\",\n \"svc.col.name\": \"\u540D\u79F0\",\n \"svc.col.status\": \"\u72B6\u6001\",\n \"svc.col.pid\": \"PID\",\n \"svc.col.uptime\": \"\u8FD0\u884C\u65F6\u957F\",\n \"svc.running\": \"\u8FD0\u884C\u4E2D\",\n \"svc.stopped\": \"\u5DF2\u505C\u6B62\",\n \"svc.unknown\": \"\u672A\u77E5\u670D\u52A1: {name}\uFF08\u53EF\u9009: {list}\uFF09\",\n \"svc.logs.usage\": \"\u7528\u6CD5: logs <service> [-n N] [-f]\",\n \"svc.logs.empty\": \"\uFF08\u6682\u65E0\u65E5\u5FD7\uFF09\",\n \"svc.logs.header\": \"{title} \u65E5\u5FD7\uFF08\u6700\u8FD1 {count} \u6761\uFF09:\",\n \"svc.start.usage\": \"\u7528\u6CD5: sfmc start <service>|-all\",\n \"svc.start.usageShort\": \"\u7528\u6CD5: start <service>|-all\",\n \"svc.stop.usage\": \"\u7528\u6CD5: sfmc stop <service>|-all\",\n \"svc.stop.usageShort\": \"\u7528\u6CD5: stop <service>|-all\",\n \"svc.restart.usage\": \"\u7528\u6CD5: sfmc restart <service>|-all\",\n \"svc.restart.usageShort\": \"\u7528\u6CD5: restart <service>|-all\",\n \"svc.alreadyRunning\": \"{title} \u5DF2\u5728\u8FD0\u884C\uFF08PID {pid}\uFF09\",\n \"svc.alreadyStarting\": \"{title} \u6B63\u5728\u542F\u52A8...\",\n \"svc.started\": \"{title} \u5DF2\u542F\u52A8\",\n \"svc.startFailed\": \"{title} \u5931\u8D25: {message}\",\n \"svc.alreadyStopped\": \"{title} \u5DF2\u505C\u6B62\",\n \"svc.alreadyStopping\": \"{title} \u6B63\u5728\u505C\u6B62...\",\n \"svc.stoppedMsg\": \"{title} \u5DF2\u505C\u6B62\",\n \"svc.stopFailed\": \"{title} \u505C\u6B62\u5931\u8D25: {message}\",\n \"svc.send.usage\": \"\u7528\u6CD5: send <service> <message>\",\n \"svc.notRunning\": \"{title} \u672A\u8FD0\u884C\",\n \"svc.sent\": \"\u5DF2\u53D1\u9001\u81F3 {name}\",\n \"svc.writeFailed\": \"\u5199\u5165\u5931\u8D25\",\n \"svc.restarted\": \"{title} \u5DF2\u91CD\u542F\",\n \"svc.restartFailed\": \"{title} \u91CD\u542F\u5931\u8D25: {message}\",\n \"svc.allStarted\": \"\u5168\u90E8\u670D\u52A1\u5DF2\u542F\u52A8\",\n \"svc.allStopped\": \"\u5168\u90E8\u670D\u52A1\u5DF2\u505C\u6B62\",\n \"svc.updateComplete\": \"\u66F4\u65B0\u5B8C\u6210\",\n \"svc.updateExited\": \"\u66F4\u65B0\u8FDB\u7A0B\u9000\u51FA\uFF0C\u4EE3\u7801 {code}\",\n \"svc.updateError\": \"\u66F4\u65B0\u9519\u8BEF: {message}\",\n \"svc.updateStartBds\": \"\u66F4\u65B0: \u901A\u8FC7\u76D1\u7763\u5668\u542F\u52A8 BDS\",\n \"svc.bdsStarted\": \"BDS \u5DF2\u542F\u52A8\uFF08\u76D1\u7763\u6A21\u5F0F\uFF09\",\n \"svc.bdsStartFailed\": \"BDS \u542F\u52A8\u5931\u8D25: {message}\",\n \"svc.bdsStoppedForUpdate\": \"\u66F4\u65B0\u65F6\u5DF2\u505C\u6B62 BDS\uFF1B\u5C31\u7EEA\u540E\u8BF7\u6267\u884C `start bds`\",\n\n \"remote.enrolled\": \"\u5DF2\u6CE8\u518C\u8FDC\u7A0B agent: {id}\",\n \"remote.disabled\": \"\u8FDC\u7A0B agent \u5DF2\u7981\u7528\",\n \"remote.usage\":\n \"\u7528\u6CD5: sfmc remote enroll <controller-url> <enrollment-token> [name] | sfmc remote status | sfmc remote disable\",\n \"remote.usageShort\":\n \"\u7528\u6CD5: remote enroll <controller-url> <enrollment-token> [name] | remote status | remote disable\",\n\n \"wizard.intro\": \"\u521D\u59CB\u5316\u5411\u5BFC =D\",\n \"wizard.rerun\": \"\u5DF2\u521D\u59CB\u5316\u3002\u662F\u5426\u91CD\u65B0\u8FD0\u884C\u5411\u5BFC\uFF1F\",\n \"wizard.skipped\": \"\u5DF2\u8DF3\u8FC7\u8BBE\u7F6E\",\n \"wizard.step1\": \"\u6B65\u9AA4 1 - \u8FD0\u884C\u73AF\u5883\",\n \"wizard.runtimeRoot\": \"\u8FD0\u884C\u6839\u76EE\u5F55: {root}\",\n \"wizard.npmMissing\": \"npm \u8FD0\u884C\u65F6\u7F3A\u5C11\u5FC5\u9700\u76EE\u5F55: {list}\",\n \"wizard.prepFailed\": \"\u8FD0\u884C\u73AF\u5883\u51C6\u5907\u5931\u8D25: {message}\",\n \"wizard.step2\": \"\u6B65\u9AA4 2 - \u5916\u90E8\u8FD0\u884C\u65F6\",\n \"wizard.step2Note\": \"\u9009\u62E9 BDS\u3001\u6570\u636E\u5E93\u4E0E LLBOT \u8DEF\u5F84\",\n \"wizard.bdsDir\": \"BDS \u5B89\u88C5\u76EE\u5F55\",\n \"wizard.cannotCreateBds\": \"\u65E0\u6CD5\u521B\u5EFA BDS \u5B89\u88C5\u76EE\u5F55: {dir}\",\n \"wizard.enableLlbot\": \"\u542F\u7528 LLBot\uFF08QQ \u6865\uFF09\uFF1F\",\n \"wizard.llbotDir\": \"LLBot \u8FD0\u884C\u76EE\u5F55\",\n \"wizard.usingDefault\": \"\u4F7F\u7528\u9ED8\u8BA4: {path}\",\n \"wizard.dbDir\": \"\u6570\u636E\u5E93\u5B58\u50A8\u76EE\u5F55\",\n \"wizard.dbPort\": \"\u6570\u636E\u5E93\u670D\u52A1\u7AEF\u53E3:\",\n \"wizard.portRange\": \"\u8BF7\u8F93\u5165 1024\u201365535\",\n \"wizard.valueRequired\": \"\u6B64\u9879\u5FC5\u586B\uFF01\",\n \"wizard.step3\": \"\u6B65\u9AA4 3 - BDS \u73AF\u5883\",\n \"wizard.bdsFound\": \"\u5DF2\u627E\u5230: {path}\",\n \"wizard.bdsNotFound\": \"\u672A\u627E\u5230: {path}\",\n \"wizard.eula\": \"\u662F\u5426\u540C\u610F Mojang \u53D1\u5E03\u7684 EULA(https://www.minecraft.net/en-us/eula)\uFF1F\u4F7F\u7528\u672C\u7A0B\u5E8F\u524D\u5FC5\u987B\u540C\u610F\u3002\",\n \"wizard.disagreed\": \"\u5DF2\u62D2\u7EDD\u3002\",\n \"wizard.downloadBds\": \"\u73B0\u5728\u4E0B\u8F7D BDS\uFF1F\",\n \"wizard.selectChannel\": \"\u9009\u62E9\u901A\u9053:\",\n \"wizard.channel.release\": \"Release\",\n \"wizard.channel.releaseHint\": \"\u7A33\u5B9A\u7248\",\n \"wizard.channel.preview\": \"Preview\",\n \"wizard.channel.previewHint\": \"\u53EF\u80FD\u4E0D\u7A33\u5B9A\",\n \"wizard.cannotCreateBackup\": \"\u65E0\u6CD5\u521B\u5EFA BDS \u5907\u4EFD\u76EE\u5F55: {dir}\",\n \"wizard.backupDir\": \"BDS \u5907\u4EFD\u76EE\u5F55\",\n \"wizard.preserve\": \"\u66F4\u65B0\u65F6\u4FDD\u7559\u7684\u6587\u4EF6\uFF08\u4E0B\u6B21\u542F\u7528\u66F4\u65B0\u65F6\uFF09:\",\n \"wizard.preserve.serverProps\": \"\u670D\u52A1\u5668\u914D\u7F6E\",\n \"wizard.preserve.worlds\": \"\u4E16\u754C\u6570\u636E\",\n \"wizard.preserve.config\": \"\u914D\u7F6E\u76EE\u5F55\",\n \"wizard.updaterTip\": \"\u82E5\u627E\u4E0D\u5230 BDS \u8FD0\u884C\u65F6\uFF0C\u7A0D\u540E\u4F1A\u542F\u52A8\u66F4\u65B0\u5668\u3002\\n \u53EF\u5728 configs/bds_updater.json \u4E2D\u7EE7\u7EED\u914D\u7F6E\u3002\",\n \"wizard.step4\": \"\u6B65\u9AA4 4 - \u6A21\u5757\",\n \"wizard.modulesFound\": \"\u53D1\u73B0 {count} \u4E2A\u53EF\u9009\u6A21\u5757\",\n \"wizard.modulesNone\": \"\u672A\u627E\u5230\u6A21\u5757\u76EE\u5F55\",\n \"wizard.enableModules\": \"\u542F\u7528\u6A21\u5757:\",\n \"wizard.emptyHint\": \"\uFF08\u7A7A\uFF09\",\n \"wizard.updatingConfigs\": \"\u6B63\u5728\u66F4\u65B0\u914D\u7F6E\",\n \"wizard.configsUpdated\": \"\u914D\u7F6E\u5DF2\u66F4\u65B0\",\n \"wizard.updatingModules\": \"\u6B63\u5728\u66F4\u65B0\u6A21\u5757\u72B6\u6001\",\n \"wizard.modulesUpdated\": \"\u6A21\u5757\u72B6\u6001\u5DF2\u66F4\u65B0\",\n \"wizard.initDb\": \"\u6B63\u5728\u521D\u59CB\u5316\u6570\u636E\u5E93\",\n \"wizard.dbTimeout\": \"\u6570\u636E\u5E93\u542F\u52A8\u8D85\u65F6\",\n \"wizard.dbOk\": \"\u6570\u636E\u5E93\u5DF2\u521D\u59CB\u5316\",\n \"wizard.downloadingBds\": \"\u6B63\u5728\u4E0B\u8F7D BDS\",\n \"wizard.downloadFail\": \"\u4E0B\u8F7D\u5931\u8D25\u3002\",\n \"wizard.bdsDownloaded\": \"BDS \u5DF2\u4E0B\u8F7D\",\n \"wizard.done\": \"\u5B8C\u6210\uFF01\u8F93\u5165 help \u4E86\u89E3\u7BA1\u7406\u547D\u4EE4\u3002\",\n \"wizard.installing\": \"\u6B63\u5728\u4ECE\u5B98\u65B9 registry \u5B89\u88C5 {count} \u4E2A\u6A21\u5757\",\n \"wizard.installed\": \"\u5DF2\u5B89\u88C5 {count} \u4E2A\",\n \"wizard.installFailed\": \"\u5B89\u88C5\u5931\u8D25: {message}\\n\u53EF\u7A0D\u540E\u6267\u884C: sfmc mod install <id>\",\n \"wizard.fetchMissing\": \"\u7F3A\u5C11 fetch-module \u2014 \u8BF7\u7A0D\u540E\u5BF9\u4EE5\u4E0B\u6A21\u5757\u6267\u884C `sfmc mod install <id>`: {list}\",\n \"wizard.noModulesSelected\": \"\u672A\u9009\u62E9\u6A21\u5757 \u2014 \u884C\u4E3A\u5305\u5C06\u4E3A\u7A7A\uFF0C\u76F4\u5230\u6267\u884C `sfmc mod install <id>` \u5B89\u88C5\u6A21\u5757\u3002\",\n \"wizard.buildingBp\": \"\u6B63\u5728\u6784\u5EFA\u884C\u4E3A\u5305\",\n \"wizard.buildFailed\": \"\u6784\u5EFA\u5931\u8D25: {message}\\n\u7A0D\u540E\u53EF\u6267\u884C `sfmc mod build` \u91CD\u8BD5\u3002\",\n \"wizard.deploying\": \"\u6B63\u5728\u90E8\u7F72\u5230 {path}\",\n \"wizard.restartBds\": \"\u8BF7\u91CD\u542F BDS \u4EE5\u52A0\u8F7D\u65B0\u884C\u4E3A\u5305\u3002\",\n \"wizard.deployFailed\": \"\u90E8\u7F72\u5931\u8D25: {message}\\n\u4FEE\u590D configs/ \u4E2D\u7684 bds_path \u540E\u6267\u884C `sfmc mod reload`\u3002\",\n\n \"prompt.enterPath\": \"\u8F93\u5165\u8DEF\u5F84\",\n \"prompt.browse\": \"\u6D4F\u89C8\u2026\",\n \"prompt.browseHint\": \"\u6253\u5F00\u7CFB\u7EDF\u6587\u4EF6\u5939\u9009\u62E9\u5668\",\n\n \"reload.buildOnly\": \"\uFF08deploy \u5B8C\u6210\uFF1B\u5728 BDS/\u6E38\u620F\u5185\u8F93\u5165 reload\uFF0C\u6216\u53BB\u6389 --build-only \u81EA\u52A8\u53D1\u9001\uFF09\",\n \"reload.bdsNotRunning\": \"BDS \u672A\u8FD0\u884C \u2014 \u5DF2\u5B8C\u6210 build+deploy\u3002\u542F\u52A8\u540E\u8BF7\u5728 BDS \u63A7\u5236\u53F0\u6216\u6E38\u620F\u5185\u8F93\u5165 reload\u3002\",\n \"reload.sent\": \"\u5DF2\u5411 BDS \u53D1\u9001 reload\uFF08\u811A\u672C\u5C06\u6309\u65B0 main.js \u91CD\u65B0\u52A0\u8F7D\uFF09\",\n\n \"bp.usage\": \"\u7528\u6CD5: sfmc behavior-pack|bp <build|deploy>\",\n\n \"modwiz.needTty.create\": \"\u8BF7\u5728\u4EA4\u4E92\u7EC8\u7AEF\u8FD0\u884C: sfmc module create\",\n \"modwiz.needTty.link\": \"\u8BF7\u5728\u4EA4\u4E92\u7EC8\u7AEF\u8FD0\u884C: sfmc module link\",\n \"modwiz.needTty.dev\": \"\u8BF7\u5728\u4EA4\u4E92\u7EC8\u7AEF\u8FD0\u884C: sfmc module dev\",\n \"modwiz.sfmcModulesPath\": \"sfmc-modules: {path}\",\n \"modwiz.pickModulesRoot\": \"sfmc-modules \u6839\u76EE\u5F55\uFF08\u542B packages/ \u4E0E index.json\uFF09\",\n \"modwiz.noPackages\": \"\u672A\u627E\u5230 packages/ \u5B50\u76EE\u5F55: {path}\",\n \"modwiz.noFetch\": \"\u672A\u627E\u5230 fetch-module.mjs\",\n \"modwiz.enableModule\": \"\u542F\u7528\u8BE5\u6A21\u5757\uFF1F\uFF08\u5199\u5165 module-lock.json\uFF0C\u9700 db-server\uFF09\",\n \"modwiz.buildDeploy\": \"\u6784\u5EFA\u5E76\u90E8\u7F72\u884C\u4E3A\u5305\uFF1F\uFF08\u5B8C\u6210\u540E\u53EF\u7528 `sfmc mod reload` \u6216\u5728 BDS/\u6E38\u620F\u5185\u8F93\u5165 reload\uFF09\",\n \"modwiz.task.build\": \"\u6784\u5EFA\u884C\u4E3A\u5305\",\n \"modwiz.task.deploy\": \"\u90E8\u7F72\u884C\u4E3A\u5305\",\n \"modwiz.reloadHint\": \"\u8BF7\u7528 `sfmc mod reload`\uFF08build+deploy \u540E\u5411 BDS \u53D1 reload\uFF09\uFF1B\u4E5F\u53EF\u624B\u52A8\u5728 BDS/\u6E38\u620F\u5185\u8F93\u5165 reload\u3002\",\n \"modwiz.kebab\": \"\u987B\u4E3A\u5C0F\u5199 kebab-case\uFF0C\u4F8B\u5982 my-feature\",\n \"modwiz.createIntro\": \"\u6A21\u5757\u811A\u624B\u67B6\",\n \"modwiz.folderId\": \"\u6A21\u5757\u6587\u4EF6\u5939\u540D\uFF08install id\uFF09\",\n \"modwiz.dirExists\": \"\u76EE\u5F55\u5DF2\u5B58\u5728: {path}\",\n \"modwiz.displayName\": \"\u663E\u793A\u540D\u79F0\",\n \"modwiz.template\": \"\u811A\u624B\u67B6\u6A21\u677F\",\n \"modwiz.tpl.minimal\": \"\u6700\u5C0F\u6A21\u5757\",\n \"modwiz.tpl.minimalHint\": \"\u547D\u4EE4 + \u6743\u9650\u5360\u4F4D\",\n \"modwiz.tpl.db\": \"\u542B DB \u6743\u9650\u5360\u4F4D\",\n \"modwiz.tpl.dbHint\": \"manifest \u9884\u7F6E db:read/write\",\n \"modwiz.noNewModule\": \"\u672A\u627E\u5230 tools/new-module.mjs\uFF08\u65C1\u8DEF sfmc-modules \u6216\u4E3B\u4ED3 tools/\uFF09\",\n \"modwiz.genPackage\": \"\u751F\u6210 packages/{id}\",\n \"modwiz.skeletonWritten\": \"\u9AA8\u67B6\u5DF2\u5199\u5165 sfmc-modules\",\n \"modwiz.createdNote\": \"\u5DF2\u521B\u5EFA {path}\",\n \"modwiz.linkAsk\": \"\u94FE\u63A5\u5230\u4E3B\u4ED3 modules/packages/\uFF1F\uFF08--link\uFF0C\u6539\u6E90\u7801\u5373\u751F\u6548\uFF09\",\n \"modwiz.link\": \"\u94FE\u63A5\",\n \"modwiz.linkFailed\": \"\u94FE\u63A5\u5931\u8D25\",\n \"modwiz.enable\": \"\u542F\u7528\",\n \"modwiz.createDone\": \"\u5B8C\u6210\u3002\u6E90\u7801: {path}\",\n \"modwiz.moduleCreated\": \"\u6A21\u5757 {id} \u5DF2\u521B\u5EFA\",\n \"modwiz.linkIntro\": \"\u94FE\u63A5\u672C\u5730\u6A21\u5757\",\n \"modwiz.noLinkable\": \"{path}/packages \u4E0B\u6CA1\u6709\u6A21\u5757\",\n \"modwiz.noLinkableShort\": \"\u6CA1\u6709\u53EF\u94FE\u63A5\u7684\u6A21\u5757\u5305\",\n \"modwiz.pickLink\": \"\u9009\u62E9\u8981\u94FE\u63A5\u7684\u6A21\u5757\u5305\",\n \"modwiz.linking\": \"\u94FE\u63A5 {id}\",\n \"modwiz.linkSynced\": \"catalog + lock \u5DF2\u540C\u6B65\",\n \"modwiz.linked\": \"\u5DF2\u94FE\u63A5 {id}\",\n \"modwiz.devIntro\": \"\u672C\u5730\u6A21\u5757\u5F00\u53D1\",\n \"modwiz.noDevPackages\": \"{path}/packages \u4E0B\u6CA1\u6709\u6A21\u5757\",\n \"modwiz.noDevShort\": \"\u6CA1\u6709\u53EF\u5F00\u53D1\u7684\u6A21\u5757\u5305\",\n \"modwiz.pickDev\": \"\u9009\u62E9\u8981\u8054\u8C03\u7684\u6A21\u5757\",\n \"modwiz.enabling\": \"\u542F\u7528 {id}\",\n \"modwiz.devHint\":\n \"\u4FEE\u6539 sfmc-modules \u6E90\u7801\u540E\u6267\u884C `sfmc mod reload`\uFF08build + deploy + \u5411 BDS \u53D1 reload\uFF09\u3002\\n\u6216\u518D\u6B21\u8FD0\u884C `sfmc module dev`\uFF0C\u7136\u540E\u5728 BDS/\u6E38\u620F\u5185\u8F93\u5165 reload\u3002\",\n \"modwiz.devDone\": \"{id} \u5DF2\u94FE\u63A5\u5E76\u5B8C\u6210 build + deploy\",\n \"modwiz.devReady\": \"{id} \u5F00\u53D1\u73AF\u5883\u5C31\u7EEA\",\n\n \"mod.usage\": \"\u7528\u6CD5: sfmc {cmds} <{subs}> [args]\",\n \"mod.list.title\": \"\u5DF2\u5B89\u88C5\u6A21\u5757\",\n \"mod.noneInstalled\": \"\\n\u672A\u5B89\u88C5\u6A21\u5757\u3002\u8BF7\u5C06\u6A21\u5757\u76EE\u5F55\u653E\u5230 {dir}\uFF0C\u6216\u6267\u884C `sfmc mod install <id>`\u3002\\n\",\n \"mod.notInRegistry\": '\u6A21\u5757 \"{query}\" \u4E0D\u5728\u5B98\u65B9 registry \u4E2D\u3002',\n \"mod.info.usage\": \"\u7528\u6CD5: sfmc module|mod info <id>\",\n \"mod.notInstalledAt\": \"\u6A21\u5757 {id} \u672A\u5B89\u88C5\u4E8E {path}\",\n \"mod.notInstalled\": \"\u6A21\u5757 {id} \u672A\u5B89\u88C5\",\n \"mod.verifyOk\": \"{id} \u6B63\u5E38\\n fingerprint: {fp}\\n\",\n \"mod.dbUnreachable\": \"\u65E0\u6CD5\u8FDE\u63A5 db-server {url}: {message}\u3002db \u670D\u52A1\u662F\u5426\u5728\u8FD0\u884C\uFF1F\uFF08sfmc> start db\uFF09\",\n \"mod.toggleFailed\": \"{action} {id} \u5931\u8D25: {err}\",\n \"mod.action.enabled\": \"\u5DF2\u542F\u7528\",\n \"mod.action.disabled\": \"\u5DF2\u7981\u7528\",\n \"mod.toggleOk\": \"{label} {id}\",\n \"mod.toggleBadBody\": \"{action} {id} \u8FD4\u56DE: {text}\",\n \"mod.enable.usage\": \"\u7528\u6CD5: sfmc module|mod enable <id>\",\n \"mod.disable.usage\": \"\u7528\u6CD5: sfmc module|mod disable <id>\",\n \"mod.install.usage\": \"\u7528\u6CD5: sfmc module|mod install <id> [id2 ...] [--from <source>] [--link]\",\n \"mod.linkNeedsFrom\":\n \"--link \u9700\u8981 --from dir:<path>\uFF0C\u6216\u8BBE\u7F6E SFMC_MODULES_ROOT / \u65C1\u8DEF ../sfmc-modules\u3002\\n\u793A\u4F8B: sfmc mod install land --from dir:../sfmc-modules/packages/land --link\",\n \"mod.fetchMissing\": \"\u672A\u627E\u5230 fetch-module\u3002\u8BF7\u5B89\u88C5 @sfmc-bds/sfmc \u6216\u5728 monorepo \u5185\u8FD0\u884C\u3002\",\n \"mod.uninstall.usage\": \"\u7528\u6CD5: sfmc module|mod uninstall <id>\",\n \"mod.notInstalledFolder\": \"\u6A21\u5757 {id} \u672A\u5B89\u88C5\uFF08\u76EE\u5F55\u4E0D\u5B58\u5728: {path}\uFF09\",\n \"mod.removed\": \"\u5DF2\u4ECE {path} \u79FB\u9664 {id}\\n\",\n\n \"pack.built\": \"\u5DF2\u6784\u5EFA\u5305\u81F3 {path}\",\n \"pack.buildFailed\": \"pack \u6784\u5EFA\u5931\u8D25: {message}\",\n \"pack.deployed\": \"\u5DF2\u90E8\u7F72\u5305\",\n \"pack.deployFailed\": \"pack \u90E8\u7F72\u5931\u8D25: {message}\",\n \"pack.statusFailed\": \"pack status \u5931\u8D25: {message}\",\n \"pack.listFailed\": \"pack list \u5931\u8D25: {message}\",\n \"pack.noCatalog\": \"\u5C1A\u65E0\u5DF2\u90E8\u7F72 catalog \u2014 \u8BF7\u5148\u6267\u884C `sfmc pack deploy`\",\n \"pack.noUuid\": \"catalog \u4E2D\u65E0 {kind} \u5305 uuid\",\n \"pack.actionFailed\": \"{action} \u5931\u8D25: {detail}\",\n \"pack.enabledOk\": \"\u5DF2\u542F\u7528 {kind} \u5305 {uuid}\",\n \"pack.disabledOk\": \"\u5DF2\u7981\u7528 {kind} \u5305 {uuid}\",\n \"pack.actionErr\": \"pack {action} \u5931\u8D25: {message}\",\n \"pack.usage\": \"\u7528\u6CD5: sfmc pack <{subs}> [behavior|resource]\",\n\n \"packs.restartHint\": \"\u9700\u91CD\u542F BDS \u540E\u751F\u6548\",\n \"packs.rejoinHint\": \"\u5BA2\u6237\u7AEF\u9700\u91CD\u8FDB\u670D\u4EE5\u4E0B\u8F7D\u8D44\u6E90\u5305\",\n \"packs.conflict\": \"\u68C0\u6D4B\u5230\u51B2\u7A81\uFF1A\",\n \"packs.conflict.existing\": \" \u5DF2\u6709: {name} v{version} {uuid}\\n {dir}\",\n \"packs.conflict.incoming\": \" \u65B0\u6765: {name} v{version} {uuid}\",\n \"packs.overwriteAsk\": \"\u662F\u5426\u8986\u76D6\u5DF2\u6709\u5305\uFF1F\",\n \"packs.badManifest\": \"\u65E0\u6CD5\u8BC6\u522B manifest\uFF08\u7F3A\u5C11 resources/data/script\uFF09\",\n \"packs.skippedNoOverwrite\": \"\u5DF2\u8DF3\u8FC7\uFF08\u672A\u8986\u76D6\uFF09\",\n \"packs.conflictSkip\": \"[packs] \u51B2\u7A81\u8DF3\u8FC7\uFF08\u975E\u4EA4\u4E92\uFF0C\u53EF\u7528 --force\uFF09: {name}\",\n \"packs.inboxSkip\": \"[packs] \u8DF3\u8FC7\u6536\u4EF6\u7BB1\uFF1A{message}\",\n \"packs.inboxFound\": \"[packs] \u6536\u4EF6\u7BB1\u53D1\u73B0 {count} \u9879 \u2192 {level}\",\n \"packs.alreadyDone\": \"[packs] \u5DF2\u5904\u7406\u8FC7\uFF0C\u8DF3\u8FC7: {name}\",\n \"packs.dryRunExtract\": \"[packs] dry-run \u89E3\u538B: {name}\",\n \"packs.noPackRoot\": \"[packs] \u672A\u627E\u5230\u5305\u6839: {name}\",\n \"packs.installedEnabled\": \"[packs] \u5DF2\u5B89\u88C5\u5E76\u542F\u7528 {kind}: {name} v{version}\",\n \"packs.installFailed\": \"[packs] \u5B89\u88C5\u5931\u8D25 {name}: {reason}\",\n \"packs.listEmpty\": \"\uFF08\u65E0\uFF09\",\n \"packs.list.bpHeader\": \"\u884C\u4E3A\u5305:\",\n \"packs.list.rpHeader\": \"\u8D44\u6E90\u5305:\",\n \"packs.list.on\": \"\u5F00 \",\n \"packs.list.off\": \"\u5173\",\n \"packs.doctor.parseFail\": \"{file} \u65E0\u6CD5\u89E3\u6790\",\n \"packs.doctor.missingDir\": \"\u6E05\u5355\u6709 uuid \u4F46\u76EE\u5F55\u7F3A\u5931 ({kind}): {uuid}\",\n \"packs.doctor.versionMismatch\": \"\u7248\u672C\u4E0D\u4E00\u81F4 ({kind}): {folder} \u6E05\u5355 {listVer} vs \u78C1\u76D8 {diskVer}\",\n \"packs.doctor.notEnabled\": \"\u5DF2\u5B89\u88C5\u672A\u542F\u7528: [{kind}] {folder} ({uuid})\",\n \"packs.doctor.ok\": \"doctor: \u672A\u53D1\u73B0\u95EE\u9898\",\n \"packs.doctor.found\": \"doctor \u53D1\u73B0 {count} \u9879:\\n{list}\",\n \"packs.notFound\": \"\u672A\u627E\u5230\u5305: {id}\",\n \"packs.toggleDone\": \"{verb} {folder} \u5B8C\u6210\u3002{hint}\",\n \"packs.bump.usage\": \"\u7528\u6CD5: packs bump <uuid|folder> \uFF08\u4EC5 RP\uFF09\",\n \"packs.bump.rpOnly\": \"packs bump \u4EC5\u652F\u6301\u8D44\u6E90\u5305 (RP)\",\n \"packs.bumped\": \"\u5DF2 bump {folder} \u2192 v{version}\u3002{restart}\uFF1B{rejoin}\",\n \"packs.pathMissing\": \"\u8DEF\u5F84\u4E0D\u5B58\u5728: {path}\",\n \"packs.notArchive\": \"\u4E0D\u662F\u5305\u76EE\u5F55\u6216 .zip/.mcpack/.mcaddon\",\n \"packs.noManifestRoot\": \"\u672A\u53D1\u73B0\u542B manifest.json \u7684\u5305\u6839\",\n \"packs.installedLine\": \"\u5DF2\u5B89\u88C5\u5E76\u542F\u7528: {name} v{version} ({kind})\",\n \"packs.skipFailLine\": \"\u8DF3\u8FC7/\u5931\u8D25: {name} ({reason})\",\n \"packs.inboxEmpty\": \"\u6536\u4EF6\u7BB1\u4E3A\u7A7A\",\n \"packs.search.usage\": \"\u7528\u6CD5: packs search <query>\uFF08CurseForge \u8FDC\u7A0B\u641C\u7D22\uFF0C\u9700 API Key\uFF09\",\n \"packs.bind.usage\": \"\u7528\u6CD5: packs bind <uuid|folder> <projectId|slug|url>\",\n \"packs.unbind.usage\": \"\u7528\u6CD5: packs unbind <uuid|folder>\",\n \"packs.unbindOk\": \"\u5DF2\u89E3\u9664\u7ED1\u5B9A {uuid}\uFF08\u7F16\u8F91 {path} \u4EA6\u53EF\uFF09\",\n \"packs.unbindMiss\": \"\u672A\u627E\u5230\u7ED1\u5B9A: {id}\",\n \"packs.update.usage\": \"\u7528\u6CD5: packs update <uuid|folder|--all>\",\n \"packs.toggle.usage\": \"\u7528\u6CD5: packs {verb} <uuid|folder>\",\n \"packs.uninstall.usage\":\n \"\u7528\u6CD5: packs uninstall [uuid|folder...] [--purge] [--no-paired]\\n \u65E0\u53C2\u6570\u4E14\u4E3A TTY \u65F6\u8FDB\u5165\u591A\u9009\uFF1B\u53EF\u4E00\u6B21\u4F20\u591A\u4E2A id\",\n \"packs.uninstall.protected\": \"\u62D2\u7EDD\u5378\u8F7D\u5E73\u53F0\u805A\u5408\u5305: {folder}\uFF08\u8BF7\u7528 sfmc mod\uFF09\",\n \"packs.uninstall.trashed\": \"\u5DF2\u5378\u8F7D\u5E76\u79FB\u5165\u56DE\u6536\u7AD9: {folder}\\n \u2192 {dest}\",\n \"packs.uninstall.deleted\": \"\u5DF2\u5378\u8F7D\u5E76\u5220\u9664: {folder}\",\n \"packs.uninstall.dirMissing\": \"\u6E05\u5355\u5DF2\u79FB\u9664\uFF0C\u76EE\u5F55\u672C\u5C31\u4E0D\u5B58\u5728: {folder}\",\n \"packs.uninstall.bindingRemoved\": \"\u5DF2\u6E05\u9664\u66F4\u65B0\u6E90\u7ED1\u5B9A: {uuid}\",\n \"packs.uninstall.pick\": \"\u9009\u62E9\u8981\u5378\u8F7D\u7684\u8D44\u6E90\u5305\uFF08\u7A7A\u683C\u52FE\u9009\uFF0C\u56DE\u8F66\u786E\u8BA4\uFF09\",\n \"packs.uninstall.summary\": \"\u5C06\u5378\u8F7D\u4EE5\u4E0B {count} \u9879\uFF08\u542B\u914D\u5BF9 RP\uFF09\uFF1A\",\n \"packs.uninstall.confirm\": \"\u786E\u8BA4\u5378\u8F7D\u8FD9 {count} \u9879\uFF1F\",\n \"packs.uninstall.cancelled\": \"\u5DF2\u53D6\u6D88\u5378\u8F7D\",\n \"packs.uninstall.none\": \"\u6CA1\u6709\u53EF\u5378\u8F7D\u7684\u8D44\u6E90\u5305\",\n \"packs.uninstall.pairedOf\": \"\uFF08\u914D\u5BF9\u81EA {folder}\uFF09\",\n \"packs.install.usage\": \"\u7528\u6CD5: packs install [path|--inbox] [--force]\",\n \"packs.installInbox\": \"\u6536\u4EF6\u7BB1\u5B89\u88C5: \u6210\u529F={installed} \u8DF3\u8FC7={skipped} \u5931\u8D25={failed}\",\n \"packs.scanResult\": \"\u626B\u63CF: \u6210\u529F={installed} \u8DF3\u8FC7={skipped} \u5931\u8D25={failed}\",\n \"packs.unknownSub\": \"\u672A\u77E5 packs \u5B50\u547D\u4EE4: {verb}\\n\",\n \"packs.usage.title\": \"{cmd}\uFF08\u522B\u540D {alias}\uFF09\u2014 \u4E16\u754C\u4FA7\u4EFB\u610F BP/RP\",\n \"packs.usage.bump\": \"\u4EC5 RP\uFF0Cpatch \u7248\u672C +1\",\n \"packs.usage.cfSearch\": \"CurseForge \u641C\u7D22\uFF08\u9700 Key\uFF09\",\n \"packs.usage.inbox\": \"\u6536\u4EF6\u7BB1: {path}\",\n \"packs.usage.trash\": \"\u5378\u8F7D\u56DE\u6536\u7AD9: {path}\uFF08pack-update.json \u2192 uninstall.recycleBin\uFF09\",\n \"packs.usage.sources\": \"\u66F4\u65B0\u6E90\u7ED1\u5B9A: {path}\uFF08\u53EF\u624B\u6539 enabled/projectId\uFF09\",\n \"packs.usage.enableNote\": \"\u5B89\u88C5\u9ED8\u8BA4\u5199\u5165 world_*_packs.json \u542F\u7528\uFF1B{hint}\u3002\",\n \"packs.usage.moduleNote\": \"\u6A21\u5757\u805A\u5408\u8BF7\u7528 {cmd}\uFF08\u975E\u672C\u547D\u4EE4\uFF09\u3002\",\n\n \"packUpdate.needKey\": \"\u672A\u914D\u7F6E\u4EFB\u4F55 pack \u66F4\u65B0\u6E90\u3002\u8BF7\u7F16\u8F91 {path} \u7684 providers.*.apiKey\uFF08\u6216\u5BF9\u5E94\u73AF\u5883\u53D8\u91CF\uFF09\u3002CurseForge\uFF1Ahttps://console.curseforge.com/ \u7533\u8BF7 Studios Key \u2192 providers.curseforge.apiKey / CURSEFORGE_API_KEY\uFF08\u4E0D\u8981\u7528 Upload API \u7684 UUID Token\uFF09\",\n \"packUpdate.probeNoName\": \"\u65E0\u6CD5\u4ECE manifest / \u6587\u4EF6\u5939\u540D\u6D3E\u751F\u53EF\u641C\u7D22\u540D\u79F0\",\n \"packUpdate.probeQueries\": \"\u63A2\u6D4B\u67E5\u8BE2\u6E90 header={header} folder={folder}\\n \u2192 {queries}\",\n \"packUpdate.probeFail\": \"\u63A2\u6D4B\u66F4\u65B0\u6E90\u5931\u8D25: {message}\",\n \"packUpdate.probeMiss\": \"\u672A\u5728 CurseForge \u627E\u5230\u5339\u914D: {name}\",\n \"packUpdate.probeLowScore\": \"\u5019\u9009\u76F8\u4F3C\u5EA6\u504F\u4F4E: {name} \u2192 {hit} ({score}) {url}\",\n \"packUpdate.probeHit\": \"\u627E\u5230\u53EF\u80FD\u7684\u66F4\u65B0\u6E90: {name} \u2192 {hit} ({score})\\n {url}\",\n \"packUpdate.editHint\": \"\u7A0D\u540E\u53EF\u7F16\u8F91 {path} \u4FEE\u6539/\u5173\u95ED\u5BF9\u5E94\u6E90\uFF08enabled: false\uFF09\",\n \"packUpdate.confirmBind\": \"\u5C06\u6B64 CurseForge \u9879\u76EE\u7ED1\u5B9A\u4E3A\u66F4\u65B0\u6E90\uFF1F {hit}\",\n \"packUpdate.probeAutoBind\": \"\u975E\u4EA4\u4E92\u73AF\u5883\uFF1A\u81EA\u52A8\u7ED1\u5B9A \u2192 {provider}:{slug}\\n {path}\",\n \"packUpdate.probeNoAutoBind\": \"\u975E\u4EA4\u4E92\u73AF\u5883\u4E0D\u81EA\u52A8\u7ED1\u5B9A\uFF1B\u53EF\u7528 packs bind \u624B\u52A8\u7ED1\u5B9A\",\n \"packUpdate.bindSkipped\": \"\u5DF2\u8DF3\u8FC7\u7ED1\u5B9A\",\n \"packUpdate.bindOk\": \"\u5DF2\u7ED1\u5B9A {uuid} \u2192 {provider}:{slug} [{enabled}]\\n \u6587\u4EF6: {path}\",\n \"packUpdate.bindBpOnly\": \"\u53EA\u80FD\u4E3A\u884C\u4E3A\u5305\uFF08BP\uFF09\u7ED1\u5B9A\u66F4\u65B0\u6E90\",\n \"packUpdate.resolveFail\": \"\u65E0\u6CD5\u89E3\u6790 CurseForge \u9879\u76EE: {ref}\",\n \"packUpdate.searchEmpty\": \"CurseForge \u65E0\u7ED3\u679C: {query}\",\n \"packUpdate.sourcesHeader\": \"\u914D\u7F6E: {config}\\n\u7ED1\u5B9A: {sources}\",\n \"packUpdate.sourcesEmpty\": \"\u5C1A\u65E0\u7ED1\u5B9A\u3002\u5B89\u88C5 BP \u540E\u4F1A\u5C1D\u8BD5\u63A2\u6D4B\uFF0C\u6216\u4F7F\u7528 packs bind\u3002\",\n \"packUpdate.disabled\": \"pack-update \u5DF2\u5728\u914D\u7F6E\u4E2D\u7981\u7528\",\n \"packUpdate.bindingDisabled\": \"\u7ED1\u5B9A\u5DF2\u5173\u95ED (enabled: false)\",\n \"packUpdate.noRemoteFile\": \"\u8FDC\u7A0B\u65E0\u53EF\u7528\u6587\u4EF6\",\n \"packUpdate.fileNewer\": \"\u8FDC\u7A0B\u6587\u4EF6\u66F4\u65B0: {file} (id={id})\",\n \"packUpdate.upToDate\": \"\u5DF2\u662F\u6700\u65B0\",\n \"packUpdate.needSync\": \"\u8FDC\u7A0B\u6587\u4EF6\u5C1A\u672A\u540C\u6B65\u5230\u4E16\u754C\u76EE\u5F55\uFF08\u7248\u672C {local} \u2261 {remote}\uFF0CfileId={id}\uFF09\",\n \"packUpdate.remoteNoBp\": \"\u8FDC\u7A0B\u5F52\u6863\u4E2D\u672A\u627E\u5230\u884C\u4E3A\u5305\",\n \"packUpdate.bpNewer\": \"BP \u6709\u66F4\u65B0 {local} \u2192 {remote}\",\n \"packUpdate.installFail\": \"\u5B89\u88C5\u5931\u8D25: {reason}\",\n \"packUpdate.installedBp\": \"\u5DF2\u5199\u5165 BP \u2192 {dir} (v{version})\",\n \"packUpdate.installedRp\": \"\u5DF2\u5199\u5165 RP \u2192 {dir} (v{version})\",\n \"packUpdate.rpInstallMiss\": \"\u5F52\u6863\u542B RP \u4F46\u672A\u80FD\u5B89\u88C5\u914D\u5BF9\u8D44\u6E90\u5305\uFF08\u68C0\u67E5 dependencies / pairedResourceUuid\uFF09\",\n \"packUpdate.applied\": \"\u5DF2\u66F4\u65B0 {name} BP={bp} RP={rp}\",\n \"packUpdate.noBinding\": \"\u672A\u627E\u5230\u66F4\u65B0\u6E90\u7ED1\u5B9A: {id}\",\n \"packUpdate.startupFail\": \"\u542F\u52A8\u65F6\u68C0\u67E5\u66F4\u65B0\u5931\u8D25: {message}\",\n};\n"],
5
- "mappings": "AAGO,MAAM,OAAmC;AAAA,EAC9C,oBAAoB;AAAA,EACpB,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,yBAAyB;AAAA,EACzB,uBAAuB;AAAA,EACvB,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AAAA,EACf,cAAc;AAAA,EAEd,kBAAkB;AAAA,EAClB,cAAc;AAAA,EACd,kBAAkB;AAAA,EAClB,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EAEjB,cAAc;AAAA,EACd,wBAAwB;AAAA,EACxB,eAAe;AAAA,EACf,aAAa;AAAA,EACb,cAAc;AAAA,EACd,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,uBAAuB;AAAA,EACvB,eAAe;AAAA,EACf,uBAAuB;AAAA,EACvB,sBAAsB;AAAA,EACtB,sBAAsB;AAAA,EACtB,uBAAuB;AAAA,EACvB,uBAAuB;AAAA,EACvB,oBAAoB;AAAA,EACpB,sBAAsB;AAAA,EACtB,uBAAuB;AAAA,EACvB,yBAAyB;AAAA,EACzB,sBAAsB;AAAA,EACtB,oBAAoB;AAAA,EACpB,sBAAsB;AAAA,EACtB,sBAAsB;AAAA,EACtB,oBAAoB;AAAA,EACpB,mBAAmB;AAAA,EACnB,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,EACtB,sBAAsB;AAAA,EACtB,cAAc;AAAA,EACd,wBAAwB;AAAA,EACxB,aAAa;AAAA,EACb,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,aAAa;AAAA,EACb,kBAAkB;AAAA,EAClB,qBAAqB;AAAA,EACrB,uBAAuB;AAAA,EACvB,uBAAuB;AAAA,EACvB,yBAAyB;AAAA,EAEzB,iBAAiB;AAAA,EACjB,YAAY;AAAA,EACZ,kBAAkB;AAAA,EAClB,uBAAuB;AAAA,EACvB,sBAAsB;AAAA,EACtB,eAAe;AAAA,EACf,0BAA0B;AAAA,EAC1B,qBAAqB;AAAA,EACrB,uBAAuB;AAAA,EACvB,wBAAwB;AAAA,EACxB,wBAAwB;AAAA,EACxB,yBAAyB;AAAA,EACzB,yBAAyB;AAAA,EACzB,yBAAyB;AAAA,EACzB,0BAA0B;AAAA,EAC1B,0BAA0B;AAAA,EAC1B,oBAAoB;AAAA,EAEpB,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,eAAe;AAAA,EACf,kBAAkB;AAAA,EAClB,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AAAA,EACf,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,wBAAwB;AAAA,EACxB,kBAAkB;AAAA,EAClB,uBAAuB;AAAA,EACvB,qBAAqB;AAAA,EACrB,0BAA0B;AAAA,EAC1B,sBAAsB;AAAA,EACtB,uBAAuB;AAAA,EACvB,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,sBAAsB;AAAA,EACtB,uBAAuB;AAAA,EACvB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,sBAAsB;AAAA,EACtB,oBAAoB;AAAA,EACpB,mBAAmB;AAAA,EACnB,sBAAsB;AAAA,EACtB,kBAAkB;AAAA,EAClB,sBAAsB;AAAA,EACtB,2BAA2B;AAAA,EAE3B,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,gBACE;AAAA,EACF,qBACE;AAAA,EAEF,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,gBAAgB;AAAA,EAChB,sBAAsB;AAAA,EACtB,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,iBAAiB;AAAA,EACjB,0BAA0B;AAAA,EAC1B,sBAAsB;AAAA,EACtB,mBAAmB;AAAA,EACnB,uBAAuB;AAAA,EACvB,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,oBAAoB;AAAA,EACpB,wBAAwB;AAAA,EACxB,gBAAgB;AAAA,EAChB,mBAAmB;AAAA,EACnB,sBAAsB;AAAA,EACtB,eAAe;AAAA,EACf,oBAAoB;AAAA,EACpB,sBAAsB;AAAA,EACtB,wBAAwB;AAAA,EACxB,0BAA0B;AAAA,EAC1B,8BAA8B;AAAA,EAC9B,0BAA0B;AAAA,EAC1B,8BAA8B;AAAA,EAC9B,6BAA6B;AAAA,EAC7B,oBAAoB;AAAA,EACpB,mBAAmB;AAAA,EACnB,+BAA+B;AAAA,EAC/B,0BAA0B;AAAA,EAC1B,0BAA0B;AAAA,EAC1B,qBAAqB;AAAA,EACrB,gBAAgB;AAAA,EAChB,uBAAuB;AAAA,EACvB,sBAAsB;AAAA,EACtB,wBAAwB;AAAA,EACxB,oBAAoB;AAAA,EACpB,0BAA0B;AAAA,EAC1B,yBAAyB;AAAA,EACzB,0BAA0B;AAAA,EAC1B,yBAAyB;AAAA,EACzB,iBAAiB;AAAA,EACjB,oBAAoB;AAAA,EACpB,eAAe;AAAA,EACf,yBAAyB;AAAA,EACzB,uBAAuB;AAAA,EACvB,wBAAwB;AAAA,EACxB,eAAe;AAAA,EACf,qBAAqB;AAAA,EACrB,oBAAoB;AAAA,EACpB,wBAAwB;AAAA,EACxB,uBAAuB;AAAA,EACvB,4BAA4B;AAAA,EAC5B,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,EACtB,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,uBAAuB;AAAA,EAEvB,oBAAoB;AAAA,EACpB,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EAErB,oBAAoB;AAAA,EACpB,wBAAwB;AAAA,EACxB,eAAe;AAAA,EAEf,YAAY;AAAA,EAEZ,yBAAyB;AAAA,EACzB,uBAAuB;AAAA,EACvB,sBAAsB;AAAA,EACtB,0BAA0B;AAAA,EAC1B,0BAA0B;AAAA,EAC1B,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,uBAAuB;AAAA,EACvB,sBAAsB;AAAA,EACtB,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,EACtB,qBAAqB;AAAA,EACrB,gBAAgB;AAAA,EAChB,sBAAsB;AAAA,EACtB,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,sBAAsB;AAAA,EACtB,mBAAmB;AAAA,EACnB,sBAAsB;AAAA,EACtB,0BAA0B;AAAA,EAC1B,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,EACtB,qBAAqB;AAAA,EACrB,0BAA0B;AAAA,EAC1B,sBAAsB;AAAA,EACtB,kBAAkB;AAAA,EAClB,eAAe;AAAA,EACf,qBAAqB;AAAA,EACrB,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,wBAAwB;AAAA,EACxB,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,0BAA0B;AAAA,EAC1B,mBAAmB;AAAA,EACnB,kBAAkB;AAAA,EAClB,qBAAqB;AAAA,EACrB,iBAAiB;AAAA,EACjB,mBAAmB;AAAA,EACnB,wBAAwB;AAAA,EACxB,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EACnB,kBACE;AAAA,EACF,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EAEnB,aAAa;AAAA,EACb,kBAAkB;AAAA,EAClB,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,sBAAsB;AAAA,EACtB,oBAAoB;AAAA,EACpB,gBAAgB;AAAA,EAChB,qBAAqB;AAAA,EACrB,oBAAoB;AAAA,EACpB,sBAAsB;AAAA,EACtB,uBAAuB;AAAA,EACvB,gBAAgB;AAAA,EAChB,qBAAqB;AAAA,EACrB,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,qBACE;AAAA,EACF,oBAAoB;AAAA,EACpB,uBAAuB;AAAA,EACvB,0BAA0B;AAAA,EAC1B,eAAe;AAAA,EAEf,cAAc;AAAA,EACd,oBAAoB;AAAA,EACpB,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,mBAAmB;AAAA,EACnB,kBAAkB;AAAA,EAClB,eAAe;AAAA,EACf,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EACnB,kBAAkB;AAAA,EAClB,cAAc;AAAA,EAEd,qBAAqB;AAAA,EACrB,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,EAClB,2BAA2B;AAAA,EAC3B,2BAA2B;AAAA,EAC3B,sBAAsB;AAAA,EACtB,qBAAqB;AAAA,EACrB,4BAA4B;AAAA,EAC5B,sBAAsB;AAAA,EACtB,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,uBAAuB;AAAA,EACvB,oBAAoB;AAAA,EACpB,0BAA0B;AAAA,EAC1B,uBAAuB;AAAA,EACvB,mBAAmB;AAAA,EACnB,uBAAuB;AAAA,EACvB,uBAAuB;AAAA,EACvB,iBAAiB;AAAA,EACjB,kBAAkB;AAAA,EAClB,0BAA0B;AAAA,EAC1B,2BAA2B;AAAA,EAC3B,gCAAgC;AAAA,EAChC,2BAA2B;AAAA,EAC3B,mBAAmB;AAAA,EACnB,sBAAsB;AAAA,EACtB,kBAAkB;AAAA,EAClB,oBAAoB;AAAA,EACpB,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,gBAAgB;AAAA,EAChB,qBAAqB;AAAA,EACrB,oBAAoB;AAAA,EACpB,wBAAwB;AAAA,EACxB,uBAAuB;AAAA,EACvB,sBAAsB;AAAA,EACtB,oBAAoB;AAAA,EACpB,sBAAsB;AAAA,EACtB,oBAAoB;AAAA,EACpB,sBAAsB;AAAA,EACtB,kBAAkB;AAAA,EAClB,oBAAoB;AAAA,EACpB,sBAAsB;AAAA,EACtB,sBAAsB;AAAA,EACtB,yBACE;AAAA,EACF,6BAA6B;AAAA,EAC7B,2BAA2B;AAAA,EAC3B,2BAA2B;AAAA,EAC3B,8BAA8B;AAAA,EAC9B,kCAAkC;AAAA,EAClC,wBAAwB;AAAA,EACxB,2BAA2B;AAAA,EAC3B,2BAA2B;AAAA,EAC3B,6BAA6B;AAAA,EAC7B,wBAAwB;AAAA,EACxB,4BAA4B;AAAA,EAC5B,uBAAuB;AAAA,EACvB,sBAAsB;AAAA,EACtB,oBAAoB;AAAA,EACpB,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,oBAAoB;AAAA,EACpB,wBAAwB;AAAA,EACxB,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,uBAAuB;AAAA,EACvB,0BAA0B;AAAA,EAC1B,0BAA0B;AAAA,EAE1B,sBAAsB;AAAA,EACtB,0BAA0B;AAAA,EAC1B,2BAA2B;AAAA,EAC3B,wBAAwB;AAAA,EACxB,wBAAwB;AAAA,EACxB,4BAA4B;AAAA,EAC5B,uBAAuB;AAAA,EACvB,uBAAuB;AAAA,EACvB,0BAA0B;AAAA,EAC1B,4BAA4B;AAAA,EAC5B,8BAA8B;AAAA,EAC9B,0BAA0B;AAAA,EAC1B,qBAAqB;AAAA,EACrB,yBAAyB;AAAA,EACzB,0BAA0B;AAAA,EAC1B,0BAA0B;AAAA,EAC1B,4BAA4B;AAAA,EAC5B,2BAA2B;AAAA,EAC3B,uBAAuB;AAAA,EACvB,8BAA8B;AAAA,EAC9B,2BAA2B;AAAA,EAC3B,wBAAwB;AAAA,EACxB,uBAAuB;AAAA,EACvB,uBAAuB;AAAA,EACvB,yBAAyB;AAAA,EACzB,sBAAsB;AAAA,EACtB,0BAA0B;AAAA,EAC1B,0BAA0B;AAAA,EAC1B,0BAA0B;AAAA,EAC1B,4BAA4B;AAAA,EAC5B,sBAAsB;AAAA,EACtB,wBAAwB;AAAA,EACxB,0BAA0B;AAC5B;",
4
+ "sourcesContent": ["import type { MessageKey } from \"./en.js\";\n\n/** \u7B80\u4F53\u4E2D\u6587\u6587\u6848\uFF1B\u952E\u96C6\u987B\u4E0E en \u4E00\u81F4\u3002 */\nexport const zhCN: Record<MessageKey, string> = {\n \"common.cancelled\": \"\u5DF2\u53D6\u6D88\",\n \"common.done\": \"\u5B8C\u6210\",\n \"common.required\": \"\u5FC5\u586B\",\n \"common.error\": \"\u9519\u8BEF: {message}\",\n \"common.fatal\": \"\u81F4\u547D\u9519\u8BEF\",\n \"common.unknownCommand\": \"\u672A\u77E5\u547D\u4EE4: {cmd}\",\n \"common.unknownShort\": \"\u672A\u77E5: {cmd} \uFF08\u8F93\u5165 help \u67E5\u770B\u5E2E\u52A9\uFF09\",\n \"common.tips\": \"\u63D0\u793A\",\n \"common.path\": \"\u8DEF\u5F84\",\n \"common.hint\": \"\u63D0\u793A\",\n \"common.none\": \"\uFF08\u65E0\uFF09\",\n \"common.all\": \"\u5168\u90E8\",\n\n \"locale.current\": \"\u5F53\u524D\u8BED\u8A00: {locale}\",\n \"locale.set\": \"\u8BED\u8A00\u5DF2\u8BBE\u4E3A {locale}\",\n \"locale.invalid\": \"\u672A\u77E5\u8BED\u8A00: {value}\uFF08\u53EF\u9009: zh-CN, en\uFF09\",\n \"locale.usage\": \"\u7528\u6CD5: locale [zh-CN|en|zh|cn]\",\n \"locale.wizard\": \"CLI language / \u754C\u9762\u8BED\u8A00\",\n \"locale.opt.zh\": \"\u7B80\u4F53\u4E2D\u6587\",\n \"locale.opt.en\": \"English\",\n\n /* \u2500\u2500\u2500 CLI \u901A\u9053\u95E8\u7981 \u2500\u2500\u2500 */\n \"cli.replOnly\": \"\u547D\u4EE4 `{cmd}` \u4EC5\u53EF\u5728 REPL \u5185\u4F7F\u7528\u3002\",\n \"cli.replOnly.hint\": \"\u5148\u8FD0\u884C\u65E0\u53C2\u6570\u7684 `sfmc` \u8FDB\u5165\u4EA4\u4E92\u6A21\u5F0F\uFF0C\u518D\u6267\u884C\u8BE5\u547D\u4EE4\u3002\",\n \"cli.needTty\": \"\u547D\u4EE4 `{cmd}` \u9700\u8981\u4EA4\u4E92\u5F0F\u7EC8\u7AEF\uFF08TTY\uFF09\u3002\",\n\n /* \u2500\u2500\u2500 debug (BDS \u914D\u7F6E) \u2500\u2500\u2500 */\n \"debug.state.on\": \"\u5F00\u542F\",\n \"debug.state.off\": \"\u5173\u95ED\",\n \"debug.statusTitle\": \"BDS \u8C03\u8BD5\u914D\u7F6E\",\n \"debug.enabled\": \"sfmc_debug = true\uFF08BDS \u63A7\u5236\u53F0\u8C03\u8BD5\u65E5\u5FD7\u5C06\u5728\u4E0B\u6B21 reload \u540E\u751F\u6548\uFF09\",\n \"debug.disabled\": \"sfmc_debug = false\uFF08BDS \u63A7\u5236\u53F0\u8C03\u8BD5\u65E5\u5FD7\u5C06\u5728\u4E0B\u6B21 reload \u540E\u5173\u95ED\uFF09\",\n \"debug.sentry.set\": \"\u5DF2\u8BBE\u7F6E SENTRY_DSN: {dsn}\",\n \"debug.sentry.removed\": \"\u5DF2\u5220\u9664 SENTRY_DSN\",\n \"debug.sentry.alreadyOff\": \"SENTRY_DSN \u672C\u6765\u5C31\u672A\u8BBE\u7F6E\",\n \"debug.sentry.dsnMissing\": \"\u9700\u8981 --dsn <\u503C>\",\n \"debug.sentry.unknown\": \"\u672A\u77E5 sentry \u5B50\u547D\u4EE4: {action}\",\n \"debug.sentry.usage\": \"\u7528\u6CD5: debug sentry on --dsn <dsn> | debug sentry off\",\n \"debug.unknown\": \"\u672A\u77E5 debug \u5B50\u547D\u4EE4: {sub}\",\n \"debug.usage\": \"\u7528\u6CD5: debug status | enable | disable | sentry on --dsn | sentry off\",\n \"debug.reloadHint\": \"\u9700\u8FD0\u884C `sfmc mod reload` \u6216\u91CD\u542F BDS \u540E\u751F\u6548\u3002\",\n\n /* \u2500\u2500\u2500 \u5E2E\u52A9\u6587\u672C \u2500\u2500\u2500 */\n \"help.title\": \"SFMC CLI\",\n \"help.title.repl\": \"SFMC REPL\",\n \"help.usage\": \"\u7528\u6CD5:\",\n \"help.section.options\": \"\u9009\u9879\",\n \"help.opt.packs\": \"\u8D44\u6E90\u5305\u7BA1\u7406\u5668\uFF0C\u540E\u63A5 packs \u5B50\u547D\u4EE4\uFF1Bi = install\",\n \"help.opt.lang\": \"\u672C\u6B21\u8FDB\u7A0B\u754C\u9762\u8BED\u8A00\",\n \"help.addon.compat\": \"\u517C\u5BB9\uFF1A-p/--packs\",\n \"help.slash.hint\": \"\u952E\u5165 / \u5217\u51FA\u547D\u4EE4\u3002\",\n \"help.shortcut.slash\": \"\u547D\u4EE4\u5217\u8868\",\n \"help.shortcut.ctrlp\": \"\u547D\u4EE4\u5217\u8868\",\n \"help.shortcut.cursor\": \"\u79FB\u52A8\u5149\u6807\",\n \"repl.palette.hint\": \"\u2191\u2193 \u00B7 Enter \u00B7 Esc\",\n \"repl.palette.empty\": \"\u65E0\u5339\u914D\",\n \"help.section.service\": \" \u670D\u52A1\u63A7\u5236 \u2500\u2500\u2500\u2500\u2500\u2500\",\n \"help.status\": \"\u67E5\u770B\u670D\u52A1\u72B6\u6001\uFF08\u542B QQ \u540E\u7AEF\u6458\u8981\uFF09\",\n \"help.logs\": \"\u65E5\u5FD7\u5386\u53F2\",\n \"help.start\": \"\u542F\u52A8\u670D\u52A1\uFF08db / qq / llbot / bds\uFF1Bqq \u9ED8\u8BA4\u5B98\u65B9 Bot\uFF09\",\n \"help.stop\": \"\u505C\u6B62\u670D\u52A1\",\n \"help.restart\": \"\u91CD\u542F\u670D\u52A1\",\n \"help.send\": \"\u5411\u670D\u52A1\u53D1\u9001\u547D\u4EE4\uFF08Tab \u5207\u6362\u76EE\u6807\uFF1BQQ \u63D0\u793A\u7B26\u533A\u5206 official / llbot\uFF09\",\n \"help.section.update\": \" BDS \u66F4\u65B0 \u2500\u2500\u2500\u2500\u2500\u2500\",\n \"help.update\": \"\u68C0\u67E5BDS \u66F4\u65B0\",\n \"help.section.debug\": \" \u8C03\u8BD5 \u2500\u2500\u2500\u2500\u2500\u2500\",\n \"help.debug.status\": \"SFMC_DEBUG \u72B6\u6001\",\n \"help.debug.toggle\": \"\u5F00\u5173 SFMC_DEBUG\",\n \"help.debug.sentry.on\": \"\u8BBE\u7F6E SENTRY_DSN\",\n \"help.debug.sentry.off\": \"\u5220\u9664 SENTRY_DSN\",\n \"help.section.module\": \" \u6A21\u5757\u7BA1\u7406 \u2500\u2500\u2500\u2500\u2500\u2500\",\n \"help.module.list\": \"\u5217\u51FA\u5DF2\u5B89\u88C5\u6A21\u5757\",\n \"help.module.search\": \"\u5728\u7EBF\u641C\u7D22\u6A21\u5757\",\n \"help.module.install\": \"\u5B89\u88C5\u6A21\u5757\",\n \"help.module.uninstall\": \"\u5378\u8F7D\u5DF2\u5B89\u88C5\u6A21\u5757\",\n \"help.module.verify\": \"\u6821\u9A8C\u6A21\u5757 SHA-256 \u5B8C\u6574\u6027\",\n \"help.module.info\": \"\u663E\u793A\u6A21\u5757\u8BE6\u60C5\",\n \"help.module.toggle\": \"\u542F\u7528/\u7981\u7528\u6A21\u5757\",\n \"help.module.build\": \"\u4ECE\u5DF2\u542F\u7528\u6A21\u5757\u6784\u5EFA\u8D44\u6E90\u5305\",\n \"help.module.reload\": \"\u6784\u5EFA\u5E76\u90E8\u7F72\u8D44\u6E90\u5305\uFF0C\u5728 BDS \u53D1\u9001 reload\u6307\u4EE4\u4EE5\u91CD\u8F7D\u811A\u672C\",\n \"help.section.addon\": \" \u8D44\u6E90\u5305\u7BA1\u7406 \u2500\u2500\u2500\u2500\u2500\u2500\",\n \"help.addon\": \"\u8D44\u6E90\u5305\u6536\u4EF6\u7BB1\u7BA1\u7406\",\n \"help.packs.list\": \"\u5DF2\u5B89\u88C5\u8D44\u6E90\u5305\u5217\u8868\",\n \"help.packs.search\": \"\u5728\u7EBF\u641C\u7D22\u8D44\u6E90\u5305\",\n \"help.packs.enable\": \"\u542F\u7528\u8D44\u6E90\u5305\",\n \"help.packs.disable\": \"\u7981\u7528\u8D44\u6E90\u5305\",\n \"help.packs.doctor\": \"\u8BCA\u65AD\u8D44\u6E90\u5305\u63A5\u7EBF\",\n \"help.packs.path\": \"\u663E\u793A\u8D44\u6E90\u5305\u8DEF\u5F84\",\n \"help.section.general\": \" \u901A\u7528 \u2500\u2500\u2500\u2500\u2500\u2500\",\n \"help.init\": \"\u521D\u59CB\u5316\u5411\u5BFC\",\n \"help.locale\": \"\u8BBE\u7F6E CLI \u8BED\u8A00\",\n \"help.version\": \"\u663E\u793A\u7248\u672C\",\n \"help.help\": \"\u663E\u793A\u5E2E\u52A9\",\n \"help.quit\": \"\u9000\u51FA\",\n \"help.shortcuts\": \"\u5FEB\u6377\u952E:\",\n \"help.shortcut.tab\": \"\u5207\u6362\u53D1\u9001\u76EE\u6807 / \u547D\u4EE4\u5217\u8868\u9009\u62E9\",\n \"help.shortcut.right\": \"\u63A5\u53D7\u5EFA\u8BAE\",\n \"help.shortcut.ctrll\": \"\u8FC7\u6EE4\u65E5\u5FD7\u7EA7\u522B / \u6765\u6E90 / \u5386\u53F2\",\n \"help.shortcut.history\": \"\u547D\u4EE4\u5386\u53F2\",\n\n /* \u2500\u2500\u2500 REPL \u2500\u2500\u2500 */\n \"repl.stopping\": \"\u6B63\u5728\u505C\u6B62\u670D\u52A1...\",\n \"repl.bye\": \"bye...\",\n \"repl.forceStop\": \"\u6B63\u5728\u5F3A\u5236\u505C\u6B62\u670D\u52A1...\",\n \"repl.nonInteractive\": \" \u975E\u4EA4\u4E92\u6A21\u5F0F\uFF08\u68C0\u6D4B\u5230\u7BA1\u9053\uFF09\\n\",\n \"repl.historyHeader\": \"\u2500\u2500 \u5386\u53F2 {count} \u884C \u2500\u2500\",\n \"repl.filter\": \"\u8FC7\u6EE4: {level} / {source} / {history}\",\n \"repl.followRequiresTty\": \"\u8DDF\u8E2A\u6A21\u5F0F\u9700\u8981 TTY\",\n \"repl.logsReplOnly\": \"logs \u4EC5\u5728\u4EA4\u4E92 REPL \u4E2D\u53EF\u7528\",\n \"repl.history.live\": \"\u5B9E\u65F6\",\n \"repl.history.last50\": \"\u6700\u8FD1 50 \u6761\",\n \"repl.history.last100\": \"\u6700\u8FD1 100 \u6761\",\n \"repl.history.last500\": \"\u6700\u8FD1 500 \u6761\",\n \"repl.history.last1000\": \"\u6700\u8FD1 1000 \u6761\",\n \"repl.history.last1min\": \"\u6700\u8FD1 1 \u5206\u949F\",\n \"repl.history.last5min\": \"\u6700\u8FD1 5 \u5206\u949F\",\n \"repl.history.last15min\": \"\u6700\u8FD1 15 \u5206\u949F\",\n \"repl.history.last1hour\": \"\u6700\u8FD1 1 \u5C0F\u65F6\",\n \"repl.history.all\": \"\u7F13\u51B2\u5168\u90E8\",\n\n /* \u2500\u2500\u2500 \u670D\u52A1\u63A7\u5236 \u2500\u2500\u2500 */\n \"svc.header\": \"\u670D\u52A1\",\n \"svc.col.name\": \"\u540D\u79F0\",\n \"svc.col.status\": \"\u72B6\u6001\",\n \"svc.col.owner\": \"\u5F52\u5C5E\",\n \"svc.col.pid\": \"PID\",\n \"svc.col.uptime\": \"\u8FD0\u884C\u65F6\u957F\",\n \"svc.state.running\": \"\u8FD0\u884C\u4E2D\",\n \"svc.state.stopped\": \"\u5DF2\u505C\u6B62\",\n \"svc.owner.managed\": \"\u63A5\u7BA1\",\n \"svc.owner.external\": \"\u5916\u90E8\",\n \"svc.owner.none\": \"\u2014\",\n \"svc.running\": \"\u8FD0\u884C\u4E2D - \u5DF2\u63A5\u7BA1\",\n \"svc.runningExternal\": \"\u8FD0\u884C\u4E2D - \u5916\u90E8\",\n \"svc.stopped\": \"\u5DF2\u505C\u6B62\",\n \"svc.unknown\": \"\u672A\u77E5\u670D\u52A1: {name}\uFF08\u53EF\u9009: {list}\uFF09\",\n \"svc.logs.usage\": \"\u7528\u6CD5: logs <service> [-n N] [-f]\",\n \"svc.logs.empty\": \"\uFF08\u6682\u65E0\u65E5\u5FD7\uFF09\",\n \"svc.logs.header\": \"{title} \u65E5\u5FD7\uFF08\u6700\u8FD1 {count} \u6761\uFF09:\",\n \"svc.start.usage\": \"\u7528\u6CD5: start <service>|-all\",\n \"svc.start.usageShort\": \"\u7528\u6CD5: start <service>|-all\",\n \"svc.stop.usage\": \"\u7528\u6CD5: stop <service>|-all\",\n \"svc.stop.usageShort\": \"\u7528\u6CD5: stop <service>|-all\",\n \"svc.restart.usage\": \"\u7528\u6CD5: restart <service>|-all\",\n \"svc.restart.usageShort\": \"\u7528\u6CD5: restart <service>|-all\",\n \"svc.alreadyRunning\": \"{title} \u5DF2\u5728\u8FD0\u884C\uFF08PID {pid}\uFF09\",\n \"svc.alreadyStarting\": \"{title} \u6B63\u5728\u542F\u52A8...\",\n \"svc.started\": \"{title} \u5DF2\u542F\u52A8\",\n \"svc.startFailed\": \"{title} \u5931\u8D25: {message}\",\n \"svc.alreadyStopped\": \"{title} \u5DF2\u505C\u6B62\",\n \"svc.alreadyStopping\": \"{title} \u6B63\u5728\u505C\u6B62...\",\n \"svc.stoppedMsg\": \"{title} \u5DF2\u505C\u6B62\",\n \"svc.stopFailed\": \"{title} \u505C\u6B62\u5931\u8D25: {message}\",\n \"svc.send.usage\": \"\u7528\u6CD5: send <service> <message>\",\n \"svc.notRunning\": \"{title} \u672A\u8FD0\u884C\",\n \"svc.writeFailed\": \"\u5199\u5165\u5931\u8D25\",\n \"svc.restarted\": \"{title} \u5DF2\u91CD\u542F\",\n \"svc.restartFailed\": \"{title} \u91CD\u542F\u5931\u8D25: {message}\",\n \"svc.allStarted\": \"\u5168\u90E8\u670D\u52A1\u5DF2\u542F\u52A8\",\n \"svc.allStopped\": \"\u5168\u90E8\u670D\u52A1\u5DF2\u505C\u6B62\",\n \"svc.skipped\": \"{title} \u5DF2\u8DF3\u8FC7: {reason}\",\n \"svc.startAll.started\": \"\u5DF2\u542F\u52A8: {list}\",\n \"svc.startAll.skipped\": \"\u5DF2\u8DF3\u8FC7: {list}\",\n \"svc.startAll.failed\": \"\u542F\u52A8\u5931\u8D25: {list}\",\n \"svc.startAll.empty\": \"\u6CA1\u6709\u670D\u52A1\u9700\u8981\u542F\u52A8\",\n \"svc.qq.footer.official\": \"QQ \u6865: official \u00B7 {enabled} \u00B7 AppID {appId} \u00B7 group_openid {openid} \u00B7 {sandbox} \u00B7 creds={creds}\",\n \"svc.qq.footer.llbot\": \"QQ \u6865: llbot \u00B7 {enabled} \u00B7 \u7FA4 {group} \u00B7 path {path}\",\n \"svc.updateComplete\": \"\u66F4\u65B0\u5B8C\u6210\",\n \"svc.updateExited\": \"\u66F4\u65B0\u8FDB\u7A0B\u9000\u51FA\uFF0C\u4EE3\u7801 {code}\",\n \"svc.updateError\": \"\u66F4\u65B0\u9519\u8BEF: {message}\",\n \"svc.updateStartBds\": \"\u66F4\u65B0: \u901A\u8FC7\u8FDB\u7A0B\u76D1\u7763\u5668\u542F\u52A8 BDS\",\n \"svc.bdsStarted\": \"BDS \u5DF2\u542F\u52A8\uFF08\u76D1\u7763\u6A21\u5F0F\uFF09\",\n \"svc.bdsStartFailed\": \"BDS \u542F\u52A8\u5931\u8D25: {message}\",\n \"svc.bdsStoppedForUpdate\": \"\u66F4\u65B0\u65F6\u5DF2\u505C\u6B62 BDS\uFF1B\u5C31\u7EEA\u540E\u8BF7\u6267\u884C `start bds`\",\n \"svc.bdsAlreadyRunning\": \"BDS \u5DF2\u5728\u8FD0\u884C\uFF08{kind}\uFF0CPID {pid}\uFF09\",\n \"svc.stdinUnavailable\": \"{title} \u7531\u5916\u90E8\u542F\u52A8\uFF0C\u65E0\u6CD5\u901A\u8FC7 stdin \u53D1\u9001\u547D\u4EE4\",\n \"svc.stoppedExternal\": \"{title} \u5DF2\u505C\u6B62\uFF08\u5916\u90E8\u8FDB\u7A0B\uFF09\",\n\n /* \u2500\u2500\u2500 \u521D\u59CB\u5316 \u2500\u2500\u2500 */\n \"wizard.intro\": \"\u521D\u59CB\u5316\",\n \"wizard.rerun\": \"\u5DF2\u521D\u59CB\u5316\u3002\u662F\u5426\u91CD\u65B0\u8FD0\u884C\u5411\u5BFC\uFF1F\",\n \"wizard.skipped\": \"\u5DF2\u8DF3\u8FC7\u521D\u59CB\u5316\",\n \"wizard.step1\": \"\u6B65\u9AA4 1 - \u8FD0\u884C\u73AF\u5883\",\n \"wizard.runtimeRoot\": \"\u8FD0\u884C\u6839\u76EE\u5F55: {root}\",\n \"wizard.npmMissing\": \"npm \u8FD0\u884C\u65F6\u7F3A\u5C11\u5FC5\u9700\u76EE\u5F55: {list}\",\n \"wizard.prepFailed\": \"\u8FD0\u884C\u73AF\u5883\u51C6\u5907\u5931\u8D25: {message}\",\n \"wizard.step2\": \"\u6B65\u9AA4 2 - \u5916\u90E8\u8FD0\u884C\u65F6\",\n \"wizard.step2Note\": \"\u9009\u62E9 BDS\u3001\u6570\u636E\u5E93\u4E0E QQ \u6865\u63A5\u540E\u7AEF\",\n \"wizard.bdsDir\": \"BDS \u5B89\u88C5\u76EE\u5F55\",\n \"wizard.cannotCreateBds\": \"\u65E0\u6CD5\u521B\u5EFA BDS \u5B89\u88C5\u76EE\u5F55: {dir}\",\n \"wizard.qqBackend\": \"QQ \u6865\u63A5\u540E\u7AEF:\",\n \"wizard.qqBackend.official\": \"QQ \u5F00\u653E\u5E73\u53F0\uFF08\u5B98\u65B9 Bot\uFF09\",\n \"wizard.qqBackend.officialHint\": \"\u63A8\u8350\uFF1B\u9700 AppID / AppSecret\",\n \"wizard.qqBackend.llbot\": \"LLBot\uFF08OneBot 11\uFF09\",\n \"wizard.qqBackend.llbotHint\": \"\u9700\u672C\u673A LLBot \u8FDB\u7A0B\",\n \"wizard.qqBackend.disabled\": \"\u6682\u4E0D\u542F\u7528 QQ \u6865\",\n \"wizard.qqBackend.disabledHint\": \"qq_enabled=false\",\n \"wizard.qqAppId\": \"QQ \u5F00\u653E\u5E73\u53F0 AppID:\",\n \"wizard.qqAppSecret\": \"QQ \u5F00\u653E\u5E73\u53F0 AppSecret:\",\n \"wizard.qqSandbox\": \"\u4F7F\u7528\u6C99\u7BB1\u73AF\u5883\uFF1F\",\n \"wizard.qqGroupOpenid\": \"\u7FA4 openid\uFF08\u53EF\u7A0D\u540E\u586B\u5199\uFF09:\",\n \"wizard.qqGroupOpenidHint\": \"\u975E\u4F20\u7EDF\u7FA4\u53F7\",\n \"wizard.enableLlbot\": \"\u542F\u7528 LLBot \u8FDB\u7A0B\u63A5\u7BA1\uFF1F\",\n \"wizard.llbotDir\": \"LLBot \u8FD0\u884C\u76EE\u5F55\",\n \"wizard.usingDefault\": \"\u4F7F\u7528\u9ED8\u8BA4: {path}\",\n \"wizard.dbDir\": \"\u6570\u636E\u5E93\u5B58\u50A8\u76EE\u5F55\",\n \"wizard.dbPort\": \"\u6570\u636E\u5E93\u670D\u52A1\u7AEF\u53E3:\",\n \"wizard.portRange\": \"\u8BF7\u8F93\u5165 1024\u201365535\",\n \"wizard.valueRequired\": \"\u6B64\u9879\u5FC5\u586B\uFF01\",\n \"wizard.step3\": \"\u6B65\u9AA4 3 - BDS \u73AF\u5883\",\n \"wizard.bdsFound\": \"\u5DF2\u627E\u5230: {path}\",\n \"wizard.bdsNotFound\": \"\u672A\u627E\u5230: {path}\",\n \"wizard.eula\": \"\u662F\u5426\u540C\u610F Mojang \u53D1\u5E03\u7684 EULA(https://www.minecraft.net/en-us/eula)\uFF1F\u4F7F\u7528\u672C\u7A0B\u5E8F\u524D\u5FC5\u987B\u540C\u610F\u3002\",\n \"wizard.disagreed\": \"\u5DF2\u62D2\u7EDD\u3002\",\n \"wizard.downloadBds\": \"\u73B0\u5728\u4E0B\u8F7D BDS\uFF1F\",\n \"wizard.selectChannel\": \"\u9009\u62E9\u901A\u9053:\",\n \"wizard.channel.release\": \"Release\",\n \"wizard.channel.releaseHint\": \"\u7A33\u5B9A\u7248\",\n \"wizard.channel.preview\": \"Preview\",\n \"wizard.channel.previewHint\": \"\u9884\u89C8\u7248\",\n \"wizard.cannotCreateBackup\": \"\u65E0\u6CD5\u521B\u5EFA BDS \u5907\u4EFD\u76EE\u5F55: {dir}\",\n \"wizard.backupDir\": \"BDS \u5907\u4EFD\u76EE\u5F55\",\n \"wizard.preserve\": \"\u66F4\u65B0\u65F6\u4FDD\u7559\u7684\u6587\u4EF6\uFF08\u4E0B\u6B21\u542F\u7528\u66F4\u65B0\u65F6\uFF09:\",\n \"wizard.preserve.serverProps\": \"\u670D\u52A1\u5668\u914D\u7F6E\",\n \"wizard.preserve.worlds\": \"\u4E16\u754C\u6570\u636E\",\n \"wizard.preserve.config\": \"\u914D\u7F6E\u76EE\u5F55\",\n \"wizard.updaterTip\": \"\u82E5\u627E\u4E0D\u5230 BDS \u8FD0\u884C\u65F6\uFF0C\u7A0D\u540E\u4F1A\u81EA\u52A8\u4E0B\u8F7DBDS\u3002\\n \u53EF\u5728 configs/bds_updater.json \u4E2D\u914D\u7F6E\u66F4\u65B0\u9009\u9879\u3002\",\n \"wizard.step4\": \"\u6B65\u9AA4 4 - \u6A21\u5757\",\n \"wizard.modulesFound\": \"\u53D1\u73B0 {count} \u4E2A\u53EF\u9009\u6A21\u5757\",\n \"wizard.modulesNone\": \"\u672A\u627E\u5230\u6A21\u5757\u76EE\u5F55\",\n \"wizard.enableModules\": \"\u542F\u7528\u6A21\u5757:\",\n \"wizard.emptyHint\": \"\uFF08\u7A7A\uFF09\",\n \"wizard.updatingConfigs\": \"\u6B63\u5728\u66F4\u65B0\u914D\u7F6E\",\n \"wizard.configsUpdated\": \"\u914D\u7F6E\u5DF2\u66F4\u65B0\",\n \"wizard.updatingModules\": \"\u6B63\u5728\u66F4\u65B0\u6A21\u5757\u72B6\u6001\",\n \"wizard.modulesUpdated\": \"\u6A21\u5757\u72B6\u6001\u5DF2\u66F4\u65B0\",\n \"wizard.initDb\": \"\u6B63\u5728\u521D\u59CB\u5316\u6570\u636E\u5E93\",\n \"wizard.dbTimeout\": \"\u6570\u636E\u5E93\u542F\u52A8\u8D85\u65F6\",\n \"wizard.dbOk\": \"\u6570\u636E\u5E93\u5DF2\u521D\u59CB\u5316\",\n \"wizard.downloadingBds\": \"\u6B63\u5728\u4E0B\u8F7D BDS\",\n \"wizard.downloadFail\": \"\u4E0B\u8F7D\u5931\u8D25\u3002\",\n \"wizard.bdsDownloaded\": \"BDS \u5DF2\u4E0B\u8F7D\",\n \"wizard.done\": \"\u5B8C\u6210\uFF01\u952E\u5165 / \u4EE5\u6267\u884C\u547D\u4EE4\",\n \"wizard.installing\": \"\u6B63\u5728\u5B89\u88C5 {count} \u4E2A\u6A21\u5757\",\n \"wizard.installed\": \"\u5DF2\u5B89\u88C5 {count} \u4E2A\",\n \"wizard.installFailed\": \"\u5B89\u88C5\u5931\u8D25: {message}\\n\u53EF\u7A0D\u540E\u6267\u884C: mod install <id>\",\n \"wizard.fetchMissing\": \"\u7F3A\u5C11 fetch-module \u2014 \u8BF7\u7A0D\u540E\u5BF9\u4EE5\u4E0B\u6A21\u5757\u6267\u884C `mod install <id>`: {list}\",\n \"wizard.noModulesSelected\": \"\u672A\u9009\u62E9\u6A21\u5757 \u2014 \u884C\u4E3A\u5305\u5C06\u4E3A\u7A7A\uFF0C\u76F4\u5230\u6267\u884C `mod install <id>` \u5B89\u88C5\u6A21\u5757\u3002\",\n \"wizard.buildingBp\": \"\u6B63\u5728\u6784\u5EFA\u884C\u4E3A\u5305\",\n \"wizard.buildFailed\": \"\u6784\u5EFA\u5931\u8D25: {message}\\n\u7A0D\u540E\u53EF\u6267\u884C `mod build` \u91CD\u8BD5\u3002\",\n \"wizard.deploying\": \"\u6B63\u5728\u90E8\u7F72\u5230 {path}\",\n \"wizard.restartBds\": \"\u8BF7\u91CD\u542F BDS \u4EE5\u52A0\u8F7D\u65B0\u884C\u4E3A\u5305\u3002\",\n \"wizard.deployFailed\": \"\u90E8\u7F72\u5931\u8D25: {message}\\n\u4FEE\u590D configs/ \u4E2D\u7684 bds_path \u540E\u6267\u884C `mod reload`\u3002\",\n\n \"prompt.enterPath\": \"\u8F93\u5165\u8DEF\u5F84\",\n \"prompt.browse\": \"\u6D4F\u89C8\u2026\",\n \"prompt.browseHint\": \"\u6253\u5F00\u7CFB\u7EDF\u6587\u4EF6\u5939\u9009\u62E9\u5668\",\n\n \"reload.buildOnly\": \"\u6784\u5EFA\u5B8C\u6210\u3002\",\n \"reload.bdsNotRunning\": \"BDS \u672A\u8FD0\u884C \u2014 \u5DF2\u5B8C\u6210\u6784\u5EFA\u3002\",\n \"reload.sent\": \"\u5DF2\u5411 BDS \u53D1\u9001 reload\",\n\n \"bp.usage\": \"\u7528\u6CD5: bp <build|deploy>\",\n\n \"mod.usage\": \"\u7528\u6CD5: sfmc {cmds} <{subs}> [args]\",\n \"mod.list.title\": \"\u5DF2\u5B89\u88C5\u6A21\u5757\",\n \"mod.noneInstalled\": \"\\n\u672A\u5B89\u88C5\u6A21\u5757\u3002\u8BF7\u5C06\u6A21\u5757\u76EE\u5F55\u653E\u5230 {dir}\uFF0C\u6216\u6267\u884C `sfmc mod install <id>`\u3002\\n\",\n \"mod.notInRegistry\": '\u6A21\u5757 \"{query}\" \u4E0D\u5728\u5B98\u65B9 registry \u4E2D\u3002',\n \"mod.info.usage\": \"\u7528\u6CD5: mod info <id>\",\n \"mod.notInstalledAt\": \"\u6A21\u5757 {id} \u672A\u5B89\u88C5\u4E8E {path}\",\n \"mod.notInstalled\": \"\u6A21\u5757 {id} \u672A\u5B89\u88C5\",\n \"mod.verifyOk\": \"{id} \u6B63\u5E38\\n fingerprint: {fp}\\n\",\n \"mod.dbUnreachable\": \"\u65E0\u6CD5\u8FDE\u63A5 db-server {url}: {message}\u3002db \u670D\u52A1\u662F\u5426\u5728\u8FD0\u884C\uFF1F\uFF08sfmc> start db\uFF09\",\n \"mod.toggleFailed\": \"{action} {id} \u5931\u8D25: {err}\",\n \"mod.action.enabled\": \"\u5DF2\u542F\u7528\",\n \"mod.action.disabled\": \"\u5DF2\u7981\u7528\",\n \"mod.toggleOk\": \"{label} {id}\",\n \"mod.toggleBadBody\": \"{action} {id} \u8FD4\u56DE: {text}\",\n \"mod.cannotDisable\": \"\u6A21\u5757 {id} \u4E0D\u53EF\u7981\u7528\uFF08canDisable=false\uFF09\",\n \"mod.toggleLockFailed\": \"\u5199\u5165 module-lock \u5931\u8D25\uFF08{id}\uFF09: {message}\",\n \"mod.toggleDbSkipped\":\n \"\u5DF2\u5199\u5165 module-lock\uFF1Bdb-server \u672A\u540C\u6B65\uFF08{detail}\uFF09\u3002\u4E0B\u6B21 start db \u540E\u5185\u5B58\u6001\u4F1A\u8DDF\u4E0A\uFF1B\u6E38\u620F\u5185\u4ECD\u9700 mod reload / \u91CD\u542F BDS\u3002\",\n \"mod.enable.usage\": \"\u7528\u6CD5: mod enable <id>\",\n \"mod.disable.usage\": \"\u7528\u6CD5: mod disable <id>\",\n \"mod.install.usage\":\n \"\u7528\u6CD5: mod install <id>\\n mod install <id> --from <scheme> [--link] [--sha256 <hex>]\",\n \"mod.fromUnknown\": \"\u672A\u77E5\u7684 --from \u6765\u6E90: {value}\u3002\u53EF\u7528: npm:|local[:<\u8DEF\u5F84>]|tgz:|zip:|dir:|github:<repo>[@tag]\",\n \"mod.fetchMissing\": \"\u672A\u627E\u5230 fetch-module\u3002\u8BF7\u5B89\u88C5 @sfmc-bds/sfmc \u6216\u5728 monorepo \u5185\u8FD0\u884C\u3002\",\n \"mod.uninstall.usage\": \"\u7528\u6CD5: mod uninstall <id>\",\n \"mod.notInstalledFolder\": \"\u6A21\u5757 {id} \u672A\u5B89\u88C5\uFF08\u76EE\u5F55\u4E0D\u5B58\u5728: {path}\uFF09\",\n \"mod.removed\": \"\u5DF2\u4ECE {path} \u79FB\u9664 {id}\\n\",\n\n \"pack.built\": \"\u5DF2\u6784\u5EFA\u5305\u81F3 {path}\",\n \"pack.buildFailed\": \"pack \u6784\u5EFA\u5931\u8D25: {message}\",\n \"pack.deployed\": \"\u5DF2\u90E8\u7F72\u5305\",\n \"pack.deployFailed\": \"pack \u90E8\u7F72\u5931\u8D25: {message}\",\n \"pack.statusFailed\": \"pack status \u5931\u8D25: {message}\",\n \"pack.listFailed\": \"pack list \u5931\u8D25: {message}\",\n \"pack.noCatalog\": \"\u5C1A\u65E0\u5DF2\u90E8\u7F72 catalog \u2014 \u8BF7\u5148\u6267\u884C `sfmc pack deploy`\",\n \"pack.noUuid\": \"catalog \u4E2D\u65E0 {kind} \u5305 uuid\",\n \"pack.actionFailed\": \"{action} \u5931\u8D25: {detail}\",\n \"pack.enabledOk\": \"\u5DF2\u542F\u7528 {kind} \u5305 {uuid}\",\n \"pack.disabledOk\": \"\u5DF2\u7981\u7528 {kind} \u5305 {uuid}\",\n \"pack.actionErr\": \"pack {action} \u5931\u8D25: {message}\",\n \"pack.usage\": \"\u7528\u6CD5: sfmc pack <{subs}> [behavior|resource]\",\n\n \"packs.restartHint\": \"\u9700\u91CD\u542F BDS \u540E\u751F\u6548\",\n \"packs.rejoinHint\": \"\u5BA2\u6237\u7AEF\u9700\u91CD\u8FDB\u670D\u4EE5\u4E0B\u8F7D\u8D44\u6E90\u5305\",\n \"packs.conflict\": \"\u68C0\u6D4B\u5230\u51B2\u7A81\uFF1A\",\n \"packs.conflict.existing\": \" \u5DF2\u6709: {name} v{version} {uuid}\\n {dir}\",\n \"packs.conflict.incoming\": \" \u65B0\u6765: {name} v{version} {uuid}\",\n \"packs.overwriteAsk\": \"\u8986\u76D6\u5DF2\u6709\u5305\uFF08\u76F8\u540C UUID\uFF0C\u4F46\u7248\u672C\u76F8\u5BF9\u73B0\u5B58\u5305\u8F83\u4F4E\uFF09\uFF1F\",\n \"packs.badManifest\": \"\u65E0\u6CD5\u8BC6\u522B manifest\uFF08\u9700\u542B resources/data/script \u6A21\u5757\uFF0C\u4E14 header \u542B name/uuid/version\uFF09\",\n \"packs.skippedNoOverwrite\": \"\u5DF2\u8DF3\u8FC7\uFF08\u672A\u8986\u76D6\uFF09\",\n \"packs.conflictSkip\": \" \u51B2\u7A81\u8DF3\u8FC7\uFF08\u975E\u4EA4\u4E92\uFF0C\u53EF\u7528 --force\uFF09: {name}\",\n \"packs.inboxSkip\": \" \u8DF3\u8FC7\u6536\u4EF6\u7BB1\uFF1A{message}\",\n \"packs.inboxFound\": \" \u6536\u4EF6\u7BB1\u53D1\u73B0 {count} \u9879 \u2192 {level}\",\n \"packs.alreadyDone\": \" \u5DF2\u5904\u7406\u8FC7\uFF0C\u8DF3\u8FC7: {name}\",\n \"packs.dryRunExtract\": \" dry-run \u89E3\u538B: {name}\",\n \"packs.noPackRoot\": \" \u672A\u627E\u5230\u5305\u6839: {name}\",\n \"packs.installedEnabled\": \" \u5DF2\u5B89\u88C5\u5E76\u542F\u7528 {kind}: {name} v{version}\",\n \"packs.installFailed\": \" \u5B89\u88C5\u5931\u8D25 {name}: {reason}\",\n \"packs.listEmpty\": \"\uFF08\u65E0\uFF09\",\n \"packs.list.bpHeader\": \"\u884C\u4E3A\u5305:\",\n \"packs.list.rpHeader\": \"\u8D44\u6E90\u5305:\",\n \"packs.list.on\": \"\u5F00 \",\n \"packs.list.off\": \"\u5173\",\n \"packs.doctor.parseFail\": \"{file} \u65E0\u6CD5\u89E3\u6790\",\n \"packs.doctor.missingDir\": \"\u6E05\u5355\u6709 uuid \u4F46\u76EE\u5F55\u7F3A\u5931 ({kind}): {uuid}\",\n \"packs.doctor.versionMismatch\": \"\u7248\u672C\u4E0D\u4E00\u81F4 ({kind}): {folder} \u6E05\u5355 {listVer} vs \u78C1\u76D8 {diskVer}\",\n \"packs.doctor.notEnabled\": \"\u5DF2\u5B89\u88C5\u672A\u542F\u7528: [{kind}] {folder} ({uuid})\",\n \"packs.doctor.ok\": \"doctor: \u672A\u53D1\u73B0\u95EE\u9898\",\n \"packs.doctor.found\": \"doctor \u53D1\u73B0 {count} \u9879:\\n{list}\",\n \"packs.notFound\": \"\u672A\u627E\u5230\u5305: {id}\",\n \"packs.toggleDone\": \"{verb} {folder} \u5B8C\u6210\u3002{hint}\",\n \"packs.bump.usage\": \"\u7528\u6CD5: packs bump <uuid|folder> \uFF08\u4EC5 RP\uFF09\",\n \"packs.bump.rpOnly\": \"packs bump \u4EC5\u652F\u6301\u8D44\u6E90\u5305 (RP)\",\n \"packs.bumped\": \"\u5DF2 bump {folder} \u2192 v{version}\u3002{restart}\uFF1B{rejoin}\",\n \"packs.pathMissing\": \"\u8DEF\u5F84\u4E0D\u5B58\u5728: {path}\",\n \"packs.notArchive\": \"\u4E0D\u662F\u5305\u76EE\u5F55\u6216 .zip/.mcpack/.mcaddon\",\n \"packs.noManifestRoot\": \"\u672A\u53D1\u73B0\u542B manifest.json \u7684\u5305\u6839\",\n \"packs.installedLine\": \"\u5DF2\u5B89\u88C5\u5E76\u542F\u7528: {name} v{version} ({kind})\",\n \"packs.skipFailLine\": \"\u8DF3\u8FC7/\u5931\u8D25: {name} ({reason})\",\n \"packs.inboxEmpty\": \"\u6536\u4EF6\u7BB1\u4E3A\u7A7A\",\n \"packs.search.usage\": \"\u7528\u6CD5: packs search <query>\uFF08CurseForge \u8FDC\u7A0B\u641C\u7D22\uFF0C\u9700 API Key\uFF09\",\n \"packs.bind.usage\": \"\u7528\u6CD5: packs bind <uuid|folder> <projectId|slug|url>\",\n \"packs.unbind.usage\": \"\u7528\u6CD5: packs unbind <uuid|folder>\",\n \"packs.unbindOk\": \"\u5DF2\u89E3\u9664\u7ED1\u5B9A {uuid}\uFF08\u7F16\u8F91 {path} \u4EA6\u53EF\uFF09\",\n \"packs.unbindMiss\": \"\u672A\u627E\u5230\u7ED1\u5B9A: {id}\",\n \"packs.update.usage\": \"\u7528\u6CD5: packs update <uuid|folder|--all>\",\n \"packs.toggle.usage\": \"\u7528\u6CD5: packs {verb} <uuid|folder>\",\n \"packs.uninstall.usage\":\n \"\u7528\u6CD5: packs uninstall [uuid|folder...] [--purge] [--no-paired]\\n \u65E0\u53C2\u6570\u4E14\u4E3A TTY \u65F6\u8FDB\u5165\u591A\u9009\uFF1B\u53EF\u4E00\u6B21\u4F20\u591A\u4E2A id\",\n \"packs.uninstall.protected\": \"\u62D2\u7EDD\u5378\u8F7D\u5E73\u53F0\u805A\u5408\u5305: {folder}\uFF08\u8BF7\u7528 sfmc mod\uFF09\",\n \"packs.uninstall.trashed\": \"\u5DF2\u5378\u8F7D\u5E76\u79FB\u5165\u56DE\u6536\u7AD9: {folder}\\n \u2192 {dest}\",\n \"packs.uninstall.deleted\": \"\u5DF2\u5378\u8F7D\u5E76\u5220\u9664: {folder}\",\n \"packs.uninstall.dirMissing\": \"\u6E05\u5355\u5DF2\u79FB\u9664\uFF0C\u76EE\u5F55\u672C\u5C31\u4E0D\u5B58\u5728: {folder}\",\n \"packs.uninstall.bindingRemoved\": \"\u5DF2\u6E05\u9664\u66F4\u65B0\u6E90\u7ED1\u5B9A: {uuid}\",\n \"packs.uninstall.pick\": \"\u9009\u62E9\u8981\u5378\u8F7D\u7684\u8D44\u6E90\u5305\uFF08\u7A7A\u683C\u52FE\u9009\uFF0C\u56DE\u8F66\u786E\u8BA4\uFF09\",\n \"packs.uninstall.summary\": \"\u5C06\u5378\u8F7D\u4EE5\u4E0B {count} \u9879\uFF08\u542B\u914D\u5BF9 RP\uFF09\uFF1A\",\n \"packs.uninstall.confirm\": \"\u786E\u8BA4\u5378\u8F7D\u8FD9 {count} \u9879\uFF1F\",\n \"packs.uninstall.cancelled\": \"\u5DF2\u53D6\u6D88\u5378\u8F7D\",\n \"packs.uninstall.none\": \"\u6CA1\u6709\u53EF\u5378\u8F7D\u7684\u8D44\u6E90\u5305\",\n \"packs.uninstall.pairedOf\": \"\uFF08\u914D\u5BF9\u81EA {folder}\uFF09\",\n \"packs.install.usage\": \"\u7528\u6CD5: packs install [path|--inbox] [--force]\",\n \"packs.installInbox\": \"\u6536\u4EF6\u7BB1\u5B89\u88C5: \u6210\u529F={installed} \u8DF3\u8FC7={skipped} \u5931\u8D25={failed}\",\n \"packs.scanResult\": \"\u626B\u63CF: \u6210\u529F={installed} \u8DF3\u8FC7={skipped} \u5931\u8D25={failed}\",\n \"packs.unknownSub\": \"\u672A\u77E5 packs \u5B50\u547D\u4EE4: {verb}\\n\",\n \"packs.usage.title\": \"{cmd}\uFF08\u522B\u540D {alias}\uFF09\u2014 \u4E16\u754C\u4FA7\u4EFB\u610F BP/RP\",\n \"packs.usage.bump\": \"\u4EC5 RP\uFF0Cpatch \u7248\u672C +1\",\n \"packs.usage.cfSearch\": \"CurseForge \u641C\u7D22\uFF08\u9700 Key\uFF09\",\n \"packs.usage.inbox\": \"\u6536\u4EF6\u7BB1: {path}\",\n \"packs.usage.trash\": \"\u5378\u8F7D\u56DE\u6536\u7AD9: {path}\uFF08pack-update.json \u2192 uninstall.recycleBin\uFF09\",\n \"packs.usage.sources\": \"\u66F4\u65B0\u6E90\u7ED1\u5B9A: {path}\uFF08\u53EF\u624B\u6539 enabled/projectId\uFF09\",\n \"packs.usage.enableNote\": \"\u5B89\u88C5\u9ED8\u8BA4\u5199\u5165 world_*_packs.json \u542F\u7528\uFF1B{hint}\u3002\",\n \"packs.usage.moduleNote\": \"\u6A21\u5757\u805A\u5408\u8BF7\u7528 {cmd}\uFF08\u975E\u672C\u547D\u4EE4\uFF09\u3002\",\n\n \"packUpdate.needKey\":\n \"\u672A\u914D\u7F6E\u4EFB\u4F55 pack \u66F4\u65B0\u6E90\u3002\u8BF7\u7F16\u8F91 {path} \u7684 providers.*.apiKey\uFF08\u6216\u5BF9\u5E94\u73AF\u5883\u53D8\u91CF\uFF09\u3002CurseForge\uFF1Ahttps://console.curseforge.com/ \u7533\u8BF7 Studios Key \u2192 providers.curseforge.apiKey / CURSEFORGE_API_KEY\uFF08\u4E0D\u8981\u7528 Upload API \u7684 UUID Token\uFF09\",\n \"packUpdate.probeNoName\": \"\u65E0\u6CD5\u4ECE manifest / \u6587\u4EF6\u5939\u540D\u6D3E\u751F\u53EF\u641C\u7D22\u540D\u79F0\",\n \"packUpdate.probeQueries\": \"\u63A2\u6D4B\u67E5\u8BE2\u6E90 header={header} folder={folder}\\n \u2192 {queries}\",\n \"packUpdate.probeFail\": \"\u63A2\u6D4B\u66F4\u65B0\u6E90\u5931\u8D25: {message}\",\n \"packUpdate.probeMiss\": \"\u672A\u5728 CurseForge \u627E\u5230\u5339\u914D: {name}\",\n \"packUpdate.probeLowScore\": \"\u5019\u9009\u76F8\u4F3C\u5EA6\u504F\u4F4E: {name} \u2192 {hit} ({score}) {url}\",\n \"packUpdate.probeHit\": \"\u627E\u5230\u53EF\u80FD\u7684\u66F4\u65B0\u6E90: {name} \u2192 {hit} ({score})\\n {url}\",\n \"packUpdate.editHint\": \"\u7A0D\u540E\u53EF\u7F16\u8F91 {path} \u4FEE\u6539/\u5173\u95ED\u5BF9\u5E94\u6E90\uFF08enabled: false\uFF09\",\n \"packUpdate.confirmBind\": \"\u5C06\u6B64 CurseForge \u9879\u76EE\u7ED1\u5B9A\u4E3A\u66F4\u65B0\u6E90\uFF1F {hit}\",\n \"packUpdate.probeAutoBind\": \"\u975E\u4EA4\u4E92\u73AF\u5883\uFF1A\u81EA\u52A8\u7ED1\u5B9A \u2192 {provider}:{slug}\\n {path}\",\n \"packUpdate.probeNoAutoBind\": \"\u975E\u4EA4\u4E92\u73AF\u5883\u4E0D\u81EA\u52A8\u7ED1\u5B9A\uFF1B\u53EF\u7528 packs bind \u624B\u52A8\u7ED1\u5B9A\",\n \"packUpdate.bindSkipped\": \"\u5DF2\u8DF3\u8FC7\u7ED1\u5B9A\",\n \"packUpdate.bindOk\": \"\u5DF2\u7ED1\u5B9A {uuid} \u2192 {provider}:{slug} [{enabled}]\\n \u6587\u4EF6: {path}\",\n \"packUpdate.bindBpOnly\": \"\u53EA\u80FD\u4E3A\u884C\u4E3A\u5305\uFF08BP\uFF09\u7ED1\u5B9A\u66F4\u65B0\u6E90\",\n \"packUpdate.resolveFail\": \"\u65E0\u6CD5\u89E3\u6790 CurseForge \u9879\u76EE: {ref}\",\n \"packUpdate.searchEmpty\": \"CurseForge \u65E0\u7ED3\u679C: {query}\",\n \"packUpdate.sourcesHeader\": \"\u914D\u7F6E: {config}\\n\u7ED1\u5B9A: {sources}\",\n \"packUpdate.sourcesEmpty\": \"\u5C1A\u65E0\u7ED1\u5B9A\u3002\u5B89\u88C5 BP \u540E\u4F1A\u5C1D\u8BD5\u63A2\u6D4B\uFF0C\u6216\u4F7F\u7528 packs bind\u3002\",\n \"packUpdate.disabled\": \"pack-update \u5DF2\u5728\u914D\u7F6E\u4E2D\u7981\u7528\",\n \"packUpdate.bindingDisabled\": \"\u7ED1\u5B9A\u5DF2\u5173\u95ED (enabled: false)\",\n \"packUpdate.noRemoteFile\": \"\u8FDC\u7A0B\u65E0\u53EF\u7528\u6587\u4EF6\",\n \"packUpdate.fileNewer\": \"\u8FDC\u7A0B\u6587\u4EF6\u66F4\u65B0: {file} (id={id})\",\n \"packUpdate.upToDate\": \"\u5DF2\u662F\u6700\u65B0\",\n \"packUpdate.needSync\": \"\u8FDC\u7A0B\u6587\u4EF6\u5C1A\u672A\u540C\u6B65\u5230\u4E16\u754C\u76EE\u5F55\uFF08\u7248\u672C {local} \u2261 {remote}\uFF0CfileId={id}\uFF09\",\n \"packUpdate.remoteNoBp\": \"\u8FDC\u7A0B\u5F52\u6863\u4E2D\u672A\u627E\u5230\u884C\u4E3A\u5305\",\n \"packUpdate.bpNewer\": \"BP \u6709\u66F4\u65B0 {local} \u2192 {remote}\",\n \"packUpdate.installFail\": \"\u5B89\u88C5\u5931\u8D25: {reason}\",\n \"packUpdate.installedBp\": \"\u5DF2\u5199\u5165 BP \u2192 {dir} (v{version})\",\n \"packUpdate.installedRp\": \"\u5DF2\u5199\u5165 RP \u2192 {dir} (v{version})\",\n \"packUpdate.rpInstallMiss\": \"\u5F52\u6863\u542B RP \u4F46\u672A\u80FD\u5B89\u88C5\u914D\u5BF9\u8D44\u6E90\u5305\uFF08\u68C0\u67E5 dependencies / pairedResourceUuid\uFF09\",\n \"packUpdate.applied\": \"\u5DF2\u66F4\u65B0 {name} BP={bp} RP={rp}\",\n \"packUpdate.noBinding\": \"\u672A\u627E\u5230\u66F4\u65B0\u6E90\u7ED1\u5B9A: {id}\",\n \"packUpdate.startupFail\": \"\u542F\u52A8\u65F6\u68C0\u67E5\u66F4\u65B0\u5931\u8D25: {message}\",\n};\n\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
package/dist/index.d.ts CHANGED
@@ -16,9 +16,9 @@
16
16
  * helpers (LogLine buffers, child-process piping) are NOT re-exported.
17
17
  */
18
18
  export { ROOT, isMonorepoLayout, isRuntimeInitialized, resolveServiceScript, resolveFetchModule, spawnService, spawnServiceSync, type ServiceId } from "./runtime.js";
19
- export { SERVICE_NAMES, type ServiceName, type ServiceStatus, refreshServices, startAll, stopAll, forceStopAll, serviceStatus, services, START_ORDER, } from "./services.js";
19
+ export { SERVICE_NAMES, type ServiceName, type ServiceStatus, type ServiceStateEvent, type StartAllResult, type StartOutcome, getQqBackendMode, refreshServices, startAll, stopAll, forceStopAll, queryServicesRuntime, isServiceRunning, onServiceStateChange, services, START_ORDER, } from "./services.js";
20
20
  export { pushLog, onLog, getAllLogs, getRecentLogs, type UnifiedLog, type LogLevel, type LogSource } from "./logs.js";
21
- export { startRepl, getHelp, HELP } from "./repl.js";
21
+ export { startRepl, getHelp } from "./repl.js";
22
22
  export { t, getLocale, setLocale, initLocale, type Locale } from "./i18n/index.js";
23
23
  export { runWizard } from "./wizard.js";
24
24
  export { cmdModuleList, cmdModuleInstall, cmdModuleUninstall, cmdModuleVerify, cmdModuleInfo } from "./module-commands.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,YAAY,EAAE,gBAAgB,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAEtK,OAAO,EACL,aAAa,EACb,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,eAAe,EACf,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,WAAW,GACZ,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtH,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,YAAY,EAAE,gBAAgB,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAEtK,OAAO,EACL,aAAa,EACb,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,gBAAgB,EAChB,eAAe,EACf,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,QAAQ,EACR,WAAW,GACZ,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtH,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
package/dist/index.js CHANGED
@@ -1,21 +1,23 @@
1
1
  import { ROOT, isMonorepoLayout, isRuntimeInitialized, resolveServiceScript, resolveFetchModule, spawnService, spawnServiceSync } from "./runtime.js";
2
2
  import {
3
3
  SERVICE_NAMES,
4
+ getQqBackendMode,
4
5
  refreshServices,
5
6
  startAll,
6
7
  stopAll,
7
8
  forceStopAll,
8
- serviceStatus,
9
+ queryServicesRuntime,
10
+ isServiceRunning,
11
+ onServiceStateChange,
9
12
  services,
10
13
  START_ORDER
11
14
  } from "./services.js";
12
15
  import { pushLog, onLog, getAllLogs, getRecentLogs } from "./logs.js";
13
- import { startRepl, getHelp, HELP } from "./repl.js";
16
+ import { startRepl, getHelp } from "./repl.js";
14
17
  import { t, getLocale, setLocale, initLocale } from "./i18n/index.js";
15
18
  import { runWizard } from "./wizard.js";
16
19
  import { cmdModuleList, cmdModuleInstall, cmdModuleUninstall, cmdModuleVerify, cmdModuleInfo } from "./module-commands.js";
17
20
  export {
18
- HELP,
19
21
  ROOT,
20
22
  SERVICE_NAMES,
21
23
  START_ORDER,
@@ -28,17 +30,20 @@ export {
28
30
  getAllLogs,
29
31
  getHelp,
30
32
  getLocale,
33
+ getQqBackendMode,
31
34
  getRecentLogs,
32
35
  initLocale,
33
36
  isMonorepoLayout,
34
37
  isRuntimeInitialized,
38
+ isServiceRunning,
35
39
  onLog,
40
+ onServiceStateChange,
36
41
  pushLog,
42
+ queryServicesRuntime,
37
43
  refreshServices,
38
44
  resolveFetchModule,
39
45
  resolveServiceScript,
40
46
  runWizard,
41
- serviceStatus,
42
47
  services,
43
48
  setLocale,
44
49
  spawnService,
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts"],
4
- "sourcesContent": ["/**\n * sfmc/ public runtime surface (Stage J \u2014 minimum entry design)\n *\n * This is the clean API that downstream callers (CLI commands,\n * external scripts, CI tooling) consume to manage the runtime stack\n * without re-implementing process lifecycle logic.\n *\n * Design:\n * - Single process tree. sfmc/ does not spawn itself recursively \u2014 it spawns\n * the actual services (db-server, qq-bridge, bds-tools, BDS).\n * - `ROOT` from runtime.ts describes the deployment root so callers\n * can adapt (path lookup, config dir).\n * - Service lifecycle goes through ServiceRegistry (start/stop/restart/status).\n *\n * Re-exports are deliberately thin: each item is a stable contract. Internal\n * helpers (LogLine buffers, child-process piping) are NOT re-exported.\n */\n\nexport { ROOT, isMonorepoLayout, isRuntimeInitialized, resolveServiceScript, resolveFetchModule, spawnService, spawnServiceSync, type ServiceId } from \"./runtime.js\";\n\nexport {\n SERVICE_NAMES,\n type ServiceName,\n type ServiceStatus,\n refreshServices,\n startAll,\n stopAll,\n forceStopAll,\n serviceStatus,\n services,\n START_ORDER,\n} from \"./services.js\";\n\nexport { pushLog, onLog, getAllLogs, getRecentLogs, type UnifiedLog, type LogLevel, type LogSource } from \"./logs.js\";\n\nexport { startRepl, getHelp, HELP } from \"./repl.js\";\nexport { t, getLocale, setLocale, initLocale, type Locale } from \"./i18n/index.js\";\nexport { runWizard } from \"./wizard.js\";\nexport { cmdModuleList, cmdModuleInstall, cmdModuleUninstall, cmdModuleVerify, cmdModuleInfo } from \"./module-commands.js\";\n"],
5
- "mappings": "AAkBA,SAAS,MAAM,kBAAkB,sBAAsB,sBAAsB,oBAAoB,cAAc,wBAAwC;AAEvJ;AAAA,EACE;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,SAAS,OAAO,YAAY,qBAAqE;AAE1G,SAAS,WAAW,SAAS,YAAY;AACzC,SAAS,GAAG,WAAW,WAAW,kBAA+B;AACjE,SAAS,iBAAiB;AAC1B,SAAS,eAAe,kBAAkB,oBAAoB,iBAAiB,qBAAqB;",
4
+ "sourcesContent": ["/**\n * sfmc/ public runtime surface (Stage J \u2014 minimum entry design)\n *\n * This is the clean API that downstream callers (CLI commands,\n * external scripts, CI tooling) consume to manage the runtime stack\n * without re-implementing process lifecycle logic.\n *\n * Design:\n * - Single process tree. sfmc/ does not spawn itself recursively \u2014 it spawns\n * the actual services (db-server, qq-bridge, bds-tools, BDS).\n * - `ROOT` from runtime.ts describes the deployment root so callers\n * can adapt (path lookup, config dir).\n * - Service lifecycle goes through ServiceRegistry (start/stop/restart/status).\n *\n * Re-exports are deliberately thin: each item is a stable contract. Internal\n * helpers (LogLine buffers, child-process piping) are NOT re-exported.\n */\n\nexport { ROOT, isMonorepoLayout, isRuntimeInitialized, resolveServiceScript, resolveFetchModule, spawnService, spawnServiceSync, type ServiceId } from \"./runtime.js\";\n\nexport {\n SERVICE_NAMES,\n type ServiceName,\n type ServiceStatus,\n type ServiceStateEvent,\n type StartAllResult,\n type StartOutcome,\n getQqBackendMode,\n refreshServices,\n startAll,\n stopAll,\n forceStopAll,\n queryServicesRuntime,\n isServiceRunning,\n onServiceStateChange,\n services,\n START_ORDER,\n} from \"./services.js\";\n\nexport { pushLog, onLog, getAllLogs, getRecentLogs, type UnifiedLog, type LogLevel, type LogSource } from \"./logs.js\";\n\nexport { startRepl, getHelp } from \"./repl.js\";\nexport { t, getLocale, setLocale, initLocale, type Locale } from \"./i18n/index.js\";\nexport { runWizard } from \"./wizard.js\";\nexport { cmdModuleList, cmdModuleInstall, cmdModuleUninstall, cmdModuleVerify, cmdModuleInfo } from \"./module-commands.js\";\n"],
5
+ "mappings": "AAkBA,SAAS,MAAM,kBAAkB,sBAAsB,sBAAsB,oBAAoB,cAAc,wBAAwC;AAEvJ;AAAA,EACE;AAAA,EAMA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,SAAS,OAAO,YAAY,qBAAqE;AAE1G,SAAS,WAAW,eAAe;AACnC,SAAS,GAAG,WAAW,WAAW,kBAA+B;AACjE,SAAS,iBAAiB;AAC1B,SAAS,eAAe,kBAAkB,oBAAoB,iBAAiB,qBAAqB;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * llbot-launch.ts — 解析 LLBot 可执行文件与工作目录
3
+ *
4
+ * 历史向导曾把 llbot_path 写成「目录」;schema 语义是可执行文件。
5
+ * 此处兼容二者,避免 spawn 目录导致 ENOENT。
6
+ */
7
+ export declare function defaultLlbotDir(platform?: NodeJS.Platform): string;
8
+ export declare function llbotExeName(platform?: NodeJS.Platform): string;
9
+ export type LlbotLaunch = {
10
+ /** spawn 用的可执行文件绝对/规范化路径 */
11
+ exe: string;
12
+ /** 工作目录 */
13
+ cwd: string;
14
+ };
15
+ /**
16
+ * @param pathRaw qq_config.llbot_path(可为 exe 或目录)
17
+ * @param cwdRaw qq_config.llbot_cwd(目录;可空)
18
+ */
19
+ export declare function resolveLlbotLaunch(pathRaw: unknown, cwdRaw: unknown): LlbotLaunch;
20
+ //# sourceMappingURL=llbot-launch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llbot-launch.d.ts","sourceRoot":"","sources":["../src/llbot-launch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,wBAAgB,eAAe,CAAC,QAAQ,kBAAmB,GAAG,MAAM,CAEnE;AAED,wBAAgB,YAAY,CAAC,QAAQ,kBAAmB,GAAG,MAAM,CAEhE;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,4BAA4B;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW;IACX,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,WAAW,CA+BjF"}
@@ -0,0 +1,40 @@
1
+ import fs from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ function defaultLlbotDir(platform = process.platform) {
5
+ return platform === "win32" ? "D:\\LLBot-CLI-win-x64" : path.join(os.homedir(), "LLBot");
6
+ }
7
+ function llbotExeName(platform = process.platform) {
8
+ return platform === "win32" ? "llbot.exe" : "llbot";
9
+ }
10
+ function resolveLlbotLaunch(pathRaw, cwdRaw) {
11
+ const exeName = llbotExeName();
12
+ const raw = String(pathRaw ?? "").trim();
13
+ const cwdHint = String(cwdRaw ?? "").trim();
14
+ const looksLikeDir = (p) => {
15
+ try {
16
+ if (fs.existsSync(p) && fs.statSync(p).isDirectory()) return true;
17
+ } catch {
18
+ }
19
+ const base = path.basename(p);
20
+ if (/^llbot(\.exe)?$/i.test(base)) return false;
21
+ return !path.extname(p);
22
+ };
23
+ if (!raw) {
24
+ const cwd2 = cwdHint || defaultLlbotDir();
25
+ return { exe: path.join(cwd2, exeName), cwd: cwd2 };
26
+ }
27
+ if (looksLikeDir(raw)) {
28
+ const cwd2 = raw;
29
+ return { exe: path.join(cwd2, exeName), cwd: cwdHint || cwd2 };
30
+ }
31
+ const exe = raw;
32
+ const cwd = cwdHint || path.dirname(exe) || defaultLlbotDir();
33
+ return { exe, cwd };
34
+ }
35
+ export {
36
+ defaultLlbotDir,
37
+ llbotExeName,
38
+ resolveLlbotLaunch
39
+ };
40
+ //# sourceMappingURL=llbot-launch.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/llbot-launch.ts"],
4
+ "sourcesContent": ["/**\n * llbot-launch.ts \u2014 \u89E3\u6790 LLBot \u53EF\u6267\u884C\u6587\u4EF6\u4E0E\u5DE5\u4F5C\u76EE\u5F55\n *\n * \u5386\u53F2\u5411\u5BFC\u66FE\u628A llbot_path \u5199\u6210\u300C\u76EE\u5F55\u300D\uFF1Bschema \u8BED\u4E49\u662F\u53EF\u6267\u884C\u6587\u4EF6\u3002\n * \u6B64\u5904\u517C\u5BB9\u4E8C\u8005\uFF0C\u907F\u514D spawn \u76EE\u5F55\u5BFC\u81F4 ENOENT\u3002\n */\n\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nexport function defaultLlbotDir(platform = process.platform): string {\n return platform === \"win32\" ? \"D:\\\\LLBot-CLI-win-x64\" : path.join(os.homedir(), \"LLBot\");\n}\n\nexport function llbotExeName(platform = process.platform): string {\n return platform === \"win32\" ? \"llbot.exe\" : \"llbot\";\n}\n\nexport type LlbotLaunch = {\n /** spawn \u7528\u7684\u53EF\u6267\u884C\u6587\u4EF6\u7EDD\u5BF9/\u89C4\u8303\u5316\u8DEF\u5F84 */\n exe: string;\n /** \u5DE5\u4F5C\u76EE\u5F55 */\n cwd: string;\n};\n\n/**\n * @param pathRaw qq_config.llbot_path\uFF08\u53EF\u4E3A exe \u6216\u76EE\u5F55\uFF09\n * @param cwdRaw qq_config.llbot_cwd\uFF08\u76EE\u5F55\uFF1B\u53EF\u7A7A\uFF09\n */\nexport function resolveLlbotLaunch(pathRaw: unknown, cwdRaw: unknown): LlbotLaunch {\n const exeName = llbotExeName();\n const raw = String(pathRaw ?? \"\").trim();\n const cwdHint = String(cwdRaw ?? \"\").trim();\n\n const looksLikeDir = (p: string): boolean => {\n try {\n if (fs.existsSync(p) && fs.statSync(p).isDirectory()) return true;\n } catch {\n /* ignore */\n }\n // \u5C1A\u4E0D\u5B58\u5728\u65F6\uFF1A\u65E0\u6269\u5C55\u540D\u4E14\u4E0D\u4EE5 exe \u540D\u7ED3\u5C3E \u2192 \u6309\u76EE\u5F55\u5904\u7406\n const base = path.basename(p);\n if (/^llbot(\\.exe)?$/i.test(base)) return false;\n return !path.extname(p);\n };\n\n if (!raw) {\n const cwd = cwdHint || defaultLlbotDir();\n return { exe: path.join(cwd, exeName), cwd };\n }\n\n if (looksLikeDir(raw)) {\n const cwd = raw;\n return { exe: path.join(cwd, exeName), cwd: cwdHint || cwd };\n }\n\n // \u660E\u786E\u662F\u53EF\u6267\u884C\u6587\u4EF6\u8DEF\u5F84\n const exe = raw;\n const cwd = cwdHint || path.dirname(exe) || defaultLlbotDir();\n return { exe, cwd };\n}\n"],
5
+ "mappings": "AAOA,OAAO,QAAQ;AACf,OAAO,QAAQ;AACf,OAAO,UAAU;AAEV,SAAS,gBAAgB,WAAW,QAAQ,UAAkB;AACnE,SAAO,aAAa,UAAU,0BAA0B,KAAK,KAAK,GAAG,QAAQ,GAAG,OAAO;AACzF;AAEO,SAAS,aAAa,WAAW,QAAQ,UAAkB;AAChE,SAAO,aAAa,UAAU,cAAc;AAC9C;AAaO,SAAS,mBAAmB,SAAkB,QAA8B;AACjF,QAAM,UAAU,aAAa;AAC7B,QAAM,MAAM,OAAO,WAAW,EAAE,EAAE,KAAK;AACvC,QAAM,UAAU,OAAO,UAAU,EAAE,EAAE,KAAK;AAE1C,QAAM,eAAe,CAAC,MAAuB;AAC3C,QAAI;AACF,UAAI,GAAG,WAAW,CAAC,KAAK,GAAG,SAAS,CAAC,EAAE,YAAY,EAAG,QAAO;AAAA,IAC/D,QAAQ;AAAA,IAER;AAEA,UAAM,OAAO,KAAK,SAAS,CAAC;AAC5B,QAAI,mBAAmB,KAAK,IAAI,EAAG,QAAO;AAC1C,WAAO,CAAC,KAAK,QAAQ,CAAC;AAAA,EACxB;AAEA,MAAI,CAAC,KAAK;AACR,UAAMA,OAAM,WAAW,gBAAgB;AACvC,WAAO,EAAE,KAAK,KAAK,KAAKA,MAAK,OAAO,GAAG,KAAAA,KAAI;AAAA,EAC7C;AAEA,MAAI,aAAa,GAAG,GAAG;AACrB,UAAMA,OAAM;AACZ,WAAO,EAAE,KAAK,KAAK,KAAKA,MAAK,OAAO,GAAG,KAAK,WAAWA,KAAI;AAAA,EAC7D;AAGA,QAAM,MAAM;AACZ,QAAM,MAAM,WAAW,KAAK,QAAQ,GAAG,KAAK,gBAAgB;AAC5D,SAAO,EAAE,KAAK,IAAI;AACpB;",
6
+ "names": ["cwd"]
7
+ }
@@ -0,0 +1,69 @@
1
+ import type { LogLevel } from "@sfmc-bds/sdk/logs";
2
+ export type LogFilterMode = "drop" | "keep";
3
+ export type LogFilterApplyTo = "display" | "all";
4
+ export interface LogFilterRule {
5
+ enabled?: boolean;
6
+ sources?: string[];
7
+ levels?: LogLevel[];
8
+ contains?: string;
9
+ /** JS RegExp 源;支持前缀 (?i) 表示忽略大小写 */
10
+ regex?: string;
11
+ }
12
+ export interface LogFilterConfig {
13
+ enabled: boolean;
14
+ mode: LogFilterMode;
15
+ applyTo: LogFilterApplyTo;
16
+ rules: LogFilterRule[];
17
+ }
18
+ export type LogFilterEntry = {
19
+ text: string;
20
+ source: string;
21
+ level: LogLevel;
22
+ };
23
+ export declare function logFilterConfigPath(): string;
24
+ /** 确保 configs/log-filter.json 存在(委托 SDK ensureSchemaConfig,禁止手写 withConfigSchema) */
25
+ export declare function ensureLogFilterConfigFile(): string;
26
+ type CompiledRule = {
27
+ sources?: Set<string>;
28
+ levels?: Set<string>;
29
+ contains?: string;
30
+ regex?: RegExp;
31
+ };
32
+ type CompiledFilter = {
33
+ enabled: boolean;
34
+ mode: LogFilterMode;
35
+ applyTo: LogFilterApplyTo;
36
+ rules: CompiledRule[];
37
+ mtimeMs: number;
38
+ };
39
+ /** 将 (?i) 前缀转为 RegExp i 旗标(JS 无内联 (?i)) */
40
+ export declare function compileLogFilterRegex(src: string): RegExp | null;
41
+ /**
42
+ * 加载并编译过滤配置(按文件 mtime 热读)。
43
+ * onBadRegex:正则非法时回调(由 logs 层打 warn,避免循环依赖)。
44
+ */
45
+ export declare function getCompiledLogFilter(onBadRegex?: (src: string) => void): CompiledFilter;
46
+ /** 单条规则是否命中(同条 AND) */
47
+ export declare function ruleMatchesEntry(rule: CompiledRule, entry: LogFilterEntry): boolean;
48
+ /** 任一规则命中即为 matched */
49
+ export declare function entryMatchesAnyRule(entry: LogFilterEntry, rules: CompiledRule[]): boolean;
50
+ /**
51
+ * 是否应丢弃该条(对展示/内存而言)。
52
+ * enabled=false → 不丢;keep 模式未匹配 → 丢;drop 模式匹配 → 丢。
53
+ */
54
+ export declare function shouldDropForDisplay(entry: LogFilterEntry, filter: CompiledFilter): boolean;
55
+ /** 是否应跳过落盘(仅 applyTo=all 时与 display 一致) */
56
+ export declare function shouldDropForDisk(entry: LogFilterEntry, filter: CompiledFilter): boolean;
57
+ /** 测试用:清空缓存 */
58
+ export declare function resetLogFilterCacheForTests(): void;
59
+ /**
60
+ * 纯函数判定(不读盘):供单测与调用方表驱动。
61
+ * dropDisplay / dropDisk 语义与 pushLog 一致。
62
+ */
63
+ export declare function evaluateLogFilter(entry: LogFilterEntry, cfg: LogFilterConfig): {
64
+ dropDisplay: boolean;
65
+ dropDisk: boolean;
66
+ matched: boolean;
67
+ };
68
+ export {};
69
+ //# sourceMappingURL=log-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-filter.d.ts","sourceRoot":"","sources":["../src/log-filter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAKnD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;AAC5C,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,KAAK,CAAC;AAEjD,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,QAAQ,CAAC;CACjB,CAAC;AASF,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,qFAAqF;AACrF,wBAAgB,yBAAyB,IAAI,MAAM,CAGlD;AAED,KAAK,YAAY,GAAG;IAClB,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,cAAc,GAAG;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAIF,2CAA2C;AAC3C,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYhE;AAiDD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,cAAc,CA8BvF;AAED,uBAAuB;AACvB,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAMnF;AAED,uBAAuB;AACvB,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,OAAO,CAGzF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAK3F;AAED,2CAA2C;AAC3C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAGxF;AAED,eAAe;AACf,wBAAgB,2BAA2B,IAAI,IAAI,CAElD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,cAAc,EACrB,GAAG,EAAE,eAAe,GACnB;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAa/D"}
@@ -0,0 +1,150 @@
1
+ import { ensureSchemaConfig, readJson, stripConfigMeta } from "@sfmc-bds/sdk/node/config";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { ROOT } from "./runtime.js";
5
+ const DEFAULTS = {
6
+ enabled: false,
7
+ mode: "drop",
8
+ applyTo: "display",
9
+ rules: []
10
+ };
11
+ function logFilterConfigPath() {
12
+ return path.join(ROOT, "configs", "log-filter.json");
13
+ }
14
+ function ensureLogFilterConfigFile() {
15
+ ensureSchemaConfig(ROOT, "log-filter.json", "log_filter", { ...DEFAULTS });
16
+ return logFilterConfigPath();
17
+ }
18
+ let cache = null;
19
+ function compileLogFilterRegex(src) {
20
+ let pattern = String(src ?? "");
21
+ let flags = "";
22
+ if (pattern.startsWith("(?i)")) {
23
+ pattern = pattern.slice(4);
24
+ flags = "i";
25
+ }
26
+ try {
27
+ return new RegExp(pattern, flags);
28
+ } catch {
29
+ return null;
30
+ }
31
+ }
32
+ function compileRules(rules, onBadRegex) {
33
+ const out = [];
34
+ for (const r of rules) {
35
+ if (r.enabled === false) continue;
36
+ const hasAny = r.sources && r.sources.length > 0 || r.levels && r.levels.length > 0 || typeof r.contains === "string" && r.contains.length > 0 || typeof r.regex === "string" && r.regex.length > 0;
37
+ if (!hasAny) continue;
38
+ const compiled = {};
39
+ if (r.sources && r.sources.length > 0) {
40
+ compiled.sources = new Set(r.sources.map((s) => s.toLowerCase()));
41
+ }
42
+ if (r.levels && r.levels.length > 0) {
43
+ compiled.levels = new Set(r.levels.map((l) => l.toLowerCase()));
44
+ }
45
+ if (typeof r.contains === "string" && r.contains.length > 0) {
46
+ compiled.contains = r.contains;
47
+ }
48
+ if (typeof r.regex === "string" && r.regex.length > 0) {
49
+ const re = compileLogFilterRegex(r.regex);
50
+ if (!re) {
51
+ onBadRegex?.(r.regex);
52
+ continue;
53
+ }
54
+ compiled.regex = re;
55
+ }
56
+ out.push(compiled);
57
+ }
58
+ return out;
59
+ }
60
+ function normalizeConfig(raw) {
61
+ const stripped = stripConfigMeta(raw);
62
+ const mode = stripped.mode === "keep" ? "keep" : "drop";
63
+ const applyTo = stripped.applyTo === "all" ? "all" : "display";
64
+ const rules = Array.isArray(stripped.rules) ? stripped.rules : [];
65
+ return {
66
+ enabled: Boolean(stripped.enabled),
67
+ mode,
68
+ applyTo,
69
+ rules
70
+ };
71
+ }
72
+ function getCompiledLogFilter(onBadRegex) {
73
+ const p = ensureLogFilterConfigFile();
74
+ let mtimeMs = 0;
75
+ try {
76
+ mtimeMs = fs.statSync(p).mtimeMs;
77
+ } catch {
78
+ mtimeMs = 0;
79
+ }
80
+ if (cache && cache.mtimeMs === mtimeMs) return cache;
81
+ let cfg = { ...DEFAULTS };
82
+ const raw = readJson(p);
83
+ if (raw) {
84
+ try {
85
+ cfg = normalizeConfig(raw);
86
+ } catch {
87
+ cfg = { ...DEFAULTS };
88
+ }
89
+ }
90
+ const rules = compileRules(cfg.rules, onBadRegex);
91
+ cache = {
92
+ enabled: cfg.enabled,
93
+ mode: cfg.mode,
94
+ applyTo: cfg.applyTo,
95
+ rules,
96
+ mtimeMs
97
+ };
98
+ return cache;
99
+ }
100
+ function ruleMatchesEntry(rule, entry) {
101
+ if (rule.sources && !rule.sources.has(entry.source.toLowerCase())) return false;
102
+ if (rule.levels && !rule.levels.has(entry.level.toLowerCase())) return false;
103
+ if (rule.contains != null && !entry.text.includes(rule.contains)) return false;
104
+ if (rule.regex && !rule.regex.test(entry.text)) return false;
105
+ return true;
106
+ }
107
+ function entryMatchesAnyRule(entry, rules) {
108
+ if (rules.length === 0) return false;
109
+ return rules.some((r) => ruleMatchesEntry(r, entry));
110
+ }
111
+ function shouldDropForDisplay(entry, filter) {
112
+ if (!filter.enabled) return false;
113
+ const matched = entryMatchesAnyRule(entry, filter.rules);
114
+ if (filter.mode === "keep") return !matched;
115
+ return matched;
116
+ }
117
+ function shouldDropForDisk(entry, filter) {
118
+ if (filter.applyTo !== "all") return false;
119
+ return shouldDropForDisplay(entry, filter);
120
+ }
121
+ function resetLogFilterCacheForTests() {
122
+ cache = null;
123
+ }
124
+ function evaluateLogFilter(entry, cfg) {
125
+ const compiled = {
126
+ enabled: cfg.enabled,
127
+ mode: cfg.mode,
128
+ applyTo: cfg.applyTo,
129
+ rules: compileRules(cfg.rules),
130
+ mtimeMs: 0
131
+ };
132
+ return {
133
+ matched: entryMatchesAnyRule(entry, compiled.rules),
134
+ dropDisplay: shouldDropForDisplay(entry, compiled),
135
+ dropDisk: shouldDropForDisk(entry, compiled)
136
+ };
137
+ }
138
+ export {
139
+ compileLogFilterRegex,
140
+ ensureLogFilterConfigFile,
141
+ entryMatchesAnyRule,
142
+ evaluateLogFilter,
143
+ getCompiledLogFilter,
144
+ logFilterConfigPath,
145
+ resetLogFilterCacheForTests,
146
+ ruleMatchesEntry,
147
+ shouldDropForDisk,
148
+ shouldDropForDisplay
149
+ };
150
+ //# sourceMappingURL=log-filter.js.map