跳到正文
cccskills
免费在 GitHub 公开

mutually-exclusive-group-handler

Generate logic for handling mutually exclusive argument groups with clear error messages and validation in CLI applications.

中文简介正在准备中。当前显示原文说明。

查看安装方法

包含的文件(2)

  • SKILL.md5.1 KB
  • README.md1.0 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

Mutually Exclusive Group Handler

Generate logic for handling mutually exclusive CLI argument groups.

Capabilities

  • Generate mutually exclusive group validation
  • Create dependent argument relationships
  • Set up required group validation
  • Implement custom conflict messages
  • Configure OR/XOR group logic
  • Generate documentation for groups

Usage

Invoke this skill when you need to:

  • Implement mutually exclusive options
  • Create dependent argument chains
  • Validate argument relationships
  • Generate clear conflict messages

Inputs

ParameterTypeRequiredDescription
languagestringYesTarget language
groupsarrayYesMutually exclusive group definitions

Group Structure

{
  "groups": [
    {
      "name": "output-format",
      "type": "mutually_exclusive",
      "required": true,
      "options": ["--json", "--yaml", "--table"],
      "errorMessage": "Choose one output format: --json, --yaml, or --table"
    },
    {
      "name": "auth-method",
      "type": "mutually_exclusive",
      "options": ["--token", "--username"],
      "dependencies": {
        "--username": ["--password"]
      }
    }
  ]
}

Generated Patterns

TypeScript Group Handler

interface GroupValidation {
  name: string;
  options: string[];
  required?: boolean;
  errorMessage?: string;
  dependencies?: Record<string, string[]>;
}

export function validateMutuallyExclusiveGroups(
  args: Record<string, unknown>,
  groups: GroupValidation[]
): void {
  for (const group of groups) {
    const presentOptions = group.options.filter(opt => {
      const key = opt.replace(/^--/, '').replace(/-/g, '_');
      return args[key] !== undefined;
    });

    // Check mutual exclusivity
    if (presentOptions.length > 1) {
      throw new Error(
        group.errorMessage ||
        `Options ${presentOptions.join(', ')} are mutually exclusive`
      );
    }

    // Check required group
    if (group.required && presentOptions.length === 0) {
      throw new Error(
        `One of ${group.options.join(', ')} is required`
      );
    }

    // Check dependencies
    if (group.dependencies && presentOptions.length === 1) {
      const selected = presentOptions[0];
      const deps = group.dependencies[selected];
      if (deps) {
        for (const dep of deps) {
          const depKey = dep.replace(/^--/, '').replace(/-/g, '_');
          if (args[depKey] === undefined) {
            throw new Error(
              `${selected} requires ${dep} to be specified`
            );
          }
        }
      }
    }
  }
}

Python Group Handler

from typing import Dict, List, Optional, Any

class MutuallyExclusiveGroup:
    def __init__(
        self,
        name: str,
        options: List[str],
        required: bool = False,
        error_message: Optional[str] = None,
        dependencies: Optional[Dict[str, List[str]]] = None
    ):
        self.name = name
        self.options = options
        self.required = required
        self.error_message = error_message
        self.dependencies = dependencies or {}

def validate_groups(args: Dict[str, Any], groups: List[MutuallyExclusiveGroup]) -> None:
    for group in groups:
        present = [
            opt for opt in group.options
            if args.get(opt.lstrip('-').replace('-', '_')) is not None
        ]

        # Check mutual exclusivity
        if len(present) > 1:
            raise ValueError(
                group.error_message or
                f"Options {', '.join(present)} are mutually exclusive"
            )

        # Check required
        if group.required and not present:
            raise ValueError(
                f"One of {', '.join(group.options)} is required"
            )

        # Check dependencies
        if present and group.dependencies:
            selected = present[0]
            deps = group.dependencies.get(selected, [])
            for dep in deps:
                dep_key = dep.lstrip('-').replace('-', '_')
                if args.get(dep_key) is None:
                    raise ValueError(
                        f"{selected} requires {dep} to be specified"
                    )

Workflow

  1. Define groups - Specify mutually exclusive options
  2. Set requirements - Required vs optional groups
  3. Add dependencies - Dependent argument chains
  4. Create messages - Custom error messages
  5. Generate validator - Validation logic
  6. Generate docs - Group documentation

Target Processes

  • argument-parser-setup
  • error-handling-user-feedback
  • cli-command-structure-design

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

Provide implementations of advanced data structures

中文简介正在准备中。当前显示原文说明。

a5c-ai/babysitter18572026年9月17日 更新

Fresh adversarial code review with binary PASS/FAIL verdicts, evidence citations, and anchoring bias prevention via fresh reviewer spawning.

中文简介正在准备中。当前显示原文说明。

a5c-ai/babysitter18572026年9月17日 更新

WASM-based instant code transforms for simple tasks, achieving 352x speedup over LLM inference with zero cost.

中文简介正在准备中。当前显示原文说明。

a5c-ai/babysitter18572026年9月17日 更新

Coordinate Crew (persistent) and Polecat (transient) agents using Gas Town's hook-based work distribution and GUPP principle.

中文简介正在准备中。当前显示原文说明。

a5c-ai/babysitter18572026年9月17日 更新

Generate visual representations of algorithm execution

中文简介正在准备中。当前显示原文说明。

a5c-ai/babysitter18572026年9月17日 更新

Hierarchical coordination and drift detection with frequent checkpoints, shared memory coherence validation, role specialization enforcement, and short task cycles.

中文简介正在准备中。当前显示原文说明。

a5c-ai/babysitter18572026年9月17日 更新

查看 a5c-ai 的全部技能

报告此技能的问题