844aa73bd9
UUID-based sidechat reuse for heartbeat\n\n- Add url command to muse-chat-api.py\n- Dispatcher: reuse_key -> thread UUID mapping in job-sidechats.json\n- Capture UUID after first send, reuse on subsequent runs\n- Fixes multi-spawn bug (was matching by auto-generated title)
operator-main
2026-10-04 04:03:28 +00:00
a9812cd355
Add box-ctl.py: allowlisted bl helper for Box API mutations\n\n- 14 actions: timer-list/status/create/delete/start/stop/enable/disable,\n job-list/get/put/delete/trigger, notify\n- Name regex ^[a-z0-9-]{1,64}$, full job schema validation per design §6\n- Cron→OnCalendar conversion + systemd-analyze verification\n- Fixed unit templates (only validated name interpolated)\n- Git commits on job put/delete; audit log to box-ctl.jsonl\n- No shell=True, no string interpolation into commands\n- Tested: full lifecycle on bl (boxtest job)
operator-main
2026-10-04 04:02:19 +00:00
fcf9224404
Delete job boxtest via box-ctl
box-ctl
2026-10-04 04:01:56 +00:00
7cf80bc918
Add job boxtest via box-ctl
box-ctl
2026-10-04 04:01:51 +00:00
61d59de30d
Box API design: timer and job endpoints\n\n- 14 endpoints with full schemas, JSON canonical (not YAML)\n- Allowlisted box-ctl.py helper (no raw systemctl over SSH)\n- Auto-confirmed vs agent-confirmed split for [REQ]/[CONFIRM]
operator-main
2026-10-04 03:59:01 +00:00
458314cbf6
Box UI design: operator dashboard and management pages\n\n- 7 sections: dashboard, timers, jobs, DMs, board/chat, requests, audit\n- Server-rendered + theme engine (not SPA)\n- Every mutation shows its API equivalent (steering made visible)
operator-main
2026-10-04 03:58:36 +00:00
ef8e98abf0
Box API design: DM and message endpoints\n\n- POST /api/box/dms, /chat/send, /message, /board/post\n- Bearer token auth with spoof scope, idempotency via deterministic IDs\n- Rate limits mirror rate_limiter.py
operator-main
2026-10-04 03:58:30 +00:00
6fcd3bfb4e
DOM reference: search functionality\n\n- Quick search dialog structure and data-value encoding\n- chat🧵<uuid> gives ready-made thread lookup\n- Radix gotchas: trusted events only, never touch input via JS
operator-main
2026-10-04 03:54:16 +00:00
13d231b86a
DOM reference: message actions and thread interactions\n\n- Messages use .group/msg (no testid); action via More options radix menu\n- 6 quick reactions documented; Reply is composer-quote only, no Edit UI\n- Headless quirk: full pointer event sequence needed for radix
operator-main
2026-10-04 03:53:52 +00:00
265a76778b
DOM reference: settings and profile\n\n- Dock rail structure, radix menu gotchas (synthetic click fails)\n- Settings dialog sections, appearance controls\n- No in-app account switching (profile-level only)
operator-main
2026-10-04 03:53:01 +00:00
664b66be93
DOM reference: edge states, loading, and error handling\n\n- S3 PARTIAL_LOAD dissected with timed probes\n- readyState useless; settled-state signature documented\n- False-positive traps for innerText.includes()
operator-main
2026-10-04 03:51:05 +00:00
e470dfc244
DOM reference: notifications and activity\n\n- No bell icon; toast live region + Activity tab documented\n- Chat nav unread via aria-label flip (match on testid, not label)
operator-main
2026-10-04 03:50:57 +00:00
a98fcfa64c
DOM master index with quick-reference recipes\n\n- 50+ testids deduplicated across all docs\n- 6 copy-pasteable automation recipes\n- Resolves 4 contradictions (Ctrl+J superseded by click-based)\n- Flags 7 gaps for future mapping
operator-main
2026-10-04 03:50:49 +00:00
39e9db07b2
DOM reference: page structure, states, and approvals\n\n- 538-line map of 5 page states with detection logic\n- 57 data-testid values inventoried and categorized\n- check_approvals IP filtering documented
operator-main
2026-10-04 03:48:33 +00:00
6d737a48f1
DOM reference: messages, input, and chat activation\n\n- 332-line map of composer, send button, message list\n- Author encoding via data-message-id prefix documented\n- hatch-nav-chat as reliable Ctrl+J replacement
operator-main
2026-10-04 03:48:18 +00:00
0511e88b60
DOM reference: chat panel and sidechat structure\n\n- 367-line map of switcher, compose button, panel shell\n- 24 data-testid inventory with states and detection signals\n- Documents toggle behavior and false-positive traps
operator-main
2026-10-04 03:47:00 +00:00
72574baa4b
Replace Ctrl+J with click-based chat activation\n\n- New _ensure_chat_active(): compose -> switcher -> nav-chat priority\n- hatch-nav-chat click recovers from stripped /thread/new state\n- Ctrl+J needed keyboard focus which stripped states lack
operator-main
2026-10-04 03:46:47 +00:00
7d48123835
Heartbeat to sidechat with reuse\n\n- Dispatcher: reuse existing sidechat by name (not create new each time)\n- Heartbeat job: sidechat.create=true, name_template=heartbeat (fixed)
operator-main
2026-10-04 03:40:25 +00:00
12dca45107
cmd_sidechat_create: navigate to main first\n\nReliability test found success poisons next run (browser left on\n/thread/new with stripped DOM). Now navigates to main via Ctrl+J\nat start for known good state.
operator-main
2026-10-04 03:38:46 +00:00
f8b6475396
cmd_sidechat_create: exact header check for panel state\n\ninnerText.includes was always true (switcher button text).\nNow checks for exact Side chats header text node, loops up to 5x.
operator-main
2026-10-04 03:38:22 +00:00
8ff4dd0e30
cmd_sidechat_create: check + first, open panel only if needed\n\nAvoids unnecessary switcher click when panel already open.
operator-main
2026-10-04 03:37:32 +00:00
4379610d06
cmd_sidechat_create: verified working selectors\n\nDOM investigation found:\n- Switcher: [data-testid=hatch-chat-switcher-trigger] (idempotent)\n- Plus: [data-testid=hatch-chat-compose] (SVG, no text)\n- Old text-based checks were false-positive on DM content
operator-main
2026-10-04 03:37:01 +00:00
bc4cd77a52
Fix sidechat selectors from DOM investigation\n\n- + button: [data-testid=hatch-chat-compose] (SVG, no text)\n- Panel: [data-testid=hatch-chat-switcher-trigger] (idempotent)\n- ensure_sidebar: check + button presence, not text (was false-positive\n on DM text containing Side chats)
operator-main
2026-10-04 03:36:06 +00:00
1cffacc7d1
Sidechat: render wait, direct send, stderr logging\n\n- Wait for Side chats to render before finding + button\n- Dispatcher: send_to_current_chat for sidechat jobs\n- Log stderr on create failure
operator-main
2026-10-04 03:29:21 +00:00
5feca52602
cmd_sidechat_create: remove Ctrl+J toggle\n\nPanel is always open; Ctrl+J toggle was closing it.\nJust find the + button directly.
operator-main
2026-10-04 03:26:17 +00:00
7938322e6d
cmd_sidechat_create: Ctrl+J opens chat panel via CDP\n\nSidebar is actually the chat panel (Ctrl+J toggle).\nUse proven Input.dispatchKeyEvent like cmd_sidechat_main.
operator-main
2026-10-04 03:25:37 +00:00
b46afcbaea
refine-system: back to automated sidechat create\n\nDispatcher now nails the create via direct send.
operator-main
2026-10-04 03:23:41 +00:00
34082045cc
Nail sidechat create: direct send, no ID lookup\n\n- cmd_sidechat_create: simplified, just create and return\n- job-dispatch: after create, send via direct API to current chat\n- No thread ID parsing needed; thread lookup via URL for later ops
operator-main
2026-10-04 03:23:34 +00:00
b0d6bb3ad8
refine-system job: agent creates sidechat (not dispatcher)\n\nPragmatic pattern: DM instructs agent to create sidechat via UI.\nAvoids flaky browser automation for sidechat creation.
operator-main
2026-10-04 03:21:54 +00:00
4524907663
sidechat_manager: Use data-testid for sidebar button\n\nReliable selector hatch-chat-switcher-trigger instead of\nflaky text matching.
operator-main
2026-10-04 03:20:42 +00:00
c57a05963a
Fix sidechat CDP and button selectors\n\n- sidechat_manager._ev: use id=1 and returnByValue to match ev()\n- cmd_sidechat_create: find + button via Side chats header proximity\n- cmd_sidechat_create: use cmd_send for initial message (not DOM hack)\n- Integrate ensure_sidebar with retry
operator-main
2026-10-04 03:19:48 +00:00
7a6e54fed2
sidechat_manager: Fix CDP id mismatch\n\n_e() used id=100, muse-chat-api.py ev() uses id=1.\nOn shared websocket, responses mismatched.
operator-main
2026-10-04 03:16:10 +00:00
50ddecb02e
muse-chat-api.py: Get real thread ID after sidechat create\n\nSend system message to trigger ID assignment, poll for\n/thread/<uuid> instead of accepting /thread/new placeholder.
operator-main
2026-10-04 03:13:07 +00:00
942f37e21c
job-dispatch.py: Send job DM to sidechat directly\n\nWhen sidechat.create=true, the job DM now goes to the sidechat\nitself (via thread ID), not to main chat. Keeps main clean;\nthe sidechat IS the workspace.
operator-main
2026-10-04 03:11:11 +00:00
39e47ab2ef
muse-chat-api.py: Fix sidechat create URL race\n\nPoll for /thread/ URL up to 15s instead of fixed 5s sleep.\nWas capturing base URL before navigation settled.
operator-main
2026-10-04 03:10:52 +00:00
2b76863520
Add refine-system job: sidechat for infrastructure refinement\n\nSpawns sidechat for opm to review and improve the JOB/DM system.
operator-main
2026-10-04 03:09:48 +00:00
35bd358b78
job-dispatch.py: Add sidechat creation support\n\nWhen job has sidechat.create=true, creates sidechat via\nmuse-chat-api.py in sender context, includes URL in DM.
operator-main
2026-10-04 03:09:42 +00:00
0929a44736
Add heartbeat job: 5-min DM health check\n\nSystemd timer job-heartbeat.timer runs every 5 minutes,\ndispatches heartbeat DM to opm via job-dispatch.py.
operator-main
2026-10-04 03:07:41 +00:00
78dbf8f131
Add job-dispatch.py: JOB system dispatcher\n\nReads job JSON, renders prompt template, sends DM via dm.py,\nlogs to job-log.jsonl. Tested end-to-end: canary-test job\ndispatched successfully (DM 36bd80aa SENT and VERIFIED).
operator-main
2026-10-04 03:06:46 +00:00
6f1ed27a0d
BOX-API-SPEC: Add board and chatroom API appendix\n\nAppendix C: Unified message API for populating boards and chatrooms.\nCovers board post/get, chatroom send/list, and unified /message endpoint\nwith target routing (board:#, chat:, dm:).
operator-main
2026-10-04 03:02:06 +00:00
706fe057a6
BOX-API-SPEC: Add confirmation system spec\n\nAPI requests result in DMs; DMs require explicit confirmations.\nCovers: [REQ id] -> [CONFIRM id] flow, pending request tracking,\nsweeper for timeouts, when to require confirmation.
operator-main
2026-10-04 03:00:36 +00:00
ac6d7bf2d3
BOX-API-SPEC: Add UI/API design principle\n\nUI surfaces allow agent creativity but clearly steer toward API.\nThe UI teaches, the API is the source of truth.
operator-main
2026-10-04 03:00:03 +00:00
e7aae05dbd
BOX-API-SPEC: Add rich scheduling and DM metadata appendices\n\nAppendix A: Rich Linux scheduling (systemd, cron, at) with unified API.\nAppendix B: DM + metadata JSON (wire format, types, API endpoints).
operator-main
2026-10-04 02:59:40 +00:00
b1247c530b
Add BOX-API-SPEC.md: agentic timer management interface\n\nSpec for box.muse-dev.online API to manage systemd timers on bl.\nCovers: endpoints (list/create/start/stop/delete), auth (ops bearer),\nbackend (SSH to bl), rate limiting, web UI.
operator-main
2026-10-04 02:57:55 +00:00
372e9612db
Add JOB-SPEC.md: hosted job scheduler and distributor\n\nSpec for cron-driven job system that injects prompts via DM.\nCovers: job YAML format, scheduler (systemd timers), dispatcher,\nagent handler convention, collector, sidechat integration,\nlogging, rate limiting.
operator-main
2026-10-04 02:55:51 +00:00
70b82f5a8b
Add sidechat_manager.py: robust sidebar operations with retry and logging\n\n- ensure_sidebar() with exponential backoff (2s, 4s, 6s)\n- list_sidechats() with heuristic parsing\n- log_sidechat_op() for audit trail to sidechat-log.jsonl\nAddresses flaky NOSIDEBAR errors from hardcoded sleeps.
operator-main
2026-10-04 02:49:38 +00:00
89b9fdb9f8
Add DM-SPEC.md (work orders + server-side logging spec)\n\nCopied from frontdoor repo per 646 request. Spec covers:\n- Work orders as first-class DM kind\n- Server-level DM logging (append-only)\n- Box visibility via DMs tab
operator-main
2026-10-04 02:42:23 +00:00
7c591c73bc
Add shared rate_limiter.py module\n\nModular rate limiter any .py script can use:\n from rate_limiter import rate_limit_wait\n rate_limit_wait(agent)\n\nToken bucket per agent: 1 op/3s sustained, burst 5, max 20/min.\nState in /tmp/netvm-rate-limit.json.
operator-main
2026-10-04 02:40:56 +00:00
c48fbc03f6
muse-chat-api: Dont block sends on dialogs without IPs\n\ncheck_approvals was raising APPROVAL_NEEDED for false positives\n(dialogs without IP addresses, likely chat content misidentified).\nOnly IP-based permission dialogs should block. Others are ignored.
operator-main
2026-10-04 02:32:38 +00:00
6189793748
agent-health.sh: Verify CDP port liveness, not just API success\n\nThe watchdog only checked if the API responded, missing zombie\nbrowsers (process alive but CDP not listening). Now explicitly\nchecks via ss -tln in the netns before trying the API.\nAlso: kill by exact PIDs instead of unreliable pkill patterns,\nand warn if port still bound after kill.
operator-main
2026-10-04 02:23:20 +00:00
5dddedb667
muse-chat-api: Press chat button to refocus Main Chat\n\nUser confirmed pressing the chat button properly refocuses Main Chat.\nSimpler and more reliable than searching for Main chat text in sidebar.
operator-main
2026-10-04 02:11:41 +00:00
c83fb7c294
muse-chat-api: Use fuzzy matching for Main chat button\n\nExact match was too fragile - if the UI text differs slightly,\nit returns NOTFOUND and the browser stays on the side chat.\nNow uses substring + shortest-first like cmd_sidechat_use.
operator-main
2026-10-04 02:04:19 +00:00
e5c85c7940
muse-chat-api: Fix cmd_sidechat_main to click Main chat button\n\nWas navigating to https://muse.ai/ (landing page) which restores the\nlast-viewed chat (often a side chat like Manage Muse agents). Now opens\nthe sidebar and clicks the Main chat element directly.
operator-main
2026-10-04 01:58:41 +00:00
77d904d344
dm.py: Fix dm_thread to pass to_agent correctly\n\nWas calling dm_send(to_agent, target, attributed) which set the\nsender to the recipient and omitted the to_agent param. Now calls\ndm_send(from_agent, target, attributed, to_agent=to_agent).
operator-main
2026-10-04 01:29:26 +00:00
828f67ffc8
p2p-relay: 646 to muse via headless
operator
2026-10-03 19:21:04 +00:00
667755e312
meta-acct: Accounts Center read API (list-linked, security-status, login-activity)\n\nImplements the read ops from META-ACCOUNTS-API.md via the agent browser\nsession. Key finding: phone-OTP login leaves a full Meta session -\naccountscenter.meta.com loads without redirect.\n\nAlso: 646 node fully registered (warp-646, CDP 9430, active).
operator
2026-10-03 19:20:47 +00:00