@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.
Files changed (59) hide show
  1. package/dist/command-surface.d.ts.map +1 -1
  2. package/dist/command-surface.js +0 -2
  3. package/dist/command-surface.js.map +2 -2
  4. package/dist/commands.d.ts.map +1 -1
  5. package/dist/commands.js +123 -10
  6. package/dist/commands.js.map +2 -2
  7. package/dist/help-text.d.ts.map +1 -1
  8. package/dist/help-text.js +1 -5
  9. package/dist/help-text.js.map +2 -2
  10. package/dist/i18n/locales/en.d.ts +24 -13
  11. package/dist/i18n/locales/en.d.ts.map +1 -1
  12. package/dist/i18n/locales/en.js +24 -14
  13. package/dist/i18n/locales/en.js.map +2 -2
  14. package/dist/i18n/locales/zh-CN.d.ts.map +1 -1
  15. package/dist/i18n/locales/zh-CN.js +24 -14
  16. package/dist/i18n/locales/zh-CN.js.map +2 -2
  17. package/dist/index.d.ts +1 -1
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +2 -0
  20. package/dist/index.js.map +2 -2
  21. package/dist/llbot-launch.d.ts +20 -0
  22. package/dist/llbot-launch.d.ts.map +1 -0
  23. package/dist/llbot-launch.js +40 -0
  24. package/dist/llbot-launch.js.map +7 -0
  25. package/dist/main.js +4 -6
  26. package/dist/main.js.map +2 -2
  27. package/dist/node-service-probe.d.ts +18 -0
  28. package/dist/node-service-probe.d.ts.map +1 -0
  29. package/dist/node-service-probe.js +97 -0
  30. package/dist/node-service-probe.js.map +7 -0
  31. package/dist/pack-lifecycle.d.ts.map +1 -1
  32. package/dist/pack-lifecycle.js +7 -1
  33. package/dist/pack-lifecycle.js.map +2 -2
  34. package/dist/repl-windows/service-window.d.ts +1 -1
  35. package/dist/repl-windows/service-window.d.ts.map +1 -1
  36. package/dist/repl-windows/service-window.js +8 -1
  37. package/dist/repl-windows/service-window.js.map +2 -2
  38. package/dist/repl.d.ts.map +1 -1
  39. package/dist/repl.js +0 -10
  40. package/dist/repl.js.map +2 -2
  41. package/dist/send-target.d.ts.map +1 -1
  42. package/dist/send-target.js +6 -2
  43. package/dist/send-target.js.map +2 -2
  44. package/dist/services.d.ts +32 -4
  45. package/dist/services.d.ts.map +1 -1
  46. package/dist/services.js +101 -12
  47. package/dist/services.js.map +2 -2
  48. package/dist/wizard.d.ts.map +1 -1
  49. package/dist/wizard.js +65 -7
  50. package/dist/wizard.js.map +2 -2
  51. package/package.json +5 -6
  52. package/dist/cmd-remote.d.ts +0 -13
  53. package/dist/cmd-remote.d.ts.map +0 -1
  54. package/dist/cmd-remote.js +0 -38
  55. package/dist/cmd-remote.js.map +0 -7
  56. package/dist/remote-agent.d.ts +0 -18
  57. package/dist/remote-agent.d.ts.map +0 -1
  58. package/dist/remote-agent.js +0 -198
  59. package/dist/remote-agent.js.map +0 -7
@@ -1 +1 @@
1
- {"version":3,"file":"command-surface.d.ts","sourceRoot":"","sources":["../src/command-surface.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command-surface.d.ts","sourceRoot":"","sources":["../src/command-surface.ts"],"names":[],"mappings":"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"}
@@ -94,7 +94,6 @@ const TOP_DESC = {
94
94
  init: "help.init",
95
95
  update: "help.update",
96
96
  locale: "help.locale",
97
- remote: "help.remote.status",
98
97
  debug: "help.debug.status",
99
98
  install: "help.module.install",
100
99
  uninstall: "help.module.uninstall",
@@ -230,7 +229,6 @@ const COMMAND_SPECS = [
230
229
  { id: "init", name: "init", channel: "both", needsTty: true },
231
230
  { id: "update", name: "update", channel: "both" },
232
231
  { id: "locale", name: "locale", channel: "both" },
233
- { id: "remote", name: "remote", channel: "both" },
234
232
  { id: "debug", name: "debug", channel: "both", accent: "dev" },
235
233
  /** 顶层扁平短命令 → module.*(少写一层 module) */
236
234
  { id: "install", name: "install", channel: "both" },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/command-surface.ts"],
4
- "sourcesContent": ["/**\n * command-surface.ts \u2014 sfmc CLI \u547D\u4EE4\u901A\u9053\u6CE8\u518C\u8868\uFF08\u5355\u4E00\u6743\u5A01\uFF09\n *\n * channel:\n * - both: argv\uFF08`sfmc <cmd>`\uFF09\u4E0E REPL \u5747\u53EF\u7528\uFF08\u9ED8\u8BA4\uFF09\n * - repl: \u4EC5 REPL\uFF1Bargv \u62D2\u7EDD\uFF08\u5982 send / quit\uFF09\n *\n * accent: \"dev\" \u4EC5\u5F71\u54CD\u5E2E\u52A9/\u8865\u5168\u84DD\u8272\u6837\u5F0F\uFF0C\u4E0D\u53C2\u4E0E canRun\uFF08OCP/DRY\uFF09\u3002\n * \u4E1A\u52A1\u5B9E\u73B0\u4E0D\u5728\u672C\u6587\u4EF6 / \u9762\u677F\u5185\uFF1A\u5206\u53D1\u5230 commands\u3001module-commands\u3001world-packs \u7B49\u3002\n */\nimport { stdin } from \"node:process\";\n\nexport type CommandChannel = \"repl\" | \"both\";\nexport type CommandMode = \"argv\" | \"repl\";\nexport type CommandAccent = \"dev\";\n\nexport type CommandSpec = {\n /** \u7A33\u5B9A id\uFF0C\u5982 \"module.install\" / \"send\" / \"debug\" */\n id: string;\n /** \u9876\u5C42\u547D\u4EE4\u540D\uFF08module \u5B50\u547D\u4EE4\u7528 \"module\"\uFF1B\u9876\u5C42\u522B\u540D\u89C1 TOP_LEVEL_ALIASES\uFF09 */\n name: string;\n /** \u5B50\u547D\u4EE4\uFF08\u4EC5 module/packs \u7B49\uFF09 */\n sub?: string;\n channel: CommandChannel;\n needsTty?: boolean;\n /** \u5E2E\u52A9\u67D3\u8272\uFF1B\u4E0D\u53C2\u4E0E canRun */\n accent?: CommandAccent;\n /** \u5B50\u547D\u4EE4\u540C\u4E49\u522B\u540D\uFF08\u5982 uninstall \u2192 remove\uFF09\uFF0C\u4E0D\u662F\u9876\u5C42\u522B\u540D */\n aliases?: string[];\n};\n\nexport type CanRunContext = {\n mode: CommandMode;\n isTty: boolean;\n};\n\nexport type CanRunFailReason = \"replOnly\" | \"needTty\";\n\nexport type CanRunResult = { ok: true } | { ok: false; reason: CanRunFailReason };\n\n/** \u9876\u5C42\u547D\u4EE4\u522B\u540D \u2192 \u89C4\u8303 name\uFF08DRY\uFF1A\u52FF\u5728\u5404 sub spec \u91CD\u590D\u5199 mod/addon\uFF09 */\nexport const TOP_LEVEL_ALIASES: Readonly<Record<string, string>> = {\n mod: \"module\",\n addon: \"packs\",\n log: \"logs\",\n lang: \"locale\",\n h: \"help\",\n \"?\": \"help\",\n exit: \"quit\",\n q: \"quit\",\n i: \"install\",\n remove: \"uninstall\",\n};\n\n/**\n * \u9876\u5C42\u6241\u5E73\u77ED\u547D\u4EE4 \u2192 module \u5B50\u547D\u4EE4\uFF08argv / REPL \u5171\u7528\uFF0C\u907F\u514D\u5728 switch \u91CC\u6563\u843D\u6620\u5C04\uFF09\n * \u4E0D\u542B enable/disable\uFF08\u4E0E packs \u51B2\u7A81\uFF0C\u4ECD\u8D70 /module \u6216 /packs\uFF09\n *\n * \u4E0E packs \u5B50\u547D\u4EE4\u5BF9\u9F50\uFF1A`packs i` \u2192 `packs install`\uFF08mapPacksSubAlias\uFF09\uFF1B\n * module \u9876\u5C42\u540C\u6837\u652F\u6301 `i` \u2192 `install`\uFF08\u89C1 TOP_LEVEL_ALIASES \u4E0E\u672C\u8868\uFF09\u3002\n */\nexport const MODULE_TOP_SHORTHAND: Readonly<Record<string, string>> = {\n i: \"install\",\n install: \"install\",\n uninstall: \"uninstall\",\n search: \"search\",\n verify: \"verify\",\n};\n\nexport function resolveModuleTopShorthand(cmd: string | undefined): string | undefined {\n if (!cmd) return undefined;\n const name = resolveTopLevelName(cmd);\n if (!name) return undefined;\n return MODULE_TOP_SHORTHAND[name];\n}\n\nexport function resolveTopLevelName(cmd: string | undefined): string | undefined {\n if (!cmd) return undefined;\n return TOP_LEVEL_ALIASES[cmd] ?? cmd;\n}\n\nfunction channelAllows(channel: CommandChannel, mode: CommandMode): boolean {\n if (channel === \"both\") return true;\n return mode === \"repl\";\n}\n\n/** \u5224\u5B9A\u5F53\u524D\u6A21\u5F0F\u4E0B\u80FD\u5426\u6267\u884C\u8BE5\u547D\u4EE4\uFF08accent \u4E0D\u53C2\u4E0E\uFF09\u3002 */\nexport function canRunCommand(spec: CommandSpec, ctx: CanRunContext): CanRunResult {\n if (!channelAllows(spec.channel, ctx.mode)) {\n return { ok: false, reason: \"replOnly\" };\n }\n if (spec.needsTty && !ctx.isTty) {\n return { ok: false, reason: \"needTty\" };\n }\n return { ok: true };\n}\n\n/** \u5F53\u524D\u6A21\u5F0F\u53EF\u89C1\u547D\u4EE4\uFF08help / Tab\uFF09\u3002 */\nexport function listVisibleCommands(mode: CommandMode): CommandSpec[] {\n return COMMAND_SPECS.filter((s) => channelAllows(s.channel, mode));\n}\n\n/** \u9876\u5C42\u547D\u4EE4\u540D\uFF08\u542B\u522B\u540D\uFF09\uFF0C\u4F9B REPL COMMANDS / \u8865\u5168\u3002 */\nexport function listVisibleTopLevelNames(mode: CommandMode): string[] {\n const canonical = new Set<string>();\n for (const s of listVisibleCommands(mode)) {\n canonical.add(s.name);\n }\n const out = new Set<string>(canonical);\n for (const [alias, name] of Object.entries(TOP_LEVEL_ALIASES)) {\n if (canonical.has(name)) out.add(alias);\n }\n return [...out];\n}\n\n/** \u67E5\u627E\u9876\u5C42\u547D\u4EE4\uFF08\u65E0 sub\uFF09\u7684\u4EFB\u610F\u4E00\u6761\u540C\u540D spec\uFF08\u7528\u4E8E channel \u95E8\u7981\uFF09\u3002 */\nexport function findTopLevelSpec(cmd: string | undefined): CommandSpec | undefined {\n const name = resolveTopLevelName(cmd);\n if (!name) return undefined;\n /* \u4F18\u5148\u65E0 sub \u7684\u9876\u5C42\u6761\u76EE\uFF1B\u5426\u5219\u53D6\u8BE5 name \u4E0B\u4EFB\u610F\u53EF\u89C1 spec \u4EE3\u8868\u901A\u9053\uFF08module/packs\uFF09 */\n const top = COMMAND_SPECS.find((s) => !s.sub && s.name === name);\n if (top) return top;\n return COMMAND_SPECS.find((s) => s.name === name);\n}\n\n/** \u67E5\u627E module \u5B50\u547D\u4EE4 spec\u3002 */\nexport function findModuleSubSpec(sub: string | undefined): CommandSpec | undefined {\n if (!sub) return undefined;\n return COMMAND_SPECS.find(\n (s) => s.name === \"module\" && (s.sub === sub || (s.aliases ?? []).includes(sub))\n );\n}\n\n/** \u67E5\u627E packs \u5B50\u547D\u4EE4 spec\u3002 */\nexport function findPacksSubSpec(sub: string | undefined): CommandSpec | undefined {\n if (!sub) return undefined;\n return COMMAND_SPECS.find(\n (s) => s.name === \"packs\" && (s.sub === sub || (s.aliases ?? []).includes(sub))\n );\n}\n\n/** \u5F53\u524D mode \u4E0B\u53EF\u89C1\u7684 module \u5B50\u547D\u4EE4\u540D\uFF08\u89C4\u8303\u540D\uFF0C\u4E0D\u542B remove \u522B\u540D\uFF09\u3002 */\nexport function listVisibleModuleSubs(mode: CommandMode): string[] {\n return listVisibleCommands(mode)\n .filter((s) => s.name === \"module\" && s.sub)\n .map((s) => s.sub!);\n}\n\n/** \u5F53\u524D mode \u4E0B\u53EF\u89C1\u7684 packs \u5B50\u547D\u4EE4\u540D\u3002 */\nexport function listVisiblePacksSubs(mode: CommandMode): string[] {\n return listVisibleCommands(mode)\n .filter((s) => s.name === \"packs\" && s.sub)\n .map((s) => s.sub!);\n}\n\n/** REPL \u5FEB\u901F\u8865\u5168\uFF1A\u5C42\u7EA7\u8282\u70B9\uFF08\u4E3B\u9762\u677F \u2192 \u53F3\u4FA7\u5B50\u9762\u677F\uFF09 */\nexport type PaletteNode = {\n /** \u9762\u677F\u5185\u663E\u793A\u7684\u6807\u7B7E */\n label: string;\n /** \u8FFD\u52A0\u5230\u547D\u4EE4\u884C\u7684 token\uFF08\u6839\u8282\u70B9\u542B\u6216\u4E0D\u542B\u524D\u5BFC\u903B\u8F91\u7531\u7EC4\u88C5\u8D1F\u8D23\uFF09 */\n token: string;\n /** i18n \u63CF\u8FF0\u952E */\n descKey?: string;\n accent?: CommandAccent;\n /** \u56FA\u5B9A\u4E0B\u4E00\u53C2\u9009\u9879\uFF1B\u56DE\u8F66\u540E\u5728\u53F3\u4FA7\u5C55\u5F00 */\n children?: PaletteNode[];\n /** \u65E0 children \u65F6\u4ECD\u9700\u81EA\u7531\u8F93\u5165\uFF08\u56DE\u8F66\u540E\u586B\u5165\u7A7A\u683C\u7EE7\u7EED\u6253\u5B57\uFF09 */\n freeArgs?: boolean;\n};\n\nconst NO_ARG_TOP = new Set([\"status\", \"help\", \"version\", \"quit\", \"init\", \"logs\"]);\n\nconst TOP_DESC: Record<string, string> = {\n status: \"help.status\",\n logs: \"help.logs\",\n start: \"help.start\",\n stop: \"help.stop\",\n restart: \"help.restart\",\n send: \"help.send\",\n help: \"help.help\",\n version: \"help.version\",\n quit: \"help.quit\",\n init: \"help.init\",\n update: \"help.update\",\n locale: \"help.locale\",\n remote: \"help.remote.status\",\n debug: \"help.debug.status\",\n install: \"help.module.install\",\n uninstall: \"help.module.uninstall\",\n search: \"help.module.search\",\n verify: \"help.module.verify\",\n};\n\nconst MODULE_DESC: Record<string, string> = {\n list: \"help.module.list\",\n info: \"help.module.info\",\n build: \"help.module.build\",\n reload: \"help.module.reload\",\n search: \"help.module.search\",\n install: \"help.module.install\",\n uninstall: \"help.module.uninstall\",\n verify: \"help.module.verify\",\n enable: \"help.module.toggle\",\n disable: \"help.module.toggle\",\n};\n\nconst PACKS_DESC: Record<string, string> = {\n list: \"help.packs.list\",\n search: \"help.packs.search\",\n enable: \"help.packs.enable\",\n disable: \"help.packs.disable\",\n doctor: \"help.packs.doctor\",\n path: \"help.packs.path\",\n install: \"help.addon\",\n scan: \"help.addon\",\n uninstall: \"help.addon\",\n bind: \"help.addon\",\n unbind: \"help.addon\",\n sources: \"help.addon\",\n check: \"help.addon\",\n update: \"help.addon\",\n bump: \"help.addon\",\n};\n\nfunction serviceArgNodes(): PaletteNode[] {\n return [\n { label: \"-all\", token: \"-all\" },\n ...([\"bds\", \"db\", \"qq\", \"llbot\"] as const).map((n) => ({ label: n, token: n })),\n ];\n}\n\nfunction moduleChildNodes(mode: CommandMode): PaletteNode[] {\n const noArg = new Set([\"list\", \"build\"]);\n return listVisibleModuleSubs(mode).map((sub) => {\n const spec = findModuleSubSpec(sub);\n const node: PaletteNode = {\n label: sub,\n token: sub,\n descKey: MODULE_DESC[sub] ?? \"help.module.list\",\n freeArgs: !noArg.has(sub),\n };\n if (spec?.accent) node.accent = spec.accent;\n return node;\n });\n}\n\nfunction packsChildNodes(mode: CommandMode): PaletteNode[] {\n const noArg = new Set([\"list\", \"doctor\", \"path\", \"sources\"]);\n return listVisiblePacksSubs(mode).map((sub) => ({\n label: sub,\n token: sub,\n descKey: PACKS_DESC[sub] ?? \"help.addon\",\n freeArgs: !noArg.has(sub),\n }));\n}\n\n/** \u5C42\u7EA7\u547D\u4EE4\u6811\uFF08REPL \u9762\u677F\u4E3B\u5217\uFF09 */\nexport function listPaletteRoots(mode: CommandMode = \"repl\"): PaletteNode[] {\n const specs = listVisibleCommands(mode);\n const out: PaletteNode[] = [];\n const seen = new Set<string>();\n /** \u9762\u677F\u4E0D\u5C55\u793A\u9876\u5C42\u77ED\u547D\u4EE4\uFF0C\u7EDF\u4E00\u8D70 /module <sub>\uFF08argv \u77ED\u547D\u4EE4\u4ECD\u53EF\u7528\uFF09 */\n const skipTopShorthand = new Set(Object.keys(MODULE_TOP_SHORTHAND));\n\n for (const s of specs) {\n if (s.sub) continue;\n if (s.name === \"module\" || s.name === \"packs\") continue;\n if (skipTopShorthand.has(s.name)) continue;\n if (seen.has(s.name)) continue;\n seen.add(s.name);\n\n const node: PaletteNode = {\n label: `/${s.name}`,\n token: s.name,\n descKey: TOP_DESC[s.name] ?? \"help.help\",\n };\n if (s.accent) node.accent = s.accent;\n\n if (s.name === \"start\" || s.name === \"stop\" || s.name === \"restart\") {\n node.children = serviceArgNodes();\n } else if (s.name === \"send\") {\n node.children = ([\"bds\", \"db\", \"qq\", \"llbot\"] as const).map((n) => ({\n label: n,\n token: n,\n freeArgs: true,\n }));\n } else if (!NO_ARG_TOP.has(s.name)) {\n node.freeArgs = true;\n }\n\n out.push(node);\n }\n\n const moduleSubs = moduleChildNodes(mode);\n if (moduleSubs.length > 0) {\n out.push({\n label: \"/module\",\n token: \"module\",\n descKey: \"help.module.list\",\n children: moduleSubs,\n });\n }\n\n const packsSubs = packsChildNodes(mode);\n if (packsSubs.length > 0) {\n out.push({\n label: \"/packs\",\n token: \"packs\",\n descKey: \"help.addon\",\n children: packsSubs,\n });\n }\n\n return out;\n}\n\nexport function isDevAccent(spec: CommandSpec | undefined): boolean {\n return spec?.accent === \"dev\";\n}\n\n/** sub \u662F\u5426\u4E3A\u5F00\u53D1\u8005\u6837\u5F0F\u547D\u4EE4\uFF08\u84DD\u6807\uFF09\u3002 */\nexport function isDevAccentModuleSub(sub: string | undefined): boolean {\n return isDevAccent(findModuleSubSpec(sub));\n}\n\n/** stdin TTY \u63A2\u6D4B\uFF08\u4F9B main/repl \u5171\u7528\uFF09\u3002 */\nexport function isCliTty(): boolean {\n return Boolean(stdin.isTTY);\n}\n\n/**\n * \u547D\u4EE4\u6CE8\u518C\u8868 \u2014\u2014 \u65B0\u589E\u547D\u4EE4\u53EA\u52A0\u6B64\u5904\uFF08OCP\uFF09\u3002\n * channel:\n * - both: argv + REPL\uFF08\u9ED8\u8BA4\uFF1B\u9762\u677F\u53EA\u8C03\u5EA6\u65E2\u6709 dispatcher\uFF09\n * - repl: \u4EC5 REPL\uFF08\u5982 send / quit\uFF09\n */\nexport const COMMAND_SPECS: readonly CommandSpec[] = [\n /* \u2500\u2500\u2500 both\uFF1A\u670D\u52A1 / \u6A21\u5757 / \u8D44\u6E90\u5305 / \u914D\u7F6E \u2500\u2500\u2500 */\n { id: \"status\", name: \"status\", channel: \"both\" },\n { id: \"start\", name: \"start\", channel: \"both\" },\n { id: \"stop\", name: \"stop\", channel: \"both\" },\n { id: \"restart\", name: \"restart\", channel: \"both\" },\n { id: \"logs\", name: \"logs\", channel: \"repl\" },\n { id: \"help\", name: \"help\", channel: \"both\" },\n { id: \"version\", name: \"version\", channel: \"both\" },\n { id: \"init\", name: \"init\", channel: \"both\", needsTty: true },\n { id: \"update\", name: \"update\", channel: \"both\" },\n { id: \"locale\", name: \"locale\", channel: \"both\" },\n { id: \"remote\", name: \"remote\", channel: \"both\" },\n { id: \"debug\", name: \"debug\", channel: \"both\", accent: \"dev\" },\n\n /** \u9876\u5C42\u6241\u5E73\u77ED\u547D\u4EE4 \u2192 module.*\uFF08\u5C11\u5199\u4E00\u5C42 module\uFF09 */\n { id: \"install\", name: \"install\", channel: \"both\" },\n { id: \"uninstall\", name: \"uninstall\", channel: \"both\", aliases: [\"remove\"] },\n { id: \"search\", name: \"search\", channel: \"both\" },\n { id: \"verify\", name: \"verify\", channel: \"both\" },\n\n { id: \"module.list\", name: \"module\", sub: \"list\", channel: \"both\" },\n { id: \"module.info\", name: \"module\", sub: \"info\", channel: \"both\" },\n { id: \"module.build\", name: \"module\", sub: \"build\", channel: \"both\", accent: \"dev\" },\n { id: \"module.reload\", name: \"module\", sub: \"reload\", channel: \"both\", accent: \"dev\" },\n { id: \"module.install\", name: \"module\", sub: \"install\", channel: \"both\" },\n {\n id: \"module.uninstall\",\n name: \"module\",\n sub: \"uninstall\",\n channel: \"both\",\n aliases: [\"remove\"],\n },\n { id: \"module.search\", name: \"module\", sub: \"search\", channel: \"both\" },\n { id: \"module.verify\", name: \"module\", sub: \"verify\", channel: \"both\" },\n { id: \"module.enable\", name: \"module\", sub: \"enable\", channel: \"both\" },\n { id: \"module.disable\", name: \"module\", sub: \"disable\", channel: \"both\" },\n\n { id: \"packs.list\", name: \"packs\", sub: \"list\", channel: \"both\" },\n { id: \"packs.search\", name: \"packs\", sub: \"search\", channel: \"both\" },\n { id: \"packs.enable\", name: \"packs\", sub: \"enable\", channel: \"both\" },\n { id: \"packs.disable\", name: \"packs\", sub: \"disable\", channel: \"both\" },\n { id: \"packs.doctor\", name: \"packs\", sub: \"doctor\", channel: \"both\" },\n { id: \"packs.path\", name: \"packs\", sub: \"path\", channel: \"both\" },\n { id: \"packs.install\", name: \"packs\", sub: \"install\", channel: \"both\" },\n { id: \"packs.scan\", name: \"packs\", sub: \"scan\", channel: \"both\" },\n { id: \"packs.uninstall\", name: \"packs\", sub: \"uninstall\", channel: \"both\" },\n { id: \"packs.bind\", name: \"packs\", sub: \"bind\", channel: \"both\" },\n { id: \"packs.unbind\", name: \"packs\", sub: \"unbind\", channel: \"both\" },\n { id: \"packs.sources\", name: \"packs\", sub: \"sources\", channel: \"both\" },\n { id: \"packs.check\", name: \"packs\", sub: \"check\", channel: \"both\" },\n { id: \"packs.update\", name: \"packs\", sub: \"update\", channel: \"both\" },\n { id: \"packs.bump\", name: \"packs\", sub: \"bump\", channel: \"both\" },\n\n /* \u2500\u2500\u2500 repl-only \u2500\u2500\u2500 */\n { id: \"send\", name: \"send\", channel: \"repl\" },\n { id: \"quit\", name: \"quit\", channel: \"repl\" },\n];\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * command-surface.ts \u2014 sfmc CLI \u547D\u4EE4\u901A\u9053\u6CE8\u518C\u8868\uFF08\u5355\u4E00\u6743\u5A01\uFF09\n *\n * channel:\n * - both: argv\uFF08`sfmc <cmd>`\uFF09\u4E0E REPL \u5747\u53EF\u7528\uFF08\u9ED8\u8BA4\uFF09\n * - repl: \u4EC5 REPL\uFF1Bargv \u62D2\u7EDD\uFF08\u5982 send / quit\uFF09\n *\n * accent: \"dev\" \u4EC5\u5F71\u54CD\u5E2E\u52A9/\u8865\u5168\u84DD\u8272\u6837\u5F0F\uFF0C\u4E0D\u53C2\u4E0E canRun\uFF08OCP/DRY\uFF09\u3002\n * \u4E1A\u52A1\u5B9E\u73B0\u4E0D\u5728\u672C\u6587\u4EF6 / \u9762\u677F\u5185\uFF1A\u5206\u53D1\u5230 commands\u3001module-commands\u3001world-packs \u7B49\u3002\n */\nimport { stdin } from \"node:process\";\n\nexport type CommandChannel = \"repl\" | \"both\";\nexport type CommandMode = \"argv\" | \"repl\";\nexport type CommandAccent = \"dev\";\n\nexport type CommandSpec = {\n /** \u7A33\u5B9A id\uFF0C\u5982 \"module.install\" / \"send\" / \"debug\" */\n id: string;\n /** \u9876\u5C42\u547D\u4EE4\u540D\uFF08module \u5B50\u547D\u4EE4\u7528 \"module\"\uFF1B\u9876\u5C42\u522B\u540D\u89C1 TOP_LEVEL_ALIASES\uFF09 */\n name: string;\n /** \u5B50\u547D\u4EE4\uFF08\u4EC5 module/packs \u7B49\uFF09 */\n sub?: string;\n channel: CommandChannel;\n needsTty?: boolean;\n /** \u5E2E\u52A9\u67D3\u8272\uFF1B\u4E0D\u53C2\u4E0E canRun */\n accent?: CommandAccent;\n /** \u5B50\u547D\u4EE4\u540C\u4E49\u522B\u540D\uFF08\u5982 uninstall \u2192 remove\uFF09\uFF0C\u4E0D\u662F\u9876\u5C42\u522B\u540D */\n aliases?: string[];\n};\n\nexport type CanRunContext = {\n mode: CommandMode;\n isTty: boolean;\n};\n\nexport type CanRunFailReason = \"replOnly\" | \"needTty\";\n\nexport type CanRunResult = { ok: true } | { ok: false; reason: CanRunFailReason };\n\n/** \u9876\u5C42\u547D\u4EE4\u522B\u540D \u2192 \u89C4\u8303 name\uFF08DRY\uFF1A\u52FF\u5728\u5404 sub spec \u91CD\u590D\u5199 mod/addon\uFF09 */\nexport const TOP_LEVEL_ALIASES: Readonly<Record<string, string>> = {\n mod: \"module\",\n addon: \"packs\",\n log: \"logs\",\n lang: \"locale\",\n h: \"help\",\n \"?\": \"help\",\n exit: \"quit\",\n q: \"quit\",\n i: \"install\",\n remove: \"uninstall\",\n};\n\n/**\n * \u9876\u5C42\u6241\u5E73\u77ED\u547D\u4EE4 \u2192 module \u5B50\u547D\u4EE4\uFF08argv / REPL \u5171\u7528\uFF0C\u907F\u514D\u5728 switch \u91CC\u6563\u843D\u6620\u5C04\uFF09\n * \u4E0D\u542B enable/disable\uFF08\u4E0E packs \u51B2\u7A81\uFF0C\u4ECD\u8D70 /module \u6216 /packs\uFF09\n *\n * \u4E0E packs \u5B50\u547D\u4EE4\u5BF9\u9F50\uFF1A`packs i` \u2192 `packs install`\uFF08mapPacksSubAlias\uFF09\uFF1B\n * module \u9876\u5C42\u540C\u6837\u652F\u6301 `i` \u2192 `install`\uFF08\u89C1 TOP_LEVEL_ALIASES \u4E0E\u672C\u8868\uFF09\u3002\n */\nexport const MODULE_TOP_SHORTHAND: Readonly<Record<string, string>> = {\n i: \"install\",\n install: \"install\",\n uninstall: \"uninstall\",\n search: \"search\",\n verify: \"verify\",\n};\n\nexport function resolveModuleTopShorthand(cmd: string | undefined): string | undefined {\n if (!cmd) return undefined;\n const name = resolveTopLevelName(cmd);\n if (!name) return undefined;\n return MODULE_TOP_SHORTHAND[name];\n}\n\nexport function resolveTopLevelName(cmd: string | undefined): string | undefined {\n if (!cmd) return undefined;\n return TOP_LEVEL_ALIASES[cmd] ?? cmd;\n}\n\nfunction channelAllows(channel: CommandChannel, mode: CommandMode): boolean {\n if (channel === \"both\") return true;\n return mode === \"repl\";\n}\n\n/** \u5224\u5B9A\u5F53\u524D\u6A21\u5F0F\u4E0B\u80FD\u5426\u6267\u884C\u8BE5\u547D\u4EE4\uFF08accent \u4E0D\u53C2\u4E0E\uFF09\u3002 */\nexport function canRunCommand(spec: CommandSpec, ctx: CanRunContext): CanRunResult {\n if (!channelAllows(spec.channel, ctx.mode)) {\n return { ok: false, reason: \"replOnly\" };\n }\n if (spec.needsTty && !ctx.isTty) {\n return { ok: false, reason: \"needTty\" };\n }\n return { ok: true };\n}\n\n/** \u5F53\u524D\u6A21\u5F0F\u53EF\u89C1\u547D\u4EE4\uFF08help / Tab\uFF09\u3002 */\nexport function listVisibleCommands(mode: CommandMode): CommandSpec[] {\n return COMMAND_SPECS.filter((s) => channelAllows(s.channel, mode));\n}\n\n/** \u9876\u5C42\u547D\u4EE4\u540D\uFF08\u542B\u522B\u540D\uFF09\uFF0C\u4F9B REPL COMMANDS / \u8865\u5168\u3002 */\nexport function listVisibleTopLevelNames(mode: CommandMode): string[] {\n const canonical = new Set<string>();\n for (const s of listVisibleCommands(mode)) {\n canonical.add(s.name);\n }\n const out = new Set<string>(canonical);\n for (const [alias, name] of Object.entries(TOP_LEVEL_ALIASES)) {\n if (canonical.has(name)) out.add(alias);\n }\n return [...out];\n}\n\n/** \u67E5\u627E\u9876\u5C42\u547D\u4EE4\uFF08\u65E0 sub\uFF09\u7684\u4EFB\u610F\u4E00\u6761\u540C\u540D spec\uFF08\u7528\u4E8E channel \u95E8\u7981\uFF09\u3002 */\nexport function findTopLevelSpec(cmd: string | undefined): CommandSpec | undefined {\n const name = resolveTopLevelName(cmd);\n if (!name) return undefined;\n /* \u4F18\u5148\u65E0 sub \u7684\u9876\u5C42\u6761\u76EE\uFF1B\u5426\u5219\u53D6\u8BE5 name \u4E0B\u4EFB\u610F\u53EF\u89C1 spec \u4EE3\u8868\u901A\u9053\uFF08module/packs\uFF09 */\n const top = COMMAND_SPECS.find((s) => !s.sub && s.name === name);\n if (top) return top;\n return COMMAND_SPECS.find((s) => s.name === name);\n}\n\n/** \u67E5\u627E module \u5B50\u547D\u4EE4 spec\u3002 */\nexport function findModuleSubSpec(sub: string | undefined): CommandSpec | undefined {\n if (!sub) return undefined;\n return COMMAND_SPECS.find(\n (s) => s.name === \"module\" && (s.sub === sub || (s.aliases ?? []).includes(sub))\n );\n}\n\n/** \u67E5\u627E packs \u5B50\u547D\u4EE4 spec\u3002 */\nexport function findPacksSubSpec(sub: string | undefined): CommandSpec | undefined {\n if (!sub) return undefined;\n return COMMAND_SPECS.find(\n (s) => s.name === \"packs\" && (s.sub === sub || (s.aliases ?? []).includes(sub))\n );\n}\n\n/** \u5F53\u524D mode \u4E0B\u53EF\u89C1\u7684 module \u5B50\u547D\u4EE4\u540D\uFF08\u89C4\u8303\u540D\uFF0C\u4E0D\u542B remove \u522B\u540D\uFF09\u3002 */\nexport function listVisibleModuleSubs(mode: CommandMode): string[] {\n return listVisibleCommands(mode)\n .filter((s) => s.name === \"module\" && s.sub)\n .map((s) => s.sub!);\n}\n\n/** \u5F53\u524D mode \u4E0B\u53EF\u89C1\u7684 packs \u5B50\u547D\u4EE4\u540D\u3002 */\nexport function listVisiblePacksSubs(mode: CommandMode): string[] {\n return listVisibleCommands(mode)\n .filter((s) => s.name === \"packs\" && s.sub)\n .map((s) => s.sub!);\n}\n\n/** REPL \u5FEB\u901F\u8865\u5168\uFF1A\u5C42\u7EA7\u8282\u70B9\uFF08\u4E3B\u9762\u677F \u2192 \u53F3\u4FA7\u5B50\u9762\u677F\uFF09 */\nexport type PaletteNode = {\n /** \u9762\u677F\u5185\u663E\u793A\u7684\u6807\u7B7E */\n label: string;\n /** \u8FFD\u52A0\u5230\u547D\u4EE4\u884C\u7684 token\uFF08\u6839\u8282\u70B9\u542B\u6216\u4E0D\u542B\u524D\u5BFC\u903B\u8F91\u7531\u7EC4\u88C5\u8D1F\u8D23\uFF09 */\n token: string;\n /** i18n \u63CF\u8FF0\u952E */\n descKey?: string;\n accent?: CommandAccent;\n /** \u56FA\u5B9A\u4E0B\u4E00\u53C2\u9009\u9879\uFF1B\u56DE\u8F66\u540E\u5728\u53F3\u4FA7\u5C55\u5F00 */\n children?: PaletteNode[];\n /** \u65E0 children \u65F6\u4ECD\u9700\u81EA\u7531\u8F93\u5165\uFF08\u56DE\u8F66\u540E\u586B\u5165\u7A7A\u683C\u7EE7\u7EED\u6253\u5B57\uFF09 */\n freeArgs?: boolean;\n};\n\nconst NO_ARG_TOP = new Set([\"status\", \"help\", \"version\", \"quit\", \"init\", \"logs\"]);\n\nconst TOP_DESC: Record<string, string> = {\n status: \"help.status\",\n logs: \"help.logs\",\n start: \"help.start\",\n stop: \"help.stop\",\n restart: \"help.restart\",\n send: \"help.send\",\n help: \"help.help\",\n version: \"help.version\",\n quit: \"help.quit\",\n init: \"help.init\",\n update: \"help.update\",\n locale: \"help.locale\",\n debug: \"help.debug.status\",\n install: \"help.module.install\",\n uninstall: \"help.module.uninstall\",\n search: \"help.module.search\",\n verify: \"help.module.verify\",\n};\n\nconst MODULE_DESC: Record<string, string> = {\n list: \"help.module.list\",\n info: \"help.module.info\",\n build: \"help.module.build\",\n reload: \"help.module.reload\",\n search: \"help.module.search\",\n install: \"help.module.install\",\n uninstall: \"help.module.uninstall\",\n verify: \"help.module.verify\",\n enable: \"help.module.toggle\",\n disable: \"help.module.toggle\",\n};\n\nconst PACKS_DESC: Record<string, string> = {\n list: \"help.packs.list\",\n search: \"help.packs.search\",\n enable: \"help.packs.enable\",\n disable: \"help.packs.disable\",\n doctor: \"help.packs.doctor\",\n path: \"help.packs.path\",\n install: \"help.addon\",\n scan: \"help.addon\",\n uninstall: \"help.addon\",\n bind: \"help.addon\",\n unbind: \"help.addon\",\n sources: \"help.addon\",\n check: \"help.addon\",\n update: \"help.addon\",\n bump: \"help.addon\",\n};\n\nfunction serviceArgNodes(): PaletteNode[] {\n return [\n { label: \"-all\", token: \"-all\" },\n ...([\"bds\", \"db\", \"qq\", \"llbot\"] as const).map((n) => ({ label: n, token: n })),\n ];\n}\n\nfunction moduleChildNodes(mode: CommandMode): PaletteNode[] {\n const noArg = new Set([\"list\", \"build\"]);\n return listVisibleModuleSubs(mode).map((sub) => {\n const spec = findModuleSubSpec(sub);\n const node: PaletteNode = {\n label: sub,\n token: sub,\n descKey: MODULE_DESC[sub] ?? \"help.module.list\",\n freeArgs: !noArg.has(sub),\n };\n if (spec?.accent) node.accent = spec.accent;\n return node;\n });\n}\n\nfunction packsChildNodes(mode: CommandMode): PaletteNode[] {\n const noArg = new Set([\"list\", \"doctor\", \"path\", \"sources\"]);\n return listVisiblePacksSubs(mode).map((sub) => ({\n label: sub,\n token: sub,\n descKey: PACKS_DESC[sub] ?? \"help.addon\",\n freeArgs: !noArg.has(sub),\n }));\n}\n\n/** \u5C42\u7EA7\u547D\u4EE4\u6811\uFF08REPL \u9762\u677F\u4E3B\u5217\uFF09 */\nexport function listPaletteRoots(mode: CommandMode = \"repl\"): PaletteNode[] {\n const specs = listVisibleCommands(mode);\n const out: PaletteNode[] = [];\n const seen = new Set<string>();\n /** \u9762\u677F\u4E0D\u5C55\u793A\u9876\u5C42\u77ED\u547D\u4EE4\uFF0C\u7EDF\u4E00\u8D70 /module <sub>\uFF08argv \u77ED\u547D\u4EE4\u4ECD\u53EF\u7528\uFF09 */\n const skipTopShorthand = new Set(Object.keys(MODULE_TOP_SHORTHAND));\n\n for (const s of specs) {\n if (s.sub) continue;\n if (s.name === \"module\" || s.name === \"packs\") continue;\n if (skipTopShorthand.has(s.name)) continue;\n if (seen.has(s.name)) continue;\n seen.add(s.name);\n\n const node: PaletteNode = {\n label: `/${s.name}`,\n token: s.name,\n descKey: TOP_DESC[s.name] ?? \"help.help\",\n };\n if (s.accent) node.accent = s.accent;\n\n if (s.name === \"start\" || s.name === \"stop\" || s.name === \"restart\") {\n node.children = serviceArgNodes();\n } else if (s.name === \"send\") {\n node.children = ([\"bds\", \"db\", \"qq\", \"llbot\"] as const).map((n) => ({\n label: n,\n token: n,\n freeArgs: true,\n }));\n } else if (!NO_ARG_TOP.has(s.name)) {\n node.freeArgs = true;\n }\n\n out.push(node);\n }\n\n const moduleSubs = moduleChildNodes(mode);\n if (moduleSubs.length > 0) {\n out.push({\n label: \"/module\",\n token: \"module\",\n descKey: \"help.module.list\",\n children: moduleSubs,\n });\n }\n\n const packsSubs = packsChildNodes(mode);\n if (packsSubs.length > 0) {\n out.push({\n label: \"/packs\",\n token: \"packs\",\n descKey: \"help.addon\",\n children: packsSubs,\n });\n }\n\n return out;\n}\n\nexport function isDevAccent(spec: CommandSpec | undefined): boolean {\n return spec?.accent === \"dev\";\n}\n\n/** sub \u662F\u5426\u4E3A\u5F00\u53D1\u8005\u6837\u5F0F\u547D\u4EE4\uFF08\u84DD\u6807\uFF09\u3002 */\nexport function isDevAccentModuleSub(sub: string | undefined): boolean {\n return isDevAccent(findModuleSubSpec(sub));\n}\n\n/** stdin TTY \u63A2\u6D4B\uFF08\u4F9B main/repl \u5171\u7528\uFF09\u3002 */\nexport function isCliTty(): boolean {\n return Boolean(stdin.isTTY);\n}\n\n/**\n * \u547D\u4EE4\u6CE8\u518C\u8868 \u2014\u2014 \u65B0\u589E\u547D\u4EE4\u53EA\u52A0\u6B64\u5904\uFF08OCP\uFF09\u3002\n * channel:\n * - both: argv + REPL\uFF08\u9ED8\u8BA4\uFF1B\u9762\u677F\u53EA\u8C03\u5EA6\u65E2\u6709 dispatcher\uFF09\n * - repl: \u4EC5 REPL\uFF08\u5982 send / quit\uFF09\n */\nexport const COMMAND_SPECS: readonly CommandSpec[] = [\n /* \u2500\u2500\u2500 both\uFF1A\u670D\u52A1 / \u6A21\u5757 / \u8D44\u6E90\u5305 / \u914D\u7F6E \u2500\u2500\u2500 */\n { id: \"status\", name: \"status\", channel: \"both\" },\n { id: \"start\", name: \"start\", channel: \"both\" },\n { id: \"stop\", name: \"stop\", channel: \"both\" },\n { id: \"restart\", name: \"restart\", channel: \"both\" },\n { id: \"logs\", name: \"logs\", channel: \"repl\" },\n { id: \"help\", name: \"help\", channel: \"both\" },\n { id: \"version\", name: \"version\", channel: \"both\" },\n { id: \"init\", name: \"init\", channel: \"both\", needsTty: true },\n { id: \"update\", name: \"update\", channel: \"both\" },\n { id: \"locale\", name: \"locale\", channel: \"both\" },\n { id: \"debug\", name: \"debug\", channel: \"both\", accent: \"dev\" },\n\n /** \u9876\u5C42\u6241\u5E73\u77ED\u547D\u4EE4 \u2192 module.*\uFF08\u5C11\u5199\u4E00\u5C42 module\uFF09 */\n { id: \"install\", name: \"install\", channel: \"both\" },\n { id: \"uninstall\", name: \"uninstall\", channel: \"both\", aliases: [\"remove\"] },\n { id: \"search\", name: \"search\", channel: \"both\" },\n { id: \"verify\", name: \"verify\", channel: \"both\" },\n\n { id: \"module.list\", name: \"module\", sub: \"list\", channel: \"both\" },\n { id: \"module.info\", name: \"module\", sub: \"info\", channel: \"both\" },\n { id: \"module.build\", name: \"module\", sub: \"build\", channel: \"both\", accent: \"dev\" },\n { id: \"module.reload\", name: \"module\", sub: \"reload\", channel: \"both\", accent: \"dev\" },\n { id: \"module.install\", name: \"module\", sub: \"install\", channel: \"both\" },\n {\n id: \"module.uninstall\",\n name: \"module\",\n sub: \"uninstall\",\n channel: \"both\",\n aliases: [\"remove\"],\n },\n { id: \"module.search\", name: \"module\", sub: \"search\", channel: \"both\" },\n { id: \"module.verify\", name: \"module\", sub: \"verify\", channel: \"both\" },\n { id: \"module.enable\", name: \"module\", sub: \"enable\", channel: \"both\" },\n { id: \"module.disable\", name: \"module\", sub: \"disable\", channel: \"both\" },\n\n { id: \"packs.list\", name: \"packs\", sub: \"list\", channel: \"both\" },\n { id: \"packs.search\", name: \"packs\", sub: \"search\", channel: \"both\" },\n { id: \"packs.enable\", name: \"packs\", sub: \"enable\", channel: \"both\" },\n { id: \"packs.disable\", name: \"packs\", sub: \"disable\", channel: \"both\" },\n { id: \"packs.doctor\", name: \"packs\", sub: \"doctor\", channel: \"both\" },\n { id: \"packs.path\", name: \"packs\", sub: \"path\", channel: \"both\" },\n { id: \"packs.install\", name: \"packs\", sub: \"install\", channel: \"both\" },\n { id: \"packs.scan\", name: \"packs\", sub: \"scan\", channel: \"both\" },\n { id: \"packs.uninstall\", name: \"packs\", sub: \"uninstall\", channel: \"both\" },\n { id: \"packs.bind\", name: \"packs\", sub: \"bind\", channel: \"both\" },\n { id: \"packs.unbind\", name: \"packs\", sub: \"unbind\", channel: \"both\" },\n { id: \"packs.sources\", name: \"packs\", sub: \"sources\", channel: \"both\" },\n { id: \"packs.check\", name: \"packs\", sub: \"check\", channel: \"both\" },\n { id: \"packs.update\", name: \"packs\", sub: \"update\", channel: \"both\" },\n { id: \"packs.bump\", name: \"packs\", sub: \"bump\", channel: \"both\" },\n\n /* \u2500\u2500\u2500 repl-only \u2500\u2500\u2500 */\n { id: \"send\", name: \"send\", channel: \"repl\" },\n { id: \"quit\", name: \"quit\", channel: \"repl\" },\n];\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAIA,OAAO,EAAuD,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AA4BtG,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAmBjD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,GAAG,MAAM,CA+C7F;AAKD,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA0B3D;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmC1D;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAwB3E;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAc7D;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAInD;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAIlD;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CA2EpE"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAWA,OAAO,EAAuD,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAwDtG,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAmBjD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,GAAG,MAAM,CA+C7F;AAkBD,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAyC3D;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA6D1D;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAwB3E;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAwB7D;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CA8BnD;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAIlD;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CA2EpE"}
package/dist/commands.js CHANGED
@@ -1,4 +1,10 @@
1
1
  import { killBedrockServerByImage, probeBdsStatus, clearBdsPidFile } from "@sfmc-bds/bds-tools/process-probe";
2
+ import {
3
+ DEFAULT_QQ_CONFIG,
4
+ loadEnsuredConfig,
5
+ qqRuntimeStatusPath
6
+ } from "@sfmc-bds/sdk/node/config";
7
+ import { findNodeServicePids, killNodeServiceByScript } from "./node-service-probe.js";
2
8
  import { pushLog as pushUnifiedLog } from "./logs.js";
3
9
  import { t } from "./i18n/index.js";
4
10
  import { spawnService } from "./runtime.js";
@@ -6,6 +12,7 @@ import { ROOT, SERVICE_NAMES, queryServicesRuntime, services } from "./services.
6
12
  import { c, DIVIDER, highlightLogLine, padRight } from "./theme.js";
7
13
  import { stripTaskbarOsc } from "@sfmc-bds/bds-tools/taskbar";
8
14
  import { didUpdateDeploy } from "@sfmc-bds/bds-tools/update-result";
15
+ import fs from "node:fs";
9
16
  function parseService(raw) {
10
17
  const s = raw.toLowerCase();
11
18
  if (SERVICE_NAMES.includes(s)) return s;
@@ -19,7 +26,32 @@ function statusLine(name, running, pid, uptime, ownership) {
19
26
  else if (running && ownership === "external") owner = c.yellow(t("svc.owner.external"));
20
27
  const pidStr = pid ? c.dim(String(pid)) : c.dim("\u2014");
21
28
  const upStr = uptime !== "\u2014" ? c.dim(uptime) : c.dim("\u2014");
22
- return ` ${dot} ${c.bold(padRight(name, 9))} ${padRight(state, 8)} ${padRight(owner, 6)} ${padRight(pidStr, 8)} ${upStr}`;
29
+ return ` ${dot} ${c.bold(padRight(name, 14))} ${padRight(state, 8)} ${padRight(owner, 6)} ${padRight(pidStr, 8)} ${upStr}`;
30
+ }
31
+ function qqBridgeStatusFooter() {
32
+ const qqCfg = loadEnsuredConfig(
33
+ ROOT,
34
+ "qq_config.json",
35
+ "qq_config",
36
+ { ...DEFAULT_QQ_CONFIG }
37
+ );
38
+ const backend = qqCfg.qq_backend === "llbot" ? "llbot" : "official";
39
+ const enabled = qqCfg.qq_enabled !== false;
40
+ if (backend === "llbot") {
41
+ const group = qqCfg.qq_group_id || "\u2014";
42
+ const pathHint = qqCfg.llbot_path ? String(qqCfg.llbot_path) : "\u2014";
43
+ return `
44
+ ${c.dim(t("svc.qq.footer.llbot", { enabled: enabled ? "on" : "off", group, path: pathHint }))}
45
+ `;
46
+ }
47
+ const appId = String(qqCfg.qq_app_id ?? "").trim();
48
+ const appIdHint = appId ? appId.length > 8 ? `${appId.slice(0, 4)}\u2026${appId.slice(-4)}` : appId : "\u2014";
49
+ const openid = String(qqCfg.qq_group_openid ?? "").trim() || "\u2014";
50
+ const sandbox = qqCfg.qq_sandbox ? "sandbox" : "prod";
51
+ const creds = appId && String(qqCfg.qq_app_secret ?? "").trim() ? "ok" : "missing";
52
+ return `
53
+ ${c.dim(t("svc.qq.footer.official", { enabled: enabled ? "on" : "off", appId: appIdHint, openid, sandbox, creds }))}
54
+ `;
23
55
  }
24
56
  async function cmdStatus() {
25
57
  const rows = await queryServicesRuntime();
@@ -29,10 +61,10 @@ async function cmdStatus() {
29
61
  const ownerH = t("svc.col.owner");
30
62
  const pidH = t("svc.col.pid");
31
63
  const upH = t("svc.col.uptime");
32
- const header = ` ${padRight(nameH, 11)}${padRight(statusH, 8)}${padRight(ownerH, 6)}${padRight(pidH, 8)}${upH}`;
64
+ const header = ` ${padRight(nameH, 16)}${padRight(statusH, 8)}${padRight(ownerH, 6)}${padRight(pidH, 8)}${upH}`;
33
65
  return `
34
66
  ${c.bold(t("svc.header"))}
35
- ` + c.dim(header) + "\n" + DIVIDER + "\n" + lines.join("\n") + "\n";
67
+ ` + c.dim(header) + "\n" + DIVIDER + "\n" + lines.join("\n") + qqBridgeStatusFooter();
36
68
  }
37
69
  function cmdLogs(args, onFollow) {
38
70
  let n = 20;
@@ -72,6 +104,16 @@ ${c.bold(t("svc.logs.header", { title: svcObj.title, count: lines.length }))}`;
72
104
  }
73
105
  const STARTING = /* @__PURE__ */ new Set();
74
106
  const STOPPING = /* @__PURE__ */ new Set();
107
+ function isNodeSvc(name) {
108
+ return name === "db" || name === "qq";
109
+ }
110
+ function clearQqRuntimeFile() {
111
+ try {
112
+ const file = qqRuntimeStatusPath(ROOT);
113
+ if (fs.existsSync(file)) fs.unlinkSync(file);
114
+ } catch {
115
+ }
116
+ }
75
117
  async function cmdStart(raw) {
76
118
  const svc = parseService(raw);
77
119
  if (!svc) return c.red(t("svc.unknown", { name: raw, list: SERVICE_NAMES.join(", ") }));
@@ -87,11 +129,25 @@ async function cmdStart(raw) {
87
129
  );
88
130
  }
89
131
  }
132
+ if (isNodeSvc(svc)) {
133
+ const external = await findNodeServicePids(svc);
134
+ if (external.length > 0) {
135
+ return c.yellow(
136
+ t("svc.alreadyRunning", { title: svcObj.title, pid: String(external.join(",")) })
137
+ );
138
+ }
139
+ }
90
140
  if (svcObj.running) return c.yellow(t("svc.alreadyRunning", { title: svcObj.title, pid: svcObj.pid }));
91
141
  if (STARTING.has(svc)) return c.dim(t("svc.alreadyStarting", { title: svcObj.title }));
92
142
  STARTING.add(svc);
93
143
  try {
94
- await svcObj.start();
144
+ const outcome = await svcObj.start();
145
+ if (outcome.status === "skipped") {
146
+ return c.yellow(t("svc.skipped", { title: svcObj.title, reason: outcome.reason }));
147
+ }
148
+ if (outcome.status === "already") {
149
+ return c.yellow(t("svc.alreadyRunning", { title: svcObj.title, pid: svcObj.pid }));
150
+ }
95
151
  return c.green(t("svc.started", { title: svcObj.title }));
96
152
  } catch (e) {
97
153
  return c.red(t("svc.startFailed", { title: svcObj.title, message: e.message }));
@@ -123,6 +179,29 @@ async function cmdStop(raw) {
123
179
  }
124
180
  }
125
181
  }
182
+ if (isNodeSvc(svc)) {
183
+ if (STOPPING.has(svc)) return c.dim(t("svc.alreadyStopping", { title: svcObj.title }));
184
+ STOPPING.add(svc);
185
+ try {
186
+ const managed = svcObj.running;
187
+ if (managed) {
188
+ await svcObj.stop();
189
+ }
190
+ const killed = await killNodeServiceByScript(svc);
191
+ if (svc === "qq") clearQqRuntimeFile();
192
+ if (!managed && killed.length === 0) {
193
+ return c.yellow(t("svc.alreadyStopped", { title: svcObj.title }));
194
+ }
195
+ if (!managed && killed.length > 0) {
196
+ return c.dim(t("svc.stoppedExternal", { title: svcObj.title }));
197
+ }
198
+ return c.dim(t("svc.stoppedMsg", { title: svcObj.title }));
199
+ } catch (e) {
200
+ return c.red(t("svc.stopFailed", { title: svcObj.title, message: e.message }));
201
+ } finally {
202
+ STOPPING.delete(svc);
203
+ }
204
+ }
126
205
  if (!svcObj.running) return c.yellow(t("svc.alreadyStopped", { title: svcObj.title }));
127
206
  if (STOPPING.has(svc)) return c.dim(t("svc.alreadyStopping", { title: svcObj.title }));
128
207
  STOPPING.add(svc);
@@ -162,13 +241,21 @@ async function cmdSend(raw, message) {
162
241
  async function cmdRestart(raw) {
163
242
  const svc = parseService(raw);
164
243
  if (!svc) return c.red(t("svc.unknown", { name: raw, list: SERVICE_NAMES.join(", ") }));
165
- if (svc === "bds") {
166
- await cmdStop("bds");
167
- return cmdStart("bds");
244
+ if (svc === "bds" || isNodeSvc(svc)) {
245
+ const stopMsg = await cmdStop(svc);
246
+ const startMsg = await cmdStart(svc);
247
+ if (/失败|failed/i.test(stopMsg) && !/已停止|stopped|already/i.test(stopMsg)) {
248
+ return stopMsg;
249
+ }
250
+ if (/失败|failed/i.test(startMsg)) return startMsg;
251
+ return c.green(t("svc.restarted", { title: services[svc].title }));
168
252
  }
169
253
  const svcObj = services[svc];
170
254
  try {
171
- await svcObj.restart();
255
+ const outcome = await svcObj.restart();
256
+ if (outcome.status === "skipped") {
257
+ return c.yellow(t("svc.skipped", { title: svcObj.title, reason: outcome.reason }));
258
+ }
172
259
  return c.green(t("svc.restarted", { title: svcObj.title }));
173
260
  } catch (e) {
174
261
  return c.red(t("svc.restartFailed", { title: svcObj.title, message: e.message }));
@@ -176,8 +263,34 @@ async function cmdRestart(raw) {
176
263
  }
177
264
  async function cmdStartAll() {
178
265
  const { startAll } = await import("./services.js");
179
- await startAll();
180
- return c.green(t("svc.allStarted"));
266
+ const result = await startAll();
267
+ const parts = [];
268
+ if (result.started.length > 0) {
269
+ parts.push(c.green(t("svc.startAll.started", { list: result.started.join(", ") })));
270
+ }
271
+ if (result.skipped.length > 0) {
272
+ parts.push(
273
+ c.dim(
274
+ t("svc.startAll.skipped", {
275
+ list: result.skipped.map((s) => `${s.name}(${s.reason})`).join("; ")
276
+ })
277
+ )
278
+ );
279
+ }
280
+ if (result.failed.length > 0) {
281
+ parts.push(
282
+ c.red(
283
+ t("svc.startAll.failed", {
284
+ list: result.failed.map((s) => `${s.name}: ${s.reason}`).join("; ")
285
+ })
286
+ )
287
+ );
288
+ }
289
+ if (parts.length === 0) return c.dim(t("svc.startAll.empty"));
290
+ if (result.failed.length === 0 && result.skipped.length === 0) {
291
+ return c.green(t("svc.allStarted"));
292
+ }
293
+ return parts.join("\n");
181
294
  }
182
295
  async function cmdStopAll() {
183
296
  const { stopAll } = await import("./services.js");
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/commands.ts"],
4
- "sourcesContent": ["import { killBedrockServerByImage, probeBdsStatus, clearBdsPidFile } from \"@sfmc-bds/bds-tools/process-probe\";\nimport { pushLog as pushUnifiedLog } from \"./logs.js\";\nimport { t } from \"./i18n/index.js\";\nimport { spawnService } from \"./runtime.js\";\nimport { ROOT, SERVICE_NAMES, queryServicesRuntime, services, type ServiceName } from \"./services.js\";\nimport { c, DIVIDER, highlightLogLine, padRight } from \"./theme.js\";\nimport { stripTaskbarOsc } from \"@sfmc-bds/bds-tools/taskbar\";\nimport { didUpdateDeploy } from \"@sfmc-bds/bds-tools/update-result\";\n\nfunction parseService(raw: string): ServiceName | null {\n const s = raw.toLowerCase() as ServiceName;\n if (SERVICE_NAMES.includes(s)) return s;\n return null;\n}\n\nfunction statusLine(\n name: string,\n running: boolean,\n pid: number,\n uptime: string,\n ownership?: \"managed\" | \"external\"\n): string {\n const dot = running ? c.green(\"\u25CF\") : c.dim(\"\u25CB\");\n const state = running ? c.green(t(\"svc.state.running\")) : c.dim(t(\"svc.state.stopped\"));\n let owner = c.dim(t(\"svc.owner.none\"));\n if (running && ownership === \"managed\") owner = c.cyan(t(\"svc.owner.managed\"));\n else if (running && ownership === \"external\") owner = c.yellow(t(\"svc.owner.external\"));\n const pidStr = pid ? c.dim(String(pid)) : c.dim(\"\u2014\");\n const upStr = uptime !== \"\u2014\" ? c.dim(uptime) : c.dim(\"\u2014\");\n return ` ${dot} ${c.bold(padRight(name, 9))} ${padRight(state, 8)} ${padRight(owner, 6)} ${padRight(pidStr, 8)} ${upStr}`;\n}\n\nexport async function cmdStatus(): Promise<string> {\n const rows = await queryServicesRuntime();\n const lines = rows.map((row) => statusLine(row.title, row.running, row.pid, row.uptime, row.ownership));\n const nameH = t(\"svc.col.name\");\n const statusH = t(\"svc.col.status\");\n const ownerH = t(\"svc.col.owner\");\n const pidH = t(\"svc.col.pid\");\n const upH = t(\"svc.col.uptime\");\n const header =\n ` ${padRight(nameH, 11)}${padRight(statusH, 8)}${padRight(ownerH, 6)}${padRight(pidH, 8)}${upH}`;\n return (\n `\\n${c.bold(t(\"svc.header\"))}\\n` +\n c.dim(header) +\n \"\\n\" +\n DIVIDER +\n \"\\n\" +\n lines.join(\"\\n\") +\n \"\\n\"\n );\n}\n\nexport function cmdLogs(args: string[], onFollow?: (serviceName: ServiceName) => void): string {\n let n = 20;\n let follow = false;\n const positional: string[] = [];\n\n for (const a of args) {\n if (a === \"-n\") continue; /* handled below */\n if (a === \"-f\") {\n follow = true;\n continue;\n }\n positional.push(a);\n }\n\n /* -n takes the next argument as value */\n const nIdx = args.indexOf(\"-n\");\n if (nIdx >= 0 && nIdx + 1 < args.length) n = parseInt(args[nIdx + 1] ?? \"0\", 10);\n\n const svcRaw = positional[0];\n if (!svcRaw) return c.yellow(t(\"svc.logs.usage\"));\n\n const svc = parseService(svcRaw);\n if (!svc) return c.red(t(\"svc.unknown\", { name: svcRaw, list: SERVICE_NAMES.join(\", \") }));\n\n const svcObj = services[svc];\n\n const lines = svcObj.getRecentLogs(n);\n if (lines.length === 0) return c.dim(t(\"svc.logs.empty\"));\n\n const header = `\\n${c.bold(t(\"svc.logs.header\", { title: svcObj.title, count: lines.length }))}`;\n const body = lines\n .map((l) => {\n const ts = c.dim(l.time.toLocaleTimeString());\n const text = highlightLogLine(l.text);\n const prefix = l.stream === \"stderr\" ? c.red(\"!\") : c.dim(\" \");\n return `${ts} ${prefix} ${text}`;\n })\n .join(\"\\n\");\n\n const result = header + \"\\n\" + DIVIDER + \"\\n\" + body + \"\\n\";\n\n if (follow && onFollow) {\n onFollow(svc);\n return \"\";\n }\n\n return result;\n}\n\nconst STARTING = new Set<ServiceName>();\nconst STOPPING = new Set<ServiceName>();\n\nexport async function cmdStart(raw: string): Promise<string> {\n const svc = parseService(raw);\n if (!svc) return c.red(t(\"svc.unknown\", { name: raw, list: SERVICE_NAMES.join(\", \") }));\n const svcObj = services[svc];\n if (svc === \"bds\") {\n const probe = await probeBdsStatus({ rootDir: ROOT });\n if (probe.state !== \"stopped\") {\n return c.yellow(\n t(\"svc.bdsAlreadyRunning\", {\n pid: String(probe.pid),\n kind: probe.state === \"managed\" ? t(\"svc.running\") : t(\"svc.runningExternal\"),\n })\n );\n }\n }\n if (svcObj.running) return c.yellow(t(\"svc.alreadyRunning\", { title: svcObj.title, pid: svcObj.pid }));\n if (STARTING.has(svc)) return c.dim(t(\"svc.alreadyStarting\", { title: svcObj.title }));\n STARTING.add(svc);\n try {\n await svcObj.start();\n return c.green(t(\"svc.started\", { title: svcObj.title }));\n } catch (e) {\n return c.red(t(\"svc.startFailed\", { title: svcObj.title, message: (e as Error).message }));\n } finally {\n STARTING.delete(svc);\n }\n}\n\nexport async function cmdStop(raw: string): Promise<string> {\n const svc = parseService(raw);\n if (!svc) return c.red(t(\"svc.unknown\", { name: raw, list: SERVICE_NAMES.join(\", \") }));\n const svcObj = services[svc];\n if (svc === \"bds\") {\n const probe = await probeBdsStatus({\n managedPid: svcObj.pid,\n hasStdin: Boolean(svcObj.proc?.stdin),\n rootDir: ROOT,\n });\n if (probe.state === \"external\") {\n if (STOPPING.has(svc)) return c.dim(t(\"svc.alreadyStopping\", { title: svcObj.title }));\n STOPPING.add(svc);\n try {\n await killBedrockServerByImage();\n clearBdsPidFile(ROOT);\n return c.dim(t(\"svc.stoppedExternal\", { title: svcObj.title }));\n } catch (e) {\n return c.red(t(\"svc.stopFailed\", { title: svcObj.title, message: (e as Error).message }));\n } finally {\n STOPPING.delete(svc);\n }\n }\n }\n if (!svcObj.running) return c.yellow(t(\"svc.alreadyStopped\", { title: svcObj.title }));\n if (STOPPING.has(svc)) return c.dim(t(\"svc.alreadyStopping\", { title: svcObj.title }));\n STOPPING.add(svc);\n try {\n await svcObj.stop();\n return c.dim(t(\"svc.stoppedMsg\", { title: svcObj.title }));\n } catch (e) {\n return c.red(t(\"svc.stopFailed\", { title: svcObj.title, message: (e as Error).message }));\n } finally {\n STOPPING.delete(svc);\n }\n}\n\nexport async function cmdSend(raw: string, message: string): Promise<string> {\n const svc = parseService(raw);\n if (!svc) return c.red(t(\"svc.unknown\", { name: raw, list: SERVICE_NAMES.join(\", \") }));\n if (!message) return c.yellow(t(\"svc.send.usage\"));\n const svcObj = services[svc];\n /* \u5148\u7EDF\u4E00\u63A2\u6D4B\uFF0C\u907F\u514D\u5185\u5B58 running \u4E0E\u771F\u5B9E\u8FDB\u7A0B\u8131\u8282 */\n await queryServicesRuntime();\n if (svc === \"bds\") {\n const probe = await probeBdsStatus({\n managedPid: svcObj.pid,\n hasStdin: Boolean(svcObj.proc?.stdin),\n rootDir: ROOT,\n });\n if (probe.state === \"external\") {\n return c.yellow(t(\"svc.stdinUnavailable\", { title: svcObj.title }));\n }\n }\n if (!svcObj.running || !svcObj.proc?.stdin) return c.yellow(t(\"svc.notRunning\", { title: svcObj.title }));\n try {\n svcObj.proc.stdin.write(message + \"\\n\");\n return \"\";\n } catch {\n return c.red(t(\"svc.writeFailed\"));\n }\n}\n\nexport async function cmdRestart(raw: string): Promise<string> {\n const svc = parseService(raw);\n if (!svc) return c.red(t(\"svc.unknown\", { name: raw, list: SERVICE_NAMES.join(\", \") }));\n if (svc === \"bds\") {\n await cmdStop(\"bds\");\n return cmdStart(\"bds\");\n }\n const svcObj = services[svc];\n try {\n await svcObj.restart();\n return c.green(t(\"svc.restarted\", { title: svcObj.title }));\n } catch (e) {\n return c.red(t(\"svc.restartFailed\", { title: svcObj.title, message: (e as Error).message }));\n }\n}\n\nexport async function cmdStartAll(): Promise<string> {\n const { startAll } = await import(\"./services.js\");\n await startAll();\n return c.green(t(\"svc.allStarted\"));\n}\n\nexport async function cmdStopAll(): Promise<string> {\n const { stopAll } = await import(\"./services.js\");\n await stopAll();\n return c.dim(t(\"svc.allStopped\"));\n}\n\n/**\n * BDS \u66F4\u65B0\uFF1A\u5B50\u8FDB\u7A0B\u59CB\u7EC8 --no-start\uFF0C\u7531 sfmc \u76D1\u7763\u5668\u63A5\u7BA1\u542F\u505C\u4E0E\u65E5\u5FD7\u3002\n * \uFF08updater \u5185 detached \u81EA\u542F\u4F1A\u5BFC\u81F4 REPL \u4E22 PID / \u65E0 stdout\uFF09\n *\n * \u4E0D\u505C\u670D\u9884\u64CD\u4F5C\uFF1A\u771F\u6B63\u9700\u8981\u66F4\u65B0\u65F6\u7531 updater \u505C\u670D\uFF1B\u5DF2\u662F\u6700\u65B0\u5219\u4E0D\u5F71\u54CD\u6B63\u5728\u8DD1\u7684 BDS\u3002\n * \u66F4\u65B0\u6210\u529F\u540E\u82E5\u672A\u6307\u5B9A --no-start\uFF0C\u518D\u7531\u76D1\u7763\u5668 `start bds`\uFF08\u63A5\u7BA1 PID + \u65E5\u5FD7\u7BA1\u9053\uFF09\u3002\n */\nexport async function cmdUpdate(args: string[] = []): Promise<string> {\n const userNoStart = args.includes(\"--no-start\");\n const checkOnly = args.includes(\"--check-only\");\n const spawnArgs = userNoStart ? [...args] : [...args, \"--no-start\"];\n\n const bds = services.bds;\n const bdsProbe = await probeBdsStatus({\n managedPid: bds.pid,\n hasStdin: Boolean(bds.proc?.stdin),\n rootDir: ROOT,\n });\n const bdsWasRunning = bdsProbe.state !== \"stopped\";\n\n const result = await new Promise<{ code: number | null; out: string }>((resolve) => {\n const proc = spawnService(\"update\", spawnArgs, {\n cwd: ROOT,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n let out = \"\";\n const pushChunk = (raw: string, level: \"info\" | \"error\"): void => {\n // \u5265\u79BB Windows Terminal \u4EFB\u52A1\u680F OSC\uFF0C\u907F\u514D pipe \u65E5\u5FD7\u7A7A\u767D\u884C\uFF08\u6743\u5A01\uFF1Abds-tools/taskbar\uFF09\n const s = stripTaskbarOsc(raw);\n out += s;\n for (const line of s\n .split(/\\r?\\n/)\n .map((l) => l.trimEnd())\n .filter((l) => l.length > 0)) {\n pushUnifiedLog(line, \"update\", level);\n }\n };\n proc.stdout?.on(\"data\", (d: Buffer) => pushChunk(d.toString(), \"info\"));\n proc.stderr?.on(\"data\", (d: Buffer) => pushChunk(d.toString(), \"error\"));\n proc.on(\"exit\", (code) => {\n if (code === 0) {\n pushUnifiedLog(t(\"svc.updateComplete\"), \"system\", \"success\");\n resolve({ code: 0, out: (out ? out + \"\\n\" : \"\") + t(\"svc.updateComplete\") });\n } else {\n resolve({ code, out: out || t(\"svc.updateExited\", { code: String(code) }) });\n }\n });\n proc.on(\"error\", (e) => {\n pushUnifiedLog(t(\"svc.updateError\", { message: e.message }), \"system\", \"error\");\n resolve({ code: 1, out: t(\"svc.updateError\", { message: e.message }) });\n });\n });\n\n /* \u4EC5\u5728\u771F\u6B63\u5B8C\u6210\u90E8\u7F72\u540E\u62C9\u8D77 BDS\uFF1B\u300C\u5DF2\u662F\u6700\u65B0\u300D\u4E0D\u6253\u6270\u5F53\u524D\u72B6\u6001\u3002\n * \u4EE5 updater \u8F93\u51FA\u7684 SFMC_UPDATE_RESULT=deployed \u673A\u5668\u6807\u8BB0\u4E3A\u51C6\uFF08\u52FF\u5339\u914D\u672C\u5730\u5316\u65E5\u5FD7\uFF09\u3002 */\n const didDeploy = didUpdateDeploy(result.out);\n if (result.code === 0 && didDeploy && !userNoStart && !checkOnly) {\n const afterProbe = await probeBdsStatus({\n managedPid: bds.pid,\n hasStdin: Boolean(bds.proc?.stdin),\n rootDir: ROOT,\n });\n if (afterProbe.state !== \"stopped\") {\n return result.out;\n }\n try {\n pushUnifiedLog(t(\"svc.updateStartBds\"), \"system\", \"info\");\n await bds.start();\n return result.out + \"\\n\" + c.green(t(\"svc.bdsStarted\"));\n } catch (e) {\n return result.out + \"\\n\" + c.red(t(\"svc.bdsStartFailed\", { message: (e as Error).message }));\n }\n }\n\n if (result.code === 0 && didDeploy && userNoStart && bdsWasRunning) {\n const afterProbe = await probeBdsStatus({ rootDir: ROOT });\n if (afterProbe.state === \"stopped\") {\n return result.out + \"\\n\" + c.yellow(t(\"svc.bdsStoppedForUpdate\"));\n }\n }\n\n return result.out;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { killBedrockServerByImage, probeBdsStatus, clearBdsPidFile } from \"@sfmc-bds/bds-tools/process-probe\";\nimport {\n DEFAULT_QQ_CONFIG,\n loadEnsuredConfig,\n qqRuntimeStatusPath,\n type QQBridgeConfig,\n} from \"@sfmc-bds/sdk/node/config\";\nimport { findNodeServicePids, killNodeServiceByScript, type NodeServiceName } from \"./node-service-probe.js\";\nimport { pushLog as pushUnifiedLog } from \"./logs.js\";\nimport { t } from \"./i18n/index.js\";\nimport { spawnService } from \"./runtime.js\";\nimport { ROOT, SERVICE_NAMES, queryServicesRuntime, services, type ServiceName } from \"./services.js\";\nimport { c, DIVIDER, highlightLogLine, padRight } from \"./theme.js\";\nimport { stripTaskbarOsc } from \"@sfmc-bds/bds-tools/taskbar\";\nimport { didUpdateDeploy } from \"@sfmc-bds/bds-tools/update-result\";\nimport fs from \"node:fs\";\n\nfunction parseService(raw: string): ServiceName | null {\n const s = raw.toLowerCase() as ServiceName;\n if (SERVICE_NAMES.includes(s)) return s;\n return null;\n}\n\nfunction statusLine(\n name: string,\n running: boolean,\n pid: number,\n uptime: string,\n ownership?: \"managed\" | \"external\"\n): string {\n const dot = running ? c.green(\"\u25CF\") : c.dim(\"\u25CB\");\n const state = running ? c.green(t(\"svc.state.running\")) : c.dim(t(\"svc.state.stopped\"));\n let owner = c.dim(t(\"svc.owner.none\"));\n if (running && ownership === \"managed\") owner = c.cyan(t(\"svc.owner.managed\"));\n else if (running && ownership === \"external\") owner = c.yellow(t(\"svc.owner.external\"));\n const pidStr = pid ? c.dim(String(pid)) : c.dim(\"\u2014\");\n const upStr = uptime !== \"\u2014\" ? c.dim(uptime) : c.dim(\"\u2014\");\n return ` ${dot} ${c.bold(padRight(name, 14))} ${padRight(state, 8)} ${padRight(owner, 6)} ${padRight(pidStr, 8)} ${upStr}`;\n}\n\n/** status \u9875\u811A\uFF1AQQ \u540E\u7AEF\u4E0E\u5173\u952E\u6458\u8981\uFF08\u5BC6\u94A5\u8131\u654F\uFF09 */\nfunction qqBridgeStatusFooter(): string {\n const qqCfg = loadEnsuredConfig(\n ROOT,\n \"qq_config.json\",\n \"qq_config\",\n { ...DEFAULT_QQ_CONFIG } as Record<string, unknown>\n ) as QQBridgeConfig;\n const backend = qqCfg.qq_backend === \"llbot\" ? \"llbot\" : \"official\";\n const enabled = qqCfg.qq_enabled !== false;\n if (backend === \"llbot\") {\n const group = qqCfg.qq_group_id || \"\u2014\";\n const pathHint = qqCfg.llbot_path ? String(qqCfg.llbot_path) : \"\u2014\";\n return (\n `\\n${c.dim(t(\"svc.qq.footer.llbot\", { enabled: enabled ? \"on\" : \"off\", group, path: pathHint }))}\\n`\n );\n }\n const appId = String(qqCfg.qq_app_id ?? \"\").trim();\n const appIdHint = appId ? (appId.length > 8 ? `${appId.slice(0, 4)}\u2026${appId.slice(-4)}` : appId) : \"\u2014\";\n const openid = String(qqCfg.qq_group_openid ?? \"\").trim() || \"\u2014\";\n const sandbox = qqCfg.qq_sandbox ? \"sandbox\" : \"prod\";\n const creds = appId && String(qqCfg.qq_app_secret ?? \"\").trim() ? \"ok\" : \"missing\";\n return (\n `\\n${c.dim(t(\"svc.qq.footer.official\", { enabled: enabled ? \"on\" : \"off\", appId: appIdHint, openid, sandbox, creds }))}\\n`\n );\n}\n\nexport async function cmdStatus(): Promise<string> {\n const rows = await queryServicesRuntime();\n const lines = rows.map((row) => statusLine(row.title, row.running, row.pid, row.uptime, row.ownership));\n const nameH = t(\"svc.col.name\");\n const statusH = t(\"svc.col.status\");\n const ownerH = t(\"svc.col.owner\");\n const pidH = t(\"svc.col.pid\");\n const upH = t(\"svc.col.uptime\");\n const header =\n ` ${padRight(nameH, 16)}${padRight(statusH, 8)}${padRight(ownerH, 6)}${padRight(pidH, 8)}${upH}`;\n return (\n `\\n${c.bold(t(\"svc.header\"))}\\n` +\n c.dim(header) +\n \"\\n\" +\n DIVIDER +\n \"\\n\" +\n lines.join(\"\\n\") +\n qqBridgeStatusFooter()\n );\n}\n\nexport function cmdLogs(args: string[], onFollow?: (serviceName: ServiceName) => void): string {\n let n = 20;\n let follow = false;\n const positional: string[] = [];\n\n for (const a of args) {\n if (a === \"-n\") continue; /* handled below */\n if (a === \"-f\") {\n follow = true;\n continue;\n }\n positional.push(a);\n }\n\n /* -n takes the next argument as value */\n const nIdx = args.indexOf(\"-n\");\n if (nIdx >= 0 && nIdx + 1 < args.length) n = parseInt(args[nIdx + 1] ?? \"0\", 10);\n\n const svcRaw = positional[0];\n if (!svcRaw) return c.yellow(t(\"svc.logs.usage\"));\n\n const svc = parseService(svcRaw);\n if (!svc) return c.red(t(\"svc.unknown\", { name: svcRaw, list: SERVICE_NAMES.join(\", \") }));\n\n const svcObj = services[svc];\n\n const lines = svcObj.getRecentLogs(n);\n if (lines.length === 0) return c.dim(t(\"svc.logs.empty\"));\n\n const header = `\\n${c.bold(t(\"svc.logs.header\", { title: svcObj.title, count: lines.length }))}`;\n const body = lines\n .map((l) => {\n const ts = c.dim(l.time.toLocaleTimeString());\n const text = highlightLogLine(l.text);\n const prefix = l.stream === \"stderr\" ? c.red(\"!\") : c.dim(\" \");\n return `${ts} ${prefix} ${text}`;\n })\n .join(\"\\n\");\n\n const result = header + \"\\n\" + DIVIDER + \"\\n\" + body + \"\\n\";\n\n if (follow && onFollow) {\n onFollow(svc);\n return \"\";\n }\n\n return result;\n}\n\nconst STARTING = new Set<ServiceName>();\nconst STOPPING = new Set<ServiceName>();\n\nfunction isNodeSvc(name: ServiceName): name is NodeServiceName {\n return name === \"db\" || name === \"qq\";\n}\n\nfunction clearQqRuntimeFile(): void {\n try {\n const file = qqRuntimeStatusPath(ROOT);\n if (fs.existsSync(file)) fs.unlinkSync(file);\n } catch {\n /* ignore */\n }\n}\n\nexport async function cmdStart(raw: string): Promise<string> {\n const svc = parseService(raw);\n if (!svc) return c.red(t(\"svc.unknown\", { name: raw, list: SERVICE_NAMES.join(\", \") }));\n const svcObj = services[svc];\n if (svc === \"bds\") {\n const probe = await probeBdsStatus({ rootDir: ROOT });\n if (probe.state !== \"stopped\") {\n return c.yellow(\n t(\"svc.bdsAlreadyRunning\", {\n pid: String(probe.pid),\n kind: probe.state === \"managed\" ? t(\"svc.running\") : t(\"svc.runningExternal\"),\n })\n );\n }\n }\n // \u5916\u90E8\u5DF2\u5728\u8DD1\uFF1A\u7981\u6B62\u518D spawn\uFF08\u907F\u514D\u53CC db / \u53CC qq\uFF09\n if (isNodeSvc(svc)) {\n const external = await findNodeServicePids(svc);\n if (external.length > 0) {\n return c.yellow(\n t(\"svc.alreadyRunning\", { title: svcObj.title, pid: String(external.join(\",\")) })\n );\n }\n }\n if (svcObj.running) return c.yellow(t(\"svc.alreadyRunning\", { title: svcObj.title, pid: svcObj.pid }));\n if (STARTING.has(svc)) return c.dim(t(\"svc.alreadyStarting\", { title: svcObj.title }));\n STARTING.add(svc);\n try {\n const outcome = await svcObj.start();\n if (outcome.status === \"skipped\") {\n return c.yellow(t(\"svc.skipped\", { title: svcObj.title, reason: outcome.reason }));\n }\n if (outcome.status === \"already\") {\n return c.yellow(t(\"svc.alreadyRunning\", { title: svcObj.title, pid: svcObj.pid }));\n }\n return c.green(t(\"svc.started\", { title: svcObj.title }));\n } catch (e) {\n return c.red(t(\"svc.startFailed\", { title: svcObj.title, message: (e as Error).message }));\n } finally {\n STARTING.delete(svc);\n }\n}\n\nexport async function cmdStop(raw: string): Promise<string> {\n const svc = parseService(raw);\n if (!svc) return c.red(t(\"svc.unknown\", { name: raw, list: SERVICE_NAMES.join(\", \") }));\n const svcObj = services[svc];\n if (svc === \"bds\") {\n const probe = await probeBdsStatus({\n managedPid: svcObj.pid,\n hasStdin: Boolean(svcObj.proc?.stdin),\n rootDir: ROOT,\n });\n if (probe.state === \"external\") {\n if (STOPPING.has(svc)) return c.dim(t(\"svc.alreadyStopping\", { title: svcObj.title }));\n STOPPING.add(svc);\n try {\n await killBedrockServerByImage();\n clearBdsPidFile(ROOT);\n return c.dim(t(\"svc.stoppedExternal\", { title: svcObj.title }));\n } catch (e) {\n return c.red(t(\"svc.stopFailed\", { title: svcObj.title, message: (e as Error).message }));\n } finally {\n STOPPING.delete(svc);\n }\n }\n }\n\n // db / qq\uFF1A\u6258\u7BA1\u6216\u5916\u90E8\u90FD\u8981\u80FD\u505C\u5E72\u51C0\n if (isNodeSvc(svc)) {\n if (STOPPING.has(svc)) return c.dim(t(\"svc.alreadyStopping\", { title: svcObj.title }));\n STOPPING.add(svc);\n try {\n const managed = svcObj.running;\n if (managed) {\n await svcObj.stop();\n }\n const killed = await killNodeServiceByScript(svc);\n if (svc === \"qq\") clearQqRuntimeFile();\n if (!managed && killed.length === 0) {\n return c.yellow(t(\"svc.alreadyStopped\", { title: svcObj.title }));\n }\n if (!managed && killed.length > 0) {\n return c.dim(t(\"svc.stoppedExternal\", { title: svcObj.title }));\n }\n return c.dim(t(\"svc.stoppedMsg\", { title: svcObj.title }));\n } catch (e) {\n return c.red(t(\"svc.stopFailed\", { title: svcObj.title, message: (e as Error).message }));\n } finally {\n STOPPING.delete(svc);\n }\n }\n\n if (!svcObj.running) return c.yellow(t(\"svc.alreadyStopped\", { title: svcObj.title }));\n if (STOPPING.has(svc)) return c.dim(t(\"svc.alreadyStopping\", { title: svcObj.title }));\n STOPPING.add(svc);\n try {\n await svcObj.stop();\n return c.dim(t(\"svc.stoppedMsg\", { title: svcObj.title }));\n } catch (e) {\n return c.red(t(\"svc.stopFailed\", { title: svcObj.title, message: (e as Error).message }));\n } finally {\n STOPPING.delete(svc);\n }\n}\n\nexport async function cmdSend(raw: string, message: string): Promise<string> {\n const svc = parseService(raw);\n if (!svc) return c.red(t(\"svc.unknown\", { name: raw, list: SERVICE_NAMES.join(\", \") }));\n if (!message) return c.yellow(t(\"svc.send.usage\"));\n const svcObj = services[svc];\n /* \u5148\u7EDF\u4E00\u63A2\u6D4B\uFF0C\u907F\u514D\u5185\u5B58 running \u4E0E\u771F\u5B9E\u8FDB\u7A0B\u8131\u8282 */\n await queryServicesRuntime();\n if (svc === \"bds\") {\n const probe = await probeBdsStatus({\n managedPid: svcObj.pid,\n hasStdin: Boolean(svcObj.proc?.stdin),\n rootDir: ROOT,\n });\n if (probe.state === \"external\") {\n return c.yellow(t(\"svc.stdinUnavailable\", { title: svcObj.title }));\n }\n }\n if (!svcObj.running || !svcObj.proc?.stdin) return c.yellow(t(\"svc.notRunning\", { title: svcObj.title }));\n try {\n svcObj.proc.stdin.write(message + \"\\n\");\n return \"\";\n } catch {\n return c.red(t(\"svc.writeFailed\"));\n }\n}\n\nexport async function cmdRestart(raw: string): Promise<string> {\n const svc = parseService(raw);\n if (!svc) return c.red(t(\"svc.unknown\", { name: raw, list: SERVICE_NAMES.join(\", \") }));\n // bds / db / qq\uFF1A\u7EDF\u4E00\u8D70 stop\u2192start\uFF0C\u786E\u4FDD\u5916\u90E8\u5B9E\u4F8B\u4E5F\u88AB\u6E05\u6389\n if (svc === \"bds\" || isNodeSvc(svc)) {\n const stopMsg = await cmdStop(svc);\n const startMsg = await cmdStart(svc);\n // \u82E5 stop \u5DF2\u62A5\u9519\u6587\u6848\u542B\u300C\u5931\u8D25\u300D\uFF0C\u539F\u6837\u5E26\u56DE\n if (/\u5931\u8D25|failed/i.test(stopMsg) && !/\u5DF2\u505C\u6B62|stopped|already/i.test(stopMsg)) {\n return stopMsg;\n }\n if (/\u5931\u8D25|failed/i.test(startMsg)) return startMsg;\n return c.green(t(\"svc.restarted\", { title: services[svc].title }));\n }\n const svcObj = services[svc];\n try {\n const outcome = await svcObj.restart();\n if (outcome.status === \"skipped\") {\n return c.yellow(t(\"svc.skipped\", { title: svcObj.title, reason: outcome.reason }));\n }\n return c.green(t(\"svc.restarted\", { title: svcObj.title }));\n } catch (e) {\n return c.red(t(\"svc.restartFailed\", { title: svcObj.title, message: (e as Error).message }));\n }\n}\n\nexport async function cmdStartAll(): Promise<string> {\n const { startAll } = await import(\"./services.js\");\n const result = await startAll();\n const parts: string[] = [];\n if (result.started.length > 0) {\n parts.push(c.green(t(\"svc.startAll.started\", { list: result.started.join(\", \") })));\n }\n if (result.skipped.length > 0) {\n parts.push(\n c.dim(\n t(\"svc.startAll.skipped\", {\n list: result.skipped.map((s) => `${s.name}(${s.reason})`).join(\"; \"),\n })\n )\n );\n }\n if (result.failed.length > 0) {\n parts.push(\n c.red(\n t(\"svc.startAll.failed\", {\n list: result.failed.map((s) => `${s.name}: ${s.reason}`).join(\"; \"),\n })\n )\n );\n }\n if (parts.length === 0) return c.dim(t(\"svc.startAll.empty\"));\n if (result.failed.length === 0 && result.skipped.length === 0) {\n return c.green(t(\"svc.allStarted\"));\n }\n return parts.join(\"\\n\");\n}\n\nexport async function cmdStopAll(): Promise<string> {\n const { stopAll } = await import(\"./services.js\");\n await stopAll();\n return c.dim(t(\"svc.allStopped\"));\n}\n\n/**\n * BDS \u66F4\u65B0\uFF1A\u5B50\u8FDB\u7A0B\u59CB\u7EC8 --no-start\uFF0C\u7531 sfmc \u76D1\u7763\u5668\u63A5\u7BA1\u542F\u505C\u4E0E\u65E5\u5FD7\u3002\n * \uFF08updater \u5185 detached \u81EA\u542F\u4F1A\u5BFC\u81F4 REPL \u4E22 PID / \u65E0 stdout\uFF09\n *\n * \u4E0D\u505C\u670D\u9884\u64CD\u4F5C\uFF1A\u771F\u6B63\u9700\u8981\u66F4\u65B0\u65F6\u7531 updater \u505C\u670D\uFF1B\u5DF2\u662F\u6700\u65B0\u5219\u4E0D\u5F71\u54CD\u6B63\u5728\u8DD1\u7684 BDS\u3002\n * \u66F4\u65B0\u6210\u529F\u540E\u82E5\u672A\u6307\u5B9A --no-start\uFF0C\u518D\u7531\u76D1\u7763\u5668 `start bds`\uFF08\u63A5\u7BA1 PID + \u65E5\u5FD7\u7BA1\u9053\uFF09\u3002\n */\nexport async function cmdUpdate(args: string[] = []): Promise<string> {\n const userNoStart = args.includes(\"--no-start\");\n const checkOnly = args.includes(\"--check-only\");\n const spawnArgs = userNoStart ? [...args] : [...args, \"--no-start\"];\n\n const bds = services.bds;\n const bdsProbe = await probeBdsStatus({\n managedPid: bds.pid,\n hasStdin: Boolean(bds.proc?.stdin),\n rootDir: ROOT,\n });\n const bdsWasRunning = bdsProbe.state !== \"stopped\";\n\n const result = await new Promise<{ code: number | null; out: string }>((resolve) => {\n const proc = spawnService(\"update\", spawnArgs, {\n cwd: ROOT,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n let out = \"\";\n const pushChunk = (raw: string, level: \"info\" | \"error\"): void => {\n // \u5265\u79BB Windows Terminal \u4EFB\u52A1\u680F OSC\uFF0C\u907F\u514D pipe \u65E5\u5FD7\u7A7A\u767D\u884C\uFF08\u6743\u5A01\uFF1Abds-tools/taskbar\uFF09\n const s = stripTaskbarOsc(raw);\n out += s;\n for (const line of s\n .split(/\\r?\\n/)\n .map((l) => l.trimEnd())\n .filter((l) => l.length > 0)) {\n pushUnifiedLog(line, \"update\", level);\n }\n };\n proc.stdout?.on(\"data\", (d: Buffer) => pushChunk(d.toString(), \"info\"));\n proc.stderr?.on(\"data\", (d: Buffer) => pushChunk(d.toString(), \"error\"));\n proc.on(\"exit\", (code) => {\n if (code === 0) {\n pushUnifiedLog(t(\"svc.updateComplete\"), \"system\", \"success\");\n resolve({ code: 0, out: (out ? out + \"\\n\" : \"\") + t(\"svc.updateComplete\") });\n } else {\n resolve({ code, out: out || t(\"svc.updateExited\", { code: String(code) }) });\n }\n });\n proc.on(\"error\", (e) => {\n pushUnifiedLog(t(\"svc.updateError\", { message: e.message }), \"system\", \"error\");\n resolve({ code: 1, out: t(\"svc.updateError\", { message: e.message }) });\n });\n });\n\n /* \u4EC5\u5728\u771F\u6B63\u5B8C\u6210\u90E8\u7F72\u540E\u62C9\u8D77 BDS\uFF1B\u300C\u5DF2\u662F\u6700\u65B0\u300D\u4E0D\u6253\u6270\u5F53\u524D\u72B6\u6001\u3002\n * \u4EE5 updater \u8F93\u51FA\u7684 SFMC_UPDATE_RESULT=deployed \u673A\u5668\u6807\u8BB0\u4E3A\u51C6\uFF08\u52FF\u5339\u914D\u672C\u5730\u5316\u65E5\u5FD7\uFF09\u3002 */\n const didDeploy = didUpdateDeploy(result.out);\n if (result.code === 0 && didDeploy && !userNoStart && !checkOnly) {\n const afterProbe = await probeBdsStatus({\n managedPid: bds.pid,\n hasStdin: Boolean(bds.proc?.stdin),\n rootDir: ROOT,\n });\n if (afterProbe.state !== \"stopped\") {\n return result.out;\n }\n try {\n pushUnifiedLog(t(\"svc.updateStartBds\"), \"system\", \"info\");\n await bds.start();\n return result.out + \"\\n\" + c.green(t(\"svc.bdsStarted\"));\n } catch (e) {\n return result.out + \"\\n\" + c.red(t(\"svc.bdsStartFailed\", { message: (e as Error).message }));\n }\n }\n\n if (result.code === 0 && didDeploy && userNoStart && bdsWasRunning) {\n const afterProbe = await probeBdsStatus({ rootDir: ROOT });\n if (afterProbe.state === \"stopped\") {\n return result.out + \"\\n\" + c.yellow(t(\"svc.bdsStoppedForUpdate\"));\n }\n }\n\n return result.out;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"help-text.d.ts","sourceRoot":"","sources":["../src/help-text.ts"],"names":[],"mappings":"AAOA,OAAO,EAAkD,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAqDxG,wBAAgB,OAAO,CAAC,IAAI,GAAE,WAAoB,GAAG,MAAM,CAiJ1D"}
1
+ {"version":3,"file":"help-text.d.ts","sourceRoot":"","sources":["../src/help-text.ts"],"names":[],"mappings":"AAOA,OAAO,EAAkD,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAqDxG,wBAAgB,OAAO,CAAC,IAAI,GAAE,WAAoB,GAAG,MAAM,CA2I1D"}
package/dist/help-text.js CHANGED
@@ -85,10 +85,6 @@ ${helpLine(c.dim("sfmc -p <sub> \u2026"), t("help.addon.compat"))}
85
85
  const update = show("update") ? `
86
86
  ${c.bold(t("help.section.update"))}
87
87
  ${helpLine(`${p(mode, "update")} [--check-only] [--channel=\u2026]`, t("help.update"))}
88
- ` : "";
89
- const remote = show("remote") ? `
90
- ${c.bold(t("help.section.remote"))} ${c.dim("[beta]")}
91
- ${helpLine(`${p(mode, "remote")} status|enroll|disable`, "")}
92
88
  ` : "";
93
89
  const debug = show("debug") ? `
94
90
  ${c.bold(t("help.section.debug"))}
@@ -106,7 +102,7 @@ ${c.bold("\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25
106
102
  ${usage}${options}
107
103
  ${c.bold(t("help.section.service"))}
108
104
  ${service2}
109
- ${update}${remote}${debug}${install}${addon2}
105
+ ${update}${debug}${install}${addon2}
110
106
  ${c.bold(t("help.section.general"))}
111
107
  ${general2}
112
108
  `;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/help-text.ts"],
4
- "sourcesContent": ["/**\n * help-text.ts \u2014 argv / REPL \u5E2E\u52A9\u6587\u6848\uFF08\u6309 command-surface \u901A\u9053\u8FC7\u6EE4\uFF09\n */\nimport {\n getVisibleModuleSubcommands,\n isDeveloperSubcommand,\n} from \"./module-commands.js\";\nimport { listVisiblePacksSubs, listVisibleTopLevelNames, type CommandMode } from \"./command-surface.js\";\nimport { t } from \"./i18n/index.js\";\nimport { c, padRight } from \"./theme.js\";\n\nconst MODULE_HELP_ENTRIES: ReadonlyArray<{ sub: string; suffix: string; key: string }> = [\n { sub: \"list\", suffix: \"\", key: \"help.module.list\" },\n { sub: \"search\", suffix: \" [id]\", key: \"help.module.search\" },\n { sub: \"install\", suffix: \" <id> [--from <path> --link]\", key: \"help.module.install\" },\n { sub: \"uninstall\", suffix: \" <id>\", key: \"help.module.uninstall\" },\n { sub: \"verify\", suffix: \" [id]\", key: \"help.module.verify\" },\n { sub: \"info\", suffix: \" <id>\", key: \"help.module.info\" },\n { sub: \"enable\", suffix: \"|disable <id>\", key: \"help.module.toggle\" },\n { sub: \"build\", suffix: \"\", key: \"help.module.build\" },\n { sub: \"reload\", suffix: \" [--build-only]\", key: \"help.module.reload\" },\n];\n\n/** \u547D\u4EE4\u5217\u76EE\u6807\u5BBD\u5EA6\uFF08\u8D85\u51FA\u5219\u8BF4\u660E\u6362\u884C\uFF09 */\nconst HELP_CMD_COL = 36;\n\nfunction hasTop(mode: CommandMode, name: string): boolean {\n return listVisibleTopLevelNames(mode).includes(name);\n}\n\n/** \u5355\u884C\u300C\u547D\u4EE4 + \u8BF4\u660E\u300D\uFF1B\u547D\u4EE4\u8FC7\u957F\u5219\u8BF4\u660E\u53E6\u8D77\u4E00\u884C */\nfunction helpLine(cmdPainted: string, desc: string, col: number = HELP_CMD_COL): string {\n const plainLen = cmdPainted.replace(/\\x1b\\[[0-9;]*m/g, \"\").length;\n if (plainLen >= col) {\n return ` ${cmdPainted}\\n ${c.dim(desc)}`;\n }\n return ` ${padRight(cmdPainted, col)}${desc}`;\n}\n\nfunction moduleHelpBlock(mode: CommandMode): string {\n const visible = new Set(getVisibleModuleSubcommands(mode));\n const entries = MODULE_HELP_ENTRIES.filter(({ sub }) => visible.has(sub));\n return entries\n .map(({ sub, suffix, key }) => {\n const paint = isDeveloperSubcommand(sub) ? c.blue : c.green;\n const plain = mode === \"argv\" ? `sfmc module ${sub}${suffix}` : `/module ${sub}${suffix}`;\n return helpLine(paint(plain), t(key as never));\n })\n .join(\"\\n\");\n}\n\nfunction p(mode: CommandMode, cmd: string, paint: (s: string) => string = c.green): string {\n return mode === \"argv\" ? paint(`sfmc ${cmd}`) : paint(`/${cmd}`);\n}\n\n/** \u5E26\u53C2\u6570\u540E\u7F00\u7684\u547D\u4EE4\u884C */\nfunction pArgs(mode: CommandMode, cmd: string, args: string, paint: (s: string) => string = c.green): string {\n return mode === \"argv\" ? paint(`sfmc ${cmd}`) + args : paint(`/${cmd}`) + args;\n}\n\nexport function getHelp(mode: CommandMode = \"argv\"): string {\n const show = (name: string) => hasTop(mode, name);\n const packsSubs = listVisiblePacksSubs(mode);\n\n if (mode === \"argv\") {\n const usage = `${c.bold(t(\"help.usage\"))}\\n ${c.green(\"sfmc\")} [options] <command> [args]\\n`;\n const options = `\n${c.bold(t(\"help.section.options\"))}\n${helpLine(`${c.green(\"-p\")}, ${c.green(\"--packs\")}`, t(\"help.opt.packs\"))}\n${helpLine(`${c.green(\"--lang\")}, ${c.green(\"--locale\")}`, t(\"help.opt.lang\"))}\n${helpLine(`${c.green(\"-h\")}, ${c.green(\"--help\")}`, t(\"help.help\"))}\n${helpLine(`${c.green(\"-v\")}, ${c.green(\"--version\")}`, t(\"help.version\"))}\n`;\n const service = [\n show(\"status\") ? helpLine(p(mode, \"status\"), t(\"help.status\")) : \"\",\n show(\"logs\") ? helpLine(p(mode, \"logs\"), t(\"help.logs\")) : \"\",\n show(\"start\") ? helpLine(pArgs(mode, \"start\", \" <svc>|-all\"), t(\"help.start\")) : \"\",\n show(\"stop\") ? helpLine(pArgs(mode, \"stop\", \" <svc>|-all\"), t(\"help.stop\")) : \"\",\n show(\"restart\") ? helpLine(pArgs(mode, \"restart\", \" <svc>|-all\"), t(\"help.restart\")) : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n\n const install = `\n${c.bold(t(\"help.section.module\"))}\n${helpLine(`${c.green(\"sfmc mod install\")} <id>`, t(\"help.module.install\"))}\n${helpLine(`${c.green(\"sfmc mod install\")} <id> --from <path> --link`, t(\"help.module.install\"))}\n${helpLine(`${c.green(\"sfmc mod uninstall\")} <id>`, t(\"help.module.uninstall\"))}\n${helpLine(`${c.green(\"sfmc mod search\")} [id]`, t(\"help.module.search\"))}\n${helpLine(`${c.green(\"sfmc mod verify\")} [id]`, t(\"help.module.verify\"))}\n${moduleHelpBlock(\"argv\")}\n`;\n\n const packsLines = packsSubs\n .map((sub) => {\n const short = sub === \"install\" ? \"i|install\" : sub;\n return helpLine(c.green(`sfmc packs ${short}`), \"\");\n })\n .join(\"\\n\");\n const addon =\n packsSubs.length > 0\n ? `\n${c.bold(t(\"help.section.addon\"))}\n${packsLines}\n${helpLine(c.dim(\"sfmc -p <sub> \u2026\"), t(\"help.addon.compat\"))}\n`\n : \"\";\n\n const update = show(\"update\")\n ? `\n${c.bold(t(\"help.section.update\"))}\n${helpLine(`${p(mode, \"update\")} [--check-only] [--channel=\u2026]`, t(\"help.update\"))}\n`\n : \"\";\n const remote = show(\"remote\")\n ? `\n${c.bold(t(\"help.section.remote\"))} ${c.dim(\"[beta]\")}\n${helpLine(`${p(mode, \"remote\")} status|enroll|disable`, \"\")}\n`\n : \"\";\n const debug = show(\"debug\")\n ? `\n${c.bold(t(\"help.section.debug\"))}\n${helpLine(`${c.blue(\"sfmc debug\")} status|enable|disable|sentry \u2026`, \"\")}\n`\n : \"\";\n const general = [\n show(\"init\") ? helpLine(p(mode, \"init\"), t(\"help.init\")) : \"\",\n show(\"locale\") ? helpLine(pArgs(mode, \"locale\", \" [zh|en]\"), t(\"help.locale\")) : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n\n return `\n${c.bold(\"\u256D\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256E\")}\n${c.bold(\"\u2502\")} ${c.green(t(\"help.title\"))}${\" \".repeat(Math.max(1, 56 - t(\"help.title\").length))}${c.bold(\"\u2502\")}\n${c.bold(\"\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256F\")}\n\n${usage}${options}\n${c.bold(t(\"help.section.service\"))}\n${service}\n${update}${remote}${debug}${install}${addon}\n${c.bold(t(\"help.section.general\"))}\n${general}\n`;\n }\n\n const service = [\n show(\"status\") ? helpLine(p(mode, \"status\"), t(\"help.status\")) : \"\",\n show(\"logs\") ? helpLine(p(mode, \"logs\"), t(\"help.logs\")) : \"\",\n show(\"start\") ? helpLine(pArgs(mode, \"start\", \" <svc>|-all\"), t(\"help.start\")) : \"\",\n show(\"stop\") ? helpLine(pArgs(mode, \"stop\", \" <svc>|-all\"), t(\"help.stop\")) : \"\",\n show(\"restart\") ? helpLine(pArgs(mode, \"restart\", \" <svc>|-all\"), t(\"help.restart\")) : \"\",\n show(\"send\") ? helpLine(pArgs(mode, \"send\", \" <svc> <msg>\"), t(\"help.send\")) : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n\n const moduleSec = `\n${c.bold(t(\"help.section.module\"))}\n${moduleHelpBlock(\"repl\")}\n`;\n\n const packsLines = packsSubs.map((sub) => helpLine(c.green(`/packs ${sub}`), \"\")).join(\"\\n\");\n const addon =\n packsSubs.length > 0\n ? `\n${c.bold(t(\"help.section.addon\"))}\n${packsLines}\n`\n : \"\";\n\n const general = [\n show(\"version\") ? helpLine(p(mode, \"version\"), t(\"help.version\")) : \"\",\n show(\"help\") ? helpLine(p(mode, \"help\"), t(\"help.help\")) : \"\",\n show(\"quit\") ? helpLine(p(mode, \"quit\"), t(\"help.quit\")) : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n\n const shortcuts = `\n${c.dim(\"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\")}\n${c.dim(t(\"help.shortcuts\"))}\n${helpLine(c.dim(\"/\"), t(\"help.shortcut.slash\"), 12)}\n${helpLine(c.dim(\"Ctrl+P\"), t(\"help.shortcut.ctrlp\"), 12)}\n${helpLine(c.dim(\"Tab\"), t(\"help.shortcut.tab\"), 12)}\n${helpLine(c.dim(\"\u2190\u2192\"), t(\"help.shortcut.cursor\"), 12)}\n${helpLine(c.dim(\"\u2192\"), t(\"help.shortcut.right\"), 12)}\n${helpLine(c.dim(\"Ctrl+L\"), t(\"help.shortcut.ctrll\"), 12)}\n${helpLine(c.dim(\"\u2191\u2193\"), t(\"help.shortcut.history\"), 12)}\n`;\n\n return `\n${c.bold(\"\u256D\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256E\")}\n${c.bold(\"\u2502\")} ${c.green(t(\"help.title.repl\"))}${\" \".repeat(Math.max(1, 56 - t(\"help.title.repl\").length))}${c.bold(\"\u2502\")}\n${c.bold(\"\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256F\")}\n\n${c.dim(t(\"help.slash.hint\"))}\n\n${c.bold(t(\"help.section.service\"))}\n${service}\n${moduleSec}${addon}\n${c.bold(t(\"help.section.general\"))}\n${general}\n${shortcuts}`;\n}\n"],
5
- "mappings": "AAGA;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,sBAAsB,gCAAkD;AACjF,SAAS,SAAS;AAClB,SAAS,GAAG,gBAAgB;AAE5B,MAAM,sBAAmF;AAAA,EACvF,EAAE,KAAK,QAAQ,QAAQ,IAAI,KAAK,mBAAmB;AAAA,EACnD,EAAE,KAAK,UAAU,QAAQ,SAAS,KAAK,qBAAqB;AAAA,EAC5D,EAAE,KAAK,WAAW,QAAQ,gCAAgC,KAAK,sBAAsB;AAAA,EACrF,EAAE,KAAK,aAAa,QAAQ,SAAS,KAAK,wBAAwB;AAAA,EAClE,EAAE,KAAK,UAAU,QAAQ,SAAS,KAAK,qBAAqB;AAAA,EAC5D,EAAE,KAAK,QAAQ,QAAQ,SAAS,KAAK,mBAAmB;AAAA,EACxD,EAAE,KAAK,UAAU,QAAQ,iBAAiB,KAAK,qBAAqB;AAAA,EACpE,EAAE,KAAK,SAAS,QAAQ,IAAI,KAAK,oBAAoB;AAAA,EACrD,EAAE,KAAK,UAAU,QAAQ,mBAAmB,KAAK,qBAAqB;AACxE;AAGA,MAAM,eAAe;AAErB,SAAS,OAAO,MAAmB,MAAuB;AACxD,SAAO,yBAAyB,IAAI,EAAE,SAAS,IAAI;AACrD;AAGA,SAAS,SAAS,YAAoB,MAAc,MAAc,cAAsB;AACtF,QAAM,WAAW,WAAW,QAAQ,mBAAmB,EAAE,EAAE;AAC3D,MAAI,YAAY,KAAK;AACnB,WAAO,KAAK,UAAU;AAAA,MAAS,EAAE,IAAI,IAAI,CAAC;AAAA,EAC5C;AACA,SAAO,KAAK,SAAS,YAAY,GAAG,CAAC,GAAG,IAAI;AAC9C;AAEA,SAAS,gBAAgB,MAA2B;AAClD,QAAM,UAAU,IAAI,IAAI,4BAA4B,IAAI,CAAC;AACzD,QAAM,UAAU,oBAAoB,OAAO,CAAC,EAAE,IAAI,MAAM,QAAQ,IAAI,GAAG,CAAC;AACxE,SAAO,QACJ,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,MAAM;AAC7B,UAAM,QAAQ,sBAAsB,GAAG,IAAI,EAAE,OAAO,EAAE;AACtD,UAAM,QAAQ,SAAS,SAAS,eAAe,GAAG,GAAG,MAAM,KAAK,WAAW,GAAG,GAAG,MAAM;AACvF,WAAO,SAAS,MAAM,KAAK,GAAG,EAAE,GAAY,CAAC;AAAA,EAC/C,CAAC,EACA,KAAK,IAAI;AACd;AAEA,SAAS,EAAE,MAAmB,KAAa,QAA+B,EAAE,OAAe;AACzF,SAAO,SAAS,SAAS,MAAM,QAAQ,GAAG,EAAE,IAAI,MAAM,IAAI,GAAG,EAAE;AACjE;AAGA,SAAS,MAAM,MAAmB,KAAa,MAAc,QAA+B,EAAE,OAAe;AAC3G,SAAO,SAAS,SAAS,MAAM,QAAQ,GAAG,EAAE,IAAI,OAAO,MAAM,IAAI,GAAG,EAAE,IAAI;AAC5E;AAEO,SAAS,QAAQ,OAAoB,QAAgB;AAC1D,QAAM,OAAO,CAAC,SAAiB,OAAO,MAAM,IAAI;AAChD,QAAM,YAAY,qBAAqB,IAAI;AAE3C,MAAI,SAAS,QAAQ;AACnB,UAAM,QAAQ,GAAG,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;AAAA,IAAO,EAAE,MAAM,MAAM,CAAC;AAAA;AAC9D,UAAM,UAAU;AAAA,EAClB,EAAE,KAAK,EAAE,sBAAsB,CAAC,CAAC;AAAA,EACjC,SAAS,GAAG,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,MAAM,SAAS,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;AAAA,EACxE,SAAS,GAAG,EAAE,MAAM,QAAQ,CAAC,KAAK,EAAE,MAAM,UAAU,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;AAAA,EAC5E,SAAS,GAAG,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AAAA,EAClE,SAAS,GAAG,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,MAAM,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;AAAA;AAEtE,UAAMA,WAAU;AAAA,MACd,KAAK,QAAQ,IAAI,SAAS,EAAE,MAAM,QAAQ,GAAG,EAAE,aAAa,CAAC,IAAI;AAAA,MACjE,KAAK,MAAM,IAAI,SAAS,EAAE,MAAM,MAAM,GAAG,EAAE,WAAW,CAAC,IAAI;AAAA,MAC3D,KAAK,OAAO,IAAI,SAAS,MAAM,MAAM,SAAS,aAAa,GAAG,EAAE,YAAY,CAAC,IAAI;AAAA,MACjF,KAAK,MAAM,IAAI,SAAS,MAAM,MAAM,QAAQ,aAAa,GAAG,EAAE,WAAW,CAAC,IAAI;AAAA,MAC9E,KAAK,SAAS,IAAI,SAAS,MAAM,MAAM,WAAW,aAAa,GAAG,EAAE,cAAc,CAAC,IAAI;AAAA,IACzF,EACG,OAAO,OAAO,EACd,KAAK,IAAI;AAEZ,UAAM,UAAU;AAAA,EAClB,EAAE,KAAK,EAAE,qBAAqB,CAAC,CAAC;AAAA,EAChC,SAAS,GAAG,EAAE,MAAM,kBAAkB,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;AAAA,EACzE,SAAS,GAAG,EAAE,MAAM,kBAAkB,CAAC,8BAA8B,EAAE,qBAAqB,CAAC,CAAC;AAAA,EAC9F,SAAS,GAAG,EAAE,MAAM,oBAAoB,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;AAAA,EAC7E,SAAS,GAAG,EAAE,MAAM,iBAAiB,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;AAAA,EACvE,SAAS,GAAG,EAAE,MAAM,iBAAiB,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;AAAA,EACvE,gBAAgB,MAAM,CAAC;AAAA;AAGrB,UAAMC,cAAa,UAChB,IAAI,CAAC,QAAQ;AACZ,YAAM,QAAQ,QAAQ,YAAY,cAAc;AAChD,aAAO,SAAS,EAAE,MAAM,cAAc,KAAK,EAAE,GAAG,EAAE;AAAA,IACpD,CAAC,EACA,KAAK,IAAI;AACZ,UAAMC,SACJ,UAAU,SAAS,IACf;AAAA,EACR,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;AAAA,EAC/BD,WAAU;AAAA,EACV,SAAS,EAAE,IAAI,sBAAiB,GAAG,EAAE,mBAAmB,CAAC,CAAC;AAAA,IAElD;AAEN,UAAM,SAAS,KAAK,QAAQ,IACxB;AAAA,EACN,EAAE,KAAK,EAAE,qBAAqB,CAAC,CAAC;AAAA,EAChC,SAAS,GAAG,EAAE,MAAM,QAAQ,CAAC,sCAAiC,EAAE,aAAa,CAAC,CAAC;AAAA,IAEzE;AACJ,UAAM,SAAS,KAAK,QAAQ,IACxB;AAAA,EACN,EAAE,KAAK,EAAE,qBAAqB,CAAC,CAAC,KAAK,EAAE,IAAI,QAAQ,CAAC;AAAA,EACpD,SAAS,GAAG,EAAE,MAAM,QAAQ,CAAC,0BAA0B,EAAE,CAAC;AAAA,IAEpD;AACJ,UAAM,QAAQ,KAAK,OAAO,IACtB;AAAA,EACN,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;AAAA,EAC/B,SAAS,GAAG,EAAE,KAAK,YAAY,CAAC,wCAAmC,EAAE,CAAC;AAAA,IAEhE;AACJ,UAAME,WAAU;AAAA,MACd,KAAK,MAAM,IAAI,SAAS,EAAE,MAAM,MAAM,GAAG,EAAE,WAAW,CAAC,IAAI;AAAA,MAC3D,KAAK,QAAQ,IAAI,SAAS,MAAM,MAAM,UAAU,UAAU,GAAG,EAAE,aAAa,CAAC,IAAI;AAAA,IACnF,EACG,OAAO,OAAO,EACd,KAAK,IAAI;AAEZ,WAAO;AAAA,EACT,EAAE,KAAK,0WAA8D,CAAC;AAAA,EACtE,EAAE,KAAK,QAAG,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,GAAG,IAAI,OAAO,KAAK,IAAI,GAAG,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,QAAG,CAAC;AAAA,EAC7G,EAAE,KAAK,0WAA8D,CAAC;AAAA;AAAA,EAEtE,KAAK,GAAG,OAAO;AAAA,EACf,EAAE,KAAK,EAAE,sBAAsB,CAAC,CAAC;AAAA,EACjCH,QAAO;AAAA,EACP,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAGE,MAAK;AAAA,EACzC,EAAE,KAAK,EAAE,sBAAsB,CAAC,CAAC;AAAA,EACjCC,QAAO;AAAA;AAAA,EAEP;AAEA,QAAM,UAAU;AAAA,IACd,KAAK,QAAQ,IAAI,SAAS,EAAE,MAAM,QAAQ,GAAG,EAAE,aAAa,CAAC,IAAI;AAAA,IACjE,KAAK,MAAM,IAAI,SAAS,EAAE,MAAM,MAAM,GAAG,EAAE,WAAW,CAAC,IAAI;AAAA,IAC3D,KAAK,OAAO,IAAI,SAAS,MAAM,MAAM,SAAS,aAAa,GAAG,EAAE,YAAY,CAAC,IAAI;AAAA,IACjF,KAAK,MAAM,IAAI,SAAS,MAAM,MAAM,QAAQ,aAAa,GAAG,EAAE,WAAW,CAAC,IAAI;AAAA,IAC9E,KAAK,SAAS,IAAI,SAAS,MAAM,MAAM,WAAW,aAAa,GAAG,EAAE,cAAc,CAAC,IAAI;AAAA,IACvF,KAAK,MAAM,IAAI,SAAS,MAAM,MAAM,QAAQ,cAAc,GAAG,EAAE,WAAW,CAAC,IAAI;AAAA,EACjF,EACG,OAAO,OAAO,EACd,KAAK,IAAI;AAEZ,QAAM,YAAY;AAAA,EAClB,EAAE,KAAK,EAAE,qBAAqB,CAAC,CAAC;AAAA,EAChC,gBAAgB,MAAM,CAAC;AAAA;AAGvB,QAAM,aAAa,UAAU,IAAI,CAAC,QAAQ,SAAS,EAAE,MAAM,UAAU,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,IAAI;AAC3F,QAAM,QACJ,UAAU,SAAS,IACf;AAAA,EACN,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;AAAA,EAC/B,UAAU;AAAA,IAEJ;AAEN,QAAM,UAAU;AAAA,IACd,KAAK,SAAS,IAAI,SAAS,EAAE,MAAM,SAAS,GAAG,EAAE,cAAc,CAAC,IAAI;AAAA,IACpE,KAAK,MAAM,IAAI,SAAS,EAAE,MAAM,MAAM,GAAG,EAAE,WAAW,CAAC,IAAI;AAAA,IAC3D,KAAK,MAAM,IAAI,SAAS,EAAE,MAAM,MAAM,GAAG,EAAE,WAAW,CAAC,IAAI;AAAA,EAC7D,EACG,OAAO,OAAO,EACd,KAAK,IAAI;AAEZ,QAAM,YAAY;AAAA,EAClB,EAAE,IAAI,0WAA8D,CAAC;AAAA,EACrE,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC;AAAA,EAC1B,SAAS,EAAE,IAAI,GAAG,GAAG,EAAE,qBAAqB,GAAG,EAAE,CAAC;AAAA,EAClD,SAAS,EAAE,IAAI,QAAQ,GAAG,EAAE,qBAAqB,GAAG,EAAE,CAAC;AAAA,EACvD,SAAS,EAAE,IAAI,KAAK,GAAG,EAAE,mBAAmB,GAAG,EAAE,CAAC;AAAA,EAClD,SAAS,EAAE,IAAI,cAAI,GAAG,EAAE,sBAAsB,GAAG,EAAE,CAAC;AAAA,EACpD,SAAS,EAAE,IAAI,QAAG,GAAG,EAAE,qBAAqB,GAAG,EAAE,CAAC;AAAA,EAClD,SAAS,EAAE,IAAI,QAAQ,GAAG,EAAE,qBAAqB,GAAG,EAAE,CAAC;AAAA,EACvD,SAAS,EAAE,IAAI,cAAI,GAAG,EAAE,uBAAuB,GAAG,EAAE,CAAC;AAAA;AAGrD,SAAO;AAAA,EACP,EAAE,KAAK,0WAA8D,CAAC;AAAA,EACtE,EAAE,KAAK,QAAG,CAAC,KAAK,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC,GAAG,IAAI,OAAO,KAAK,IAAI,GAAG,KAAK,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,QAAG,CAAC;AAAA,EACvH,EAAE,KAAK,0WAA8D,CAAC;AAAA;AAAA,EAEtE,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC;AAAA;AAAA,EAE3B,EAAE,KAAK,EAAE,sBAAsB,CAAC,CAAC;AAAA,EACjC,OAAO;AAAA,EACP,SAAS,GAAG,KAAK;AAAA,EACjB,EAAE,KAAK,EAAE,sBAAsB,CAAC,CAAC;AAAA,EACjC,OAAO;AAAA,EACP,SAAS;AACX;",
4
+ "sourcesContent": ["/**\n * help-text.ts \u2014 argv / REPL \u5E2E\u52A9\u6587\u6848\uFF08\u6309 command-surface \u901A\u9053\u8FC7\u6EE4\uFF09\n */\nimport {\n getVisibleModuleSubcommands,\n isDeveloperSubcommand,\n} from \"./module-commands.js\";\nimport { listVisiblePacksSubs, listVisibleTopLevelNames, type CommandMode } from \"./command-surface.js\";\nimport { t } from \"./i18n/index.js\";\nimport { c, padRight } from \"./theme.js\";\n\nconst MODULE_HELP_ENTRIES: ReadonlyArray<{ sub: string; suffix: string; key: string }> = [\n { sub: \"list\", suffix: \"\", key: \"help.module.list\" },\n { sub: \"search\", suffix: \" [id]\", key: \"help.module.search\" },\n { sub: \"install\", suffix: \" <id> [--from <path> --link]\", key: \"help.module.install\" },\n { sub: \"uninstall\", suffix: \" <id>\", key: \"help.module.uninstall\" },\n { sub: \"verify\", suffix: \" [id]\", key: \"help.module.verify\" },\n { sub: \"info\", suffix: \" <id>\", key: \"help.module.info\" },\n { sub: \"enable\", suffix: \"|disable <id>\", key: \"help.module.toggle\" },\n { sub: \"build\", suffix: \"\", key: \"help.module.build\" },\n { sub: \"reload\", suffix: \" [--build-only]\", key: \"help.module.reload\" },\n];\n\n/** \u547D\u4EE4\u5217\u76EE\u6807\u5BBD\u5EA6\uFF08\u8D85\u51FA\u5219\u8BF4\u660E\u6362\u884C\uFF09 */\nconst HELP_CMD_COL = 36;\n\nfunction hasTop(mode: CommandMode, name: string): boolean {\n return listVisibleTopLevelNames(mode).includes(name);\n}\n\n/** \u5355\u884C\u300C\u547D\u4EE4 + \u8BF4\u660E\u300D\uFF1B\u547D\u4EE4\u8FC7\u957F\u5219\u8BF4\u660E\u53E6\u8D77\u4E00\u884C */\nfunction helpLine(cmdPainted: string, desc: string, col: number = HELP_CMD_COL): string {\n const plainLen = cmdPainted.replace(/\\x1b\\[[0-9;]*m/g, \"\").length;\n if (plainLen >= col) {\n return ` ${cmdPainted}\\n ${c.dim(desc)}`;\n }\n return ` ${padRight(cmdPainted, col)}${desc}`;\n}\n\nfunction moduleHelpBlock(mode: CommandMode): string {\n const visible = new Set(getVisibleModuleSubcommands(mode));\n const entries = MODULE_HELP_ENTRIES.filter(({ sub }) => visible.has(sub));\n return entries\n .map(({ sub, suffix, key }) => {\n const paint = isDeveloperSubcommand(sub) ? c.blue : c.green;\n const plain = mode === \"argv\" ? `sfmc module ${sub}${suffix}` : `/module ${sub}${suffix}`;\n return helpLine(paint(plain), t(key as never));\n })\n .join(\"\\n\");\n}\n\nfunction p(mode: CommandMode, cmd: string, paint: (s: string) => string = c.green): string {\n return mode === \"argv\" ? paint(`sfmc ${cmd}`) : paint(`/${cmd}`);\n}\n\n/** \u5E26\u53C2\u6570\u540E\u7F00\u7684\u547D\u4EE4\u884C */\nfunction pArgs(mode: CommandMode, cmd: string, args: string, paint: (s: string) => string = c.green): string {\n return mode === \"argv\" ? paint(`sfmc ${cmd}`) + args : paint(`/${cmd}`) + args;\n}\n\nexport function getHelp(mode: CommandMode = \"argv\"): string {\n const show = (name: string) => hasTop(mode, name);\n const packsSubs = listVisiblePacksSubs(mode);\n\n if (mode === \"argv\") {\n const usage = `${c.bold(t(\"help.usage\"))}\\n ${c.green(\"sfmc\")} [options] <command> [args]\\n`;\n const options = `\n${c.bold(t(\"help.section.options\"))}\n${helpLine(`${c.green(\"-p\")}, ${c.green(\"--packs\")}`, t(\"help.opt.packs\"))}\n${helpLine(`${c.green(\"--lang\")}, ${c.green(\"--locale\")}`, t(\"help.opt.lang\"))}\n${helpLine(`${c.green(\"-h\")}, ${c.green(\"--help\")}`, t(\"help.help\"))}\n${helpLine(`${c.green(\"-v\")}, ${c.green(\"--version\")}`, t(\"help.version\"))}\n`;\n const service = [\n show(\"status\") ? helpLine(p(mode, \"status\"), t(\"help.status\")) : \"\",\n show(\"logs\") ? helpLine(p(mode, \"logs\"), t(\"help.logs\")) : \"\",\n show(\"start\") ? helpLine(pArgs(mode, \"start\", \" <svc>|-all\"), t(\"help.start\")) : \"\",\n show(\"stop\") ? helpLine(pArgs(mode, \"stop\", \" <svc>|-all\"), t(\"help.stop\")) : \"\",\n show(\"restart\") ? helpLine(pArgs(mode, \"restart\", \" <svc>|-all\"), t(\"help.restart\")) : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n\n const install = `\n${c.bold(t(\"help.section.module\"))}\n${helpLine(`${c.green(\"sfmc mod install\")} <id>`, t(\"help.module.install\"))}\n${helpLine(`${c.green(\"sfmc mod install\")} <id> --from <path> --link`, t(\"help.module.install\"))}\n${helpLine(`${c.green(\"sfmc mod uninstall\")} <id>`, t(\"help.module.uninstall\"))}\n${helpLine(`${c.green(\"sfmc mod search\")} [id]`, t(\"help.module.search\"))}\n${helpLine(`${c.green(\"sfmc mod verify\")} [id]`, t(\"help.module.verify\"))}\n${moduleHelpBlock(\"argv\")}\n`;\n\n const packsLines = packsSubs\n .map((sub) => {\n const short = sub === \"install\" ? \"i|install\" : sub;\n return helpLine(c.green(`sfmc packs ${short}`), \"\");\n })\n .join(\"\\n\");\n const addon =\n packsSubs.length > 0\n ? `\n${c.bold(t(\"help.section.addon\"))}\n${packsLines}\n${helpLine(c.dim(\"sfmc -p <sub> \u2026\"), t(\"help.addon.compat\"))}\n`\n : \"\";\n\n const update = show(\"update\")\n ? `\n${c.bold(t(\"help.section.update\"))}\n${helpLine(`${p(mode, \"update\")} [--check-only] [--channel=\u2026]`, t(\"help.update\"))}\n`\n : \"\";\n const debug = show(\"debug\")\n ? `\n${c.bold(t(\"help.section.debug\"))}\n${helpLine(`${c.blue(\"sfmc debug\")} status|enable|disable|sentry \u2026`, \"\")}\n`\n : \"\";\n const general = [\n show(\"init\") ? helpLine(p(mode, \"init\"), t(\"help.init\")) : \"\",\n show(\"locale\") ? helpLine(pArgs(mode, \"locale\", \" [zh|en]\"), t(\"help.locale\")) : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n\n return `\n${c.bold(\"\u256D\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256E\")}\n${c.bold(\"\u2502\")} ${c.green(t(\"help.title\"))}${\" \".repeat(Math.max(1, 56 - t(\"help.title\").length))}${c.bold(\"\u2502\")}\n${c.bold(\"\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256F\")}\n\n${usage}${options}\n${c.bold(t(\"help.section.service\"))}\n${service}\n${update}${debug}${install}${addon}\n${c.bold(t(\"help.section.general\"))}\n${general}\n`;\n }\n\n const service = [\n show(\"status\") ? helpLine(p(mode, \"status\"), t(\"help.status\")) : \"\",\n show(\"logs\") ? helpLine(p(mode, \"logs\"), t(\"help.logs\")) : \"\",\n show(\"start\") ? helpLine(pArgs(mode, \"start\", \" <svc>|-all\"), t(\"help.start\")) : \"\",\n show(\"stop\") ? helpLine(pArgs(mode, \"stop\", \" <svc>|-all\"), t(\"help.stop\")) : \"\",\n show(\"restart\") ? helpLine(pArgs(mode, \"restart\", \" <svc>|-all\"), t(\"help.restart\")) : \"\",\n show(\"send\") ? helpLine(pArgs(mode, \"send\", \" <svc> <msg>\"), t(\"help.send\")) : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n\n const moduleSec = `\n${c.bold(t(\"help.section.module\"))}\n${moduleHelpBlock(\"repl\")}\n`;\n\n const packsLines = packsSubs.map((sub) => helpLine(c.green(`/packs ${sub}`), \"\")).join(\"\\n\");\n const addon =\n packsSubs.length > 0\n ? `\n${c.bold(t(\"help.section.addon\"))}\n${packsLines}\n`\n : \"\";\n\n const general = [\n show(\"version\") ? helpLine(p(mode, \"version\"), t(\"help.version\")) : \"\",\n show(\"help\") ? helpLine(p(mode, \"help\"), t(\"help.help\")) : \"\",\n show(\"quit\") ? helpLine(p(mode, \"quit\"), t(\"help.quit\")) : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n\n const shortcuts = `\n${c.dim(\"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\")}\n${c.dim(t(\"help.shortcuts\"))}\n${helpLine(c.dim(\"/\"), t(\"help.shortcut.slash\"), 12)}\n${helpLine(c.dim(\"Ctrl+P\"), t(\"help.shortcut.ctrlp\"), 12)}\n${helpLine(c.dim(\"Tab\"), t(\"help.shortcut.tab\"), 12)}\n${helpLine(c.dim(\"\u2190\u2192\"), t(\"help.shortcut.cursor\"), 12)}\n${helpLine(c.dim(\"\u2192\"), t(\"help.shortcut.right\"), 12)}\n${helpLine(c.dim(\"Ctrl+L\"), t(\"help.shortcut.ctrll\"), 12)}\n${helpLine(c.dim(\"\u2191\u2193\"), t(\"help.shortcut.history\"), 12)}\n`;\n\n return `\n${c.bold(\"\u256D\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256E\")}\n${c.bold(\"\u2502\")} ${c.green(t(\"help.title.repl\"))}${\" \".repeat(Math.max(1, 56 - t(\"help.title.repl\").length))}${c.bold(\"\u2502\")}\n${c.bold(\"\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256F\")}\n\n${c.dim(t(\"help.slash.hint\"))}\n\n${c.bold(t(\"help.section.service\"))}\n${service}\n${moduleSec}${addon}\n${c.bold(t(\"help.section.general\"))}\n${general}\n${shortcuts}`;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["service", "packsLines", "addon", "general"]
7
7
  }