Files
ft/Client/Packages/io.github.hatayama.uloopmcp/Editor/UI/SkillsTargetSelectionResolver.cs

63 lines
2.4 KiB
C#

namespace io.github.hatayama.uLoopMCP
{
using System;
public readonly struct SkillsTargetSelection
{
public readonly string DisplayName;
public readonly string DirectoryName;
public readonly string InstallFlag;
public readonly string InstallArguments;
public SkillsTargetSelection(
string displayName,
string directoryName,
string installFlag,
bool groupSkillsUnderUnityCliLoop)
{
DisplayName = displayName;
DirectoryName = directoryName;
InstallFlag = installFlag;
InstallArguments = groupSkillsUnderUnityCliLoop
? $"skills install {installFlag}"
: $"skills install {installFlag} --flat";
}
}
public static class SkillsTargetSelectionResolver
{
public static SkillsTargetSelection Resolve(
SkillsTarget target,
bool groupSkillsUnderUnityCliLoop)
{
return target switch
{
SkillsTarget.Claude => new("Claude Code", ".claude", "--claude", groupSkillsUnderUnityCliLoop),
SkillsTarget.Cursor => new("Cursor", ".cursor", "--cursor", groupSkillsUnderUnityCliLoop),
SkillsTarget.Gemini => new("Gemini CLI", ".gemini", "--gemini", groupSkillsUnderUnityCliLoop),
SkillsTarget.Codex => new("Codex CLI", ".codex", "--codex", groupSkillsUnderUnityCliLoop),
SkillsTarget.Agents => new("Other (.agents)", ".agents", "--agents", groupSkillsUnderUnityCliLoop),
_ => throw new ArgumentOutOfRangeException(nameof(target), target, null)
};
}
public static bool IsInstalled(CliSetupData data, SkillsTarget target)
{
return target switch
{
SkillsTarget.Claude => data.IsClaudeSkillsInstalled,
SkillsTarget.Cursor => data.IsCursorSkillsInstalled,
SkillsTarget.Gemini => data.IsGeminiSkillsInstalled,
SkillsTarget.Codex => data.IsCodexSkillsInstalled,
SkillsTarget.Agents => data.IsAgentsSkillsInstalled,
_ => false
};
}
public static SkillInstallState GetInstallState(CliSetupData data, SkillsTarget target)
{
return data.SelectedTarget == target ? data.SelectedTargetInstallState : SkillInstallState.Missing;
}
}
}