Files
iofficeai--officecli/src/officecli/CommandBuilder.IntegrationStubs.cs
wehub-resource-sync 8cb1f9f479
Publish SDK (PyPI) / publish (push) Waiting to run
Publish SDK (npm) / publish (@aionui/officecli-sdk) (push) Waiting to run
Publish SDK (npm) / publish (@officecli/officecli-sdk) (push) Waiting to run
Publish SDK (npm) / publish (@officecli/sdk) (push) Waiting to run
Publish SDK (npm) / publish (officecli-sdk) (push) Waiting to run
SDK smoke / smoke (windows-latest) (push) Waiting to run
SDK smoke / smoke (macos-latest) (push) Waiting to run
SDK smoke / smoke (ubuntu-latest) (push) Waiting to run
Skill parity / diff (push) Waiting to run
chore: import upstream snapshot with attribution
2026-07-13 13:09:29 +08:00

53 lines
2.6 KiB
C#

// Copyright 2026 OfficeCLI (https://OfficeCLI.AI)
// SPDX-License-Identifier: Apache-2.0
using System.CommandLine;
namespace OfficeCli;
static partial class CommandBuilder
{
// Stub Commands for the early-dispatch trio (mcp/skills/install).
// These never execute their SetAction during normal use — Program.cs
// intercepts those args before System.CommandLine sees them. The stubs
// exist purely so:
// 1. `officecli --help` lists them in its Commands section (no longer
// missing 3 commands relative to `officecli help`).
// 2. `officecli <cmd> --help` reaches SCL (Program.cs falls through
// on --help/-h) and prints the usage from EarlyDispatchHelp.
// Keep the usage strings in EarlyDispatchHelp (CommandBuilder.Help.cs)
// as the single source of truth; this file just re-emits them.
// Short blurbs shown both in `officecli --help`'s Commands list and at
// the top of `officecli <cmd> --help`. Detailed multi-line usage lives
// in EarlyDispatchHelp and is surfaced via `officecli help <cmd>` (the
// single source of truth for verbose usage). Each blurb ends with a
// hint pointing there, so `<cmd> --help` users discover it.
private static readonly Dictionary<string, string> StubBlurbs =
new(StringComparer.OrdinalIgnoreCase)
{
["mcp"] = "Start the MCP stdio server, or register/unregister officecli with an MCP client. Run 'officecli help mcp' for full usage.",
["skills"] = "Install agent skill definitions (Claude Code, Cursor, Copilot, ...). Run 'officecli help skills' for full usage.",
["install"] = "One-step setup: install binary + skills + MCP for detected agents. Run 'officecli help install' for full usage.",
};
internal static IEnumerable<Command> BuildIntegrationStubCommands()
{
foreach (var (name, blurb) in StubBlurbs)
{
var cmd = new Command(name, blurb);
// SetAction is defense-in-depth: with the args-rewrite + Program.cs
// early-dispatch this code path is unreachable in normal use, but
// it ensures programmatic callers (e.g. tests parsing rootCommand
// directly) still get a sensible verbose-usage printout instead
// of silent no-op. Routes to the same source of truth as
// `officecli help <cmd>` and the Program.cs error path.
cmd.SetAction(_ =>
{
WriteEarlyDispatchUsage(name, Console.Out);
return 0;
});
yield return cmd;
}
}
}