@sfmc-bds/cli 0.2.3 → 0.2.5

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.
@@ -1 +1 @@
1
- {"version":3,"file":"command-palette.d.ts","sourceRoot":"","sources":["../src/command-palette.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAM1E,+BAA+B;AAC/B,eAAO,MAAM,WAAW,KAAK,CAAC;AAc9B,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,iBAAiB;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,oBAAoB;IACpB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,kBAAkB;AAClB,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAOvD;AAWD,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQxD;AAED,oDAAoD;AACpD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAW7F;AAoGD,8BAA8B;AAC9B,wBAAgB,WAAW,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAiB7D;AAED,2BAA2B;AAC3B,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,CAMjF;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAK3E;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CASzF;AAuCD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,GAAG,OAAO,CAepG;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,WAAW,CA4D/F;AAkCD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAmBzF;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS,CAKrE;AAED,sBAAsB;AACtB,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAUtD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAyBlG;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAExD"}
1
+ {"version":3,"file":"command-palette.d.ts","sourceRoot":"","sources":["../src/command-palette.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAM1E,+BAA+B;AAC/B,eAAO,MAAM,WAAW,KAAK,CAAC;AAc9B,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,iBAAiB;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,oBAAoB;IACpB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,kBAAkB;AAClB,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAOvD;AAWD,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQxD;AAED,oDAAoD;AACpD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAW7F;AAoGD,8BAA8B;AAC9B,wBAAgB,WAAW,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAiB7D;AAED,2BAA2B;AAC3B,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,CAMjF;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAK3E;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CASzF;AAgDD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,GAAG,OAAO,CAepG;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,WAAW,CA4D/F;AAkCD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAmBzF;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS,CAKrE;AAED,sBAAsB;AACtB,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAUtD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAiClG;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAExD"}
@@ -172,6 +172,10 @@ function findRoot(token) {
172
172
  function findChild(parent, token) {
173
173
  return parent?.children?.find((n) => n.token === token);
174
174
  }
175
+ function matchesGluedFreeArg(parent, token) {
176
+ if (!parent?.children?.length || !token) return false;
177
+ return parent.children.some((n) => n.freeArgs && n.token.endsWith("=") && token.startsWith(n.token));
178
+ }
175
179
  function inFreeArgTail(committed) {
176
180
  let node;
177
181
  for (let i = 0; i < committed.length; i++) {
@@ -190,7 +194,7 @@ function isCommandAtEnd(committed, partial, trailingSpace) {
190
194
  let node;
191
195
  for (let i = 0; i < path.length; i++) {
192
196
  const next = i === 0 ? findRoot(path[i]) : findChild(node, path[i]);
193
- if (!next) return false;
197
+ if (!next) return matchesGluedFreeArg(node, path[i]);
194
198
  node = next;
195
199
  }
196
200
  if (!node || (node.children?.length ?? 0) > 0) return false;
@@ -314,6 +318,10 @@ function commitSelection(line, view) {
314
318
  const node = activeNode(view);
315
319
  if (!node) return { line, submit: true };
316
320
  const { committed, partial, trailingSpace, active } = view;
321
+ if (node.token === "") {
322
+ const base = committed.slice(0, active);
323
+ return { line: base.length ? `/${base.join(" ")}` : "/", submit: true };
324
+ }
317
325
  const isLeaf = !node.children?.length && !node.freeArgs;
318
326
  if (isLeaf && !trailingSpace) {
319
327
  if (committed.length === active && partial === node.token) {
@@ -326,7 +334,8 @@ function commitSelection(line, view) {
326
334
  const tokens = committed.slice(0, active);
327
335
  tokens.push(node.token);
328
336
  let next = "/" + tokens.join(" ");
329
- if (node.children?.length || node.freeArgs) next += " ";
337
+ const glue = node.freeArgs && node.token.endsWith("=");
338
+ if ((node.children?.length || node.freeArgs) && !glue) next += " ";
330
339
  return { line: next, submit: false };
331
340
  }
332
341
  function promptSlashColumn(prompt) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/command-palette.ts"],
4
- "sourcesContent": ["/**\n * command-palette.ts \u2014 `/` \u547D\u4EE4\u8865\u5168\u5668\uFF08\u7C7B Windows \u7EA7\u8054\u83DC\u5355\uFF0C\u4EC5\u7531\u8F93\u5165\u6846\u5185\u5BB9\u9A71\u52A8\uFF09\n */\nimport chalk from \"chalk\";\nimport { listPaletteRoots, type PaletteNode } from \"./command-surface.js\";\nimport { t } from \"./i18n/index.js\";\nimport { visibleWidth } from \"./logs.js\";\nimport { T } from \"./theme.js\";\n\nconst PAGE = 10;\n/** \u6BCF\u5217\u56FA\u5B9A\u603B\u5BBD\uFF08\u542B\u5DE6\u8FB9\u6761 + \u6B63\u6587 + \u53F3\u4FA7 \u203A\uFF09 */\nexport const PANEL_WIDTH = 28;\nconst PANEL_GAP = \" \";\nconst MARKER_W = 1;\nconst CHEVRON_W = 1;\nconst INNER_WIDTH = PANEL_WIDTH - MARKER_W - CHEVRON_W;\n\n/** \u5C42\u7EA7\u5E95\u8272\uFF08\u533A\u5206\u591A\u7EA7\u5B50\u83DC\u5355\uFF09 */\nconst LEVEL_BG: readonly string[] = [T.surface, T.panel, \"#1a1d23\", T.subtle];\nconst LEVEL_SEL: readonly string[] = [T.surfaceHi, \"#4a5160\", \"#3a404c\", \"#5a6270\"];\n/** \u975E\u5F53\u524D\u5217\uFF1A\u6574\u4F53\u538B\u6697\u4E00\u6863 */\nconst LEVEL_BG_DIM: readonly string[] = [\"#22252c\", \"#1a1d22\", \"#14161b\", \"#2e333c\"];\nconst LEVEL_SEL_DIM: readonly string[] = [\"#2a2e36\", \"#262a32\", \"#1e2228\", \"#343a44\"];\nconst MATCH_FG = T.cyan;\n\nexport type PaletteColumn = {\n items: PaletteNode[];\n selected: number;\n scroll: number;\n};\n\nexport type PaletteView = {\n columns: PaletteColumn[];\n /** \u53EF\u5BFC\u822A\u5217 = \u6700\u53F3\u5217 */\n active: number;\n committed: string[];\n partial: string;\n trailingSpace: boolean;\n /** \u81EA\u7531\u53C2\u6570\u8F93\u5165\u4E2D\uFF1A\u4E0D\u5C55\u793A\u9762\u677F */\n hidden: boolean;\n};\n\nexport type SlashParse = {\n committed: string[];\n partial: string;\n trailingSpace: boolean;\n};\n\n/** \u89E3\u6790 `/` \u540E\u7684\u8F93\u5165 */\nexport function parseSlashLine(line: string): SlashParse {\n const body = line.startsWith(\"/\") ? line.slice(1) : line;\n const trailingSpace = body.length > 0 && /\\s$/.test(body);\n const raw = body.trim() ? body.trim().split(/\\s+/) : [];\n if (trailingSpace) return { committed: raw, partial: \"\", trailingSpace: true };\n if (raw.length === 0) return { committed: [], partial: \"\", trailingSpace: false };\n return { committed: raw.slice(0, -1), partial: raw[raw.length - 1]!, trailingSpace: false };\n}\n\nfunction descOf(n: PaletteNode): string {\n if (!n.descKey) return \"\";\n try {\n return t(n.descKey as Parameters<typeof t>[0]);\n } catch {\n return \"\";\n }\n}\n\nexport function clipPad(s: string, width: number): string {\n let out = \"\";\n for (const ch of s) {\n if (visibleWidth(out + ch) > width) break;\n out += ch;\n }\n while (visibleWidth(out) < width) out += \" \";\n return out;\n}\n\n/** \u5728 text \u4E2D\u627E query \u7684\u9996\u6B21\u51FA\u73B0\uFF08\u5FFD\u7565\u5927\u5C0F\u5199\uFF1Blabel \u5E26 / \u65F6\u4E5F\u8BD5\u53BB\u524D\u7F00\uFF09 */\nexport function findMatchRange(text: string, q: string): { start: number; end: number } | null {\n if (!q) return null;\n const lq = q.toLowerCase();\n const lower = text.toLowerCase();\n let i = lower.indexOf(lq);\n if (i >= 0) return { start: i, end: i + q.length };\n if (text.startsWith(\"/\")) {\n i = lower.slice(1).indexOf(lq);\n if (i >= 0) return { start: i + 1, end: i + 1 + q.length };\n }\n return null;\n}\n\ntype CellStyle = {\n bg: string;\n fg: string;\n match: string;\n desc: string;\n};\n\nfunction cellStyle(selected: boolean, level: number, activeCol: boolean): CellStyle {\n const i = level % LEVEL_BG.length;\n if (activeCol) {\n return {\n bg: selected ? (LEVEL_SEL[i] ?? T.surfaceHi) : (LEVEL_BG[i] ?? T.surface),\n fg: selected ? T.text : T.muted,\n match: MATCH_FG,\n desc: selected ? T.muted : T.subtle,\n };\n }\n return {\n bg: selected ? (LEVEL_SEL_DIM[i] ?? T.surface) : (LEVEL_BG_DIM[i] ?? T.panel),\n fg: selected ? T.muted : T.subtle,\n match: T.subtle,\n desc: T.subtle,\n };\n}\n\nfunction paintSeg(bg: string, fg: string, text: string): string {\n if (!text) return \"\";\n return chalk.bgHex(bg).hex(fg)(text);\n}\n\n/** \u6309\u53EF\u89C1\u5BBD\u5EA6\u622A\u65AD\u5E76\u7740\u8272\u4E00\u6BB5\u7EAF\u6587\u672C */\nfunction paintClipped(bg: string, fg: string, text: string, maxW: number): { painted: string; used: number } {\n let plain = \"\";\n let painted = \"\";\n for (const ch of text) {\n if (visibleWidth(plain + ch) > maxW) break;\n plain += ch;\n painted += paintSeg(bg, fg, ch);\n }\n return { painted, used: visibleWidth(plain) };\n}\n\n/** \u6B63\u6587\u533A\uFF1Alabel\uFF08\u53EF\u9AD8\u4EAE\u5339\u914D\uFF09+ \u63CF\u8FF0\uFF1B\u603B\u53EF\u89C1\u5BBD INNER_WIDTH */\nfunction paintInner(n: PaletteNode, query: string, style: CellStyle): string {\n const label = n.label;\n const desc = descOf(n);\n const range = findMatchRange(label, query);\n let out = \"\";\n let used = 0;\n\n for (let i = 0; i < label.length; i++) {\n const ch = label[i]!;\n const cw = visibleWidth(ch);\n if (used + cw > INNER_WIDTH) break;\n const inMatch = range !== null && i >= range.start && i < range.end;\n out += paintSeg(style.bg, inMatch ? style.match : style.fg, ch);\n used += cw;\n }\n\n if (desc && used + 1 < INNER_WIDTH) {\n out += paintSeg(style.bg, style.desc, \" \");\n used += 1;\n const room = INNER_WIDTH - used;\n const d = paintClipped(style.bg, style.desc, desc, room);\n out += d.painted;\n used += d.used;\n }\n\n if (used < INNER_WIDTH) {\n out += paintSeg(style.bg, style.fg, \" \".repeat(INNER_WIDTH - used));\n }\n return out;\n}\n\nfunction paintCell(\n n: PaletteNode,\n selected: boolean,\n level: number,\n activeCol: boolean,\n query: string\n): string {\n const style = cellStyle(selected, level, activeCol);\n const marker = selected ? \"\u258C\" : \" \";\n const hasKids = Boolean(n.children?.length);\n const chevron = hasKids ? \"\u203A\" : \" \";\n const q = activeCol ? query : \"\";\n return (\n paintSeg(style.bg, selected && activeCol ? MATCH_FG : style.fg, marker) +\n paintInner(n, q, style) +\n paintSeg(style.bg, style.fg, chevron)\n );\n}\n\nfunction blankCell(level: number, activeCol: boolean): string {\n const style = cellStyle(false, level, activeCol);\n return chalk.bgHex(style.bg)(\" \".repeat(PANEL_WIDTH));\n}\n\n/** \u5339\u914D\u6743\u91CD\uFF1A\u8D8A\u5927\u8D8A\u9760\u524D\uFF1B\u65E0\u67E5\u8BE2\u65F6\u4FDD\u6301\u539F\u5E8F\uFF08\u540C\u5206\uFF09 */\nexport function matchWeight(n: PaletteNode, q: string): number {\n if (!q) return 0;\n const lq = q.toLowerCase();\n const token = n.token.toLowerCase();\n const label = n.label.toLowerCase();\n const desc = descOf(n).toLowerCase();\n if (token === lq || label === `/${lq}` || label === lq) return 100;\n /* \u524D\u7F00\u5339\u914D\uFF1A\u8986\u76D6\u6BD4\u4F8B\u8D8A\u9AD8\u8D8A\u9760\u524D\uFF08st \u2192 start > status\uFF09 */\n if (token.startsWith(lq)) return 80 + Math.round((lq.length / Math.max(token.length, 1)) * 15);\n if (label.startsWith(lq) || label.startsWith(`/${lq}`)) {\n const base = label.startsWith(\"/\") ? label.slice(1) : label;\n return 70 + Math.round((lq.length / Math.max(base.length, 1)) * 15);\n }\n if (token.includes(lq)) return 50;\n if (label.includes(lq)) return 40;\n if (desc.includes(lq)) return 20;\n return 0;\n}\n\n/** \u6309\u6743\u91CD\u7A33\u5B9A\u6392\u5E8F\uFF1A\u5339\u914D\u9879\u7F6E\u9876\uFF0C\u4E0D\u5220\u9664\u4EFB\u4F55\u9879 */\nexport function rankItems(items: readonly PaletteNode[], q: string): PaletteNode[] {\n if (!q) return [...items];\n return items\n .map((n, i) => ({ n, i, w: matchWeight(n, q) }))\n .sort((a, b) => b.w - a.w || a.i - b.i)\n .map((x) => x.n);\n}\n\nexport function clampPaletteSelection(selected: number, len: number): number {\n if (len <= 0) return 0;\n if (selected < 0) return 0;\n if (selected >= len) return len - 1;\n return selected;\n}\n\nexport function ensurePaletteScroll(selected: number, scroll: number, len: number): number {\n let s = scroll;\n if (len <= 0) return 0;\n if (selected < s) s = selected;\n if (selected >= s + PAGE) s = selected - PAGE + 1;\n const maxScroll = Math.max(0, len - PAGE);\n if (s > maxScroll) s = maxScroll;\n if (s < 0) s = 0;\n return s;\n}\n\nfunction pageSlice(\n items: PaletteNode[],\n selected: number,\n scroll: number\n): { rows: { node: PaletteNode; index: number }[]; above: number; below: number } {\n const sel = clampPaletteSelection(selected, items.length);\n const sc = ensurePaletteScroll(sel, scroll, items.length);\n const end = Math.min(items.length, sc + PAGE);\n const rows: { node: PaletteNode; index: number }[] = [];\n for (let i = sc; i < end; i++) rows.push({ node: items[i]!, index: i });\n return { rows, above: sc, below: items.length - end };\n}\n\nfunction findRoot(token: string): PaletteNode | undefined {\n return listPaletteRoots(\"repl\").find((n) => n.token === token);\n}\n\nfunction findChild(parent: PaletteNode | undefined, token: string): PaletteNode | undefined {\n return parent?.children?.find((n) => n.token === token);\n}\n\n/**\n * \u662F\u5426\u5DF2\u8FDB\u5165\u81EA\u7531\u53C2\u6570\u5C3E\u90E8\uFF08\u5982 /send bds \u2026\uFF09\u3002\n * \u8DEF\u5F84\u843D\u5728 freeArgs \u53F6\u4E0A\uFF0C\u6216\u53F6\u4E4B\u540E\u8FD8\u6709\u65E0\u6CD5\u5339\u914D\u7684\u591A\u4F59 token\uFF0C\u5747\u89C6\u4E3A\u81EA\u7531\u8F93\u5165\u3002\n */\nfunction inFreeArgTail(committed: string[]): boolean {\n let node: PaletteNode | undefined;\n for (let i = 0; i < committed.length; i++) {\n const next = i === 0 ? findRoot(committed[i]!) : findChild(node, committed[i]!);\n if (!next) {\n return Boolean(node?.freeArgs && !node.children?.length);\n }\n node = next;\n }\n return Boolean(node?.freeArgs && !node.children?.length);\n}\n\n/**\n * \u547D\u4EE4\u8DEF\u5F84\u662F\u5426\u5DF2\u5230\u672B\u5C3E\uFF08\u65E0\u66F4\u591A\u56FA\u5B9A\u5B50\u53C2\u53EF\u9009\uFF09\u2192 \u5E94\u5173\u95ED\u9762\u677F\u3002\n * \u672B\u5C3E = \u7CBE\u786E\u5339\u914D\u5230\u65E0 children \u7684\u8282\u70B9\uFF0C\u6216\u5DF2\u8FDB\u5165 freeArgs \u6B63\u6587\u3002\n */\nexport function isCommandAtEnd(committed: string[], partial: string, trailingSpace: boolean): boolean {\n if (inFreeArgTail(committed)) return true;\n\n const path = trailingSpace ? committed : partial ? [...committed, partial] : committed;\n if (path.length === 0) return false;\n\n let node: PaletteNode | undefined;\n for (let i = 0; i < path.length; i++) {\n const next = i === 0 ? findRoot(path[i]!) : findChild(node, path[i]!);\n if (!next) return false;\n node = next;\n }\n if (!node || (node.children?.length ?? 0) > 0) return false;\n /* \u6700\u540E\u4E00\u6BB5\u5FC5\u987B\u4E0E\u8282\u70B9 token \u5B8C\u5168\u4E00\u81F4\uFF08\u534A\u8BCD\u524D\u7F00\u4E0D\u7B97\u5230\u672B\u5C3E\uFF09 */\n return path[path.length - 1] === node.token;\n}\n\n/**\n * \u4EC5\u7531\u8F93\u5165\u884C\u63A8\u5BFC\u5217\uFF1B\u5217\u5185\u59CB\u7EC8\u4FDD\u7559\u5168\u91CF\u9879\uFF0Cpartial \u53EA\u8C03\u6574\u6392\u5E8F\u6743\u91CD\u3002\n * \u5B50\u5217\u51FA\u73B0\u6761\u4EF6\uFF1A\u5DF2\u63D0\u4EA4\u4E0A\u4E00\u53C2\u6570\uFF08\u5C06\u8981\u8F93\u5165\u4E0B\u4E00\u53C2\u6570\uFF09\u3002\n */\nexport function resolvePaletteView(line: string, sels: number[], scrolls: number[]): PaletteView {\n const { committed, partial, trailingSpace } = parseSlashLine(line);\n const roots = listPaletteRoots(\"repl\");\n\n /* \u547D\u4EE4\u5DF2\u5230\u672B\u5C3E \u2192 \u7ACB\u5373\u5173\u95ED\u9762\u677F */\n if (isCommandAtEnd(committed, partial, trailingSpace)) {\n return { columns: [], active: 0, committed, partial, trailingSpace, hidden: true };\n }\n\n const columns: PaletteColumn[] = [];\n const onRoot = committed.length === 0;\n /* \u4E3B\u5217\uFF1A\u59CB\u7EC8\u5168\u91CF\uFF1B\u4EC5\u5728\u7F16\u8F91\u9996\u53C2\u65F6\u6309 partial \u63D0\u6743 */\n const mainQuery = onRoot ? partial : \"\";\n const mainItems = rankItems(roots, mainQuery);\n let mainSel = clampPaletteSelection(sels[0] ?? 0, mainItems.length);\n if (!onRoot) {\n const idx = mainItems.findIndex((n) => n.token === committed[0]);\n if (idx >= 0) mainSel = idx;\n } else if (partial) {\n /* \u6709\u534A\u8BCD\u65F6\u9ED8\u8BA4\u843D\u5728\u6743\u91CD\u6700\u9AD8\u9879\uFF08\u5217\u8868\u5934\uFF09 */\n mainSel = clampPaletteSelection(sels[0] ?? 0, mainItems.length);\n }\n columns.push({\n items: mainItems,\n selected: mainSel,\n scroll: ensurePaletteScroll(mainSel, scrolls[0] ?? 0, mainItems.length),\n });\n\n let parent: PaletteNode | undefined = onRoot ? undefined : findRoot(committed[0]!);\n for (let d = 1; parent?.children?.length && committed.length >= d; d++) {\n const pathTok = committed[d];\n const q = committed.length > d ? \"\" : trailingSpace ? \"\" : partial;\n const childItems = rankItems(parent.children, q);\n\n let sel = clampPaletteSelection(sels[d] ?? 0, childItems.length);\n if (pathTok) {\n const idx = childItems.findIndex((n) => n.token === pathTok);\n if (idx >= 0) sel = idx;\n }\n\n columns.push({\n items: childItems,\n selected: sel,\n scroll: ensurePaletteScroll(sel, scrolls[d] ?? 0, childItems.length),\n });\n\n parent = pathTok && committed.length > d ? findChild(parent, pathTok) : childItems[sel];\n\n if (committed.length === d && !trailingSpace) break;\n if (!parent?.children?.length) break;\n }\n\n return {\n columns,\n active: Math.max(0, columns.length - 1),\n committed,\n partial,\n trailingSpace,\n hidden: false,\n };\n}\n\nfunction formatColumnLines(col: PaletteColumn, level: number, activeCol: boolean, query: string): string[] {\n const lines: string[] = [];\n const style = cellStyle(false, level, activeCol);\n if (col.items.length === 0) {\n lines.push(\n paintSeg(style.bg, style.fg, \" \") +\n paintSeg(style.bg, style.fg, clipPad(t(\"repl.palette.empty\"), INNER_WIDTH)) +\n paintSeg(style.bg, style.fg, \" \")\n );\n return lines;\n }\n const { rows, above, below } = pageSlice(col.items, col.selected, col.scroll);\n if (above > 0) {\n lines.push(\n paintSeg(style.bg, style.fg, \" \") +\n paintSeg(style.bg, style.fg, clipPad(`\u2191${above}\u2026`, INNER_WIDTH)) +\n paintSeg(style.bg, style.fg, \" \")\n );\n }\n for (const { node, index } of rows) {\n lines.push(paintCell(node, index === col.selected, level, activeCol, query));\n }\n if (below > 0) {\n lines.push(\n paintSeg(style.bg, style.fg, \" \") +\n paintSeg(style.bg, style.fg, clipPad(`\u2193${below}\u2026`, INNER_WIDTH)) +\n paintSeg(style.bg, style.fg, \" \")\n );\n }\n return lines;\n}\n\nexport function formatPaletteCascadeLines(view: PaletteView, indentCols: number): string[] {\n if (view.hidden || view.columns.length === 0) return [];\n const indent = \" \".repeat(Math.max(0, indentCols));\n const colLines = view.columns.map((col, i) =>\n formatColumnLines(col, i, i === view.active, i === view.active ? view.partial : \"\")\n );\n const height = Math.max(1, ...colLines.map((l) => l.length));\n const out: string[] = [];\n for (let r = 0; r < height; r++) {\n const parts: string[] = [];\n for (let cidx = 0; cidx < view.columns.length; cidx++) {\n const activeCol = cidx === view.active;\n const cell = colLines[cidx]![r] ?? blankCell(cidx, activeCol);\n const plainW = visibleWidth(cell);\n parts.push(plainW < PANEL_WIDTH ? cell + \" \".repeat(PANEL_WIDTH - plainW) : cell);\n }\n out.push(indent + parts.join(PANEL_GAP));\n }\n return out;\n}\n\nexport function activeNode(view: PaletteView): PaletteNode | undefined {\n if (view.hidden) return undefined;\n const col = view.columns[view.active];\n if (!col || col.items.length === 0) return undefined;\n return col.items[clampPaletteSelection(col.selected, col.items.length)];\n}\n\n/** \u7070\u5B57\uFF1A\u9009\u4E2D\u9879\u76F8\u5BF9\u5F53\u524D\u534A\u8BCD\u7684\u540E\u7F00 */\nexport function paletteGhost(view: PaletteView): string {\n const node = activeNode(view);\n if (!node || view.hidden) return \"\";\n /* \u8DEF\u5F84\u5DF2\u5199\u8FC7\u672C\u5C42 \u2192 \u65E0\u7070\u5B57 */\n if (view.committed.length > view.active) return \"\";\n const p = view.partial;\n const tok = node.token;\n if (!p) return tok;\n if (tok.toLowerCase().startsWith(p.toLowerCase())) return tok.slice(p.length);\n return \"\";\n}\n\n/**\n * \u56DE\u8F66\u5199\u5165\u9009\u4E2D\u9879\uFF1B\u6709\u5B50\u53C2\u6216\u81EA\u7531\u53C2\u5219\u8865\u5C3E\u7A7A\u683C\u3002\n * \u82E5\u884C\u5DF2\u662F\u8BE5\u53F6\u8282\u70B9\u5B8C\u6574\u5185\u5BB9 \u2192 submit\u3002\n */\nexport function commitSelection(line: string, view: PaletteView): { line: string; submit: boolean } {\n if (view.hidden || view.columns.length === 0) {\n return { line, submit: true };\n }\n const node = activeNode(view);\n if (!node) return { line, submit: true };\n\n const { committed, partial, trailingSpace, active } = view;\n\n /* \u53F6\u8282\u70B9\u4E14\u8F93\u5165\u5DF2\u5B8C\u6574\u5339\u914D \u2192 \u63D0\u4EA4\u6267\u884C */\n const isLeaf = !node.children?.length && !node.freeArgs;\n if (isLeaf && !trailingSpace) {\n if (committed.length === active && partial === node.token) {\n return { line: \"/\" + [...committed, node.token].join(\" \"), submit: true };\n }\n if (committed.length === active + 1 && committed[active] === node.token && !partial) {\n return { line, submit: true };\n }\n }\n\n const tokens = committed.slice(0, active);\n tokens.push(node.token);\n let next = \"/\" + tokens.join(\" \");\n if (node.children?.length || node.freeArgs) next += \" \";\n return { line: next, submit: false };\n}\n\nexport function promptSlashColumn(prompt: string): number {\n return visibleWidth(prompt);\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * command-palette.ts \u2014 `/` \u547D\u4EE4\u8865\u5168\u5668\uFF08\u7C7B Windows \u7EA7\u8054\u83DC\u5355\uFF0C\u4EC5\u7531\u8F93\u5165\u6846\u5185\u5BB9\u9A71\u52A8\uFF09\n */\nimport chalk from \"chalk\";\nimport { listPaletteRoots, type PaletteNode } from \"./command-surface.js\";\nimport { t } from \"./i18n/index.js\";\nimport { visibleWidth } from \"./logs.js\";\nimport { T } from \"./theme.js\";\n\nconst PAGE = 10;\n/** \u6BCF\u5217\u56FA\u5B9A\u603B\u5BBD\uFF08\u542B\u5DE6\u8FB9\u6761 + \u6B63\u6587 + \u53F3\u4FA7 \u203A\uFF09 */\nexport const PANEL_WIDTH = 28;\nconst PANEL_GAP = \" \";\nconst MARKER_W = 1;\nconst CHEVRON_W = 1;\nconst INNER_WIDTH = PANEL_WIDTH - MARKER_W - CHEVRON_W;\n\n/** \u5C42\u7EA7\u5E95\u8272\uFF08\u533A\u5206\u591A\u7EA7\u5B50\u83DC\u5355\uFF09 */\nconst LEVEL_BG: readonly string[] = [T.surface, T.panel, \"#1a1d23\", T.subtle];\nconst LEVEL_SEL: readonly string[] = [T.surfaceHi, \"#4a5160\", \"#3a404c\", \"#5a6270\"];\n/** \u975E\u5F53\u524D\u5217\uFF1A\u6574\u4F53\u538B\u6697\u4E00\u6863 */\nconst LEVEL_BG_DIM: readonly string[] = [\"#22252c\", \"#1a1d22\", \"#14161b\", \"#2e333c\"];\nconst LEVEL_SEL_DIM: readonly string[] = [\"#2a2e36\", \"#262a32\", \"#1e2228\", \"#343a44\"];\nconst MATCH_FG = T.cyan;\n\nexport type PaletteColumn = {\n items: PaletteNode[];\n selected: number;\n scroll: number;\n};\n\nexport type PaletteView = {\n columns: PaletteColumn[];\n /** \u53EF\u5BFC\u822A\u5217 = \u6700\u53F3\u5217 */\n active: number;\n committed: string[];\n partial: string;\n trailingSpace: boolean;\n /** \u81EA\u7531\u53C2\u6570\u8F93\u5165\u4E2D\uFF1A\u4E0D\u5C55\u793A\u9762\u677F */\n hidden: boolean;\n};\n\nexport type SlashParse = {\n committed: string[];\n partial: string;\n trailingSpace: boolean;\n};\n\n/** \u89E3\u6790 `/` \u540E\u7684\u8F93\u5165 */\nexport function parseSlashLine(line: string): SlashParse {\n const body = line.startsWith(\"/\") ? line.slice(1) : line;\n const trailingSpace = body.length > 0 && /\\s$/.test(body);\n const raw = body.trim() ? body.trim().split(/\\s+/) : [];\n if (trailingSpace) return { committed: raw, partial: \"\", trailingSpace: true };\n if (raw.length === 0) return { committed: [], partial: \"\", trailingSpace: false };\n return { committed: raw.slice(0, -1), partial: raw[raw.length - 1]!, trailingSpace: false };\n}\n\nfunction descOf(n: PaletteNode): string {\n if (!n.descKey) return \"\";\n try {\n return t(n.descKey as Parameters<typeof t>[0]);\n } catch {\n return \"\";\n }\n}\n\nexport function clipPad(s: string, width: number): string {\n let out = \"\";\n for (const ch of s) {\n if (visibleWidth(out + ch) > width) break;\n out += ch;\n }\n while (visibleWidth(out) < width) out += \" \";\n return out;\n}\n\n/** \u5728 text \u4E2D\u627E query \u7684\u9996\u6B21\u51FA\u73B0\uFF08\u5FFD\u7565\u5927\u5C0F\u5199\uFF1Blabel \u5E26 / \u65F6\u4E5F\u8BD5\u53BB\u524D\u7F00\uFF09 */\nexport function findMatchRange(text: string, q: string): { start: number; end: number } | null {\n if (!q) return null;\n const lq = q.toLowerCase();\n const lower = text.toLowerCase();\n let i = lower.indexOf(lq);\n if (i >= 0) return { start: i, end: i + q.length };\n if (text.startsWith(\"/\")) {\n i = lower.slice(1).indexOf(lq);\n if (i >= 0) return { start: i + 1, end: i + 1 + q.length };\n }\n return null;\n}\n\ntype CellStyle = {\n bg: string;\n fg: string;\n match: string;\n desc: string;\n};\n\nfunction cellStyle(selected: boolean, level: number, activeCol: boolean): CellStyle {\n const i = level % LEVEL_BG.length;\n if (activeCol) {\n return {\n bg: selected ? (LEVEL_SEL[i] ?? T.surfaceHi) : (LEVEL_BG[i] ?? T.surface),\n fg: selected ? T.text : T.muted,\n match: MATCH_FG,\n desc: selected ? T.muted : T.subtle,\n };\n }\n return {\n bg: selected ? (LEVEL_SEL_DIM[i] ?? T.surface) : (LEVEL_BG_DIM[i] ?? T.panel),\n fg: selected ? T.muted : T.subtle,\n match: T.subtle,\n desc: T.subtle,\n };\n}\n\nfunction paintSeg(bg: string, fg: string, text: string): string {\n if (!text) return \"\";\n return chalk.bgHex(bg).hex(fg)(text);\n}\n\n/** \u6309\u53EF\u89C1\u5BBD\u5EA6\u622A\u65AD\u5E76\u7740\u8272\u4E00\u6BB5\u7EAF\u6587\u672C */\nfunction paintClipped(bg: string, fg: string, text: string, maxW: number): { painted: string; used: number } {\n let plain = \"\";\n let painted = \"\";\n for (const ch of text) {\n if (visibleWidth(plain + ch) > maxW) break;\n plain += ch;\n painted += paintSeg(bg, fg, ch);\n }\n return { painted, used: visibleWidth(plain) };\n}\n\n/** \u6B63\u6587\u533A\uFF1Alabel\uFF08\u53EF\u9AD8\u4EAE\u5339\u914D\uFF09+ \u63CF\u8FF0\uFF1B\u603B\u53EF\u89C1\u5BBD INNER_WIDTH */\nfunction paintInner(n: PaletteNode, query: string, style: CellStyle): string {\n const label = n.label;\n const desc = descOf(n);\n const range = findMatchRange(label, query);\n let out = \"\";\n let used = 0;\n\n for (let i = 0; i < label.length; i++) {\n const ch = label[i]!;\n const cw = visibleWidth(ch);\n if (used + cw > INNER_WIDTH) break;\n const inMatch = range !== null && i >= range.start && i < range.end;\n out += paintSeg(style.bg, inMatch ? style.match : style.fg, ch);\n used += cw;\n }\n\n if (desc && used + 1 < INNER_WIDTH) {\n out += paintSeg(style.bg, style.desc, \" \");\n used += 1;\n const room = INNER_WIDTH - used;\n const d = paintClipped(style.bg, style.desc, desc, room);\n out += d.painted;\n used += d.used;\n }\n\n if (used < INNER_WIDTH) {\n out += paintSeg(style.bg, style.fg, \" \".repeat(INNER_WIDTH - used));\n }\n return out;\n}\n\nfunction paintCell(\n n: PaletteNode,\n selected: boolean,\n level: number,\n activeCol: boolean,\n query: string\n): string {\n const style = cellStyle(selected, level, activeCol);\n const marker = selected ? \"\u258C\" : \" \";\n const hasKids = Boolean(n.children?.length);\n const chevron = hasKids ? \"\u203A\" : \" \";\n const q = activeCol ? query : \"\";\n return (\n paintSeg(style.bg, selected && activeCol ? MATCH_FG : style.fg, marker) +\n paintInner(n, q, style) +\n paintSeg(style.bg, style.fg, chevron)\n );\n}\n\nfunction blankCell(level: number, activeCol: boolean): string {\n const style = cellStyle(false, level, activeCol);\n return chalk.bgHex(style.bg)(\" \".repeat(PANEL_WIDTH));\n}\n\n/** \u5339\u914D\u6743\u91CD\uFF1A\u8D8A\u5927\u8D8A\u9760\u524D\uFF1B\u65E0\u67E5\u8BE2\u65F6\u4FDD\u6301\u539F\u5E8F\uFF08\u540C\u5206\uFF09 */\nexport function matchWeight(n: PaletteNode, q: string): number {\n if (!q) return 0;\n const lq = q.toLowerCase();\n const token = n.token.toLowerCase();\n const label = n.label.toLowerCase();\n const desc = descOf(n).toLowerCase();\n if (token === lq || label === `/${lq}` || label === lq) return 100;\n /* \u524D\u7F00\u5339\u914D\uFF1A\u8986\u76D6\u6BD4\u4F8B\u8D8A\u9AD8\u8D8A\u9760\u524D\uFF08st \u2192 start > status\uFF09 */\n if (token.startsWith(lq)) return 80 + Math.round((lq.length / Math.max(token.length, 1)) * 15);\n if (label.startsWith(lq) || label.startsWith(`/${lq}`)) {\n const base = label.startsWith(\"/\") ? label.slice(1) : label;\n return 70 + Math.round((lq.length / Math.max(base.length, 1)) * 15);\n }\n if (token.includes(lq)) return 50;\n if (label.includes(lq)) return 40;\n if (desc.includes(lq)) return 20;\n return 0;\n}\n\n/** \u6309\u6743\u91CD\u7A33\u5B9A\u6392\u5E8F\uFF1A\u5339\u914D\u9879\u7F6E\u9876\uFF0C\u4E0D\u5220\u9664\u4EFB\u4F55\u9879 */\nexport function rankItems(items: readonly PaletteNode[], q: string): PaletteNode[] {\n if (!q) return [...items];\n return items\n .map((n, i) => ({ n, i, w: matchWeight(n, q) }))\n .sort((a, b) => b.w - a.w || a.i - b.i)\n .map((x) => x.n);\n}\n\nexport function clampPaletteSelection(selected: number, len: number): number {\n if (len <= 0) return 0;\n if (selected < 0) return 0;\n if (selected >= len) return len - 1;\n return selected;\n}\n\nexport function ensurePaletteScroll(selected: number, scroll: number, len: number): number {\n let s = scroll;\n if (len <= 0) return 0;\n if (selected < s) s = selected;\n if (selected >= s + PAGE) s = selected - PAGE + 1;\n const maxScroll = Math.max(0, len - PAGE);\n if (s > maxScroll) s = maxScroll;\n if (s < 0) s = 0;\n return s;\n}\n\nfunction pageSlice(\n items: PaletteNode[],\n selected: number,\n scroll: number\n): { rows: { node: PaletteNode; index: number }[]; above: number; below: number } {\n const sel = clampPaletteSelection(selected, items.length);\n const sc = ensurePaletteScroll(sel, scroll, items.length);\n const end = Math.min(items.length, sc + PAGE);\n const rows: { node: PaletteNode; index: number }[] = [];\n for (let i = sc; i < end; i++) rows.push({ node: items[i]!, index: i });\n return { rows, above: sc, below: items.length - end };\n}\n\nfunction findRoot(token: string): PaletteNode | undefined {\n return listPaletteRoots(\"repl\").find((n) => n.token === token);\n}\n\nfunction findChild(parent: PaletteNode | undefined, token: string): PaletteNode | undefined {\n return parent?.children?.find((n) => n.token === token);\n}\n\n/**\n * \u5F53\u524D token \u662F\u5426\u843D\u5728\u300C`=` \u7ED3\u5C3E\u300D\u7684\u81EA\u7531\u53C2\u6570\u4E0A\uFF08\u5982 `--experiments=beta,upcoming`\uFF09\u3002\n * \u8FD9\u7C7B\u503C\u4E0E\u524D\u7F00\u662F\u540C\u4E00\u4E2A token\uFF0C\u9762\u677F\u5E94\u5728\u5199\u5B8C\u524D\u7F00\u540E\u6536\u8D77\u3002\n */\nfunction matchesGluedFreeArg(parent: PaletteNode | undefined, token: string): boolean {\n if (!parent?.children?.length || !token) return false;\n return parent.children.some((n) => n.freeArgs && n.token.endsWith(\"=\") && token.startsWith(n.token));\n}\n\n/**\n * \u662F\u5426\u5DF2\u8FDB\u5165\u81EA\u7531\u53C2\u6570\u5C3E\u90E8\uFF08\u5982 /send bds \u2026\uFF09\u3002\n * \u8DEF\u5F84\u843D\u5728 freeArgs \u53F6\u4E0A\uFF0C\u6216\u53F6\u4E4B\u540E\u8FD8\u6709\u65E0\u6CD5\u5339\u914D\u7684\u591A\u4F59 token\uFF0C\u5747\u89C6\u4E3A\u81EA\u7531\u8F93\u5165\u3002\n */\nfunction inFreeArgTail(committed: string[]): boolean {\n let node: PaletteNode | undefined;\n for (let i = 0; i < committed.length; i++) {\n const next = i === 0 ? findRoot(committed[i]!) : findChild(node, committed[i]!);\n if (!next) {\n return Boolean(node?.freeArgs && !node.children?.length);\n }\n node = next;\n }\n return Boolean(node?.freeArgs && !node.children?.length);\n}\n\n/**\n * \u547D\u4EE4\u8DEF\u5F84\u662F\u5426\u5DF2\u5230\u672B\u5C3E\uFF08\u65E0\u66F4\u591A\u56FA\u5B9A\u5B50\u53C2\u53EF\u9009\uFF09\u2192 \u5E94\u5173\u95ED\u9762\u677F\u3002\n * \u672B\u5C3E = \u7CBE\u786E\u5339\u914D\u5230\u65E0 children \u7684\u8282\u70B9\uFF0C\u6216\u5DF2\u8FDB\u5165 freeArgs \u6B63\u6587\u3002\n */\nexport function isCommandAtEnd(committed: string[], partial: string, trailingSpace: boolean): boolean {\n if (inFreeArgTail(committed)) return true;\n\n const path = trailingSpace ? committed : partial ? [...committed, partial] : committed;\n if (path.length === 0) return false;\n\n let node: PaletteNode | undefined;\n for (let i = 0; i < path.length; i++) {\n const next = i === 0 ? findRoot(path[i]!) : findChild(node, path[i]!);\n if (!next) return matchesGluedFreeArg(node, path[i]!);\n node = next;\n }\n if (!node || (node.children?.length ?? 0) > 0) return false;\n /* \u6700\u540E\u4E00\u6BB5\u5FC5\u987B\u4E0E\u8282\u70B9 token \u5B8C\u5168\u4E00\u81F4\uFF08\u534A\u8BCD\u524D\u7F00\u4E0D\u7B97\u5230\u672B\u5C3E\uFF09 */\n return path[path.length - 1] === node.token;\n}\n\n/**\n * \u4EC5\u7531\u8F93\u5165\u884C\u63A8\u5BFC\u5217\uFF1B\u5217\u5185\u59CB\u7EC8\u4FDD\u7559\u5168\u91CF\u9879\uFF0Cpartial \u53EA\u8C03\u6574\u6392\u5E8F\u6743\u91CD\u3002\n * \u5B50\u5217\u51FA\u73B0\u6761\u4EF6\uFF1A\u5DF2\u63D0\u4EA4\u4E0A\u4E00\u53C2\u6570\uFF08\u5C06\u8981\u8F93\u5165\u4E0B\u4E00\u53C2\u6570\uFF09\u3002\n */\nexport function resolvePaletteView(line: string, sels: number[], scrolls: number[]): PaletteView {\n const { committed, partial, trailingSpace } = parseSlashLine(line);\n const roots = listPaletteRoots(\"repl\");\n\n /* \u547D\u4EE4\u5DF2\u5230\u672B\u5C3E \u2192 \u7ACB\u5373\u5173\u95ED\u9762\u677F */\n if (isCommandAtEnd(committed, partial, trailingSpace)) {\n return { columns: [], active: 0, committed, partial, trailingSpace, hidden: true };\n }\n\n const columns: PaletteColumn[] = [];\n const onRoot = committed.length === 0;\n /* \u4E3B\u5217\uFF1A\u59CB\u7EC8\u5168\u91CF\uFF1B\u4EC5\u5728\u7F16\u8F91\u9996\u53C2\u65F6\u6309 partial \u63D0\u6743 */\n const mainQuery = onRoot ? partial : \"\";\n const mainItems = rankItems(roots, mainQuery);\n let mainSel = clampPaletteSelection(sels[0] ?? 0, mainItems.length);\n if (!onRoot) {\n const idx = mainItems.findIndex((n) => n.token === committed[0]);\n if (idx >= 0) mainSel = idx;\n } else if (partial) {\n /* \u6709\u534A\u8BCD\u65F6\u9ED8\u8BA4\u843D\u5728\u6743\u91CD\u6700\u9AD8\u9879\uFF08\u5217\u8868\u5934\uFF09 */\n mainSel = clampPaletteSelection(sels[0] ?? 0, mainItems.length);\n }\n columns.push({\n items: mainItems,\n selected: mainSel,\n scroll: ensurePaletteScroll(mainSel, scrolls[0] ?? 0, mainItems.length),\n });\n\n let parent: PaletteNode | undefined = onRoot ? undefined : findRoot(committed[0]!);\n for (let d = 1; parent?.children?.length && committed.length >= d; d++) {\n const pathTok = committed[d];\n const q = committed.length > d ? \"\" : trailingSpace ? \"\" : partial;\n const childItems = rankItems(parent.children, q);\n\n let sel = clampPaletteSelection(sels[d] ?? 0, childItems.length);\n if (pathTok) {\n const idx = childItems.findIndex((n) => n.token === pathTok);\n if (idx >= 0) sel = idx;\n }\n\n columns.push({\n items: childItems,\n selected: sel,\n scroll: ensurePaletteScroll(sel, scrolls[d] ?? 0, childItems.length),\n });\n\n parent = pathTok && committed.length > d ? findChild(parent, pathTok) : childItems[sel];\n\n if (committed.length === d && !trailingSpace) break;\n if (!parent?.children?.length) break;\n }\n\n return {\n columns,\n active: Math.max(0, columns.length - 1),\n committed,\n partial,\n trailingSpace,\n hidden: false,\n };\n}\n\nfunction formatColumnLines(col: PaletteColumn, level: number, activeCol: boolean, query: string): string[] {\n const lines: string[] = [];\n const style = cellStyle(false, level, activeCol);\n if (col.items.length === 0) {\n lines.push(\n paintSeg(style.bg, style.fg, \" \") +\n paintSeg(style.bg, style.fg, clipPad(t(\"repl.palette.empty\"), INNER_WIDTH)) +\n paintSeg(style.bg, style.fg, \" \")\n );\n return lines;\n }\n const { rows, above, below } = pageSlice(col.items, col.selected, col.scroll);\n if (above > 0) {\n lines.push(\n paintSeg(style.bg, style.fg, \" \") +\n paintSeg(style.bg, style.fg, clipPad(`\u2191${above}\u2026`, INNER_WIDTH)) +\n paintSeg(style.bg, style.fg, \" \")\n );\n }\n for (const { node, index } of rows) {\n lines.push(paintCell(node, index === col.selected, level, activeCol, query));\n }\n if (below > 0) {\n lines.push(\n paintSeg(style.bg, style.fg, \" \") +\n paintSeg(style.bg, style.fg, clipPad(`\u2193${below}\u2026`, INNER_WIDTH)) +\n paintSeg(style.bg, style.fg, \" \")\n );\n }\n return lines;\n}\n\nexport function formatPaletteCascadeLines(view: PaletteView, indentCols: number): string[] {\n if (view.hidden || view.columns.length === 0) return [];\n const indent = \" \".repeat(Math.max(0, indentCols));\n const colLines = view.columns.map((col, i) =>\n formatColumnLines(col, i, i === view.active, i === view.active ? view.partial : \"\")\n );\n const height = Math.max(1, ...colLines.map((l) => l.length));\n const out: string[] = [];\n for (let r = 0; r < height; r++) {\n const parts: string[] = [];\n for (let cidx = 0; cidx < view.columns.length; cidx++) {\n const activeCol = cidx === view.active;\n const cell = colLines[cidx]![r] ?? blankCell(cidx, activeCol);\n const plainW = visibleWidth(cell);\n parts.push(plainW < PANEL_WIDTH ? cell + \" \".repeat(PANEL_WIDTH - plainW) : cell);\n }\n out.push(indent + parts.join(PANEL_GAP));\n }\n return out;\n}\n\nexport function activeNode(view: PaletteView): PaletteNode | undefined {\n if (view.hidden) return undefined;\n const col = view.columns[view.active];\n if (!col || col.items.length === 0) return undefined;\n return col.items[clampPaletteSelection(col.selected, col.items.length)];\n}\n\n/** \u7070\u5B57\uFF1A\u9009\u4E2D\u9879\u76F8\u5BF9\u5F53\u524D\u534A\u8BCD\u7684\u540E\u7F00 */\nexport function paletteGhost(view: PaletteView): string {\n const node = activeNode(view);\n if (!node || view.hidden) return \"\";\n /* \u8DEF\u5F84\u5DF2\u5199\u8FC7\u672C\u5C42 \u2192 \u65E0\u7070\u5B57 */\n if (view.committed.length > view.active) return \"\";\n const p = view.partial;\n const tok = node.token;\n if (!p) return tok;\n if (tok.toLowerCase().startsWith(p.toLowerCase())) return tok.slice(p.length);\n return \"\";\n}\n\n/**\n * \u56DE\u8F66\u5199\u5165\u9009\u4E2D\u9879\uFF1B\u6709\u5B50\u53C2\u6216\u81EA\u7531\u53C2\u5219\u8865\u5C3E\u7A7A\u683C\u3002\n * \u82E5\u884C\u5DF2\u662F\u8BE5\u53F6\u8282\u70B9\u5B8C\u6574\u5185\u5BB9 \u2192 submit\u3002\n */\nexport function commitSelection(line: string, view: PaletteView): { line: string; submit: boolean } {\n if (view.hidden || view.columns.length === 0) {\n return { line, submit: true };\n }\n const node = activeNode(view);\n if (!node) return { line, submit: true };\n\n const { committed, partial, trailingSpace, active } = view;\n\n /* \u7A7A token = \u76F4\u63A5\u8FD0\u884C\u7236\u547D\u4EE4\uFF0C\u4E0D\u628A\u5360\u4F4D\u6807\u7B7E\u5199\u8FDB\u547D\u4EE4\u884C */\n if (node.token === \"\") {\n const base = committed.slice(0, active);\n return { line: base.length ? `/${base.join(\" \")}` : \"/\", submit: true };\n }\n\n /* \u53F6\u8282\u70B9\u4E14\u8F93\u5165\u5DF2\u5B8C\u6574\u5339\u914D \u2192 \u63D0\u4EA4\u6267\u884C */\n const isLeaf = !node.children?.length && !node.freeArgs;\n if (isLeaf && !trailingSpace) {\n if (committed.length === active && partial === node.token) {\n return { line: \"/\" + [...committed, node.token].join(\" \"), submit: true };\n }\n if (committed.length === active + 1 && committed[active] === node.token && !partial) {\n return { line, submit: true };\n }\n }\n\n const tokens = committed.slice(0, active);\n tokens.push(node.token);\n let next = \"/\" + tokens.join(\" \");\n /* `=` \u7ED3\u5C3E\u7684\u81EA\u7531\u53C2\u6570\u4E0D\u8865\u7A7A\u683C\uFF0C\u907F\u514D\u628A `--experiments=beta` \u62C6\u6210\u4E24\u4E2A token */\n const glue = node.freeArgs && node.token.endsWith(\"=\");\n if ((node.children?.length || node.freeArgs) && !glue) next += \" \";\n return { line: next, submit: false };\n}\n\nexport function promptSlashColumn(prompt: string): number {\n return visibleWidth(prompt);\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -58,18 +58,30 @@ export declare function listVisiblePacksSubs(mode: CommandMode): string[];
58
58
  export type PaletteNode = {
59
59
  /** 面板内显示的标签 */
60
60
  label: string;
61
- /** 追加到命令行的 token(根节点含或不含前导逻辑由组装负责) */
61
+ /**
62
+ * 追加到命令行的 token。
63
+ * 空字符串表示「直接运行」:不追加参数,回车提交已经写好的父命令。
64
+ */
62
65
  token: string;
63
66
  /** i18n 描述键 */
64
67
  descKey?: string;
65
68
  accent?: CommandAccent;
66
69
  /** 固定下一参选项;回车后在右侧展开 */
67
70
  children?: PaletteNode[];
68
- /** 无 children 时仍需自由输入(回车后填入空格继续打字) */
71
+ /**
72
+ * 无 children 时仍需自由输入(回车后填入空格继续打字)。
73
+ * token 以 `=` 结尾时不补空格,后续字符粘在同一 token 上(如 `--experiments=beta,upcoming`)。
74
+ */
69
75
  freeArgs?: boolean;
70
76
  };
71
77
  /** 层级命令树(REPL 面板主列) */
72
78
  export declare function listPaletteRoots(mode?: CommandMode): PaletteNode[];
79
+ /**
80
+ * 已提交路径的下一参 token,供非 `/` 灰字补全与面板共用同一棵树。
81
+ * 没有对应节点时返回 null;节点存在但没有子项时返回空数组。
82
+ * 「直接运行」的空 token 不出现在补全里。
83
+ */
84
+ export declare function listNextPaletteTokens(path: readonly string[], mode?: CommandMode): string[] | null;
73
85
  export declare function isDevAccent(spec: CommandSpec | undefined): boolean;
74
86
  /** sub 是否为开发者样式命令(蓝标)。 */
75
87
  export declare function isDevAccentModuleSub(sub: string | undefined): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"command-surface.d.ts","sourceRoot":"","sources":["../src/command-surface.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,CAAC;AAC7C,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;AAC1C,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC;AAElC,MAAM,MAAM,WAAW,GAAG;IACxB,kDAAkD;IAClD,EAAE,EAAE,MAAM,CAAC;IACX,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,cAAc,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sBAAsB;IACtB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,SAAS,CAAC;AAEtD,MAAM,MAAM,YAAY,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAElF,uDAAuD;AACvD,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAW9D,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMjE,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAKrF;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAG/E;AAOD,kCAAkC;AAClC,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,GAAG,YAAY,CAQjF;AAED,4BAA4B;AAC5B,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,EAAE,CAEpE;AAED,uCAAuC;AACvC,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,EAAE,CAUpE;AAED,gDAAgD;AAChD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAOjF;AAED,0BAA0B;AAC1B,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAKlF;AAED,yBAAyB;AACzB,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAKjF;AAED,kDAAkD;AAClD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,EAAE,CAIjE;AAED,+BAA+B;AAC/B,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,EAAE,CAIhE;AAED,kCAAkC;AAClC,MAAM,MAAM,WAAW,GAAG;IACxB,eAAe;IACf,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,eAAe;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAyFF,uBAAuB;AACvB,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,WAAoB,GAAG,WAAW,EAAE,CAyD1E;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,CAElE;AAED,0BAA0B;AAC1B,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAErE;AAED,oCAAoC;AACpC,wBAAgB,QAAQ,IAAI,OAAO,CAElC;AAED;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EA0D/C,CAAC"}
1
+ {"version":3,"file":"command-surface.d.ts","sourceRoot":"","sources":["../src/command-surface.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { stdin } from "node:process";
2
+ import { t } from "./i18n/index.js";
2
3
  const TOP_LEVEL_ALIASES = {
3
4
  mod: "module",
4
5
  addon: "packs",
@@ -151,14 +152,100 @@ function moduleChildNodes(mode) {
151
152
  return node;
152
153
  });
153
154
  }
155
+ function asIsNode(descKey, labelKey = "palette.asIs") {
156
+ return { label: t(labelKey), token: "", descKey };
157
+ }
158
+ function uiChildNodes() {
159
+ return [
160
+ { label: "studio", token: "studio", descKey: "help.ui.studio" },
161
+ { label: "stop", token: "stop", descKey: "help.ui.stop" }
162
+ ];
163
+ }
164
+ function debugChildNodes() {
165
+ return [
166
+ { label: "status", token: "status", descKey: "help.debug.status" },
167
+ { label: "enable", token: "enable", descKey: "help.debug.toggle" },
168
+ { label: "disable", token: "disable", descKey: "help.debug.toggle" },
169
+ {
170
+ label: "sentry",
171
+ token: "sentry",
172
+ descKey: "help.debug.sentry",
173
+ children: [
174
+ {
175
+ label: "on",
176
+ token: "on",
177
+ descKey: "help.debug.sentry.on",
178
+ children: [{ label: "--dsn=", token: "--dsn=", descKey: "help.debug.sentry.on", freeArgs: true }]
179
+ },
180
+ { label: "off", token: "off", descKey: "help.debug.sentry.off" }
181
+ ]
182
+ }
183
+ ];
184
+ }
185
+ function daemonChildNodes() {
186
+ return [
187
+ { label: "status", token: "status", descKey: "help.daemon.status" },
188
+ { label: "stop", token: "stop", descKey: "help.daemon.stop" }
189
+ ];
190
+ }
191
+ function localeChildNodes() {
192
+ return [
193
+ asIsNode("help.locale", "palette.localeCurrent"),
194
+ { label: "zh-CN", token: "zh-CN", descKey: "locale.opt.zh" },
195
+ { label: "en", token: "en", descKey: "locale.opt.en" }
196
+ ];
197
+ }
198
+ function updateChildNodes() {
199
+ return [
200
+ asIsNode("help.update"),
201
+ { label: "--check-only", token: "--check-only", descKey: "help.update.checkOnly" },
202
+ { label: "--force", token: "--force", descKey: "help.update.force" },
203
+ { label: "--no-start", token: "--no-start", descKey: "help.update.noStart" },
204
+ { label: "--channel=release", token: "--channel=release", descKey: "help.update.channelRelease" },
205
+ { label: "--channel=preview", token: "--channel=preview", descKey: "help.update.channelPreview" }
206
+ ];
207
+ }
208
+ function doctorNode() {
209
+ const experimentList = {
210
+ label: "--experiments=",
211
+ token: "--experiments=",
212
+ descKey: "help.packs.doctor.experimentsList",
213
+ freeArgs: true
214
+ };
215
+ const allExperiments = {
216
+ label: "--all-experiments",
217
+ token: "--all-experiments",
218
+ descKey: "help.packs.doctor.allExperiments"
219
+ };
220
+ return {
221
+ label: "doctor",
222
+ token: "doctor",
223
+ descKey: "help.packs.doctor",
224
+ children: [
225
+ asIsNode("help.packs.doctor"),
226
+ {
227
+ label: "--fix",
228
+ token: "--fix",
229
+ descKey: "help.packs.doctor.fix",
230
+ children: [asIsNode("help.packs.doctor.fix", "palette.fixOnly"), allExperiments, experimentList]
231
+ },
232
+ allExperiments,
233
+ { label: "--experiments", token: "--experiments", descKey: "help.packs.doctor.experiments" },
234
+ experimentList
235
+ ]
236
+ };
237
+ }
154
238
  function packsChildNodes(mode) {
155
239
  const noArg = /* @__PURE__ */ new Set(["list", "path", "sources"]);
156
- return listVisiblePacksSubs(mode).map((sub) => ({
157
- label: sub,
158
- token: sub,
159
- descKey: PACKS_DESC[sub] ?? "help.addon",
160
- freeArgs: !noArg.has(sub)
161
- }));
240
+ return listVisiblePacksSubs(mode).map((sub) => {
241
+ if (sub === "doctor") return doctorNode();
242
+ return {
243
+ label: sub,
244
+ token: sub,
245
+ descKey: PACKS_DESC[sub] ?? "help.addon",
246
+ freeArgs: !noArg.has(sub)
247
+ };
248
+ });
162
249
  }
163
250
  function listPaletteRoots(mode = "repl") {
164
251
  const specs = listVisibleCommands(mode);
@@ -185,6 +272,16 @@ function listPaletteRoots(mode = "repl") {
185
272
  token: n,
186
273
  freeArgs: true
187
274
  }));
275
+ } else if (s.name === "ui") {
276
+ node.children = uiChildNodes();
277
+ } else if (s.name === "debug") {
278
+ node.children = debugChildNodes();
279
+ } else if (s.name === "daemon") {
280
+ node.children = daemonChildNodes();
281
+ } else if (s.name === "locale") {
282
+ node.children = localeChildNodes();
283
+ } else if (s.name === "update") {
284
+ node.children = updateChildNodes();
188
285
  } else if (!NO_ARG_TOP.has(s.name)) {
189
286
  node.freeArgs = true;
190
287
  }
@@ -210,6 +307,20 @@ function listPaletteRoots(mode = "repl") {
210
307
  }
211
308
  return out;
212
309
  }
310
+ function listNextPaletteTokens(path, mode = "repl") {
311
+ if (path.length === 0) return null;
312
+ let current = listPaletteRoots(mode).find((n) => n.token === path[0]);
313
+ if (!current) return null;
314
+ for (let i = 1; i < path.length; i++) {
315
+ const token = path[i] ?? "";
316
+ const children = current.children ?? [];
317
+ current = children.find((child) => child.token === token);
318
+ if (!current) return null;
319
+ }
320
+ const kids = current.children;
321
+ if (!kids?.length) return [];
322
+ return kids.map((child) => child.token).filter((token) => token.length > 0);
323
+ }
213
324
  function isDevAccent(spec) {
214
325
  return spec?.accent === "dev";
215
326
  }
@@ -285,6 +396,7 @@ export {
285
396
  isCliTty,
286
397
  isDevAccent,
287
398
  isDevAccentModuleSub,
399
+ listNextPaletteTokens,
288
400
  listPaletteRoots,
289
401
  listVisibleCommands,
290
402
  listVisibleModuleSubs,
@@ -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 debug: \"help.debug.status\",\n ui: \"help.ui\",\n daemon: \"help.daemon\",\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\", \"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: \"daemon\", name: \"daemon\", channel: \"both\" },\n { id: \"debug\", name: \"debug\", channel: \"both\", accent: \"dev\" },\n { id: \"ui\", name: \"ui\", 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\";\nimport { t } from \"./i18n/index.js\";\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 /**\n * \u8FFD\u52A0\u5230\u547D\u4EE4\u884C\u7684 token\u3002\n * \u7A7A\u5B57\u7B26\u4E32\u8868\u793A\u300C\u76F4\u63A5\u8FD0\u884C\u300D\uFF1A\u4E0D\u8FFD\u52A0\u53C2\u6570\uFF0C\u56DE\u8F66\u63D0\u4EA4\u5DF2\u7ECF\u5199\u597D\u7684\u7236\u547D\u4EE4\u3002\n */\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 /**\n * \u65E0 children \u65F6\u4ECD\u9700\u81EA\u7531\u8F93\u5165\uFF08\u56DE\u8F66\u540E\u586B\u5165\u7A7A\u683C\u7EE7\u7EED\u6253\u5B57\uFF09\u3002\n * token \u4EE5 `=` \u7ED3\u5C3E\u65F6\u4E0D\u8865\u7A7A\u683C\uFF0C\u540E\u7EED\u5B57\u7B26\u7C98\u5728\u540C\u4E00 token \u4E0A\uFF08\u5982 `--experiments=beta,upcoming`\uFF09\u3002\n */\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 ui: \"help.ui\",\n daemon: \"help.daemon\",\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\n/**\n * \u300C\u76F4\u63A5\u8FD0\u884C\u300D\u9879\uFF1Atoken \u4E3A\u7A7A\uFF0C\u56DE\u8F66\u63D0\u4EA4\u5DF2\u7ECF\u5199\u597D\u7684\u7236\u547D\u4EE4\u3002\n * \u7528\u5728\u65E0\u53C2\u672C\u8EAB\u5C31\u662F\u5408\u6CD5\u547D\u4EE4\u3001\u540C\u65F6\u8FD8\u8981\u5C55\u5F00\u53EF\u9009\u5F00\u5173\u7684\u8282\u70B9\u4E0A\u3002\n */\nfunction asIsNode(descKey: string, labelKey: \"palette.asIs\" | \"palette.fixOnly\" | \"palette.localeCurrent\" = \"palette.asIs\"): PaletteNode {\n return { label: t(labelKey), token: \"\", descKey };\n}\n\n/** `/ui` \u7684\u56FA\u5B9A\u5B50\u547D\u4EE4\uFF08studio \u542F\u52A8\u7F16\u8F91\u5668\uFF0Cstop \u505C\u6389\u5F53\u524D\u8FDB\u7A0B\u5185\u7684\u670D\u52A1\uFF09\u3002 */\nfunction uiChildNodes(): PaletteNode[] {\n return [\n { label: \"studio\", token: \"studio\", descKey: \"help.ui.studio\" },\n { label: \"stop\", token: \"stop\", descKey: \"help.ui.stop\" },\n ];\n}\n\n/** `/debug` \u7684\u56FA\u5B9A\u5B50\u547D\u4EE4\uFF1Bsentry on \u4E4B\u540E\u8FD8\u8981\u7C98\u4E0A `--dsn=`\u3002 */\nfunction debugChildNodes(): PaletteNode[] {\n return [\n { label: \"status\", token: \"status\", descKey: \"help.debug.status\" },\n { label: \"enable\", token: \"enable\", descKey: \"help.debug.toggle\" },\n { label: \"disable\", token: \"disable\", descKey: \"help.debug.toggle\" },\n {\n label: \"sentry\",\n token: \"sentry\",\n descKey: \"help.debug.sentry\",\n children: [\n {\n label: \"on\",\n token: \"on\",\n descKey: \"help.debug.sentry.on\",\n children: [{ label: \"--dsn=\", token: \"--dsn=\", descKey: \"help.debug.sentry.on\", freeArgs: true }],\n },\n { label: \"off\", token: \"off\", descKey: \"help.debug.sentry.off\" },\n ],\n },\n ];\n}\n\n/** `/daemon` \u7684\u56FA\u5B9A\u5B50\u547D\u4EE4\u3002\u65E0\u53C2\u7B49\u4EF7\u4E8E status\uFF0C\u9762\u677F\u91CC\u4ECD\u5355\u5217\u51FA\u6765\u3002 */\nfunction daemonChildNodes(): PaletteNode[] {\n return [\n { label: \"status\", token: \"status\", descKey: \"help.daemon.status\" },\n { label: \"stop\", token: \"stop\", descKey: \"help.daemon.stop\" },\n ];\n}\n\n/** `/locale` \u7684\u53EF\u9009\u8BED\u8A00\uFF1B\u7B2C\u4E00\u9879\u4E0D\u5E26\u53C2\u6570\uFF0C\u53EA\u6253\u5370\u5F53\u524D\u8BED\u8A00\u3002 */\nfunction localeChildNodes(): PaletteNode[] {\n return [\n asIsNode(\"help.locale\", \"palette.localeCurrent\"),\n { label: \"zh-CN\", token: \"zh-CN\", descKey: \"locale.opt.zh\" },\n { label: \"en\", token: \"en\", descKey: \"locale.opt.en\" },\n ];\n}\n\n/** `/update` \u7684\u5DF2\u77E5\u5F00\u5173\u3002\u65E0\u53C2\u5C31\u662F\u68C0\u67E5\u5E76\u66F4\u65B0\u3002 */\nfunction updateChildNodes(): PaletteNode[] {\n return [\n asIsNode(\"help.update\"),\n { label: \"--check-only\", token: \"--check-only\", descKey: \"help.update.checkOnly\" },\n { label: \"--force\", token: \"--force\", descKey: \"help.update.force\" },\n { label: \"--no-start\", token: \"--no-start\", descKey: \"help.update.noStart\" },\n { label: \"--channel=release\", token: \"--channel=release\", descKey: \"help.update.channelRelease\" },\n { label: \"--channel=preview\", token: \"--channel=preview\", descKey: \"help.update.channelPreview\" },\n ];\n}\n\n/**\n * `packs doctor` \u7684\u5F00\u5173\u3002\n * \u65E0\u53C2\u53EA\u8BCA\u65AD\uFF1B`--experiments=` \u540E\u9762\u7684\u522B\u540D\u7C98\u5728\u540C\u4E00\u4E2A token \u4E0A\u3002\n */\nfunction doctorNode(): PaletteNode {\n const experimentList: PaletteNode = {\n label: \"--experiments=\",\n token: \"--experiments=\",\n descKey: \"help.packs.doctor.experimentsList\",\n freeArgs: true,\n };\n const allExperiments: PaletteNode = {\n label: \"--all-experiments\",\n token: \"--all-experiments\",\n descKey: \"help.packs.doctor.allExperiments\",\n };\n return {\n label: \"doctor\",\n token: \"doctor\",\n descKey: \"help.packs.doctor\",\n children: [\n asIsNode(\"help.packs.doctor\"),\n {\n label: \"--fix\",\n token: \"--fix\",\n descKey: \"help.packs.doctor.fix\",\n children: [asIsNode(\"help.packs.doctor.fix\", \"palette.fixOnly\"), allExperiments, experimentList],\n },\n allExperiments,\n { label: \"--experiments\", token: \"--experiments\", descKey: \"help.packs.doctor.experiments\" },\n experimentList,\n ],\n };\n}\n\nfunction packsChildNodes(mode: CommandMode): PaletteNode[] {\n const noArg = new Set([\"list\", \"path\", \"sources\"]);\n return listVisiblePacksSubs(mode).map((sub) => {\n if (sub === \"doctor\") return doctorNode();\n return {\n label: sub,\n token: sub,\n descKey: PACKS_DESC[sub] ?? \"help.addon\",\n freeArgs: !noArg.has(sub),\n };\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 (s.name === \"ui\") {\n node.children = uiChildNodes();\n } else if (s.name === \"debug\") {\n node.children = debugChildNodes();\n } else if (s.name === \"daemon\") {\n node.children = daemonChildNodes();\n } else if (s.name === \"locale\") {\n node.children = localeChildNodes();\n } else if (s.name === \"update\") {\n node.children = updateChildNodes();\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\n/**\n * \u5DF2\u63D0\u4EA4\u8DEF\u5F84\u7684\u4E0B\u4E00\u53C2 token\uFF0C\u4F9B\u975E `/` \u7070\u5B57\u8865\u5168\u4E0E\u9762\u677F\u5171\u7528\u540C\u4E00\u68F5\u6811\u3002\n * \u6CA1\u6709\u5BF9\u5E94\u8282\u70B9\u65F6\u8FD4\u56DE null\uFF1B\u8282\u70B9\u5B58\u5728\u4F46\u6CA1\u6709\u5B50\u9879\u65F6\u8FD4\u56DE\u7A7A\u6570\u7EC4\u3002\n * \u300C\u76F4\u63A5\u8FD0\u884C\u300D\u7684\u7A7A token \u4E0D\u51FA\u73B0\u5728\u8865\u5168\u91CC\u3002\n */\nexport function listNextPaletteTokens(path: readonly string[], mode: CommandMode = \"repl\"): string[] | null {\n if (path.length === 0) return null;\n let current: PaletteNode | undefined = listPaletteRoots(mode).find((n) => n.token === path[0]);\n if (!current) return null;\n for (let i = 1; i < path.length; i++) {\n const token = path[i] ?? \"\";\n const children: readonly PaletteNode[] = current.children ?? [];\n current = children.find((child) => child.token === token);\n if (!current) return null;\n }\n const kids = current.children;\n if (!kids?.length) return [];\n return kids.map((child) => child.token).filter((token) => token.length > 0);\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: \"daemon\", name: \"daemon\", channel: \"both\" },\n { id: \"debug\", name: \"debug\", channel: \"both\", accent: \"dev\" },\n { id: \"ui\", name: \"ui\", 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":"AAAA;;;;;;;;;GASG;AAiBH,OAAO,EAAuD,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AA8DtG;;;;GAIG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAcjD;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,GAAG,MAAM,CA+C7F;AAkBD;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE3D;AA4CD;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE1D;AAqED,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE3E;AA8BD;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE7D;AA6BD;;;;GAIG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAEnD;AAmCD;;;;GAIG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAElD;AASD;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAAC,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAEpE"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAYH,OAAO,EAAuD,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAyCtG;;;;GAIG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAYjD;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,GAAG,MAAM,CA+C7F;AAkBD;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE3D;AA4CD;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE1D;AAqED,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE3E;AA8BD;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE7D;AA6BD;;;;GAIG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAEnD;AAmCD;;;;GAIG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAElD;AASD;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAAC,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAEpE"}
package/dist/commands.js CHANGED
@@ -1,11 +1,7 @@
1
1
  import { clearBdsPidFile, killBedrockServerByImage, probeBdsStatus } from "@sfmc-bds/bds-tools/process-probe";
2
2
  import { stripTaskbarOsc } from "@sfmc-bds/bds-tools/taskbar";
3
3
  import { didUpdateDeploy } from "@sfmc-bds/bds-tools/update-result";
4
- import {
5
- DEFAULT_QQ_CONFIG,
6
- loadEnsuredConfig,
7
- qqRuntimeStatusPath
8
- } from "@sfmc-bds/sdk/node/config";
4
+ import { qqRuntimeStatusPath } from "@sfmc-bds/sdk/node/config";
9
5
  import fs from "node:fs";
10
6
  import { isDaemonServer } from "./daemon/role.js";
11
7
  import { t } from "./i18n/index.js";
@@ -35,26 +31,6 @@ function statusLine(name, running, pid, uptime, ownership) {
35
31
  const upStr = uptime !== "\u2014" ? c.dim(uptime) : c.dim("\u2014");
36
32
  return ` ${dot} ${c.bold(padRight(name, 14))} ${padRight(state, 8)} ${padRight(owner, 6)} ${padRight(pidStr, 8)} ${upStr}`;
37
33
  }
38
- function qqBridgeStatusFooter() {
39
- const qqCfg = loadEnsuredConfig(ROOT, "qq_config.json", "qq_config", { ...DEFAULT_QQ_CONFIG });
40
- const backend = qqCfg.qq_backend === "llbot" ? "llbot" : "official";
41
- const enabled = qqCfg.qq_enabled !== false;
42
- if (backend === "llbot") {
43
- const group = qqCfg.llbot?.group_id || "\u2014";
44
- const pathHint = qqCfg.llbot?.path ? String(qqCfg.llbot.path) : "\u2014";
45
- return `
46
- ${c.dim(t("svc.qq.footer.llbot", { enabled: enabled ? "on" : "off", group, path: pathHint }))}
47
- `;
48
- }
49
- const appId = String(qqCfg.official?.app_id ?? "").trim();
50
- const appIdHint = appId ? appId.length > 8 ? `${appId.slice(0, 4)}\u2026${appId.slice(-4)}` : appId : "\u2014";
51
- const openid = String(qqCfg.official?.group_openid ?? "").trim() || "\u2014";
52
- const sandbox = qqCfg.official?.sandbox ? "sandbox" : "prod";
53
- const creds = appId && String(qqCfg.official?.app_secret ?? "").trim() ? "ok" : "missing";
54
- return `
55
- ${c.dim(t("svc.qq.footer.official", { enabled: enabled ? "on" : "off", appId: appIdHint, openid, sandbox, creds }))}
56
- `;
57
- }
58
34
  async function cmdStatus() {
59
35
  return viaDaemonText("status", async () => {
60
36
  const rows = await queryServicesRuntime();
@@ -67,7 +43,7 @@ async function cmdStatus() {
67
43
  const header = ` ${padRight(nameH, 16)}${padRight(statusH, 8)}${padRight(ownerH, 6)}${padRight(pidH, 8)}${upH}`;
68
44
  return `
69
45
  ${c.bold(t("svc.header"))}
70
- ` + c.dim(header) + "\n" + DIVIDER + "\n" + lines.join("\n") + qqBridgeStatusFooter();
46
+ ` + c.dim(header) + "\n" + DIVIDER + "\n" + lines.join("\n");
71
47
  });
72
48
  }
73
49
  function cmdLogs(args, onFollow) {