Source code for fermilink.cli.parser_gateway

from __future__ import annotations

import argparse
from collections.abc import Callable


CommandHandler = Callable[[argparse.Namespace], int]


[docs] def register_gateway_parser( subparsers: argparse._SubParsersAction[argparse.ArgumentParser], # type: ignore[attr-defined] *, cmd_gateway: CommandHandler, ) -> None: """ Register parser arguments for gateway. Parameters ---------- subparsers : argparse._SubParsersAction[argparse.ArgumentParser] Subparser collection created from the root parser. cmd_gateway : CommandHandler Command handler for `gateway`. Returns ------- None No return value; parser objects are mutated in place. """ gateway_parser = subparsers.add_parser( "gateway", help=( "Run Telegram gateway that maps chat sessions to sticky workspaces " "and executes requests via fermilink exec by default." ), ) gateway_parser.add_argument( "--telegram-token", default=None, help=( "Telegram bot token. When omitted, reads " "FERMILINK_GATEWAY_TELEGRAM_TOKEN." ), ) gateway_parser.add_argument( "--allow-from", action="append", default=None, help=( "Allowlist sender ids/usernames (repeatable, supports comma-separated " "entries). Empty allowlist permits all senders." ), ) gateway_parser.add_argument( "--poll-timeout-seconds", type=int, default=30, help="Telegram getUpdates long-poll timeout in seconds (default: 30).", ) gateway_parser.add_argument( "--session-store", default=None, help=( "Optional path for gateway session-state JSON. Defaults to " "$FERMILINK_RUNTIME_ROOT/chat_sessions.json." ), ) gateway_parser.add_argument( "--package", dest="package_id", default=None, help="Pin one installed package id and skip auto routing.", ) gateway_parser.add_argument( "--sandbox", default=None, help=( "Override sandbox mode for loop/workflow runs triggered by gateway messages. " "When omitted, uses `fermilink agent` policy." ), ) gateway_parser.add_argument( "--max-iterations", type=int, default=10, help="Forwarded to loop: max iterations per message (default: 10).", ) gateway_parser.add_argument( "--wait-seconds", type=float, default=1.0, help="Forwarded to loop polling interval/wait fallback (default: 1).", ) gateway_parser.add_argument( "--max-wait-seconds", type=float, default=6000.0, help="Forwarded to loop max per-iteration wait cap (default: 6000).", ) gateway_parser.add_argument( "--pid-stall-seconds", type=float, default=900.0, help=( "Forwarded to loop local-pid stall timeout in seconds " "(default: 900; set 0 to disable)." ), ) gateway_parser.add_argument( "--hpc-profile", default=None, help=( "Optional JSON file forwarded to gateway-triggered exec/loop/workflow " "runs (`fermilink exec`, `fermilink loop`, " "`fermilink research ...`, `fermilink reproduce ...`)." ), ) init_git_group = gateway_parser.add_mutually_exclusive_group(required=False) init_git_group.add_argument( "--init-git", dest="init_git", action="store_true", default=True, help="Auto-run git init in gateway-created workspace repos (default).", ) init_git_group.add_argument( "--no-init-git", dest="init_git", action="store_false", help="Fail when workspace repo lacks git metadata.", ) gateway_parser.set_defaults(func=cmd_gateway)