CLI: tg-list — список входящих TG (фильтр --new, лимит -n)

This commit is contained in:
Simbiot Harness 2026-09-30 06:56:25 +00:00
parent 62e9d756d7
commit 5faf78fd09

28
cli.py
View file

@ -45,6 +45,12 @@ def main():
p_tgt.add_argument("msg_id", help="id входящего (m-NNN)")
p_tgt.add_argument("--force", action="store_true", help="перерасшифровать заново")
p_tgl = sub.add_parser("tg-list", help="список входящих TG-сообщений (inbox)")
p_tgl.add_argument("--new", action="store_true", help="только без ответа")
p_tgl.add_argument("-n", "--limit", type=int, default=25,
help="сколько последних показать")
p_tgl.add_argument("--all", action="store_true", help="без ограничения по количеству")
p_lad = sub.add_parser("ladder", help="срез лестницы: уровни, занятость, задачи, эскалации")
p_not = sub.add_parser("tg-notify", help="отправить сообщение в чат харнеса (уведомление)")
p_not.add_argument("text")
@ -153,6 +159,28 @@ def main():
print(f"ПУСТО (engine={engine})"
+ (f", причина: {reason}" if reason else "")
+ " — транскрипт записан в стор как пустой")
elif args.cmd == "tg-list":
es.init_db()
model = es.run_projections()
inbox = model.get("inbox") or {}
rows = sorted(inbox.items(),
key=lambda kv: int(kv[0].split("-")[1]) if kv[0].split("-")[1].isdigit() else 10**9)
total = len(rows)
fresh = [kv for kv in rows if not kv[1].get("replied") and not kv[1].get("ignored")]
print(f"всего: {total} | без ответа: {len(fresh)} | "
f"отвечено: {sum(1 for _, v in rows if v.get('replied'))} | "
f"ignored: {sum(1 for _, v in rows if v.get('ignored'))}")
shown = [kv for kv in rows if not args.new or (not kv[1].get("replied") and not kv[1].get("ignored"))]
if not args.all:
shown = shown[-args.limit:]
if not shown:
print("(нет сообщений по фильтру)")
for mid, v in shown:
who = v.get("username") or v.get("from_name") or v.get("chat_id") or "?"
st = ("replied" if v.get("replied") else "ignored" if v.get("ignored")
else "transcribed" if v.get("transcribed") else "new")
body = v.get("transcript") or v.get("text") or ""
print(f"{mid:12} {str(who)[:12]:12} {st:11} {str(v.get('kind') or 'text'):5} {str(body)[:100]}")
elif args.cmd == "ladder":
es.init_db()
from harness import tg_inbox