@sfmc-bds/cli 0.2.0-beta.6 → 0.2.0-beta.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/argv-parse.d.ts +0 -2
- package/dist/argv-parse.d.ts.map +1 -1
- package/dist/argv-parse.js +1 -5
- package/dist/argv-parse.js.map +2 -2
- package/dist/cli-gate.d.ts.map +1 -1
- package/dist/cli-gate.js +0 -2
- package/dist/cli-gate.js.map +2 -2
- package/dist/command-surface.d.ts +5 -12
- package/dist/command-surface.d.ts.map +1 -1
- package/dist/command-surface.js +6 -62
- package/dist/command-surface.js.map +2 -2
- package/dist/help-text.d.ts.map +1 -1
- package/dist/help-text.js +6 -10
- package/dist/help-text.js.map +2 -2
- package/dist/i18n/locales/en.d.ts +9 -87
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +9 -90
- package/dist/i18n/locales/en.js.map +2 -2
- package/dist/i18n/locales/zh-CN.d.ts.map +1 -1
- package/dist/i18n/locales/zh-CN.js +9 -90
- package/dist/i18n/locales/zh-CN.js.map +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -4
- package/dist/index.js.map +2 -2
- package/dist/main.js +3 -6
- package/dist/main.js.map +2 -2
- package/dist/module-commands.d.ts +6 -25
- package/dist/module-commands.d.ts.map +1 -1
- package/dist/module-commands.js +107 -127
- package/dist/module-commands.js.map +2 -2
- package/dist/module-pack-build.d.ts.map +1 -1
- package/dist/module-pack-build.js +4 -0
- package/dist/module-pack-build.js.map +2 -2
- package/dist/module-toggle.d.ts +33 -0
- package/dist/module-toggle.d.ts.map +1 -0
- package/dist/module-toggle.js +28 -0
- package/dist/module-toggle.js.map +7 -0
- package/dist/pack-lifecycle.d.ts.map +1 -1
- package/dist/pack-lifecycle.js +4 -0
- package/dist/pack-lifecycle.js.map +2 -2
- package/dist/remote-agent.js +5 -5
- package/dist/remote-agent.js.map +2 -2
- package/dist/repl.d.ts +0 -2
- package/dist/repl.d.ts.map +1 -1
- package/dist/repl.js +2 -31
- package/dist/repl.js.map +2 -2
- package/dist/runtime.d.ts +4 -13
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +15 -27
- package/dist/runtime.js.map +2 -2
- package/dist/services.d.ts +0 -2
- package/dist/services.d.ts.map +1 -1
- package/dist/services.js +0 -4
- package/dist/services.js.map +2 -2
- package/package.json +6 -6
- package/dist/module-publish.d.ts +0 -69
- package/dist/module-publish.d.ts.map +0 -1
- package/dist/module-publish.js +0 -478
- package/dist/module-publish.js.map +0 -7
- package/dist/module-watch.d.ts +0 -32
- package/dist/module-watch.d.ts.map +0 -1
- package/dist/module-watch.js +0 -171
- package/dist/module-watch.js.map +0 -7
- package/dist/module-wizard.d.ts +0 -12
- package/dist/module-wizard.d.ts.map +0 -1
- package/dist/module-wizard.js +0 -297
- package/dist/module-wizard.js.map +0 -7
package/dist/remote-agent.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/remote-agent.ts"],
|
|
4
|
-
"sourcesContent": ["import { WebSocket } from \"ws\";\nimport {\n configPath,\n DEFAULT_REMOTE_CONFIG,\n loadEnsuredConfig,\n writeJson,\n withConfigSchema,\n type RemoteConfig,\n} from \"@sfmc-bds/sdk/node/config\";\nimport { cmdRestart, cmdSend, cmdStart, cmdStop } from \"./commands.js\";\nimport { ROOT } from \"./runtime.js\";\nimport { SERVICE_NAMES,
|
|
5
|
-
"mappings": "AAAA,SAAS,iBAAiB;AAC1B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP,SAAS,YAAY,SAAS,UAAU,eAAe;AACvD,SAAS,YAAY;AACrB,SAAS,eAAe,
|
|
4
|
+
"sourcesContent": ["import { WebSocket } from \"ws\";\nimport {\n configPath,\n DEFAULT_REMOTE_CONFIG,\n loadEnsuredConfig,\n writeJson,\n withConfigSchema,\n type RemoteConfig,\n} from \"@sfmc-bds/sdk/node/config\";\nimport { cmdRestart, cmdSend, cmdStart, cmdStop } from \"./commands.js\";\nimport { ROOT } from \"./runtime.js\";\nimport { SERVICE_NAMES, queryServicesRuntime, type ServiceName } from \"./services.js\";\n\ntype Task = {\n type: \"task\";\n taskId: string;\n action: \"status\" | \"start\" | \"stop\" | \"restart\" | \"send\";\n service?: string;\n message?: string;\n};\n\ntype RemoteStatus = {\n enabled?: boolean;\n controller_url?: string;\n agent_id?: string;\n connected: boolean;\n last_error?: string;\n retry_in_ms?: number;\n};\n\nlet socket: WebSocket | null = null;\nlet retryTimer: NodeJS.Timeout | null = null;\nlet retryDelay = 1000;\nlet heartbeatTimer: NodeJS.Timeout | null = null;\nlet lastError = \"\";\nlet warnedMissingConfig = false;\nlet stopping = false;\n\nconst HEARTBEAT_INTERVAL_MS = 20_000;\n\n/** \u542F\u52A8\u65F6\u786E\u4FDD remote.json \u5B58\u5728,\u8FD4\u56DE\u73B0\u6709\u6216\u7A7A\u914D\u7F6E\uFF08\u5DF2\u5265\u79BB $schema\uFF09\u3002 */\nfunction loadConfig(): RemoteConfig {\n return loadEnsuredConfig(\n ROOT,\n \"remote.json\",\n \"remote\",\n { ...DEFAULT_REMOTE_CONFIG } as Record<string, unknown>\n ) as RemoteConfig;\n}\n\nfunction writeConfig(config: RemoteConfig): void {\n writeJson(configPath(ROOT, \"remote.json\"), withConfigSchema({ ...config } as Record<string, unknown>, \"remote\"));\n}\n\nfunction isService(value: string | undefined): value is ServiceName {\n return !!value && SERVICE_NAMES.includes(value as ServiceName);\n}\n\nfunction isAction(value: unknown): value is Task[\"action\"] {\n return value === \"status\" || value === \"start\" || value === \"stop\" || value === \"restart\" || value === \"send\";\n}\n\nfunction websocketUrl(controllerUrl: string, agentId: string): string {\n const url = new URL(controllerUrl);\n url.protocol = url.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n url.pathname = \"/v1/agent\";\n url.search = new URLSearchParams({ id: agentId }).toString();\n return url.toString();\n}\n\nfunction send(payload: unknown): void {\n if (socket?.readyState === WebSocket.OPEN) socket.send(JSON.stringify(payload));\n}\n\nfunction startHeartbeat(): void {\n stopHeartbeat();\n heartbeatTimer = setInterval(() => send({ type: \"ping\" }), HEARTBEAT_INTERVAL_MS);\n}\n\nfunction stopHeartbeat(): void {\n if (heartbeatTimer) {\n clearInterval(heartbeatTimer);\n heartbeatTimer = null;\n }\n}\n\nasync function execute(task: Task): Promise<unknown> {\n if (!isAction(task.action)) throw new Error(\"invalid task action\");\n if (task.action === \"status\") return { services: await queryServicesRuntime() };\n if (!isService(task.service)) throw new Error(\"service is required and must be one of: \" + SERVICE_NAMES.join(\", \"));\n if (task.action === \"send\") {\n if (!task.message) throw new Error(\"message is required for send action\");\n return { output: await cmdSend(task.service, task.message), services: await queryServicesRuntime() };\n }\n\n const output =\n task.action === \"start\"\n ? await cmdStart(task.service)\n : task.action === \"stop\"\n ? await cmdStop(task.service)\n : await cmdRestart(task.service);\n return { output, services: await queryServicesRuntime() };\n}\n\nfunction scheduleReconnect(): void {\n if (retryTimer || stopping) return;\n const delay = retryDelay;\n retryTimer = setTimeout(() => {\n retryTimer = null;\n startRemoteAgent();\n }, delay);\n}\n\nfunction resetReconnect(reason?: string): void {\n retryDelay = 1000;\n if (reason) {\n lastError = reason;\n console.warn(`[remote-agent] ${reason} \u2014 will retry in ${retryDelay}ms`);\n }\n}\n\n/** Close the active socket (if any) and stop reconnecting. Idempotent. */\nexport function stopRemoteAgent(): void {\n stopping = true;\n stopHeartbeat();\n if (retryTimer) {\n clearTimeout(retryTimer);\n retryTimer = null;\n }\n if (socket) {\n try {\n socket.close(1000, \"client_shutdown\");\n } catch {\n /* ignore */\n }\n socket = null;\n }\n}\n\n/** Start one outbound-only remote-management connection for this supervisor process. */\nexport function startRemoteAgent(): void {\n if (stopping) return;\n if (socket || retryTimer) return;\n const config = loadConfig();\n if (!config.enabled || !config.controller_url || !config.agent_id || !config.agent_secret) {\n if (!warnedMissingConfig) {\n const missing: string[] = [];\n if (!config.enabled) missing.push(\"enabled\");\n if (!config.controller_url) missing.push(\"controller_url\");\n if (!config.agent_id) missing.push(\"agent_id\");\n if (!config.agent_secret) missing.push(\"agent_secret\");\n if (missing.length) {\n console.warn(`[remote-agent] disabled \u2014 missing remote.json fields: ${missing.join(\", \")} (run \\`sfmc remote enroll\\`)`);\n }\n warnedMissingConfig = true;\n }\n return;\n }\n warnedMissingConfig = true;\n\n let ws: WebSocket;\n try {\n ws = new WebSocket(websocketUrl(config.controller_url, config.agent_id));\n } catch (e) {\n resetReconnect(`failed to construct websocket: ${(e as Error).message}`);\n scheduleReconnect();\n return;\n }\n socket = ws;\n\n ws.on(\"open\", () => {\n retryDelay = 1000;\n lastError = \"\";\n void queryServicesRuntime().then((status) => {\n send({ type: \"hello\", agentId: config.agent_id, secret: config.agent_secret, status });\n startHeartbeat();\n });\n });\n ws.on(\"message\", (raw) => {\n let msg: { type?: string };\n try {\n msg = JSON.parse(raw.toString()) as { type?: string };\n } catch {\n return;\n }\n if (msg.type === \"ping\") {\n send({ type: \"pong\" });\n return;\n }\n if (msg.type !== \"task\") return;\n const task = msg as Task;\n void execute(task)\n .then((result) => send({ type: \"task_result\", taskId: task.taskId, ok: true, result }))\n .catch((error: Error) => send({ type: \"task_result\", taskId: task.taskId, ok: false, error: error.message }));\n });\n ws.on(\"close\", (code, reason) => {\n if (socket === ws) socket = null;\n stopHeartbeat();\n if (stopping) return;\n resetReconnect(`disconnected (code=${code} ${reason.toString() || \"no_reason\"})`);\n scheduleReconnect();\n });\n ws.on(\"error\", (e) => {\n resetReconnect(`socket error: ${e.message}`);\n /* close event will follow and trigger reconnect */\n });\n}\n\nexport async function enrollRemoteAgent(controllerUrl: string, enrollmentToken: string, name: string): Promise<string> {\n const response = await fetch(new URL(\"/v1/enroll\", controllerUrl), {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\", authorization: `Bearer ${enrollmentToken}` },\n body: JSON.stringify({ name }),\n });\n const result = (await response.json()) as { agentId?: string; agentSecret?: string; error?: string };\n if (!response.ok || !result.agentId || !result.agentSecret) throw new Error(result.error ?? \"enrollment failed\");\n\n writeConfig({ enabled: true, controller_url: controllerUrl, agent_id: result.agentId, agent_secret: result.agentSecret });\n return result.agentId;\n}\n\n/** Disable the remote agent: clear enabled flag and close the connection. */\nexport function disableRemoteAgent(): void {\n const config = loadConfig();\n if (config.agent_id || config.agent_secret) {\n writeConfig({ ...config, enabled: false });\n }\n stopRemoteAgent();\n stopping = false;\n}\n\nexport function remoteStatus(): RemoteStatus {\n const config = loadConfig();\n const result: RemoteStatus = { connected: socket?.readyState === WebSocket.OPEN };\n if (config.enabled !== undefined) result.enabled = config.enabled;\n if (config.controller_url) result.controller_url = config.controller_url;\n if (config.agent_id) result.agent_id = config.agent_id;\n if (lastError) {\n result.last_error = lastError;\n result.retry_in_ms = retryDelay;\n }\n return result;\n}"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/repl.d.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { type CommandMode } from "./command-surface.js";
|
|
2
2
|
export declare function playWelcomeAnimation(): Promise<void>;
|
|
3
3
|
export declare function getHelp(mode?: CommandMode): string;
|
|
4
|
-
/** @deprecated 请用 getHelp(mode);保留别名以兼容旧导入。 */
|
|
5
|
-
export declare const HELP: string;
|
|
6
4
|
/** 来源选择项:方括号 3 字符标签染色(供外部/测试复用) */
|
|
7
5
|
export declare const SOURCE_ITEMS: Array<{
|
|
8
6
|
label: string;
|
package/dist/repl.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../src/repl.ts"],"names":[],"mappings":"AAcA,OAAO,EAIL,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAgN9B,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAiD1D;AAcD,wBAAgB,OAAO,CAAC,IAAI,GAAE,WAAoB,GAAG,MAAM,CAE1D;
|
|
1
|
+
{"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../src/repl.ts"],"names":[],"mappings":"AAcA,OAAO,EAIL,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAgN9B,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAiD1D;AAcD,wBAAgB,OAAO,CAAC,IAAI,GAAE,WAAoB,GAAG,MAAM,CAE1D;AAofD,mCAAmC;AACnC,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAG9D,CAAC;AAmBJ,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAkR/C"}
|
package/dist/repl.js
CHANGED
|
@@ -232,14 +232,6 @@ ${lines.join("\n")}
|
|
|
232
232
|
function getHelp(mode = "argv") {
|
|
233
233
|
return buildHelp(mode);
|
|
234
234
|
}
|
|
235
|
-
const HELP = {
|
|
236
|
-
toString() {
|
|
237
|
-
return getHelp("argv");
|
|
238
|
-
},
|
|
239
|
-
valueOf() {
|
|
240
|
-
return getHelp("argv");
|
|
241
|
-
}
|
|
242
|
-
};
|
|
243
235
|
function getCommands() {
|
|
244
236
|
return listVisibleTopLevelNames(REPL_MODE);
|
|
245
237
|
}
|
|
@@ -309,15 +301,9 @@ function getCompletions(parsed) {
|
|
|
309
301
|
if (argIndex === 1 && verb === "reload") {
|
|
310
302
|
return ["--build-only"].filter(sw);
|
|
311
303
|
}
|
|
312
|
-
if (argIndex === 1 && verb === "link") {
|
|
313
|
-
return ["--from"].filter(sw);
|
|
314
|
-
}
|
|
315
304
|
if (argIndex >= 1 && verb === "install") {
|
|
316
305
|
return ["--from", "--sha256", "--link"].filter(sw);
|
|
317
306
|
}
|
|
318
|
-
if (argIndex >= 2 && verb === "link") {
|
|
319
|
-
return ["--from"].filter(sw);
|
|
320
|
-
}
|
|
321
307
|
if (argIndex >= 1 && verb === "list") {
|
|
322
308
|
return ["--from", "--sha256"].filter(sw);
|
|
323
309
|
}
|
|
@@ -989,14 +975,7 @@ async function execCmd(parts) {
|
|
|
989
975
|
stdout.write(g + "\n");
|
|
990
976
|
break;
|
|
991
977
|
}
|
|
992
|
-
|
|
993
|
-
const wasRaw = stdin.isRaw ?? false;
|
|
994
|
-
if (needsCooked) setRaw(false);
|
|
995
|
-
try {
|
|
996
|
-
stdout.write(await dispatchModuleCommand(modShort, args) + "\n");
|
|
997
|
-
} finally {
|
|
998
|
-
if (needsCooked) setRaw(wasRaw);
|
|
999
|
-
}
|
|
978
|
+
stdout.write(await dispatchModuleCommand(modShort, args) + "\n");
|
|
1000
979
|
break;
|
|
1001
980
|
}
|
|
1002
981
|
if (isModuleCommand(cmd)) {
|
|
@@ -1006,14 +985,7 @@ async function execCmd(parts) {
|
|
|
1006
985
|
stdout.write(g + "\n");
|
|
1007
986
|
break;
|
|
1008
987
|
}
|
|
1009
|
-
|
|
1010
|
-
const wasRaw = stdin.isRaw ?? false;
|
|
1011
|
-
if (needsCooked) setRaw(false);
|
|
1012
|
-
try {
|
|
1013
|
-
stdout.write(await dispatchModuleCommand(sub, subRest) + "\n");
|
|
1014
|
-
} finally {
|
|
1015
|
-
if (needsCooked) setRaw(wasRaw);
|
|
1016
|
-
}
|
|
988
|
+
stdout.write(await dispatchModuleCommand(sub, subRest) + "\n");
|
|
1017
989
|
break;
|
|
1018
990
|
}
|
|
1019
991
|
if (isPacksCommand(cmd)) {
|
|
@@ -1031,7 +1003,6 @@ async function execCmd(parts) {
|
|
|
1031
1003
|
}
|
|
1032
1004
|
}
|
|
1033
1005
|
export {
|
|
1034
|
-
HELP,
|
|
1035
1006
|
SOURCE_ITEMS,
|
|
1036
1007
|
getHelp,
|
|
1037
1008
|
playWelcomeAnimation,
|
package/dist/repl.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/repl.ts"],
|
|
4
|
-
"sourcesContent": ["import { pauseAllProgress, resumeAllProgress } from \"@sfmc-bds/sdk/logs\";\nimport chalk from \"chalk\";\nimport process, { stdin, stdout } from \"node:process\";\nimport pkg from \"../package.json\" with { type: \"json\" };\nimport { gateModuleSub, gatePacksSub, gateTopLevel } from \"./cli-gate.js\";\nimport {\n activeNode,\n clampPaletteSelection,\n commitSelection,\n formatPaletteCascadeLines,\n paletteGhost,\n promptSlashColumn,\n resolvePaletteView,\n} from \"./command-palette.js\";\nimport {\n listVisiblePacksSubs,\n listVisibleTopLevelNames,\n resolveModuleTopShorthand,\n type CommandMode,\n} from \"./command-surface.js\";\nimport { cmdRestart, cmdSend, cmdStart, cmdStartAll, cmdStatus, cmdStop, cmdStopAll, cmdUpdate } from \"./commands.js\";\nimport { cmdRemote } from \"./cmd-remote.js\";\nimport { cmdDebug } from \"./debug-command.js\";\nimport { getHelp as buildHelp } from \"./help-text.js\";\nimport { t } from \"./i18n/index.js\";\nimport { cmdLocale } from \"./locale-command.js\";\nimport {\n formatLog,\n getAllLogs,\n logPrefixWidth,\n onLog,\n readDiskLogs,\n SOURCE_META,\n wrapLogLine,\n type LogLevel,\n type UnifiedLog,\n} from \"./logs.js\";\nimport {\n dispatchModuleCommand,\n getVisibleModuleSubcommands,\n isModuleCommand,\n listInstalledModuleIdsSync,\n} from \"./module-commands.js\";\nimport { listRegistryModuleIdsSync } from \"./registry.js\";\nimport { stopRemoteAgent } from \"./remote-agent.js\";\nimport {\n createLogsFilterWindow,\n createServiceWindow,\n serviceWindowId,\n WindowHost,\n type LogsFilterState,\n type WindowChrome,\n type WindowKeyEvent,\n type WindowKeyResult,\n} from \"./repl-windows/index.js\";\nimport { listActiveSendTargets, paintSendPrompt, plainPrompt } from \"./send-target.js\";\nimport { forceStopAll, onServiceStateChange, SERVICE_NAMES, stopAll, type ServiceName } from \"./services.js\";\nimport { c, T } from \"./theme.js\";\nimport { dispatchPacksCommand, isPacksCommand } from \"./world-packs.js\";\n\nconst REPL_MODE: CommandMode = \"repl\";\n\nfunction getDisplayWidth(str: string) {\n // \u5148\u53BB\u9664 ANSI \u7801\n const plain = str.replace(/\\x1b\\[[0-9;]*m/g, \"\");\n let width = 0;\n for (const ch of plain) {\n // \u7C97\u7565\u5224\u65AD\uFF1A\u975E ASCII \u5B57\u7B26\uFF08\u5982\u4E2D\u6587\uFF09\u89C6\u4E3A\u5360 2 \u5217\n if (ch.codePointAt(0)! > 127) {\n width += 2;\n } else {\n width += 1;\n }\n }\n return width;\n}\n\nfunction charDisplayWidth(ch: string): number {\n return ch.codePointAt(0)! > 127 ? 2 : 1;\n}\n\nfunction setRaw(v: boolean): void {\n try {\n if (stdin.isTTY && typeof stdin.setRawMode === \"function\") stdin.setRawMode(v);\n } catch {}\n}\n\n/** \u5DE6\u4FA7 SFMC logo \u4E09\u884C\uFF08\u5E95\u884C\u542B\u63A5\u6A2A\u7EBF\u7684 \u2570\u2500\u2500\u2500\uFF0C\u4E0E\u6700\u7EC8\u5E03\u5C40\u4E00\u81F4\uFF09 */\nconst LOGO_ROWS = [\"\u256D\u2500\u256E\u256D\u2500\u2574\u256D\u252C\u256E\u256D\u2500\u2574\", \"\u2570\u2500\u256E\u251C\u2574 \u2502\u2502\u2502\u2502 \", \"\u2570\u2500\u256F\u2575 \u2575 \u2575\u2570\u2500\u2500\u2500\"] as const;\nconst LOGO_PAD = \" \";\nconst LOGO_TOP_GAP = \" \";\nconst LOGO_MID_GAP = \" \";\nconst SHORTCUT_HINT = ` / \u00B7 Tab \u00B7 Ctrl+P \u00B7 Ctrl+L \u00B7 \u2190\u2192 \u00B7 \u2191\u2193`;\n/** S\u2192F\u2192M\u2192C \u624B\u5199\u7B14\u987A\uFF08row, col\uFF09\uFF1B\u7A7A\u683C\u683C\u5728\u6784\u5EFA\u65F6\u8FC7\u6EE4 */\nconst LOGO_STROKE_RAW: ReadonlyArray<readonly [number, number]> = [\n // S\n [0, 1],\n [0, 2],\n [0, 0],\n [1, 0],\n [1, 1],\n [1, 2],\n [2, 2],\n [2, 1],\n [2, 0],\n // F\n [0, 3],\n [1, 3],\n [2, 3],\n [0, 4],\n [0, 5],\n [1, 4],\n // M\n [0, 6],\n [1, 6],\n [2, 6],\n [0, 7],\n [1, 7],\n [0, 8],\n [1, 8],\n [2, 8],\n // C\uFF08\u672B\u7B14\u843D\u5230 \u2570\u2500\u2500\u2500\uFF0C\u968F\u540E\u65E0\u7F1D\u63A5\u6A2A\u7EBF\u5EF6\u957F\uFF09\n [0, 10],\n [0, 11],\n [0, 9],\n [1, 9],\n [2, 9],\n [2, 10],\n [2, 11],\n [2, 12],\n];\nconst LOGO_STROKES = LOGO_STROKE_RAW.filter(([r, col]) => {\n const ch = LOGO_ROWS[r]?.[col];\n return ch !== undefined && ch !== \" \";\n});\n\n/** \u6B22\u8FCE\u6761\u7EAF\u6587\u672C\uFF08\u4E0E\u4E0B\u65B9\u6837\u5F0F\u5316 meta \u5185\u5BB9\u4E00\u81F4\uFF09 */\nconst metaPlain = `Scripts For Minecraft Server v${pkg.version}`;\n/** \u5F3A\u8C03\u9996\u5B57\u6BCD\u4E0B\u6807\uFF1AS / F / M / c */\nconst META_ACCENT_INDEX = new Set([0, 8, 12, 16]);\nconst metaUnlit = chalk.hex(T.subtle);\nconst meta = `${c.text(`S`)}${c.dim(`cripts`)} ${c.text(`F`)}${c.dim(`or`)} ${c.text(`M`)}${c.dim(`ine`)}${c.text(`c`)}${c.dim(`raft Server`)} v${pkg.version}`;\nconst metaWidth = getDisplayWidth(metaPlain);\nconst lineLength = metaWidth + 5;\n\n/** \u6309\u663E\u793A\u5217\u8FDB\u5EA6\u70B9\u4EAE\u7EAF\u6587\u672C\uFF1BpaintLit \u51B3\u5B9A\u5DF2\u4EAE\u5B57\u7B26\u6837\u5F0F */\nfunction buildTextAtProgress(\n plain: string,\n litColumns: number,\n paintLit: (ch: string, index: number) => string\n): string {\n let cols = 0;\n let out = \"\";\n for (let i = 0; i < plain.length; i++) {\n const ch = plain[i]!;\n const w = charDisplayWidth(ch);\n if (cols + w <= litColumns) {\n out += paintLit(ch, i);\n } else {\n out += metaUnlit(ch);\n }\n cols += w;\n }\n return out;\n}\n\n/** \u6309\u663E\u793A\u5217\u8FDB\u5EA6\u70B9\u4EAE meta\uFF1A\u5DF2\u4EAE\u4FDD\u7559\u6700\u7EC8\u6837\u5F0F\uFF0C\u672A\u4EAE\u7528 subtle */\nfunction buildMetaAtProgress(litColumns: number): string {\n return buildTextAtProgress(metaPlain, litColumns, (ch, i) => (META_ACCENT_INDEX.has(i) ? c.text(ch) : c.dim(ch)));\n}\n\n/** \u5FEB\u6377\u952E\u63D0\u793A\u4E0E\u6A2A\u7EBF/meta \u5171\u7528\u540C\u4E00\u5217\u8FDB\u5EA6 */\nfunction buildShortcutsAtProgress(litColumns: number): string {\n return buildTextAtProgress(SHORTCUT_HINT, litColumns, (ch) => c.dim(ch));\n}\n\n/** \u6309\u7B14\u987A\u8FDB\u5EA6\u6E32\u67D3 logo\uFF1B\u672A\u5199\u51FA\u7684\u58A8\u8FF9\u7528\u7A7A\u683C\u5360\u4F4D\uFF0C\u4FDD\u6301\u5E03\u5C40\u7A33\u5B9A */\nfunction buildLogoRows(strokeCount: number): [string, string, string] {\n const lit = new Set<string>();\n const n = Math.min(Math.max(0, strokeCount), LOGO_STROKES.length);\n for (let i = 0; i < n; i++) {\n const [r, col] = LOGO_STROKES[i]!;\n lit.add(`${r},${col}`);\n }\n return LOGO_ROWS.map((row, r) => {\n let out = \"\";\n for (let col = 0; col < row.length; col++) {\n const ch = row[col]!;\n if (ch === \" \") {\n out += \" \";\n } else if (lit.has(`${r},${col}`)) {\n out += c.text(ch);\n } else {\n out += \" \";\n }\n }\n return out;\n }) as [string, string, string];\n}\n\nfunction buildWelcomeLines(\n strokeCount: number,\n lineProgress: number,\n metaContent: string,\n shortcutContent: string\n): string[] {\n const [topLogo, midLogo, botLogo] = buildLogoRows(strokeCount);\n const line = \"\u2500\".repeat(Math.max(0, lineProgress));\n return [\n `\\n`,\n `${LOGO_PAD}${topLogo}${LOGO_TOP_GAP}${shortcutContent}`,\n `${LOGO_PAD}${midLogo}${LOGO_MID_GAP}${metaContent}`,\n `${LOGO_PAD}${botLogo}${line}`,\n ];\n}\n\n/** \u56DE\u5377\u91CD\u7ED8\uFF1A\u9996\u5E27\u76F4\u63A5\u5199\uFF0C\u4E4B\u540E\u5149\u6807\u4E0A\u79FB\u5E76\u9010\u884C ESC[2K \u6E05\u884C\u91CD\u5199 */\nfunction paintWelcomeLines(lines: string[], firstFrame: boolean): void {\n if (!firstFrame) {\n process.stdout.write(`\\x1b[${lines.length}A`);\n }\n for (let i = 0; i < lines.length; i++) {\n process.stdout.write(`\\x1b[2K\\r${lines[i]}`);\n if (i < lines.length - 1) process.stdout.write(\"\\n\");\n }\n}\n\nexport async function playWelcomeAnimation(): Promise<void> {\n const strokeTotal = LOGO_STROKES.length;\n const totalSteps = strokeTotal + lineLength;\n const finalShortcuts = c.dim(SHORTCUT_HINT);\n\n // \u975E TTY\uFF1A\u76F4\u63A5\u8F93\u51FA\u6700\u7EC8\u5E27\uFF0C\u907F\u514D\u63A7\u5236\u5E8F\u5217\u6C61\u67D3\u7BA1\u9053\u8F93\u51FA\n if (!process.stdout.isTTY) {\n const lines = buildWelcomeLines(strokeTotal, lineLength, c.bold(meta), finalShortcuts);\n process.stdout.write(`\\n${lines.join(\"\\n\")}\\n\\n`);\n return;\n }\n\n let step = 0;\n let firstFrame = true;\n\n process.stdout.write(\"\\x1b[?25l\");\n // \u5148\u7A7A\u4E00\u884C\uFF0C\u628A\u6B22\u8FCE\u5757\u4E0E\u4E0A\u65B9\u8F93\u51FA\u9694\u5F00\n process.stdout.write(\"\\n\");\n\n return new Promise((resolve) => {\n const done = (): void => {\n const finalLines = buildWelcomeLines(strokeTotal, lineLength, c.bold(meta), finalShortcuts);\n paintWelcomeLines(finalLines, firstFrame);\n process.stdout.write(\"\\x1b[?25h\\n\\n\");\n resolve();\n };\n\n const tick = (): void => {\n const inLogo = step < strokeTotal;\n const strokeCount = Math.min(step + 1, strokeTotal);\n // \u53F3\u4FA7\u4E09\u884C\uFF08shortcut / meta / \u6A2A\u7EBF\uFF09\u5171\u7528\u540C\u4E00\u5217\u8FDB\u5EA6\n const lineProgress = inLogo ? 0 : Math.min(step - strokeTotal + 1, lineLength);\n const metaContent = buildMetaAtProgress(Math.min(lineProgress, metaWidth));\n const shortcutContent = buildShortcutsAtProgress(lineProgress);\n const lines = buildWelcomeLines(strokeCount, lineProgress, metaContent, shortcutContent);\n paintWelcomeLines(lines, firstFrame);\n firstFrame = false;\n\n if (step >= totalSteps - 1) {\n done();\n return;\n }\n step += 1;\n // logo \u7B14\u987A\u7A0D\u6162\uFF1B\u63A5\u4E0A\u6A2A\u7EBF\u540E\u6062\u590D\u8F83\u5FEB\u8282\u594F\n setTimeout(tick, step < strokeTotal ? 22 : 5);\n };\n\n setTimeout(tick, 22);\n });\n}\n\n/* let welcome = `\\n\n ${c.text(`\u282A\u2841\u286F\u2801`)}\n ${c.text(`\u2812\u2801\u2803`)}${c.purple(`\u2804`)}\n ${c.text(`\u2877\u2847\u284E\u2801`)} ${meta}\n ${c.text(`\u2803\u2803\u2811\u2802`)} ${c.dim(`/ \u00B7 Tab \u00B7 Ctrl+P \u00B7 Ctrl+L \u00B7 \u2190\u2192 \u00B7 \u2191\u2193`)}\\n\n`; */\n\n/* welcome = `\\n\n \u256D\u2500\u256E\u256D\u2500\u2574\u256D\u252C\u256E\u256D\u2500\u2574 ${c.dim(`/ \u00B7 Tab \u00B7 Ctrl+P \u00B7 Ctrl+L \u00B7 \u2190\u2192 \u00B7 \u2191\u2193`)}\n \u2570\u2500\u256E\u251C\u2574 \u2502\u2502\u2502\u2502 ${meta}\n \u2570\u2500\u256F\u2575 \u2575 \u2575\u2570\u2500\u2500\u2500${\"\u2500\".repeat(getDisplayWidth(meta) + 3)}\\n`; */\n\nexport function getHelp(mode: CommandMode = \"argv\"): string {\n return buildHelp(mode);\n}\n\n/** @deprecated \u8BF7\u7528 getHelp(mode)\uFF1B\u4FDD\u7559\u522B\u540D\u4EE5\u517C\u5BB9\u65E7\u5BFC\u5165\u3002 */\nexport const HELP = {\n toString() {\n return getHelp(\"argv\");\n },\n valueOf() {\n return getHelp(\"argv\");\n },\n} as unknown as string;\n\nfunction getCommands(): string[] {\n return listVisibleTopLevelNames(REPL_MODE);\n}\n\n/* ==================================================================\n * Context-aware completion\n * ================================================================== */\ninterface ParsedLine {\n cmd: string;\n /** cmd \u4E4B\u540E\u7684\u5168\u90E8 token(\u4E0D\u542B\u6B63\u5728\u8F93\u5165\u7684 current,\u82E5\u672B\u5C3E\u65E0\u7A7A\u683C\u5219\u4E0D\u542B\u6700\u540E\u4E00\u4E2A\u534A\u8BCD) */\n words: string[];\n argIndex: number;\n current: string;\n}\n\n/**\n * \u89E3\u6790\u5F53\u524D\u8F93\u5165\u884C,\u63D0\u53D6\u547D\u4EE4\u540D\u3001\u53C2\u6570\u4F4D\u7F6E\u3001\u6B63\u5728\u8F93\u5165\u7684 word\u3002\n * \u672B\u5C3E\u7A7A\u683C\u89C6\u4E3A\"\u521A\u7ED3\u675F\u4E00\u4E2A word,\u51C6\u5907\u8F93\u5165\u4E0B\u4E00\u4E2A\"\u3002\n */\nfunction parseLine(line: string): ParsedLine {\n const endsWithSpace = line.length > 0 && /\\s$/.test(line);\n const trimmed = line.trim();\n if (!trimmed) return { cmd: \"\", words: [], argIndex: 0, current: \"\" };\n const tokens = trimmed.split(/\\s+/);\n if (endsWithSpace) {\n return {\n cmd: tokens[0] ?? \"\",\n words: tokens.slice(1),\n argIndex: tokens.length - 1,\n current: \"\",\n };\n }\n if (tokens.length === 1) return { cmd: \"\", words: [], argIndex: 0, current: tokens[0]! };\n return {\n cmd: tokens[0]!,\n words: tokens.slice(1, -1),\n argIndex: tokens.length - 2,\n current: tokens[tokens.length - 1]!,\n };\n}\n\n/**\n * \u6839\u636E\u547D\u4EE4 + \u53C2\u6570\u4F4D\u7F6E\u8FD4\u56DE\u8865\u5168\u5019\u9009 (\u533A\u5206\u547D\u4EE4,\u4E0D\u518D\u628A\u670D\u52A1\u540D\u5F53\u6210\u6240\u6709\u6307\u4EE4\u7684\u4E8C\u7EA7\u53C2\u6570)\u3002\n */\nfunction getCompletions(parsed: ParsedLine): string[] {\n const { words, argIndex, current } = parsed;\n const cmd = parsed.cmd.startsWith(\"/\") ? parsed.cmd.slice(1) : parsed.cmd;\n const sw = (s: string): boolean => s.startsWith(current);\n if (!cmd) {\n const cmds = getCommands().map((n) => (n.startsWith(\"/\") ? n : n));\n return [\"/\", ...cmds].filter(sw);\n }\n switch (cmd) {\n case \"logs\":\n case \"log\":\n return [];\n case \"start\":\n case \"stop\":\n case \"restart\":\n if (argIndex === 0) return [\"-all\", ...SERVICE_NAMES].filter(sw);\n return [];\n case \"send\":\n if (argIndex === 0) return SERVICE_NAMES.filter(sw);\n return [];\n case \"update\":\n return [\"--check-only\", \"--force\", \"--channel=release\", \"--channel=preview\"].filter(sw);\n case \"remote\":\n if (argIndex === 0) return [\"status\", \"enroll\", \"disable\"].filter(sw);\n return [];\n case \"packs\":\n case \"addon\":\n if (argIndex === 0) return [...listVisiblePacksSubs(REPL_MODE)].filter(sw);\n if (argIndex === 1 && [\"list\"].includes(words[0] ?? \"\")) {\n return [\"--kind\", \"--search\"].filter(sw);\n }\n return [];\n default: {\n if (!isModuleCommand(cmd)) return [];\n if (argIndex === 0) return [...getVisibleModuleSubcommands(REPL_MODE)].filter(sw);\n const verb = words[0] ?? \"\";\n if (argIndex === 1 && verb === \"search\") {\n return listRegistryModuleIdsSync().filter(sw);\n }\n if (argIndex === 1 && [\"info\", \"uninstall\", \"remove\", \"verify\", \"enable\", \"disable\"].includes(verb)) {\n return listInstalledModuleIdsSync().filter(sw);\n }\n if (argIndex === 1 && verb === \"reload\") {\n return [\"--build-only\"].filter(sw);\n }\n if (argIndex === 1 && verb === \"link\") {\n return [\"--from\"].filter(sw);\n }\n if (argIndex >= 1 && verb === \"install\") {\n return [\"--from\", \"--sha256\", \"--link\"].filter(sw);\n }\n if (argIndex >= 2 && verb === \"link\") {\n return [\"--from\"].filter(sw);\n }\n if (argIndex >= 1 && verb === \"list\") {\n return [\"--from\", \"--sha256\"].filter(sw);\n }\n return [];\n }\n }\n}\n\n/* ==================================================================\n * Escape sequence consumer\n * ================================================================== */\nfunction consumeEscapeSeq(chunk: Buffer, i: number): number | null {\n if (chunk[i] !== 0x1b) return null;\n const rem = chunk.length - i - 1;\n if (rem >= 2 && chunk[i + 1] === 0x5b) {\n let j = i + 2;\n while (j < chunk.length && chunk[j]! >= 0x30 && chunk[j]! <= 0x3f) j++;\n while (j < chunk.length && chunk[j]! >= 0x20 && chunk[j]! <= 0x2f) j++;\n if (j < chunk.length && chunk[j]! >= 0x40 && chunk[j]! <= 0x7e) j++;\n return j;\n }\n if (rem >= 2 && chunk[i + 1] === 0x4f) return i + 3;\n if (rem >= 1) return i + 2;\n return i + 1;\n}\n\n/* ==================================================================\n * Line reader\n * ================================================================== */\nconst history: string[] = [];\nlet historyIdx = -1;\n\n/** \u5F53\u524D readLine \u7684\u91CD\u7ED8\u51FD\u6570 (\u7A97\u53E3 resize / \u65E5\u5FD7\u63A8\u9001\u65F6\u8C03\u7528) */\nlet currentRedraw: (() => void) | null = null;\n\ntype ReadLineOpts = {\n getPrompt: () => string;\n /** \u65E0\u6D3B\u8DC3\u670D\u52A1\u65F6\uFF0C\u666E\u901A\u5B57\u7B26\u81EA\u52A8\u524D\u7F6E /\uFF1B\u53EF\u4E3A getter \u4EE5\u4FBF\u670D\u52A1\u9000\u51FA\u540E\u5373\u65F6\u751F\u6548 */\n autoSlash: boolean | (() => boolean);\n /** Tab\uFF1A\u5728\u975E / \u884C\u4E0A\u5207\u6362\u53D1\u9001\u76EE\u6807\uFF1B\u8FD4\u56DE true \u8868\u793A\u5DF2\u5904\u7406 */\n cycleSendTarget: () => boolean;\n /** \u5F53\u524D\u7A97\u53E3 chrome\uFF08\u65E0\u8F93\u5165\u7A97\u753B shortcut \u6761\uFF09 */\n getChrome?: () => WindowChrome;\n /** \u4EA4\u7ED9\u6D3B\u52A8\u7A97\u7684\u6309\u952E\uFF08Esc / L / S \u7B49\uFF09 */\n onWindowKey?: (ev: WindowKeyEvent) => WindowKeyResult;\n initial?: string;\n};\n\ntype ReadLineResult =\n | { kind: \"line\"; value: string }\n | { kind: \"cancel\" }\n | { kind: \"open-logs\"; pending: string }\n | { kind: \"run\"; parts: string[] };\n\nasync function readLine(opts: ReadLineOpts): Promise<ReadLineResult> {\n const wasRaw = stdin.isRaw ?? false;\n setRaw(true);\n stdin.resume();\n\n let line = opts.initial ?? \"\";\n let cursor = line.length;\n let suggestion = \"\";\n /** \u5404\u7EA7\u5217\u9009\u4E2D / \u6EDA\u52A8\uFF08\u4EC5\u6700\u53F3\u5217\u53EF\u5BFC\u822A\uFF09 */\n let palSels: number[] = [0];\n let palScrolls: number[] = [0];\n let overlayRows = 0;\n\n function prompt(): string {\n return opts.getPrompt();\n }\n\n function showsInput(): boolean {\n return opts.getChrome?.().showsInput !== false;\n }\n\n function slashMode(): boolean {\n return showsInput() && line.startsWith(\"/\");\n }\n\n function paletteView() {\n return resolvePaletteView(line, palSels, palScrolls);\n }\n\n function syncPaletteState(view: ReturnType<typeof resolvePaletteView>): void {\n for (let i = 0; i < view.columns.length; i++) {\n palSels[i] = view.columns[i]!.selected;\n palScrolls[i] = view.columns[i]!.scroll;\n }\n }\n\n function resetPalette(): void {\n palSels = [0];\n palScrolls = [0];\n }\n\n function clearOverlay(): void {\n stdout.write(\"\\r\\x1B[J\");\n overlayRows = 0;\n }\n\n function applyWindowKey(ev: WindowKeyEvent): boolean {\n if (!opts.onWindowKey) return false;\n const r = opts.onWindowKey(ev);\n if (r.action === \"none\") return false;\n if (r.action === \"redraw\") redraw();\n return true;\n }\n\n function redraw(): void {\n const chrome = opts.getChrome?.();\n if (chrome && !chrome.showsInput) {\n clearOverlay();\n const foot = chrome.footerShortcuts || \"\";\n stdout.write(foot);\n stdout.write(\"\\r\");\n return;\n }\n\n const p = prompt();\n suggestion = \"\";\n\n if (slashMode()) {\n const view = paletteView();\n syncPaletteState(view);\n if (cursor === line.length) {\n suggestion = paletteGhost(view);\n }\n } else {\n const parsed = parseLine(line);\n const candidates = getCompletions(parsed);\n const first = candidates[0];\n if (\n cursor === line.length &&\n parsed.current &&\n first &&\n first !== parsed.current &&\n first.startsWith(parsed.current)\n ) {\n suggestion = first.slice(parsed.current.length);\n }\n }\n\n clearOverlay();\n stdout.write(p + line);\n if (suggestion) stdout.write(c.dim(suggestion));\n\n if (slashMode()) {\n const view = paletteView();\n const indent = promptSlashColumn(p);\n const list = formatPaletteCascadeLines(view, indent);\n if (list.length > 0) {\n stdout.write(\"\\n\" + list.join(\"\\n\"));\n overlayRows = list.length;\n stdout.write(`\\x1B[${overlayRows}A`);\n }\n }\n\n const col = promptSlashColumn(p) + cursor + 1;\n stdout.write(`\\r\\x1B[${col}G`);\n }\n\n redraw();\n currentRedraw = redraw;\n\n return new Promise<ReadLineResult>((resolve) => {\n const done = (value: ReadLineResult): void => {\n stdin.removeListener(\"data\", handler);\n setRaw(wasRaw);\n currentRedraw = null;\n resolve(value);\n };\n\n const finishLine = (value: string): void => {\n clearOverlay();\n stdout.write(prompt() + value + \"\\r\\n\");\n if (value.length > 0) {\n history.push(value);\n if (history.length > 100) history.shift();\n }\n historyIdx = history.length;\n done({ kind: \"line\", value });\n };\n\n /** \u2191\u2193/Tab\uFF1A\u4EC5\u5728\u6700\u53F3\u5217\u8F6E\u6362\u9009\u4E2D\uFF0C\u5199\u5165\u7070\u5B57\uFF0C\u4E0D\u6539\u8F93\u5165\u6846 */\n const movePalSel = (delta: number): boolean => {\n const view = paletteView();\n if (view.hidden) return false;\n const col = view.columns[view.active];\n if (!col || col.items.length === 0) return false;\n const len = col.items.length;\n const cur = clampPaletteSelection(col.selected, len);\n const next = (((cur + delta) % len) + len) % len;\n palSels[view.active] = next;\n redraw();\n return true;\n };\n\n const handler = (chunk: Buffer) => {\n let i = 0;\n while (i < chunk.length) {\n if (chunk[i] === 0x1b) {\n const next = consumeEscapeSeq(chunk, i);\n if (next !== null) {\n const len = next - i;\n /* \u5355\u72EC Esc \u2192 \u4EA4\u7ED9\u7A97\u53E3\uFF08/logs \u8FD4\u56DE\uFF09 */\n if (len === 1) {\n if (applyWindowKey({ type: \"escape\" })) {\n i = next;\n continue;\n }\n i = next;\n continue;\n }\n if (!showsInput()) {\n i = next;\n continue;\n }\n if (len === 3 && chunk[i + 1] === 0x5b) {\n const fin = chunk[i + 2];\n if (fin === 0x41) {\n /* \u2191 */\n if (slashMode() && movePalSel(-1)) {\n i = next;\n continue;\n }\n if (historyIdx > 0) {\n historyIdx--;\n line = history[historyIdx] ?? \"\";\n cursor = line.length;\n resetPalette();\n redraw();\n }\n } else if (fin === 0x42) {\n /* \u2193 */\n if (slashMode() && movePalSel(1)) {\n i = next;\n continue;\n }\n if (historyIdx < history.length - 1) {\n historyIdx++;\n line = history[historyIdx] ?? \"\";\n cursor = line.length;\n resetPalette();\n redraw();\n } else if (historyIdx === history.length - 1) {\n historyIdx = history.length;\n line = \"\";\n cursor = 0;\n resetPalette();\n redraw();\n }\n } else if (fin === 0x43) {\n /* \u2192\uFF1A\u63A5\u53D7\u7070\u5B57\u6216\u79FB\u5149\u6807\uFF08\u4E0D\u5207\u6362\u9762\u677F\u7126\u70B9\uFF09 */\n if (cursor < line.length) {\n cursor++;\n redraw();\n } else if (suggestion) {\n line += suggestion;\n cursor = line.length;\n redraw();\n }\n } else if (fin === 0x44) {\n if (cursor > 0) {\n cursor--;\n redraw();\n }\n } else if (fin === 0x48) {\n cursor = 0;\n redraw();\n } else if (fin === 0x46) {\n cursor = line.length;\n redraw();\n }\n }\n i = next;\n } else i++;\n continue;\n }\n\n const byte = chunk[i]!;\n i++;\n\n if (byte === 0x0d || byte === 0x0a) {\n if (!showsInput()) continue;\n if (slashMode()) {\n const view = paletteView();\n syncPaletteState(view);\n if (!view.hidden && view.columns.some((col) => col.items.length > 0) && activeNode(view)) {\n const acc = commitSelection(line, view);\n if (acc.submit) {\n finishLine(acc.line);\n return;\n }\n line = acc.line;\n cursor = line.length;\n /* \u65B0\u5C42\u9009\u4E2D\u5F52\u96F6 */\n const depth = Math.max(0, acc.line.trimEnd().split(/\\s+/).length - 1);\n while (palSels.length <= depth + 1) palSels.push(0);\n while (palScrolls.length <= depth + 1) palScrolls.push(0);\n palSels[depth + 1] = 0;\n palScrolls[depth + 1] = 0;\n redraw();\n continue;\n }\n }\n finishLine(line);\n return;\n }\n\n if (byte === 0x03) {\n if (!showsInput()) {\n /* \u65E0\u8F93\u5165\u7A97\uFF1ACtrl+C \u8FD4\u56DE\u4E0A\u4E00\u7A97\uFF0C\u518D\u6309\u624D\u9000\u51FA */\n if (applyWindowKey({ type: \"escape\" })) continue;\n clearOverlay();\n stdout.write(\"\\r\\n\");\n done({ kind: \"cancel\" });\n return;\n }\n if (line.length > 0) {\n line = \"\";\n cursor = 0;\n resetPalette();\n redraw();\n continue;\n }\n clearOverlay();\n stdout.write(\"\\r\\n\");\n done({ kind: \"cancel\" });\n return;\n }\n\n /* Ctrl+P \u2014 \u786E\u4FDD\u4EE5 / \u5F00\u5934 */\n if (byte === 0x10) {\n if (!showsInput()) continue;\n if (!line.startsWith(\"/\")) {\n line = \"/\" + line;\n cursor = Math.min(cursor + 1, line.length);\n }\n resetPalette();\n redraw();\n continue;\n }\n\n if (byte === 0x09) {\n /* Tab\uFF1A/ \u6A21\u5F0F = \u5217\u8868\u8F6E\u6362\uFF1B\u5426\u5219\u5207\u6362\u670D\u52A1\u7A97 */\n if (slashMode()) {\n movePalSel(1);\n continue;\n }\n if (opts.cycleSendTarget()) {\n redraw();\n continue;\n }\n continue;\n }\n\n if (byte === 0x0c) {\n /* Ctrl+L \u2192 \u6253\u5F00 /logs \u7B5B\u9009\u7A97 */\n clearOverlay();\n done({ kind: \"open-logs\", pending: showsInput() ? line : \"\" });\n return;\n }\n\n if (byte === 0x7f || byte === 0x08) {\n if (!showsInput()) continue;\n if (cursor > 0) {\n line = line.slice(0, cursor - 1) + line.slice(cursor);\n cursor--;\n }\n if (slashMode()) {\n const view = paletteView();\n palSels[view.active] = 0;\n palScrolls[view.active] = 0;\n }\n redraw();\n continue;\n }\n\n if (byte >= 0x20 && byte <= 0x7e) {\n const ch = String.fromCharCode(byte);\n if (!showsInput()) {\n applyWindowKey({ type: \"char\", ch });\n continue;\n }\n let insert = ch;\n const autoSlash =\n typeof opts.autoSlash === \"function\" ? opts.autoSlash() : opts.autoSlash;\n if (autoSlash && line.length === 0 && insert !== \"/\") {\n insert = \"/\" + insert;\n }\n line = line.slice(0, cursor) + insert + line.slice(cursor);\n cursor += insert.length;\n if (slashMode()) {\n const view = paletteView();\n palSels[view.active] = 0;\n palScrolls[view.active] = 0;\n }\n redraw();\n continue;\n }\n }\n };\n stdin.on(\"data\", handler);\n });\n}\n\n/** \u6765\u6E90\u9009\u62E9\u9879:\u65B9\u62EC\u53F7 3 \u5B57\u7B26\u6807\u7B7E\u67D3\u8272\uFF08\u4F9B\u5916\u90E8/\u6D4B\u8BD5\u590D\u7528\uFF09 */\nexport const SOURCE_ITEMS: Array<{ label: string; value: string }> = SOURCE_META.map((m) => ({\n label: m.paint(`[${m.name}]`),\n value: m.value,\n}));\n\n/** REPL \u4EA4\u4E92\u6001\uFF1A\u65E0\u53C2 /logs \u6253\u5F00\u7B5B\u9009\u7A97\uFF08\u7531 startRepl \u6CE8\u5165\uFF09 */\nlet openLogsWindowHook: (() => void) | null = null;\n\nfunction writeLogLineToTty(wrapped: string): void {\n pauseAllProgress();\n try {\n stdout.write(`\\r\\x1B[K${wrapped}\\n`);\n } finally {\n resumeAllProgress();\n }\n currentRedraw?.();\n}\n\n/* ==================================================================\n * START REPL\n * ================================================================== */\n\nexport async function startRepl(): Promise<void> {\n let stopping = false;\n const onSigint = (): void => {\n stdout.write(c.yellow(\"\\n\" + t(\"repl.forceStop\") + \"\\n\"));\n forceStopAll();\n stopRemoteAgent();\n process.exit(130);\n };\n const shutdown = async (): Promise<void> => {\n if (stopping) return;\n stopping = true;\n process.off(\"SIGINT\", onSigint);\n openLogsWindowHook = null;\n stdout.write(c.dim(t(\"repl.stopping\") + \"\\n\"));\n await stopAll();\n stopRemoteAgent();\n try {\n setRaw(false);\n stdin.pause();\n } catch {\n /* ignore */\n }\n stdout.write(c.dim(t(\"repl.bye\") + \"\\n\"));\n process.exit(0);\n };\n process.on(\"SIGINT\", onSigint);\n\n if (!stdin.isTTY) {\n console.log(c.dim(t(\"repl.nonInteractive\")));\n for await (const line of (await import(\"node:readline/promises\")).createInterface({\n input: stdin,\n output: stdout,\n terminal: false,\n })) {\n const t = line.trim();\n if (!t) continue;\n const p = t.split(/\\s+/);\n if ([\"quit\", \"exit\", \"q\"].includes(p[0]!)) break;\n if (p[0] === \"init\") {\n (await import(\"./wizard.js\")).runWizard();\n continue;\n }\n await execCmd(p);\n }\n await shutdown();\n return;\n }\n console.clear();\n await playWelcomeAnimation();\n\n let logsFilterState: LogsFilterState = { levels: [], sources: [] };\n let preferredTarget: ServiceName | null = null;\n let activeTargets: ServiceName[] = [];\n let pendingInput = \"\";\n\n const host = new WindowHost({\n writeLog: writeLogLineToTty,\n onChromeChange: () => currentRedraw?.(),\n });\n\n function clearTerminal(): void {\n /* \u6E05\u89C6\u53E3\uFF1B\u518D\u6E05 scrollback\uFF0C\u907F\u514D\u5F80\u4E0A\u6ED1\u4ECD\u770B\u5230\u4E0A\u4E00\u7A97\u5185\u5BB9 */\n console.clear();\n stdout.write(\"\\x1B[3J\");\n }\n\n /** \u9996\u6B21\u8FDB\u5165\u7A97\u53E3\uFF1A\u4ECE\u5185\u5B58/\u843D\u76D8\u62C9\u4E00\u6B21\u4F5C\u4E3A\u79CD\u5B50\u7F13\u5B58 */\n function seedWindowBuffer(w: {\n id: string;\n acceptLog: (l: UnifiedLog) => boolean;\n formatLogLine: (l: UnifiedLog) => { text: string; indent: number };\n getReplayFilter?: () => { levels: string[]; sources: string[] };\n }): string[] {\n const lines: string[] = [];\n if (w.id === \"logs\") {\n const f = w.getReplayFilter?.() ?? { levels: [], sources: [] };\n const disk = readDiskLogs({\n levels: f.levels as LogLevel[],\n sources: f.sources,\n });\n for (const log of disk) {\n if (!w.acceptLog(log)) continue;\n const { text, indent } = w.formatLogLine(log);\n lines.push(wrapLogLine(text, indent));\n }\n } else {\n for (const log of getAllLogs()) {\n if (!w.acceptLog(log)) continue;\n const { text, indent } = w.formatLogLine(log);\n lines.push(wrapLogLine(text, indent));\n }\n }\n host.setBuffer(w.id, lines);\n return lines;\n }\n\n /**\n * \u5C55\u793A\u6D3B\u52A8\u7A97\uFF1A\u5148\u6E05\u5C4F\uFF0C\u518D\u6062\u590D/seed\u3002\n * - /logs\uFF1A\u7528\u843D\u76D8\u79CD\u5B50\u7F13\u5B58\uFF08\u6539\u7B5B\u9009\u624D reseed\uFF09\uFF0C\u907F\u514D\u91CD\u590D\u8BFB\u6587\u4EF6\n * - \u670D\u52A1\u4E3B\u9762\u677F\uFF1A\u6BCF\u6B21\u4ECE\u5185\u5B58\u91CD seed\uFF0C\u4FDD\u8BC1\u79BB\u5F00 /logs \u6216 Tab \u56DE\u6765\u65F6\u5185\u5BB9\u5B9E\u65F6\n */\n function showActiveWindow(opts?: { reseed?: boolean }): void {\n clearTerminal();\n const w = host.getActive();\n if (!w) {\n currentRedraw?.();\n return;\n }\n let lines: readonly string[];\n if (w.id === \"logs\") {\n if (opts?.reseed) host.invalidateBuffer(w.id);\n lines = host.hasBuffer(w.id) ? host.getBuffer(w.id) : seedWindowBuffer(w);\n } else {\n /* \u4E3B\u9762\u677F\u5B9E\u65F6\uFF1A\u4E0D\u4F5C\u5E9F\u4E5F\u65E0\u59A8\uFF0C\u76F4\u63A5\u91CD\u62C9\u5185\u5B58\u7F13\u51B2 */\n host.invalidateBuffer(w.id);\n lines = seedWindowBuffer(w);\n }\n for (const l of lines) stdout.write(l + \"\\n\");\n currentRedraw?.();\n }\n\n host.register(\n createLogsFilterWindow({\n getState: () => logsFilterState,\n setState: (next) => {\n logsFilterState = next;\n },\n /* \u7B5B\u9009\u53D8\u66F4\uFF1A\u4F5C\u5E9F /logs \u7F13\u5B58\u5E76\u91CD\u65B0\u8BFB\u76D8\u4E00\u6B21 */\n onFilterChanged: () => showActiveWindow({ reseed: true }),\n })\n );\n\n function syncServiceWindows(targets: ServiceName[]): void {\n for (const name of targets) {\n const id = serviceWindowId(name);\n if (!host.has(id)) host.register(createServiceWindow(name));\n }\n host.setServiceOrder(targets.map(serviceWindowId));\n const svc = host.getActive()?.serviceName;\n if (svc) preferredTarget = svc;\n }\n\n function openLogsWindow(): void {\n /* \u79BB\u5F00\u4E3B\u9762\u677F\uFF1A\u5176\u7F13\u5B58\u53EF\u7559\u7740\uFF0C\u4F46\u5C55\u793A\u4E0A\u5148\u6E05\u5C4F\u518D\u8FDB /logs\uFF1BEsc \u56DE\u6765\u4F1A\u6309\u5B9E\u65F6\u91CD seed \u4E3B\u9762\u677F */\n host.open(\"logs\");\n showActiveWindow();\n }\n\n openLogsWindowHook = openLogsWindow;\n\n const unsub = onLog((log) => {\n if (host.getActive()) {\n host.routeLog(log);\n return;\n }\n /* \u65E0\u6D3B\u52A8\u7A97\uFF1A\u5168\u91CF\u5C55\u793A\uFF08\u5E26\u6E90\u6807\u7B7E\uFF09\uFF0C\u4E0E\u65E7\u7A7A\u95F2\u884C\u4E3A\u4E00\u81F4 */\n writeLogLineToTty(wrapLogLine(formatLog(log), logPrefixWidth(log)));\n });\n\n async function refreshTargetsFromRuntime(): Promise<void> {\n const prevId = host.getActiveId();\n activeTargets = await listActiveSendTargets();\n syncServiceWindows(activeTargets);\n if (preferredTarget && !activeTargets.includes(preferredTarget)) {\n preferredTarget = activeTargets[0] ?? null;\n }\n const nextId = host.getActiveId();\n /* \u65B0\u6FC0\u6D3B\u7A97\u6216\u9996\u6B21\u5C1A\u65E0\u7F13\u5B58\uFF1A\u6E05\u5C4F\u5E76 seed/\u6062\u590D */\n if (nextId && (nextId !== prevId || !host.hasBuffer(nextId))) {\n showActiveWindow();\n } else if (!nextId && prevId) {\n clearTerminal();\n currentRedraw?.();\n } else {\n currentRedraw?.();\n }\n }\n\n const unsubState = onServiceStateChange(() => {\n void refreshTargetsFromRuntime();\n });\n\n function onResize(): void {\n if (!currentRedraw) return;\n const id = host.getActiveId();\n if (id) host.invalidateBuffer(id);\n showActiveWindow();\n }\n\n process.stdout.on(\"resize\", onResize);\n\n function currentTarget(): ServiceName | null {\n if (activeTargets.length === 0) return null;\n const fromWin = host.getActive()?.serviceName;\n if (fromWin && activeTargets.includes(fromWin)) {\n preferredTarget = fromWin;\n return fromWin;\n }\n if (preferredTarget && activeTargets.includes(preferredTarget)) return preferredTarget;\n preferredTarget = activeTargets[0]!;\n return preferredTarget;\n }\n\n function buildPrompt(): string {\n const tgt = currentTarget();\n return tgt ? paintSendPrompt(tgt) : plainPrompt();\n }\n\n while (true) {\n await refreshTargetsFromRuntime();\n const result = await readLine({\n getPrompt: buildPrompt,\n /* \u65E0\u670D\u52A1\u65F6\u9ED8\u8BA4\u52A0 /\uFF08\u4E0E\u7A97\u53E3\u7CFB\u7EDF\u524D\u884C\u4E3A\u4E00\u81F4\uFF09\uFF1B\u7528 getter \u4EE5\u4FBF\u8FDB\u7A0B\u9000\u51FA\u540E\u5373\u65F6\u751F\u6548 */\n autoSlash: () => activeTargets.length === 0,\n getChrome: () => host.getChrome(),\n onWindowKey: (ev) => {\n const r = host.onKey(ev);\n if (r.action === \"redraw\") showActiveWindow();\n return r;\n },\n cycleSendTarget: () => {\n const name = host.cycleServiceWindows();\n if (!name) return false;\n preferredTarget = name;\n showActiveWindow();\n return true;\n },\n initial: pendingInput,\n });\n pendingInput = \"\";\n\n if (result.kind === \"cancel\") break;\n\n if (result.kind === \"open-logs\") {\n pendingInput = result.pending;\n openLogsWindow();\n continue;\n }\n\n if (result.kind === \"run\") {\n try {\n await execCmd(result.parts);\n } catch (e) {\n if (e === \"QUIT\") break;\n console.log(c.red(t(\"common.error\", { message: (e as Error).message })));\n }\n continue;\n }\n\n const trimmed = result.value.trim();\n if (!trimmed) continue;\n\n try {\n if (trimmed.startsWith(\"/\")) {\n await execCmd(trimmed.split(/\\s+/));\n } else {\n const tgt = currentTarget();\n if (!tgt) {\n await execCmd((\"/\" + trimmed).split(/\\s+/));\n } else {\n const sent = await cmdSend(tgt, trimmed);\n if (sent) stdout.write(sent + \"\\n\");\n }\n }\n } catch (e) {\n if (e === \"QUIT\") break;\n console.log(c.red(t(\"common.error\", { message: (e as Error).message })));\n }\n }\n\n process.stdout.off(\"resize\", onResize);\n unsubState();\n unsub();\n await shutdown();\n}\n\nasync function execCmd(parts: string[]): Promise<void> {\n const normalized = parts.map((p, i) => (i === 0 && p.startsWith(\"/\") ? p.slice(1) : p));\n const [cmd, ...args] = normalized;\n\n if (cmd && ![\"help\", \"h\", \"?\", \"version\"].includes(cmd)) {\n const topGate = gateTopLevel(cmd, REPL_MODE);\n if (topGate) {\n stdout.write(topGate + \"\\n\");\n return;\n }\n }\n\n switch (cmd) {\n case \"help\":\n case \"h\":\n case \"?\":\n stdout.write(getHelp(REPL_MODE));\n break;\n case \"version\":\n await playWelcomeAnimation();\n break;\n case \"status\":\n stdout.write((await cmdStatus()) + \"\\n\");\n break;\n case \"logs\":\n case \"log\": {\n /* \u65E0\u53C2\u53F6\u547D\u4EE4\uFF1A\u6253\u5F00\u7B5B\u9009\u7A97 */\n if (openLogsWindowHook) {\n openLogsWindowHook();\n break;\n }\n stdout.write(c.yellow(t(\"repl.logsReplOnly\") + \"\\n\"));\n break;\n }\n case \"start\":\n if (args[0] === \"-all\" || args[0] === \"all\" || args[0] === \"--all\") stdout.write((await cmdStartAll()) + \"\\n\");\n else if (args[0]) stdout.write((await cmdStart(args[0])) + \"\\n\");\n else stdout.write(c.yellow(t(\"svc.start.usageShort\") + \"\\n\"));\n break;\n case \"stop\":\n if (args[0] === \"-all\" || args[0] === \"all\" || args[0] === \"--all\") stdout.write((await cmdStopAll()) + \"\\n\");\n else if (args[0]) stdout.write((await cmdStop(args[0])) + \"\\n\");\n else stdout.write(c.yellow(t(\"svc.stop.usageShort\") + \"\\n\"));\n break;\n case \"restart\":\n if (args[0] === \"-all\" || args[0] === \"all\" || args[0] === \"--all\") {\n await cmdStopAll();\n stdout.write((await cmdStartAll()) + \"\\n\");\n } else if (args[0]) stdout.write((await cmdRestart(args[0])) + \"\\n\");\n else stdout.write(c.yellow(t(\"svc.restart.usageShort\") + \"\\n\"));\n break;\n case \"send\": {\n const svc = args[0] ?? \"\";\n const msg = args.slice(1).join(\" \");\n {\n const sent = await cmdSend(svc, msg);\n if (sent) stdout.write(sent + \"\\n\");\n }\n break;\n }\n case \"update\":\n stdout.write((await cmdUpdate(args)) + \"\\n\");\n break;\n case \"locale\":\n case \"lang\":\n stdout.write(cmdLocale(args) + \"\\n\");\n break;\n case \"debug\":\n stdout.write((await cmdDebug(args)) + \"\\n\");\n break;\n case \"remote\":\n stdout.write((await cmdRemote(args, { daemonAfterEnroll: false })) + \"\\n\");\n break;\n case \"init\": {\n const wasRaw = stdin.isRaw ?? false;\n setRaw(false);\n try {\n const { runWizard } = await import(\"./wizard.js\");\n await runWizard();\n } finally {\n setRaw(wasRaw);\n }\n break;\n }\n case \"quit\":\n case \"exit\":\n case \"q\":\n throw \"QUIT\";\n default: {\n const modShort = resolveModuleTopShorthand(cmd);\n if (modShort) {\n const g = gateModuleSub(modShort, REPL_MODE);\n if (g) {\n stdout.write(g + \"\\n\");\n break;\n }\n /* create/dev \u7B49\u4EA4\u4E92\u5411\u5BFC\u9700\u6682\u65F6\u9000\u51FA raw */\n const needsCooked = modShort === \"create\" || modShort === \"dev\";\n const wasRaw = stdin.isRaw ?? false;\n if (needsCooked) setRaw(false);\n try {\n stdout.write((await dispatchModuleCommand(modShort, args)) + \"\\n\");\n } finally {\n if (needsCooked) setRaw(wasRaw);\n }\n break;\n }\n if (isModuleCommand(cmd)) {\n const [sub, ...subRest] = args;\n const g = gateModuleSub(sub, REPL_MODE);\n if (g) {\n stdout.write(g + \"\\n\");\n break;\n }\n const needsCooked = sub === \"create\" || sub === \"dev\";\n const wasRaw = stdin.isRaw ?? false;\n if (needsCooked) setRaw(false);\n try {\n stdout.write((await dispatchModuleCommand(sub, subRest)) + \"\\n\");\n } finally {\n if (needsCooked) setRaw(wasRaw);\n }\n break;\n }\n if (isPacksCommand(cmd)) {\n const [sub, ...subRest] = args;\n const g = gatePacksSub(sub, REPL_MODE);\n if (g) {\n stdout.write(g + \"\\n\");\n break;\n }\n stdout.write((await dispatchPacksCommand(sub, subRest)) + \"\\n\");\n break;\n }\n stdout.write(c.yellow(t(\"common.unknownShort\", { cmd: cmd ?? \"\" }) + \"\\n\"));\n }\n }\n}\n\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { pauseAllProgress, resumeAllProgress } from \"@sfmc-bds/sdk/logs\";\nimport chalk from \"chalk\";\nimport process, { stdin, stdout } from \"node:process\";\nimport pkg from \"../package.json\" with { type: \"json\" };\nimport { gateModuleSub, gatePacksSub, gateTopLevel } from \"./cli-gate.js\";\nimport {\n activeNode,\n clampPaletteSelection,\n commitSelection,\n formatPaletteCascadeLines,\n paletteGhost,\n promptSlashColumn,\n resolvePaletteView,\n} from \"./command-palette.js\";\nimport {\n listVisiblePacksSubs,\n listVisibleTopLevelNames,\n resolveModuleTopShorthand,\n type CommandMode,\n} from \"./command-surface.js\";\nimport { cmdRestart, cmdSend, cmdStart, cmdStartAll, cmdStatus, cmdStop, cmdStopAll, cmdUpdate } from \"./commands.js\";\nimport { cmdRemote } from \"./cmd-remote.js\";\nimport { cmdDebug } from \"./debug-command.js\";\nimport { getHelp as buildHelp } from \"./help-text.js\";\nimport { t } from \"./i18n/index.js\";\nimport { cmdLocale } from \"./locale-command.js\";\nimport {\n formatLog,\n getAllLogs,\n logPrefixWidth,\n onLog,\n readDiskLogs,\n SOURCE_META,\n wrapLogLine,\n type LogLevel,\n type UnifiedLog,\n} from \"./logs.js\";\nimport {\n dispatchModuleCommand,\n getVisibleModuleSubcommands,\n isModuleCommand,\n listInstalledModuleIdsSync,\n} from \"./module-commands.js\";\nimport { listRegistryModuleIdsSync } from \"./registry.js\";\nimport { stopRemoteAgent } from \"./remote-agent.js\";\nimport {\n createLogsFilterWindow,\n createServiceWindow,\n serviceWindowId,\n WindowHost,\n type LogsFilterState,\n type WindowChrome,\n type WindowKeyEvent,\n type WindowKeyResult,\n} from \"./repl-windows/index.js\";\nimport { listActiveSendTargets, paintSendPrompt, plainPrompt } from \"./send-target.js\";\nimport { forceStopAll, onServiceStateChange, SERVICE_NAMES, stopAll, type ServiceName } from \"./services.js\";\nimport { c, T } from \"./theme.js\";\nimport { dispatchPacksCommand, isPacksCommand } from \"./world-packs.js\";\n\nconst REPL_MODE: CommandMode = \"repl\";\n\nfunction getDisplayWidth(str: string) {\n // \u5148\u53BB\u9664 ANSI \u7801\n const plain = str.replace(/\\x1b\\[[0-9;]*m/g, \"\");\n let width = 0;\n for (const ch of plain) {\n // \u7C97\u7565\u5224\u65AD\uFF1A\u975E ASCII \u5B57\u7B26\uFF08\u5982\u4E2D\u6587\uFF09\u89C6\u4E3A\u5360 2 \u5217\n if (ch.codePointAt(0)! > 127) {\n width += 2;\n } else {\n width += 1;\n }\n }\n return width;\n}\n\nfunction charDisplayWidth(ch: string): number {\n return ch.codePointAt(0)! > 127 ? 2 : 1;\n}\n\nfunction setRaw(v: boolean): void {\n try {\n if (stdin.isTTY && typeof stdin.setRawMode === \"function\") stdin.setRawMode(v);\n } catch {}\n}\n\n/** \u5DE6\u4FA7 SFMC logo \u4E09\u884C\uFF08\u5E95\u884C\u542B\u63A5\u6A2A\u7EBF\u7684 \u2570\u2500\u2500\u2500\uFF0C\u4E0E\u6700\u7EC8\u5E03\u5C40\u4E00\u81F4\uFF09 */\nconst LOGO_ROWS = [\"\u256D\u2500\u256E\u256D\u2500\u2574\u256D\u252C\u256E\u256D\u2500\u2574\", \"\u2570\u2500\u256E\u251C\u2574 \u2502\u2502\u2502\u2502 \", \"\u2570\u2500\u256F\u2575 \u2575 \u2575\u2570\u2500\u2500\u2500\"] as const;\nconst LOGO_PAD = \" \";\nconst LOGO_TOP_GAP = \" \";\nconst LOGO_MID_GAP = \" \";\nconst SHORTCUT_HINT = ` / \u00B7 Tab \u00B7 Ctrl+P \u00B7 Ctrl+L \u00B7 \u2190\u2192 \u00B7 \u2191\u2193`;\n/** S\u2192F\u2192M\u2192C \u624B\u5199\u7B14\u987A\uFF08row, col\uFF09\uFF1B\u7A7A\u683C\u683C\u5728\u6784\u5EFA\u65F6\u8FC7\u6EE4 */\nconst LOGO_STROKE_RAW: ReadonlyArray<readonly [number, number]> = [\n // S\n [0, 1],\n [0, 2],\n [0, 0],\n [1, 0],\n [1, 1],\n [1, 2],\n [2, 2],\n [2, 1],\n [2, 0],\n // F\n [0, 3],\n [1, 3],\n [2, 3],\n [0, 4],\n [0, 5],\n [1, 4],\n // M\n [0, 6],\n [1, 6],\n [2, 6],\n [0, 7],\n [1, 7],\n [0, 8],\n [1, 8],\n [2, 8],\n // C\uFF08\u672B\u7B14\u843D\u5230 \u2570\u2500\u2500\u2500\uFF0C\u968F\u540E\u65E0\u7F1D\u63A5\u6A2A\u7EBF\u5EF6\u957F\uFF09\n [0, 10],\n [0, 11],\n [0, 9],\n [1, 9],\n [2, 9],\n [2, 10],\n [2, 11],\n [2, 12],\n];\nconst LOGO_STROKES = LOGO_STROKE_RAW.filter(([r, col]) => {\n const ch = LOGO_ROWS[r]?.[col];\n return ch !== undefined && ch !== \" \";\n});\n\n/** \u6B22\u8FCE\u6761\u7EAF\u6587\u672C\uFF08\u4E0E\u4E0B\u65B9\u6837\u5F0F\u5316 meta \u5185\u5BB9\u4E00\u81F4\uFF09 */\nconst metaPlain = `Scripts For Minecraft Server v${pkg.version}`;\n/** \u5F3A\u8C03\u9996\u5B57\u6BCD\u4E0B\u6807\uFF1AS / F / M / c */\nconst META_ACCENT_INDEX = new Set([0, 8, 12, 16]);\nconst metaUnlit = chalk.hex(T.subtle);\nconst meta = `${c.text(`S`)}${c.dim(`cripts`)} ${c.text(`F`)}${c.dim(`or`)} ${c.text(`M`)}${c.dim(`ine`)}${c.text(`c`)}${c.dim(`raft Server`)} v${pkg.version}`;\nconst metaWidth = getDisplayWidth(metaPlain);\nconst lineLength = metaWidth + 5;\n\n/** \u6309\u663E\u793A\u5217\u8FDB\u5EA6\u70B9\u4EAE\u7EAF\u6587\u672C\uFF1BpaintLit \u51B3\u5B9A\u5DF2\u4EAE\u5B57\u7B26\u6837\u5F0F */\nfunction buildTextAtProgress(\n plain: string,\n litColumns: number,\n paintLit: (ch: string, index: number) => string\n): string {\n let cols = 0;\n let out = \"\";\n for (let i = 0; i < plain.length; i++) {\n const ch = plain[i]!;\n const w = charDisplayWidth(ch);\n if (cols + w <= litColumns) {\n out += paintLit(ch, i);\n } else {\n out += metaUnlit(ch);\n }\n cols += w;\n }\n return out;\n}\n\n/** \u6309\u663E\u793A\u5217\u8FDB\u5EA6\u70B9\u4EAE meta\uFF1A\u5DF2\u4EAE\u4FDD\u7559\u6700\u7EC8\u6837\u5F0F\uFF0C\u672A\u4EAE\u7528 subtle */\nfunction buildMetaAtProgress(litColumns: number): string {\n return buildTextAtProgress(metaPlain, litColumns, (ch, i) => (META_ACCENT_INDEX.has(i) ? c.text(ch) : c.dim(ch)));\n}\n\n/** \u5FEB\u6377\u952E\u63D0\u793A\u4E0E\u6A2A\u7EBF/meta \u5171\u7528\u540C\u4E00\u5217\u8FDB\u5EA6 */\nfunction buildShortcutsAtProgress(litColumns: number): string {\n return buildTextAtProgress(SHORTCUT_HINT, litColumns, (ch) => c.dim(ch));\n}\n\n/** \u6309\u7B14\u987A\u8FDB\u5EA6\u6E32\u67D3 logo\uFF1B\u672A\u5199\u51FA\u7684\u58A8\u8FF9\u7528\u7A7A\u683C\u5360\u4F4D\uFF0C\u4FDD\u6301\u5E03\u5C40\u7A33\u5B9A */\nfunction buildLogoRows(strokeCount: number): [string, string, string] {\n const lit = new Set<string>();\n const n = Math.min(Math.max(0, strokeCount), LOGO_STROKES.length);\n for (let i = 0; i < n; i++) {\n const [r, col] = LOGO_STROKES[i]!;\n lit.add(`${r},${col}`);\n }\n return LOGO_ROWS.map((row, r) => {\n let out = \"\";\n for (let col = 0; col < row.length; col++) {\n const ch = row[col]!;\n if (ch === \" \") {\n out += \" \";\n } else if (lit.has(`${r},${col}`)) {\n out += c.text(ch);\n } else {\n out += \" \";\n }\n }\n return out;\n }) as [string, string, string];\n}\n\nfunction buildWelcomeLines(\n strokeCount: number,\n lineProgress: number,\n metaContent: string,\n shortcutContent: string\n): string[] {\n const [topLogo, midLogo, botLogo] = buildLogoRows(strokeCount);\n const line = \"\u2500\".repeat(Math.max(0, lineProgress));\n return [\n `\\n`,\n `${LOGO_PAD}${topLogo}${LOGO_TOP_GAP}${shortcutContent}`,\n `${LOGO_PAD}${midLogo}${LOGO_MID_GAP}${metaContent}`,\n `${LOGO_PAD}${botLogo}${line}`,\n ];\n}\n\n/** \u56DE\u5377\u91CD\u7ED8\uFF1A\u9996\u5E27\u76F4\u63A5\u5199\uFF0C\u4E4B\u540E\u5149\u6807\u4E0A\u79FB\u5E76\u9010\u884C ESC[2K \u6E05\u884C\u91CD\u5199 */\nfunction paintWelcomeLines(lines: string[], firstFrame: boolean): void {\n if (!firstFrame) {\n process.stdout.write(`\\x1b[${lines.length}A`);\n }\n for (let i = 0; i < lines.length; i++) {\n process.stdout.write(`\\x1b[2K\\r${lines[i]}`);\n if (i < lines.length - 1) process.stdout.write(\"\\n\");\n }\n}\n\nexport async function playWelcomeAnimation(): Promise<void> {\n const strokeTotal = LOGO_STROKES.length;\n const totalSteps = strokeTotal + lineLength;\n const finalShortcuts = c.dim(SHORTCUT_HINT);\n\n // \u975E TTY\uFF1A\u76F4\u63A5\u8F93\u51FA\u6700\u7EC8\u5E27\uFF0C\u907F\u514D\u63A7\u5236\u5E8F\u5217\u6C61\u67D3\u7BA1\u9053\u8F93\u51FA\n if (!process.stdout.isTTY) {\n const lines = buildWelcomeLines(strokeTotal, lineLength, c.bold(meta), finalShortcuts);\n process.stdout.write(`\\n${lines.join(\"\\n\")}\\n\\n`);\n return;\n }\n\n let step = 0;\n let firstFrame = true;\n\n process.stdout.write(\"\\x1b[?25l\");\n // \u5148\u7A7A\u4E00\u884C\uFF0C\u628A\u6B22\u8FCE\u5757\u4E0E\u4E0A\u65B9\u8F93\u51FA\u9694\u5F00\n process.stdout.write(\"\\n\");\n\n return new Promise((resolve) => {\n const done = (): void => {\n const finalLines = buildWelcomeLines(strokeTotal, lineLength, c.bold(meta), finalShortcuts);\n paintWelcomeLines(finalLines, firstFrame);\n process.stdout.write(\"\\x1b[?25h\\n\\n\");\n resolve();\n };\n\n const tick = (): void => {\n const inLogo = step < strokeTotal;\n const strokeCount = Math.min(step + 1, strokeTotal);\n // \u53F3\u4FA7\u4E09\u884C\uFF08shortcut / meta / \u6A2A\u7EBF\uFF09\u5171\u7528\u540C\u4E00\u5217\u8FDB\u5EA6\n const lineProgress = inLogo ? 0 : Math.min(step - strokeTotal + 1, lineLength);\n const metaContent = buildMetaAtProgress(Math.min(lineProgress, metaWidth));\n const shortcutContent = buildShortcutsAtProgress(lineProgress);\n const lines = buildWelcomeLines(strokeCount, lineProgress, metaContent, shortcutContent);\n paintWelcomeLines(lines, firstFrame);\n firstFrame = false;\n\n if (step >= totalSteps - 1) {\n done();\n return;\n }\n step += 1;\n // logo \u7B14\u987A\u7A0D\u6162\uFF1B\u63A5\u4E0A\u6A2A\u7EBF\u540E\u6062\u590D\u8F83\u5FEB\u8282\u594F\n setTimeout(tick, step < strokeTotal ? 22 : 5);\n };\n\n setTimeout(tick, 22);\n });\n}\n\n/* let welcome = `\\n\n ${c.text(`\u282A\u2841\u286F\u2801`)}\n ${c.text(`\u2812\u2801\u2803`)}${c.purple(`\u2804`)}\n ${c.text(`\u2877\u2847\u284E\u2801`)} ${meta}\n ${c.text(`\u2803\u2803\u2811\u2802`)} ${c.dim(`/ \u00B7 Tab \u00B7 Ctrl+P \u00B7 Ctrl+L \u00B7 \u2190\u2192 \u00B7 \u2191\u2193`)}\\n\n`; */\n\n/* welcome = `\\n\n \u256D\u2500\u256E\u256D\u2500\u2574\u256D\u252C\u256E\u256D\u2500\u2574 ${c.dim(`/ \u00B7 Tab \u00B7 Ctrl+P \u00B7 Ctrl+L \u00B7 \u2190\u2192 \u00B7 \u2191\u2193`)}\n \u2570\u2500\u256E\u251C\u2574 \u2502\u2502\u2502\u2502 ${meta}\n \u2570\u2500\u256F\u2575 \u2575 \u2575\u2570\u2500\u2500\u2500${\"\u2500\".repeat(getDisplayWidth(meta) + 3)}\\n`; */\n\nexport function getHelp(mode: CommandMode = \"argv\"): string {\n return buildHelp(mode);\n}\n\nfunction getCommands(): string[] {\n return listVisibleTopLevelNames(REPL_MODE);\n}\n\n/* ==================================================================\n * Context-aware completion\n * ================================================================== */\ninterface ParsedLine {\n cmd: string;\n /** cmd \u4E4B\u540E\u7684\u5168\u90E8 token(\u4E0D\u542B\u6B63\u5728\u8F93\u5165\u7684 current,\u82E5\u672B\u5C3E\u65E0\u7A7A\u683C\u5219\u4E0D\u542B\u6700\u540E\u4E00\u4E2A\u534A\u8BCD) */\n words: string[];\n argIndex: number;\n current: string;\n}\n\n/**\n * \u89E3\u6790\u5F53\u524D\u8F93\u5165\u884C,\u63D0\u53D6\u547D\u4EE4\u540D\u3001\u53C2\u6570\u4F4D\u7F6E\u3001\u6B63\u5728\u8F93\u5165\u7684 word\u3002\n * \u672B\u5C3E\u7A7A\u683C\u89C6\u4E3A\"\u521A\u7ED3\u675F\u4E00\u4E2A word,\u51C6\u5907\u8F93\u5165\u4E0B\u4E00\u4E2A\"\u3002\n */\nfunction parseLine(line: string): ParsedLine {\n const endsWithSpace = line.length > 0 && /\\s$/.test(line);\n const trimmed = line.trim();\n if (!trimmed) return { cmd: \"\", words: [], argIndex: 0, current: \"\" };\n const tokens = trimmed.split(/\\s+/);\n if (endsWithSpace) {\n return {\n cmd: tokens[0] ?? \"\",\n words: tokens.slice(1),\n argIndex: tokens.length - 1,\n current: \"\",\n };\n }\n if (tokens.length === 1) return { cmd: \"\", words: [], argIndex: 0, current: tokens[0]! };\n return {\n cmd: tokens[0]!,\n words: tokens.slice(1, -1),\n argIndex: tokens.length - 2,\n current: tokens[tokens.length - 1]!,\n };\n}\n\n/**\n * \u6839\u636E\u547D\u4EE4 + \u53C2\u6570\u4F4D\u7F6E\u8FD4\u56DE\u8865\u5168\u5019\u9009 (\u533A\u5206\u547D\u4EE4,\u4E0D\u518D\u628A\u670D\u52A1\u540D\u5F53\u6210\u6240\u6709\u6307\u4EE4\u7684\u4E8C\u7EA7\u53C2\u6570)\u3002\n */\nfunction getCompletions(parsed: ParsedLine): string[] {\n const { words, argIndex, current } = parsed;\n const cmd = parsed.cmd.startsWith(\"/\") ? parsed.cmd.slice(1) : parsed.cmd;\n const sw = (s: string): boolean => s.startsWith(current);\n if (!cmd) {\n const cmds = getCommands().map((n) => (n.startsWith(\"/\") ? n : n));\n return [\"/\", ...cmds].filter(sw);\n }\n switch (cmd) {\n case \"logs\":\n case \"log\":\n return [];\n case \"start\":\n case \"stop\":\n case \"restart\":\n if (argIndex === 0) return [\"-all\", ...SERVICE_NAMES].filter(sw);\n return [];\n case \"send\":\n if (argIndex === 0) return SERVICE_NAMES.filter(sw);\n return [];\n case \"update\":\n return [\"--check-only\", \"--force\", \"--channel=release\", \"--channel=preview\"].filter(sw);\n case \"remote\":\n if (argIndex === 0) return [\"status\", \"enroll\", \"disable\"].filter(sw);\n return [];\n case \"packs\":\n case \"addon\":\n if (argIndex === 0) return [...listVisiblePacksSubs(REPL_MODE)].filter(sw);\n if (argIndex === 1 && [\"list\"].includes(words[0] ?? \"\")) {\n return [\"--kind\", \"--search\"].filter(sw);\n }\n return [];\n default: {\n if (!isModuleCommand(cmd)) return [];\n if (argIndex === 0) return [...getVisibleModuleSubcommands(REPL_MODE)].filter(sw);\n const verb = words[0] ?? \"\";\n if (argIndex === 1 && verb === \"search\") {\n return listRegistryModuleIdsSync().filter(sw);\n }\n if (argIndex === 1 && [\"info\", \"uninstall\", \"remove\", \"verify\", \"enable\", \"disable\"].includes(verb)) {\n return listInstalledModuleIdsSync().filter(sw);\n }\n if (argIndex === 1 && verb === \"reload\") {\n return [\"--build-only\"].filter(sw);\n }\n if (argIndex >= 1 && verb === \"install\") {\n return [\"--from\", \"--sha256\", \"--link\"].filter(sw);\n }\n if (argIndex >= 1 && verb === \"list\") {\n return [\"--from\", \"--sha256\"].filter(sw);\n }\n return [];\n }\n }\n}\n\n/* ==================================================================\n * Escape sequence consumer\n * ================================================================== */\nfunction consumeEscapeSeq(chunk: Buffer, i: number): number | null {\n if (chunk[i] !== 0x1b) return null;\n const rem = chunk.length - i - 1;\n if (rem >= 2 && chunk[i + 1] === 0x5b) {\n let j = i + 2;\n while (j < chunk.length && chunk[j]! >= 0x30 && chunk[j]! <= 0x3f) j++;\n while (j < chunk.length && chunk[j]! >= 0x20 && chunk[j]! <= 0x2f) j++;\n if (j < chunk.length && chunk[j]! >= 0x40 && chunk[j]! <= 0x7e) j++;\n return j;\n }\n if (rem >= 2 && chunk[i + 1] === 0x4f) return i + 3;\n if (rem >= 1) return i + 2;\n return i + 1;\n}\n\n/* ==================================================================\n * Line reader\n * ================================================================== */\nconst history: string[] = [];\nlet historyIdx = -1;\n\n/** \u5F53\u524D readLine \u7684\u91CD\u7ED8\u51FD\u6570 (\u7A97\u53E3 resize / \u65E5\u5FD7\u63A8\u9001\u65F6\u8C03\u7528) */\nlet currentRedraw: (() => void) | null = null;\n\ntype ReadLineOpts = {\n getPrompt: () => string;\n /** \u65E0\u6D3B\u8DC3\u670D\u52A1\u65F6\uFF0C\u666E\u901A\u5B57\u7B26\u81EA\u52A8\u524D\u7F6E /\uFF1B\u53EF\u4E3A getter \u4EE5\u4FBF\u670D\u52A1\u9000\u51FA\u540E\u5373\u65F6\u751F\u6548 */\n autoSlash: boolean | (() => boolean);\n /** Tab\uFF1A\u5728\u975E / \u884C\u4E0A\u5207\u6362\u53D1\u9001\u76EE\u6807\uFF1B\u8FD4\u56DE true \u8868\u793A\u5DF2\u5904\u7406 */\n cycleSendTarget: () => boolean;\n /** \u5F53\u524D\u7A97\u53E3 chrome\uFF08\u65E0\u8F93\u5165\u7A97\u753B shortcut \u6761\uFF09 */\n getChrome?: () => WindowChrome;\n /** \u4EA4\u7ED9\u6D3B\u52A8\u7A97\u7684\u6309\u952E\uFF08Esc / L / S \u7B49\uFF09 */\n onWindowKey?: (ev: WindowKeyEvent) => WindowKeyResult;\n initial?: string;\n};\n\ntype ReadLineResult =\n | { kind: \"line\"; value: string }\n | { kind: \"cancel\" }\n | { kind: \"open-logs\"; pending: string }\n | { kind: \"run\"; parts: string[] };\n\nasync function readLine(opts: ReadLineOpts): Promise<ReadLineResult> {\n const wasRaw = stdin.isRaw ?? false;\n setRaw(true);\n stdin.resume();\n\n let line = opts.initial ?? \"\";\n let cursor = line.length;\n let suggestion = \"\";\n /** \u5404\u7EA7\u5217\u9009\u4E2D / \u6EDA\u52A8\uFF08\u4EC5\u6700\u53F3\u5217\u53EF\u5BFC\u822A\uFF09 */\n let palSels: number[] = [0];\n let palScrolls: number[] = [0];\n let overlayRows = 0;\n\n function prompt(): string {\n return opts.getPrompt();\n }\n\n function showsInput(): boolean {\n return opts.getChrome?.().showsInput !== false;\n }\n\n function slashMode(): boolean {\n return showsInput() && line.startsWith(\"/\");\n }\n\n function paletteView() {\n return resolvePaletteView(line, palSels, palScrolls);\n }\n\n function syncPaletteState(view: ReturnType<typeof resolvePaletteView>): void {\n for (let i = 0; i < view.columns.length; i++) {\n palSels[i] = view.columns[i]!.selected;\n palScrolls[i] = view.columns[i]!.scroll;\n }\n }\n\n function resetPalette(): void {\n palSels = [0];\n palScrolls = [0];\n }\n\n function clearOverlay(): void {\n stdout.write(\"\\r\\x1B[J\");\n overlayRows = 0;\n }\n\n function applyWindowKey(ev: WindowKeyEvent): boolean {\n if (!opts.onWindowKey) return false;\n const r = opts.onWindowKey(ev);\n if (r.action === \"none\") return false;\n if (r.action === \"redraw\") redraw();\n return true;\n }\n\n function redraw(): void {\n const chrome = opts.getChrome?.();\n if (chrome && !chrome.showsInput) {\n clearOverlay();\n const foot = chrome.footerShortcuts || \"\";\n stdout.write(foot);\n stdout.write(\"\\r\");\n return;\n }\n\n const p = prompt();\n suggestion = \"\";\n\n if (slashMode()) {\n const view = paletteView();\n syncPaletteState(view);\n if (cursor === line.length) {\n suggestion = paletteGhost(view);\n }\n } else {\n const parsed = parseLine(line);\n const candidates = getCompletions(parsed);\n const first = candidates[0];\n if (\n cursor === line.length &&\n parsed.current &&\n first &&\n first !== parsed.current &&\n first.startsWith(parsed.current)\n ) {\n suggestion = first.slice(parsed.current.length);\n }\n }\n\n clearOverlay();\n stdout.write(p + line);\n if (suggestion) stdout.write(c.dim(suggestion));\n\n if (slashMode()) {\n const view = paletteView();\n const indent = promptSlashColumn(p);\n const list = formatPaletteCascadeLines(view, indent);\n if (list.length > 0) {\n stdout.write(\"\\n\" + list.join(\"\\n\"));\n overlayRows = list.length;\n stdout.write(`\\x1B[${overlayRows}A`);\n }\n }\n\n const col = promptSlashColumn(p) + cursor + 1;\n stdout.write(`\\r\\x1B[${col}G`);\n }\n\n redraw();\n currentRedraw = redraw;\n\n return new Promise<ReadLineResult>((resolve) => {\n const done = (value: ReadLineResult): void => {\n stdin.removeListener(\"data\", handler);\n setRaw(wasRaw);\n currentRedraw = null;\n resolve(value);\n };\n\n const finishLine = (value: string): void => {\n clearOverlay();\n stdout.write(prompt() + value + \"\\r\\n\");\n if (value.length > 0) {\n history.push(value);\n if (history.length > 100) history.shift();\n }\n historyIdx = history.length;\n done({ kind: \"line\", value });\n };\n\n /** \u2191\u2193/Tab\uFF1A\u4EC5\u5728\u6700\u53F3\u5217\u8F6E\u6362\u9009\u4E2D\uFF0C\u5199\u5165\u7070\u5B57\uFF0C\u4E0D\u6539\u8F93\u5165\u6846 */\n const movePalSel = (delta: number): boolean => {\n const view = paletteView();\n if (view.hidden) return false;\n const col = view.columns[view.active];\n if (!col || col.items.length === 0) return false;\n const len = col.items.length;\n const cur = clampPaletteSelection(col.selected, len);\n const next = (((cur + delta) % len) + len) % len;\n palSels[view.active] = next;\n redraw();\n return true;\n };\n\n const handler = (chunk: Buffer) => {\n let i = 0;\n while (i < chunk.length) {\n if (chunk[i] === 0x1b) {\n const next = consumeEscapeSeq(chunk, i);\n if (next !== null) {\n const len = next - i;\n /* \u5355\u72EC Esc \u2192 \u4EA4\u7ED9\u7A97\u53E3\uFF08/logs \u8FD4\u56DE\uFF09 */\n if (len === 1) {\n if (applyWindowKey({ type: \"escape\" })) {\n i = next;\n continue;\n }\n i = next;\n continue;\n }\n if (!showsInput()) {\n i = next;\n continue;\n }\n if (len === 3 && chunk[i + 1] === 0x5b) {\n const fin = chunk[i + 2];\n if (fin === 0x41) {\n /* \u2191 */\n if (slashMode() && movePalSel(-1)) {\n i = next;\n continue;\n }\n if (historyIdx > 0) {\n historyIdx--;\n line = history[historyIdx] ?? \"\";\n cursor = line.length;\n resetPalette();\n redraw();\n }\n } else if (fin === 0x42) {\n /* \u2193 */\n if (slashMode() && movePalSel(1)) {\n i = next;\n continue;\n }\n if (historyIdx < history.length - 1) {\n historyIdx++;\n line = history[historyIdx] ?? \"\";\n cursor = line.length;\n resetPalette();\n redraw();\n } else if (historyIdx === history.length - 1) {\n historyIdx = history.length;\n line = \"\";\n cursor = 0;\n resetPalette();\n redraw();\n }\n } else if (fin === 0x43) {\n /* \u2192\uFF1A\u63A5\u53D7\u7070\u5B57\u6216\u79FB\u5149\u6807\uFF08\u4E0D\u5207\u6362\u9762\u677F\u7126\u70B9\uFF09 */\n if (cursor < line.length) {\n cursor++;\n redraw();\n } else if (suggestion) {\n line += suggestion;\n cursor = line.length;\n redraw();\n }\n } else if (fin === 0x44) {\n if (cursor > 0) {\n cursor--;\n redraw();\n }\n } else if (fin === 0x48) {\n cursor = 0;\n redraw();\n } else if (fin === 0x46) {\n cursor = line.length;\n redraw();\n }\n }\n i = next;\n } else i++;\n continue;\n }\n\n const byte = chunk[i]!;\n i++;\n\n if (byte === 0x0d || byte === 0x0a) {\n if (!showsInput()) continue;\n if (slashMode()) {\n const view = paletteView();\n syncPaletteState(view);\n if (!view.hidden && view.columns.some((col) => col.items.length > 0) && activeNode(view)) {\n const acc = commitSelection(line, view);\n if (acc.submit) {\n finishLine(acc.line);\n return;\n }\n line = acc.line;\n cursor = line.length;\n /* \u65B0\u5C42\u9009\u4E2D\u5F52\u96F6 */\n const depth = Math.max(0, acc.line.trimEnd().split(/\\s+/).length - 1);\n while (palSels.length <= depth + 1) palSels.push(0);\n while (palScrolls.length <= depth + 1) palScrolls.push(0);\n palSels[depth + 1] = 0;\n palScrolls[depth + 1] = 0;\n redraw();\n continue;\n }\n }\n finishLine(line);\n return;\n }\n\n if (byte === 0x03) {\n if (!showsInput()) {\n /* \u65E0\u8F93\u5165\u7A97\uFF1ACtrl+C \u8FD4\u56DE\u4E0A\u4E00\u7A97\uFF0C\u518D\u6309\u624D\u9000\u51FA */\n if (applyWindowKey({ type: \"escape\" })) continue;\n clearOverlay();\n stdout.write(\"\\r\\n\");\n done({ kind: \"cancel\" });\n return;\n }\n if (line.length > 0) {\n line = \"\";\n cursor = 0;\n resetPalette();\n redraw();\n continue;\n }\n clearOverlay();\n stdout.write(\"\\r\\n\");\n done({ kind: \"cancel\" });\n return;\n }\n\n /* Ctrl+P \u2014 \u786E\u4FDD\u4EE5 / \u5F00\u5934 */\n if (byte === 0x10) {\n if (!showsInput()) continue;\n if (!line.startsWith(\"/\")) {\n line = \"/\" + line;\n cursor = Math.min(cursor + 1, line.length);\n }\n resetPalette();\n redraw();\n continue;\n }\n\n if (byte === 0x09) {\n /* Tab\uFF1A/ \u6A21\u5F0F = \u5217\u8868\u8F6E\u6362\uFF1B\u5426\u5219\u5207\u6362\u670D\u52A1\u7A97 */\n if (slashMode()) {\n movePalSel(1);\n continue;\n }\n if (opts.cycleSendTarget()) {\n redraw();\n continue;\n }\n continue;\n }\n\n if (byte === 0x0c) {\n /* Ctrl+L \u2192 \u6253\u5F00 /logs \u7B5B\u9009\u7A97 */\n clearOverlay();\n done({ kind: \"open-logs\", pending: showsInput() ? line : \"\" });\n return;\n }\n\n if (byte === 0x7f || byte === 0x08) {\n if (!showsInput()) continue;\n if (cursor > 0) {\n line = line.slice(0, cursor - 1) + line.slice(cursor);\n cursor--;\n }\n if (slashMode()) {\n const view = paletteView();\n palSels[view.active] = 0;\n palScrolls[view.active] = 0;\n }\n redraw();\n continue;\n }\n\n if (byte >= 0x20 && byte <= 0x7e) {\n const ch = String.fromCharCode(byte);\n if (!showsInput()) {\n applyWindowKey({ type: \"char\", ch });\n continue;\n }\n let insert = ch;\n const autoSlash =\n typeof opts.autoSlash === \"function\" ? opts.autoSlash() : opts.autoSlash;\n if (autoSlash && line.length === 0 && insert !== \"/\") {\n insert = \"/\" + insert;\n }\n line = line.slice(0, cursor) + insert + line.slice(cursor);\n cursor += insert.length;\n if (slashMode()) {\n const view = paletteView();\n palSels[view.active] = 0;\n palScrolls[view.active] = 0;\n }\n redraw();\n continue;\n }\n }\n };\n stdin.on(\"data\", handler);\n });\n}\n\n/** \u6765\u6E90\u9009\u62E9\u9879:\u65B9\u62EC\u53F7 3 \u5B57\u7B26\u6807\u7B7E\u67D3\u8272\uFF08\u4F9B\u5916\u90E8/\u6D4B\u8BD5\u590D\u7528\uFF09 */\nexport const SOURCE_ITEMS: Array<{ label: string; value: string }> = SOURCE_META.map((m) => ({\n label: m.paint(`[${m.name}]`),\n value: m.value,\n}));\n\n/** REPL \u4EA4\u4E92\u6001\uFF1A\u65E0\u53C2 /logs \u6253\u5F00\u7B5B\u9009\u7A97\uFF08\u7531 startRepl \u6CE8\u5165\uFF09 */\nlet openLogsWindowHook: (() => void) | null = null;\n\nfunction writeLogLineToTty(wrapped: string): void {\n pauseAllProgress();\n try {\n stdout.write(`\\r\\x1B[K${wrapped}\\n`);\n } finally {\n resumeAllProgress();\n }\n currentRedraw?.();\n}\n\n/* ==================================================================\n * START REPL\n * ================================================================== */\n\nexport async function startRepl(): Promise<void> {\n let stopping = false;\n const onSigint = (): void => {\n stdout.write(c.yellow(\"\\n\" + t(\"repl.forceStop\") + \"\\n\"));\n forceStopAll();\n stopRemoteAgent();\n process.exit(130);\n };\n const shutdown = async (): Promise<void> => {\n if (stopping) return;\n stopping = true;\n process.off(\"SIGINT\", onSigint);\n openLogsWindowHook = null;\n stdout.write(c.dim(t(\"repl.stopping\") + \"\\n\"));\n await stopAll();\n stopRemoteAgent();\n try {\n setRaw(false);\n stdin.pause();\n } catch {\n /* ignore */\n }\n stdout.write(c.dim(t(\"repl.bye\") + \"\\n\"));\n process.exit(0);\n };\n process.on(\"SIGINT\", onSigint);\n\n if (!stdin.isTTY) {\n console.log(c.dim(t(\"repl.nonInteractive\")));\n for await (const line of (await import(\"node:readline/promises\")).createInterface({\n input: stdin,\n output: stdout,\n terminal: false,\n })) {\n const t = line.trim();\n if (!t) continue;\n const p = t.split(/\\s+/);\n if ([\"quit\", \"exit\", \"q\"].includes(p[0]!)) break;\n if (p[0] === \"init\") {\n (await import(\"./wizard.js\")).runWizard();\n continue;\n }\n await execCmd(p);\n }\n await shutdown();\n return;\n }\n console.clear();\n await playWelcomeAnimation();\n\n let logsFilterState: LogsFilterState = { levels: [], sources: [] };\n let preferredTarget: ServiceName | null = null;\n let activeTargets: ServiceName[] = [];\n let pendingInput = \"\";\n\n const host = new WindowHost({\n writeLog: writeLogLineToTty,\n onChromeChange: () => currentRedraw?.(),\n });\n\n function clearTerminal(): void {\n /* \u6E05\u89C6\u53E3\uFF1B\u518D\u6E05 scrollback\uFF0C\u907F\u514D\u5F80\u4E0A\u6ED1\u4ECD\u770B\u5230\u4E0A\u4E00\u7A97\u5185\u5BB9 */\n console.clear();\n stdout.write(\"\\x1B[3J\");\n }\n\n /** \u9996\u6B21\u8FDB\u5165\u7A97\u53E3\uFF1A\u4ECE\u5185\u5B58/\u843D\u76D8\u62C9\u4E00\u6B21\u4F5C\u4E3A\u79CD\u5B50\u7F13\u5B58 */\n function seedWindowBuffer(w: {\n id: string;\n acceptLog: (l: UnifiedLog) => boolean;\n formatLogLine: (l: UnifiedLog) => { text: string; indent: number };\n getReplayFilter?: () => { levels: string[]; sources: string[] };\n }): string[] {\n const lines: string[] = [];\n if (w.id === \"logs\") {\n const f = w.getReplayFilter?.() ?? { levels: [], sources: [] };\n const disk = readDiskLogs({\n levels: f.levels as LogLevel[],\n sources: f.sources,\n });\n for (const log of disk) {\n if (!w.acceptLog(log)) continue;\n const { text, indent } = w.formatLogLine(log);\n lines.push(wrapLogLine(text, indent));\n }\n } else {\n for (const log of getAllLogs()) {\n if (!w.acceptLog(log)) continue;\n const { text, indent } = w.formatLogLine(log);\n lines.push(wrapLogLine(text, indent));\n }\n }\n host.setBuffer(w.id, lines);\n return lines;\n }\n\n /**\n * \u5C55\u793A\u6D3B\u52A8\u7A97\uFF1A\u5148\u6E05\u5C4F\uFF0C\u518D\u6062\u590D/seed\u3002\n * - /logs\uFF1A\u7528\u843D\u76D8\u79CD\u5B50\u7F13\u5B58\uFF08\u6539\u7B5B\u9009\u624D reseed\uFF09\uFF0C\u907F\u514D\u91CD\u590D\u8BFB\u6587\u4EF6\n * - \u670D\u52A1\u4E3B\u9762\u677F\uFF1A\u6BCF\u6B21\u4ECE\u5185\u5B58\u91CD seed\uFF0C\u4FDD\u8BC1\u79BB\u5F00 /logs \u6216 Tab \u56DE\u6765\u65F6\u5185\u5BB9\u5B9E\u65F6\n */\n function showActiveWindow(opts?: { reseed?: boolean }): void {\n clearTerminal();\n const w = host.getActive();\n if (!w) {\n currentRedraw?.();\n return;\n }\n let lines: readonly string[];\n if (w.id === \"logs\") {\n if (opts?.reseed) host.invalidateBuffer(w.id);\n lines = host.hasBuffer(w.id) ? host.getBuffer(w.id) : seedWindowBuffer(w);\n } else {\n /* \u4E3B\u9762\u677F\u5B9E\u65F6\uFF1A\u4E0D\u4F5C\u5E9F\u4E5F\u65E0\u59A8\uFF0C\u76F4\u63A5\u91CD\u62C9\u5185\u5B58\u7F13\u51B2 */\n host.invalidateBuffer(w.id);\n lines = seedWindowBuffer(w);\n }\n for (const l of lines) stdout.write(l + \"\\n\");\n currentRedraw?.();\n }\n\n host.register(\n createLogsFilterWindow({\n getState: () => logsFilterState,\n setState: (next) => {\n logsFilterState = next;\n },\n /* \u7B5B\u9009\u53D8\u66F4\uFF1A\u4F5C\u5E9F /logs \u7F13\u5B58\u5E76\u91CD\u65B0\u8BFB\u76D8\u4E00\u6B21 */\n onFilterChanged: () => showActiveWindow({ reseed: true }),\n })\n );\n\n function syncServiceWindows(targets: ServiceName[]): void {\n for (const name of targets) {\n const id = serviceWindowId(name);\n if (!host.has(id)) host.register(createServiceWindow(name));\n }\n host.setServiceOrder(targets.map(serviceWindowId));\n const svc = host.getActive()?.serviceName;\n if (svc) preferredTarget = svc;\n }\n\n function openLogsWindow(): void {\n /* \u79BB\u5F00\u4E3B\u9762\u677F\uFF1A\u5176\u7F13\u5B58\u53EF\u7559\u7740\uFF0C\u4F46\u5C55\u793A\u4E0A\u5148\u6E05\u5C4F\u518D\u8FDB /logs\uFF1BEsc \u56DE\u6765\u4F1A\u6309\u5B9E\u65F6\u91CD seed \u4E3B\u9762\u677F */\n host.open(\"logs\");\n showActiveWindow();\n }\n\n openLogsWindowHook = openLogsWindow;\n\n const unsub = onLog((log) => {\n if (host.getActive()) {\n host.routeLog(log);\n return;\n }\n /* \u65E0\u6D3B\u52A8\u7A97\uFF1A\u5168\u91CF\u5C55\u793A\uFF08\u5E26\u6E90\u6807\u7B7E\uFF09\uFF0C\u4E0E\u65E7\u7A7A\u95F2\u884C\u4E3A\u4E00\u81F4 */\n writeLogLineToTty(wrapLogLine(formatLog(log), logPrefixWidth(log)));\n });\n\n async function refreshTargetsFromRuntime(): Promise<void> {\n const prevId = host.getActiveId();\n activeTargets = await listActiveSendTargets();\n syncServiceWindows(activeTargets);\n if (preferredTarget && !activeTargets.includes(preferredTarget)) {\n preferredTarget = activeTargets[0] ?? null;\n }\n const nextId = host.getActiveId();\n /* \u65B0\u6FC0\u6D3B\u7A97\u6216\u9996\u6B21\u5C1A\u65E0\u7F13\u5B58\uFF1A\u6E05\u5C4F\u5E76 seed/\u6062\u590D */\n if (nextId && (nextId !== prevId || !host.hasBuffer(nextId))) {\n showActiveWindow();\n } else if (!nextId && prevId) {\n clearTerminal();\n currentRedraw?.();\n } else {\n currentRedraw?.();\n }\n }\n\n const unsubState = onServiceStateChange(() => {\n void refreshTargetsFromRuntime();\n });\n\n function onResize(): void {\n if (!currentRedraw) return;\n const id = host.getActiveId();\n if (id) host.invalidateBuffer(id);\n showActiveWindow();\n }\n\n process.stdout.on(\"resize\", onResize);\n\n function currentTarget(): ServiceName | null {\n if (activeTargets.length === 0) return null;\n const fromWin = host.getActive()?.serviceName;\n if (fromWin && activeTargets.includes(fromWin)) {\n preferredTarget = fromWin;\n return fromWin;\n }\n if (preferredTarget && activeTargets.includes(preferredTarget)) return preferredTarget;\n preferredTarget = activeTargets[0]!;\n return preferredTarget;\n }\n\n function buildPrompt(): string {\n const tgt = currentTarget();\n return tgt ? paintSendPrompt(tgt) : plainPrompt();\n }\n\n while (true) {\n await refreshTargetsFromRuntime();\n const result = await readLine({\n getPrompt: buildPrompt,\n /* \u65E0\u670D\u52A1\u65F6\u9ED8\u8BA4\u52A0 /\uFF08\u4E0E\u7A97\u53E3\u7CFB\u7EDF\u524D\u884C\u4E3A\u4E00\u81F4\uFF09\uFF1B\u7528 getter \u4EE5\u4FBF\u8FDB\u7A0B\u9000\u51FA\u540E\u5373\u65F6\u751F\u6548 */\n autoSlash: () => activeTargets.length === 0,\n getChrome: () => host.getChrome(),\n onWindowKey: (ev) => {\n const r = host.onKey(ev);\n if (r.action === \"redraw\") showActiveWindow();\n return r;\n },\n cycleSendTarget: () => {\n const name = host.cycleServiceWindows();\n if (!name) return false;\n preferredTarget = name;\n showActiveWindow();\n return true;\n },\n initial: pendingInput,\n });\n pendingInput = \"\";\n\n if (result.kind === \"cancel\") break;\n\n if (result.kind === \"open-logs\") {\n pendingInput = result.pending;\n openLogsWindow();\n continue;\n }\n\n if (result.kind === \"run\") {\n try {\n await execCmd(result.parts);\n } catch (e) {\n if (e === \"QUIT\") break;\n console.log(c.red(t(\"common.error\", { message: (e as Error).message })));\n }\n continue;\n }\n\n const trimmed = result.value.trim();\n if (!trimmed) continue;\n\n try {\n if (trimmed.startsWith(\"/\")) {\n await execCmd(trimmed.split(/\\s+/));\n } else {\n const tgt = currentTarget();\n if (!tgt) {\n await execCmd((\"/\" + trimmed).split(/\\s+/));\n } else {\n const sent = await cmdSend(tgt, trimmed);\n if (sent) stdout.write(sent + \"\\n\");\n }\n }\n } catch (e) {\n if (e === \"QUIT\") break;\n console.log(c.red(t(\"common.error\", { message: (e as Error).message })));\n }\n }\n\n process.stdout.off(\"resize\", onResize);\n unsubState();\n unsub();\n await shutdown();\n}\n\nasync function execCmd(parts: string[]): Promise<void> {\n const normalized = parts.map((p, i) => (i === 0 && p.startsWith(\"/\") ? p.slice(1) : p));\n const [cmd, ...args] = normalized;\n\n if (cmd && ![\"help\", \"h\", \"?\", \"version\"].includes(cmd)) {\n const topGate = gateTopLevel(cmd, REPL_MODE);\n if (topGate) {\n stdout.write(topGate + \"\\n\");\n return;\n }\n }\n\n switch (cmd) {\n case \"help\":\n case \"h\":\n case \"?\":\n stdout.write(getHelp(REPL_MODE));\n break;\n case \"version\":\n await playWelcomeAnimation();\n break;\n case \"status\":\n stdout.write((await cmdStatus()) + \"\\n\");\n break;\n case \"logs\":\n case \"log\": {\n /* \u65E0\u53C2\u53F6\u547D\u4EE4\uFF1A\u6253\u5F00\u7B5B\u9009\u7A97 */\n if (openLogsWindowHook) {\n openLogsWindowHook();\n break;\n }\n stdout.write(c.yellow(t(\"repl.logsReplOnly\") + \"\\n\"));\n break;\n }\n case \"start\":\n if (args[0] === \"-all\" || args[0] === \"all\" || args[0] === \"--all\") stdout.write((await cmdStartAll()) + \"\\n\");\n else if (args[0]) stdout.write((await cmdStart(args[0])) + \"\\n\");\n else stdout.write(c.yellow(t(\"svc.start.usageShort\") + \"\\n\"));\n break;\n case \"stop\":\n if (args[0] === \"-all\" || args[0] === \"all\" || args[0] === \"--all\") stdout.write((await cmdStopAll()) + \"\\n\");\n else if (args[0]) stdout.write((await cmdStop(args[0])) + \"\\n\");\n else stdout.write(c.yellow(t(\"svc.stop.usageShort\") + \"\\n\"));\n break;\n case \"restart\":\n if (args[0] === \"-all\" || args[0] === \"all\" || args[0] === \"--all\") {\n await cmdStopAll();\n stdout.write((await cmdStartAll()) + \"\\n\");\n } else if (args[0]) stdout.write((await cmdRestart(args[0])) + \"\\n\");\n else stdout.write(c.yellow(t(\"svc.restart.usageShort\") + \"\\n\"));\n break;\n case \"send\": {\n const svc = args[0] ?? \"\";\n const msg = args.slice(1).join(\" \");\n {\n const sent = await cmdSend(svc, msg);\n if (sent) stdout.write(sent + \"\\n\");\n }\n break;\n }\n case \"update\":\n stdout.write((await cmdUpdate(args)) + \"\\n\");\n break;\n case \"locale\":\n case \"lang\":\n stdout.write(cmdLocale(args) + \"\\n\");\n break;\n case \"debug\":\n stdout.write((await cmdDebug(args)) + \"\\n\");\n break;\n case \"remote\":\n stdout.write((await cmdRemote(args, { daemonAfterEnroll: false })) + \"\\n\");\n break;\n case \"init\": {\n const wasRaw = stdin.isRaw ?? false;\n setRaw(false);\n try {\n const { runWizard } = await import(\"./wizard.js\");\n await runWizard();\n } finally {\n setRaw(wasRaw);\n }\n break;\n }\n case \"quit\":\n case \"exit\":\n case \"q\":\n throw \"QUIT\";\n default: {\n const modShort = resolveModuleTopShorthand(cmd);\n if (modShort) {\n const g = gateModuleSub(modShort, REPL_MODE);\n if (g) {\n stdout.write(g + \"\\n\");\n break;\n }\n stdout.write((await dispatchModuleCommand(modShort, args)) + \"\\n\");\n break;\n }\n if (isModuleCommand(cmd)) {\n const [sub, ...subRest] = args;\n const g = gateModuleSub(sub, REPL_MODE);\n if (g) {\n stdout.write(g + \"\\n\");\n break;\n }\n stdout.write((await dispatchModuleCommand(sub, subRest)) + \"\\n\");\n break;\n }\n if (isPacksCommand(cmd)) {\n const [sub, ...subRest] = args;\n const g = gatePacksSub(sub, REPL_MODE);\n if (g) {\n stdout.write(g + \"\\n\");\n break;\n }\n stdout.write((await dispatchPacksCommand(sub, subRest)) + \"\\n\");\n break;\n }\n stdout.write(c.yellow(t(\"common.unknownShort\", { cmd: cmd ?? \"\" }) + \"\\n\"));\n }\n }\n}\n\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["t"]
|
|
7
7
|
}
|
package/dist/runtime.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { type SpawnOptions, type SpawnSyncOptions } from "node:child_process";
|
|
2
2
|
/**
|
|
3
|
-
* 是否为 monorepo
|
|
3
|
+
* 是否为 monorepo 布局(仓根同时有 packages/db-server 与 packages/cli)。
|
|
4
4
|
* npm 全局/本地安装时 ROOT 通常是 cwd,不满足此条件。
|
|
5
5
|
*/
|
|
6
6
|
export declare function isMonorepoLayout(root: string): boolean;
|
|
7
7
|
/**
|
|
8
8
|
* 项目根目录。优先级:`process.env.SFMC_ROOT` > fallback。
|
|
9
|
-
* - monorepo
|
|
9
|
+
* - monorepo: walk-up 到 sfmc-monorepo
|
|
10
10
|
* - npm 聚合包 / 全局安装:cwd(配置与数据落在当前目录)
|
|
11
11
|
*/
|
|
12
12
|
export declare const ROOT: string;
|
|
@@ -26,24 +26,15 @@ export type ServiceId = "db" | "qq" | "update" | "manager" | "pack-manager";
|
|
|
26
26
|
*/
|
|
27
27
|
export declare function resolveServiceScript(service: ServiceId): string;
|
|
28
28
|
/**
|
|
29
|
-
* 解析 tools/fetch-module.mjs。
|
|
30
|
-
* 优先级: SFMC_FETCH_MODULE > ROOT/tools/ > @sfmc-bds/tools。
|
|
29
|
+
* 解析 packages/tools/fetch-module.mjs。
|
|
30
|
+
* 优先级: SFMC_FETCH_MODULE > ROOT/packages/tools/ > @sfmc-bds/tools。
|
|
31
31
|
*/
|
|
32
32
|
export declare function resolveFetchModule(): string | null;
|
|
33
|
-
/**
|
|
34
|
-
* 解析 tools/new-module.mjs。
|
|
35
|
-
* 优先级: SFMC_NEW_MODULE > ROOT/tools/ > @sfmc-bds/tools。
|
|
36
|
-
*/
|
|
37
|
-
export declare function resolveNewModule(): string | null;
|
|
38
33
|
/**
|
|
39
34
|
* 解析 `@sfmc-bds/sdk` 包根目录(含 package.json)。
|
|
40
35
|
* 优先级: SFMC_SDK_ROOT > createRequire(@sfmc-bds/sdk/package.json) > 公开 export 向上找 > monorepo。
|
|
41
36
|
*/
|
|
42
37
|
export declare function resolveSdkPackageRoot(): string;
|
|
43
|
-
/** @deprecated 已移除 configs-default 播种;保留空实现以免外部旧调用炸掉 */
|
|
44
|
-
export declare function resolveDefaultsDir(): string | null;
|
|
45
|
-
/** @deprecated 配置改由各服务 ensure + SDK DEFAULT 生成 */
|
|
46
|
-
export declare function seedMissingConfigsFromDefaults(_rootDir?: string): string[];
|
|
47
38
|
/**
|
|
48
39
|
* 启动一个子服务。
|
|
49
40
|
*
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAOA,OAAO,EAAoB,KAAK,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAWhG;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKtD;AASD;;;;GAIG;AACH,eAAO,MAAM,IAAI,EAAE,MAAiD,CAAC;AAErE,+CAA+C;AAC/C,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,GAAE,MAAa,GAAG,OAAO,CAGjE;AAED,eAAO,MAAM,YAAY,EAAE,MAA+C,CAAC;AAE3E,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,QAAQ,GAAG,SAAS,GAAG,cAAc,CAAC;AAsD5E;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,SAAS,GAAG,MAAM,CAkB/D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAQlD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAmE9C;AAgBD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,GAAE,MAAM,EAAO,EAAE,IAAI,GAAE,YAAiB,6CAI5F;AAED,yBAAyB;AACzB,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,GAAE,MAAM,EAAO,EAAE,IAAI,GAAE,gBAAqB,2EAIpG"}
|