@sfmc-bds/cli 0.2.0-beta.8 → 0.2.0-beta.9
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.
- package/dist/command-surface.d.ts.map +1 -1
- package/dist/command-surface.js +0 -2
- package/dist/command-surface.js.map +2 -2
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +123 -10
- package/dist/commands.js.map +2 -2
- package/dist/help-text.d.ts.map +1 -1
- package/dist/help-text.js +1 -5
- package/dist/help-text.js.map +2 -2
- package/dist/i18n/locales/en.d.ts +24 -13
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +24 -14
- package/dist/i18n/locales/en.js.map +2 -2
- package/dist/i18n/locales/zh-CN.d.ts.map +1 -1
- package/dist/i18n/locales/zh-CN.js +24 -14
- package/dist/i18n/locales/zh-CN.js.map +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +2 -2
- package/dist/llbot-launch.d.ts +20 -0
- package/dist/llbot-launch.d.ts.map +1 -0
- package/dist/llbot-launch.js +40 -0
- package/dist/llbot-launch.js.map +7 -0
- package/dist/main.js +4 -6
- package/dist/main.js.map +2 -2
- package/dist/node-service-probe.d.ts +18 -0
- package/dist/node-service-probe.d.ts.map +1 -0
- package/dist/node-service-probe.js +97 -0
- package/dist/node-service-probe.js.map +7 -0
- package/dist/pack-lifecycle.d.ts.map +1 -1
- package/dist/pack-lifecycle.js +7 -1
- package/dist/pack-lifecycle.js.map +2 -2
- package/dist/repl-windows/service-window.d.ts +1 -1
- package/dist/repl-windows/service-window.d.ts.map +1 -1
- package/dist/repl-windows/service-window.js +8 -1
- package/dist/repl-windows/service-window.js.map +2 -2
- package/dist/repl.d.ts.map +1 -1
- package/dist/repl.js +0 -10
- package/dist/repl.js.map +2 -2
- package/dist/send-target.d.ts.map +1 -1
- package/dist/send-target.js +6 -2
- package/dist/send-target.js.map +2 -2
- package/dist/services.d.ts +32 -4
- package/dist/services.d.ts.map +1 -1
- package/dist/services.js +101 -12
- package/dist/services.js.map +2 -2
- package/dist/wizard.d.ts.map +1 -1
- package/dist/wizard.js +65 -7
- package/dist/wizard.js.map +2 -2
- package/package.json +5 -6
- package/dist/cmd-remote.d.ts +0 -13
- package/dist/cmd-remote.d.ts.map +0 -1
- package/dist/cmd-remote.js +0 -38
- package/dist/cmd-remote.js.map +0 -7
- package/dist/remote-agent.d.ts +0 -18
- package/dist/remote-agent.d.ts.map +0 -1
- package/dist/remote-agent.js +0 -198
- 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 /* \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\",\n \"help.logs\": \"\u65E5\u5FD7\u5386\u53F2\",\n \"help.start\": \"\u542F\u52A8\u670D\u52A1\",\n \"help.stop\": \"\u505C\u6B62\u670D\u52A1\",\n \"help.restart\": \"\u91CD\u542F\u670D\u52A1\",\n \"help.send\": \"\u5411\u670D\u52A1\u53D1\u9001\u547D\u4EE4\",\n \"help.section.update\": \" BDS \u66F4\u65B0 \u2500\u2500\u2500\u2500\u2500\u2500\",\n \"help.update\": \"\u68C0\u67E5BDS \u66F4\u65B0\",\n \"help.section.remote\": \" \u8FDC\u7A0B\u63A7\u5236 \u2500\u2500\u2500\u2500\u2500\u2500\",\n \"help.remote.status\": \"\u8FDC\u7A0B\u63A7\u5236\u6CE8\u518C\u72B6\u6001\",\n \"help.remote.enroll\": \"\u5411\u63A7\u5236\u5668\u6CE8\u518C\",\n \"help.remote.disable\": \"\u65AD\u5F00\u8FDC\u7A0B\u63A7\u5236\",\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.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 \u8FDC\u7A0B\u63A7\u5236 \u2500\u2500\u2500 */\n \"remote.enrolled\": \"\u5DF2\u6CE8\u518C\u8FDC\u7A0B\u63A7\u5236: {id}\",\n \"remote.disabled\": \"\u8FDC\u7A0B\u63A7\u5236\u5DF2\u7981\u7528\",\n \"remote.usage\": \"\u7528\u6CD5: remote enroll <controller-url> <enrollment-token> [name] | remote status | remote disable\",\n \"remote.usageShort\":\n \"\u7528\u6CD5: remote enroll <controller-url> <enrollment-token> [name] | remote status | remote disable\",\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 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 \u8FDB\u7A0B\u63A5\u7BA1\uFF1F\",\n \"wizard.llbotDir\": \"LLBot \u8FD0\u884C\u76EE\u5F55\",\n \"wizard.usingDefault\": \"\u4F7F\u7528\u9ED8\u8BA4: {path}\",\n \"wizard.dbDir\": \"\u6570\u636E\u5E93\u5B58\u50A8\u76EE\u5F55\",\n \"wizard.dbPort\": \"\u6570\u636E\u5E93\u670D\u52A1\u7AEF\u53E3:\",\n \"wizard.portRange\": \"\u8BF7\u8F93\u5165 1024\u201365535\",\n \"wizard.valueRequired\": \"\u6B64\u9879\u5FC5\u586B\uFF01\",\n \"wizard.step3\": \"\u6B65\u9AA4 3 - BDS \u73AF\u5883\",\n \"wizard.bdsFound\": \"\u5DF2\u627E\u5230: {path}\",\n \"wizard.bdsNotFound\": \"\u672A\u627E\u5230: {path}\",\n \"wizard.eula\": \"\u662F\u5426\u540C\u610F Mojang \u53D1\u5E03\u7684 EULA(https://www.minecraft.net/en-us/eula)\uFF1F\u4F7F\u7528\u672C\u7A0B\u5E8F\u524D\u5FC5\u987B\u540C\u610F\u3002\",\n \"wizard.disagreed\": \"\u5DF2\u62D2\u7EDD\u3002\",\n \"wizard.downloadBds\": \"\u73B0\u5728\u4E0B\u8F7D BDS\uFF1F\",\n \"wizard.selectChannel\": \"\u9009\u62E9\u901A\u9053:\",\n \"wizard.channel.release\": \"Release\",\n \"wizard.channel.releaseHint\": \"\u7A33\u5B9A\u7248\",\n \"wizard.channel.preview\": \"Preview\",\n \"wizard.channel.previewHint\": \"\u9884\u89C8\u7248\",\n \"wizard.cannotCreateBackup\": \"\u65E0\u6CD5\u521B\u5EFA BDS \u5907\u4EFD\u76EE\u5F55: {dir}\",\n \"wizard.backupDir\": \"BDS \u5907\u4EFD\u76EE\u5F55\",\n \"wizard.preserve\": \"\u66F4\u65B0\u65F6\u4FDD\u7559\u7684\u6587\u4EF6\uFF08\u4E0B\u6B21\u542F\u7528\u66F4\u65B0\u65F6\uFF09:\",\n \"wizard.preserve.serverProps\": \"\u670D\u52A1\u5668\u914D\u7F6E\",\n \"wizard.preserve.worlds\": \"\u4E16\u754C\u6570\u636E\",\n \"wizard.preserve.config\": \"\u914D\u7F6E\u76EE\u5F55\",\n \"wizard.updaterTip\": \"\u82E5\u627E\u4E0D\u5230 BDS \u8FD0\u884C\u65F6\uFF0C\u7A0D\u540E\u4F1A\u81EA\u52A8\u4E0B\u8F7DBDS\u3002\\n \u53EF\u5728 configs/bds_updater.json \u4E2D\u914D\u7F6E\u66F4\u65B0\u9009\u9879\u3002\",\n \"wizard.step4\": \"\u6B65\u9AA4 4 - \u6A21\u5757\",\n \"wizard.modulesFound\": \"\u53D1\u73B0 {count} \u4E2A\u53EF\u9009\u6A21\u5757\",\n \"wizard.modulesNone\": \"\u672A\u627E\u5230\u6A21\u5757\u76EE\u5F55\",\n \"wizard.enableModules\": \"\u542F\u7528\u6A21\u5757:\",\n \"wizard.emptyHint\": \"\uFF08\u7A7A\uFF09\",\n \"wizard.updatingConfigs\": \"\u6B63\u5728\u66F4\u65B0\u914D\u7F6E\",\n \"wizard.configsUpdated\": \"\u914D\u7F6E\u5DF2\u66F4\u65B0\",\n \"wizard.updatingModules\": \"\u6B63\u5728\u66F4\u65B0\u6A21\u5757\u72B6\u6001\",\n \"wizard.modulesUpdated\": \"\u6A21\u5757\u72B6\u6001\u5DF2\u66F4\u65B0\",\n \"wizard.initDb\": \"\u6B63\u5728\u521D\u59CB\u5316\u6570\u636E\u5E93\",\n \"wizard.dbTimeout\": \"\u6570\u636E\u5E93\u542F\u52A8\u8D85\u65F6\",\n \"wizard.dbOk\": \"\u6570\u636E\u5E93\u5DF2\u521D\u59CB\u5316\",\n \"wizard.downloadingBds\": \"\u6B63\u5728\u4E0B\u8F7D BDS\",\n \"wizard.downloadFail\": \"\u4E0B\u8F7D\u5931\u8D25\u3002\",\n \"wizard.bdsDownloaded\": \"BDS \u5DF2\u4E0B\u8F7D\",\n \"wizard.done\": \"\u5B8C\u6210\uFF01\u952E\u5165 / \u4EE5\u6267\u884C\u547D\u4EE4\",\n \"wizard.installing\": \"\u6B63\u5728\u5B89\u88C5 {count} \u4E2A\u6A21\u5757\",\n \"wizard.installed\": \"\u5DF2\u5B89\u88C5 {count} \u4E2A\",\n \"wizard.installFailed\": \"\u5B89\u88C5\u5931\u8D25: {message}\\n\u53EF\u7A0D\u540E\u6267\u884C: mod install <id>\",\n \"wizard.fetchMissing\": \"\u7F3A\u5C11 fetch-module \u2014 \u8BF7\u7A0D\u540E\u5BF9\u4EE5\u4E0B\u6A21\u5757\u6267\u884C `mod install <id>`: {list}\",\n \"wizard.noModulesSelected\": \"\u672A\u9009\u62E9\u6A21\u5757 \u2014 \u884C\u4E3A\u5305\u5C06\u4E3A\u7A7A\uFF0C\u76F4\u5230\u6267\u884C `mod install <id>` \u5B89\u88C5\u6A21\u5757\u3002\",\n \"wizard.buildingBp\": \"\u6B63\u5728\u6784\u5EFA\u884C\u4E3A\u5305\",\n \"wizard.buildFailed\": \"\u6784\u5EFA\u5931\u8D25: {message}\\n\u7A0D\u540E\u53EF\u6267\u884C `mod build` \u91CD\u8BD5\u3002\",\n \"wizard.deploying\": \"\u6B63\u5728\u90E8\u7F72\u5230 {path}\",\n \"wizard.restartBds\": \"\u8BF7\u91CD\u542F BDS \u4EE5\u52A0\u8F7D\u65B0\u884C\u4E3A\u5305\u3002\",\n \"wizard.deployFailed\": \"\u90E8\u7F72\u5931\u8D25: {message}\\n\u4FEE\u590D configs/ \u4E2D\u7684 bds_path \u540E\u6267\u884C `mod reload`\u3002\",\n\n \"prompt.enterPath\": \"\u8F93\u5165\u8DEF\u5F84\",\n \"prompt.browse\": \"\u6D4F\u89C8\u2026\",\n \"prompt.browseHint\": \"\u6253\u5F00\u7CFB\u7EDF\u6587\u4EF6\u5939\u9009\u62E9\u5668\",\n\n \"reload.buildOnly\": \"\u6784\u5EFA\u5B8C\u6210\u3002\",\n \"reload.bdsNotRunning\": \"BDS \u672A\u8FD0\u884C \u2014 \u5DF2\u5B8C\u6210\u6784\u5EFA\u3002\",\n \"reload.sent\": \"\u5DF2\u5411 BDS \u53D1\u9001 reload\",\n\n \"bp.usage\": \"\u7528\u6CD5: bp <build|deploy>\",\n\n \"mod.usage\": \"\u7528\u6CD5: sfmc {cmds} <{subs}> [args]\",\n \"mod.list.title\": \"\u5DF2\u5B89\u88C5\u6A21\u5757\",\n \"mod.noneInstalled\": \"\\n\u672A\u5B89\u88C5\u6A21\u5757\u3002\u8BF7\u5C06\u6A21\u5757\u76EE\u5F55\u653E\u5230 {dir}\uFF0C\u6216\u6267\u884C `sfmc mod install <id>`\u3002\\n\",\n \"mod.notInRegistry\": '\u6A21\u5757 \"{query}\" \u4E0D\u5728\u5B98\u65B9 registry \u4E2D\u3002',\n \"mod.info.usage\": \"\u7528\u6CD5: mod info <id>\",\n \"mod.notInstalledAt\": \"\u6A21\u5757 {id} \u672A\u5B89\u88C5\u4E8E {path}\",\n \"mod.notInstalled\": \"\u6A21\u5757 {id} \u672A\u5B89\u88C5\",\n \"mod.verifyOk\": \"{id} \u6B63\u5E38\\n fingerprint: {fp}\\n\",\n \"mod.dbUnreachable\": \"\u65E0\u6CD5\u8FDE\u63A5 db-server {url}: {message}\u3002db \u670D\u52A1\u662F\u5426\u5728\u8FD0\u884C\uFF1F\uFF08sfmc> start db\uFF09\",\n \"mod.toggleFailed\": \"{action} {id} \u5931\u8D25: {err}\",\n \"mod.action.enabled\": \"\u5DF2\u542F\u7528\",\n \"mod.action.disabled\": \"\u5DF2\u7981\u7528\",\n \"mod.toggleOk\": \"{label} {id}\",\n \"mod.toggleBadBody\": \"{action} {id} \u8FD4\u56DE: {text}\",\n \"mod.cannotDisable\": \"\u6A21\u5757 {id} \u4E0D\u53EF\u7981\u7528\uFF08canDisable=false\uFF09\",\n \"mod.toggleLockFailed\": \"\u5199\u5165 module-lock \u5931\u8D25\uFF08{id}\uFF09: {message}\",\n \"mod.toggleDbSkipped\":\n \"\u5DF2\u5199\u5165 module-lock\uFF1Bdb-server \u672A\u540C\u6B65\uFF08{detail}\uFF09\u3002\u4E0B\u6B21 start db \u540E\u5185\u5B58\u6001\u4F1A\u8DDF\u4E0A\uFF1B\u6E38\u620F\u5185\u4ECD\u9700 mod reload / \u91CD\u542F BDS\u3002\",\n \"mod.enable.usage\": \"\u7528\u6CD5: mod enable <id>\",\n \"mod.disable.usage\": \"\u7528\u6CD5: mod disable <id>\",\n \"mod.install.usage\":\n \"\u7528\u6CD5: mod install <id>\\n mod install <id> --from <scheme> [--link] [--sha256 <hex>]\",\n \"mod.fromUnknown\": \"\u672A\u77E5\u7684 --from \u6765\u6E90: {value}\u3002\u53EF\u7528: npm:|local[:<\u8DEF\u5F84>]|tgz:|zip:|dir:|github:<repo>[@tag]\",\n \"mod.fetchMissing\": \"\u672A\u627E\u5230 fetch-module\u3002\u8BF7\u5B89\u88C5 @sfmc-bds/sfmc \u6216\u5728 monorepo \u5185\u8FD0\u884C\u3002\",\n \"mod.uninstall.usage\": \"\u7528\u6CD5: mod uninstall <id>\",\n \"mod.notInstalledFolder\": \"\u6A21\u5757 {id} \u672A\u5B89\u88C5\uFF08\u76EE\u5F55\u4E0D\u5B58\u5728: {path}\uFF09\",\n \"mod.removed\": \"\u5DF2\u4ECE {path} \u79FB\u9664 {id}\\n\",\n\n \"pack.built\": \"\u5DF2\u6784\u5EFA\u5305\u81F3 {path}\",\n \"pack.buildFailed\": \"pack \u6784\u5EFA\u5931\u8D25: {message}\",\n \"pack.deployed\": \"\u5DF2\u90E8\u7F72\u5305\",\n \"pack.deployFailed\": \"pack \u90E8\u7F72\u5931\u8D25: {message}\",\n \"pack.statusFailed\": \"pack status \u5931\u8D25: {message}\",\n \"pack.listFailed\": \"pack list \u5931\u8D25: {message}\",\n \"pack.noCatalog\": \"\u5C1A\u65E0\u5DF2\u90E8\u7F72 catalog \u2014 \u8BF7\u5148\u6267\u884C `sfmc pack deploy`\",\n \"pack.noUuid\": \"catalog \u4E2D\u65E0 {kind} \u5305 uuid\",\n \"pack.actionFailed\": \"{action} \u5931\u8D25: {detail}\",\n \"pack.enabledOk\": \"\u5DF2\u542F\u7528 {kind} \u5305 {uuid}\",\n \"pack.disabledOk\": \"\u5DF2\u7981\u7528 {kind} \u5305 {uuid}\",\n \"pack.actionErr\": \"pack {action} \u5931\u8D25: {message}\",\n \"pack.usage\": \"\u7528\u6CD5: sfmc pack <{subs}> [behavior|resource]\",\n\n \"packs.restartHint\": \"\u9700\u91CD\u542F BDS \u540E\u751F\u6548\",\n \"packs.rejoinHint\": \"\u5BA2\u6237\u7AEF\u9700\u91CD\u8FDB\u670D\u4EE5\u4E0B\u8F7D\u8D44\u6E90\u5305\",\n \"packs.conflict\": \"\u68C0\u6D4B\u5230\u51B2\u7A81\uFF1A\",\n \"packs.conflict.existing\": \" \u5DF2\u6709: {name} v{version} {uuid}\\n {dir}\",\n \"packs.conflict.incoming\": \" \u65B0\u6765: {name} v{version} {uuid}\",\n \"packs.overwriteAsk\": \"\u8986\u76D6\u5DF2\u6709\u5305\uFF08\u76F8\u540C UUID\uFF0C\u4F46\u7248\u672C\u76F8\u5BF9\u73B0\u5B58\u5305\u8F83\u4F4E\uFF09\uFF1F\",\n \"packs.badManifest\": \"\u65E0\u6CD5\u8BC6\u522B manifest\uFF08\u9700\u542B resources/data/script \u6A21\u5757\uFF0C\u4E14 header \u542B name/uuid/version\uFF09\",\n \"packs.skippedNoOverwrite\": \"\u5DF2\u8DF3\u8FC7\uFF08\u672A\u8986\u76D6\uFF09\",\n \"packs.conflictSkip\": \" \u51B2\u7A81\u8DF3\u8FC7\uFF08\u975E\u4EA4\u4E92\uFF0C\u53EF\u7528 --force\uFF09: {name}\",\n \"packs.inboxSkip\": \" \u8DF3\u8FC7\u6536\u4EF6\u7BB1\uFF1A{message}\",\n \"packs.inboxFound\": \" \u6536\u4EF6\u7BB1\u53D1\u73B0 {count} \u9879 \u2192 {level}\",\n \"packs.alreadyDone\": \" \u5DF2\u5904\u7406\u8FC7\uFF0C\u8DF3\u8FC7: {name}\",\n \"packs.dryRunExtract\": \" dry-run \u89E3\u538B: {name}\",\n \"packs.noPackRoot\": \" \u672A\u627E\u5230\u5305\u6839: {name}\",\n \"packs.installedEnabled\": \" \u5DF2\u5B89\u88C5\u5E76\u542F\u7528 {kind}: {name} v{version}\",\n \"packs.installFailed\": \" \u5B89\u88C5\u5931\u8D25 {name}: {reason}\",\n \"packs.listEmpty\": \"\uFF08\u65E0\uFF09\",\n \"packs.list.bpHeader\": \"\u884C\u4E3A\u5305:\",\n \"packs.list.rpHeader\": \"\u8D44\u6E90\u5305:\",\n \"packs.list.on\": \"\u5F00 \",\n \"packs.list.off\": \"\u5173\",\n \"packs.doctor.parseFail\": \"{file} \u65E0\u6CD5\u89E3\u6790\",\n \"packs.doctor.missingDir\": \"\u6E05\u5355\u6709 uuid \u4F46\u76EE\u5F55\u7F3A\u5931 ({kind}): {uuid}\",\n \"packs.doctor.versionMismatch\": \"\u7248\u672C\u4E0D\u4E00\u81F4 ({kind}): {folder} \u6E05\u5355 {listVer} vs \u78C1\u76D8 {diskVer}\",\n \"packs.doctor.notEnabled\": \"\u5DF2\u5B89\u88C5\u672A\u542F\u7528: [{kind}] {folder} ({uuid})\",\n \"packs.doctor.ok\": \"doctor: \u672A\u53D1\u73B0\u95EE\u9898\",\n \"packs.doctor.found\": \"doctor \u53D1\u73B0 {count} \u9879:\\n{list}\",\n \"packs.notFound\": \"\u672A\u627E\u5230\u5305: {id}\",\n \"packs.toggleDone\": \"{verb} {folder} \u5B8C\u6210\u3002{hint}\",\n \"packs.bump.usage\": \"\u7528\u6CD5: packs bump <uuid|folder> \uFF08\u4EC5 RP\uFF09\",\n \"packs.bump.rpOnly\": \"packs bump \u4EC5\u652F\u6301\u8D44\u6E90\u5305 (RP)\",\n \"packs.bumped\": \"\u5DF2 bump {folder} \u2192 v{version}\u3002{restart}\uFF1B{rejoin}\",\n \"packs.pathMissing\": \"\u8DEF\u5F84\u4E0D\u5B58\u5728: {path}\",\n \"packs.notArchive\": \"\u4E0D\u662F\u5305\u76EE\u5F55\u6216 .zip/.mcpack/.mcaddon\",\n \"packs.noManifestRoot\": \"\u672A\u53D1\u73B0\u542B manifest.json \u7684\u5305\u6839\",\n \"packs.installedLine\": \"\u5DF2\u5B89\u88C5\u5E76\u542F\u7528: {name} v{version} ({kind})\",\n \"packs.skipFailLine\": \"\u8DF3\u8FC7/\u5931\u8D25: {name} ({reason})\",\n \"packs.inboxEmpty\": \"\u6536\u4EF6\u7BB1\u4E3A\u7A7A\",\n \"packs.search.usage\": \"\u7528\u6CD5: packs search <query>\uFF08CurseForge \u8FDC\u7A0B\u641C\u7D22\uFF0C\u9700 API Key\uFF09\",\n \"packs.bind.usage\": \"\u7528\u6CD5: packs bind <uuid|folder> <projectId|slug|url>\",\n \"packs.unbind.usage\": \"\u7528\u6CD5: packs unbind <uuid|folder>\",\n \"packs.unbindOk\": \"\u5DF2\u89E3\u9664\u7ED1\u5B9A {uuid}\uFF08\u7F16\u8F91 {path} \u4EA6\u53EF\uFF09\",\n \"packs.unbindMiss\": \"\u672A\u627E\u5230\u7ED1\u5B9A: {id}\",\n \"packs.update.usage\": \"\u7528\u6CD5: packs update <uuid|folder|--all>\",\n \"packs.toggle.usage\": \"\u7528\u6CD5: packs {verb} <uuid|folder>\",\n \"packs.uninstall.usage\":\n \"\u7528\u6CD5: packs uninstall [uuid|folder...] [--purge] [--no-paired]\\n \u65E0\u53C2\u6570\u4E14\u4E3A TTY \u65F6\u8FDB\u5165\u591A\u9009\uFF1B\u53EF\u4E00\u6B21\u4F20\u591A\u4E2A id\",\n \"packs.uninstall.protected\": \"\u62D2\u7EDD\u5378\u8F7D\u5E73\u53F0\u805A\u5408\u5305: {folder}\uFF08\u8BF7\u7528 sfmc mod\uFF09\",\n \"packs.uninstall.trashed\": \"\u5DF2\u5378\u8F7D\u5E76\u79FB\u5165\u56DE\u6536\u7AD9: {folder}\\n \u2192 {dest}\",\n \"packs.uninstall.deleted\": \"\u5DF2\u5378\u8F7D\u5E76\u5220\u9664: {folder}\",\n \"packs.uninstall.dirMissing\": \"\u6E05\u5355\u5DF2\u79FB\u9664\uFF0C\u76EE\u5F55\u672C\u5C31\u4E0D\u5B58\u5728: {folder}\",\n \"packs.uninstall.bindingRemoved\": \"\u5DF2\u6E05\u9664\u66F4\u65B0\u6E90\u7ED1\u5B9A: {uuid}\",\n \"packs.uninstall.pick\": \"\u9009\u62E9\u8981\u5378\u8F7D\u7684\u8D44\u6E90\u5305\uFF08\u7A7A\u683C\u52FE\u9009\uFF0C\u56DE\u8F66\u786E\u8BA4\uFF09\",\n \"packs.uninstall.summary\": \"\u5C06\u5378\u8F7D\u4EE5\u4E0B {count} \u9879\uFF08\u542B\u914D\u5BF9 RP\uFF09\uFF1A\",\n \"packs.uninstall.confirm\": \"\u786E\u8BA4\u5378\u8F7D\u8FD9 {count} \u9879\uFF1F\",\n \"packs.uninstall.cancelled\": \"\u5DF2\u53D6\u6D88\u5378\u8F7D\",\n \"packs.uninstall.none\": \"\u6CA1\u6709\u53EF\u5378\u8F7D\u7684\u8D44\u6E90\u5305\",\n \"packs.uninstall.pairedOf\": \"\uFF08\u914D\u5BF9\u81EA {folder}\uFF09\",\n \"packs.install.usage\": \"\u7528\u6CD5: packs install [path|--inbox] [--force]\",\n \"packs.installInbox\": \"\u6536\u4EF6\u7BB1\u5B89\u88C5: \u6210\u529F={installed} \u8DF3\u8FC7={skipped} \u5931\u8D25={failed}\",\n \"packs.scanResult\": \"\u626B\u63CF: \u6210\u529F={installed} \u8DF3\u8FC7={skipped} \u5931\u8D25={failed}\",\n \"packs.unknownSub\": \"\u672A\u77E5 packs \u5B50\u547D\u4EE4: {verb}\\n\",\n \"packs.usage.title\": \"{cmd}\uFF08\u522B\u540D {alias}\uFF09\u2014 \u4E16\u754C\u4FA7\u4EFB\u610F BP/RP\",\n \"packs.usage.bump\": \"\u4EC5 RP\uFF0Cpatch \u7248\u672C +1\",\n \"packs.usage.cfSearch\": \"CurseForge \u641C\u7D22\uFF08\u9700 Key\uFF09\",\n \"packs.usage.inbox\": \"\u6536\u4EF6\u7BB1: {path}\",\n \"packs.usage.trash\": \"\u5378\u8F7D\u56DE\u6536\u7AD9: {path}\uFF08pack-update.json \u2192 uninstall.recycleBin\uFF09\",\n \"packs.usage.sources\": \"\u66F4\u65B0\u6E90\u7ED1\u5B9A: {path}\uFF08\u53EF\u624B\u6539 enabled/projectId\uFF09\",\n \"packs.usage.enableNote\": \"\u5B89\u88C5\u9ED8\u8BA4\u5199\u5165 world_*_packs.json \u542F\u7528\uFF1B{hint}\u3002\",\n \"packs.usage.moduleNote\": \"\u6A21\u5757\u805A\u5408\u8BF7\u7528 {cmd}\uFF08\u975E\u672C\u547D\u4EE4\uFF09\u3002\",\n\n \"packUpdate.needKey\":\n \"\u672A\u914D\u7F6E\u4EFB\u4F55 pack \u66F4\u65B0\u6E90\u3002\u8BF7\u7F16\u8F91 {path} \u7684 providers.*.apiKey\uFF08\u6216\u5BF9\u5E94\u73AF\u5883\u53D8\u91CF\uFF09\u3002CurseForge\uFF1Ahttps://console.curseforge.com/ \u7533\u8BF7 Studios Key \u2192 providers.curseforge.apiKey / CURSEFORGE_API_KEY\uFF08\u4E0D\u8981\u7528 Upload API \u7684 UUID Token\uFF09\",\n \"packUpdate.probeNoName\": \"\u65E0\u6CD5\u4ECE manifest / \u6587\u4EF6\u5939\u540D\u6D3E\u751F\u53EF\u641C\u7D22\u540D\u79F0\",\n \"packUpdate.probeQueries\": \"\u63A2\u6D4B\u67E5\u8BE2\u6E90 header={header} folder={folder}\\n \u2192 {queries}\",\n \"packUpdate.probeFail\": \"\u63A2\u6D4B\u66F4\u65B0\u6E90\u5931\u8D25: {message}\",\n \"packUpdate.probeMiss\": \"\u672A\u5728 CurseForge \u627E\u5230\u5339\u914D: {name}\",\n \"packUpdate.probeLowScore\": \"\u5019\u9009\u76F8\u4F3C\u5EA6\u504F\u4F4E: {name} \u2192 {hit} ({score}) {url}\",\n \"packUpdate.probeHit\": \"\u627E\u5230\u53EF\u80FD\u7684\u66F4\u65B0\u6E90: {name} \u2192 {hit} ({score})\\n {url}\",\n \"packUpdate.editHint\": \"\u7A0D\u540E\u53EF\u7F16\u8F91 {path} \u4FEE\u6539/\u5173\u95ED\u5BF9\u5E94\u6E90\uFF08enabled: false\uFF09\",\n \"packUpdate.confirmBind\": \"\u5C06\u6B64 CurseForge \u9879\u76EE\u7ED1\u5B9A\u4E3A\u66F4\u65B0\u6E90\uFF1F {hit}\",\n \"packUpdate.probeAutoBind\": \"\u975E\u4EA4\u4E92\u73AF\u5883\uFF1A\u81EA\u52A8\u7ED1\u5B9A \u2192 {provider}:{slug}\\n {path}\",\n \"packUpdate.probeNoAutoBind\": \"\u975E\u4EA4\u4E92\u73AF\u5883\u4E0D\u81EA\u52A8\u7ED1\u5B9A\uFF1B\u53EF\u7528 packs bind \u624B\u52A8\u7ED1\u5B9A\",\n \"packUpdate.bindSkipped\": \"\u5DF2\u8DF3\u8FC7\u7ED1\u5B9A\",\n \"packUpdate.bindOk\": \"\u5DF2\u7ED1\u5B9A {uuid} \u2192 {provider}:{slug} [{enabled}]\\n \u6587\u4EF6: {path}\",\n \"packUpdate.bindBpOnly\": \"\u53EA\u80FD\u4E3A\u884C\u4E3A\u5305\uFF08BP\uFF09\u7ED1\u5B9A\u66F4\u65B0\u6E90\",\n \"packUpdate.resolveFail\": \"\u65E0\u6CD5\u89E3\u6790 CurseForge \u9879\u76EE: {ref}\",\n \"packUpdate.searchEmpty\": \"CurseForge \u65E0\u7ED3\u679C: {query}\",\n \"packUpdate.sourcesHeader\": \"\u914D\u7F6E: {config}\\n\u7ED1\u5B9A: {sources}\",\n \"packUpdate.sourcesEmpty\": \"\u5C1A\u65E0\u7ED1\u5B9A\u3002\u5B89\u88C5 BP \u540E\u4F1A\u5C1D\u8BD5\u63A2\u6D4B\uFF0C\u6216\u4F7F\u7528 packs bind\u3002\",\n \"packUpdate.disabled\": \"pack-update \u5DF2\u5728\u914D\u7F6E\u4E2D\u7981\u7528\",\n \"packUpdate.bindingDisabled\": \"\u7ED1\u5B9A\u5DF2\u5173\u95ED (enabled: false)\",\n \"packUpdate.noRemoteFile\": \"\u8FDC\u7A0B\u65E0\u53EF\u7528\u6587\u4EF6\",\n \"packUpdate.fileNewer\": \"\u8FDC\u7A0B\u6587\u4EF6\u66F4\u65B0: {file} (id={id})\",\n \"packUpdate.upToDate\": \"\u5DF2\u662F\u6700\u65B0\",\n \"packUpdate.needSync\": \"\u8FDC\u7A0B\u6587\u4EF6\u5C1A\u672A\u540C\u6B65\u5230\u4E16\u754C\u76EE\u5F55\uFF08\u7248\u672C {local} \u2261 {remote}\uFF0CfileId={id}\uFF09\",\n \"packUpdate.remoteNoBp\": \"\u8FDC\u7A0B\u5F52\u6863\u4E2D\u672A\u627E\u5230\u884C\u4E3A\u5305\",\n \"packUpdate.bpNewer\": \"BP \u6709\u66F4\u65B0 {local} \u2192 {remote}\",\n \"packUpdate.installFail\": \"\u5B89\u88C5\u5931\u8D25: {reason}\",\n \"packUpdate.installedBp\": \"\u5DF2\u5199\u5165 BP \u2192 {dir} (v{version})\",\n \"packUpdate.installedRp\": \"\u5DF2\u5199\u5165 RP \u2192 {dir} (v{version})\",\n \"packUpdate.rpInstallMiss\": \"\u5F52\u6863\u542B RP \u4F46\u672A\u80FD\u5B89\u88C5\u914D\u5BF9\u8D44\u6E90\u5305\uFF08\u68C0\u67E5 dependencies / pairedResourceUuid\uFF09\",\n \"packUpdate.applied\": \"\u5DF2\u66F4\u65B0 {name} BP={bp} RP={rp}\",\n \"packUpdate.noBinding\": \"\u672A\u627E\u5230\u66F4\u65B0\u6E90\u7ED1\u5B9A: {id}\",\n \"packUpdate.startupFail\": \"\u542F\u52A8\u65F6\u68C0\u67E5\u66F4\u65B0\u5931\u8D25: {message}\",\n};\n\n"],
|
|
5
|
-
"mappings": "AAGO,MAAM,OAAmC;AAAA,EAC9C,oBAAoB;AAAA,EACpB,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,yBAAyB;AAAA,EACzB,uBAAuB;AAAA,EACvB,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AAAA,EACf,cAAc;AAAA,EAEd,kBAAkB;AAAA,EAClB,cAAc;AAAA,EACd,kBAAkB;AAAA,EAClB,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA;AAAA,EAGjB,gBAAgB;AAAA,EAChB,qBAAqB;AAAA,EACrB,eAAe;AAAA;AAAA,EAGf,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EACnB,qBAAqB;AAAA,EACrB,iBAAiB;AAAA,EACjB,kBAAkB;AAAA,EAClB,oBAAoB;AAAA,EACpB,wBAAwB;AAAA,EACxB,2BAA2B;AAAA,EAC3B,2BAA2B;AAAA,EAC3B,wBAAwB;AAAA,EACxB,sBAAsB;AAAA,EACtB,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,oBAAoB;AAAA;AAAA,EAGpB,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,cAAc;AAAA,EACd,wBAAwB;AAAA,EACxB,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,mBAAmB;AAAA,EACnB,uBAAuB;AAAA,EACvB,uBAAuB;AAAA,EACvB,wBAAwB;AAAA,EACxB,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,EACtB,wBAAwB;AAAA,EACxB,eAAe;AAAA,EACf,aAAa;AAAA,EACb,cAAc;AAAA,EACd,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,uBAAuB;AAAA,EACvB,eAAe;AAAA,EACf,
|
|
4
|
+
"sourcesContent": ["import type { MessageKey } from \"./en.js\";\n\n/** \u7B80\u4F53\u4E2D\u6587\u6587\u6848\uFF1B\u952E\u96C6\u987B\u4E0E en \u4E00\u81F4\u3002 */\nexport const zhCN: Record<MessageKey, string> = {\n \"common.cancelled\": \"\u5DF2\u53D6\u6D88\",\n \"common.done\": \"\u5B8C\u6210\",\n \"common.required\": \"\u5FC5\u586B\",\n \"common.error\": \"\u9519\u8BEF: {message}\",\n \"common.fatal\": \"\u81F4\u547D\u9519\u8BEF\",\n \"common.unknownCommand\": \"\u672A\u77E5\u547D\u4EE4: {cmd}\",\n \"common.unknownShort\": \"\u672A\u77E5: {cmd} \uFF08\u8F93\u5165 help \u67E5\u770B\u5E2E\u52A9\uFF09\",\n \"common.tips\": \"\u63D0\u793A\",\n \"common.path\": \"\u8DEF\u5F84\",\n \"common.hint\": \"\u63D0\u793A\",\n \"common.none\": \"\uFF08\u65E0\uFF09\",\n \"common.all\": \"\u5168\u90E8\",\n\n \"locale.current\": \"\u5F53\u524D\u8BED\u8A00: {locale}\",\n \"locale.set\": \"\u8BED\u8A00\u5DF2\u8BBE\u4E3A {locale}\",\n \"locale.invalid\": \"\u672A\u77E5\u8BED\u8A00: {value}\uFF08\u53EF\u9009: zh-CN, en\uFF09\",\n \"locale.usage\": \"\u7528\u6CD5: locale [zh-CN|en|zh|cn]\",\n \"locale.wizard\": \"CLI language / \u754C\u9762\u8BED\u8A00\",\n \"locale.opt.zh\": \"\u7B80\u4F53\u4E2D\u6587\",\n \"locale.opt.en\": \"English\",\n\n /* \u2500\u2500\u2500 CLI \u901A\u9053\u95E8\u7981 \u2500\u2500\u2500 */\n \"cli.replOnly\": \"\u547D\u4EE4 `{cmd}` \u4EC5\u53EF\u5728 REPL \u5185\u4F7F\u7528\u3002\",\n \"cli.replOnly.hint\": \"\u5148\u8FD0\u884C\u65E0\u53C2\u6570\u7684 `sfmc` \u8FDB\u5165\u4EA4\u4E92\u6A21\u5F0F\uFF0C\u518D\u6267\u884C\u8BE5\u547D\u4EE4\u3002\",\n \"cli.needTty\": \"\u547D\u4EE4 `{cmd}` \u9700\u8981\u4EA4\u4E92\u5F0F\u7EC8\u7AEF\uFF08TTY\uFF09\u3002\",\n\n /* \u2500\u2500\u2500 debug (BDS \u914D\u7F6E) \u2500\u2500\u2500 */\n \"debug.state.on\": \"\u5F00\u542F\",\n \"debug.state.off\": \"\u5173\u95ED\",\n \"debug.statusTitle\": \"BDS \u8C03\u8BD5\u914D\u7F6E\",\n \"debug.enabled\": \"sfmc_debug = true\uFF08BDS \u63A7\u5236\u53F0\u8C03\u8BD5\u65E5\u5FD7\u5C06\u5728\u4E0B\u6B21 reload \u540E\u751F\u6548\uFF09\",\n \"debug.disabled\": \"sfmc_debug = false\uFF08BDS \u63A7\u5236\u53F0\u8C03\u8BD5\u65E5\u5FD7\u5C06\u5728\u4E0B\u6B21 reload \u540E\u5173\u95ED\uFF09\",\n \"debug.sentry.set\": \"\u5DF2\u8BBE\u7F6E SENTRY_DSN: {dsn}\",\n \"debug.sentry.removed\": \"\u5DF2\u5220\u9664 SENTRY_DSN\",\n \"debug.sentry.alreadyOff\": \"SENTRY_DSN \u672C\u6765\u5C31\u672A\u8BBE\u7F6E\",\n \"debug.sentry.dsnMissing\": \"\u9700\u8981 --dsn <\u503C>\",\n \"debug.sentry.unknown\": \"\u672A\u77E5 sentry \u5B50\u547D\u4EE4: {action}\",\n \"debug.sentry.usage\": \"\u7528\u6CD5: debug sentry on --dsn <dsn> | debug sentry off\",\n \"debug.unknown\": \"\u672A\u77E5 debug \u5B50\u547D\u4EE4: {sub}\",\n \"debug.usage\": \"\u7528\u6CD5: debug status | enable | disable | sentry on --dsn | sentry off\",\n \"debug.reloadHint\": \"\u9700\u8FD0\u884C `sfmc mod reload` \u6216\u91CD\u542F BDS \u540E\u751F\u6548\u3002\",\n\n /* \u2500\u2500\u2500 \u5E2E\u52A9\u6587\u672C \u2500\u2500\u2500 */\n \"help.title\": \"SFMC CLI\",\n \"help.title.repl\": \"SFMC REPL\",\n \"help.usage\": \"\u7528\u6CD5:\",\n \"help.section.options\": \"\u9009\u9879\",\n \"help.opt.packs\": \"\u8D44\u6E90\u5305\u7BA1\u7406\u5668\uFF0C\u540E\u63A5 packs \u5B50\u547D\u4EE4\uFF1Bi = install\",\n \"help.opt.lang\": \"\u672C\u6B21\u8FDB\u7A0B\u754C\u9762\u8BED\u8A00\",\n \"help.addon.compat\": \"\u517C\u5BB9\uFF1A-p/--packs\",\n \"help.slash.hint\": \"\u952E\u5165 / \u5217\u51FA\u547D\u4EE4\u3002\",\n \"help.shortcut.slash\": \"\u547D\u4EE4\u5217\u8868\",\n \"help.shortcut.ctrlp\": \"\u547D\u4EE4\u5217\u8868\",\n \"help.shortcut.cursor\": \"\u79FB\u52A8\u5149\u6807\",\n \"repl.palette.hint\": \"\u2191\u2193 \u00B7 Enter \u00B7 Esc\",\n \"repl.palette.empty\": \"\u65E0\u5339\u914D\",\n \"help.section.service\": \" \u670D\u52A1\u63A7\u5236 \u2500\u2500\u2500\u2500\u2500\u2500\",\n \"help.status\": \"\u67E5\u770B\u670D\u52A1\u72B6\u6001\uFF08\u542B QQ \u540E\u7AEF\u6458\u8981\uFF09\",\n \"help.logs\": \"\u65E5\u5FD7\u5386\u53F2\",\n \"help.start\": \"\u542F\u52A8\u670D\u52A1\uFF08db / qq / llbot / bds\uFF1Bqq \u9ED8\u8BA4\u5B98\u65B9 Bot\uFF09\",\n \"help.stop\": \"\u505C\u6B62\u670D\u52A1\",\n \"help.restart\": \"\u91CD\u542F\u670D\u52A1\",\n \"help.send\": \"\u5411\u670D\u52A1\u53D1\u9001\u547D\u4EE4\uFF08Tab \u5207\u6362\u76EE\u6807\uFF1BQQ \u63D0\u793A\u7B26\u533A\u5206 official / llbot\uFF09\",\n \"help.section.update\": \" BDS \u66F4\u65B0 \u2500\u2500\u2500\u2500\u2500\u2500\",\n \"help.update\": \"\u68C0\u67E5BDS \u66F4\u65B0\",\n \"help.section.debug\": \" \u8C03\u8BD5 \u2500\u2500\u2500\u2500\u2500\u2500\",\n \"help.debug.status\": \"SFMC_DEBUG \u72B6\u6001\",\n \"help.debug.toggle\": \"\u5F00\u5173 SFMC_DEBUG\",\n \"help.debug.sentry.on\": \"\u8BBE\u7F6E SENTRY_DSN\",\n \"help.debug.sentry.off\": \"\u5220\u9664 SENTRY_DSN\",\n \"help.section.module\": \" \u6A21\u5757\u7BA1\u7406 \u2500\u2500\u2500\u2500\u2500\u2500\",\n \"help.module.list\": \"\u5217\u51FA\u5DF2\u5B89\u88C5\u6A21\u5757\",\n \"help.module.search\": \"\u5728\u7EBF\u641C\u7D22\u6A21\u5757\",\n \"help.module.install\": \"\u5B89\u88C5\u6A21\u5757\",\n \"help.module.uninstall\": \"\u5378\u8F7D\u5DF2\u5B89\u88C5\u6A21\u5757\",\n \"help.module.verify\": \"\u6821\u9A8C\u6A21\u5757 SHA-256 \u5B8C\u6574\u6027\",\n \"help.module.info\": \"\u663E\u793A\u6A21\u5757\u8BE6\u60C5\",\n \"help.module.toggle\": \"\u542F\u7528/\u7981\u7528\u6A21\u5757\",\n \"help.module.build\": \"\u4ECE\u5DF2\u542F\u7528\u6A21\u5757\u6784\u5EFA\u8D44\u6E90\u5305\",\n \"help.module.reload\": \"\u6784\u5EFA\u5E76\u90E8\u7F72\u8D44\u6E90\u5305\uFF0C\u5728 BDS \u53D1\u9001 reload\u6307\u4EE4\u4EE5\u91CD\u8F7D\u811A\u672C\",\n \"help.section.addon\": \" \u8D44\u6E90\u5305\u7BA1\u7406 \u2500\u2500\u2500\u2500\u2500\u2500\",\n \"help.addon\": \"\u8D44\u6E90\u5305\u6536\u4EF6\u7BB1\u7BA1\u7406\",\n \"help.packs.list\": \"\u5DF2\u5B89\u88C5\u8D44\u6E90\u5305\u5217\u8868\",\n \"help.packs.search\": \"\u5728\u7EBF\u641C\u7D22\u8D44\u6E90\u5305\",\n \"help.packs.enable\": \"\u542F\u7528\u8D44\u6E90\u5305\",\n \"help.packs.disable\": \"\u7981\u7528\u8D44\u6E90\u5305\",\n \"help.packs.doctor\": \"\u8BCA\u65AD\u8D44\u6E90\u5305\u63A5\u7EBF\",\n \"help.packs.path\": \"\u663E\u793A\u8D44\u6E90\u5305\u8DEF\u5F84\",\n \"help.section.general\": \" \u901A\u7528 \u2500\u2500\u2500\u2500\u2500\u2500\",\n \"help.init\": \"\u521D\u59CB\u5316\u5411\u5BFC\",\n \"help.locale\": \"\u8BBE\u7F6E CLI \u8BED\u8A00\",\n \"help.version\": \"\u663E\u793A\u7248\u672C\",\n \"help.help\": \"\u663E\u793A\u5E2E\u52A9\",\n \"help.quit\": \"\u9000\u51FA\",\n \"help.shortcuts\": \"\u5FEB\u6377\u952E:\",\n \"help.shortcut.tab\": \"\u5207\u6362\u53D1\u9001\u76EE\u6807 / \u547D\u4EE4\u5217\u8868\u9009\u62E9\",\n \"help.shortcut.right\": \"\u63A5\u53D7\u5EFA\u8BAE\",\n \"help.shortcut.ctrll\": \"\u8FC7\u6EE4\u65E5\u5FD7\u7EA7\u522B / \u6765\u6E90 / \u5386\u53F2\",\n \"help.shortcut.history\": \"\u547D\u4EE4\u5386\u53F2\",\n\n /* \u2500\u2500\u2500 REPL \u2500\u2500\u2500 */\n \"repl.stopping\": \"\u6B63\u5728\u505C\u6B62\u670D\u52A1...\",\n \"repl.bye\": \"bye...\",\n \"repl.forceStop\": \"\u6B63\u5728\u5F3A\u5236\u505C\u6B62\u670D\u52A1...\",\n \"repl.nonInteractive\": \" \u975E\u4EA4\u4E92\u6A21\u5F0F\uFF08\u68C0\u6D4B\u5230\u7BA1\u9053\uFF09\\n\",\n \"repl.historyHeader\": \"\u2500\u2500 \u5386\u53F2 {count} \u884C \u2500\u2500\",\n \"repl.filter\": \"\u8FC7\u6EE4: {level} / {source} / {history}\",\n \"repl.followRequiresTty\": \"\u8DDF\u8E2A\u6A21\u5F0F\u9700\u8981 TTY\",\n \"repl.logsReplOnly\": \"logs \u4EC5\u5728\u4EA4\u4E92 REPL \u4E2D\u53EF\u7528\",\n \"repl.history.live\": \"\u5B9E\u65F6\",\n \"repl.history.last50\": \"\u6700\u8FD1 50 \u6761\",\n \"repl.history.last100\": \"\u6700\u8FD1 100 \u6761\",\n \"repl.history.last500\": \"\u6700\u8FD1 500 \u6761\",\n \"repl.history.last1000\": \"\u6700\u8FD1 1000 \u6761\",\n \"repl.history.last1min\": \"\u6700\u8FD1 1 \u5206\u949F\",\n \"repl.history.last5min\": \"\u6700\u8FD1 5 \u5206\u949F\",\n \"repl.history.last15min\": \"\u6700\u8FD1 15 \u5206\u949F\",\n \"repl.history.last1hour\": \"\u6700\u8FD1 1 \u5C0F\u65F6\",\n \"repl.history.all\": \"\u7F13\u51B2\u5168\u90E8\",\n\n /* \u2500\u2500\u2500 \u670D\u52A1\u63A7\u5236 \u2500\u2500\u2500 */\n \"svc.header\": \"\u670D\u52A1\",\n \"svc.col.name\": \"\u540D\u79F0\",\n \"svc.col.status\": \"\u72B6\u6001\",\n \"svc.col.owner\": \"\u5F52\u5C5E\",\n \"svc.col.pid\": \"PID\",\n \"svc.col.uptime\": \"\u8FD0\u884C\u65F6\u957F\",\n \"svc.state.running\": \"\u8FD0\u884C\u4E2D\",\n \"svc.state.stopped\": \"\u5DF2\u505C\u6B62\",\n \"svc.owner.managed\": \"\u63A5\u7BA1\",\n \"svc.owner.external\": \"\u5916\u90E8\",\n \"svc.owner.none\": \"\u2014\",\n \"svc.running\": \"\u8FD0\u884C\u4E2D - \u5DF2\u63A5\u7BA1\",\n \"svc.runningExternal\": \"\u8FD0\u884C\u4E2D - \u5916\u90E8\",\n \"svc.stopped\": \"\u5DF2\u505C\u6B62\",\n \"svc.unknown\": \"\u672A\u77E5\u670D\u52A1: {name}\uFF08\u53EF\u9009: {list}\uFF09\",\n \"svc.logs.usage\": \"\u7528\u6CD5: logs <service> [-n N] [-f]\",\n \"svc.logs.empty\": \"\uFF08\u6682\u65E0\u65E5\u5FD7\uFF09\",\n \"svc.logs.header\": \"{title} \u65E5\u5FD7\uFF08\u6700\u8FD1 {count} \u6761\uFF09:\",\n \"svc.start.usage\": \"\u7528\u6CD5: start <service>|-all\",\n \"svc.start.usageShort\": \"\u7528\u6CD5: start <service>|-all\",\n \"svc.stop.usage\": \"\u7528\u6CD5: stop <service>|-all\",\n \"svc.stop.usageShort\": \"\u7528\u6CD5: stop <service>|-all\",\n \"svc.restart.usage\": \"\u7528\u6CD5: restart <service>|-all\",\n \"svc.restart.usageShort\": \"\u7528\u6CD5: restart <service>|-all\",\n \"svc.alreadyRunning\": \"{title} \u5DF2\u5728\u8FD0\u884C\uFF08PID {pid}\uFF09\",\n \"svc.alreadyStarting\": \"{title} \u6B63\u5728\u542F\u52A8...\",\n \"svc.started\": \"{title} \u5DF2\u542F\u52A8\",\n \"svc.startFailed\": \"{title} \u5931\u8D25: {message}\",\n \"svc.alreadyStopped\": \"{title} \u5DF2\u505C\u6B62\",\n \"svc.alreadyStopping\": \"{title} \u6B63\u5728\u505C\u6B62...\",\n \"svc.stoppedMsg\": \"{title} \u5DF2\u505C\u6B62\",\n \"svc.stopFailed\": \"{title} \u505C\u6B62\u5931\u8D25: {message}\",\n \"svc.send.usage\": \"\u7528\u6CD5: send <service> <message>\",\n \"svc.notRunning\": \"{title} \u672A\u8FD0\u884C\",\n \"svc.writeFailed\": \"\u5199\u5165\u5931\u8D25\",\n \"svc.restarted\": \"{title} \u5DF2\u91CD\u542F\",\n \"svc.restartFailed\": \"{title} \u91CD\u542F\u5931\u8D25: {message}\",\n \"svc.allStarted\": \"\u5168\u90E8\u670D\u52A1\u5DF2\u542F\u52A8\",\n \"svc.allStopped\": \"\u5168\u90E8\u670D\u52A1\u5DF2\u505C\u6B62\",\n \"svc.skipped\": \"{title} \u5DF2\u8DF3\u8FC7: {reason}\",\n \"svc.startAll.started\": \"\u5DF2\u542F\u52A8: {list}\",\n \"svc.startAll.skipped\": \"\u5DF2\u8DF3\u8FC7: {list}\",\n \"svc.startAll.failed\": \"\u542F\u52A8\u5931\u8D25: {list}\",\n \"svc.startAll.empty\": \"\u6CA1\u6709\u670D\u52A1\u9700\u8981\u542F\u52A8\",\n \"svc.qq.footer.official\": \"QQ \u6865: official \u00B7 {enabled} \u00B7 AppID {appId} \u00B7 group_openid {openid} \u00B7 {sandbox} \u00B7 creds={creds}\",\n \"svc.qq.footer.llbot\": \"QQ \u6865: llbot \u00B7 {enabled} \u00B7 \u7FA4 {group} \u00B7 path {path}\",\n \"svc.updateComplete\": \"\u66F4\u65B0\u5B8C\u6210\",\n \"svc.updateExited\": \"\u66F4\u65B0\u8FDB\u7A0B\u9000\u51FA\uFF0C\u4EE3\u7801 {code}\",\n \"svc.updateError\": \"\u66F4\u65B0\u9519\u8BEF: {message}\",\n \"svc.updateStartBds\": \"\u66F4\u65B0: \u901A\u8FC7\u8FDB\u7A0B\u76D1\u7763\u5668\u542F\u52A8 BDS\",\n \"svc.bdsStarted\": \"BDS \u5DF2\u542F\u52A8\uFF08\u76D1\u7763\u6A21\u5F0F\uFF09\",\n \"svc.bdsStartFailed\": \"BDS \u542F\u52A8\u5931\u8D25: {message}\",\n \"svc.bdsStoppedForUpdate\": \"\u66F4\u65B0\u65F6\u5DF2\u505C\u6B62 BDS\uFF1B\u5C31\u7EEA\u540E\u8BF7\u6267\u884C `start bds`\",\n \"svc.bdsAlreadyRunning\": \"BDS \u5DF2\u5728\u8FD0\u884C\uFF08{kind}\uFF0CPID {pid}\uFF09\",\n \"svc.stdinUnavailable\": \"{title} \u7531\u5916\u90E8\u542F\u52A8\uFF0C\u65E0\u6CD5\u901A\u8FC7 stdin \u53D1\u9001\u547D\u4EE4\",\n \"svc.stoppedExternal\": \"{title} \u5DF2\u505C\u6B62\uFF08\u5916\u90E8\u8FDB\u7A0B\uFF09\",\n\n /* \u2500\u2500\u2500 \u521D\u59CB\u5316 \u2500\u2500\u2500 */\n \"wizard.intro\": \"\u521D\u59CB\u5316\",\n \"wizard.rerun\": \"\u5DF2\u521D\u59CB\u5316\u3002\u662F\u5426\u91CD\u65B0\u8FD0\u884C\u5411\u5BFC\uFF1F\",\n \"wizard.skipped\": \"\u5DF2\u8DF3\u8FC7\u521D\u59CB\u5316\",\n \"wizard.step1\": \"\u6B65\u9AA4 1 - \u8FD0\u884C\u73AF\u5883\",\n \"wizard.runtimeRoot\": \"\u8FD0\u884C\u6839\u76EE\u5F55: {root}\",\n \"wizard.npmMissing\": \"npm \u8FD0\u884C\u65F6\u7F3A\u5C11\u5FC5\u9700\u76EE\u5F55: {list}\",\n \"wizard.prepFailed\": \"\u8FD0\u884C\u73AF\u5883\u51C6\u5907\u5931\u8D25: {message}\",\n \"wizard.step2\": \"\u6B65\u9AA4 2 - \u5916\u90E8\u8FD0\u884C\u65F6\",\n \"wizard.step2Note\": \"\u9009\u62E9 BDS\u3001\u6570\u636E\u5E93\u4E0E QQ \u6865\u63A5\u540E\u7AEF\",\n \"wizard.bdsDir\": \"BDS \u5B89\u88C5\u76EE\u5F55\",\n \"wizard.cannotCreateBds\": \"\u65E0\u6CD5\u521B\u5EFA BDS \u5B89\u88C5\u76EE\u5F55: {dir}\",\n \"wizard.qqBackend\": \"QQ \u6865\u63A5\u540E\u7AEF:\",\n \"wizard.qqBackend.official\": \"QQ \u5F00\u653E\u5E73\u53F0\uFF08\u5B98\u65B9 Bot\uFF09\",\n \"wizard.qqBackend.officialHint\": \"\u63A8\u8350\uFF1B\u9700 AppID / AppSecret\",\n \"wizard.qqBackend.llbot\": \"LLBot\uFF08OneBot 11\uFF09\",\n \"wizard.qqBackend.llbotHint\": \"\u9700\u672C\u673A LLBot \u8FDB\u7A0B\",\n \"wizard.qqBackend.disabled\": \"\u6682\u4E0D\u542F\u7528 QQ \u6865\",\n \"wizard.qqBackend.disabledHint\": \"qq_enabled=false\",\n \"wizard.qqAppId\": \"QQ \u5F00\u653E\u5E73\u53F0 AppID:\",\n \"wizard.qqAppSecret\": \"QQ \u5F00\u653E\u5E73\u53F0 AppSecret:\",\n \"wizard.qqSandbox\": \"\u4F7F\u7528\u6C99\u7BB1\u73AF\u5883\uFF1F\",\n \"wizard.qqGroupOpenid\": \"\u7FA4 openid\uFF08\u53EF\u7A0D\u540E\u586B\u5199\uFF09:\",\n \"wizard.qqGroupOpenidHint\": \"\u975E\u4F20\u7EDF\u7FA4\u53F7\",\n \"wizard.enableLlbot\": \"\u542F\u7528 LLBot \u8FDB\u7A0B\u63A5\u7BA1\uFF1F\",\n \"wizard.llbotDir\": \"LLBot \u8FD0\u884C\u76EE\u5F55\",\n \"wizard.usingDefault\": \"\u4F7F\u7528\u9ED8\u8BA4: {path}\",\n \"wizard.dbDir\": \"\u6570\u636E\u5E93\u5B58\u50A8\u76EE\u5F55\",\n \"wizard.dbPort\": \"\u6570\u636E\u5E93\u670D\u52A1\u7AEF\u53E3:\",\n \"wizard.portRange\": \"\u8BF7\u8F93\u5165 1024\u201365535\",\n \"wizard.valueRequired\": \"\u6B64\u9879\u5FC5\u586B\uFF01\",\n \"wizard.step3\": \"\u6B65\u9AA4 3 - BDS \u73AF\u5883\",\n \"wizard.bdsFound\": \"\u5DF2\u627E\u5230: {path}\",\n \"wizard.bdsNotFound\": \"\u672A\u627E\u5230: {path}\",\n \"wizard.eula\": \"\u662F\u5426\u540C\u610F Mojang \u53D1\u5E03\u7684 EULA(https://www.minecraft.net/en-us/eula)\uFF1F\u4F7F\u7528\u672C\u7A0B\u5E8F\u524D\u5FC5\u987B\u540C\u610F\u3002\",\n \"wizard.disagreed\": \"\u5DF2\u62D2\u7EDD\u3002\",\n \"wizard.downloadBds\": \"\u73B0\u5728\u4E0B\u8F7D BDS\uFF1F\",\n \"wizard.selectChannel\": \"\u9009\u62E9\u901A\u9053:\",\n \"wizard.channel.release\": \"Release\",\n \"wizard.channel.releaseHint\": \"\u7A33\u5B9A\u7248\",\n \"wizard.channel.preview\": \"Preview\",\n \"wizard.channel.previewHint\": \"\u9884\u89C8\u7248\",\n \"wizard.cannotCreateBackup\": \"\u65E0\u6CD5\u521B\u5EFA BDS \u5907\u4EFD\u76EE\u5F55: {dir}\",\n \"wizard.backupDir\": \"BDS \u5907\u4EFD\u76EE\u5F55\",\n \"wizard.preserve\": \"\u66F4\u65B0\u65F6\u4FDD\u7559\u7684\u6587\u4EF6\uFF08\u4E0B\u6B21\u542F\u7528\u66F4\u65B0\u65F6\uFF09:\",\n \"wizard.preserve.serverProps\": \"\u670D\u52A1\u5668\u914D\u7F6E\",\n \"wizard.preserve.worlds\": \"\u4E16\u754C\u6570\u636E\",\n \"wizard.preserve.config\": \"\u914D\u7F6E\u76EE\u5F55\",\n \"wizard.updaterTip\": \"\u82E5\u627E\u4E0D\u5230 BDS \u8FD0\u884C\u65F6\uFF0C\u7A0D\u540E\u4F1A\u81EA\u52A8\u4E0B\u8F7DBDS\u3002\\n \u53EF\u5728 configs/bds_updater.json \u4E2D\u914D\u7F6E\u66F4\u65B0\u9009\u9879\u3002\",\n \"wizard.step4\": \"\u6B65\u9AA4 4 - \u6A21\u5757\",\n \"wizard.modulesFound\": \"\u53D1\u73B0 {count} \u4E2A\u53EF\u9009\u6A21\u5757\",\n \"wizard.modulesNone\": \"\u672A\u627E\u5230\u6A21\u5757\u76EE\u5F55\",\n \"wizard.enableModules\": \"\u542F\u7528\u6A21\u5757:\",\n \"wizard.emptyHint\": \"\uFF08\u7A7A\uFF09\",\n \"wizard.updatingConfigs\": \"\u6B63\u5728\u66F4\u65B0\u914D\u7F6E\",\n \"wizard.configsUpdated\": \"\u914D\u7F6E\u5DF2\u66F4\u65B0\",\n \"wizard.updatingModules\": \"\u6B63\u5728\u66F4\u65B0\u6A21\u5757\u72B6\u6001\",\n \"wizard.modulesUpdated\": \"\u6A21\u5757\u72B6\u6001\u5DF2\u66F4\u65B0\",\n \"wizard.initDb\": \"\u6B63\u5728\u521D\u59CB\u5316\u6570\u636E\u5E93\",\n \"wizard.dbTimeout\": \"\u6570\u636E\u5E93\u542F\u52A8\u8D85\u65F6\",\n \"wizard.dbOk\": \"\u6570\u636E\u5E93\u5DF2\u521D\u59CB\u5316\",\n \"wizard.downloadingBds\": \"\u6B63\u5728\u4E0B\u8F7D BDS\",\n \"wizard.downloadFail\": \"\u4E0B\u8F7D\u5931\u8D25\u3002\",\n \"wizard.bdsDownloaded\": \"BDS \u5DF2\u4E0B\u8F7D\",\n \"wizard.done\": \"\u5B8C\u6210\uFF01\u952E\u5165 / \u4EE5\u6267\u884C\u547D\u4EE4\",\n \"wizard.installing\": \"\u6B63\u5728\u5B89\u88C5 {count} \u4E2A\u6A21\u5757\",\n \"wizard.installed\": \"\u5DF2\u5B89\u88C5 {count} \u4E2A\",\n \"wizard.installFailed\": \"\u5B89\u88C5\u5931\u8D25: {message}\\n\u53EF\u7A0D\u540E\u6267\u884C: mod install <id>\",\n \"wizard.fetchMissing\": \"\u7F3A\u5C11 fetch-module \u2014 \u8BF7\u7A0D\u540E\u5BF9\u4EE5\u4E0B\u6A21\u5757\u6267\u884C `mod install <id>`: {list}\",\n \"wizard.noModulesSelected\": \"\u672A\u9009\u62E9\u6A21\u5757 \u2014 \u884C\u4E3A\u5305\u5C06\u4E3A\u7A7A\uFF0C\u76F4\u5230\u6267\u884C `mod install <id>` \u5B89\u88C5\u6A21\u5757\u3002\",\n \"wizard.buildingBp\": \"\u6B63\u5728\u6784\u5EFA\u884C\u4E3A\u5305\",\n \"wizard.buildFailed\": \"\u6784\u5EFA\u5931\u8D25: {message}\\n\u7A0D\u540E\u53EF\u6267\u884C `mod build` \u91CD\u8BD5\u3002\",\n \"wizard.deploying\": \"\u6B63\u5728\u90E8\u7F72\u5230 {path}\",\n \"wizard.restartBds\": \"\u8BF7\u91CD\u542F BDS \u4EE5\u52A0\u8F7D\u65B0\u884C\u4E3A\u5305\u3002\",\n \"wizard.deployFailed\": \"\u90E8\u7F72\u5931\u8D25: {message}\\n\u4FEE\u590D configs/ \u4E2D\u7684 bds_path \u540E\u6267\u884C `mod reload`\u3002\",\n\n \"prompt.enterPath\": \"\u8F93\u5165\u8DEF\u5F84\",\n \"prompt.browse\": \"\u6D4F\u89C8\u2026\",\n \"prompt.browseHint\": \"\u6253\u5F00\u7CFB\u7EDF\u6587\u4EF6\u5939\u9009\u62E9\u5668\",\n\n \"reload.buildOnly\": \"\u6784\u5EFA\u5B8C\u6210\u3002\",\n \"reload.bdsNotRunning\": \"BDS \u672A\u8FD0\u884C \u2014 \u5DF2\u5B8C\u6210\u6784\u5EFA\u3002\",\n \"reload.sent\": \"\u5DF2\u5411 BDS \u53D1\u9001 reload\",\n\n \"bp.usage\": \"\u7528\u6CD5: bp <build|deploy>\",\n\n \"mod.usage\": \"\u7528\u6CD5: sfmc {cmds} <{subs}> [args]\",\n \"mod.list.title\": \"\u5DF2\u5B89\u88C5\u6A21\u5757\",\n \"mod.noneInstalled\": \"\\n\u672A\u5B89\u88C5\u6A21\u5757\u3002\u8BF7\u5C06\u6A21\u5757\u76EE\u5F55\u653E\u5230 {dir}\uFF0C\u6216\u6267\u884C `sfmc mod install <id>`\u3002\\n\",\n \"mod.notInRegistry\": '\u6A21\u5757 \"{query}\" \u4E0D\u5728\u5B98\u65B9 registry \u4E2D\u3002',\n \"mod.info.usage\": \"\u7528\u6CD5: mod info <id>\",\n \"mod.notInstalledAt\": \"\u6A21\u5757 {id} \u672A\u5B89\u88C5\u4E8E {path}\",\n \"mod.notInstalled\": \"\u6A21\u5757 {id} \u672A\u5B89\u88C5\",\n \"mod.verifyOk\": \"{id} \u6B63\u5E38\\n fingerprint: {fp}\\n\",\n \"mod.dbUnreachable\": \"\u65E0\u6CD5\u8FDE\u63A5 db-server {url}: {message}\u3002db \u670D\u52A1\u662F\u5426\u5728\u8FD0\u884C\uFF1F\uFF08sfmc> start db\uFF09\",\n \"mod.toggleFailed\": \"{action} {id} \u5931\u8D25: {err}\",\n \"mod.action.enabled\": \"\u5DF2\u542F\u7528\",\n \"mod.action.disabled\": \"\u5DF2\u7981\u7528\",\n \"mod.toggleOk\": \"{label} {id}\",\n \"mod.toggleBadBody\": \"{action} {id} \u8FD4\u56DE: {text}\",\n \"mod.cannotDisable\": \"\u6A21\u5757 {id} \u4E0D\u53EF\u7981\u7528\uFF08canDisable=false\uFF09\",\n \"mod.toggleLockFailed\": \"\u5199\u5165 module-lock \u5931\u8D25\uFF08{id}\uFF09: {message}\",\n \"mod.toggleDbSkipped\":\n \"\u5DF2\u5199\u5165 module-lock\uFF1Bdb-server \u672A\u540C\u6B65\uFF08{detail}\uFF09\u3002\u4E0B\u6B21 start db \u540E\u5185\u5B58\u6001\u4F1A\u8DDF\u4E0A\uFF1B\u6E38\u620F\u5185\u4ECD\u9700 mod reload / \u91CD\u542F BDS\u3002\",\n \"mod.enable.usage\": \"\u7528\u6CD5: mod enable <id>\",\n \"mod.disable.usage\": \"\u7528\u6CD5: mod disable <id>\",\n \"mod.install.usage\":\n \"\u7528\u6CD5: mod install <id>\\n mod install <id> --from <scheme> [--link] [--sha256 <hex>]\",\n \"mod.fromUnknown\": \"\u672A\u77E5\u7684 --from \u6765\u6E90: {value}\u3002\u53EF\u7528: npm:|local[:<\u8DEF\u5F84>]|tgz:|zip:|dir:|github:<repo>[@tag]\",\n \"mod.fetchMissing\": \"\u672A\u627E\u5230 fetch-module\u3002\u8BF7\u5B89\u88C5 @sfmc-bds/sfmc \u6216\u5728 monorepo \u5185\u8FD0\u884C\u3002\",\n \"mod.uninstall.usage\": \"\u7528\u6CD5: mod uninstall <id>\",\n \"mod.notInstalledFolder\": \"\u6A21\u5757 {id} \u672A\u5B89\u88C5\uFF08\u76EE\u5F55\u4E0D\u5B58\u5728: {path}\uFF09\",\n \"mod.removed\": \"\u5DF2\u4ECE {path} \u79FB\u9664 {id}\\n\",\n\n \"pack.built\": \"\u5DF2\u6784\u5EFA\u5305\u81F3 {path}\",\n \"pack.buildFailed\": \"pack \u6784\u5EFA\u5931\u8D25: {message}\",\n \"pack.deployed\": \"\u5DF2\u90E8\u7F72\u5305\",\n \"pack.deployFailed\": \"pack \u90E8\u7F72\u5931\u8D25: {message}\",\n \"pack.statusFailed\": \"pack status \u5931\u8D25: {message}\",\n \"pack.listFailed\": \"pack list \u5931\u8D25: {message}\",\n \"pack.noCatalog\": \"\u5C1A\u65E0\u5DF2\u90E8\u7F72 catalog \u2014 \u8BF7\u5148\u6267\u884C `sfmc pack deploy`\",\n \"pack.noUuid\": \"catalog \u4E2D\u65E0 {kind} \u5305 uuid\",\n \"pack.actionFailed\": \"{action} \u5931\u8D25: {detail}\",\n \"pack.enabledOk\": \"\u5DF2\u542F\u7528 {kind} \u5305 {uuid}\",\n \"pack.disabledOk\": \"\u5DF2\u7981\u7528 {kind} \u5305 {uuid}\",\n \"pack.actionErr\": \"pack {action} \u5931\u8D25: {message}\",\n \"pack.usage\": \"\u7528\u6CD5: sfmc pack <{subs}> [behavior|resource]\",\n\n \"packs.restartHint\": \"\u9700\u91CD\u542F BDS \u540E\u751F\u6548\",\n \"packs.rejoinHint\": \"\u5BA2\u6237\u7AEF\u9700\u91CD\u8FDB\u670D\u4EE5\u4E0B\u8F7D\u8D44\u6E90\u5305\",\n \"packs.conflict\": \"\u68C0\u6D4B\u5230\u51B2\u7A81\uFF1A\",\n \"packs.conflict.existing\": \" \u5DF2\u6709: {name} v{version} {uuid}\\n {dir}\",\n \"packs.conflict.incoming\": \" \u65B0\u6765: {name} v{version} {uuid}\",\n \"packs.overwriteAsk\": \"\u8986\u76D6\u5DF2\u6709\u5305\uFF08\u76F8\u540C UUID\uFF0C\u4F46\u7248\u672C\u76F8\u5BF9\u73B0\u5B58\u5305\u8F83\u4F4E\uFF09\uFF1F\",\n \"packs.badManifest\": \"\u65E0\u6CD5\u8BC6\u522B manifest\uFF08\u9700\u542B resources/data/script \u6A21\u5757\uFF0C\u4E14 header \u542B name/uuid/version\uFF09\",\n \"packs.skippedNoOverwrite\": \"\u5DF2\u8DF3\u8FC7\uFF08\u672A\u8986\u76D6\uFF09\",\n \"packs.conflictSkip\": \" \u51B2\u7A81\u8DF3\u8FC7\uFF08\u975E\u4EA4\u4E92\uFF0C\u53EF\u7528 --force\uFF09: {name}\",\n \"packs.inboxSkip\": \" \u8DF3\u8FC7\u6536\u4EF6\u7BB1\uFF1A{message}\",\n \"packs.inboxFound\": \" \u6536\u4EF6\u7BB1\u53D1\u73B0 {count} \u9879 \u2192 {level}\",\n \"packs.alreadyDone\": \" \u5DF2\u5904\u7406\u8FC7\uFF0C\u8DF3\u8FC7: {name}\",\n \"packs.dryRunExtract\": \" dry-run \u89E3\u538B: {name}\",\n \"packs.noPackRoot\": \" \u672A\u627E\u5230\u5305\u6839: {name}\",\n \"packs.installedEnabled\": \" \u5DF2\u5B89\u88C5\u5E76\u542F\u7528 {kind}: {name} v{version}\",\n \"packs.installFailed\": \" \u5B89\u88C5\u5931\u8D25 {name}: {reason}\",\n \"packs.listEmpty\": \"\uFF08\u65E0\uFF09\",\n \"packs.list.bpHeader\": \"\u884C\u4E3A\u5305:\",\n \"packs.list.rpHeader\": \"\u8D44\u6E90\u5305:\",\n \"packs.list.on\": \"\u5F00 \",\n \"packs.list.off\": \"\u5173\",\n \"packs.doctor.parseFail\": \"{file} \u65E0\u6CD5\u89E3\u6790\",\n \"packs.doctor.missingDir\": \"\u6E05\u5355\u6709 uuid \u4F46\u76EE\u5F55\u7F3A\u5931 ({kind}): {uuid}\",\n \"packs.doctor.versionMismatch\": \"\u7248\u672C\u4E0D\u4E00\u81F4 ({kind}): {folder} \u6E05\u5355 {listVer} vs \u78C1\u76D8 {diskVer}\",\n \"packs.doctor.notEnabled\": \"\u5DF2\u5B89\u88C5\u672A\u542F\u7528: [{kind}] {folder} ({uuid})\",\n \"packs.doctor.ok\": \"doctor: \u672A\u53D1\u73B0\u95EE\u9898\",\n \"packs.doctor.found\": \"doctor \u53D1\u73B0 {count} \u9879:\\n{list}\",\n \"packs.notFound\": \"\u672A\u627E\u5230\u5305: {id}\",\n \"packs.toggleDone\": \"{verb} {folder} \u5B8C\u6210\u3002{hint}\",\n \"packs.bump.usage\": \"\u7528\u6CD5: packs bump <uuid|folder> \uFF08\u4EC5 RP\uFF09\",\n \"packs.bump.rpOnly\": \"packs bump \u4EC5\u652F\u6301\u8D44\u6E90\u5305 (RP)\",\n \"packs.bumped\": \"\u5DF2 bump {folder} \u2192 v{version}\u3002{restart}\uFF1B{rejoin}\",\n \"packs.pathMissing\": \"\u8DEF\u5F84\u4E0D\u5B58\u5728: {path}\",\n \"packs.notArchive\": \"\u4E0D\u662F\u5305\u76EE\u5F55\u6216 .zip/.mcpack/.mcaddon\",\n \"packs.noManifestRoot\": \"\u672A\u53D1\u73B0\u542B manifest.json \u7684\u5305\u6839\",\n \"packs.installedLine\": \"\u5DF2\u5B89\u88C5\u5E76\u542F\u7528: {name} v{version} ({kind})\",\n \"packs.skipFailLine\": \"\u8DF3\u8FC7/\u5931\u8D25: {name} ({reason})\",\n \"packs.inboxEmpty\": \"\u6536\u4EF6\u7BB1\u4E3A\u7A7A\",\n \"packs.search.usage\": \"\u7528\u6CD5: packs search <query>\uFF08CurseForge \u8FDC\u7A0B\u641C\u7D22\uFF0C\u9700 API Key\uFF09\",\n \"packs.bind.usage\": \"\u7528\u6CD5: packs bind <uuid|folder> <projectId|slug|url>\",\n \"packs.unbind.usage\": \"\u7528\u6CD5: packs unbind <uuid|folder>\",\n \"packs.unbindOk\": \"\u5DF2\u89E3\u9664\u7ED1\u5B9A {uuid}\uFF08\u7F16\u8F91 {path} \u4EA6\u53EF\uFF09\",\n \"packs.unbindMiss\": \"\u672A\u627E\u5230\u7ED1\u5B9A: {id}\",\n \"packs.update.usage\": \"\u7528\u6CD5: packs update <uuid|folder|--all>\",\n \"packs.toggle.usage\": \"\u7528\u6CD5: packs {verb} <uuid|folder>\",\n \"packs.uninstall.usage\":\n \"\u7528\u6CD5: packs uninstall [uuid|folder...] [--purge] [--no-paired]\\n \u65E0\u53C2\u6570\u4E14\u4E3A TTY \u65F6\u8FDB\u5165\u591A\u9009\uFF1B\u53EF\u4E00\u6B21\u4F20\u591A\u4E2A id\",\n \"packs.uninstall.protected\": \"\u62D2\u7EDD\u5378\u8F7D\u5E73\u53F0\u805A\u5408\u5305: {folder}\uFF08\u8BF7\u7528 sfmc mod\uFF09\",\n \"packs.uninstall.trashed\": \"\u5DF2\u5378\u8F7D\u5E76\u79FB\u5165\u56DE\u6536\u7AD9: {folder}\\n \u2192 {dest}\",\n \"packs.uninstall.deleted\": \"\u5DF2\u5378\u8F7D\u5E76\u5220\u9664: {folder}\",\n \"packs.uninstall.dirMissing\": \"\u6E05\u5355\u5DF2\u79FB\u9664\uFF0C\u76EE\u5F55\u672C\u5C31\u4E0D\u5B58\u5728: {folder}\",\n \"packs.uninstall.bindingRemoved\": \"\u5DF2\u6E05\u9664\u66F4\u65B0\u6E90\u7ED1\u5B9A: {uuid}\",\n \"packs.uninstall.pick\": \"\u9009\u62E9\u8981\u5378\u8F7D\u7684\u8D44\u6E90\u5305\uFF08\u7A7A\u683C\u52FE\u9009\uFF0C\u56DE\u8F66\u786E\u8BA4\uFF09\",\n \"packs.uninstall.summary\": \"\u5C06\u5378\u8F7D\u4EE5\u4E0B {count} \u9879\uFF08\u542B\u914D\u5BF9 RP\uFF09\uFF1A\",\n \"packs.uninstall.confirm\": \"\u786E\u8BA4\u5378\u8F7D\u8FD9 {count} \u9879\uFF1F\",\n \"packs.uninstall.cancelled\": \"\u5DF2\u53D6\u6D88\u5378\u8F7D\",\n \"packs.uninstall.none\": \"\u6CA1\u6709\u53EF\u5378\u8F7D\u7684\u8D44\u6E90\u5305\",\n \"packs.uninstall.pairedOf\": \"\uFF08\u914D\u5BF9\u81EA {folder}\uFF09\",\n \"packs.install.usage\": \"\u7528\u6CD5: packs install [path|--inbox] [--force]\",\n \"packs.installInbox\": \"\u6536\u4EF6\u7BB1\u5B89\u88C5: \u6210\u529F={installed} \u8DF3\u8FC7={skipped} \u5931\u8D25={failed}\",\n \"packs.scanResult\": \"\u626B\u63CF: \u6210\u529F={installed} \u8DF3\u8FC7={skipped} \u5931\u8D25={failed}\",\n \"packs.unknownSub\": \"\u672A\u77E5 packs \u5B50\u547D\u4EE4: {verb}\\n\",\n \"packs.usage.title\": \"{cmd}\uFF08\u522B\u540D {alias}\uFF09\u2014 \u4E16\u754C\u4FA7\u4EFB\u610F BP/RP\",\n \"packs.usage.bump\": \"\u4EC5 RP\uFF0Cpatch \u7248\u672C +1\",\n \"packs.usage.cfSearch\": \"CurseForge \u641C\u7D22\uFF08\u9700 Key\uFF09\",\n \"packs.usage.inbox\": \"\u6536\u4EF6\u7BB1: {path}\",\n \"packs.usage.trash\": \"\u5378\u8F7D\u56DE\u6536\u7AD9: {path}\uFF08pack-update.json \u2192 uninstall.recycleBin\uFF09\",\n \"packs.usage.sources\": \"\u66F4\u65B0\u6E90\u7ED1\u5B9A: {path}\uFF08\u53EF\u624B\u6539 enabled/projectId\uFF09\",\n \"packs.usage.enableNote\": \"\u5B89\u88C5\u9ED8\u8BA4\u5199\u5165 world_*_packs.json \u542F\u7528\uFF1B{hint}\u3002\",\n \"packs.usage.moduleNote\": \"\u6A21\u5757\u805A\u5408\u8BF7\u7528 {cmd}\uFF08\u975E\u672C\u547D\u4EE4\uFF09\u3002\",\n\n \"packUpdate.needKey\":\n \"\u672A\u914D\u7F6E\u4EFB\u4F55 pack \u66F4\u65B0\u6E90\u3002\u8BF7\u7F16\u8F91 {path} \u7684 providers.*.apiKey\uFF08\u6216\u5BF9\u5E94\u73AF\u5883\u53D8\u91CF\uFF09\u3002CurseForge\uFF1Ahttps://console.curseforge.com/ \u7533\u8BF7 Studios Key \u2192 providers.curseforge.apiKey / CURSEFORGE_API_KEY\uFF08\u4E0D\u8981\u7528 Upload API \u7684 UUID Token\uFF09\",\n \"packUpdate.probeNoName\": \"\u65E0\u6CD5\u4ECE manifest / \u6587\u4EF6\u5939\u540D\u6D3E\u751F\u53EF\u641C\u7D22\u540D\u79F0\",\n \"packUpdate.probeQueries\": \"\u63A2\u6D4B\u67E5\u8BE2\u6E90 header={header} folder={folder}\\n \u2192 {queries}\",\n \"packUpdate.probeFail\": \"\u63A2\u6D4B\u66F4\u65B0\u6E90\u5931\u8D25: {message}\",\n \"packUpdate.probeMiss\": \"\u672A\u5728 CurseForge \u627E\u5230\u5339\u914D: {name}\",\n \"packUpdate.probeLowScore\": \"\u5019\u9009\u76F8\u4F3C\u5EA6\u504F\u4F4E: {name} \u2192 {hit} ({score}) {url}\",\n \"packUpdate.probeHit\": \"\u627E\u5230\u53EF\u80FD\u7684\u66F4\u65B0\u6E90: {name} \u2192 {hit} ({score})\\n {url}\",\n \"packUpdate.editHint\": \"\u7A0D\u540E\u53EF\u7F16\u8F91 {path} \u4FEE\u6539/\u5173\u95ED\u5BF9\u5E94\u6E90\uFF08enabled: false\uFF09\",\n \"packUpdate.confirmBind\": \"\u5C06\u6B64 CurseForge \u9879\u76EE\u7ED1\u5B9A\u4E3A\u66F4\u65B0\u6E90\uFF1F {hit}\",\n \"packUpdate.probeAutoBind\": \"\u975E\u4EA4\u4E92\u73AF\u5883\uFF1A\u81EA\u52A8\u7ED1\u5B9A \u2192 {provider}:{slug}\\n {path}\",\n \"packUpdate.probeNoAutoBind\": \"\u975E\u4EA4\u4E92\u73AF\u5883\u4E0D\u81EA\u52A8\u7ED1\u5B9A\uFF1B\u53EF\u7528 packs bind \u624B\u52A8\u7ED1\u5B9A\",\n \"packUpdate.bindSkipped\": \"\u5DF2\u8DF3\u8FC7\u7ED1\u5B9A\",\n \"packUpdate.bindOk\": \"\u5DF2\u7ED1\u5B9A {uuid} \u2192 {provider}:{slug} [{enabled}]\\n \u6587\u4EF6: {path}\",\n \"packUpdate.bindBpOnly\": \"\u53EA\u80FD\u4E3A\u884C\u4E3A\u5305\uFF08BP\uFF09\u7ED1\u5B9A\u66F4\u65B0\u6E90\",\n \"packUpdate.resolveFail\": \"\u65E0\u6CD5\u89E3\u6790 CurseForge \u9879\u76EE: {ref}\",\n \"packUpdate.searchEmpty\": \"CurseForge \u65E0\u7ED3\u679C: {query}\",\n \"packUpdate.sourcesHeader\": \"\u914D\u7F6E: {config}\\n\u7ED1\u5B9A: {sources}\",\n \"packUpdate.sourcesEmpty\": \"\u5C1A\u65E0\u7ED1\u5B9A\u3002\u5B89\u88C5 BP \u540E\u4F1A\u5C1D\u8BD5\u63A2\u6D4B\uFF0C\u6216\u4F7F\u7528 packs bind\u3002\",\n \"packUpdate.disabled\": \"pack-update \u5DF2\u5728\u914D\u7F6E\u4E2D\u7981\u7528\",\n \"packUpdate.bindingDisabled\": \"\u7ED1\u5B9A\u5DF2\u5173\u95ED (enabled: false)\",\n \"packUpdate.noRemoteFile\": \"\u8FDC\u7A0B\u65E0\u53EF\u7528\u6587\u4EF6\",\n \"packUpdate.fileNewer\": \"\u8FDC\u7A0B\u6587\u4EF6\u66F4\u65B0: {file} (id={id})\",\n \"packUpdate.upToDate\": \"\u5DF2\u662F\u6700\u65B0\",\n \"packUpdate.needSync\": \"\u8FDC\u7A0B\u6587\u4EF6\u5C1A\u672A\u540C\u6B65\u5230\u4E16\u754C\u76EE\u5F55\uFF08\u7248\u672C {local} \u2261 {remote}\uFF0CfileId={id}\uFF09\",\n \"packUpdate.remoteNoBp\": \"\u8FDC\u7A0B\u5F52\u6863\u4E2D\u672A\u627E\u5230\u884C\u4E3A\u5305\",\n \"packUpdate.bpNewer\": \"BP \u6709\u66F4\u65B0 {local} \u2192 {remote}\",\n \"packUpdate.installFail\": \"\u5B89\u88C5\u5931\u8D25: {reason}\",\n \"packUpdate.installedBp\": \"\u5DF2\u5199\u5165 BP \u2192 {dir} (v{version})\",\n \"packUpdate.installedRp\": \"\u5DF2\u5199\u5165 RP \u2192 {dir} (v{version})\",\n \"packUpdate.rpInstallMiss\": \"\u5F52\u6863\u542B RP \u4F46\u672A\u80FD\u5B89\u88C5\u914D\u5BF9\u8D44\u6E90\u5305\uFF08\u68C0\u67E5 dependencies / pairedResourceUuid\uFF09\",\n \"packUpdate.applied\": \"\u5DF2\u66F4\u65B0 {name} BP={bp} RP={rp}\",\n \"packUpdate.noBinding\": \"\u672A\u627E\u5230\u66F4\u65B0\u6E90\u7ED1\u5B9A: {id}\",\n \"packUpdate.startupFail\": \"\u542F\u52A8\u65F6\u68C0\u67E5\u66F4\u65B0\u5931\u8D25: {message}\",\n};\n\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
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, type ServiceStateEvent, refreshServices, startAll, stopAll, forceStopAll, queryServicesRuntime, isServiceRunning, onServiceStateChange, 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
21
|
export { startRepl, getHelp } from "./repl.js";
|
|
22
22
|
export { t, getLocale, setLocale, initLocale, type Locale } from "./i18n/index.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,KAAK,iBAAiB,EACtB,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"}
|
|
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,6 +1,7 @@
|
|
|
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,
|
|
@@ -29,6 +30,7 @@ export {
|
|
|
29
30
|
getAllLogs,
|
|
30
31
|
getHelp,
|
|
31
32
|
getLocale,
|
|
33
|
+
getQqBackendMode,
|
|
32
34
|
getRecentLogs,
|
|
33
35
|
initLocale,
|
|
34
36
|
isMonorepoLayout,
|
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 type ServiceStateEvent,\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,
|
|
4
|
+
"sourcesContent": ["/**\n * sfmc/ public runtime surface (Stage J \u2014 minimum entry design)\n *\n * This is the clean API that downstream callers (CLI commands,\n * external scripts, CI tooling) consume to manage the runtime stack\n * without re-implementing process lifecycle logic.\n *\n * Design:\n * - Single process tree. sfmc/ does not spawn itself recursively \u2014 it spawns\n * the actual services (db-server, qq-bridge, bds-tools, BDS).\n * - `ROOT` from runtime.ts describes the deployment root so callers\n * can adapt (path lookup, config dir).\n * - Service lifecycle goes through ServiceRegistry (start/stop/restart/status).\n *\n * Re-exports are deliberately thin: each item is a stable contract. Internal\n * helpers (LogLine buffers, child-process piping) are NOT re-exported.\n */\n\nexport { ROOT, isMonorepoLayout, isRuntimeInitialized, resolveServiceScript, resolveFetchModule, spawnService, spawnServiceSync, type ServiceId } from \"./runtime.js\";\n\nexport {\n SERVICE_NAMES,\n type ServiceName,\n type ServiceStatus,\n type ServiceStateEvent,\n type StartAllResult,\n type StartOutcome,\n getQqBackendMode,\n refreshServices,\n startAll,\n stopAll,\n forceStopAll,\n queryServicesRuntime,\n isServiceRunning,\n onServiceStateChange,\n services,\n START_ORDER,\n} from \"./services.js\";\n\nexport { pushLog, onLog, getAllLogs, getRecentLogs, type UnifiedLog, type LogLevel, type LogSource } from \"./logs.js\";\n\nexport { startRepl, getHelp } from \"./repl.js\";\nexport { t, getLocale, setLocale, initLocale, type Locale } from \"./i18n/index.js\";\nexport { runWizard } from \"./wizard.js\";\nexport { cmdModuleList, cmdModuleInstall, cmdModuleUninstall, cmdModuleVerify, cmdModuleInfo } from \"./module-commands.js\";\n"],
|
|
5
|
+
"mappings": "AAkBA,SAAS,MAAM,kBAAkB,sBAAsB,sBAAsB,oBAAoB,cAAc,wBAAwC;AAEvJ;AAAA,EACE;AAAA,EAMA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,SAAS,OAAO,YAAY,qBAAqE;AAE1G,SAAS,WAAW,eAAe;AACnC,SAAS,GAAG,WAAW,WAAW,kBAA+B;AACjE,SAAS,iBAAiB;AAC1B,SAAS,eAAe,kBAAkB,oBAAoB,iBAAiB,qBAAqB;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* llbot-launch.ts — 解析 LLBot 可执行文件与工作目录
|
|
3
|
+
*
|
|
4
|
+
* 历史向导曾把 llbot_path 写成「目录」;schema 语义是可执行文件。
|
|
5
|
+
* 此处兼容二者,避免 spawn 目录导致 ENOENT。
|
|
6
|
+
*/
|
|
7
|
+
export declare function defaultLlbotDir(platform?: NodeJS.Platform): string;
|
|
8
|
+
export declare function llbotExeName(platform?: NodeJS.Platform): string;
|
|
9
|
+
export type LlbotLaunch = {
|
|
10
|
+
/** spawn 用的可执行文件绝对/规范化路径 */
|
|
11
|
+
exe: string;
|
|
12
|
+
/** 工作目录 */
|
|
13
|
+
cwd: string;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* @param pathRaw qq_config.llbot_path(可为 exe 或目录)
|
|
17
|
+
* @param cwdRaw qq_config.llbot_cwd(目录;可空)
|
|
18
|
+
*/
|
|
19
|
+
export declare function resolveLlbotLaunch(pathRaw: unknown, cwdRaw: unknown): LlbotLaunch;
|
|
20
|
+
//# sourceMappingURL=llbot-launch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llbot-launch.d.ts","sourceRoot":"","sources":["../src/llbot-launch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,wBAAgB,eAAe,CAAC,QAAQ,kBAAmB,GAAG,MAAM,CAEnE;AAED,wBAAgB,YAAY,CAAC,QAAQ,kBAAmB,GAAG,MAAM,CAEhE;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,4BAA4B;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW;IACX,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,WAAW,CA+BjF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import os from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
function defaultLlbotDir(platform = process.platform) {
|
|
5
|
+
return platform === "win32" ? "D:\\LLBot-CLI-win-x64" : path.join(os.homedir(), "LLBot");
|
|
6
|
+
}
|
|
7
|
+
function llbotExeName(platform = process.platform) {
|
|
8
|
+
return platform === "win32" ? "llbot.exe" : "llbot";
|
|
9
|
+
}
|
|
10
|
+
function resolveLlbotLaunch(pathRaw, cwdRaw) {
|
|
11
|
+
const exeName = llbotExeName();
|
|
12
|
+
const raw = String(pathRaw ?? "").trim();
|
|
13
|
+
const cwdHint = String(cwdRaw ?? "").trim();
|
|
14
|
+
const looksLikeDir = (p) => {
|
|
15
|
+
try {
|
|
16
|
+
if (fs.existsSync(p) && fs.statSync(p).isDirectory()) return true;
|
|
17
|
+
} catch {
|
|
18
|
+
}
|
|
19
|
+
const base = path.basename(p);
|
|
20
|
+
if (/^llbot(\.exe)?$/i.test(base)) return false;
|
|
21
|
+
return !path.extname(p);
|
|
22
|
+
};
|
|
23
|
+
if (!raw) {
|
|
24
|
+
const cwd2 = cwdHint || defaultLlbotDir();
|
|
25
|
+
return { exe: path.join(cwd2, exeName), cwd: cwd2 };
|
|
26
|
+
}
|
|
27
|
+
if (looksLikeDir(raw)) {
|
|
28
|
+
const cwd2 = raw;
|
|
29
|
+
return { exe: path.join(cwd2, exeName), cwd: cwdHint || cwd2 };
|
|
30
|
+
}
|
|
31
|
+
const exe = raw;
|
|
32
|
+
const cwd = cwdHint || path.dirname(exe) || defaultLlbotDir();
|
|
33
|
+
return { exe, cwd };
|
|
34
|
+
}
|
|
35
|
+
export {
|
|
36
|
+
defaultLlbotDir,
|
|
37
|
+
llbotExeName,
|
|
38
|
+
resolveLlbotLaunch
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=llbot-launch.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/llbot-launch.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * llbot-launch.ts \u2014 \u89E3\u6790 LLBot \u53EF\u6267\u884C\u6587\u4EF6\u4E0E\u5DE5\u4F5C\u76EE\u5F55\n *\n * \u5386\u53F2\u5411\u5BFC\u66FE\u628A llbot_path \u5199\u6210\u300C\u76EE\u5F55\u300D\uFF1Bschema \u8BED\u4E49\u662F\u53EF\u6267\u884C\u6587\u4EF6\u3002\n * \u6B64\u5904\u517C\u5BB9\u4E8C\u8005\uFF0C\u907F\u514D spawn \u76EE\u5F55\u5BFC\u81F4 ENOENT\u3002\n */\n\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nexport function defaultLlbotDir(platform = process.platform): string {\n return platform === \"win32\" ? \"D:\\\\LLBot-CLI-win-x64\" : path.join(os.homedir(), \"LLBot\");\n}\n\nexport function llbotExeName(platform = process.platform): string {\n return platform === \"win32\" ? \"llbot.exe\" : \"llbot\";\n}\n\nexport type LlbotLaunch = {\n /** spawn \u7528\u7684\u53EF\u6267\u884C\u6587\u4EF6\u7EDD\u5BF9/\u89C4\u8303\u5316\u8DEF\u5F84 */\n exe: string;\n /** \u5DE5\u4F5C\u76EE\u5F55 */\n cwd: string;\n};\n\n/**\n * @param pathRaw qq_config.llbot_path\uFF08\u53EF\u4E3A exe \u6216\u76EE\u5F55\uFF09\n * @param cwdRaw qq_config.llbot_cwd\uFF08\u76EE\u5F55\uFF1B\u53EF\u7A7A\uFF09\n */\nexport function resolveLlbotLaunch(pathRaw: unknown, cwdRaw: unknown): LlbotLaunch {\n const exeName = llbotExeName();\n const raw = String(pathRaw ?? \"\").trim();\n const cwdHint = String(cwdRaw ?? \"\").trim();\n\n const looksLikeDir = (p: string): boolean => {\n try {\n if (fs.existsSync(p) && fs.statSync(p).isDirectory()) return true;\n } catch {\n /* ignore */\n }\n // \u5C1A\u4E0D\u5B58\u5728\u65F6\uFF1A\u65E0\u6269\u5C55\u540D\u4E14\u4E0D\u4EE5 exe \u540D\u7ED3\u5C3E \u2192 \u6309\u76EE\u5F55\u5904\u7406\n const base = path.basename(p);\n if (/^llbot(\\.exe)?$/i.test(base)) return false;\n return !path.extname(p);\n };\n\n if (!raw) {\n const cwd = cwdHint || defaultLlbotDir();\n return { exe: path.join(cwd, exeName), cwd };\n }\n\n if (looksLikeDir(raw)) {\n const cwd = raw;\n return { exe: path.join(cwd, exeName), cwd: cwdHint || cwd };\n }\n\n // \u660E\u786E\u662F\u53EF\u6267\u884C\u6587\u4EF6\u8DEF\u5F84\n const exe = raw;\n const cwd = cwdHint || path.dirname(exe) || defaultLlbotDir();\n return { exe, cwd };\n}\n"],
|
|
5
|
+
"mappings": "AAOA,OAAO,QAAQ;AACf,OAAO,QAAQ;AACf,OAAO,UAAU;AAEV,SAAS,gBAAgB,WAAW,QAAQ,UAAkB;AACnE,SAAO,aAAa,UAAU,0BAA0B,KAAK,KAAK,GAAG,QAAQ,GAAG,OAAO;AACzF;AAEO,SAAS,aAAa,WAAW,QAAQ,UAAkB;AAChE,SAAO,aAAa,UAAU,cAAc;AAC9C;AAaO,SAAS,mBAAmB,SAAkB,QAA8B;AACjF,QAAM,UAAU,aAAa;AAC7B,QAAM,MAAM,OAAO,WAAW,EAAE,EAAE,KAAK;AACvC,QAAM,UAAU,OAAO,UAAU,EAAE,EAAE,KAAK;AAE1C,QAAM,eAAe,CAAC,MAAuB;AAC3C,QAAI;AACF,UAAI,GAAG,WAAW,CAAC,KAAK,GAAG,SAAS,CAAC,EAAE,YAAY,EAAG,QAAO;AAAA,IAC/D,QAAQ;AAAA,IAER;AAEA,UAAM,OAAO,KAAK,SAAS,CAAC;AAC5B,QAAI,mBAAmB,KAAK,IAAI,EAAG,QAAO;AAC1C,WAAO,CAAC,KAAK,QAAQ,CAAC;AAAA,EACxB;AAEA,MAAI,CAAC,KAAK;AACR,UAAMA,OAAM,WAAW,gBAAgB;AACvC,WAAO,EAAE,KAAK,KAAK,KAAKA,MAAK,OAAO,GAAG,KAAAA,KAAI;AAAA,EAC7C;AAEA,MAAI,aAAa,GAAG,GAAG;AACrB,UAAMA,OAAM;AACZ,WAAO,EAAE,KAAK,KAAK,KAAKA,MAAK,OAAO,GAAG,KAAK,WAAWA,KAAI;AAAA,EAC7D;AAGA,QAAM,MAAM;AACZ,QAAM,MAAM,WAAW,KAAK,QAAQ,GAAG,KAAK,gBAAgB;AAC5D,SAAO,EAAE,KAAK,IAAI;AACpB;",
|
|
6
|
+
"names": ["cwd"]
|
|
7
|
+
}
|
package/dist/main.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import process from "node:process";
|
|
3
3
|
import { mapPacksSubAlias, parseGlobalArgv } from "./argv-parse.js";
|
|
4
|
-
import { cmdRemote } from "./cmd-remote.js";
|
|
5
4
|
import { cmdRestart, cmdStart, cmdStartAll, cmdStatus, cmdStop, cmdStopAll, cmdUpdate } from "./commands.js";
|
|
6
5
|
import { gateModuleSub, gatePacksSub, gateTopLevel } from "./cli-gate.js";
|
|
7
6
|
import { resolveModuleTopShorthand } from "./command-surface.js";
|
|
@@ -9,9 +8,9 @@ import { cmdDebug } from "./debug-command.js";
|
|
|
9
8
|
import { initLocale, stripLangArgs, t } from "./i18n/index.js";
|
|
10
9
|
import { cmdLocale } from "./locale-command.js";
|
|
11
10
|
import { dispatchModuleCommand, isModuleCommand, scanAndWarnUnknown } from "./module-commands.js";
|
|
12
|
-
import { startRemoteAgent } from "./remote-agent.js";
|
|
13
11
|
import { getHelp, playWelcomeAnimation, startRepl } from "./repl.js";
|
|
14
12
|
import { ROOT } from "./runtime.js";
|
|
13
|
+
import { setArgvDaemonize } from "./services.js";
|
|
15
14
|
import { c } from "./theme.js";
|
|
16
15
|
import { dispatchPacksCommand, isPacksCommand } from "./world-packs.js";
|
|
17
16
|
const MODE = "argv";
|
|
@@ -29,6 +28,9 @@ async function main() {
|
|
|
29
28
|
const stripped = stripLangArgs(process.argv.slice(2));
|
|
30
29
|
initLocale({ root: ROOT, flag: stripped.lang });
|
|
31
30
|
const { packsMode, args } = parseGlobalArgv(stripped.args);
|
|
31
|
+
if (args.length > 0 || packsMode) {
|
|
32
|
+
setArgvDaemonize(true);
|
|
33
|
+
}
|
|
32
34
|
if (args.length === 0 && !packsMode) {
|
|
33
35
|
const { isRuntimeInitialized } = await import("./runtime.js");
|
|
34
36
|
if (!isRuntimeInitialized()) {
|
|
@@ -39,7 +41,6 @@ async function main() {
|
|
|
39
41
|
}
|
|
40
42
|
const warn = await scanAndWarnUnknown();
|
|
41
43
|
if (warn) console.log(warn);
|
|
42
|
-
startRemoteAgent();
|
|
43
44
|
await startRepl();
|
|
44
45
|
return;
|
|
45
46
|
}
|
|
@@ -131,9 +132,6 @@ async function main() {
|
|
|
131
132
|
await runWizard();
|
|
132
133
|
break;
|
|
133
134
|
}
|
|
134
|
-
case "remote":
|
|
135
|
-
console.log(await cmdRemote(rest, { daemonAfterEnroll: true }));
|
|
136
|
-
break;
|
|
137
135
|
default:
|
|
138
136
|
if (isModuleCommand(cmd)) {
|
|
139
137
|
const [sub, ...subRest] = rest;
|
package/dist/main.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/main.ts"],
|
|
4
|
-
"sourcesContent": ["#!/usr/bin/env node\nimport process from \"node:process\";\nimport { mapPacksSubAlias, parseGlobalArgv } from \"./argv-parse.js\";\nimport {
|
|
5
|
-
"mappings": ";AACA,OAAO,aAAa;AACpB,SAAS,kBAAkB,uBAAuB;AAClD,SAAS,
|
|
4
|
+
"sourcesContent": ["#!/usr/bin/env node\nimport process from \"node:process\";\nimport { mapPacksSubAlias, parseGlobalArgv } from \"./argv-parse.js\";\nimport { cmdRestart, cmdStart, cmdStartAll, cmdStatus, cmdStop, cmdStopAll, cmdUpdate } from \"./commands.js\";\nimport { gateModuleSub, gatePacksSub, gateTopLevel } from \"./cli-gate.js\";\nimport { resolveModuleTopShorthand } from \"./command-surface.js\";\nimport { cmdDebug } from \"./debug-command.js\";\nimport { initLocale, stripLangArgs, t } from \"./i18n/index.js\";\nimport { cmdLocale } from \"./locale-command.js\";\nimport { dispatchModuleCommand, isModuleCommand, scanAndWarnUnknown } from \"./module-commands.js\";\nimport { getHelp, playWelcomeAnimation, startRepl } from \"./repl.js\";\nimport { ROOT } from \"./runtime.js\";\nimport { setArgvDaemonize } from \"./services.js\";\nimport { c } from \"./theme.js\";\nimport { dispatchPacksCommand, isPacksCommand } from \"./world-packs.js\";\n\nconst MODE = \"argv\" as const;\n\nasync function printVersion(): Promise<void> {\n await playWelcomeAnimation();\n}\n\nfunction printUsage(): void {\n console.log(`${getHelp(\"argv\")}`);\n}\n\nfunction deny(msg: string): never {\n console.log(msg);\n process.exit(1);\n}\n\nasync function main(): Promise<void> {\n const stripped = stripLangArgs(process.argv.slice(2));\n initLocale({ root: ROOT, flag: stripped.lang });\n const { packsMode, args } = parseGlobalArgv(stripped.args);\n\n if (args.length > 0 || packsMode) {\n setArgvDaemonize(true);\n }\n\n if (args.length === 0 && !packsMode) {\n const { isRuntimeInitialized } = await import(\"./runtime.js\");\n if (!isRuntimeInitialized()) {\n const { runWizard } = await import(\"./wizard.js\");\n await runWizard();\n const { refreshServices } = await import(\"./services.js\");\n refreshServices();\n }\n const warn = await scanAndWarnUnknown();\n if (warn) console.log(warn);\n await startRepl();\n return;\n }\n\n if (packsMode) {\n const [subRaw, ...subRest] = args;\n const sub = mapPacksSubAlias(subRaw);\n const g = gatePacksSub(sub, MODE);\n if (g) deny(g);\n console.log(await dispatchPacksCommand(sub, subRest));\n process.exit(0);\n }\n\n const [cmd, ...rest] = args;\n\n if (cmd && ![\"--help\", \"-h\", \"--version\", \"-v\"].includes(cmd)) {\n const topGate = gateTopLevel(cmd, MODE);\n if (topGate) deny(topGate);\n }\n\n const moduleSub = resolveModuleTopShorthand(cmd);\n if (moduleSub) {\n const g = gateModuleSub(moduleSub, MODE);\n if (g) deny(g);\n console.log(await dispatchModuleCommand(moduleSub, rest));\n process.exit(0);\n }\n\n switch (cmd) {\n case \"--help\":\n case \"-h\":\n case \"help\":\n printUsage();\n break;\n case \"--version\":\n case \"-v\":\n await printVersion();\n break;\n case \"locale\":\n case \"lang\":\n console.log(cmdLocale(rest));\n break;\n case \"debug\":\n console.log(await cmdDebug(rest));\n break;\n case \"status\":\n console.log(await cmdStatus());\n break;\n case \"logs\":\n case \"log\":\n /* channel=repl\uFF1A\u6B63\u5E38\u7531 gateTopLevel \u62E6\u622A\uFF1B\u6B64\u5904\u515C\u5E95 */\n deny(gateTopLevel(\"logs\", MODE) ?? c.yellow(t(\"cli.replOnly\", { cmd: \"logs\" })));\n break;\n case \"start\":\n if (rest[0] === \"-all\" || rest[0] === \"all\" || rest[0] === \"--all\") {\n console.log(await cmdStartAll());\n } else if (rest[0]) {\n console.log(await cmdStart(rest[0]));\n } else {\n console.log(c.yellow(t(\"svc.start.usage\")));\n }\n break;\n case \"stop\":\n if (rest[0] === \"-all\" || rest[0] === \"all\" || rest[0] === \"--all\") {\n console.log(await cmdStopAll());\n } else if (rest[0]) {\n console.log(await cmdStop(rest[0]));\n } else {\n console.log(c.yellow(t(\"svc.stop.usage\")));\n }\n break;\n case \"restart\":\n if (rest[0] === \"-all\" || rest[0] === \"all\" || rest[0] === \"--all\") {\n await cmdStopAll();\n console.log(await cmdStartAll());\n } else if (rest[0]) {\n console.log(await cmdRestart(rest[0]));\n } else {\n console.log(c.yellow(t(\"svc.restart.usage\")));\n }\n break;\n case \"update\":\n console.log(await cmdUpdate(rest));\n break;\n case \"packs\":\n case \"addon\": {\n const [sub, ...subRest] = rest;\n const g = gatePacksSub(sub, MODE);\n if (g) deny(g);\n console.log(await dispatchPacksCommand(sub, subRest));\n break;\n }\n case \"init\": {\n const { runWizard } = await import(\"./wizard.js\");\n await runWizard();\n break;\n }\n default:\n if (isModuleCommand(cmd)) {\n const [sub, ...subRest] = rest;\n const g = gateModuleSub(sub, MODE);\n if (g) deny(g);\n console.log(await dispatchModuleCommand(sub, subRest));\n break;\n }\n if (isPacksCommand(cmd)) {\n const [sub, ...subRest] = rest;\n const g = gatePacksSub(sub, MODE);\n if (g) deny(g);\n console.log(await dispatchPacksCommand(sub, subRest));\n break;\n }\n console.log(c.red(t(\"common.unknownCommand\", { cmd: cmd ?? \"\" })));\n printUsage();\n process.exit(1);\n }\n process.exit(0);\n}\n\nmain().catch((err) => {\n console.error(c.red(err?.message ? t(\"common.error\", { message: err.message }) : t(\"common.fatal\")));\n process.exit(1);\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* node-service-probe.ts — 按入口脚本探测 / 终止「外部」node 服务(db / qq)
|
|
3
|
+
*
|
|
4
|
+
* CLI 未托管(无 ChildProcess 句柄)时,stop/restart 仍须能杀干净,避免双实例。
|
|
5
|
+
*/
|
|
6
|
+
/** 可按脚本路径杀的 node 服务 */
|
|
7
|
+
export type NodeServiceName = "db" | "qq";
|
|
8
|
+
/** cmdline 匹配用稳定子串(跨 monorepo / npm 布局) */
|
|
9
|
+
export declare const SCRIPT_HINT: Record<NodeServiceName, string>;
|
|
10
|
+
/**
|
|
11
|
+
* 查找匹配入口脚本的存活 PID(不含当前 CLI 进程)。
|
|
12
|
+
*/
|
|
13
|
+
export declare function findNodeServicePids(service: NodeServiceName): Promise<number[]>;
|
|
14
|
+
/**
|
|
15
|
+
* 终止匹配脚本的全部外部实例;返回尝试杀掉的 PID 列表。
|
|
16
|
+
*/
|
|
17
|
+
export declare function killNodeServiceByScript(service: NodeServiceName): Promise<number[]>;
|
|
18
|
+
//# sourceMappingURL=node-service-probe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-service-probe.d.ts","sourceRoot":"","sources":["../src/node-service-probe.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,uBAAuB;AACvB,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,CAAC;AAE1C,2CAA2C;AAC3C,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAGvD,CAAC;AAuDF;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAOrF;AAUD;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAqBzF"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
|
+
import process from "node:process";
|
|
4
|
+
import { isProcessAlive } from "@sfmc-bds/bds-tools/process-probe";
|
|
5
|
+
const execFileAsync = promisify(execFile);
|
|
6
|
+
const SCRIPT_HINT = {
|
|
7
|
+
db: "db-server/dist/index.js",
|
|
8
|
+
qq: "qq-bridge/dist/index.js"
|
|
9
|
+
};
|
|
10
|
+
function normalizePath(p) {
|
|
11
|
+
return p.replace(/\\/g, "/").toLowerCase();
|
|
12
|
+
}
|
|
13
|
+
function matchesService(cmdline, service) {
|
|
14
|
+
const n = normalizePath(cmdline);
|
|
15
|
+
const hint = SCRIPT_HINT[service];
|
|
16
|
+
if (!n.includes(hint)) return false;
|
|
17
|
+
return /\bnode(?:\.exe)?\b/i.test(cmdline) || n.includes("node");
|
|
18
|
+
}
|
|
19
|
+
async function listCandidatePids(service) {
|
|
20
|
+
const hint = SCRIPT_HINT[service];
|
|
21
|
+
if (process.platform === "win32") {
|
|
22
|
+
try {
|
|
23
|
+
const { stdout } = await execFileAsync(
|
|
24
|
+
"wmic",
|
|
25
|
+
["process", "where", "name='node.exe'", "get", "ProcessId,CommandLine", "/FORMAT:CSV"],
|
|
26
|
+
{ windowsHide: true, timeout: 8e3 }
|
|
27
|
+
);
|
|
28
|
+
const pids = [];
|
|
29
|
+
for (const line of String(stdout).split(/\r?\n/)) {
|
|
30
|
+
if (!line.trim() || /^Node,/i.test(line.trim())) continue;
|
|
31
|
+
if (!matchesService(line, service)) continue;
|
|
32
|
+
const parts = line.split(",");
|
|
33
|
+
const pid = parseInt(parts[parts.length - 1]?.trim() || "", 10);
|
|
34
|
+
if (!pid || pid === process.pid) continue;
|
|
35
|
+
pids.push(pid);
|
|
36
|
+
}
|
|
37
|
+
return [...new Set(pids)];
|
|
38
|
+
} catch {
|
|
39
|
+
return [];
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
const { stdout } = await execFileAsync("pgrep", ["-af", hint], { timeout: 5e3 });
|
|
44
|
+
const pids = [];
|
|
45
|
+
for (const line of String(stdout).split(/\n/)) {
|
|
46
|
+
if (!matchesService(line, service)) continue;
|
|
47
|
+
const pid = parseInt(line.trim().split(/\s+/)[0] || "", 10);
|
|
48
|
+
if (!pid || pid === process.pid) continue;
|
|
49
|
+
pids.push(pid);
|
|
50
|
+
}
|
|
51
|
+
return [...new Set(pids)];
|
|
52
|
+
} catch {
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async function findNodeServicePids(service) {
|
|
57
|
+
const pids = await listCandidatePids(service);
|
|
58
|
+
const alive = [];
|
|
59
|
+
for (const pid of pids) {
|
|
60
|
+
if (await isProcessAlive(pid)) alive.push(pid);
|
|
61
|
+
}
|
|
62
|
+
return [...new Set(alive)];
|
|
63
|
+
}
|
|
64
|
+
function killPid(pid, sig) {
|
|
65
|
+
try {
|
|
66
|
+
process.kill(pid, sig);
|
|
67
|
+
} catch {
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
async function killNodeServiceByScript(service) {
|
|
71
|
+
const pids = await findNodeServicePids(service);
|
|
72
|
+
for (const pid of pids) {
|
|
73
|
+
killPid(pid, "SIGTERM");
|
|
74
|
+
}
|
|
75
|
+
const deadline = Date.now() + 8e3;
|
|
76
|
+
while (Date.now() < deadline) {
|
|
77
|
+
let any = false;
|
|
78
|
+
for (const pid of pids) {
|
|
79
|
+
if (await isProcessAlive(pid)) {
|
|
80
|
+
any = true;
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (!any) return pids;
|
|
85
|
+
await new Promise((r) => setTimeout(r, 200));
|
|
86
|
+
}
|
|
87
|
+
for (const pid of pids) {
|
|
88
|
+
if (await isProcessAlive(pid)) killPid(pid, "SIGKILL");
|
|
89
|
+
}
|
|
90
|
+
return pids;
|
|
91
|
+
}
|
|
92
|
+
export {
|
|
93
|
+
SCRIPT_HINT,
|
|
94
|
+
findNodeServicePids,
|
|
95
|
+
killNodeServiceByScript
|
|
96
|
+
};
|
|
97
|
+
//# sourceMappingURL=node-service-probe.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/node-service-probe.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * node-service-probe.ts \u2014 \u6309\u5165\u53E3\u811A\u672C\u63A2\u6D4B / \u7EC8\u6B62\u300C\u5916\u90E8\u300Dnode \u670D\u52A1\uFF08db / qq\uFF09\n *\n * CLI \u672A\u6258\u7BA1\uFF08\u65E0 ChildProcess \u53E5\u67C4\uFF09\u65F6\uFF0Cstop/restart \u4ECD\u987B\u80FD\u6740\u5E72\u51C0\uFF0C\u907F\u514D\u53CC\u5B9E\u4F8B\u3002\n */\n\nimport { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport process from \"node:process\";\nimport { isProcessAlive } from \"@sfmc-bds/bds-tools/process-probe\";\n\nconst execFileAsync = promisify(execFile);\n\n/** \u53EF\u6309\u811A\u672C\u8DEF\u5F84\u6740\u7684 node \u670D\u52A1 */\nexport type NodeServiceName = \"db\" | \"qq\";\n\n/** cmdline \u5339\u914D\u7528\u7A33\u5B9A\u5B50\u4E32\uFF08\u8DE8 monorepo / npm \u5E03\u5C40\uFF09 */\nexport const SCRIPT_HINT: Record<NodeServiceName, string> = {\n db: \"db-server/dist/index.js\",\n qq: \"qq-bridge/dist/index.js\",\n};\n\nfunction normalizePath(p: string): string {\n return p.replace(/\\\\/g, \"/\").toLowerCase();\n}\n\nfunction matchesService(cmdline: string, service: NodeServiceName): boolean {\n const n = normalizePath(cmdline);\n const hint = SCRIPT_HINT[service];\n if (!n.includes(hint)) return false;\n // \u907F\u514D\u8BEF\u4F24\uFF1A\u5FC5\u987B\u662F node \u8DD1\u8BE5\u5165\u53E3\n return /\\bnode(?:\\.exe)?\\b/i.test(cmdline) || n.includes(\"node\");\n}\n\nasync function listCandidatePids(service: NodeServiceName): Promise<number[]> {\n const hint = SCRIPT_HINT[service];\n\n if (process.platform === \"win32\") {\n try {\n const { stdout } = await execFileAsync(\n \"wmic\",\n [\"process\", \"where\", \"name='node.exe'\", \"get\", \"ProcessId,CommandLine\", \"/FORMAT:CSV\"],\n { windowsHide: true, timeout: 8000 }\n );\n const pids: number[] = [];\n for (const line of String(stdout).split(/\\r?\\n/)) {\n if (!line.trim() || /^Node,/i.test(line.trim())) continue;\n if (!matchesService(line, service)) continue;\n const parts = line.split(\",\");\n const pid = parseInt(parts[parts.length - 1]?.trim() || \"\", 10);\n if (!pid || pid === process.pid) continue;\n pids.push(pid);\n }\n return [...new Set(pids)];\n } catch {\n return [];\n }\n }\n\n try {\n const { stdout } = await execFileAsync(\"pgrep\", [\"-af\", hint], { timeout: 5000 });\n const pids: number[] = [];\n for (const line of String(stdout).split(/\\n/)) {\n if (!matchesService(line, service)) continue;\n const pid = parseInt(line.trim().split(/\\s+/)[0] || \"\", 10);\n if (!pid || pid === process.pid) continue;\n pids.push(pid);\n }\n return [...new Set(pids)];\n } catch {\n // pgrep \u65E0\u5339\u914D\u65F6\u9000\u51FA\u7801 1\n return [];\n }\n}\n\n/**\n * \u67E5\u627E\u5339\u914D\u5165\u53E3\u811A\u672C\u7684\u5B58\u6D3B PID\uFF08\u4E0D\u542B\u5F53\u524D CLI \u8FDB\u7A0B\uFF09\u3002\n */\nexport async function findNodeServicePids(service: NodeServiceName): Promise<number[]> {\n const pids = await listCandidatePids(service);\n const alive: number[] = [];\n for (const pid of pids) {\n if (await isProcessAlive(pid)) alive.push(pid);\n }\n return [...new Set(alive)];\n}\n\nfunction killPid(pid: number, sig: NodeJS.Signals): void {\n try {\n process.kill(pid, sig);\n } catch {\n /* ignore */\n }\n}\n\n/**\n * \u7EC8\u6B62\u5339\u914D\u811A\u672C\u7684\u5168\u90E8\u5916\u90E8\u5B9E\u4F8B\uFF1B\u8FD4\u56DE\u5C1D\u8BD5\u6740\u6389\u7684 PID \u5217\u8868\u3002\n */\nexport async function killNodeServiceByScript(service: NodeServiceName): Promise<number[]> {\n const pids = await findNodeServicePids(service);\n for (const pid of pids) {\n killPid(pid, \"SIGTERM\");\n }\n const deadline = Date.now() + 8000;\n while (Date.now() < deadline) {\n let any = false;\n for (const pid of pids) {\n if (await isProcessAlive(pid)) {\n any = true;\n break;\n }\n }\n if (!any) return pids;\n await new Promise((r) => setTimeout(r, 200));\n }\n for (const pid of pids) {\n if (await isProcessAlive(pid)) killPid(pid, \"SIGKILL\");\n }\n return pids;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|