@sfmc-bds/cli 0.2.0-beta.1 → 0.2.0-beta.11

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 (197) hide show
  1. package/LICENSE +663 -0
  2. package/dist/argv-parse.d.ts +11 -0
  3. package/dist/argv-parse.d.ts.map +1 -0
  4. package/dist/argv-parse.js +28 -0
  5. package/dist/argv-parse.js.map +7 -0
  6. package/dist/cli-gate.d.ts +11 -0
  7. package/dist/cli-gate.d.ts.map +1 -0
  8. package/dist/cli-gate.js +46 -0
  9. package/dist/cli-gate.js.map +7 -0
  10. package/dist/command-palette.d.ts +61 -0
  11. package/dist/command-palette.d.ts.map +1 -0
  12. package/dist/command-palette.js +352 -0
  13. package/dist/command-palette.js.map +7 -0
  14. package/dist/command-surface.d.ts +85 -0
  15. package/dist/command-surface.d.ts.map +1 -0
  16. package/dist/command-surface.js +292 -0
  17. package/dist/command-surface.js.map +7 -0
  18. package/dist/command-surface.test.js +92 -0
  19. package/dist/command-surface.test.js.map +7 -0
  20. package/dist/commands-reload.js +2 -2
  21. package/dist/commands-reload.js.map +2 -2
  22. package/dist/commands.d.ts +1 -1
  23. package/dist/commands.d.ts.map +1 -1
  24. package/dist/commands.js +196 -21
  25. package/dist/commands.js.map +2 -2
  26. package/dist/debug-command.d.ts +5 -0
  27. package/dist/debug-command.d.ts.map +1 -0
  28. package/dist/debug-command.js +118 -0
  29. package/dist/debug-command.js.map +7 -0
  30. package/dist/debug-command.test.js +76 -0
  31. package/dist/debug-command.test.js.map +7 -0
  32. package/dist/directory-picker.d.ts +27 -0
  33. package/dist/directory-picker.d.ts.map +1 -0
  34. package/dist/directory-picker.js +112 -0
  35. package/dist/directory-picker.js.map +7 -0
  36. package/dist/help-text.d.ts +3 -0
  37. package/dist/help-text.d.ts.map +1 -0
  38. package/dist/help-text.js +160 -0
  39. package/dist/help-text.js.map +7 -0
  40. package/dist/i18n/locales/en.d.ts +94 -79
  41. package/dist/i18n/locales/en.d.ts.map +1 -1
  42. package/dist/i18n/locales/en.js +96 -81
  43. package/dist/i18n/locales/en.js.map +2 -2
  44. package/dist/i18n/locales/zh-CN.d.ts.map +1 -1
  45. package/dist/i18n/locales/zh-CN.js +130 -109
  46. package/dist/i18n/locales/zh-CN.js.map +2 -2
  47. package/dist/index.d.ts +2 -2
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +9 -4
  50. package/dist/index.js.map +2 -2
  51. package/dist/interactive-prompts.d.ts +1 -2
  52. package/dist/interactive-prompts.d.ts.map +1 -1
  53. package/dist/interactive-prompts.js +12 -23
  54. package/dist/interactive-prompts.js.map +3 -3
  55. package/dist/llbot-launch.d.ts +20 -0
  56. package/dist/llbot-launch.d.ts.map +1 -0
  57. package/dist/llbot-launch.js +40 -0
  58. package/dist/llbot-launch.js.map +7 -0
  59. package/dist/log-filter.test.js +119 -0
  60. package/dist/log-filter.test.js.map +7 -0
  61. package/dist/logs.d.ts +16 -1
  62. package/dist/logs.d.ts.map +1 -1
  63. package/dist/logs.js +80 -11
  64. package/dist/logs.js.map +2 -2
  65. package/dist/main.js +55 -46
  66. package/dist/main.js.map +2 -2
  67. package/dist/module-commands.d.ts +17 -40
  68. package/dist/module-commands.d.ts.map +1 -1
  69. package/dist/module-commands.js +129 -85
  70. package/dist/module-commands.js.map +2 -2
  71. package/dist/module-pack-build.d.ts +10 -0
  72. package/dist/module-pack-build.d.ts.map +1 -0
  73. package/dist/module-pack-build.js +434 -0
  74. package/dist/module-pack-build.js.map +7 -0
  75. package/dist/module-toggle.d.ts +33 -0
  76. package/dist/module-toggle.d.ts.map +1 -0
  77. package/dist/module-toggle.js +28 -0
  78. package/dist/module-toggle.js.map +7 -0
  79. package/dist/module-toggle.test.js +37 -0
  80. package/dist/module-toggle.test.js.map +7 -0
  81. package/dist/node-service-probe.d.ts +18 -0
  82. package/dist/node-service-probe.d.ts.map +1 -0
  83. package/dist/node-service-probe.js +97 -0
  84. package/dist/node-service-probe.js.map +7 -0
  85. package/dist/pack-lifecycle.d.ts +1 -1
  86. package/dist/pack-lifecycle.d.ts.map +1 -1
  87. package/dist/pack-lifecycle.js +14 -4
  88. package/dist/pack-lifecycle.js.map +2 -2
  89. package/dist/pack-update/index.d.ts +18 -0
  90. package/dist/pack-update/index.d.ts.map +1 -0
  91. package/dist/pack-update/index.js +113 -0
  92. package/dist/pack-update/index.js.map +7 -0
  93. package/dist/registry.d.ts +7 -4
  94. package/dist/registry.d.ts.map +1 -1
  95. package/dist/registry.js +15 -3
  96. package/dist/registry.js.map +2 -2
  97. package/dist/repl-windows/format-display.d.ts +10 -0
  98. package/dist/repl-windows/format-display.d.ts.map +1 -0
  99. package/dist/repl-windows/format-display.js +57 -0
  100. package/dist/repl-windows/format-display.js.map +7 -0
  101. package/dist/repl-windows/host.d.ts +60 -0
  102. package/dist/repl-windows/host.d.ts.map +1 -0
  103. package/dist/repl-windows/host.js +179 -0
  104. package/dist/repl-windows/host.js.map +7 -0
  105. package/dist/repl-windows/index.d.ts +9 -0
  106. package/dist/repl-windows/index.d.ts.map +1 -0
  107. package/dist/repl-windows/index.js +13 -0
  108. package/dist/repl-windows/index.js.map +7 -0
  109. package/dist/repl-windows/logs-filter-window.d.ts +15 -0
  110. package/dist/repl-windows/logs-filter-window.d.ts.map +1 -0
  111. package/dist/repl-windows/logs-filter-window.js +77 -0
  112. package/dist/repl-windows/logs-filter-window.js.map +7 -0
  113. package/dist/repl-windows/service-window.d.ts +4 -0
  114. package/dist/repl-windows/service-window.d.ts.map +1 -0
  115. package/dist/repl-windows/service-window.js +35 -0
  116. package/dist/repl-windows/service-window.js.map +7 -0
  117. package/dist/repl-windows/types.d.ts +56 -0
  118. package/dist/repl-windows/types.d.ts.map +1 -0
  119. package/dist/repl-windows/types.js +1 -0
  120. package/dist/repl-windows/types.js.map +7 -0
  121. package/dist/repl.d.ts +6 -9
  122. package/dist/repl.d.ts.map +1 -1
  123. package/dist/repl.js +698 -427
  124. package/dist/repl.js.map +3 -3
  125. package/dist/runtime.d.ts +6 -13
  126. package/dist/runtime.d.ts.map +1 -1
  127. package/dist/runtime.js +23 -28
  128. package/dist/runtime.js.map +2 -2
  129. package/dist/send-target.d.ts +11 -0
  130. package/dist/send-target.d.ts.map +1 -0
  131. package/dist/send-target.js +42 -0
  132. package/dist/send-target.js.map +7 -0
  133. package/dist/services.d.ts +50 -4
  134. package/dist/services.d.ts.map +1 -1
  135. package/dist/services.js +244 -20
  136. package/dist/services.js.map +2 -2
  137. package/dist/theme.js +1 -1
  138. package/dist/theme.js.map +2 -2
  139. package/dist/wizard.d.ts.map +1 -1
  140. package/dist/wizard.js +76 -16
  141. package/dist/wizard.js.map +2 -2
  142. package/dist/world-packs-uninstall.test.js +54 -0
  143. package/dist/world-packs-uninstall.test.js.map +7 -0
  144. package/dist/world-packs.d.ts.map +1 -1
  145. package/dist/world-packs.js +6 -3
  146. package/dist/world-packs.js.map +2 -2
  147. package/package.json +29 -24
  148. package/scripts/module-install/check-modules.mjs +204 -0
  149. package/scripts/module-install/fetch-module.mjs +1007 -0
  150. package/scripts/module-install/lib/catalog.mjs +96 -0
  151. package/scripts/module-install/lib/io.mjs +37 -0
  152. package/scripts/module-install/lib/link-from.mjs +80 -0
  153. package/scripts/module-install/lib/lock.mjs +78 -0
  154. package/scripts/module-install/lib/npm-resolver.mjs +55 -0
  155. package/scripts/module-install/lib/packages.mjs +142 -0
  156. package/scripts/module-install/lib/paths.mjs +48 -0
  157. package/scripts/module-install/lib/registry-index.mjs +50 -0
  158. package/scripts/module-install/test/install-resolver.test.ts +47 -0
  159. package/scripts/module-install/test/link-local.test.ts +50 -0
  160. package/scripts/module-install/test/local-resolver.test.ts +44 -0
  161. package/scripts/module-install/test/registry-index.test.ts +27 -0
  162. package/dist/module-wizard.d.ts +0 -14
  163. package/dist/module-wizard.d.ts.map +0 -1
  164. package/dist/module-wizard.js +0 -313
  165. package/dist/module-wizard.js.map +0 -7
  166. package/dist/pack-update/bindings.d.ts +0 -12
  167. package/dist/pack-update/bindings.d.ts.map +0 -1
  168. package/dist/pack-update/bindings.js +0 -64
  169. package/dist/pack-update/bindings.js.map +0 -7
  170. package/dist/pack-update/config.d.ts +0 -22
  171. package/dist/pack-update/config.d.ts.map +0 -1
  172. package/dist/pack-update/config.js +0 -141
  173. package/dist/pack-update/config.js.map +0 -7
  174. package/dist/pack-update/providers/curseforge.d.ts +0 -23
  175. package/dist/pack-update/providers/curseforge.d.ts.map +0 -1
  176. package/dist/pack-update/providers/curseforge.js +0 -229
  177. package/dist/pack-update/providers/curseforge.js.map +0 -7
  178. package/dist/pack-update/providers/index.d.ts +0 -16
  179. package/dist/pack-update/providers/index.d.ts.map +0 -1
  180. package/dist/pack-update/providers/index.js +0 -37
  181. package/dist/pack-update/providers/index.js.map +0 -7
  182. package/dist/pack-update/service.d.ts +0 -21
  183. package/dist/pack-update/service.d.ts.map +0 -1
  184. package/dist/pack-update/service.js +0 -572
  185. package/dist/pack-update/service.js.map +0 -7
  186. package/dist/pack-update/types.d.ts +0 -126
  187. package/dist/pack-update/types.d.ts.map +0 -1
  188. package/dist/pack-update/types.js +0 -8
  189. package/dist/pack-update/types.js.map +0 -7
  190. package/dist/pack-update/version-policy.d.ts +0 -81
  191. package/dist/pack-update/version-policy.d.ts.map +0 -1
  192. package/dist/pack-update/version-policy.js +0 -210
  193. package/dist/pack-update/version-policy.js.map +0 -7
  194. package/dist/remote-agent.d.ts +0 -18
  195. package/dist/remote-agent.d.ts.map +0 -1
  196. package/dist/remote-agent.js +0 -196
  197. 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\": \"\u8986\u76D6\u5DF2\u6709\u5305\uFF08\u76F8\u540C UUID\uFF0C\u7248\u672C\u672A\u66F4\u9AD8\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"],
5
- "mappings": "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",
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 \"prompt.browseUnavailable\": \"\u65E0\u6CD5\u6253\u5F00\u7CFB\u7EDF\u9009\u62E9\u5668\uFF0C\u8BF7\u624B\u52A8\u8F93\u5165\u8DEF\u5F84\",\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
  }
@@ -1,7 +1,6 @@
1
1
  /** 与 init 向导一致:文本输入或系统文件夹选择器。 */
2
2
  export declare function pickDirectory(message: string, defaultDirectory: string): Promise<string>;
3
- /** Windows 文件夹选择器;非 Windows 或失败时返回 null。 */
4
- export declare function pickDirectoryDialog(title: string, defaultDirectory: string): string | null;
3
+ export { pickDirectoryDialog, type DirectoryPickerResult } from "./directory-picker.js";
5
4
  export declare function ensureDirectory(directory: string): boolean;
6
5
  /** 将用户输入规范为绝对路径(兼容含 # 的 Windows 路径)。 */
7
6
  export declare function resolveUserPath(input: string, base?: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-prompts.d.ts","sourceRoot":"","sources":["../src/interactive-prompts.ts"],"names":[],"mappings":"AAMA,iCAAiC;AACjC,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAa9F;AAED,4CAA4C;AAC5C,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAqB1F;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAO1D;AAED,wCAAwC;AACxC,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,SAAgB,GAAG,MAAM,CAE3E"}
1
+ {"version":3,"file":"interactive-prompts.d.ts","sourceRoot":"","sources":["../src/interactive-prompts.ts"],"names":[],"mappings":"AAMA,iCAAiC;AACjC,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAwB9F;AAED,OAAO,EAAE,mBAAmB,EAAE,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAExF,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAO1D;AAED,wCAAwC;AACxC,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,SAAgB,GAAG,MAAM,CAE3E"}
@@ -1,7 +1,7 @@
1
1
  import { isCancel, select, text } from "@clack/prompts";
2
- import { execFileSync } from "node:child_process";
3
2
  import fs from "node:fs";
4
3
  import path from "node:path";
4
+ import { pickDirectoryDialog as runNativeDirectoryPicker } from "./directory-picker.js";
5
5
  import { t } from "./i18n/index.js";
6
6
  async function pickDirectory(message, defaultDirectory) {
7
7
  const method = await select({
@@ -12,31 +12,20 @@ async function pickDirectory(message, defaultDirectory) {
12
12
  ]
13
13
  });
14
14
  if (isCancel(method)) return defaultDirectory;
15
- if (method === "browse") return pickDirectoryDialog(message, defaultDirectory) ?? defaultDirectory;
16
- const selected = await text({ message, initialValue: defaultDirectory });
17
- return isCancel(selected) || !selected ? defaultDirectory : selected;
18
- }
19
- function pickDirectoryDialog(title, defaultDirectory) {
20
- if (process.platform !== "win32") return null;
21
- const escape = (value) => value.replace(/'/g, "''");
22
- const script = [
23
- "Add-Type -AssemblyName System.Windows.Forms",
24
- "$dialog = New-Object System.Windows.Forms.FolderBrowserDialog",
25
- `$dialog.Description = '${escape(title)}'`,
26
- `$dialog.SelectedPath = '${escape(defaultDirectory)}'`,
27
- "if ($dialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) { Write-Output $dialog.SelectedPath }"
28
- ].join("; ");
29
- try {
30
- const output = execFileSync("powershell.exe", ["-NoProfile", "-STA", "-Command", script], {
31
- encoding: "utf-8",
32
- timeout: 3e4,
33
- windowsHide: true
15
+ if (method === "browse") {
16
+ const result = runNativeDirectoryPicker(message, defaultDirectory);
17
+ if (result.status === "selected") return result.path;
18
+ if (result.status === "cancelled") return defaultDirectory;
19
+ const selected2 = await text({
20
+ message: `${message} \u2014 ${t("prompt.browseUnavailable")}`,
21
+ initialValue: defaultDirectory
34
22
  });
35
- return output.trim() || null;
36
- } catch {
37
- return null;
23
+ return isCancel(selected2) || !selected2 ? defaultDirectory : selected2;
38
24
  }
25
+ const selected = await text({ message, initialValue: defaultDirectory });
26
+ return isCancel(selected) || !selected ? defaultDirectory : selected;
39
27
  }
28
+ import { pickDirectoryDialog } from "./directory-picker.js";
40
29
  function ensureDirectory(directory) {
41
30
  try {
42
31
  fs.mkdirSync(directory, { recursive: true });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/interactive-prompts.ts"],
4
- "sourcesContent": ["import { isCancel, select, text } from \"@clack/prompts\";\nimport { execFileSync } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { t } from \"./i18n/index.js\";\n\n/** \u4E0E init \u5411\u5BFC\u4E00\u81F4\uFF1A\u6587\u672C\u8F93\u5165\u6216\u7CFB\u7EDF\u6587\u4EF6\u5939\u9009\u62E9\u5668\u3002 */\nexport async function pickDirectory(message: string, defaultDirectory: string): Promise<string> {\n const method = await select({\n message,\n options: [\n { value: \"text\", label: t(\"prompt.enterPath\"), hint: defaultDirectory },\n { value: \"browse\", label: t(\"prompt.browse\"), hint: t(\"prompt.browseHint\") },\n ],\n });\n if (isCancel(method)) return defaultDirectory;\n if (method === \"browse\") return pickDirectoryDialog(message, defaultDirectory) ?? defaultDirectory;\n\n const selected = await text({ message, initialValue: defaultDirectory });\n return isCancel(selected) || !selected ? defaultDirectory : selected;\n}\n\n/** Windows \u6587\u4EF6\u5939\u9009\u62E9\u5668\uFF1B\u975E Windows \u6216\u5931\u8D25\u65F6\u8FD4\u56DE null\u3002 */\nexport function pickDirectoryDialog(title: string, defaultDirectory: string): string | null {\n if (process.platform !== \"win32\") return null;\n const escape = (value: string): string => value.replace(/'/g, \"''\");\n const script = [\n \"Add-Type -AssemblyName System.Windows.Forms\",\n \"$dialog = New-Object System.Windows.Forms.FolderBrowserDialog\",\n `$dialog.Description = '${escape(title)}'`,\n `$dialog.SelectedPath = '${escape(defaultDirectory)}'`,\n \"if ($dialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) { Write-Output $dialog.SelectedPath }\",\n ].join(\"; \");\n\n try {\n const output = execFileSync(\"powershell.exe\", [\"-NoProfile\", \"-STA\", \"-Command\", script], {\n encoding: \"utf-8\",\n timeout: 30_000,\n windowsHide: true,\n });\n return output.trim() || null;\n } catch {\n return null;\n }\n}\n\nexport function ensureDirectory(directory: string): boolean {\n try {\n fs.mkdirSync(directory, { recursive: true });\n return fs.statSync(directory).isDirectory();\n } catch {\n return false;\n }\n}\n\n/** \u5C06\u7528\u6237\u8F93\u5165\u89C4\u8303\u4E3A\u7EDD\u5BF9\u8DEF\u5F84\uFF08\u517C\u5BB9\u542B # \u7684 Windows \u8DEF\u5F84\uFF09\u3002 */\nexport function resolveUserPath(input: string, base = process.cwd()): string {\n return path.resolve(base, input.trim());\n}\n"],
5
- "mappings": "AAAA,SAAS,UAAU,QAAQ,YAAY;AACvC,SAAS,oBAAoB;AAC7B,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,SAAS,SAAS;AAGlB,eAAsB,cAAc,SAAiB,kBAA2C;AAC9F,QAAM,SAAS,MAAM,OAAO;AAAA,IAC1B;AAAA,IACA,SAAS;AAAA,MACP,EAAE,OAAO,QAAQ,OAAO,EAAE,kBAAkB,GAAG,MAAM,iBAAiB;AAAA,MACtE,EAAE,OAAO,UAAU,OAAO,EAAE,eAAe,GAAG,MAAM,EAAE,mBAAmB,EAAE;AAAA,IAC7E;AAAA,EACF,CAAC;AACD,MAAI,SAAS,MAAM,EAAG,QAAO;AAC7B,MAAI,WAAW,SAAU,QAAO,oBAAoB,SAAS,gBAAgB,KAAK;AAElF,QAAM,WAAW,MAAM,KAAK,EAAE,SAAS,cAAc,iBAAiB,CAAC;AACvE,SAAO,SAAS,QAAQ,KAAK,CAAC,WAAW,mBAAmB;AAC9D;AAGO,SAAS,oBAAoB,OAAe,kBAAyC;AAC1F,MAAI,QAAQ,aAAa,QAAS,QAAO;AACzC,QAAM,SAAS,CAAC,UAA0B,MAAM,QAAQ,MAAM,IAAI;AAClE,QAAM,SAAS;AAAA,IACb;AAAA,IACA;AAAA,IACA,0BAA0B,OAAO,KAAK,CAAC;AAAA,IACvC,2BAA2B,OAAO,gBAAgB,CAAC;AAAA,IACnD;AAAA,EACF,EAAE,KAAK,IAAI;AAEX,MAAI;AACF,UAAM,SAAS,aAAa,kBAAkB,CAAC,cAAc,QAAQ,YAAY,MAAM,GAAG;AAAA,MACxF,UAAU;AAAA,MACV,SAAS;AAAA,MACT,aAAa;AAAA,IACf,CAAC;AACD,WAAO,OAAO,KAAK,KAAK;AAAA,EAC1B,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,gBAAgB,WAA4B;AAC1D,MAAI;AACF,OAAG,UAAU,WAAW,EAAE,WAAW,KAAK,CAAC;AAC3C,WAAO,GAAG,SAAS,SAAS,EAAE,YAAY;AAAA,EAC5C,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAGO,SAAS,gBAAgB,OAAe,OAAO,QAAQ,IAAI,GAAW;AAC3E,SAAO,KAAK,QAAQ,MAAM,MAAM,KAAK,CAAC;AACxC;",
6
- "names": []
4
+ "sourcesContent": ["import { isCancel, select, text } from \"@clack/prompts\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { pickDirectoryDialog as runNativeDirectoryPicker } from \"./directory-picker.js\";\nimport { t } from \"./i18n/index.js\";\n\n/** \u4E0E init \u5411\u5BFC\u4E00\u81F4\uFF1A\u6587\u672C\u8F93\u5165\u6216\u7CFB\u7EDF\u6587\u4EF6\u5939\u9009\u62E9\u5668\u3002 */\nexport async function pickDirectory(message: string, defaultDirectory: string): Promise<string> {\n const method = await select({\n message,\n options: [\n { value: \"text\", label: t(\"prompt.enterPath\"), hint: defaultDirectory },\n { value: \"browse\", label: t(\"prompt.browse\"), hint: t(\"prompt.browseHint\") },\n ],\n });\n if (isCancel(method)) return defaultDirectory;\n\n if (method === \"browse\") {\n const result = runNativeDirectoryPicker(message, defaultDirectory);\n if (result.status === \"selected\") return result.path;\n if (result.status === \"cancelled\") return defaultDirectory;\n\n const selected = await text({\n message: `${message} \u2014 ${t(\"prompt.browseUnavailable\")}`,\n initialValue: defaultDirectory,\n });\n return isCancel(selected) || !selected ? defaultDirectory : selected;\n }\n\n const selected = await text({ message, initialValue: defaultDirectory });\n return isCancel(selected) || !selected ? defaultDirectory : selected;\n}\n\nexport { pickDirectoryDialog, type DirectoryPickerResult } from \"./directory-picker.js\";\n\nexport function ensureDirectory(directory: string): boolean {\n try {\n fs.mkdirSync(directory, { recursive: true });\n return fs.statSync(directory).isDirectory();\n } catch {\n return false;\n }\n}\n\n/** \u5C06\u7528\u6237\u8F93\u5165\u89C4\u8303\u4E3A\u7EDD\u5BF9\u8DEF\u5F84\uFF08\u517C\u5BB9\u542B # \u7684 Windows \u8DEF\u5F84\uFF09\u3002 */\nexport function resolveUserPath(input: string, base = process.cwd()): string {\n return path.resolve(base, input.trim());\n}\n"],
5
+ "mappings": "AAAA,SAAS,UAAU,QAAQ,YAAY;AACvC,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,SAAS,uBAAuB,gCAAgC;AAChE,SAAS,SAAS;AAGlB,eAAsB,cAAc,SAAiB,kBAA2C;AAC9F,QAAM,SAAS,MAAM,OAAO;AAAA,IAC1B;AAAA,IACA,SAAS;AAAA,MACP,EAAE,OAAO,QAAQ,OAAO,EAAE,kBAAkB,GAAG,MAAM,iBAAiB;AAAA,MACtE,EAAE,OAAO,UAAU,OAAO,EAAE,eAAe,GAAG,MAAM,EAAE,mBAAmB,EAAE;AAAA,IAC7E;AAAA,EACF,CAAC;AACD,MAAI,SAAS,MAAM,EAAG,QAAO;AAE7B,MAAI,WAAW,UAAU;AACvB,UAAM,SAAS,yBAAyB,SAAS,gBAAgB;AACjE,QAAI,OAAO,WAAW,WAAY,QAAO,OAAO;AAChD,QAAI,OAAO,WAAW,YAAa,QAAO;AAE1C,UAAMA,YAAW,MAAM,KAAK;AAAA,MAC1B,SAAS,GAAG,OAAO,WAAM,EAAE,0BAA0B,CAAC;AAAA,MACtD,cAAc;AAAA,IAChB,CAAC;AACD,WAAO,SAASA,SAAQ,KAAK,CAACA,YAAW,mBAAmBA;AAAA,EAC9D;AAEA,QAAM,WAAW,MAAM,KAAK,EAAE,SAAS,cAAc,iBAAiB,CAAC;AACvE,SAAO,SAAS,QAAQ,KAAK,CAAC,WAAW,mBAAmB;AAC9D;AAEA,SAAS,2BAAuD;AAEzD,SAAS,gBAAgB,WAA4B;AAC1D,MAAI;AACF,OAAG,UAAU,WAAW,EAAE,WAAW,KAAK,CAAC;AAC3C,WAAO,GAAG,SAAS,SAAS,EAAE,YAAY;AAAA,EAC5C,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAGO,SAAS,gBAAgB,OAAe,OAAO,QAAQ,IAAI,GAAW;AAC3E,SAAO,KAAK,QAAQ,MAAM,MAAM,KAAK,CAAC;AACxC;",
6
+ "names": ["selected"]
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,119 @@
1
+ import assert from "node:assert/strict";
2
+ import test from "node:test";
3
+ import { compileLogFilterRegex, evaluateLogFilter } from "./log-filter.js";
4
+ const entry = (over = {}) => ({
5
+ text: "Player connected: Steve",
6
+ source: "bds",
7
+ level: "info",
8
+ ...over
9
+ });
10
+ const baseCfg = (over = {}) => ({
11
+ enabled: true,
12
+ mode: "drop",
13
+ applyTo: "display",
14
+ rules: [],
15
+ ...over
16
+ });
17
+ test("enabled=false \u6C38\u4E0D\u4E22\u5F03", () => {
18
+ const r = evaluateLogFilter(
19
+ entry(),
20
+ baseCfg({
21
+ enabled: false,
22
+ mode: "keep",
23
+ rules: [{ sources: ["bds"] }]
24
+ })
25
+ );
26
+ assert.equal(r.dropDisplay, false);
27
+ assert.equal(r.dropDisk, false);
28
+ });
29
+ test("drop \xD7 sources \u547D\u4E2D\u5219\u4E22\u5F03\u5C55\u793A", () => {
30
+ const r = evaluateLogFilter(entry(), baseCfg({ rules: [{ sources: ["bds", "pack"] }] }));
31
+ assert.equal(r.matched, true);
32
+ assert.equal(r.dropDisplay, true);
33
+ assert.equal(r.dropDisk, false);
34
+ });
35
+ test("drop \xD7 sources \u672A\u547D\u4E2D\u5219\u4FDD\u7559", () => {
36
+ const r = evaluateLogFilter(entry({ source: "system" }), baseCfg({ rules: [{ sources: ["bds"] }] }));
37
+ assert.equal(r.matched, false);
38
+ assert.equal(r.dropDisplay, false);
39
+ });
40
+ test("drop \xD7 levels", () => {
41
+ const hit = evaluateLogFilter(entry({ level: "debug" }), baseCfg({ rules: [{ levels: ["debug", "info"] }] }));
42
+ const miss = evaluateLogFilter(entry({ level: "error" }), baseCfg({ rules: [{ levels: ["debug"] }] }));
43
+ assert.equal(hit.dropDisplay, true);
44
+ assert.equal(miss.dropDisplay, false);
45
+ });
46
+ test("drop \xD7 contains\uFF08\u5927\u5C0F\u5199\u654F\u611F\uFF09", () => {
47
+ const hit = evaluateLogFilter(entry(), baseCfg({ rules: [{ contains: "Player connected" }] }));
48
+ const miss = evaluateLogFilter(entry(), baseCfg({ rules: [{ contains: "player connected" }] }));
49
+ assert.equal(hit.dropDisplay, true);
50
+ assert.equal(miss.dropDisplay, false);
51
+ });
52
+ test("drop \xD7 regex \u4E0E (?i) \u65D7\u6807", () => {
53
+ const hit = evaluateLogFilter(
54
+ entry({ text: "GAMERULE keepInventory" }),
55
+ baseCfg({ rules: [{ regex: "(?i)gamerule|syntax error" }] })
56
+ );
57
+ const miss = evaluateLogFilter(entry({ text: "hello" }), baseCfg({ rules: [{ regex: "(?i)gamerule" }] }));
58
+ assert.equal(hit.dropDisplay, true);
59
+ assert.equal(miss.dropDisplay, false);
60
+ assert.ok(compileLogFilterRegex("(?i)ABC")?.test("abc"));
61
+ assert.equal(compileLogFilterRegex("("), null);
62
+ });
63
+ test("\u540C\u6761 AND\uFF1Asources + contains \u987B\u540C\u65F6\u6EE1\u8DB3", () => {
64
+ const both = evaluateLogFilter(entry(), baseCfg({ rules: [{ sources: ["bds"], contains: "Player" }] }));
65
+ const onlySource = evaluateLogFilter(
66
+ entry({ text: "nope" }),
67
+ baseCfg({ rules: [{ sources: ["bds"], contains: "Player" }] })
68
+ );
69
+ assert.equal(both.dropDisplay, true);
70
+ assert.equal(onlySource.dropDisplay, false);
71
+ });
72
+ test("\u591A\u6761 OR\uFF1A\u4EFB\u4E00\u547D\u4E2D\u5373\u53EF", () => {
73
+ const r = evaluateLogFilter(
74
+ entry({ source: "pack", text: "done" }),
75
+ baseCfg({
76
+ rules: [{ sources: ["bds"] }, { sources: ["pack"], contains: "done" }]
77
+ })
78
+ );
79
+ assert.equal(r.matched, true);
80
+ assert.equal(r.dropDisplay, true);
81
+ });
82
+ test("rule.enabled=false \u8DF3\u8FC7", () => {
83
+ const r = evaluateLogFilter(entry(), baseCfg({ rules: [{ enabled: false, sources: ["bds"] }] }));
84
+ assert.equal(r.matched, false);
85
+ assert.equal(r.dropDisplay, false);
86
+ });
87
+ test("keep \u6A21\u5F0F\uFF1A\u4EC5\u4FDD\u7559\u5339\u914D\uFF0C\u672A\u5339\u914D\u4E22\u5F03", () => {
88
+ const cfg = baseCfg({
89
+ mode: "keep",
90
+ rules: [{ levels: ["error"] }]
91
+ });
92
+ const keep = evaluateLogFilter(entry({ level: "error" }), cfg);
93
+ const drop = evaluateLogFilter(entry({ level: "info" }), cfg);
94
+ assert.equal(keep.dropDisplay, false);
95
+ assert.equal(drop.dropDisplay, true);
96
+ });
97
+ test("applyTo=all \u65F6\u843D\u76D8\u4E0E\u5C55\u793A\u4E00\u5E76\u8FC7\u6EE4", () => {
98
+ const r = evaluateLogFilter(
99
+ entry(),
100
+ baseCfg({
101
+ applyTo: "all",
102
+ rules: [{ sources: ["bds"] }]
103
+ })
104
+ );
105
+ assert.equal(r.dropDisplay, true);
106
+ assert.equal(r.dropDisk, true);
107
+ });
108
+ test("applyTo=display \u65F6\u4EC5\u5F71\u54CD\u5C55\u793A", () => {
109
+ const r = evaluateLogFilter(
110
+ entry(),
111
+ baseCfg({
112
+ applyTo: "display",
113
+ rules: [{ sources: ["bds"] }]
114
+ })
115
+ );
116
+ assert.equal(r.dropDisplay, true);
117
+ assert.equal(r.dropDisk, false);
118
+ });
119
+ //# sourceMappingURL=log-filter.test.js.map