Files
TJWaterAgent/cli/src/help/index.ts
T
jiang 93d70da8be
Agent CI/CD / deploy-fallback-log (push) Has been cancelled
Agent CI/CD / docker-image (push) Has been cancelled
refactor(cli): split tjwater cli modules
2026-06-07 19:43:44 +08:00

54 lines
2.2 KiB
TypeScript

import { SCHEMA_VERSION } from "../core/constants.js";
import { GROUP_SUMMARIES, commandDocs, hasVisibleSubcommands, isHiddenPath } from "./docs.js";
import type { HelpPayload } from "../core/types.js";
export function helpPayload(pathParts: string[]): HelpPayload | null {
const path = pathParts.join(" ");
if (path && isHiddenPath(path)) return null;
if (path && commandDocs.has(path)) return commandDocs.get(path)!;
if (!path) {
const seen = new Set<string>();
const commands: Array<{ command: string; summary: string }> = [];
for (const doc of [...commandDocs.values()].sort((a, b) => a.command.localeCompare(b.command))) {
if (isHiddenPath(doc.command)) continue;
const command = doc.command.split(" ")[0]!;
if (seen.has(command)) continue;
seen.add(command);
commands.push({ command, summary: GROUP_SUMMARIES[command] ?? `${command} 可用子命令` });
}
return {
ok: true,
schema_version: SCHEMA_VERSION,
summary: "可用一级菜单",
menu_level: 1,
commands,
};
}
const prefix = path ? `${path} ` : "";
const children: Array<{ command: string; summary: string; usage: string; example: string }> = [];
const seen = new Set<string>();
for (const doc of [...commandDocs.values()].sort((a, b) => a.command.localeCompare(b.command))) {
if (isHiddenPath(doc.command)) continue;
if (!doc.command.startsWith(prefix)) continue;
const child = doc.command.slice(prefix.length).split(" ")[0]!;
if (seen.has(child)) continue;
seen.add(child);
const childPath = path ? `${path} ${child}` : child;
const isGroup = hasVisibleSubcommands(childPath);
const childDoc = commandDocs.get(childPath) ?? doc;
children.push({
command: childPath,
summary: isGroup ? (GROUP_SUMMARIES[childPath] ?? `${childPath} 可用子命令`) : childDoc.summary,
usage: isGroup ? `tjwater-cli ${childPath} help` : childDoc.usage,
example: isGroup ? `tjwater-cli ${childPath} help` : childDoc.examples[0]!,
});
}
if (!children.length && path) return null;
return {
ok: true,
schema_version: SCHEMA_VERSION,
summary: GROUP_SUMMARIES[path] ?? `${path} 可用子命令`,
commands: children,
};
}