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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/dist/argv-parse.d.ts +11 -0
  2. package/dist/argv-parse.d.ts.map +1 -0
  3. package/dist/argv-parse.js +28 -0
  4. package/dist/argv-parse.js.map +7 -0
  5. package/dist/cli-gate.d.ts +11 -0
  6. package/dist/cli-gate.d.ts.map +1 -0
  7. package/dist/cli-gate.js +46 -0
  8. package/dist/cli-gate.js.map +7 -0
  9. package/dist/command-palette.d.ts +61 -0
  10. package/dist/command-palette.d.ts.map +1 -0
  11. package/dist/command-palette.js +352 -0
  12. package/dist/command-palette.js.map +7 -0
  13. package/dist/command-surface.d.ts +85 -0
  14. package/dist/command-surface.d.ts.map +1 -0
  15. package/dist/command-surface.js +292 -0
  16. package/dist/command-surface.js.map +7 -0
  17. package/dist/commands-reload.js +2 -2
  18. package/dist/commands-reload.js.map +2 -2
  19. package/dist/commands.d.ts +1 -1
  20. package/dist/commands.d.ts.map +1 -1
  21. package/dist/commands.js +196 -21
  22. package/dist/commands.js.map +2 -2
  23. package/dist/debug-command.d.ts +5 -0
  24. package/dist/debug-command.d.ts.map +1 -0
  25. package/dist/debug-command.js +118 -0
  26. package/dist/debug-command.js.map +7 -0
  27. package/dist/help-text.d.ts +3 -0
  28. package/dist/help-text.d.ts.map +1 -0
  29. package/dist/help-text.js +160 -0
  30. package/dist/help-text.js.map +7 -0
  31. package/dist/i18n/locales/en.d.ts +93 -79
  32. package/dist/i18n/locales/en.d.ts.map +1 -1
  33. package/dist/i18n/locales/en.js +95 -81
  34. package/dist/i18n/locales/en.js.map +2 -2
  35. package/dist/i18n/locales/zh-CN.d.ts.map +1 -1
  36. package/dist/i18n/locales/zh-CN.js +129 -109
  37. package/dist/i18n/locales/zh-CN.js.map +2 -2
  38. package/dist/index.d.ts +2 -2
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +9 -4
  41. package/dist/index.js.map +2 -2
  42. package/dist/llbot-launch.d.ts +20 -0
  43. package/dist/llbot-launch.d.ts.map +1 -0
  44. package/dist/llbot-launch.js +40 -0
  45. package/dist/llbot-launch.js.map +7 -0
  46. package/dist/logs.d.ts +16 -1
  47. package/dist/logs.d.ts.map +1 -1
  48. package/dist/logs.js +80 -11
  49. package/dist/logs.js.map +2 -2
  50. package/dist/main.js +55 -46
  51. package/dist/main.js.map +2 -2
  52. package/dist/module-commands.d.ts +17 -40
  53. package/dist/module-commands.d.ts.map +1 -1
  54. package/dist/module-commands.js +129 -85
  55. package/dist/module-commands.js.map +2 -2
  56. package/dist/module-pack-build.d.ts +10 -0
  57. package/dist/module-pack-build.d.ts.map +1 -0
  58. package/dist/module-pack-build.js +434 -0
  59. package/dist/module-pack-build.js.map +7 -0
  60. package/dist/module-toggle.d.ts +33 -0
  61. package/dist/module-toggle.d.ts.map +1 -0
  62. package/dist/module-toggle.js +28 -0
  63. package/dist/module-toggle.js.map +7 -0
  64. package/dist/node-service-probe.d.ts +18 -0
  65. package/dist/node-service-probe.d.ts.map +1 -0
  66. package/dist/node-service-probe.js +97 -0
  67. package/dist/node-service-probe.js.map +7 -0
  68. package/dist/pack-lifecycle.d.ts +1 -1
  69. package/dist/pack-lifecycle.d.ts.map +1 -1
  70. package/dist/pack-lifecycle.js +14 -4
  71. package/dist/pack-lifecycle.js.map +2 -2
  72. package/dist/pack-update/index.d.ts +18 -0
  73. package/dist/pack-update/index.d.ts.map +1 -0
  74. package/dist/pack-update/index.js +113 -0
  75. package/dist/pack-update/index.js.map +7 -0
  76. package/dist/registry.d.ts +7 -4
  77. package/dist/registry.d.ts.map +1 -1
  78. package/dist/registry.js +15 -3
  79. package/dist/registry.js.map +2 -2
  80. package/dist/repl-windows/format-display.d.ts +10 -0
  81. package/dist/repl-windows/format-display.d.ts.map +1 -0
  82. package/dist/repl-windows/format-display.js +57 -0
  83. package/dist/repl-windows/format-display.js.map +7 -0
  84. package/dist/repl-windows/host.d.ts +60 -0
  85. package/dist/repl-windows/host.d.ts.map +1 -0
  86. package/dist/repl-windows/host.js +179 -0
  87. package/dist/repl-windows/host.js.map +7 -0
  88. package/dist/repl-windows/index.d.ts +9 -0
  89. package/dist/repl-windows/index.d.ts.map +1 -0
  90. package/dist/repl-windows/index.js +13 -0
  91. package/dist/repl-windows/index.js.map +7 -0
  92. package/dist/repl-windows/logs-filter-window.d.ts +15 -0
  93. package/dist/repl-windows/logs-filter-window.d.ts.map +1 -0
  94. package/dist/repl-windows/logs-filter-window.js +77 -0
  95. package/dist/repl-windows/logs-filter-window.js.map +7 -0
  96. package/dist/repl-windows/service-window.d.ts +4 -0
  97. package/dist/repl-windows/service-window.d.ts.map +1 -0
  98. package/dist/repl-windows/service-window.js +35 -0
  99. package/dist/repl-windows/service-window.js.map +7 -0
  100. package/dist/repl-windows/types.d.ts +56 -0
  101. package/dist/repl-windows/types.d.ts.map +1 -0
  102. package/dist/repl-windows/types.js +1 -0
  103. package/dist/repl-windows/types.js.map +7 -0
  104. package/dist/repl.d.ts +6 -9
  105. package/dist/repl.d.ts.map +1 -1
  106. package/dist/repl.js +698 -427
  107. package/dist/repl.js.map +3 -3
  108. package/dist/runtime.d.ts +6 -13
  109. package/dist/runtime.d.ts.map +1 -1
  110. package/dist/runtime.js +23 -28
  111. package/dist/runtime.js.map +2 -2
  112. package/dist/send-target.d.ts +11 -0
  113. package/dist/send-target.d.ts.map +1 -0
  114. package/dist/send-target.js +42 -0
  115. package/dist/send-target.js.map +7 -0
  116. package/dist/services.d.ts +50 -4
  117. package/dist/services.d.ts.map +1 -1
  118. package/dist/services.js +244 -20
  119. package/dist/services.js.map +2 -2
  120. package/dist/theme.js +1 -1
  121. package/dist/theme.js.map +2 -2
  122. package/dist/wizard.d.ts.map +1 -1
  123. package/dist/wizard.js +76 -16
  124. package/dist/wizard.js.map +2 -2
  125. package/dist/world-packs.d.ts.map +1 -1
  126. package/dist/world-packs.js +6 -3
  127. package/dist/world-packs.js.map +2 -2
  128. package/package.json +24 -21
  129. package/scripts/module-install/check-modules.mjs +204 -0
  130. package/scripts/module-install/fetch-module.mjs +1007 -0
  131. package/scripts/module-install/install-resolver.test.mjs +48 -0
  132. package/scripts/module-install/lib/catalog.mjs +96 -0
  133. package/scripts/module-install/lib/io.mjs +37 -0
  134. package/scripts/module-install/lib/link-from.mjs +80 -0
  135. package/scripts/module-install/lib/lock.mjs +78 -0
  136. package/scripts/module-install/lib/npm-resolver.mjs +55 -0
  137. package/scripts/module-install/lib/packages.mjs +142 -0
  138. package/scripts/module-install/lib/paths.mjs +48 -0
  139. package/scripts/module-install/lib/registry-index.mjs +50 -0
  140. package/scripts/module-install/link-local.test.mjs +51 -0
  141. package/scripts/module-install/local-resolver.test.mjs +51 -0
  142. package/scripts/module-install/registry-index.test.mjs +28 -0
  143. package/dist/module-wizard.d.ts +0 -14
  144. package/dist/module-wizard.d.ts.map +0 -1
  145. package/dist/module-wizard.js +0 -313
  146. package/dist/module-wizard.js.map +0 -7
  147. package/dist/pack-update/bindings.d.ts +0 -12
  148. package/dist/pack-update/bindings.d.ts.map +0 -1
  149. package/dist/pack-update/bindings.js +0 -64
  150. package/dist/pack-update/bindings.js.map +0 -7
  151. package/dist/pack-update/config.d.ts +0 -22
  152. package/dist/pack-update/config.d.ts.map +0 -1
  153. package/dist/pack-update/config.js +0 -141
  154. package/dist/pack-update/config.js.map +0 -7
  155. package/dist/pack-update/providers/curseforge.d.ts +0 -23
  156. package/dist/pack-update/providers/curseforge.d.ts.map +0 -1
  157. package/dist/pack-update/providers/curseforge.js +0 -229
  158. package/dist/pack-update/providers/curseforge.js.map +0 -7
  159. package/dist/pack-update/providers/index.d.ts +0 -16
  160. package/dist/pack-update/providers/index.d.ts.map +0 -1
  161. package/dist/pack-update/providers/index.js +0 -37
  162. package/dist/pack-update/providers/index.js.map +0 -7
  163. package/dist/pack-update/service.d.ts +0 -21
  164. package/dist/pack-update/service.d.ts.map +0 -1
  165. package/dist/pack-update/service.js +0 -572
  166. package/dist/pack-update/service.js.map +0 -7
  167. package/dist/pack-update/types.d.ts +0 -126
  168. package/dist/pack-update/types.d.ts.map +0 -1
  169. package/dist/pack-update/types.js +0 -8
  170. package/dist/pack-update/types.js.map +0 -7
  171. package/dist/pack-update/version-policy.d.ts +0 -81
  172. package/dist/pack-update/version-policy.d.ts.map +0 -1
  173. package/dist/pack-update/version-policy.js +0 -210
  174. package/dist/pack-update/version-policy.js.map +0 -7
  175. package/dist/remote-agent.d.ts +0 -18
  176. package/dist/remote-agent.d.ts.map +0 -1
  177. package/dist/remote-agent.js +0 -196
  178. package/dist/remote-agent.js.map +0 -7
@@ -0,0 +1,85 @@
1
+ export type CommandChannel = "repl" | "both";
2
+ export type CommandMode = "argv" | "repl";
3
+ export type CommandAccent = "dev";
4
+ export type CommandSpec = {
5
+ /** 稳定 id,如 "module.install" / "send" / "debug" */
6
+ id: string;
7
+ /** 顶层命令名(module 子命令用 "module";顶层别名见 TOP_LEVEL_ALIASES) */
8
+ name: string;
9
+ /** 子命令(仅 module/packs 等) */
10
+ sub?: string;
11
+ channel: CommandChannel;
12
+ needsTty?: boolean;
13
+ /** 帮助染色;不参与 canRun */
14
+ accent?: CommandAccent;
15
+ /** 子命令同义别名(如 uninstall → remove),不是顶层别名 */
16
+ aliases?: string[];
17
+ };
18
+ export type CanRunContext = {
19
+ mode: CommandMode;
20
+ isTty: boolean;
21
+ };
22
+ export type CanRunFailReason = "replOnly" | "needTty";
23
+ export type CanRunResult = {
24
+ ok: true;
25
+ } | {
26
+ ok: false;
27
+ reason: CanRunFailReason;
28
+ };
29
+ /** 顶层命令别名 → 规范 name(DRY:勿在各 sub spec 重复写 mod/addon) */
30
+ export declare const TOP_LEVEL_ALIASES: Readonly<Record<string, string>>;
31
+ /**
32
+ * 顶层扁平短命令 → module 子命令(argv / REPL 共用,避免在 switch 里散落映射)
33
+ * 不含 enable/disable(与 packs 冲突,仍走 /module 或 /packs)
34
+ *
35
+ * 与 packs 子命令对齐:`packs i` → `packs install`(mapPacksSubAlias);
36
+ * module 顶层同样支持 `i` → `install`(见 TOP_LEVEL_ALIASES 与本表)。
37
+ */
38
+ export declare const MODULE_TOP_SHORTHAND: Readonly<Record<string, string>>;
39
+ export declare function resolveModuleTopShorthand(cmd: string | undefined): string | undefined;
40
+ export declare function resolveTopLevelName(cmd: string | undefined): string | undefined;
41
+ /** 判定当前模式下能否执行该命令(accent 不参与)。 */
42
+ export declare function canRunCommand(spec: CommandSpec, ctx: CanRunContext): CanRunResult;
43
+ /** 当前模式可见命令(help / Tab)。 */
44
+ export declare function listVisibleCommands(mode: CommandMode): CommandSpec[];
45
+ /** 顶层命令名(含别名),供 REPL COMMANDS / 补全。 */
46
+ export declare function listVisibleTopLevelNames(mode: CommandMode): string[];
47
+ /** 查找顶层命令(无 sub)的任意一条同名 spec(用于 channel 门禁)。 */
48
+ export declare function findTopLevelSpec(cmd: string | undefined): CommandSpec | undefined;
49
+ /** 查找 module 子命令 spec。 */
50
+ export declare function findModuleSubSpec(sub: string | undefined): CommandSpec | undefined;
51
+ /** 查找 packs 子命令 spec。 */
52
+ export declare function findPacksSubSpec(sub: string | undefined): CommandSpec | undefined;
53
+ /** 当前 mode 下可见的 module 子命令名(规范名,不含 remove 别名)。 */
54
+ export declare function listVisibleModuleSubs(mode: CommandMode): string[];
55
+ /** 当前 mode 下可见的 packs 子命令名。 */
56
+ export declare function listVisiblePacksSubs(mode: CommandMode): string[];
57
+ /** REPL 快速补全:层级节点(主面板 → 右侧子面板) */
58
+ export type PaletteNode = {
59
+ /** 面板内显示的标签 */
60
+ label: string;
61
+ /** 追加到命令行的 token(根节点含或不含前导逻辑由组装负责) */
62
+ token: string;
63
+ /** i18n 描述键 */
64
+ descKey?: string;
65
+ accent?: CommandAccent;
66
+ /** 固定下一参选项;回车后在右侧展开 */
67
+ children?: PaletteNode[];
68
+ /** 无 children 时仍需自由输入(回车后填入空格继续打字) */
69
+ freeArgs?: boolean;
70
+ };
71
+ /** 层级命令树(REPL 面板主列) */
72
+ export declare function listPaletteRoots(mode?: CommandMode): PaletteNode[];
73
+ export declare function isDevAccent(spec: CommandSpec | undefined): boolean;
74
+ /** sub 是否为开发者样式命令(蓝标)。 */
75
+ export declare function isDevAccentModuleSub(sub: string | undefined): boolean;
76
+ /** stdin TTY 探测(供 main/repl 共用)。 */
77
+ export declare function isCliTty(): boolean;
78
+ /**
79
+ * 命令注册表 —— 新增命令只加此处(OCP)。
80
+ * channel:
81
+ * - both: argv + REPL(默认;面板只调度既有 dispatcher)
82
+ * - repl: 仅 REPL(如 send / quit)
83
+ */
84
+ export declare const COMMAND_SPECS: readonly CommandSpec[];
85
+ //# sourceMappingURL=command-surface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-surface.d.ts","sourceRoot":"","sources":["../src/command-surface.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,292 @@
1
+ import { stdin } from "node:process";
2
+ const TOP_LEVEL_ALIASES = {
3
+ mod: "module",
4
+ addon: "packs",
5
+ log: "logs",
6
+ lang: "locale",
7
+ h: "help",
8
+ "?": "help",
9
+ exit: "quit",
10
+ q: "quit",
11
+ i: "install",
12
+ remove: "uninstall"
13
+ };
14
+ const MODULE_TOP_SHORTHAND = {
15
+ i: "install",
16
+ install: "install",
17
+ uninstall: "uninstall",
18
+ search: "search",
19
+ verify: "verify"
20
+ };
21
+ function resolveModuleTopShorthand(cmd) {
22
+ if (!cmd) return void 0;
23
+ const name = resolveTopLevelName(cmd);
24
+ if (!name) return void 0;
25
+ return MODULE_TOP_SHORTHAND[name];
26
+ }
27
+ function resolveTopLevelName(cmd) {
28
+ if (!cmd) return void 0;
29
+ return TOP_LEVEL_ALIASES[cmd] ?? cmd;
30
+ }
31
+ function channelAllows(channel, mode) {
32
+ if (channel === "both") return true;
33
+ return mode === "repl";
34
+ }
35
+ function canRunCommand(spec, ctx) {
36
+ if (!channelAllows(spec.channel, ctx.mode)) {
37
+ return { ok: false, reason: "replOnly" };
38
+ }
39
+ if (spec.needsTty && !ctx.isTty) {
40
+ return { ok: false, reason: "needTty" };
41
+ }
42
+ return { ok: true };
43
+ }
44
+ function listVisibleCommands(mode) {
45
+ return COMMAND_SPECS.filter((s) => channelAllows(s.channel, mode));
46
+ }
47
+ function listVisibleTopLevelNames(mode) {
48
+ const canonical = /* @__PURE__ */ new Set();
49
+ for (const s of listVisibleCommands(mode)) {
50
+ canonical.add(s.name);
51
+ }
52
+ const out = new Set(canonical);
53
+ for (const [alias, name] of Object.entries(TOP_LEVEL_ALIASES)) {
54
+ if (canonical.has(name)) out.add(alias);
55
+ }
56
+ return [...out];
57
+ }
58
+ function findTopLevelSpec(cmd) {
59
+ const name = resolveTopLevelName(cmd);
60
+ if (!name) return void 0;
61
+ const top = COMMAND_SPECS.find((s) => !s.sub && s.name === name);
62
+ if (top) return top;
63
+ return COMMAND_SPECS.find((s) => s.name === name);
64
+ }
65
+ function findModuleSubSpec(sub) {
66
+ if (!sub) return void 0;
67
+ return COMMAND_SPECS.find(
68
+ (s) => s.name === "module" && (s.sub === sub || (s.aliases ?? []).includes(sub))
69
+ );
70
+ }
71
+ function findPacksSubSpec(sub) {
72
+ if (!sub) return void 0;
73
+ return COMMAND_SPECS.find(
74
+ (s) => s.name === "packs" && (s.sub === sub || (s.aliases ?? []).includes(sub))
75
+ );
76
+ }
77
+ function listVisibleModuleSubs(mode) {
78
+ return listVisibleCommands(mode).filter((s) => s.name === "module" && s.sub).map((s) => s.sub);
79
+ }
80
+ function listVisiblePacksSubs(mode) {
81
+ return listVisibleCommands(mode).filter((s) => s.name === "packs" && s.sub).map((s) => s.sub);
82
+ }
83
+ const NO_ARG_TOP = /* @__PURE__ */ new Set(["status", "help", "version", "quit", "init", "logs"]);
84
+ const TOP_DESC = {
85
+ status: "help.status",
86
+ logs: "help.logs",
87
+ start: "help.start",
88
+ stop: "help.stop",
89
+ restart: "help.restart",
90
+ send: "help.send",
91
+ help: "help.help",
92
+ version: "help.version",
93
+ quit: "help.quit",
94
+ init: "help.init",
95
+ update: "help.update",
96
+ locale: "help.locale",
97
+ debug: "help.debug.status",
98
+ install: "help.module.install",
99
+ uninstall: "help.module.uninstall",
100
+ search: "help.module.search",
101
+ verify: "help.module.verify"
102
+ };
103
+ const MODULE_DESC = {
104
+ list: "help.module.list",
105
+ info: "help.module.info",
106
+ build: "help.module.build",
107
+ reload: "help.module.reload",
108
+ search: "help.module.search",
109
+ install: "help.module.install",
110
+ uninstall: "help.module.uninstall",
111
+ verify: "help.module.verify",
112
+ enable: "help.module.toggle",
113
+ disable: "help.module.toggle"
114
+ };
115
+ const PACKS_DESC = {
116
+ list: "help.packs.list",
117
+ search: "help.packs.search",
118
+ enable: "help.packs.enable",
119
+ disable: "help.packs.disable",
120
+ doctor: "help.packs.doctor",
121
+ path: "help.packs.path",
122
+ install: "help.addon",
123
+ scan: "help.addon",
124
+ uninstall: "help.addon",
125
+ bind: "help.addon",
126
+ unbind: "help.addon",
127
+ sources: "help.addon",
128
+ check: "help.addon",
129
+ update: "help.addon",
130
+ bump: "help.addon"
131
+ };
132
+ function serviceArgNodes() {
133
+ return [
134
+ { label: "-all", token: "-all" },
135
+ ...["bds", "db", "qq", "llbot"].map((n) => ({ label: n, token: n }))
136
+ ];
137
+ }
138
+ function moduleChildNodes(mode) {
139
+ const noArg = /* @__PURE__ */ new Set(["list", "build"]);
140
+ return listVisibleModuleSubs(mode).map((sub) => {
141
+ const spec = findModuleSubSpec(sub);
142
+ const node = {
143
+ label: sub,
144
+ token: sub,
145
+ descKey: MODULE_DESC[sub] ?? "help.module.list",
146
+ freeArgs: !noArg.has(sub)
147
+ };
148
+ if (spec?.accent) node.accent = spec.accent;
149
+ return node;
150
+ });
151
+ }
152
+ function packsChildNodes(mode) {
153
+ const noArg = /* @__PURE__ */ new Set(["list", "doctor", "path", "sources"]);
154
+ return listVisiblePacksSubs(mode).map((sub) => ({
155
+ label: sub,
156
+ token: sub,
157
+ descKey: PACKS_DESC[sub] ?? "help.addon",
158
+ freeArgs: !noArg.has(sub)
159
+ }));
160
+ }
161
+ function listPaletteRoots(mode = "repl") {
162
+ const specs = listVisibleCommands(mode);
163
+ const out = [];
164
+ const seen = /* @__PURE__ */ new Set();
165
+ const skipTopShorthand = new Set(Object.keys(MODULE_TOP_SHORTHAND));
166
+ for (const s of specs) {
167
+ if (s.sub) continue;
168
+ if (s.name === "module" || s.name === "packs") continue;
169
+ if (skipTopShorthand.has(s.name)) continue;
170
+ if (seen.has(s.name)) continue;
171
+ seen.add(s.name);
172
+ const node = {
173
+ label: `/${s.name}`,
174
+ token: s.name,
175
+ descKey: TOP_DESC[s.name] ?? "help.help"
176
+ };
177
+ if (s.accent) node.accent = s.accent;
178
+ if (s.name === "start" || s.name === "stop" || s.name === "restart") {
179
+ node.children = serviceArgNodes();
180
+ } else if (s.name === "send") {
181
+ node.children = ["bds", "db", "qq", "llbot"].map((n) => ({
182
+ label: n,
183
+ token: n,
184
+ freeArgs: true
185
+ }));
186
+ } else if (!NO_ARG_TOP.has(s.name)) {
187
+ node.freeArgs = true;
188
+ }
189
+ out.push(node);
190
+ }
191
+ const moduleSubs = moduleChildNodes(mode);
192
+ if (moduleSubs.length > 0) {
193
+ out.push({
194
+ label: "/module",
195
+ token: "module",
196
+ descKey: "help.module.list",
197
+ children: moduleSubs
198
+ });
199
+ }
200
+ const packsSubs = packsChildNodes(mode);
201
+ if (packsSubs.length > 0) {
202
+ out.push({
203
+ label: "/packs",
204
+ token: "packs",
205
+ descKey: "help.addon",
206
+ children: packsSubs
207
+ });
208
+ }
209
+ return out;
210
+ }
211
+ function isDevAccent(spec) {
212
+ return spec?.accent === "dev";
213
+ }
214
+ function isDevAccentModuleSub(sub) {
215
+ return isDevAccent(findModuleSubSpec(sub));
216
+ }
217
+ function isCliTty() {
218
+ return Boolean(stdin.isTTY);
219
+ }
220
+ const COMMAND_SPECS = [
221
+ /* ─── both:服务 / 模块 / 资源包 / 配置 ─── */
222
+ { id: "status", name: "status", channel: "both" },
223
+ { id: "start", name: "start", channel: "both" },
224
+ { id: "stop", name: "stop", channel: "both" },
225
+ { id: "restart", name: "restart", channel: "both" },
226
+ { id: "logs", name: "logs", channel: "repl" },
227
+ { id: "help", name: "help", channel: "both" },
228
+ { id: "version", name: "version", channel: "both" },
229
+ { id: "init", name: "init", channel: "both", needsTty: true },
230
+ { id: "update", name: "update", channel: "both" },
231
+ { id: "locale", name: "locale", channel: "both" },
232
+ { id: "debug", name: "debug", channel: "both", accent: "dev" },
233
+ /** 顶层扁平短命令 → module.*(少写一层 module) */
234
+ { id: "install", name: "install", channel: "both" },
235
+ { id: "uninstall", name: "uninstall", channel: "both", aliases: ["remove"] },
236
+ { id: "search", name: "search", channel: "both" },
237
+ { id: "verify", name: "verify", channel: "both" },
238
+ { id: "module.list", name: "module", sub: "list", channel: "both" },
239
+ { id: "module.info", name: "module", sub: "info", channel: "both" },
240
+ { id: "module.build", name: "module", sub: "build", channel: "both", accent: "dev" },
241
+ { id: "module.reload", name: "module", sub: "reload", channel: "both", accent: "dev" },
242
+ { id: "module.install", name: "module", sub: "install", channel: "both" },
243
+ {
244
+ id: "module.uninstall",
245
+ name: "module",
246
+ sub: "uninstall",
247
+ channel: "both",
248
+ aliases: ["remove"]
249
+ },
250
+ { id: "module.search", name: "module", sub: "search", channel: "both" },
251
+ { id: "module.verify", name: "module", sub: "verify", channel: "both" },
252
+ { id: "module.enable", name: "module", sub: "enable", channel: "both" },
253
+ { id: "module.disable", name: "module", sub: "disable", channel: "both" },
254
+ { id: "packs.list", name: "packs", sub: "list", channel: "both" },
255
+ { id: "packs.search", name: "packs", sub: "search", channel: "both" },
256
+ { id: "packs.enable", name: "packs", sub: "enable", channel: "both" },
257
+ { id: "packs.disable", name: "packs", sub: "disable", channel: "both" },
258
+ { id: "packs.doctor", name: "packs", sub: "doctor", channel: "both" },
259
+ { id: "packs.path", name: "packs", sub: "path", channel: "both" },
260
+ { id: "packs.install", name: "packs", sub: "install", channel: "both" },
261
+ { id: "packs.scan", name: "packs", sub: "scan", channel: "both" },
262
+ { id: "packs.uninstall", name: "packs", sub: "uninstall", channel: "both" },
263
+ { id: "packs.bind", name: "packs", sub: "bind", channel: "both" },
264
+ { id: "packs.unbind", name: "packs", sub: "unbind", channel: "both" },
265
+ { id: "packs.sources", name: "packs", sub: "sources", channel: "both" },
266
+ { id: "packs.check", name: "packs", sub: "check", channel: "both" },
267
+ { id: "packs.update", name: "packs", sub: "update", channel: "both" },
268
+ { id: "packs.bump", name: "packs", sub: "bump", channel: "both" },
269
+ /* ─── repl-only ─── */
270
+ { id: "send", name: "send", channel: "repl" },
271
+ { id: "quit", name: "quit", channel: "repl" }
272
+ ];
273
+ export {
274
+ COMMAND_SPECS,
275
+ MODULE_TOP_SHORTHAND,
276
+ TOP_LEVEL_ALIASES,
277
+ canRunCommand,
278
+ findModuleSubSpec,
279
+ findPacksSubSpec,
280
+ findTopLevelSpec,
281
+ isCliTty,
282
+ isDevAccent,
283
+ isDevAccentModuleSub,
284
+ listPaletteRoots,
285
+ listVisibleCommands,
286
+ listVisibleModuleSubs,
287
+ listVisiblePacksSubs,
288
+ listVisibleTopLevelNames,
289
+ resolveModuleTopShorthand,
290
+ resolveTopLevelName
291
+ };
292
+ //# sourceMappingURL=command-surface.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 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 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
+ "names": []
7
+ }
@@ -14,8 +14,8 @@ async function cmdReload(args) {
14
14
  parts.push(c.dim(t("reload.buildOnly")));
15
15
  return parts.join("\n") + "\n";
16
16
  }
17
- const { services } = await import("./services.js");
18
- if (!services.bds.running) {
17
+ const { isServiceRunning } = await import("./services.js");
18
+ if (!await isServiceRunning("bds")) {
19
19
  parts.push(c.yellow(t("reload.bdsNotRunning")));
20
20
  return parts.join("\n") + "\n";
21
21
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/commands-reload.ts"],
4
- "sourcesContent": ["/**\n * commands-reload.ts \u2014 \u6A21\u5757\u5F00\u53D1\u4E00\u952E\u91CD\u8F7D\n *\n * \u8BED\u4E49\uFF1Abuild \u2192 deploy \u2192\uFF08\u9ED8\u8BA4\uFF09\u5411 BDS \u63A7\u5236\u53F0\u53D1\u9001 `reload`\u3002\n * \u5165\u53E3\uFF1A`sfmc mod reload [--build-only]`\uFF08\u4E0D\u518D\u63D0\u4F9B\u9876\u5C42 `sfmc reload`\uFF09\u3002\n * `--build-only`\uFF1A\u53EA build+deploy\uFF0C\u4E0D\u5411 BDS \u53D1 reload\u3002\n */\n\nimport { t } from \"./i18n/index.js\";\nimport { c } from \"./theme.js\";\n\nexport async function cmdReload(args: string[]): Promise<string> {\n const buildOnly = args.includes(\"--build-only\");\n const { cmdPackBuild, cmdPackDeploy } = await import(\"./pack-lifecycle.js\");\n\n const parts: string[] = [];\n const build = await cmdPackBuild([]);\n parts.push(build.message.trimEnd());\n if (!build.ok) return parts.join(\"\\n\") + \"\\n\";\n\n const deploy = await cmdPackDeploy([]);\n parts.push(deploy.message.trimEnd());\n if (!deploy.ok) return parts.join(\"\\n\") + \"\\n\";\n\n if (buildOnly) {\n parts.push(c.dim(t(\"reload.buildOnly\")));\n return parts.join(\"\\n\") + \"\\n\";\n }\n\n const { services } = await import(\"./services.js\");\n if (!services.bds.running) {\n parts.push(c.yellow(t(\"reload.bdsNotRunning\")));\n return parts.join(\"\\n\") + \"\\n\";\n }\n\n const { cmdSend } = await import(\"./commands.js\");\n parts.push((await cmdSend(\"bds\", \"reload\")).trimEnd());\n parts.push(c.green(t(\"reload.sent\")));\n return parts.join(\"\\n\") + \"\\n\";\n}\n"],
5
- "mappings": "AAQA,SAAS,SAAS;AAClB,SAAS,SAAS;AAElB,eAAsB,UAAU,MAAiC;AAC/D,QAAM,YAAY,KAAK,SAAS,cAAc;AAC9C,QAAM,EAAE,cAAc,cAAc,IAAI,MAAM,OAAO,qBAAqB;AAE1E,QAAM,QAAkB,CAAC;AACzB,QAAM,QAAQ,MAAM,aAAa,CAAC,CAAC;AACnC,QAAM,KAAK,MAAM,QAAQ,QAAQ,CAAC;AAClC,MAAI,CAAC,MAAM,GAAI,QAAO,MAAM,KAAK,IAAI,IAAI;AAEzC,QAAM,SAAS,MAAM,cAAc,CAAC,CAAC;AACrC,QAAM,KAAK,OAAO,QAAQ,QAAQ,CAAC;AACnC,MAAI,CAAC,OAAO,GAAI,QAAO,MAAM,KAAK,IAAI,IAAI;AAE1C,MAAI,WAAW;AACb,UAAM,KAAK,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC;AACvC,WAAO,MAAM,KAAK,IAAI,IAAI;AAAA,EAC5B;AAEA,QAAM,EAAE,SAAS,IAAI,MAAM,OAAO,eAAe;AACjD,MAAI,CAAC,SAAS,IAAI,SAAS;AACzB,UAAM,KAAK,EAAE,OAAO,EAAE,sBAAsB,CAAC,CAAC;AAC9C,WAAO,MAAM,KAAK,IAAI,IAAI;AAAA,EAC5B;AAEA,QAAM,EAAE,QAAQ,IAAI,MAAM,OAAO,eAAe;AAChD,QAAM,MAAM,MAAM,QAAQ,OAAO,QAAQ,GAAG,QAAQ,CAAC;AACrD,QAAM,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;AACpC,SAAO,MAAM,KAAK,IAAI,IAAI;AAC5B;",
4
+ "sourcesContent": ["/**\n * commands-reload.ts \u2014 \u6A21\u5757\u5F00\u53D1\u4E00\u952E\u91CD\u8F7D\n *\n * \u8BED\u4E49\uFF1Abuild \u2192 deploy \u2192\uFF08\u9ED8\u8BA4\uFF09\u5411 BDS \u63A7\u5236\u53F0\u53D1\u9001 `reload`\u3002\n * \u5165\u53E3\uFF1A`sfmc mod reload [--build-only]`\uFF08\u4E0D\u518D\u63D0\u4F9B\u9876\u5C42 `sfmc reload`\uFF09\u3002\n * `--build-only`\uFF1A\u53EA build+deploy\uFF0C\u4E0D\u5411 BDS \u53D1 reload\u3002\n */\n\nimport { t } from \"./i18n/index.js\";\nimport { c } from \"./theme.js\";\n\nexport async function cmdReload(args: string[]): Promise<string> {\n const buildOnly = args.includes(\"--build-only\");\n const { cmdPackBuild, cmdPackDeploy } = await import(\"./pack-lifecycle.js\");\n\n const parts: string[] = [];\n const build = await cmdPackBuild([]);\n parts.push(build.message.trimEnd());\n if (!build.ok) return parts.join(\"\\n\") + \"\\n\";\n\n const deploy = await cmdPackDeploy([]);\n parts.push(deploy.message.trimEnd());\n if (!deploy.ok) return parts.join(\"\\n\") + \"\\n\";\n\n if (buildOnly) {\n parts.push(c.dim(t(\"reload.buildOnly\")));\n return parts.join(\"\\n\") + \"\\n\";\n }\n\n const { isServiceRunning } = await import(\"./services.js\");\n if (!(await isServiceRunning(\"bds\"))) {\n parts.push(c.yellow(t(\"reload.bdsNotRunning\")));\n return parts.join(\"\\n\") + \"\\n\";\n }\n\n const { cmdSend } = await import(\"./commands.js\");\n parts.push((await cmdSend(\"bds\", \"reload\")).trimEnd());\n parts.push(c.green(t(\"reload.sent\")));\n return parts.join(\"\\n\") + \"\\n\";\n}\n"],
5
+ "mappings": "AAQA,SAAS,SAAS;AAClB,SAAS,SAAS;AAElB,eAAsB,UAAU,MAAiC;AAC/D,QAAM,YAAY,KAAK,SAAS,cAAc;AAC9C,QAAM,EAAE,cAAc,cAAc,IAAI,MAAM,OAAO,qBAAqB;AAE1E,QAAM,QAAkB,CAAC;AACzB,QAAM,QAAQ,MAAM,aAAa,CAAC,CAAC;AACnC,QAAM,KAAK,MAAM,QAAQ,QAAQ,CAAC;AAClC,MAAI,CAAC,MAAM,GAAI,QAAO,MAAM,KAAK,IAAI,IAAI;AAEzC,QAAM,SAAS,MAAM,cAAc,CAAC,CAAC;AACrC,QAAM,KAAK,OAAO,QAAQ,QAAQ,CAAC;AACnC,MAAI,CAAC,OAAO,GAAI,QAAO,MAAM,KAAK,IAAI,IAAI;AAE1C,MAAI,WAAW;AACb,UAAM,KAAK,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC;AACvC,WAAO,MAAM,KAAK,IAAI,IAAI;AAAA,EAC5B;AAEA,QAAM,EAAE,iBAAiB,IAAI,MAAM,OAAO,eAAe;AACzD,MAAI,CAAE,MAAM,iBAAiB,KAAK,GAAI;AACpC,UAAM,KAAK,EAAE,OAAO,EAAE,sBAAsB,CAAC,CAAC;AAC9C,WAAO,MAAM,KAAK,IAAI,IAAI;AAAA,EAC5B;AAEA,QAAM,EAAE,QAAQ,IAAI,MAAM,OAAO,eAAe;AAChD,QAAM,MAAM,MAAM,QAAQ,OAAO,QAAQ,GAAG,QAAQ,CAAC;AACrD,QAAM,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;AACpC,SAAO,MAAM,KAAK,IAAI,IAAI;AAC5B;",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,5 @@
1
1
  import { type ServiceName } from "./services.js";
2
- export declare function cmdStatus(): string;
2
+ export declare function cmdStatus(): Promise<string>;
3
3
  export declare function cmdLogs(args: string[], onFollow?: (serviceName: ServiceName) => void): string;
4
4
  export declare function cmdStart(raw: string): Promise<string>;
5
5
  export declare function cmdStop(raw: string): Promise<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiC,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAmBhF,wBAAgB,SAAS,IAAI,MAAM,CAiBlC;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,CAe3D;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAe1D;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAY3E;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAU7D;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,CA8DpE"}
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"}