Skip to content

cli

Functions:

main

main(argv: Sequence[str] | None = None) -> int
Source code in src/hiperhealth/cli.py
def main(argv: Sequence[str] | None = None) -> int:
    """
    title: Run the hiperhealth CLI
    parameters:
      argv:
        type: Sequence[str] | None
        description: >-
          Optional CLI arguments. When omitted, ``sys.argv`` is used.
    returns:
      type: int
      description: Process exit code.
    """
    parser = _build_parser()
    args = parser.parse_args(list(argv) if argv is not None else None)
    registry = SkillRegistry(registry_dir=args.registry_dir)

    if args.group == 'channel':
        if args.channel_command == 'add':
            print(
                registry.add_channel(
                    args.source,
                    local_name=args.local_name,
                    ref=args.ref,
                )
            )
            return 0
        if args.channel_command == 'list':
            _print_json(
                [
                    record.model_dump(mode='json')
                    for record in registry.list_channels()
                ]
            )
            return 0
        if args.channel_command == 'skills':
            _print_json(
                [
                    record.model_dump(mode='json')
                    for record in registry.list_channel_skills(args.local_name)
                ]
            )
            return 0
        if args.channel_command == 'update':
            _print_json(registry.update_channel(args.local_name, ref=args.ref))
            return 0
        if args.channel_command == 'remove':
            registry.remove_channel(args.local_name)
            print(args.local_name)
            return 0
        if args.channel_command == 'install':
            _print_json(
                registry.install_channel(
                    args.local_name,
                    include_disabled=args.include_disabled,
                )
            )
            return 0

    if args.group == 'skill':
        if args.skill_command == 'list':
            _print_json(
                [
                    record.model_dump(mode='json')
                    for record in registry.list_skills(
                        channel=args.channel,
                        installed_only=args.installed_only,
                    )
                ]
            )
            return 0
        if args.skill_command == 'install':
            print(registry.install_skill(args.skill_id))
            return 0
        if args.skill_command == 'update':
            print(
                registry.update_skill(
                    args.skill_id,
                    pull_channel=args.pull,
                )
            )
            return 0
        if args.skill_command == 'remove':
            registry.remove_skill(args.skill_id)
            print(args.skill_id)
            return 0

    parser.error('unsupported command')
    return 2