






















@@ -595,6 +595,24 @@ export function hasGauntletWorkRows(rows) {
595595return rows.some((row) => row.phase !== "prebuild");
596596}
597597598+function isPluginOwnedCliAlias(alias) {
599+return alias.kind === "runtime-slash" && alias.cliCommand === alias.name;
600+}
601+602+function buildSlashHelpProbe(params) {
603+const command = params.alias.cliCommand ?? params.alias.name;
604+return {
605+cwd: params.repoRoot,
606+env: params.env,
607+logDir: path.join(params.outputDir, "logs", "slash-help"),
608+ ...openclawCommand(params.repoRoot, [command, "--help"]),
609+label: `${params.plugin.id}-slash-${params.alias.name}`,
610+phase: "slash:help",
611+pluginId: params.plugin.id,
612+timeoutMs: params.commandTimeoutMs,
613+};
614+}
615+598616async function runPluginLifecycle(params) {
599617for (const plugin of params.plugins) {
600618const commands = [
@@ -603,13 +621,34 @@ async function runPluginLifecycle(params) {
603621args: ["install", plugin.id],
604622},
605623{ phase: "inspect", args: ["inspect", plugin.id, "--json"] },
624+ ...(params.skipSlashHelp
625+ ? []
626+ : plugin.cliCommandAliases
627+.filter(isPluginOwnedCliAlias)
628+.map((alias) => ({ phase: `slash-help:${alias.name}`, alias }))),
606629{ phase: "disable", args: ["disable", plugin.id] },
607630 ...(plugin.hasRequiredConfigFields ? [] : [{ phase: "enable", args: ["enable", plugin.id] }]),
608631{ phase: "doctor", args: ["doctor"] },
609632{ phase: "uninstall", args: ["uninstall", plugin.id, "--force"] },
610633];
611-for (const { phase, args } of commands) {
634+for (const { phase, args, alias } of commands) {
612635process.stderr.write(`[plugin-gauntlet] ${plugin.id} ${phase}\n`);
636+if (alias) {
637+params.rows.push(
638+await runMeasuredCommand({
639+ ...buildSlashHelpProbe({
640+repoRoot: params.repoRoot,
641+outputDir: params.outputDir,
642+env: params.env,
643+ plugin,
644+ alias,
645+commandTimeoutMs: params.commandTimeoutMs,
646+}),
647+label: `${plugin.id}-${phase}`,
648+}),
649+);
650+continue;
651+}
613652params.rows.push(
614653await runMeasuredCommand({
615654cwd: params.repoRoot,
@@ -628,19 +667,21 @@ async function runPluginLifecycle(params) {
628667629668async function runSlashHelpProbes(params) {
630669for (const plugin of params.plugins) {
631-for (const alias of plugin.cliCommandAliases) {
632-const command = alias.cliCommand ?? alias.name;
670+const aliases = params.includePluginOwnedCliAliases
671+ ? plugin.cliCommandAliases
672+ : plugin.cliCommandAliases.filter((entry) => !isPluginOwnedCliAlias(entry));
673+for (const alias of aliases) {
633674process.stderr.write(`[plugin-gauntlet] ${plugin.id} slash-help /${alias.name}\n`);
634675params.rows.push(
635676await runMeasuredCommand({
636-cwd: params.repoRoot,
637-env: params.env,
638-logDir: path.join(params.outputDir, "logs", "slash-help"),
639-...openclawCommand(params.repoRoot, [command, "--help"]),
640-label: `${plugin.id}-slash-${alias.name}`,
641-phase: "slash:help",
642-pluginId: plugin.id,
643-timeoutMs: params.commandTimeoutMs,
677+...buildSlashHelpProbe({
678+ repoRoot: params.repoRoot,
679+ outputDir: params.outputDir,
680+ env: params.env,
681+ plugin,
682+ alias,
683+ commandTimeoutMs: params.commandTimeoutMs,
684+}),
644685}),
645686);
646687}
@@ -816,6 +857,7 @@ async function main() {
816857plugins: selectedPlugins,
817858 rows,
818859commandTimeoutMs: options.commandTimeoutMs,
860+skipSlashHelp: options.skipSlashHelp,
819861});
820862}
821863if (!prebuildFailed && !options.skipSlashHelp) {
@@ -826,6 +868,7 @@ async function main() {
826868plugins: selectedPlugins,
827869 rows,
828870commandTimeoutMs: options.commandTimeoutMs,
871+includePluginOwnedCliAliases: options.skipLifecycle,
829872});
830873}
831874const qaSummaries =
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。