@sfmc-bds/cli 0.2.2 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/dist/command-palette.d.ts.map +1 -1
  2. package/dist/command-palette.js +11 -2
  3. package/dist/command-palette.js.map +2 -2
  4. package/dist/command-surface.d.ts +14 -2
  5. package/dist/command-surface.d.ts.map +1 -1
  6. package/dist/command-surface.js +120 -6
  7. package/dist/command-surface.js.map +2 -2
  8. package/dist/commands.d.ts.map +1 -1
  9. package/dist/commands.js +45 -38
  10. package/dist/commands.js.map +2 -2
  11. package/dist/daemon/client.d.ts +67 -0
  12. package/dist/daemon/client.d.ts.map +1 -0
  13. package/dist/daemon/client.js +272 -0
  14. package/dist/daemon/client.js.map +7 -0
  15. package/dist/daemon/paths.d.ts +35 -0
  16. package/dist/daemon/paths.d.ts.map +1 -0
  17. package/dist/daemon/paths.js +69 -0
  18. package/dist/daemon/paths.js.map +7 -0
  19. package/dist/daemon/protocol.d.ts +66 -0
  20. package/dist/daemon/protocol.d.ts.map +1 -0
  21. package/dist/daemon/protocol.js +16 -0
  22. package/dist/daemon/protocol.js.map +7 -0
  23. package/dist/daemon/role.d.ts +13 -0
  24. package/dist/daemon/role.d.ts.map +1 -0
  25. package/dist/daemon/role.js +12 -0
  26. package/dist/daemon/role.js.map +7 -0
  27. package/dist/daemon/server.d.ts +12 -0
  28. package/dist/daemon/server.d.ts.map +1 -0
  29. package/dist/daemon/server.js +221 -0
  30. package/dist/daemon/server.js.map +7 -0
  31. package/dist/help-text.d.ts.map +1 -1
  32. package/dist/help-text.js +3 -1
  33. package/dist/help-text.js.map +2 -2
  34. package/dist/i18n/locales/en.d.ts +25 -3
  35. package/dist/i18n/locales/en.d.ts.map +1 -1
  36. package/dist/i18n/locales/en.js +26 -3
  37. package/dist/i18n/locales/en.js.map +2 -2
  38. package/dist/i18n/locales/zh-CN.d.ts.map +1 -1
  39. package/dist/i18n/locales/zh-CN.js +26 -3
  40. package/dist/i18n/locales/zh-CN.js.map +2 -2
  41. package/dist/logs.d.ts +11 -1
  42. package/dist/logs.d.ts.map +1 -1
  43. package/dist/logs.js +8 -0
  44. package/dist/logs.js.map +2 -2
  45. package/dist/main.js +27 -4
  46. package/dist/main.js.map +2 -2
  47. package/dist/module-commands.d.ts.map +1 -1
  48. package/dist/module-commands.js +9 -5
  49. package/dist/module-commands.js.map +2 -2
  50. package/dist/module-fingerprint.d.ts +5 -0
  51. package/dist/module-fingerprint.d.ts.map +1 -1
  52. package/dist/module-fingerprint.js +13 -3
  53. package/dist/module-fingerprint.js.map +2 -2
  54. package/dist/module-sidecars.d.ts +16 -0
  55. package/dist/module-sidecars.d.ts.map +1 -0
  56. package/dist/module-sidecars.js +116 -0
  57. package/dist/module-sidecars.js.map +7 -0
  58. package/dist/repl.d.ts.map +1 -1
  59. package/dist/repl.js +51 -32
  60. package/dist/repl.js.map +3 -3
  61. package/dist/runtime.d.ts +1 -0
  62. package/dist/runtime.d.ts.map +1 -1
  63. package/dist/runtime.js +2 -2
  64. package/dist/runtime.js.map +2 -2
  65. package/dist/services.d.ts +3 -1
  66. package/dist/services.d.ts.map +1 -1
  67. package/dist/services.js +22 -10
  68. package/dist/services.js.map +2 -2
  69. package/dist/world-packs.js.map +1 -1
  70. package/package.json +4 -4
@@ -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":"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"}
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",
@@ -96,6 +97,7 @@ const TOP_DESC = {
96
97
  locale: "help.locale",
97
98
  debug: "help.debug.status",
98
99
  ui: "help.ui",
100
+ daemon: "help.daemon",
99
101
  install: "help.module.install",
100
102
  uninstall: "help.module.uninstall",
101
103
  search: "help.module.search",
@@ -150,14 +152,100 @@ function moduleChildNodes(mode) {
150
152
  return node;
151
153
  });
152
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
+ }
153
238
  function packsChildNodes(mode) {
154
239
  const noArg = /* @__PURE__ */ new Set(["list", "path", "sources"]);
155
- return listVisiblePacksSubs(mode).map((sub) => ({
156
- label: sub,
157
- token: sub,
158
- descKey: PACKS_DESC[sub] ?? "help.addon",
159
- freeArgs: !noArg.has(sub)
160
- }));
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
+ });
161
249
  }
162
250
  function listPaletteRoots(mode = "repl") {
163
251
  const specs = listVisibleCommands(mode);
@@ -184,6 +272,16 @@ function listPaletteRoots(mode = "repl") {
184
272
  token: n,
185
273
  freeArgs: true
186
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();
187
285
  } else if (!NO_ARG_TOP.has(s.name)) {
188
286
  node.freeArgs = true;
189
287
  }
@@ -209,6 +307,20 @@ function listPaletteRoots(mode = "repl") {
209
307
  }
210
308
  return out;
211
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
+ }
212
324
  function isDevAccent(spec) {
213
325
  return spec?.accent === "dev";
214
326
  }
@@ -230,6 +342,7 @@ const COMMAND_SPECS = [
230
342
  { id: "init", name: "init", channel: "both", needsTty: true },
231
343
  { id: "update", name: "update", channel: "both" },
232
344
  { id: "locale", name: "locale", channel: "both" },
345
+ { id: "daemon", name: "daemon", channel: "both" },
233
346
  { id: "debug", name: "debug", channel: "both", accent: "dev" },
234
347
  { id: "ui", name: "ui", channel: "both", accent: "dev" },
235
348
  /** 顶层扁平短命令 → module.*(少写一层 module) */
@@ -283,6 +396,7 @@ export {
283
396
  isCliTty,
284
397
  isDevAccent,
285
398
  isDevAccentModuleSub,
399
+ listNextPaletteTokens,
286
400
  listPaletteRoots,
287
401
  listVisibleCommands,
288
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 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: \"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;AAgBH,OAAO,EAAuD,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AA+CtG;;;;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,CAuC3D;AAED;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgE1D;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAyB3E;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAwB7D;AAED;;;;GAIG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CA8BnD;AAED;;;;GAIG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAIlD;AAED;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAAC,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAkFpE"}
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"}