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