feat: add backlog processing flag

This commit is contained in:
banteg
2025-12-28 21:42:03 +04:00
parent fd2d0297c4
commit 8be15d7df3
4 changed files with 52 additions and 2 deletions
+9
View File
@@ -43,6 +43,7 @@ Optional flags:
- `--progress-edit-every FLOAT` (default `2.5`) - `--progress-edit-every FLOAT` (default `2.5`)
- `--progress-silent/--no-progress-silent` (default silent) - `--progress-silent/--no-progress-silent` (default silent)
- `--final-notify/--no-final-notify` (default notify via new message) - `--final-notify/--no-final-notify` (default notify via new message)
- `--ignore-backlog/--process-backlog` (default ignore pending updates)
## Option 2: MCP server ## Option 2: MCP server
@@ -52,6 +53,10 @@ Run:
uv run mcp-bridge uv run mcp-bridge
``` ```
Optional flags:
- `--ignore-backlog/--process-backlog` (default ignore pending updates)
## Option 3: tmux ## Option 3: tmux
Reply injector: Reply injector:
@@ -60,6 +65,10 @@ Reply injector:
uv run tmux-reply uv run tmux-reply
``` ```
Optional flags:
- `--ignore-backlog/--process-backlog` (default ignore pending updates)
Notifier (call from your existing hook): Notifier (call from your existing hook):
```bash ```bash
@@ -279,6 +279,11 @@ def run(
"--final-notify/--no-final-notify", "--final-notify/--no-final-notify",
help="Send the final response as a new message (not an edit).", help="Send the final response as a new message (not an edit).",
), ),
ignore_backlog: bool = typer.Option(
True,
"--ignore-backlog/--process-backlog",
help="Skip pending Telegram updates that arrived before startup.",
),
) -> None: ) -> None:
config = load_telegram_config() config = load_telegram_config()
token = config_get(config, "bot_token") or "" token = config_get(config, "bot_token") or ""
@@ -327,6 +332,7 @@ def run(
max_workers = None max_workers = None
pool = ThreadPoolExecutor(max_workers=max_workers or 4) pool = ThreadPoolExecutor(max_workers=max_workers or 4)
offset: Optional[int] = None offset: Optional[int] = None
ignore_backlog = bool(ignore_backlog)
log(f"[startup] pwd={startup_pwd}") log(f"[startup] pwd={startup_pwd}")
log("Option1 bridge running (codex exec). Long-polling Telegram...") log("Option1 bridge running (codex exec). Long-polling Telegram...")
@@ -482,6 +488,13 @@ def run(
time.sleep(2.0) time.sleep(2.0)
continue continue
if ignore_backlog:
if updates:
offset = updates[-1]["update_id"] + 1
log(f"[startup] drained {len(updates)} pending update(s)")
continue
ignore_backlog = False
for upd in updates: for upd in updates:
offset = upd["update_id"] + 1 offset = upd["update_id"] + 1
msg = upd.get("message") or {} msg = upd.get("message") or {}
@@ -255,7 +255,13 @@ class MCPStdioClient:
pass pass
def run() -> None: def run(
ignore_backlog: bool = typer.Option(
True,
"--ignore-backlog/--process-backlog",
help="Skip pending Telegram updates that arrived before startup.",
),
) -> None:
config = load_telegram_config() config = load_telegram_config()
token = config_get(config, "bot_token") or "" token = config_get(config, "bot_token") or ""
db_path = config_get(config, "bridge_db") or "./bridge_routes.sqlite3" db_path = config_get(config, "bridge_db") or "./bridge_routes.sqlite3"
@@ -289,6 +295,7 @@ def run() -> None:
print(f"tools/list failed: {e}") print(f"tools/list failed: {e}")
offset: Optional[int] = None offset: Optional[int] = None
ignore_backlog = bool(ignore_backlog)
print("Option2 bridge running (codex mcp-server). Long-polling Telegram...") print("Option2 bridge running (codex mcp-server). Long-polling Telegram...")
@@ -345,6 +352,13 @@ def run() -> None:
time.sleep(2.0) time.sleep(2.0)
continue continue
if ignore_backlog:
if updates:
offset = updates[-1]["update_id"] + 1
print(f"[startup] drained {len(updates)} pending update(s)")
continue
ignore_backlog = False
for upd in updates: for upd in updates:
offset = upd["update_id"] + 1 offset = upd["update_id"] + 1
msg = upd.get("message") or {} msg = upd.get("message") or {}
@@ -32,7 +32,13 @@ def tmux_send_text(target: str, text: str, press_enter: bool = True) -> None:
subprocess.check_call(["tmux", "send-keys", "-t", target, "Enter"]) subprocess.check_call(["tmux", "send-keys", "-t", target, "Enter"])
def run() -> None: def run(
ignore_backlog: bool = typer.Option(
True,
"--ignore-backlog/--process-backlog",
help="Skip pending Telegram updates that arrived before startup.",
),
) -> None:
config = load_telegram_config() config = load_telegram_config()
token = config_get(config, "bot_token") or "" token = config_get(config, "bot_token") or ""
db_path = config_get(config, "bridge_db") or "./bridge_routes.sqlite3" db_path = config_get(config, "bridge_db") or "./bridge_routes.sqlite3"
@@ -42,6 +48,7 @@ def run() -> None:
store = RouteStore(db_path) store = RouteStore(db_path)
offset: Optional[int] = None offset: Optional[int] = None
ignore_backlog = bool(ignore_backlog)
print("Option3 reply bot running (tmux injector). Long-polling Telegram...") print("Option3 reply bot running (tmux injector). Long-polling Telegram...")
while True: while True:
@@ -52,6 +59,13 @@ def run() -> None:
time.sleep(2.0) time.sleep(2.0)
continue continue
if ignore_backlog:
if updates:
offset = updates[-1]["update_id"] + 1
print(f"[startup] drained {len(updates)} pending update(s)")
continue
ignore_backlog = False
for upd in updates: for upd in updates:
offset = upd["update_id"] + 1 offset = upd["update_id"] + 1
msg = upd.get("message") or {} msg = upd.get("message") or {}