@ai-matrx/desktop-protocol 0.21.80 → 0.21.82

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/contract.ts","../src/tools/catalog.ts","../src/tools/status.ts","../src/tools/policy.ts"],"sourcesContent":["// AUTO-GENERATED by scripts/generate.ts — DO NOT EDIT. `pnpm generate --check` fails on any hand edit.\n/** SHA-256 of generated/desktop-protocol.schema.json: the contract both sides of a service connection were built from. */\nexport const CONTRACT_SHA256 = \"e6936784e216200e73b062cab45f24fa88014108baecd0f8b7a0b19ea5797fc5\" as const;\n","/**\n * The local tool catalog (SPEC §10): every tool a platform agent calls on a person's computer, the\n * protocol ops it reaches, the group it ships in, and what became of each of matrx-local's 139\n * handlers (120 actions + the 19 action-enum dispatchers that fanned out to them).\n *\n * Data only. The status table (./status.ts) joins it with the harnesses' results, so a tool listed\n * here with no passing result reads \"untested\", never \"working\". Design and the reasons behind each\n * group: matrx-desktop/design/local-tools.md.\n */\nimport type { OpName } from \"../schema/registry\";\nimport type { ToolPlatform } from \"../schema/tools\";\n\nexport type ToolGroupId = \"files_shell\" | \"os_control\" | \"personal_automation\" | \"tools_service\" | \"ml_service\" | \"windows_admin\";\n\nexport interface ToolGroup {\n readonly id: ToolGroupId;\n readonly order: number;\n readonly title: string;\n /** Who implements the ops: a TS capability owner in the core, or a Python service. */\n readonly owner: \"core\" | \"python_tools\" | \"python_ml\";\n}\n\nexport const TOOL_GROUPS: readonly ToolGroup[] = [\n { id: \"files_shell\", order: 1, title: \"Files and shell\", owner: \"core\" },\n { id: \"os_control\", order: 2, title: \"Computer control\", owner: \"core\" },\n { id: \"personal_automation\", order: 3, title: \"Personal apps and automation\", owner: \"core\" },\n { id: \"tools_service\", order: 4, title: \"Web, documents, OCR and entities\", owner: \"python_tools\" },\n { id: \"ml_service\", order: 5, title: \"Speech\", owner: \"python_ml\" },\n { id: \"windows_admin\", order: 6, title: \"Windows administration\", owner: \"core\" },\n];\n\n/**\n * How an agent's call reaches the device. Both end at the relay's `POST /v1/devices/{id}/call`:\n * - `sandbox_proxy`: the cloud-sandbox-shaped tools (fs_*, shell_*). matrx-ai's `_sandbox_proxy`\n * calls aidream `/api/local-proxy/{device}/{fs|search|exec}/…`, which maps the route to its op.\n * Agent code never knows a laptop from a cloud box (SPEC §6.1).\n * - `device_op`: desktop-only capabilities. One generic route, `/api/local-proxy/{device}/op/{cap.op}`,\n * params and result exactly the op's schema; the tool definition is generated from that schema.\n * - `server`: runs on the aidream server even when the turn is bound to a device (a defect when\n * the tool reads a local path; see `note`).\n */\nexport type ToolPath = \"sandbox_proxy\" | \"device_op\" | \"server\";\n\n/** `built`: the ops exist in the protocol and Matrx 2's core serves them (registered on the platform for agents with the server tool); `planned`: designed, not built; `broken`: registered but wrong on a device. */\nexport type ToolState = \"built\" | \"planned\" | \"broken\";\n\nexport interface CatalogTool {\n /** The platform registry name (`tool.definition.name`). */\n readonly name: string;\n readonly group: ToolGroupId;\n readonly state: ToolState;\n readonly path: ToolPath;\n /** Ops the tool sends. For `built` tools every one is in OPS (a test enforces it). */\n readonly ops: readonly string[];\n readonly platforms: readonly ToolPlatform[];\n /** One line for the status table. */\n readonly summary: string;\n /** Required for `broken`: what is wrong. */\n readonly note?: string;\n}\n\nconst ALL: readonly ToolPlatform[] = [\"darwin\", \"win32\", \"linux\"];\n\nexport const TOOL_CATALOG: readonly CatalogTool[] = [\n // ── 1. Files and shell (core `fs`, `exec`; the cloud sandbox's agent tools) ──────────────────\n { name: \"fs_read\", group: \"files_shell\", state: \"built\", path: \"sandbox_proxy\", ops: [\"fs.read\"], platforms: ALL, summary: \"Read a file, paged\" },\n { name: \"fs_write\", group: \"files_shell\", state: \"built\", path: \"sandbox_proxy\", ops: [\"fs.read\", \"fs.write\"], platforms: ALL, summary: \"Create or overwrite a file\" },\n { name: \"fs_edit\", group: \"files_shell\", state: \"built\", path: \"sandbox_proxy\", ops: [\"fs.read\", \"fs.patch\"], platforms: ALL, summary: \"Replace one exact string\" },\n { name: \"fs_patch\", group: \"files_shell\", state: \"built\", path: \"sandbox_proxy\", ops: [\"fs.read\", \"fs.patch\"], platforms: ALL, summary: \"Apply several exact edits at once\" },\n { name: \"fs_list\", group: \"files_shell\", state: \"built\", path: \"sandbox_proxy\", ops: [\"fs.list\"], platforms: ALL, summary: \"List a folder\" },\n { name: \"fs_mkdir\", group: \"files_shell\", state: \"built\", path: \"sandbox_proxy\", ops: [\"fs.mkdir\"], platforms: ALL, summary: \"Create a folder\" },\n { name: \"fs_search\", group: \"files_shell\", state: \"built\", path: \"sandbox_proxy\", ops: [\"fs.search_paths\", \"fs.search_content\"], platforms: ALL, summary: \"Find files by name or content\" },\n { name: \"shell_execute\", group: \"files_shell\", state: \"built\", path: \"sandbox_proxy\", ops: [\"exec.run\"], platforms: ALL, summary: \"Run a command; cd carries over\" },\n { name: \"shell_python\", group: \"files_shell\", state: \"built\", path: \"sandbox_proxy\", ops: [\"exec.run\"], platforms: ALL, summary: \"Run a Python script\" },\n { name: \"desktop_git\", group: \"files_shell\", state: \"built\", path: \"device_op\", ops: [\"git.status\", \"git.diff\", \"git.log\", \"git.add\", \"git.commit\", \"git.push\", \"git.pull\", \"git.branch\", \"git.stash\", \"git.clone\"], platforms: ALL, summary: \"Git: status, diff, log, commit, branches, push and pull\" },\n { name: \"shell_job\", group: \"files_shell\", state: \"built\", path: \"device_op\", ops: [\"exec.job.start\", \"exec.job.output\", \"exec.job.stop\", \"exec.job.list\"], platforms: ALL, summary: \"Background commands: start, read output, stop\" },\n\n // ── 2. Computer control (TS owners) ──────────────────────────────────────────────────────────\n { name: \"desktop_process\", group: \"os_control\", state: \"built\", path: \"device_op\", ops: [\"proc.list\", \"proc.ports\", \"proc.kill\"], platforms: ALL, summary: \"Running processes and ports; stop one\" },\n { name: \"desktop_apps\", group: \"os_control\", state: \"built\", path: \"device_op\", ops: [\"apps.list\", \"apps.open\"], platforms: ALL, summary: \"Installed apps; open or bring one forward\" },\n { name: \"desktop_system\", group: \"os_control\", state: \"built\", path: \"device_op\", ops: [\"sysinfo.get\", \"sysinfo.hardware\", \"system.open_url\", \"system.open_path\", \"system.open_settings\", \"system.notify\"], platforms: ALL, summary: \"System facts, open, notify\" },\n { name: \"desktop_clipboard\", group: \"os_control\", state: \"built\", path: \"device_op\", ops: [\"clipboard.read\", \"clipboard.write\"], platforms: ALL, summary: \"Read and write the clipboard's text\" },\n { name: \"desktop_screen\", group: \"os_control\", state: \"built\", path: \"device_op\", ops: [\"screen.list\", \"screen.capture\"], platforms: ALL, summary: \"Displays and screenshots\" },\n { name: \"desktop_browser\", group: \"os_control\", state: \"built\", path: \"device_op\", ops: [\"browser.sessions\", \"browser.call\"], platforms: ALL, summary: \"The person's own browser through the AI Matrx extension: tabs, read, screenshot, navigate, click, type\" },\n { name: \"desktop_window\", group: \"os_control\", state: \"built\", path: \"device_op\", ops: [\"window.list\", \"window.focus\", \"window.move\", \"window.minimize\"], platforms: ALL, summary: \"Find, focus and arrange windows\" },\n { name: \"desktop_input\", group: \"os_control\", state: \"built\", path: \"device_op\", ops: [\"input.type_text\", \"input.hotkey\", \"input.mouse_click\", \"input.mouse_move\", \"input.keyboard_settings\", \"input.set_keyboard_settings\"], platforms: ALL, summary: \"Keyboard and mouse\" },\n { name: \"desktop_audio\", group: \"os_control\", state: \"built\", path: \"device_op\", ops: [\"audio.devices\", \"audio.levels\", \"audio.set_levels\", \"audio.record\", \"audio.play\"], platforms: ALL, summary: \"Audio devices, record, play\" },\n { name: \"desktop_power\", group: \"os_control\", state: \"built\", path: \"device_op\", ops: [\"power.status\", \"power.history\", \"power.prevent_sleep\"], platforms: ALL, summary: \"Battery and keep awake\" },\n { name: \"desktop_resources\", group: \"os_control\", state: \"built\", path: \"device_op\", ops: [\"resources.snapshot\", \"resources.activity\", \"resources.stop_job\", \"resources.incidents\"], platforms: ALL, summary: \"CPU, memory and disk use; what is using them, grouped into jobs; stop a job; the slowdown log\" },\n { name: \"fs_watch\", group: \"os_control\", state: \"built\", path: \"device_op\", ops: [\"fs.watch.start\", \"fs.watch.events\", \"fs.watch.stop\"], platforms: ALL, summary: \"Watch a folder; read what changed\" },\n\n // ── 3. Personal apps and automation (1.37: the core's `automation`, `personal`, `net` and `schedule` owners) ──\n { name: \"desktop_automation\", group: \"personal_automation\", state: \"built\", path: \"device_op\", ops: [\"automation.script\"], platforms: [\"darwin\", \"win32\"], summary: \"AppleScript or JavaScript for Automation on a Mac, PowerShell on Windows\" },\n { name: \"desktop_mail\", group: \"personal_automation\", state: \"built\", path: \"device_op\", ops: [\"mail.accounts\", \"mail.list\", \"mail.send\"], platforms: [\"darwin\"], summary: \"The Mail app: accounts, messages, send\" },\n { name: \"desktop_outlook\", group: \"personal_automation\", state: \"built\", path: \"device_op\", ops: [\"outlook.status\", \"outlook.draft\", \"outlook.list\", \"outlook.read\"], platforms: [\"win32\"], summary: \"The person's own Outlook: drafts with attachments, recent mail, one message\" },\n { name: \"desktop_messages\", group: \"personal_automation\", state: \"built\", path: \"device_op\", ops: [\"messages.chats\", \"messages.list\", \"messages.send\"], platforms: [\"darwin\"], summary: \"The Messages app: chats, messages, send\" },\n { name: \"desktop_contacts\", group: \"personal_automation\", state: \"built\", path: \"device_op\", ops: [\"contacts.search\", \"contacts.get\"], platforms: [\"darwin\"], summary: \"Contacts: search, one card\" },\n { name: \"desktop_calendar\", group: \"personal_automation\", state: \"built\", path: \"device_op\", ops: [\"calendar.list\", \"calendar.create\", \"reminders.list\", \"reminders.create\"], platforms: [\"darwin\"], summary: \"Calendar and Reminders: list and add\" },\n { name: \"desktop_photos\", group: \"personal_automation\", state: \"built\", path: \"device_op\", ops: [\"photos.search\", \"photos.get\"], platforms: [\"darwin\"], summary: \"The Photos library: find, export an original\" },\n // Windows comes back once a Windows location fix is proven (plan attack retire-local 2026-10-12, B6):\n // until then local_mac_apps (macOS-only) is judged on macOS and nothing claims Windows.\n { name: \"desktop_location\", group: \"personal_automation\", state: \"built\", path: \"device_op\", ops: [\"location.get\"], platforms: [\"darwin\"], summary: \"Where the computer is (the OS's location service)\" },\n { name: \"desktop_net\", group: \"personal_automation\", state: \"built\", path: \"device_op\", ops: [\"net.info\", \"net.wifi\", \"net.bluetooth\", \"net.devices\", \"net.mdns\", \"net.scan\", \"net.download\"], platforms: ALL, summary: \"Local network, Wi-Fi, Bluetooth, open ports and downloads\" },\n { name: \"desktop_schedule\", group: \"personal_automation\", state: \"built\", path: \"device_op\", ops: [\"schedule.create\", \"schedule.list\", \"schedule.cancel\"], platforms: ALL, summary: \"Run a tool's op on this computer on an interval; list and cancel\" },\n // 1.38, code from anywhere: the person's Claude Code and Codex sessions on this computer. Turning\n // either off in Agents › Tools refuses its ops on every relay connection (the existing switch).\n { name: \"coding_sessions_read\", group: \"personal_automation\", state: \"built\", path: \"device_op\", ops: [\"coding.providers\", \"coding.sessions.list\", \"coding.discover\", \"coding.runs.list\", \"coding.history\", \"coding.transcript.read\", \"coding.item.full\", \"coding.activity\", \"coding.folders.recent\", \"coding.folders.check\", \"coding.agents.access\", \"coding.titles.status\", \"coding.prefs.list\", \"coding.recent.seen\", \"coding.search\", \"coding.transcript.raw\", \"coding.watch\", \"coding.session.watch\"], platforms: ALL, summary: \"Claude Code and Codex sessions: list, read live, search, download\" },\n { name: \"coding_sessions_drive\", group: \"personal_automation\", state: \"built\", path: \"device_op\", ops: [\"coding.start\", \"coding.takeover\", \"coding.send\", \"coding.stop\", \"coding.stop_elsewhere\", \"coding.options.set\", \"coding.account.continue\", \"coding.agent.set\", \"coding.folders.create\", \"coding.prefs.set\", \"coding.reconcile\"], platforms: ALL, summary: \"Claude Code and Codex sessions: start, send, stop, take over, rename\" },\n\n // ── 4. Documents, notes and entities (1.37: the core's `documents` and `notes` owners; desktop_web is the `tools` service) ──\n { name: \"desktop_documents\", group: \"tools_service\", state: \"built\", path: \"device_op\", ops: [\"documents.pdf_text\", \"documents.ocr\", \"documents.image_resize\", \"documents.office_generate\"], platforms: ALL, summary: \"PDF text, OCR, images, Word and Excel files\" },\n { name: \"desktop_web\", group: \"tools_service\", state: \"built\", path: \"device_op\", ops: [\"web.fetch\", \"web.scrape\", \"web.search\", \"web.fetch_with_browser\"], platforms: ALL, summary: \"Fetch, scrape, search and research the web from this computer's own connection (research: search on AI Matrx, every result read here)\" },\n { name: \"desktop_entities\", group: \"tools_service\", state: \"built\", path: \"device_op\", ops: [\"entities.ner\", \"entities.pii\"], platforms: ALL, summary: \"Names, places, organizations and private data, found on the device\" },\n // matrx-local's SemanticFindPaths: needs a local embedding index of this computer's files and an\n // embedding model on the device; neither exists yet, so it is Coming soon on Agents › Tools.\n { name: \"desktop_semantic_find\", group: \"files_shell\", state: \"planned\", path: \"device_op\", ops: [\"fs.search_semantic\"], platforms: ALL, summary: \"Find files by meaning (a local embedding index of this computer's files)\" },\n { name: \"desktop_notes\", group: \"files_shell\", state: \"built\", path: \"device_op\", ops: [\"notes.folders\", \"notes.list\", \"notes.read\", \"notes.write\", \"notes.search\"], platforms: ALL, summary: \"The person's local notes (Documents/Matrx/Notes): list, read, write, search\" },\n\n // ── 5. Python `ml` service ───────────────────────────────────────────────────────────────────\n // Built: models.transcribe through local_proxy's POST /op/{cap.op} (matrx-ai implementations/desktop.py).\n // Whisper detects the language itself, so matrx-local's speech_locales needs no op of its own.\n { name: \"desktop_transcribe\", group: \"ml_service\", state: \"built\", path: \"device_op\", ops: [\"models.transcribe\"], platforms: ALL, summary: \"Speech to text on the device\" },\n\n // ── 6. Windows administration ────────────────────────────────────────────────────────────────\n { name: \"desktop_windows_admin\", group: \"windows_admin\", state: \"built\", path: \"device_op\", ops: [\"windows.registry_read\", \"windows.registry_write\", \"windows.services\", \"windows.service_control\", \"windows.event_log\", \"windows.features\"], platforms: [\"win32\"], summary: \"Registry, services, event log, optional features\" },\n];\n\n/**\n * Tools armed with a device binding that are deliberately NOT device tools, each with its reason.\n * They run on the server; the status table does not track them.\n */\nexport const EXCLUDED_TOOLS: Readonly<Record<string, string>> = {\n git_ingest:\n \"Runs on the server: it ingests repository URLs. A local path on a bound computer or sandbox is refused with the fs_* and shell remedy, since the server cannot see it\",\n};\n\n/** What became of one matrx-local handler. */\nexport type LegacyDisposition =\n | { readonly kind: \"tool\"; readonly tool: string }\n | { readonly kind: \"dropped\"; readonly reason: string };\n\nconst tool = (name: string): LegacyDisposition => ({ kind: \"tool\", tool: name });\nconst dropped = (reason: string): LegacyDisposition => ({ kind: \"dropped\", reason });\n\nconst SHELL_COVERS = \"Done with shell_execute (mv, cp, rm, tar), as every coding agent does\";\n\n/** matrx-local's 120 actions (`app/tools/actions.py` ACTION_GROUPS), keyed `<mega tool>.<action>`. */\nexport const LEGACY_ACTIONS: Readonly<Record<string, LegacyDisposition>> = {\n \"local_file.read\": tool(\"fs_read\"),\n \"local_file.write\": tool(\"fs_write\"),\n \"local_file.edit\": tool(\"fs_edit\"),\n \"local_file.move\": dropped(SHELL_COVERS),\n \"local_file.copy\": dropped(SHELL_COVERS),\n \"local_file.delete\": dropped(SHELL_COVERS),\n \"local_file.rename\": dropped(SHELL_COVERS),\n \"local_file.mkdir\": tool(\"fs_mkdir\"),\n \"local_file.glob\": tool(\"fs_search\"),\n \"local_file.grep\": tool(\"fs_search\"),\n \"local_file.list\": tool(\"fs_list\"),\n \"local_file.places\": dropped(\"The device's home and folders reach the agent in its binding briefing (sysinfo.get)\"),\n \"local_file.find\": tool(\"fs_search\"),\n \"local_file.semantic_find\": dropped(\"Needs a local embedding index; desktop_semantic_find is planned (Coming soon on Agents › Tools) until it exists\"),\n\n \"local_shell.run\": tool(\"shell_execute\"),\n \"local_shell.output\": tool(\"shell_job\"),\n \"local_shell.stop\": tool(\"shell_job\"),\n\n \"local_window.list\": tool(\"desktop_window\"),\n \"local_window.focus\": tool(\"desktop_window\"),\n \"local_window.move\": tool(\"desktop_window\"),\n \"local_window.minimize\": tool(\"desktop_window\"),\n\n \"local_process.list\": tool(\"desktop_process\"),\n \"local_process.ports\": tool(\"desktop_process\"),\n \"local_process.launch_app\": tool(\"desktop_apps\"),\n \"local_process.kill\": tool(\"desktop_process\"),\n \"local_process.focus_app\": tool(\"desktop_apps\"),\n \"local_process.terminals\": dropped(\"Matrx 2 terminals are exec sessions; the person's own terminal windows are not the agent's\"),\n \"local_process.tail_terminal\": dropped(\"Matrx 2 terminals are exec sessions; the person's own terminal windows are not the agent's\"),\n \"local_process.installed_apps\": tool(\"desktop_apps\"),\n\n \"local_input.type_text\": tool(\"desktop_input\"),\n \"local_input.hotkey\": tool(\"desktop_input\"),\n \"local_input.mouse_click\": tool(\"desktop_input\"),\n \"local_input.mouse_move\": tool(\"desktop_input\"),\n\n \"local_audio.devices\": tool(\"desktop_audio\"),\n \"local_audio.record\": tool(\"desktop_audio\"),\n \"local_audio.play\": tool(\"desktop_audio\"),\n \"local_audio.transcribe\": tool(\"desktop_transcribe\"),\n \"local_audio.transcribe_with_speech\": tool(\"desktop_transcribe\"),\n \"local_audio.speech_locales\": tool(\"desktop_transcribe\"),\n\n \"local_clipboard.read\": tool(\"desktop_clipboard\"),\n \"local_clipboard.write\": tool(\"desktop_clipboard\"),\n\n \"local_screen.screenshot\": tool(\"desktop_screen\"),\n \"local_screen.list\": tool(\"desktop_screen\"),\n \"local_screen.capture_book\": dropped(\"A one-off loop of screenshot plus page turn; the agent composes it from desktop_screen and desktop_input\"),\n\n \"local_system.info\": tool(\"desktop_system\"),\n \"local_system.open_url\": tool(\"desktop_system\"),\n \"local_system.open_path\": tool(\"desktop_system\"),\n \"local_system.notify\": tool(\"desktop_system\"),\n\n // The person's own browser is the AI Matrx extension paired with Matrx 2 (cap browser).\n \"local_browser.navigate\": tool(\"desktop_browser\"),\n \"local_browser.click\": tool(\"desktop_browser\"),\n \"local_browser.type_text\": tool(\"desktop_browser\"),\n \"local_browser.extract\": tool(\"desktop_browser\"),\n \"local_browser.screenshot\": tool(\"desktop_browser\"),\n \"local_browser.eval\": dropped(\"The extension runs no page script for Matrx 2: its script and cdp tools are privileged and refused over the desktop path; read, click and type cover what eval was used for\"),\n \"local_browser.tabs\": tool(\"desktop_browser\"),\n \"local_browser.close\": tool(\"desktop_browser\"),\n\n \"local_web.fetch\": tool(\"desktop_web\"),\n \"local_web.fetch_with_browser\": tool(\"desktop_web\"),\n \"local_web.scrape\": tool(\"desktop_web\"),\n \"local_web.search\": tool(\"desktop_web\"),\n \"local_web.research\": tool(\"desktop_web\"),\n \"local_web.download\": tool(\"desktop_net\"),\n \"local_web.upload\": dropped(\"Uploads are cloud files (matrx-files) and file sync, one upload path\"),\n\n \"local_net.info\": tool(\"desktop_net\"),\n \"local_net.scan\": tool(\"desktop_net\"),\n \"local_net.port_scan\": tool(\"desktop_net\"),\n \"local_net.mdns_discover\": tool(\"desktop_net\"),\n \"local_net.wifi_networks\": tool(\"desktop_net\"),\n \"local_net.bluetooth_devices\": tool(\"desktop_net\"),\n \"local_net.connected_devices\": tool(\"desktop_net\"),\n\n \"local_monitor.resources\": tool(\"desktop_resources\"),\n \"local_monitor.battery\": tool(\"desktop_power\"),\n \"local_monitor.disk_usage\": tool(\"desktop_resources\"),\n \"local_monitor.top_processes\": tool(\"desktop_process\"),\n \"local_monitor.watch_directory\": tool(\"fs_watch\"),\n \"local_monitor.watch_events\": tool(\"fs_watch\"),\n \"local_monitor.stop_watch\": tool(\"fs_watch\"),\n \"local_monitor.heartbeat\": dropped(\"The relay's device status replaces the heartbeat\"),\n\n // Matrx Local's scheduler ran one of its tools on an interval; desktop_schedule runs an op so.\n \"local_schedule.create\": tool(\"desktop_schedule\"),\n \"local_schedule.list\": tool(\"desktop_schedule\"),\n \"local_schedule.cancel\": tool(\"desktop_schedule\"),\n \"local_schedule.prevent_sleep\": tool(\"desktop_power\"),\n\n // Matrx Local's documents are the Markdown notes in Documents/Matrx/Notes; desktop_notes reads and writes them.\n \"local_documents.list\": tool(\"desktop_notes\"),\n \"local_documents.folders\": tool(\"desktop_notes\"),\n \"local_documents.read\": tool(\"desktop_notes\"),\n \"local_documents.write\": tool(\"desktop_notes\"),\n \"local_documents.search\": tool(\"desktop_notes\"),\n\n \"local_media.ocr\": tool(\"desktop_documents\"),\n \"local_media.resize\": tool(\"desktop_documents\"),\n \"local_media.pdf_extract\": tool(\"desktop_documents\"),\n \"local_media.office_generate\": tool(\"desktop_documents\"),\n \"local_media.archive_create\": dropped(SHELL_COVERS),\n \"local_media.archive_extract\": dropped(SHELL_COVERS),\n\n \"local_ner.entities\": tool(\"desktop_entities\"),\n \"local_ner.pii\": tool(\"desktop_entities\"),\n\n \"local_mac_apps.applescript\": tool(\"desktop_automation\"),\n \"local_mac_apps.list_emails\": tool(\"desktop_mail\"),\n \"local_mac_apps.send_email\": tool(\"desktop_mail\"),\n \"local_mac_apps.email_accounts\": tool(\"desktop_mail\"),\n \"local_mac_apps.list_messages\": tool(\"desktop_messages\"),\n \"local_mac_apps.list_conversations\": tool(\"desktop_messages\"),\n \"local_mac_apps.send_message\": tool(\"desktop_messages\"),\n \"local_mac_apps.search_contacts\": tool(\"desktop_contacts\"),\n \"local_mac_apps.get_contact\": tool(\"desktop_contacts\"),\n \"local_mac_apps.list_events\": tool(\"desktop_calendar\"),\n \"local_mac_apps.create_event\": tool(\"desktop_calendar\"),\n \"local_mac_apps.list_reminders\": tool(\"desktop_calendar\"),\n \"local_mac_apps.create_reminder\": tool(\"desktop_calendar\"),\n \"local_mac_apps.search_photos\": tool(\"desktop_photos\"),\n \"local_mac_apps.get_photo\": tool(\"desktop_photos\"),\n \"local_mac_apps.location\": tool(\"desktop_location\"),\n\n \"local_windows_ps.run\": tool(\"desktop_automation\"),\n \"local_windows_ps.get_env\": dropped(\"Read with shell_execute; a per-command env rides exec.run\"),\n \"local_windows_ps.set_env\": dropped(\"Changing the person's persistent environment is not an agent tool\"),\n \"local_windows_ps.registry_read\": tool(\"desktop_windows_admin\"),\n \"local_windows_ps.registry_write\": tool(\"desktop_windows_admin\"),\n \"local_windows_ps.service_list\": tool(\"desktop_windows_admin\"),\n \"local_windows_ps.service_control\": tool(\"desktop_windows_admin\"),\n \"local_windows_ps.event_log\": tool(\"desktop_windows_admin\"),\n \"local_windows_ps.windows_features\": tool(\"desktop_windows_admin\"),\n};\n\n/**\n * matrx-local's 19 action-enum dispatchers. Each fanned an `action` out to the handlers above and\n * did nothing else; they retire with the `matrx-local` executor binding (the platform reaches a\n * device through the relay now, never by client delegation).\n */\nexport const LEGACY_DISPATCHERS: readonly string[] = [\n \"local_file\",\n \"local_shell\",\n \"local_window\",\n \"local_process\",\n \"local_input\",\n \"local_audio\",\n \"local_clipboard\",\n \"local_screen\",\n \"local_system\",\n \"local_browser\",\n \"local_web\",\n \"local_net\",\n \"local_monitor\",\n \"local_schedule\",\n \"local_documents\",\n \"local_media\",\n \"local_ner\",\n \"local_mac_apps\",\n \"local_windows_ps\",\n];\n\n/** Built tools' ops, typed: a built tool naming an op the protocol does not have fails to compile in the test. */\nexport function builtOps(): OpName[] {\n return TOOL_CATALOG.filter((t) => t.state === \"built\").flatMap((t) => t.ops as OpName[]);\n}\n","/**\n * The generated tool status table (SPEC §10): tool × level × platform, built ONLY from harness\n * results (`ToolResultsFile`) joined with the catalog. Never written by hand; the one status anyone\n * cites. `renderToolStatusMarkdown` is the committed text form; screens render `ToolStatus` itself.\n */\nimport { ToolResultsFile, type ToolLevel, type ToolLevelResult, type ToolPlatform, type ToolTransport } from \"../schema/tools\";\nimport { EXCLUDED_TOOLS, TOOL_CATALOG, TOOL_GROUPS, type CatalogTool, type ToolGroupId, type ToolState } from \"./catalog\";\n\nexport const TOOL_LEVELS: readonly ToolLevel[] = [\"programmatic\", \"protocol\", \"chat\"];\nexport const TOOL_PLATFORMS: readonly ToolPlatform[] = [\"darwin\", \"win32\", \"linux\"];\n\n/**\n * `pass`: every required proof passed and none failed. `partial`: passes so far, a required proof\n * missing (`missing` says which). `fail`: the latest run of some proof failed. `untested`: nothing\n * ran. `not_built`: the tool is planned. `unsupported`: the tool does not exist on this platform.\n */\nconst UUID_IN_NAME = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/gi;\n\nexport type CellState = \"pass\" | \"partial\" | \"fail\" | \"untested\" | \"not_built\" | \"unsupported\";\n\nexport interface StatusEvidence {\n readonly suite: string;\n readonly test: string;\n readonly transport: ToolTransport;\n readonly outcome: ToolLevelResult[\"outcome\"];\n readonly remote_network: boolean;\n readonly commit: string;\n readonly run_at_ms: number;\n readonly detail: string;\n /** Chat level: the tool calls the turn made, of any tool (absent on older evidence). */\n readonly calls_made?: number;\n}\n\n/**\n * A run that never exercised the tool: a `skip`, or a chat turn that made no tool calls at all (the\n * model answered in prose, or the chat request failed). It is shown as the latest run but is never\n * evidence about the tool, so it can neither prove a cell nor turn a proven one red.\n */\nexport function isInconclusive(e: Pick<StatusEvidence, \"outcome\" | \"calls_made\">): boolean {\n return e.outcome === \"skip\" || e.calls_made === 0;\n}\n\nexport interface StatusCell {\n readonly state: CellState;\n /** Required proofs not yet passed, e.g. \"relay from another network\". */\n readonly missing: readonly string[];\n readonly last_run_at_ms: number | null;\n readonly evidence: readonly StatusEvidence[];\n}\n\nexport interface StatusRow {\n readonly tool: string;\n readonly group: ToolGroupId;\n readonly tool_state: ToolState;\n readonly summary: string;\n readonly note: string | null;\n readonly cells: Readonly<Record<ToolPlatform, Readonly<Record<ToolLevel, StatusCell>>>>;\n /** Working on a platform = all three levels pass there (SPEC §10). */\n readonly working: Readonly<Record<ToolPlatform, boolean>>;\n}\n\nexport interface ToolStatus {\n readonly schema: \"matrx.tool-status.v1\";\n readonly generated_at_ms: number;\n readonly commits: readonly string[];\n readonly rows: readonly StatusRow[];\n readonly totals: Readonly<Record<ToolPlatform, { readonly working: number; readonly built: number; readonly tools: number }>>;\n}\n\n/** What each level needs before it reads `pass`. Level 2 is the transports AND the relay from another network. */\nconst REQUIRED: Readonly<Record<ToolLevel, readonly { readonly label: string; readonly ok: (e: StatusEvidence) => boolean }[]>> = {\n programmatic: [{ label: \"in process\", ok: (e) => e.transport === \"in_process\" }],\n protocol: [\n { label: \"localhost\", ok: (e) => e.transport === \"localhost\" },\n { label: \"relay\", ok: (e) => e.transport === \"relay\" },\n { label: \"relay from another network\", ok: (e) => e.transport === \"relay\" && e.remote_network },\n ],\n chat: [{ label: \"a real agent in a real chat\", ok: (e) => e.transport === \"agent\" }],\n};\n\nfunction cellFor(tool: CatalogTool, platform: ToolPlatform, level: ToolLevel, evidence: StatusEvidence[]): StatusCell {\n if (!tool.platforms.includes(platform)) return { state: \"unsupported\", missing: [], last_run_at_ms: null, evidence: [] };\n // The latest DECISIVE run of each (suite, test, transport, network) decides; older runs are\n // history. A run that never exercised the tool (`isInconclusive`) never replaces a decisive one:\n // it is kept beside it, when newer, so the table still shows that the last run proved nothing.\n const latest = new Map<string, StatusEvidence>();\n const latestInconclusive = new Map<string, StatusEvidence>();\n for (const e of evidence) {\n // A uuid in a test name (the agent a chat proof ran, a conversation) is run data, never the\n // proof's identity: the same proof under a new test agent replaces the old one's result.\n const key = `${e.suite}\\u0000${e.test.replace(UUID_IN_NAME, \"<id>\")}\\u0000${e.transport}\\u0000${e.remote_network}`;\n const into = isInconclusive(e) ? latestInconclusive : latest;\n const prev = into.get(key);\n if (!prev || prev.run_at_ms < e.run_at_ms) into.set(key, e);\n }\n const runs = [...latest.values()].sort((a, b) => b.run_at_ms - a.run_at_ms);\n const unproven = [...latestInconclusive].filter(([k, e]) => (latest.get(k)?.run_at_ms ?? -1) < e.run_at_ms).map(([, e]) => e);\n const shown = [...runs, ...unproven].sort((a, b) => b.run_at_ms - a.run_at_ms);\n const last = runs[0]?.run_at_ms ?? null;\n if (tool.state === \"planned\" && runs.length === 0) return { state: \"not_built\", missing: [], last_run_at_ms: null, evidence: [] };\n if (runs.length === 0) return { state: \"untested\", missing: REQUIRED[level].map((r) => r.label), last_run_at_ms: null, evidence: shown };\n if (runs.some((e) => e.outcome === \"fail\")) return { state: \"fail\", missing: [], last_run_at_ms: last, evidence: shown };\n const missing = REQUIRED[level].filter((r) => !runs.some((e) => e.outcome === \"pass\" && r.ok(e))).map((r) => r.label);\n return { state: missing.length === 0 ? \"pass\" : \"partial\", missing, last_run_at_ms: last, evidence: shown };\n}\n\n/** Build the table from every results file. Throws when a file is off-contract (never silently skipped). */\nexport function buildToolStatus(files: readonly unknown[], opts: { readonly generatedAtMs: number }): ToolStatus {\n const parsed = files.map((f, i) => {\n const r = ToolResultsFile.safeParse(f);\n if (!r.success) throw new Error(`tool results file #${i} is off-contract: ${r.error.issues[0]?.path.join(\".\")} ${r.error.issues[0]?.message}`);\n return r.data;\n });\n const known = new Set(TOOL_CATALOG.map((t) => t.name));\n const byKey = new Map<string, StatusEvidence[]>();\n for (const file of parsed) {\n for (const r of file.results) {\n if (!known.has(r.tool)) throw new Error(`a result names ${r.tool}, which is not in the tool catalog`);\n const key = `${r.tool}|${r.platform}|${r.level}`;\n const list = byKey.get(key) ?? [];\n list.push({\n suite: r.suite,\n test: r.test,\n transport: r.transport,\n outcome: r.outcome,\n remote_network: r.remote_network,\n commit: file.commit,\n run_at_ms: r.run_at_ms,\n detail: r.detail,\n ...(r.calls_made === undefined ? {} : { calls_made: r.calls_made }),\n });\n byKey.set(key, list);\n }\n }\n const groupOrder = new Map(TOOL_GROUPS.map((g) => [g.id, g.order]));\n const tools = [...TOOL_CATALOG].sort((a, b) => (groupOrder.get(a.group) ?? 99) - (groupOrder.get(b.group) ?? 99));\n const rows: StatusRow[] = tools.map((tool) => {\n const cells = {} as Record<ToolPlatform, Record<ToolLevel, StatusCell>>;\n const working = {} as Record<ToolPlatform, boolean>;\n for (const platform of TOOL_PLATFORMS) {\n const perLevel = {} as Record<ToolLevel, StatusCell>;\n for (const level of TOOL_LEVELS) perLevel[level] = cellFor(tool, platform, level, byKey.get(`${tool.name}|${platform}|${level}`) ?? []);\n cells[platform] = perLevel;\n working[platform] = TOOL_LEVELS.every((l) => perLevel[l].state === \"pass\");\n }\n return { tool: tool.name, group: tool.group, tool_state: tool.state, summary: tool.summary, note: tool.note ?? null, cells, working };\n });\n const totals = {} as Record<ToolPlatform, { working: number; built: number; tools: number }>;\n for (const platform of TOOL_PLATFORMS) {\n const onPlatform = TOOL_CATALOG.filter((t) => t.platforms.includes(platform));\n totals[platform] = {\n working: rows.filter((r) => r.working[platform]).length,\n built: onPlatform.filter((t) => t.state !== \"planned\").length,\n tools: onPlatform.length,\n };\n }\n const commits = [...new Set(parsed.map((f) => f.commit))].sort();\n return { schema: \"matrx.tool-status.v1\", generated_at_ms: opts.generatedAtMs, commits, rows, totals };\n}\n\nconst MARK: Readonly<Record<CellState, string>> = { pass: \"✓\", partial: \"◐\", fail: \"✗\", untested: \"·\", not_built: \"—\", unsupported: \" \" };\n\n/** The committed text form. Columns: per platform, the three levels (P = programmatic, R = protocol, C = chat). */\nexport function renderToolStatusMarkdown(status: ToolStatus): string {\n const lines: string[] = [\n \"<!-- GENERATED by `pnpm tools:status` from test results. Never edit by hand. -->\",\n \"# Local tools: status\",\n \"\",\n `Generated ${new Date(status.generated_at_ms).toISOString()} from commits ${status.commits.join(\", \") || \"none\"}.`,\n \"\",\n \"✓ pass · ◐ passing so far, a required proof missing · ✗ fail · `·` untested · — not built. Levels: P programmatic, R protocol, C chat.\",\n \"\",\n \"| Platform | Working | Built | Tools |\",\n \"|---|---|---|---|\",\n ...TOOL_PLATFORMS.map((p) => `| ${p} | ${status.totals[p].working} | ${status.totals[p].built} | ${status.totals[p].tools} |`),\n \"\",\n ];\n for (const group of TOOL_GROUPS) {\n const rows = status.rows.filter((r) => r.group === group.id);\n if (rows.length === 0) continue;\n lines.push(`## ${group.order}. ${group.title}`, \"\", \"| Tool | darwin P R C | win32 P R C | linux P R C | Missing |\", \"|---|---|---|---|---|\");\n for (const r of rows) {\n const cols = TOOL_PLATFORMS.map((p) => TOOL_LEVELS.map((l) => MARK[r.cells[p][l].state]).join(\" \"));\n const missing = new Set<string>();\n for (const p of TOOL_PLATFORMS) for (const l of TOOL_LEVELS) for (const m of r.cells[p][l].missing) if (r.cells[p][l].state !== \"untested\") missing.add(`${p} ${l}: ${m}`);\n const name = r.tool_state === \"broken\" ? `${r.tool} (broken: ${r.note ?? \"\"})` : r.tool;\n lines.push(`| ${name} | ${cols.join(\" | \")} | ${[...missing].join(\"; \")} |`);\n }\n lines.push(\"\");\n }\n const excluded = Object.entries(EXCLUDED_TOOLS);\n if (excluded.length > 0) {\n lines.push(\"## Not device tools\", \"\", \"| Tool | Why |\", \"|---|---|\", ...excluded.map(([name, why]) => `| ${name} | ${why} |`), \"\");\n }\n return lines.join(\"\\n\");\n}\n","/**\n * The per-device tool policy's op rule (Matrx 2: Agents › Tools' switches, the\n * `desktop.tools/disabled_on_device` knob). The relay carries an op, never the tool that sent it, and\n * several tools share ops (fs_read, fs_write and fs_edit all read with `fs.read`; shell_execute and\n * shell_python both run `exec.run`). So an op is refused when EVERY catalog tool that sends it is\n * turned off. Pure, data-only: the core enforces it on relay connections, the screen explains it.\n */\nimport { TOOL_CATALOG } from \"./catalog\";\n\n/** The ops refused when these tools are off: those every sending tool has turned off. */\nexport function refusedOps(disabledTools: readonly string[]): ReadonlySet<string> {\n const off = new Set(disabledTools);\n const senders = new Map<string, string[]>();\n for (const tool of TOOL_CATALOG) for (const op of tool.ops) senders.set(op, [...(senders.get(op) ?? []), tool.name]);\n const refused = new Set<string>();\n for (const [op, tools] of senders) if (tools.every((t) => off.has(t))) refused.add(op);\n return refused;\n}\n\n/** The catalog tools that send this op. */\nexport function toolsSending(op: string): string[] {\n return TOOL_CATALOG.filter((t) => t.ops.includes(op)).map((t) => t.name);\n}\n\n/**\n * For one tool switched off: the tools still on that keep ALL its ops open (turning it off alone\n * stops nothing until they are off too). Empty when turning it off stops at least one op.\n */\nexport function sharedOpsBlocking(tool: string, disabledTools: readonly string[]): string[] {\n const entry = TOOL_CATALOG.find((t) => t.name === tool);\n if (!entry || entry.ops.length === 0) return [];\n const off = new Set([...disabledTools, tool]);\n const refused = refusedOps([...off]);\n if (entry.ops.some((op) => refused.has(op))) return [];\n const keepers = new Set<string>();\n for (const op of entry.ops) for (const other of TOOL_CATALOG) if (other.name !== tool && !off.has(other.name) && other.ops.includes(op)) keepers.add(other.name);\n return [...keepers].sort();\n}\n"],"mappings":"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","names":["tool","tool"]}
1
+ {"version":3,"sources":["../src/contract.ts","../src/tools/catalog.ts","../src/tools/status.ts","../src/tools/policy.ts"],"sourcesContent":["// AUTO-GENERATED by scripts/generate.ts — DO NOT EDIT. `pnpm generate --check` fails on any hand edit.\n/** SHA-256 of generated/desktop-protocol.schema.json: the contract both sides of a service connection were built from. */\nexport const CONTRACT_SHA256 = \"5e0c564e79ee14278fa1d52120c735fd331517e2b2d48d03d30eb7cc13f2c4fb\" as const;\n","/**\n * The local tool catalog (SPEC §10): every tool a platform agent calls on a person's computer, the\n * protocol ops it reaches, the group it ships in, and what became of each of matrx-local's 139\n * handlers (120 actions + the 19 action-enum dispatchers that fanned out to them).\n *\n * Data only. The status table (./status.ts) joins it with the harnesses' results, so a tool listed\n * here with no passing result reads \"untested\", never \"working\". Design and the reasons behind each\n * group: matrx-desktop/design/local-tools.md.\n */\nimport type { OpName } from \"../schema/registry\";\nimport type { ToolPlatform } from \"../schema/tools\";\n\nexport type ToolGroupId = \"files_shell\" | \"os_control\" | \"personal_automation\" | \"tools_service\" | \"ml_service\" | \"windows_admin\";\n\nexport interface ToolGroup {\n readonly id: ToolGroupId;\n readonly order: number;\n readonly title: string;\n /** Who implements the ops: a TS capability owner in the core, or a Python service. */\n readonly owner: \"core\" | \"python_tools\" | \"python_ml\";\n}\n\nexport const TOOL_GROUPS: readonly ToolGroup[] = [\n { id: \"files_shell\", order: 1, title: \"Files and shell\", owner: \"core\" },\n { id: \"os_control\", order: 2, title: \"Computer control\", owner: \"core\" },\n { id: \"personal_automation\", order: 3, title: \"Personal apps and automation\", owner: \"core\" },\n { id: \"tools_service\", order: 4, title: \"Web, documents, OCR and entities\", owner: \"python_tools\" },\n { id: \"ml_service\", order: 5, title: \"Speech\", owner: \"python_ml\" },\n { id: \"windows_admin\", order: 6, title: \"Windows administration\", owner: \"core\" },\n];\n\n/**\n * How an agent's call reaches the device. Both end at the relay's `POST /v1/devices/{id}/call`:\n * - `sandbox_proxy`: the cloud-sandbox-shaped tools (fs_*, shell_*). matrx-ai's `_sandbox_proxy`\n * calls aidream `/api/local-proxy/{device}/{fs|search|exec}/…`, which maps the route to its op.\n * Agent code never knows a laptop from a cloud box (SPEC §6.1).\n * - `device_op`: desktop-only capabilities. One generic route, `/api/local-proxy/{device}/op/{cap.op}`,\n * params and result exactly the op's schema; the tool definition is generated from that schema.\n * - `server`: runs on the aidream server even when the turn is bound to a device (a defect when\n * the tool reads a local path; see `note`).\n */\nexport type ToolPath = \"sandbox_proxy\" | \"device_op\" | \"server\";\n\n/** `built`: the ops exist in the protocol and Matrx 2's core serves them (registered on the platform for agents with the server tool); `planned`: designed, not built; `broken`: registered but wrong on a device. */\nexport type ToolState = \"built\" | \"planned\" | \"broken\";\n\nexport interface CatalogTool {\n /** The platform registry name (`tool.definition.name`). */\n readonly name: string;\n readonly group: ToolGroupId;\n readonly state: ToolState;\n readonly path: ToolPath;\n /** Ops the tool sends. For `built` tools every one is in OPS (a test enforces it). */\n readonly ops: readonly string[];\n readonly platforms: readonly ToolPlatform[];\n /** One line for the status table. */\n readonly summary: string;\n /** Required for `broken`: what is wrong. */\n readonly note?: string;\n}\n\nconst ALL: readonly ToolPlatform[] = [\"darwin\", \"win32\", \"linux\"];\n\nexport const TOOL_CATALOG: readonly CatalogTool[] = [\n // ── 1. Files and shell (core `fs`, `exec`; the cloud sandbox's agent tools) ──────────────────\n { name: \"fs_read\", group: \"files_shell\", state: \"built\", path: \"sandbox_proxy\", ops: [\"fs.read\"], platforms: ALL, summary: \"Read a file, paged\" },\n { name: \"fs_write\", group: \"files_shell\", state: \"built\", path: \"sandbox_proxy\", ops: [\"fs.read\", \"fs.write\"], platforms: ALL, summary: \"Create or overwrite a file\" },\n { name: \"fs_edit\", group: \"files_shell\", state: \"built\", path: \"sandbox_proxy\", ops: [\"fs.read\", \"fs.patch\"], platforms: ALL, summary: \"Replace one exact string\" },\n { name: \"fs_patch\", group: \"files_shell\", state: \"built\", path: \"sandbox_proxy\", ops: [\"fs.read\", \"fs.patch\"], platforms: ALL, summary: \"Apply several exact edits at once\" },\n { name: \"fs_list\", group: \"files_shell\", state: \"built\", path: \"sandbox_proxy\", ops: [\"fs.list\"], platforms: ALL, summary: \"List a folder\" },\n { name: \"fs_mkdir\", group: \"files_shell\", state: \"built\", path: \"sandbox_proxy\", ops: [\"fs.mkdir\"], platforms: ALL, summary: \"Create a folder\" },\n { name: \"fs_search\", group: \"files_shell\", state: \"built\", path: \"sandbox_proxy\", ops: [\"fs.search_paths\", \"fs.search_content\"], platforms: ALL, summary: \"Find files by name or content\" },\n { name: \"shell_execute\", group: \"files_shell\", state: \"built\", path: \"sandbox_proxy\", ops: [\"exec.run\"], platforms: ALL, summary: \"Run a command; cd carries over\" },\n { name: \"shell_python\", group: \"files_shell\", state: \"built\", path: \"sandbox_proxy\", ops: [\"exec.run\"], platforms: ALL, summary: \"Run a Python script\" },\n { name: \"desktop_git\", group: \"files_shell\", state: \"built\", path: \"device_op\", ops: [\"git.status\", \"git.diff\", \"git.log\", \"git.add\", \"git.commit\", \"git.push\", \"git.pull\", \"git.branch\", \"git.stash\", \"git.clone\"], platforms: ALL, summary: \"Git: status, diff, log, commit, branches, push and pull\" },\n { name: \"shell_job\", group: \"files_shell\", state: \"built\", path: \"device_op\", ops: [\"exec.job.start\", \"exec.job.output\", \"exec.job.stop\", \"exec.job.list\"], platforms: ALL, summary: \"Background commands: start, read output, stop\" },\n\n // ── 2. Computer control (TS owners) ──────────────────────────────────────────────────────────\n { name: \"desktop_process\", group: \"os_control\", state: \"built\", path: \"device_op\", ops: [\"proc.list\", \"proc.ports\", \"proc.kill\"], platforms: ALL, summary: \"Running processes and ports; stop one\" },\n { name: \"desktop_apps\", group: \"os_control\", state: \"built\", path: \"device_op\", ops: [\"apps.list\", \"apps.open\"], platforms: ALL, summary: \"Installed apps; open or bring one forward\" },\n { name: \"desktop_system\", group: \"os_control\", state: \"built\", path: \"device_op\", ops: [\"sysinfo.get\", \"sysinfo.hardware\", \"system.open_url\", \"system.open_path\", \"system.open_settings\", \"system.notify\"], platforms: ALL, summary: \"System facts, open, notify\" },\n { name: \"desktop_clipboard\", group: \"os_control\", state: \"built\", path: \"device_op\", ops: [\"clipboard.read\", \"clipboard.write\"], platforms: ALL, summary: \"Read and write the clipboard's text\" },\n { name: \"desktop_screen\", group: \"os_control\", state: \"built\", path: \"device_op\", ops: [\"screen.list\", \"screen.capture\"], platforms: ALL, summary: \"Displays and screenshots\" },\n { name: \"desktop_browser\", group: \"os_control\", state: \"built\", path: \"device_op\", ops: [\"browser.sessions\", \"browser.call\"], platforms: ALL, summary: \"The person's own browser through the AI Matrx extension: tabs, read, screenshot, navigate, click, type\" },\n { name: \"desktop_window\", group: \"os_control\", state: \"built\", path: \"device_op\", ops: [\"window.list\", \"window.focus\", \"window.move\", \"window.minimize\"], platforms: ALL, summary: \"Find, focus and arrange windows\" },\n { name: \"desktop_input\", group: \"os_control\", state: \"built\", path: \"device_op\", ops: [\"input.type_text\", \"input.hotkey\", \"input.mouse_click\", \"input.mouse_move\", \"input.keyboard_settings\", \"input.set_keyboard_settings\"], platforms: ALL, summary: \"Keyboard and mouse\" },\n { name: \"desktop_audio\", group: \"os_control\", state: \"built\", path: \"device_op\", ops: [\"audio.devices\", \"audio.levels\", \"audio.set_levels\", \"audio.record\", \"audio.play\"], platforms: ALL, summary: \"Audio devices, record, play\" },\n { name: \"desktop_power\", group: \"os_control\", state: \"built\", path: \"device_op\", ops: [\"power.status\", \"power.history\", \"power.prevent_sleep\"], platforms: ALL, summary: \"Battery and keep awake\" },\n { name: \"desktop_resources\", group: \"os_control\", state: \"built\", path: \"device_op\", ops: [\"resources.snapshot\", \"resources.activity\", \"resources.stop_job\", \"resources.incidents\"], platforms: ALL, summary: \"CPU, memory and disk use; what is using them, grouped into jobs; stop a job; the slowdown log\" },\n { name: \"fs_watch\", group: \"os_control\", state: \"built\", path: \"device_op\", ops: [\"fs.watch.start\", \"fs.watch.events\", \"fs.watch.stop\"], platforms: ALL, summary: \"Watch a folder; read what changed\" },\n\n // ── 3. Personal apps and automation (1.37: the core's `automation`, `personal`, `net` and `schedule` owners) ──\n { name: \"desktop_automation\", group: \"personal_automation\", state: \"built\", path: \"device_op\", ops: [\"automation.script\"], platforms: [\"darwin\", \"win32\"], summary: \"AppleScript or JavaScript for Automation on a Mac, PowerShell on Windows\" },\n { name: \"desktop_mail\", group: \"personal_automation\", state: \"built\", path: \"device_op\", ops: [\"mail.accounts\", \"mail.list\", \"mail.send\"], platforms: [\"darwin\"], summary: \"The Mail app: accounts, messages, send\" },\n { name: \"desktop_outlook\", group: \"personal_automation\", state: \"built\", path: \"device_op\", ops: [\"outlook.status\", \"outlook.draft\", \"outlook.list\", \"outlook.read\"], platforms: [\"win32\"], summary: \"The person's own Outlook: drafts with attachments, recent mail, one message\" },\n { name: \"desktop_messages\", group: \"personal_automation\", state: \"built\", path: \"device_op\", ops: [\"messages.chats\", \"messages.list\", \"messages.send\"], platforms: [\"darwin\"], summary: \"The Messages app: chats, messages, send\" },\n { name: \"desktop_contacts\", group: \"personal_automation\", state: \"built\", path: \"device_op\", ops: [\"contacts.search\", \"contacts.get\"], platforms: [\"darwin\"], summary: \"Contacts: search, one card\" },\n { name: \"desktop_calendar\", group: \"personal_automation\", state: \"built\", path: \"device_op\", ops: [\"calendar.list\", \"calendar.create\", \"reminders.list\", \"reminders.create\"], platforms: [\"darwin\"], summary: \"Calendar and Reminders: list and add\" },\n { name: \"desktop_photos\", group: \"personal_automation\", state: \"built\", path: \"device_op\", ops: [\"photos.search\", \"photos.get\"], platforms: [\"darwin\"], summary: \"The Photos library: find, export an original\" },\n // Windows comes back once a Windows location fix is proven (plan attack retire-local 2026-10-12, B6):\n // until then local_mac_apps (macOS-only) is judged on macOS and nothing claims Windows.\n { name: \"desktop_location\", group: \"personal_automation\", state: \"built\", path: \"device_op\", ops: [\"location.get\"], platforms: [\"darwin\"], summary: \"Where the computer is (the OS's location service)\" },\n { name: \"desktop_net\", group: \"personal_automation\", state: \"built\", path: \"device_op\", ops: [\"net.info\", \"net.wifi\", \"net.bluetooth\", \"net.devices\", \"net.mdns\", \"net.scan\", \"net.download\"], platforms: ALL, summary: \"Local network, Wi-Fi, Bluetooth, open ports and downloads\" },\n { name: \"desktop_schedule\", group: \"personal_automation\", state: \"built\", path: \"device_op\", ops: [\"schedule.create\", \"schedule.list\", \"schedule.cancel\"], platforms: ALL, summary: \"Run a tool's op on this computer on an interval; list and cancel\" },\n // 1.38, code from anywhere: the person's Claude Code and Codex sessions on this computer. Turning\n // either off in Agents › Tools refuses its ops on every relay connection (the existing switch).\n { name: \"coding_sessions_read\", group: \"personal_automation\", state: \"built\", path: \"device_op\", ops: [\"coding.providers\", \"coding.sessions.list\", \"coding.discover\", \"coding.runs.list\", \"coding.history\", \"coding.transcript.read\", \"coding.item.full\", \"coding.activity\", \"coding.folders.recent\", \"coding.folders.check\", \"coding.agents.access\", \"coding.titles.status\", \"coding.prefs.list\", \"coding.recent.seen\", \"coding.search\", \"coding.transcript.raw\", \"coding.watch\", \"coding.session.watch\"], platforms: ALL, summary: \"Claude Code and Codex sessions: list, read live, search, download\" },\n { name: \"coding_sessions_drive\", group: \"personal_automation\", state: \"built\", path: \"device_op\", ops: [\"coding.start\", \"coding.takeover\", \"coding.send\", \"coding.stop\", \"coding.stop_elsewhere\", \"coding.options.set\", \"coding.account.continue\", \"coding.agent.set\", \"coding.folders.create\", \"coding.prefs.set\", \"coding.reconcile\"], platforms: ALL, summary: \"Claude Code and Codex sessions: start, send, stop, take over, rename\" },\n\n // ── 4. Documents, notes and entities (1.37: the core's `documents` and `notes` owners; desktop_web is the `tools` service) ──\n { name: \"desktop_documents\", group: \"tools_service\", state: \"built\", path: \"device_op\", ops: [\"documents.pdf_text\", \"documents.ocr\", \"documents.image_resize\", \"documents.office_generate\"], platforms: ALL, summary: \"PDF text, OCR, images, Word and Excel files\" },\n { name: \"desktop_web\", group: \"tools_service\", state: \"built\", path: \"device_op\", ops: [\"web.fetch\", \"web.scrape\", \"web.search\", \"web.fetch_with_browser\"], platforms: ALL, summary: \"Fetch, scrape, search and research the web from this computer's own connection (research: search on AI Matrx, every result read here)\" },\n { name: \"desktop_entities\", group: \"tools_service\", state: \"built\", path: \"device_op\", ops: [\"entities.ner\", \"entities.pii\"], platforms: ALL, summary: \"Names, places, organizations and private data, found on the device\" },\n // matrx-local's SemanticFindPaths: needs a local embedding index of this computer's files and an\n // embedding model on the device; neither exists yet, so it is Coming soon on Agents › Tools.\n { name: \"desktop_semantic_find\", group: \"files_shell\", state: \"planned\", path: \"device_op\", ops: [\"fs.search_semantic\"], platforms: ALL, summary: \"Find files by meaning (a local embedding index of this computer's files)\" },\n { name: \"desktop_notes\", group: \"files_shell\", state: \"built\", path: \"device_op\", ops: [\"notes.folders\", \"notes.list\", \"notes.read\", \"notes.write\", \"notes.search\"], platforms: ALL, summary: \"The person's local notes (Documents/Matrx/Notes): list, read, write, search\" },\n\n // ── 5. Python `ml` service ───────────────────────────────────────────────────────────────────\n // Built: models.transcribe through local_proxy's POST /op/{cap.op} (matrx-ai implementations/desktop.py).\n // Whisper detects the language itself, so matrx-local's speech_locales needs no op of its own.\n { name: \"desktop_transcribe\", group: \"ml_service\", state: \"built\", path: \"device_op\", ops: [\"models.transcribe\"], platforms: ALL, summary: \"Speech to text on the device\" },\n\n // ── 6. Windows administration ────────────────────────────────────────────────────────────────\n { name: \"desktop_windows_admin\", group: \"windows_admin\", state: \"built\", path: \"device_op\", ops: [\"windows.registry_read\", \"windows.registry_write\", \"windows.services\", \"windows.service_control\", \"windows.event_log\", \"windows.features\"], platforms: [\"win32\"], summary: \"Registry, services, event log, optional features\" },\n];\n\n/**\n * Tools armed with a device binding that are deliberately NOT device tools, each with its reason.\n * They run on the server; the status table does not track them.\n */\nexport const EXCLUDED_TOOLS: Readonly<Record<string, string>> = {\n git_ingest:\n \"Runs on the server: it ingests repository URLs. A local path on a bound computer or sandbox is refused with the fs_* and shell remedy, since the server cannot see it\",\n};\n\n/** What became of one matrx-local handler. */\nexport type LegacyDisposition =\n | { readonly kind: \"tool\"; readonly tool: string }\n | { readonly kind: \"dropped\"; readonly reason: string };\n\nconst tool = (name: string): LegacyDisposition => ({ kind: \"tool\", tool: name });\nconst dropped = (reason: string): LegacyDisposition => ({ kind: \"dropped\", reason });\n\nconst SHELL_COVERS = \"Done with shell_execute (mv, cp, rm, tar), as every coding agent does\";\n\n/** matrx-local's 120 actions (`app/tools/actions.py` ACTION_GROUPS), keyed `<mega tool>.<action>`. */\nexport const LEGACY_ACTIONS: Readonly<Record<string, LegacyDisposition>> = {\n \"local_file.read\": tool(\"fs_read\"),\n \"local_file.write\": tool(\"fs_write\"),\n \"local_file.edit\": tool(\"fs_edit\"),\n \"local_file.move\": dropped(SHELL_COVERS),\n \"local_file.copy\": dropped(SHELL_COVERS),\n \"local_file.delete\": dropped(SHELL_COVERS),\n \"local_file.rename\": dropped(SHELL_COVERS),\n \"local_file.mkdir\": tool(\"fs_mkdir\"),\n \"local_file.glob\": tool(\"fs_search\"),\n \"local_file.grep\": tool(\"fs_search\"),\n \"local_file.list\": tool(\"fs_list\"),\n \"local_file.places\": dropped(\"The device's home and folders reach the agent in its binding briefing (sysinfo.get)\"),\n \"local_file.find\": tool(\"fs_search\"),\n \"local_file.semantic_find\": dropped(\"Needs a local embedding index; desktop_semantic_find is planned (Coming soon on Agents › Tools) until it exists\"),\n\n \"local_shell.run\": tool(\"shell_execute\"),\n \"local_shell.output\": tool(\"shell_job\"),\n \"local_shell.stop\": tool(\"shell_job\"),\n\n \"local_window.list\": tool(\"desktop_window\"),\n \"local_window.focus\": tool(\"desktop_window\"),\n \"local_window.move\": tool(\"desktop_window\"),\n \"local_window.minimize\": tool(\"desktop_window\"),\n\n \"local_process.list\": tool(\"desktop_process\"),\n \"local_process.ports\": tool(\"desktop_process\"),\n \"local_process.launch_app\": tool(\"desktop_apps\"),\n \"local_process.kill\": tool(\"desktop_process\"),\n \"local_process.focus_app\": tool(\"desktop_apps\"),\n \"local_process.terminals\": dropped(\"Matrx 2 terminals are exec sessions; the person's own terminal windows are not the agent's\"),\n \"local_process.tail_terminal\": dropped(\"Matrx 2 terminals are exec sessions; the person's own terminal windows are not the agent's\"),\n \"local_process.installed_apps\": tool(\"desktop_apps\"),\n\n \"local_input.type_text\": tool(\"desktop_input\"),\n \"local_input.hotkey\": tool(\"desktop_input\"),\n \"local_input.mouse_click\": tool(\"desktop_input\"),\n \"local_input.mouse_move\": tool(\"desktop_input\"),\n\n \"local_audio.devices\": tool(\"desktop_audio\"),\n \"local_audio.record\": tool(\"desktop_audio\"),\n \"local_audio.play\": tool(\"desktop_audio\"),\n \"local_audio.transcribe\": tool(\"desktop_transcribe\"),\n \"local_audio.transcribe_with_speech\": tool(\"desktop_transcribe\"),\n \"local_audio.speech_locales\": tool(\"desktop_transcribe\"),\n\n \"local_clipboard.read\": tool(\"desktop_clipboard\"),\n \"local_clipboard.write\": tool(\"desktop_clipboard\"),\n\n \"local_screen.screenshot\": tool(\"desktop_screen\"),\n \"local_screen.list\": tool(\"desktop_screen\"),\n \"local_screen.capture_book\": dropped(\"A one-off loop of screenshot plus page turn; the agent composes it from desktop_screen and desktop_input\"),\n\n \"local_system.info\": tool(\"desktop_system\"),\n \"local_system.open_url\": tool(\"desktop_system\"),\n \"local_system.open_path\": tool(\"desktop_system\"),\n \"local_system.notify\": tool(\"desktop_system\"),\n\n // The person's own browser is the AI Matrx extension paired with Matrx 2 (cap browser).\n \"local_browser.navigate\": tool(\"desktop_browser\"),\n \"local_browser.click\": tool(\"desktop_browser\"),\n \"local_browser.type_text\": tool(\"desktop_browser\"),\n \"local_browser.extract\": tool(\"desktop_browser\"),\n \"local_browser.screenshot\": tool(\"desktop_browser\"),\n \"local_browser.eval\": dropped(\"The extension runs no page script for Matrx 2: its script and cdp tools are privileged and refused over the desktop path; read, click and type cover what eval was used for\"),\n \"local_browser.tabs\": tool(\"desktop_browser\"),\n \"local_browser.close\": tool(\"desktop_browser\"),\n\n \"local_web.fetch\": tool(\"desktop_web\"),\n \"local_web.fetch_with_browser\": tool(\"desktop_web\"),\n \"local_web.scrape\": tool(\"desktop_web\"),\n \"local_web.search\": tool(\"desktop_web\"),\n \"local_web.research\": tool(\"desktop_web\"),\n \"local_web.download\": tool(\"desktop_net\"),\n \"local_web.upload\": dropped(\"Uploads are cloud files (matrx-files) and file sync, one upload path\"),\n\n \"local_net.info\": tool(\"desktop_net\"),\n \"local_net.scan\": tool(\"desktop_net\"),\n \"local_net.port_scan\": tool(\"desktop_net\"),\n \"local_net.mdns_discover\": tool(\"desktop_net\"),\n \"local_net.wifi_networks\": tool(\"desktop_net\"),\n \"local_net.bluetooth_devices\": tool(\"desktop_net\"),\n \"local_net.connected_devices\": tool(\"desktop_net\"),\n\n \"local_monitor.resources\": tool(\"desktop_resources\"),\n \"local_monitor.battery\": tool(\"desktop_power\"),\n \"local_monitor.disk_usage\": tool(\"desktop_resources\"),\n \"local_monitor.top_processes\": tool(\"desktop_process\"),\n \"local_monitor.watch_directory\": tool(\"fs_watch\"),\n \"local_monitor.watch_events\": tool(\"fs_watch\"),\n \"local_monitor.stop_watch\": tool(\"fs_watch\"),\n \"local_monitor.heartbeat\": dropped(\"The relay's device status replaces the heartbeat\"),\n\n // Matrx Local's scheduler ran one of its tools on an interval; desktop_schedule runs an op so.\n \"local_schedule.create\": tool(\"desktop_schedule\"),\n \"local_schedule.list\": tool(\"desktop_schedule\"),\n \"local_schedule.cancel\": tool(\"desktop_schedule\"),\n \"local_schedule.prevent_sleep\": tool(\"desktop_power\"),\n\n // Matrx Local's documents are the Markdown notes in Documents/Matrx/Notes; desktop_notes reads and writes them.\n \"local_documents.list\": tool(\"desktop_notes\"),\n \"local_documents.folders\": tool(\"desktop_notes\"),\n \"local_documents.read\": tool(\"desktop_notes\"),\n \"local_documents.write\": tool(\"desktop_notes\"),\n \"local_documents.search\": tool(\"desktop_notes\"),\n\n \"local_media.ocr\": tool(\"desktop_documents\"),\n \"local_media.resize\": tool(\"desktop_documents\"),\n \"local_media.pdf_extract\": tool(\"desktop_documents\"),\n \"local_media.office_generate\": tool(\"desktop_documents\"),\n \"local_media.archive_create\": dropped(SHELL_COVERS),\n \"local_media.archive_extract\": dropped(SHELL_COVERS),\n\n \"local_ner.entities\": tool(\"desktop_entities\"),\n \"local_ner.pii\": tool(\"desktop_entities\"),\n\n \"local_mac_apps.applescript\": tool(\"desktop_automation\"),\n \"local_mac_apps.list_emails\": tool(\"desktop_mail\"),\n \"local_mac_apps.send_email\": tool(\"desktop_mail\"),\n \"local_mac_apps.email_accounts\": tool(\"desktop_mail\"),\n \"local_mac_apps.list_messages\": tool(\"desktop_messages\"),\n \"local_mac_apps.list_conversations\": tool(\"desktop_messages\"),\n \"local_mac_apps.send_message\": tool(\"desktop_messages\"),\n \"local_mac_apps.search_contacts\": tool(\"desktop_contacts\"),\n \"local_mac_apps.get_contact\": tool(\"desktop_contacts\"),\n \"local_mac_apps.list_events\": tool(\"desktop_calendar\"),\n \"local_mac_apps.create_event\": tool(\"desktop_calendar\"),\n \"local_mac_apps.list_reminders\": tool(\"desktop_calendar\"),\n \"local_mac_apps.create_reminder\": tool(\"desktop_calendar\"),\n \"local_mac_apps.search_photos\": tool(\"desktop_photos\"),\n \"local_mac_apps.get_photo\": tool(\"desktop_photos\"),\n \"local_mac_apps.location\": tool(\"desktop_location\"),\n\n \"local_windows_ps.run\": tool(\"desktop_automation\"),\n \"local_windows_ps.get_env\": dropped(\"Read with shell_execute; a per-command env rides exec.run\"),\n \"local_windows_ps.set_env\": dropped(\"Changing the person's persistent environment is not an agent tool\"),\n \"local_windows_ps.registry_read\": tool(\"desktop_windows_admin\"),\n \"local_windows_ps.registry_write\": tool(\"desktop_windows_admin\"),\n \"local_windows_ps.service_list\": tool(\"desktop_windows_admin\"),\n \"local_windows_ps.service_control\": tool(\"desktop_windows_admin\"),\n \"local_windows_ps.event_log\": tool(\"desktop_windows_admin\"),\n \"local_windows_ps.windows_features\": tool(\"desktop_windows_admin\"),\n};\n\n/**\n * matrx-local's 19 action-enum dispatchers. Each fanned an `action` out to the handlers above and\n * did nothing else; they retire with the `matrx-local` executor binding (the platform reaches a\n * device through the relay now, never by client delegation).\n */\nexport const LEGACY_DISPATCHERS: readonly string[] = [\n \"local_file\",\n \"local_shell\",\n \"local_window\",\n \"local_process\",\n \"local_input\",\n \"local_audio\",\n \"local_clipboard\",\n \"local_screen\",\n \"local_system\",\n \"local_browser\",\n \"local_web\",\n \"local_net\",\n \"local_monitor\",\n \"local_schedule\",\n \"local_documents\",\n \"local_media\",\n \"local_ner\",\n \"local_mac_apps\",\n \"local_windows_ps\",\n];\n\n/** Built tools' ops, typed: a built tool naming an op the protocol does not have fails to compile in the test. */\nexport function builtOps(): OpName[] {\n return TOOL_CATALOG.filter((t) => t.state === \"built\").flatMap((t) => t.ops as OpName[]);\n}\n","/**\n * The generated tool status table (SPEC §10): tool × level × platform, built ONLY from harness\n * results (`ToolResultsFile`) joined with the catalog. Never written by hand; the one status anyone\n * cites. `renderToolStatusMarkdown` is the committed text form; screens render `ToolStatus` itself.\n */\nimport { ToolResultsFile, type ToolLevel, type ToolLevelResult, type ToolPlatform, type ToolTransport } from \"../schema/tools\";\nimport { EXCLUDED_TOOLS, TOOL_CATALOG, TOOL_GROUPS, type CatalogTool, type ToolGroupId, type ToolState } from \"./catalog\";\n\nexport const TOOL_LEVELS: readonly ToolLevel[] = [\"programmatic\", \"protocol\", \"chat\"];\nexport const TOOL_PLATFORMS: readonly ToolPlatform[] = [\"darwin\", \"win32\", \"linux\"];\n\n/**\n * `pass`: every required proof passed and none failed. `partial`: passes so far, a required proof\n * missing (`missing` says which). `fail`: the latest run of some proof failed. `untested`: nothing\n * ran. `not_built`: the tool is planned. `unsupported`: the tool does not exist on this platform.\n */\nconst UUID_IN_NAME = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/gi;\n\nexport type CellState = \"pass\" | \"partial\" | \"fail\" | \"untested\" | \"not_built\" | \"unsupported\";\n\nexport interface StatusEvidence {\n readonly suite: string;\n readonly test: string;\n readonly transport: ToolTransport;\n readonly outcome: ToolLevelResult[\"outcome\"];\n readonly remote_network: boolean;\n readonly commit: string;\n readonly run_at_ms: number;\n readonly detail: string;\n /** Chat level: the tool calls the turn made, of any tool (absent on older evidence). */\n readonly calls_made?: number;\n}\n\n/**\n * A run that never exercised the tool: a `skip`, or a chat turn that made no tool calls at all (the\n * model answered in prose, or the chat request failed). It is shown as the latest run but is never\n * evidence about the tool, so it can neither prove a cell nor turn a proven one red.\n */\nexport function isInconclusive(e: Pick<StatusEvidence, \"outcome\" | \"calls_made\">): boolean {\n return e.outcome === \"skip\" || e.calls_made === 0;\n}\n\nexport interface StatusCell {\n readonly state: CellState;\n /** Required proofs not yet passed, e.g. \"relay from another network\". */\n readonly missing: readonly string[];\n readonly last_run_at_ms: number | null;\n readonly evidence: readonly StatusEvidence[];\n}\n\nexport interface StatusRow {\n readonly tool: string;\n readonly group: ToolGroupId;\n readonly tool_state: ToolState;\n readonly summary: string;\n readonly note: string | null;\n readonly cells: Readonly<Record<ToolPlatform, Readonly<Record<ToolLevel, StatusCell>>>>;\n /** Working on a platform = all three levels pass there (SPEC §10). */\n readonly working: Readonly<Record<ToolPlatform, boolean>>;\n}\n\nexport interface ToolStatus {\n readonly schema: \"matrx.tool-status.v1\";\n readonly generated_at_ms: number;\n readonly commits: readonly string[];\n readonly rows: readonly StatusRow[];\n readonly totals: Readonly<Record<ToolPlatform, { readonly working: number; readonly built: number; readonly tools: number }>>;\n}\n\n/** What each level needs before it reads `pass`. Level 2 is the transports AND the relay from another network. */\nconst REQUIRED: Readonly<Record<ToolLevel, readonly { readonly label: string; readonly ok: (e: StatusEvidence) => boolean }[]>> = {\n programmatic: [{ label: \"in process\", ok: (e) => e.transport === \"in_process\" }],\n protocol: [\n { label: \"localhost\", ok: (e) => e.transport === \"localhost\" },\n { label: \"relay\", ok: (e) => e.transport === \"relay\" },\n { label: \"relay from another network\", ok: (e) => e.transport === \"relay\" && e.remote_network },\n ],\n chat: [{ label: \"a real agent in a real chat\", ok: (e) => e.transport === \"agent\" }],\n};\n\nfunction cellFor(tool: CatalogTool, platform: ToolPlatform, level: ToolLevel, evidence: StatusEvidence[]): StatusCell {\n if (!tool.platforms.includes(platform)) return { state: \"unsupported\", missing: [], last_run_at_ms: null, evidence: [] };\n // The latest DECISIVE run of each (suite, test, transport, network) decides; older runs are\n // history. A run that never exercised the tool (`isInconclusive`) never replaces a decisive one:\n // it is kept beside it, when newer, so the table still shows that the last run proved nothing.\n const latest = new Map<string, StatusEvidence>();\n const latestInconclusive = new Map<string, StatusEvidence>();\n for (const e of evidence) {\n // A uuid in a test name (the agent a chat proof ran, a conversation) is run data, never the\n // proof's identity: the same proof under a new test agent replaces the old one's result.\n const key = `${e.suite}\\u0000${e.test.replace(UUID_IN_NAME, \"<id>\")}\\u0000${e.transport}\\u0000${e.remote_network}`;\n const into = isInconclusive(e) ? latestInconclusive : latest;\n const prev = into.get(key);\n if (!prev || prev.run_at_ms < e.run_at_ms) into.set(key, e);\n }\n const runs = [...latest.values()].sort((a, b) => b.run_at_ms - a.run_at_ms);\n const unproven = [...latestInconclusive].filter(([k, e]) => (latest.get(k)?.run_at_ms ?? -1) < e.run_at_ms).map(([, e]) => e);\n const shown = [...runs, ...unproven].sort((a, b) => b.run_at_ms - a.run_at_ms);\n const last = runs[0]?.run_at_ms ?? null;\n if (tool.state === \"planned\" && runs.length === 0) return { state: \"not_built\", missing: [], last_run_at_ms: null, evidence: [] };\n if (runs.length === 0) return { state: \"untested\", missing: REQUIRED[level].map((r) => r.label), last_run_at_ms: null, evidence: shown };\n if (runs.some((e) => e.outcome === \"fail\")) return { state: \"fail\", missing: [], last_run_at_ms: last, evidence: shown };\n const missing = REQUIRED[level].filter((r) => !runs.some((e) => e.outcome === \"pass\" && r.ok(e))).map((r) => r.label);\n return { state: missing.length === 0 ? \"pass\" : \"partial\", missing, last_run_at_ms: last, evidence: shown };\n}\n\n/** Build the table from every results file. Throws when a file is off-contract (never silently skipped). */\nexport function buildToolStatus(files: readonly unknown[], opts: { readonly generatedAtMs: number }): ToolStatus {\n const parsed = files.map((f, i) => {\n const r = ToolResultsFile.safeParse(f);\n if (!r.success) throw new Error(`tool results file #${i} is off-contract: ${r.error.issues[0]?.path.join(\".\")} ${r.error.issues[0]?.message}`);\n return r.data;\n });\n const known = new Set(TOOL_CATALOG.map((t) => t.name));\n const byKey = new Map<string, StatusEvidence[]>();\n for (const file of parsed) {\n for (const r of file.results) {\n if (!known.has(r.tool)) throw new Error(`a result names ${r.tool}, which is not in the tool catalog`);\n const key = `${r.tool}|${r.platform}|${r.level}`;\n const list = byKey.get(key) ?? [];\n list.push({\n suite: r.suite,\n test: r.test,\n transport: r.transport,\n outcome: r.outcome,\n remote_network: r.remote_network,\n commit: file.commit,\n run_at_ms: r.run_at_ms,\n detail: r.detail,\n ...(r.calls_made === undefined ? {} : { calls_made: r.calls_made }),\n });\n byKey.set(key, list);\n }\n }\n const groupOrder = new Map(TOOL_GROUPS.map((g) => [g.id, g.order]));\n const tools = [...TOOL_CATALOG].sort((a, b) => (groupOrder.get(a.group) ?? 99) - (groupOrder.get(b.group) ?? 99));\n const rows: StatusRow[] = tools.map((tool) => {\n const cells = {} as Record<ToolPlatform, Record<ToolLevel, StatusCell>>;\n const working = {} as Record<ToolPlatform, boolean>;\n for (const platform of TOOL_PLATFORMS) {\n const perLevel = {} as Record<ToolLevel, StatusCell>;\n for (const level of TOOL_LEVELS) perLevel[level] = cellFor(tool, platform, level, byKey.get(`${tool.name}|${platform}|${level}`) ?? []);\n cells[platform] = perLevel;\n working[platform] = TOOL_LEVELS.every((l) => perLevel[l].state === \"pass\");\n }\n return { tool: tool.name, group: tool.group, tool_state: tool.state, summary: tool.summary, note: tool.note ?? null, cells, working };\n });\n const totals = {} as Record<ToolPlatform, { working: number; built: number; tools: number }>;\n for (const platform of TOOL_PLATFORMS) {\n const onPlatform = TOOL_CATALOG.filter((t) => t.platforms.includes(platform));\n totals[platform] = {\n working: rows.filter((r) => r.working[platform]).length,\n built: onPlatform.filter((t) => t.state !== \"planned\").length,\n tools: onPlatform.length,\n };\n }\n const commits = [...new Set(parsed.map((f) => f.commit))].sort();\n return { schema: \"matrx.tool-status.v1\", generated_at_ms: opts.generatedAtMs, commits, rows, totals };\n}\n\nconst MARK: Readonly<Record<CellState, string>> = { pass: \"✓\", partial: \"◐\", fail: \"✗\", untested: \"·\", not_built: \"—\", unsupported: \" \" };\n\n/** The committed text form. Columns: per platform, the three levels (P = programmatic, R = protocol, C = chat). */\nexport function renderToolStatusMarkdown(status: ToolStatus): string {\n const lines: string[] = [\n \"<!-- GENERATED by `pnpm tools:status` from test results. Never edit by hand. -->\",\n \"# Local tools: status\",\n \"\",\n `Generated ${new Date(status.generated_at_ms).toISOString()} from commits ${status.commits.join(\", \") || \"none\"}.`,\n \"\",\n \"✓ pass · ◐ passing so far, a required proof missing · ✗ fail · `·` untested · — not built. Levels: P programmatic, R protocol, C chat.\",\n \"\",\n \"| Platform | Working | Built | Tools |\",\n \"|---|---|---|---|\",\n ...TOOL_PLATFORMS.map((p) => `| ${p} | ${status.totals[p].working} | ${status.totals[p].built} | ${status.totals[p].tools} |`),\n \"\",\n ];\n for (const group of TOOL_GROUPS) {\n const rows = status.rows.filter((r) => r.group === group.id);\n if (rows.length === 0) continue;\n lines.push(`## ${group.order}. ${group.title}`, \"\", \"| Tool | darwin P R C | win32 P R C | linux P R C | Missing |\", \"|---|---|---|---|---|\");\n for (const r of rows) {\n const cols = TOOL_PLATFORMS.map((p) => TOOL_LEVELS.map((l) => MARK[r.cells[p][l].state]).join(\" \"));\n const missing = new Set<string>();\n for (const p of TOOL_PLATFORMS) for (const l of TOOL_LEVELS) for (const m of r.cells[p][l].missing) if (r.cells[p][l].state !== \"untested\") missing.add(`${p} ${l}: ${m}`);\n const name = r.tool_state === \"broken\" ? `${r.tool} (broken: ${r.note ?? \"\"})` : r.tool;\n lines.push(`| ${name} | ${cols.join(\" | \")} | ${[...missing].join(\"; \")} |`);\n }\n lines.push(\"\");\n }\n const excluded = Object.entries(EXCLUDED_TOOLS);\n if (excluded.length > 0) {\n lines.push(\"## Not device tools\", \"\", \"| Tool | Why |\", \"|---|---|\", ...excluded.map(([name, why]) => `| ${name} | ${why} |`), \"\");\n }\n return lines.join(\"\\n\");\n}\n","/**\n * The per-device tool policy's op rule (Matrx 2: Agents › Tools' switches, the\n * `desktop.tools/disabled_on_device` knob). The relay carries an op, never the tool that sent it, and\n * several tools share ops (fs_read, fs_write and fs_edit all read with `fs.read`; shell_execute and\n * shell_python both run `exec.run`). So an op is refused when EVERY catalog tool that sends it is\n * turned off. Pure, data-only: the core enforces it on relay connections, the screen explains it.\n */\nimport { TOOL_CATALOG } from \"./catalog\";\n\n/** The ops refused when these tools are off: those every sending tool has turned off. */\nexport function refusedOps(disabledTools: readonly string[]): ReadonlySet<string> {\n const off = new Set(disabledTools);\n const senders = new Map<string, string[]>();\n for (const tool of TOOL_CATALOG) for (const op of tool.ops) senders.set(op, [...(senders.get(op) ?? []), tool.name]);\n const refused = new Set<string>();\n for (const [op, tools] of senders) if (tools.every((t) => off.has(t))) refused.add(op);\n return refused;\n}\n\n/** The catalog tools that send this op. */\nexport function toolsSending(op: string): string[] {\n return TOOL_CATALOG.filter((t) => t.ops.includes(op)).map((t) => t.name);\n}\n\n/**\n * For one tool switched off: the tools still on that keep ALL its ops open (turning it off alone\n * stops nothing until they are off too). Empty when turning it off stops at least one op.\n */\nexport function sharedOpsBlocking(tool: string, disabledTools: readonly string[]): string[] {\n const entry = TOOL_CATALOG.find((t) => t.name === tool);\n if (!entry || entry.ops.length === 0) return [];\n const off = new Set([...disabledTools, tool]);\n const refused = refusedOps([...off]);\n if (entry.ops.some((op) => refused.has(op))) return [];\n const keepers = new Set<string>();\n for (const op of entry.ops) for (const other of TOOL_CATALOG) if (other.name !== tool && !off.has(other.name) && other.ops.includes(op)) keepers.add(other.name);\n return [...keepers].sort();\n}\n"],"mappings":"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","names":["tool","tool"]}
@@ -2958,6 +2958,14 @@ declare const OPS: {
2958
2958
  claude_code: "claude_code";
2959
2959
  }>>;
2960
2960
  session_cost_usd: z.ZodOptional<z.ZodNumber>;
2961
+ readings: z.ZodOptional<z.ZodObject<{
2962
+ kept: z.ZodNumber;
2963
+ since_ms: z.ZodNullable<z.ZodInt>;
2964
+ days: z.ZodArray<z.ZodObject<{
2965
+ day_ms: z.ZodInt;
2966
+ weekly: z.ZodNullable<z.ZodNumber>;
2967
+ }, z.core.$strict>>;
2968
+ }, z.core.$strict>>;
2961
2969
  }, z.core.$strict>>;
2962
2970
  problem: z.ZodOptional<z.ZodString>;
2963
2971
  as_of_ms: z.ZodOptional<z.ZodInt>;
@@ -3425,6 +3433,7 @@ declare const OPS: {
3425
3433
  scheduled: z.ZodBoolean;
3426
3434
  openable: z.ZodBoolean;
3427
3435
  how: z.ZodNullable<z.ZodString>;
3436
+ hidden: z.ZodOptional<z.ZodBoolean>;
3428
3437
  }, z.core.$strict>>;
3429
3438
  recently_cold: z.ZodArray<z.ZodObject<{
3430
3439
  id: z.ZodString;
@@ -3441,6 +3450,7 @@ declare const OPS: {
3441
3450
  scheduled: z.ZodBoolean;
3442
3451
  openable: z.ZodBoolean;
3443
3452
  how: z.ZodNullable<z.ZodString>;
3453
+ hidden: z.ZodOptional<z.ZodBoolean>;
3444
3454
  }, z.core.$strict>>;
3445
3455
  working: z.ZodInt;
3446
3456
  }, z.core.$strict>;
@@ -3664,6 +3674,7 @@ declare const OPS: {
3664
3674
  over_steps: z.ZodBoolean;
3665
3675
  description: z.ZodString;
3666
3676
  }, z.core.$strict>>;
3677
+ hidden: z.ZodOptional<z.ZodBoolean>;
3667
3678
  }, z.core.$strict>>;
3668
3679
  accounts: z.ZodArray<z.ZodObject<{
3669
3680
  account: z.ZodString;
@@ -3722,6 +3733,7 @@ declare const OPS: {
3722
3733
  }, z.core.$strict>;
3723
3734
  }, z.core.$strict>;
3724
3735
  helpers: z.ZodInt;
3736
+ hidden: z.ZodOptional<z.ZodBoolean>;
3725
3737
  }, z.core.$strict>>;
3726
3738
  idle: z.ZodArray<z.ZodObject<{
3727
3739
  id: z.ZodString;
@@ -3740,6 +3752,7 @@ declare const OPS: {
3740
3752
  avoidable: z.ZodNumber;
3741
3753
  }, z.core.$strict>;
3742
3754
  last_ms: z.ZodInt;
3755
+ hidden: z.ZodOptional<z.ZodBoolean>;
3743
3756
  }, z.core.$strict>>;
3744
3757
  starts: z.ZodArray<z.ZodObject<{
3745
3758
  repo: z.ZodString;
@@ -9945,6 +9958,14 @@ declare const NAMED_SCHEMAS: {
9945
9958
  claude_code: "claude_code";
9946
9959
  }>>;
9947
9960
  session_cost_usd: z.ZodOptional<z.ZodNumber>;
9961
+ readings: z.ZodOptional<z.ZodObject<{
9962
+ kept: z.ZodNumber;
9963
+ since_ms: z.ZodNullable<z.ZodInt>;
9964
+ days: z.ZodArray<z.ZodObject<{
9965
+ day_ms: z.ZodInt;
9966
+ weekly: z.ZodNullable<z.ZodNumber>;
9967
+ }, z.core.$strict>>;
9968
+ }, z.core.$strict>>;
9948
9969
  }, z.core.$strict>;
9949
9970
  readonly AppsInstancesListParams: z.ZodObject<{
9950
9971
  app_key: z.ZodString;
@@ -10054,6 +10075,14 @@ declare const NAMED_SCHEMAS: {
10054
10075
  claude_code: "claude_code";
10055
10076
  }>>;
10056
10077
  session_cost_usd: z.ZodOptional<z.ZodNumber>;
10078
+ readings: z.ZodOptional<z.ZodObject<{
10079
+ kept: z.ZodNumber;
10080
+ since_ms: z.ZodNullable<z.ZodInt>;
10081
+ days: z.ZodArray<z.ZodObject<{
10082
+ day_ms: z.ZodInt;
10083
+ weekly: z.ZodNullable<z.ZodNumber>;
10084
+ }, z.core.$strict>>;
10085
+ }, z.core.$strict>>;
10057
10086
  }, z.core.$strict>>;
10058
10087
  problem: z.ZodOptional<z.ZodString>;
10059
10088
  as_of_ms: z.ZodOptional<z.ZodInt>;
@@ -10076,6 +10105,14 @@ declare const NAMED_SCHEMAS: {
10076
10105
  source: z.ZodString;
10077
10106
  as_of_ms: z.ZodNullable<z.ZodInt>;
10078
10107
  }, z.core.$strict>;
10108
+ readonly AccountReadingsKept: z.ZodObject<{
10109
+ kept: z.ZodNumber;
10110
+ since_ms: z.ZodNullable<z.ZodInt>;
10111
+ days: z.ZodArray<z.ZodObject<{
10112
+ day_ms: z.ZodInt;
10113
+ weekly: z.ZodNullable<z.ZodNumber>;
10114
+ }, z.core.$strict>>;
10115
+ }, z.core.$strict>;
10079
10116
  readonly McpTransport: z.ZodEnum<{
10080
10117
  unknown: "unknown";
10081
10118
  stdio: "stdio";
@@ -17717,6 +17754,7 @@ declare const NAMED_SCHEMAS: {
17717
17754
  scheduled: z.ZodBoolean;
17718
17755
  openable: z.ZodBoolean;
17719
17756
  how: z.ZodNullable<z.ZodString>;
17757
+ hidden: z.ZodOptional<z.ZodBoolean>;
17720
17758
  }, z.core.$strict>;
17721
17759
  readonly AppsChatsColdParams: z.ZodObject<{
17722
17760
  app_key: z.ZodString;
@@ -17738,6 +17776,7 @@ declare const NAMED_SCHEMAS: {
17738
17776
  scheduled: z.ZodBoolean;
17739
17777
  openable: z.ZodBoolean;
17740
17778
  how: z.ZodNullable<z.ZodString>;
17779
+ hidden: z.ZodOptional<z.ZodBoolean>;
17741
17780
  }, z.core.$strict>>;
17742
17781
  recently_cold: z.ZodArray<z.ZodObject<{
17743
17782
  id: z.ZodString;
@@ -17754,6 +17793,7 @@ declare const NAMED_SCHEMAS: {
17754
17793
  scheduled: z.ZodBoolean;
17755
17794
  openable: z.ZodBoolean;
17756
17795
  how: z.ZodNullable<z.ZodString>;
17796
+ hidden: z.ZodOptional<z.ZodBoolean>;
17757
17797
  }, z.core.$strict>>;
17758
17798
  working: z.ZodInt;
17759
17799
  }, z.core.$strict>;
@@ -18047,6 +18087,7 @@ declare const NAMED_SCHEMAS: {
18047
18087
  }, z.core.$strict>;
18048
18088
  }, z.core.$strict>;
18049
18089
  helpers: z.ZodInt;
18090
+ hidden: z.ZodOptional<z.ZodBoolean>;
18050
18091
  }, z.core.$strict>;
18051
18092
  readonly SpendHelper: z.ZodObject<{
18052
18093
  model: z.ZodString;
@@ -18064,6 +18105,7 @@ declare const NAMED_SCHEMAS: {
18064
18105
  over_steps: z.ZodBoolean;
18065
18106
  description: z.ZodString;
18066
18107
  }, z.core.$strict>>;
18108
+ hidden: z.ZodOptional<z.ZodBoolean>;
18067
18109
  }, z.core.$strict>;
18068
18110
  readonly SpendIdleScope: z.ZodObject<{
18069
18111
  count: z.ZodInt;
@@ -18088,6 +18130,7 @@ declare const NAMED_SCHEMAS: {
18088
18130
  avoidable: z.ZodNumber;
18089
18131
  }, z.core.$strict>;
18090
18132
  last_ms: z.ZodInt;
18133
+ hidden: z.ZodOptional<z.ZodBoolean>;
18091
18134
  }, z.core.$strict>;
18092
18135
  readonly SpendStart: z.ZodObject<{
18093
18136
  repo: z.ZodString;
@@ -18123,6 +18166,7 @@ declare const NAMED_SCHEMAS: {
18123
18166
  over_steps: z.ZodBoolean;
18124
18167
  description: z.ZodString;
18125
18168
  }, z.core.$strict>>;
18169
+ hidden: z.ZodOptional<z.ZodBoolean>;
18126
18170
  }, z.core.$strict>>;
18127
18171
  accounts: z.ZodArray<z.ZodObject<{
18128
18172
  account: z.ZodString;
@@ -18181,6 +18225,7 @@ declare const NAMED_SCHEMAS: {
18181
18225
  }, z.core.$strict>;
18182
18226
  }, z.core.$strict>;
18183
18227
  helpers: z.ZodInt;
18228
+ hidden: z.ZodOptional<z.ZodBoolean>;
18184
18229
  }, z.core.$strict>>;
18185
18230
  idle: z.ZodArray<z.ZodObject<{
18186
18231
  id: z.ZodString;
@@ -18199,6 +18244,7 @@ declare const NAMED_SCHEMAS: {
18199
18244
  avoidable: z.ZodNumber;
18200
18245
  }, z.core.$strict>;
18201
18246
  last_ms: z.ZodInt;
18247
+ hidden: z.ZodOptional<z.ZodBoolean>;
18202
18248
  }, z.core.$strict>>;
18203
18249
  starts: z.ZodArray<z.ZodObject<{
18204
18250
  repo: z.ZodString;
@@ -2958,6 +2958,14 @@ declare const OPS: {
2958
2958
  claude_code: "claude_code";
2959
2959
  }>>;
2960
2960
  session_cost_usd: z.ZodOptional<z.ZodNumber>;
2961
+ readings: z.ZodOptional<z.ZodObject<{
2962
+ kept: z.ZodNumber;
2963
+ since_ms: z.ZodNullable<z.ZodInt>;
2964
+ days: z.ZodArray<z.ZodObject<{
2965
+ day_ms: z.ZodInt;
2966
+ weekly: z.ZodNullable<z.ZodNumber>;
2967
+ }, z.core.$strict>>;
2968
+ }, z.core.$strict>>;
2961
2969
  }, z.core.$strict>>;
2962
2970
  problem: z.ZodOptional<z.ZodString>;
2963
2971
  as_of_ms: z.ZodOptional<z.ZodInt>;
@@ -3425,6 +3433,7 @@ declare const OPS: {
3425
3433
  scheduled: z.ZodBoolean;
3426
3434
  openable: z.ZodBoolean;
3427
3435
  how: z.ZodNullable<z.ZodString>;
3436
+ hidden: z.ZodOptional<z.ZodBoolean>;
3428
3437
  }, z.core.$strict>>;
3429
3438
  recently_cold: z.ZodArray<z.ZodObject<{
3430
3439
  id: z.ZodString;
@@ -3441,6 +3450,7 @@ declare const OPS: {
3441
3450
  scheduled: z.ZodBoolean;
3442
3451
  openable: z.ZodBoolean;
3443
3452
  how: z.ZodNullable<z.ZodString>;
3453
+ hidden: z.ZodOptional<z.ZodBoolean>;
3444
3454
  }, z.core.$strict>>;
3445
3455
  working: z.ZodInt;
3446
3456
  }, z.core.$strict>;
@@ -3664,6 +3674,7 @@ declare const OPS: {
3664
3674
  over_steps: z.ZodBoolean;
3665
3675
  description: z.ZodString;
3666
3676
  }, z.core.$strict>>;
3677
+ hidden: z.ZodOptional<z.ZodBoolean>;
3667
3678
  }, z.core.$strict>>;
3668
3679
  accounts: z.ZodArray<z.ZodObject<{
3669
3680
  account: z.ZodString;
@@ -3722,6 +3733,7 @@ declare const OPS: {
3722
3733
  }, z.core.$strict>;
3723
3734
  }, z.core.$strict>;
3724
3735
  helpers: z.ZodInt;
3736
+ hidden: z.ZodOptional<z.ZodBoolean>;
3725
3737
  }, z.core.$strict>>;
3726
3738
  idle: z.ZodArray<z.ZodObject<{
3727
3739
  id: z.ZodString;
@@ -3740,6 +3752,7 @@ declare const OPS: {
3740
3752
  avoidable: z.ZodNumber;
3741
3753
  }, z.core.$strict>;
3742
3754
  last_ms: z.ZodInt;
3755
+ hidden: z.ZodOptional<z.ZodBoolean>;
3743
3756
  }, z.core.$strict>>;
3744
3757
  starts: z.ZodArray<z.ZodObject<{
3745
3758
  repo: z.ZodString;
@@ -9945,6 +9958,14 @@ declare const NAMED_SCHEMAS: {
9945
9958
  claude_code: "claude_code";
9946
9959
  }>>;
9947
9960
  session_cost_usd: z.ZodOptional<z.ZodNumber>;
9961
+ readings: z.ZodOptional<z.ZodObject<{
9962
+ kept: z.ZodNumber;
9963
+ since_ms: z.ZodNullable<z.ZodInt>;
9964
+ days: z.ZodArray<z.ZodObject<{
9965
+ day_ms: z.ZodInt;
9966
+ weekly: z.ZodNullable<z.ZodNumber>;
9967
+ }, z.core.$strict>>;
9968
+ }, z.core.$strict>>;
9948
9969
  }, z.core.$strict>;
9949
9970
  readonly AppsInstancesListParams: z.ZodObject<{
9950
9971
  app_key: z.ZodString;
@@ -10054,6 +10075,14 @@ declare const NAMED_SCHEMAS: {
10054
10075
  claude_code: "claude_code";
10055
10076
  }>>;
10056
10077
  session_cost_usd: z.ZodOptional<z.ZodNumber>;
10078
+ readings: z.ZodOptional<z.ZodObject<{
10079
+ kept: z.ZodNumber;
10080
+ since_ms: z.ZodNullable<z.ZodInt>;
10081
+ days: z.ZodArray<z.ZodObject<{
10082
+ day_ms: z.ZodInt;
10083
+ weekly: z.ZodNullable<z.ZodNumber>;
10084
+ }, z.core.$strict>>;
10085
+ }, z.core.$strict>>;
10057
10086
  }, z.core.$strict>>;
10058
10087
  problem: z.ZodOptional<z.ZodString>;
10059
10088
  as_of_ms: z.ZodOptional<z.ZodInt>;
@@ -10076,6 +10105,14 @@ declare const NAMED_SCHEMAS: {
10076
10105
  source: z.ZodString;
10077
10106
  as_of_ms: z.ZodNullable<z.ZodInt>;
10078
10107
  }, z.core.$strict>;
10108
+ readonly AccountReadingsKept: z.ZodObject<{
10109
+ kept: z.ZodNumber;
10110
+ since_ms: z.ZodNullable<z.ZodInt>;
10111
+ days: z.ZodArray<z.ZodObject<{
10112
+ day_ms: z.ZodInt;
10113
+ weekly: z.ZodNullable<z.ZodNumber>;
10114
+ }, z.core.$strict>>;
10115
+ }, z.core.$strict>;
10079
10116
  readonly McpTransport: z.ZodEnum<{
10080
10117
  unknown: "unknown";
10081
10118
  stdio: "stdio";
@@ -17717,6 +17754,7 @@ declare const NAMED_SCHEMAS: {
17717
17754
  scheduled: z.ZodBoolean;
17718
17755
  openable: z.ZodBoolean;
17719
17756
  how: z.ZodNullable<z.ZodString>;
17757
+ hidden: z.ZodOptional<z.ZodBoolean>;
17720
17758
  }, z.core.$strict>;
17721
17759
  readonly AppsChatsColdParams: z.ZodObject<{
17722
17760
  app_key: z.ZodString;
@@ -17738,6 +17776,7 @@ declare const NAMED_SCHEMAS: {
17738
17776
  scheduled: z.ZodBoolean;
17739
17777
  openable: z.ZodBoolean;
17740
17778
  how: z.ZodNullable<z.ZodString>;
17779
+ hidden: z.ZodOptional<z.ZodBoolean>;
17741
17780
  }, z.core.$strict>>;
17742
17781
  recently_cold: z.ZodArray<z.ZodObject<{
17743
17782
  id: z.ZodString;
@@ -17754,6 +17793,7 @@ declare const NAMED_SCHEMAS: {
17754
17793
  scheduled: z.ZodBoolean;
17755
17794
  openable: z.ZodBoolean;
17756
17795
  how: z.ZodNullable<z.ZodString>;
17796
+ hidden: z.ZodOptional<z.ZodBoolean>;
17757
17797
  }, z.core.$strict>>;
17758
17798
  working: z.ZodInt;
17759
17799
  }, z.core.$strict>;
@@ -18047,6 +18087,7 @@ declare const NAMED_SCHEMAS: {
18047
18087
  }, z.core.$strict>;
18048
18088
  }, z.core.$strict>;
18049
18089
  helpers: z.ZodInt;
18090
+ hidden: z.ZodOptional<z.ZodBoolean>;
18050
18091
  }, z.core.$strict>;
18051
18092
  readonly SpendHelper: z.ZodObject<{
18052
18093
  model: z.ZodString;
@@ -18064,6 +18105,7 @@ declare const NAMED_SCHEMAS: {
18064
18105
  over_steps: z.ZodBoolean;
18065
18106
  description: z.ZodString;
18066
18107
  }, z.core.$strict>>;
18108
+ hidden: z.ZodOptional<z.ZodBoolean>;
18067
18109
  }, z.core.$strict>;
18068
18110
  readonly SpendIdleScope: z.ZodObject<{
18069
18111
  count: z.ZodInt;
@@ -18088,6 +18130,7 @@ declare const NAMED_SCHEMAS: {
18088
18130
  avoidable: z.ZodNumber;
18089
18131
  }, z.core.$strict>;
18090
18132
  last_ms: z.ZodInt;
18133
+ hidden: z.ZodOptional<z.ZodBoolean>;
18091
18134
  }, z.core.$strict>;
18092
18135
  readonly SpendStart: z.ZodObject<{
18093
18136
  repo: z.ZodString;
@@ -18123,6 +18166,7 @@ declare const NAMED_SCHEMAS: {
18123
18166
  over_steps: z.ZodBoolean;
18124
18167
  description: z.ZodString;
18125
18168
  }, z.core.$strict>>;
18169
+ hidden: z.ZodOptional<z.ZodBoolean>;
18126
18170
  }, z.core.$strict>>;
18127
18171
  accounts: z.ZodArray<z.ZodObject<{
18128
18172
  account: z.ZodString;
@@ -18181,6 +18225,7 @@ declare const NAMED_SCHEMAS: {
18181
18225
  }, z.core.$strict>;
18182
18226
  }, z.core.$strict>;
18183
18227
  helpers: z.ZodInt;
18228
+ hidden: z.ZodOptional<z.ZodBoolean>;
18184
18229
  }, z.core.$strict>>;
18185
18230
  idle: z.ZodArray<z.ZodObject<{
18186
18231
  id: z.ZodString;
@@ -18199,6 +18244,7 @@ declare const NAMED_SCHEMAS: {
18199
18244
  avoidable: z.ZodNumber;
18200
18245
  }, z.core.$strict>;
18201
18246
  last_ms: z.ZodInt;
18247
+ hidden: z.ZodOptional<z.ZodBoolean>;
18202
18248
  }, z.core.$strict>>;
18203
18249
  starts: z.ZodArray<z.ZodObject<{
18204
18250
  repo: z.ZodString;