From a8d456529f472b37bb853300fed9103803bb8451 Mon Sep 17 00:00:00 2001 From: operator Date: Sat, 3 Oct 2026 19:15:50 +0000 Subject: [PATCH] muse-chat-api: add sidechat use/main/list commands --- bin/muse-chat-api.py | 66 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 61 insertions(+), 5 deletions(-) diff --git a/bin/muse-chat-api.py b/bin/muse-chat-api.py index 0a4ba17..95a5cc9 100755 --- a/bin/muse-chat-api.py +++ b/bin/muse-chat-api.py @@ -168,12 +168,50 @@ def cmd_wait(ws, timeout=30): time.sleep(5) cmd_messages(ws, 2) +def cmd_sidechat_use(ws, chat_id): + """Navigate to a side chat by ID.""" + ws.send(json.dumps({ + "id": 1, "method": "Page.navigate", + "params": {"url": f"https://muse.ai/thread/{chat_id}"} + })) + json.loads(ws.recv()) + time.sleep(5) + url = ev(ws, "window.location.href") + print(f"Navigated to: {url}") + +def cmd_sidechat_main(ws): + """Navigate back to main chat.""" + ws.send(json.dumps({ + "id": 1, "method": "Page.navigate", + "params": {"url": "https://muse.ai/"} + })) + json.loads(ws.recv()) + time.sleep(5) + print("Back to main chat") + +def cmd_sidechat_list(ws): + """List side chats via DOM.""" + ev(ws, """(() => { + const btn = [...document.querySelectorAll("button")].find(b => + b.textContent.includes("Open chat and side chats") + ); + if (btn) btn.click(); + })()""") + time.sleep(2) + chats = ev(ws, """(() => { + const text = document.body.innerText; + const idx = text.indexOf("Side chats"); + if (idx === -1) return "NOSIDEBAR"; + return text.slice(idx, idx + 1000); + })()""") + print(chats[:500]) + def main(): p = argparse.ArgumentParser() p.add_argument('--account', required=True, choices=list(ACCOUNTS.keys()), help='Agent name (matches node, profile, ACCOUNTS.md)') - p.add_argument('command', choices=['send', 'messages', 'wait', 'approvals']) - p.add_argument('arg', nargs='?', default=None) + p.add_argument('command', choices=['send', 'messages', 'wait', 'approvals', 'sidechat']) + p.add_argument('arg', nargs='*', default=[]) args = p.parse_args() node, cdp_url = ACCOUNTS[args.account] @@ -185,17 +223,35 @@ def main(): if not args.arg: print("ERROR: send requires a message", file=sys.stderr) sys.exit(1) - cmd_send(ws, args.arg) + cmd_send(ws, " ".join(args.arg)) elif args.command == 'messages': - n = int(args.arg) if args.arg else 5 + n = int(args.arg[0]) if args.arg else 5 cmd_messages(ws, n) elif args.command == 'wait': - t = int(args.arg) if args.arg else 30 + t = int(args.arg[0]) if args.arg else 30 cmd_wait(ws, t) elif args.command == 'approvals': cmd_approvals(ws) + elif args.command == 'sidechat': + if not args.arg: + print("ERROR: sidechat requires subcommand (use|main|list)", file=sys.stderr) + sys.exit(1) + sub = args.arg[0] + if sub == "use": + if len(args.arg) < 2: + print("ERROR: sidechat use requires chat_id", file=sys.stderr) + sys.exit(1) + cmd_sidechat_use(ws, args.arg[1]) + elif sub == "main": + cmd_sidechat_main(ws) + elif sub == "list": + cmd_sidechat_list(ws) + else: + print(f"ERROR: unknown sidechat subcommand: {sub}", file=sys.stderr) + sys.exit(1) finally: ws.close() if __name__ == '__main__': main() +