adfcd2e602
- box passkey [show|fetch] (+ muse passkey): documents VM-only passkey (/srv/box/passkey.txt, fallback /etc/netvm/passkey.txt on 34.139.37.135), probes VM over SSH with graceful fallback; --json supported. No secrets on bl. - approvals: request_key_approval / check_node_key_request; KEY_APPROVAL status surfaced in `box approvals check`; allow/deny resolve + audit to box-ctl.jsonl; never auto-approved. New `box approvals request-key <node> --reason`. - box lookup (summary|fleet|threads|unread|approvals|key|docs) and docs-lookup engine with lookup_internal/ database (docs_internal symlink). - muse-tmux: non-TTY attach falls back to scrollback capture; prune NameError fix. - box/muse passthrough for tmux/muse/docs; thread list/view alias + prefix resolve. - Docs: AGENTS.md, AGENT-TOOLING.md, BOX-WEB-SURFACE-GUIDE.md, README. - Tests: key-approval + passkey tests; sync stale sidechat UUIDs and manifest name. - .gitignore runtime trackers (subagent-sessions, conversation-nudge-tracker).
174 lines
6.8 KiB
JSON
174 lines
6.8 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"title": "Assistive Surfaces for box.muse-dev.online",
|
|
"version": "1.0.0",
|
|
"host": "box.muse-dev.online",
|
|
"origin_vm": "34.139.37.135",
|
|
"compute_host": "bl (100.123.153.75)",
|
|
"auth": {
|
|
"pin": "3128",
|
|
"cookie_name": "ops_session",
|
|
"login_endpoint": "/api/ops/login",
|
|
"agent_header": "Authorization: Bearer <operator-token>",
|
|
"signature_mechanism": "SSH-keygen -Y sign via Tailnet identity"
|
|
},
|
|
"views": {
|
|
"dashboard": {
|
|
"name": "Fleet Pulse",
|
|
"tab_id": "dashboard",
|
|
"dom_tab_selector": ".tab-btn[data-tab=\"dashboard\"]",
|
|
"dom_pane_selector": "#tab-dashboard",
|
|
"key_elements": {
|
|
"grid": "#fleet-grid",
|
|
"pulse_indicator": "#fleet-pulse",
|
|
"node_card": ".node-card",
|
|
"node_badge": ".node-badge",
|
|
"active_page_title": ".page-title-preview"
|
|
},
|
|
"api_endpoints": [
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/box/fleet",
|
|
"description": "Real-time CDP latency, node status, current page titles, and queue depths across all nodes.",
|
|
"curl_example": "curl -sk https://box.muse-dev.online/api/box/fleet"
|
|
}
|
|
],
|
|
"assistive_recipe": "To check fleet health, read /api/box/fleet or inspect #fleet-grid node cards. Green indicator denotes CDP responsive <100ms."
|
|
},
|
|
"dms": {
|
|
"name": "DMs & Work Orders",
|
|
"tab_id": "dms",
|
|
"dom_tab_selector": ".tab-btn[data-tab=\"dms\"]",
|
|
"dom_pane_selector": "#tab-dms",
|
|
"key_elements": {
|
|
"table": "#dms-table",
|
|
"tbody": "#dms-tbody",
|
|
"search_input": "#filter-search",
|
|
"agent_filter_chips": ".filter-agent-chip",
|
|
"kind_filter_chips": ".filter-kind-chip",
|
|
"count_badge": "#dms-count-badge"
|
|
},
|
|
"api_endpoints": [
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/box/dm/log?limit=50",
|
|
"description": "Chronological stream of Work Orders, Acks, Results, and inter-operator DMs.",
|
|
"curl_example": "curl -sk -b 'ops_session=...' https://box.muse-dev.online/api/box/dm/log?limit=30"
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/box/dm/send",
|
|
"description": "Dispatch a signed DM or Work Order to a recipient or sidechat target.",
|
|
"curl_example": "curl -sk -X POST https://box.muse-dev.online/api/box/dm/send -d '{\"agent\":\"646\",\"to\":\"pip\",\"target\":\"646-pip\",\"message\":\"[WO:...] ...\"}'"
|
|
}
|
|
],
|
|
"assistive_recipe": "Filter by data-agent attribute to isolate node traffic. Search box filters dynamically by text."
|
|
},
|
|
"jobs": {
|
|
"name": "Timers & Jobs",
|
|
"tab_id": "jobs",
|
|
"dom_tab_selector": ".tab-btn[data-tab=\"jobs\"]",
|
|
"dom_pane_selector": "#tab-jobs",
|
|
"key_elements": {
|
|
"table": "#jobs-table",
|
|
"tbody": "#jobs-tbody",
|
|
"trigger_button": ".btn-trigger",
|
|
"active_badge": ".badge-active",
|
|
"unit_name": ".timer-unit-name"
|
|
},
|
|
"api_endpoints": [
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/box/timers",
|
|
"description": "List all active systemd user timer schedules, next run, and last results.",
|
|
"curl_example": "curl -sk https://box.muse-dev.online/api/box/timers"
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/box/jobs/{name}/trigger",
|
|
"description": "Asynchronous hot-trigger calling box-ctl.py job-trigger. Returns 202 Accepted immediately.",
|
|
"curl_example": "curl -sk -X POST https://box.muse-dev.online/api/box/jobs/box-http-health/trigger"
|
|
}
|
|
],
|
|
"assistive_recipe": "Clicking ▶ Run invokes hot-trigger without blocking the browser. Button displays Triggering... then Sent."
|
|
},
|
|
"loops": {
|
|
"name": "Loop & Strategy Matrix",
|
|
"tab_id": "loops",
|
|
"dom_tab_selector": ".tab-btn[data-tab=\"loops\"]",
|
|
"dom_pane_selector": "#tab-loops",
|
|
"key_elements": {
|
|
"health_badge": "#loop-health-badge",
|
|
"loops_grid": "#loops-grid",
|
|
"strategy_table": "#strat-table",
|
|
"vars_table": "#vars-table",
|
|
"edit_modal": "#modal-edit-var",
|
|
"count_badge": "#loops-count-badge"
|
|
},
|
|
"api_endpoints": [
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/box/loop/health",
|
|
"description": "Fleet loop health ratio (answered+closed vs landed) with health verdicts.",
|
|
"curl_example": "curl -sk https://box.muse-dev.online/api/box/loop/health"
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/box/loop/status",
|
|
"description": "Active open loops, deadlines, and current nudge counters.",
|
|
"curl_example": "curl -sk https://box.muse-dev.online/api/box/loop/status"
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/box/loop/vars",
|
|
"description": "Runtime control variables schema, values, and units.",
|
|
"curl_example": "curl -sk https://box.muse-dev.online/api/box/loop/vars"
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/box/loop/vars",
|
|
"description": "Mutate runtime variable without restarting daemons.",
|
|
"curl_example": "curl -sk -X POST https://box.muse-dev.online/api/box/loop/vars -d '{\"name\":\"max_nudge_count\",\"value\":3}'"
|
|
}
|
|
],
|
|
"assistive_recipe": "Use loop health ratio to evaluate fleet velocity. Overdue loops can be nudged directly via box loop nudge."
|
|
},
|
|
"approvals": {
|
|
"name": "Agent Approval Surfaces",
|
|
"tab_id": "approvals",
|
|
"dom_tab_selector": null,
|
|
"dom_pane_selector": ".approval-dialog-container",
|
|
"key_elements": {
|
|
"dialog": "[data-testid=\"approval-dialog\"]",
|
|
"allow_btn": "[data-testid=\"approval-allow\"]",
|
|
"deny_btn": "[data-testid=\"approval-deny\"]",
|
|
"ip_field": ".approval-requested-ip",
|
|
"action_desc": ".approval-description"
|
|
},
|
|
"api_endpoints": [
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/approvals",
|
|
"description": "Query pending approvals across all browser nodes.",
|
|
"curl_example": "curl -sk https://box.muse-dev.online/api/approvals"
|
|
}
|
|
],
|
|
"assistive_recipe": "If browser agent is blocked on modal, inspect via 'box approvals check' and approve with 'box approvals allow <node>'."
|
|
},
|
|
"telemetry_curl": {
|
|
"name": "View as curl Drawer",
|
|
"tab_id": null,
|
|
"dom_tab_selector": "#curl-toggle-btn",
|
|
"dom_pane_selector": "#curl-drawer",
|
|
"key_elements": {
|
|
"toggle_btn": "#curl-toggle-btn",
|
|
"drawer": "#curl-drawer",
|
|
"display_code": "#curl-display",
|
|
"copy_btn": "#curl-copy-btn"
|
|
},
|
|
"api_endpoints": [],
|
|
"assistive_recipe": "Toggles an off-canvas drawer exposing exact curl invocation for the currently active tab and action."
|
|
}
|
|
}
|
|
}
|