@ai-matrx/desktop-protocol 0.21.64 → 0.21.65
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/CHANGELOG.md +13 -3
- package/dist/{chunk-server-B5W6NL7W.js → chunk-server-K7IQDLLV.js} +37 -7
- package/dist/chunk-server-K7IQDLLV.js.map +1 -0
- package/dist/client.cjs +28 -6
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +2 -2
- package/dist/client.d.ts +2 -2
- package/dist/client.js +1 -1
- package/dist/index.cjs +37 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +53 -6
- package/dist/index.d.ts +53 -6
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/{models-B13QkIMu.d.cts → models-Bz990hcd.d.cts} +37 -0
- package/dist/{models-B13QkIMu.d.ts → models-Bz990hcd.d.ts} +37 -0
- package/dist/react.d.cts +16 -0
- package/dist/react.d.ts +16 -0
- package/generated/desktop-protocol.schema.json +65 -1
- package/package.json +2 -2
- package/dist/chunk-server-B5W6NL7W.js.map +0 -1
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 = \"5f948a2ff8eb9390240f311461546c850c170e3b633195a2aa80daf1084f4009\" 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 and search the web from this computer's own connection\" },\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 { 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\";\nconst CLOUD_SCRAPER = \"The cloud scraper and research tools run with this computer as their network (the `proxy` capability)\";\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; returns with file sync's index, not before\"),\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\": dropped(CLOUD_SCRAPER),\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 = \"12cce30e22d7106e7344708176202949a2b2fea7eede2c570f663d46d3cedf34\" 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 and search the web from this computer's own connection\" },\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 { 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\";\nconst CLOUD_SCRAPER = \"The cloud scraper and research tools run with this computer as their network (the `proxy` capability)\";\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; returns with file sync's index, not before\"),\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\": dropped(CLOUD_SCRAPER),\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"]}
|
|
@@ -3831,6 +3831,7 @@ declare const OPS: {
|
|
|
3831
3831
|
readonly "window.list": {
|
|
3832
3832
|
readonly params: z.ZodObject<{
|
|
3833
3833
|
title: z.ZodOptional<z.ZodString>;
|
|
3834
|
+
app: z.ZodOptional<z.ZodString>;
|
|
3834
3835
|
limit: z.ZodDefault<z.ZodInt>;
|
|
3835
3836
|
}, z.core.$strict>;
|
|
3836
3837
|
readonly result: z.ZodObject<{
|
|
@@ -3898,9 +3899,19 @@ declare const OPS: {
|
|
|
3898
3899
|
readonly "window.minimize": {
|
|
3899
3900
|
readonly params: z.ZodObject<{
|
|
3900
3901
|
id: z.ZodInt;
|
|
3902
|
+
mode: z.ZodOptional<z.ZodEnum<{
|
|
3903
|
+
minimize: "minimize";
|
|
3904
|
+
maximize: "maximize";
|
|
3905
|
+
restore: "restore";
|
|
3906
|
+
}>>;
|
|
3901
3907
|
}, z.core.$strict>;
|
|
3902
3908
|
readonly result: z.ZodObject<{
|
|
3903
3909
|
id: z.ZodInt;
|
|
3910
|
+
mode: z.ZodOptional<z.ZodEnum<{
|
|
3911
|
+
minimize: "minimize";
|
|
3912
|
+
maximize: "maximize";
|
|
3913
|
+
restore: "restore";
|
|
3914
|
+
}>>;
|
|
3904
3915
|
}, z.core.$strict>;
|
|
3905
3916
|
readonly kind: "unary";
|
|
3906
3917
|
readonly since: "1.4";
|
|
@@ -4440,12 +4451,16 @@ declare const OPS: {
|
|
|
4440
4451
|
seconds: z.ZodNumber;
|
|
4441
4452
|
device_id: z.ZodOptional<z.ZodString>;
|
|
4442
4453
|
path: z.ZodOptional<z.ZodString>;
|
|
4454
|
+
channels: z.ZodOptional<z.ZodInt>;
|
|
4455
|
+
sample_rate: z.ZodOptional<z.ZodInt>;
|
|
4443
4456
|
}, z.core.$strict>;
|
|
4444
4457
|
readonly result: z.ZodObject<{
|
|
4445
4458
|
path: z.ZodString;
|
|
4446
4459
|
seconds: z.ZodNumber;
|
|
4447
4460
|
bytes: z.ZodInt;
|
|
4448
4461
|
peak: z.ZodNumber;
|
|
4462
|
+
channels: z.ZodOptional<z.ZodInt>;
|
|
4463
|
+
sample_rate: z.ZodOptional<z.ZodInt>;
|
|
4449
4464
|
}, z.core.$strict>;
|
|
4450
4465
|
readonly kind: "unary";
|
|
4451
4466
|
readonly since: "1.6";
|
|
@@ -4454,6 +4469,7 @@ declare const OPS: {
|
|
|
4454
4469
|
readonly "audio.play": {
|
|
4455
4470
|
readonly params: z.ZodObject<{
|
|
4456
4471
|
path: z.ZodString;
|
|
4472
|
+
device_id: z.ZodOptional<z.ZodString>;
|
|
4457
4473
|
}, z.core.$strict>;
|
|
4458
4474
|
readonly result: z.ZodObject<{
|
|
4459
4475
|
path: z.ZodString;
|
|
@@ -14053,6 +14069,7 @@ declare const NAMED_SCHEMAS: {
|
|
|
14053
14069
|
}, z.core.$strict>;
|
|
14054
14070
|
readonly WindowListParams: z.ZodObject<{
|
|
14055
14071
|
title: z.ZodOptional<z.ZodString>;
|
|
14072
|
+
app: z.ZodOptional<z.ZodString>;
|
|
14056
14073
|
limit: z.ZodDefault<z.ZodInt>;
|
|
14057
14074
|
}, z.core.$strict>;
|
|
14058
14075
|
readonly WindowListResult: z.ZodObject<{
|
|
@@ -14105,10 +14122,25 @@ declare const NAMED_SCHEMAS: {
|
|
|
14105
14122
|
}, z.core.$strict>;
|
|
14106
14123
|
readonly WindowMinimizeParams: z.ZodObject<{
|
|
14107
14124
|
id: z.ZodInt;
|
|
14125
|
+
mode: z.ZodOptional<z.ZodEnum<{
|
|
14126
|
+
minimize: "minimize";
|
|
14127
|
+
maximize: "maximize";
|
|
14128
|
+
restore: "restore";
|
|
14129
|
+
}>>;
|
|
14108
14130
|
}, z.core.$strict>;
|
|
14109
14131
|
readonly WindowMinimizeResult: z.ZodObject<{
|
|
14110
14132
|
id: z.ZodInt;
|
|
14133
|
+
mode: z.ZodOptional<z.ZodEnum<{
|
|
14134
|
+
minimize: "minimize";
|
|
14135
|
+
maximize: "maximize";
|
|
14136
|
+
restore: "restore";
|
|
14137
|
+
}>>;
|
|
14111
14138
|
}, z.core.$strict>;
|
|
14139
|
+
readonly WindowState: z.ZodEnum<{
|
|
14140
|
+
minimize: "minimize";
|
|
14141
|
+
maximize: "maximize";
|
|
14142
|
+
restore: "restore";
|
|
14143
|
+
}>;
|
|
14112
14144
|
readonly InputKey: z.ZodEnum<{
|
|
14113
14145
|
0: "0";
|
|
14114
14146
|
1: "1";
|
|
@@ -14743,15 +14775,20 @@ declare const NAMED_SCHEMAS: {
|
|
|
14743
14775
|
seconds: z.ZodNumber;
|
|
14744
14776
|
device_id: z.ZodOptional<z.ZodString>;
|
|
14745
14777
|
path: z.ZodOptional<z.ZodString>;
|
|
14778
|
+
channels: z.ZodOptional<z.ZodInt>;
|
|
14779
|
+
sample_rate: z.ZodOptional<z.ZodInt>;
|
|
14746
14780
|
}, z.core.$strict>;
|
|
14747
14781
|
readonly AudioRecordResult: z.ZodObject<{
|
|
14748
14782
|
path: z.ZodString;
|
|
14749
14783
|
seconds: z.ZodNumber;
|
|
14750
14784
|
bytes: z.ZodInt;
|
|
14751
14785
|
peak: z.ZodNumber;
|
|
14786
|
+
channels: z.ZodOptional<z.ZodInt>;
|
|
14787
|
+
sample_rate: z.ZodOptional<z.ZodInt>;
|
|
14752
14788
|
}, z.core.$strict>;
|
|
14753
14789
|
readonly AudioPlayParams: z.ZodObject<{
|
|
14754
14790
|
path: z.ZodString;
|
|
14791
|
+
device_id: z.ZodOptional<z.ZodString>;
|
|
14755
14792
|
}, z.core.$strict>;
|
|
14756
14793
|
readonly AudioPlayResult: z.ZodObject<{
|
|
14757
14794
|
path: z.ZodString;
|
|
@@ -3831,6 +3831,7 @@ declare const OPS: {
|
|
|
3831
3831
|
readonly "window.list": {
|
|
3832
3832
|
readonly params: z.ZodObject<{
|
|
3833
3833
|
title: z.ZodOptional<z.ZodString>;
|
|
3834
|
+
app: z.ZodOptional<z.ZodString>;
|
|
3834
3835
|
limit: z.ZodDefault<z.ZodInt>;
|
|
3835
3836
|
}, z.core.$strict>;
|
|
3836
3837
|
readonly result: z.ZodObject<{
|
|
@@ -3898,9 +3899,19 @@ declare const OPS: {
|
|
|
3898
3899
|
readonly "window.minimize": {
|
|
3899
3900
|
readonly params: z.ZodObject<{
|
|
3900
3901
|
id: z.ZodInt;
|
|
3902
|
+
mode: z.ZodOptional<z.ZodEnum<{
|
|
3903
|
+
minimize: "minimize";
|
|
3904
|
+
maximize: "maximize";
|
|
3905
|
+
restore: "restore";
|
|
3906
|
+
}>>;
|
|
3901
3907
|
}, z.core.$strict>;
|
|
3902
3908
|
readonly result: z.ZodObject<{
|
|
3903
3909
|
id: z.ZodInt;
|
|
3910
|
+
mode: z.ZodOptional<z.ZodEnum<{
|
|
3911
|
+
minimize: "minimize";
|
|
3912
|
+
maximize: "maximize";
|
|
3913
|
+
restore: "restore";
|
|
3914
|
+
}>>;
|
|
3904
3915
|
}, z.core.$strict>;
|
|
3905
3916
|
readonly kind: "unary";
|
|
3906
3917
|
readonly since: "1.4";
|
|
@@ -4440,12 +4451,16 @@ declare const OPS: {
|
|
|
4440
4451
|
seconds: z.ZodNumber;
|
|
4441
4452
|
device_id: z.ZodOptional<z.ZodString>;
|
|
4442
4453
|
path: z.ZodOptional<z.ZodString>;
|
|
4454
|
+
channels: z.ZodOptional<z.ZodInt>;
|
|
4455
|
+
sample_rate: z.ZodOptional<z.ZodInt>;
|
|
4443
4456
|
}, z.core.$strict>;
|
|
4444
4457
|
readonly result: z.ZodObject<{
|
|
4445
4458
|
path: z.ZodString;
|
|
4446
4459
|
seconds: z.ZodNumber;
|
|
4447
4460
|
bytes: z.ZodInt;
|
|
4448
4461
|
peak: z.ZodNumber;
|
|
4462
|
+
channels: z.ZodOptional<z.ZodInt>;
|
|
4463
|
+
sample_rate: z.ZodOptional<z.ZodInt>;
|
|
4449
4464
|
}, z.core.$strict>;
|
|
4450
4465
|
readonly kind: "unary";
|
|
4451
4466
|
readonly since: "1.6";
|
|
@@ -4454,6 +4469,7 @@ declare const OPS: {
|
|
|
4454
4469
|
readonly "audio.play": {
|
|
4455
4470
|
readonly params: z.ZodObject<{
|
|
4456
4471
|
path: z.ZodString;
|
|
4472
|
+
device_id: z.ZodOptional<z.ZodString>;
|
|
4457
4473
|
}, z.core.$strict>;
|
|
4458
4474
|
readonly result: z.ZodObject<{
|
|
4459
4475
|
path: z.ZodString;
|
|
@@ -14053,6 +14069,7 @@ declare const NAMED_SCHEMAS: {
|
|
|
14053
14069
|
}, z.core.$strict>;
|
|
14054
14070
|
readonly WindowListParams: z.ZodObject<{
|
|
14055
14071
|
title: z.ZodOptional<z.ZodString>;
|
|
14072
|
+
app: z.ZodOptional<z.ZodString>;
|
|
14056
14073
|
limit: z.ZodDefault<z.ZodInt>;
|
|
14057
14074
|
}, z.core.$strict>;
|
|
14058
14075
|
readonly WindowListResult: z.ZodObject<{
|
|
@@ -14105,10 +14122,25 @@ declare const NAMED_SCHEMAS: {
|
|
|
14105
14122
|
}, z.core.$strict>;
|
|
14106
14123
|
readonly WindowMinimizeParams: z.ZodObject<{
|
|
14107
14124
|
id: z.ZodInt;
|
|
14125
|
+
mode: z.ZodOptional<z.ZodEnum<{
|
|
14126
|
+
minimize: "minimize";
|
|
14127
|
+
maximize: "maximize";
|
|
14128
|
+
restore: "restore";
|
|
14129
|
+
}>>;
|
|
14108
14130
|
}, z.core.$strict>;
|
|
14109
14131
|
readonly WindowMinimizeResult: z.ZodObject<{
|
|
14110
14132
|
id: z.ZodInt;
|
|
14133
|
+
mode: z.ZodOptional<z.ZodEnum<{
|
|
14134
|
+
minimize: "minimize";
|
|
14135
|
+
maximize: "maximize";
|
|
14136
|
+
restore: "restore";
|
|
14137
|
+
}>>;
|
|
14111
14138
|
}, z.core.$strict>;
|
|
14139
|
+
readonly WindowState: z.ZodEnum<{
|
|
14140
|
+
minimize: "minimize";
|
|
14141
|
+
maximize: "maximize";
|
|
14142
|
+
restore: "restore";
|
|
14143
|
+
}>;
|
|
14112
14144
|
readonly InputKey: z.ZodEnum<{
|
|
14113
14145
|
0: "0";
|
|
14114
14146
|
1: "1";
|
|
@@ -14743,15 +14775,20 @@ declare const NAMED_SCHEMAS: {
|
|
|
14743
14775
|
seconds: z.ZodNumber;
|
|
14744
14776
|
device_id: z.ZodOptional<z.ZodString>;
|
|
14745
14777
|
path: z.ZodOptional<z.ZodString>;
|
|
14778
|
+
channels: z.ZodOptional<z.ZodInt>;
|
|
14779
|
+
sample_rate: z.ZodOptional<z.ZodInt>;
|
|
14746
14780
|
}, z.core.$strict>;
|
|
14747
14781
|
readonly AudioRecordResult: z.ZodObject<{
|
|
14748
14782
|
path: z.ZodString;
|
|
14749
14783
|
seconds: z.ZodNumber;
|
|
14750
14784
|
bytes: z.ZodInt;
|
|
14751
14785
|
peak: z.ZodNumber;
|
|
14786
|
+
channels: z.ZodOptional<z.ZodInt>;
|
|
14787
|
+
sample_rate: z.ZodOptional<z.ZodInt>;
|
|
14752
14788
|
}, z.core.$strict>;
|
|
14753
14789
|
readonly AudioPlayParams: z.ZodObject<{
|
|
14754
14790
|
path: z.ZodString;
|
|
14791
|
+
device_id: z.ZodOptional<z.ZodString>;
|
|
14755
14792
|
}, z.core.$strict>;
|
|
14756
14793
|
readonly AudioPlayResult: z.ZodObject<{
|
|
14757
14794
|
path: z.ZodString;
|
package/dist/react.d.cts
CHANGED
|
@@ -3267,6 +3267,7 @@ declare const OPS: {
|
|
|
3267
3267
|
readonly "window.list": {
|
|
3268
3268
|
readonly params: z.ZodObject<{
|
|
3269
3269
|
title: z.ZodOptional<z.ZodString>;
|
|
3270
|
+
app: z.ZodOptional<z.ZodString>;
|
|
3270
3271
|
limit: z.ZodDefault<z.ZodInt>;
|
|
3271
3272
|
}, z.core.$strict>;
|
|
3272
3273
|
readonly result: z.ZodObject<{
|
|
@@ -3334,9 +3335,19 @@ declare const OPS: {
|
|
|
3334
3335
|
readonly "window.minimize": {
|
|
3335
3336
|
readonly params: z.ZodObject<{
|
|
3336
3337
|
id: z.ZodInt;
|
|
3338
|
+
mode: z.ZodOptional<z.ZodEnum<{
|
|
3339
|
+
minimize: "minimize";
|
|
3340
|
+
maximize: "maximize";
|
|
3341
|
+
restore: "restore";
|
|
3342
|
+
}>>;
|
|
3337
3343
|
}, z.core.$strict>;
|
|
3338
3344
|
readonly result: z.ZodObject<{
|
|
3339
3345
|
id: z.ZodInt;
|
|
3346
|
+
mode: z.ZodOptional<z.ZodEnum<{
|
|
3347
|
+
minimize: "minimize";
|
|
3348
|
+
maximize: "maximize";
|
|
3349
|
+
restore: "restore";
|
|
3350
|
+
}>>;
|
|
3340
3351
|
}, z.core.$strict>;
|
|
3341
3352
|
readonly kind: "unary";
|
|
3342
3353
|
readonly since: "1.4";
|
|
@@ -3876,12 +3887,16 @@ declare const OPS: {
|
|
|
3876
3887
|
seconds: z.ZodNumber;
|
|
3877
3888
|
device_id: z.ZodOptional<z.ZodString>;
|
|
3878
3889
|
path: z.ZodOptional<z.ZodString>;
|
|
3890
|
+
channels: z.ZodOptional<z.ZodInt>;
|
|
3891
|
+
sample_rate: z.ZodOptional<z.ZodInt>;
|
|
3879
3892
|
}, z.core.$strict>;
|
|
3880
3893
|
readonly result: z.ZodObject<{
|
|
3881
3894
|
path: z.ZodString;
|
|
3882
3895
|
seconds: z.ZodNumber;
|
|
3883
3896
|
bytes: z.ZodInt;
|
|
3884
3897
|
peak: z.ZodNumber;
|
|
3898
|
+
channels: z.ZodOptional<z.ZodInt>;
|
|
3899
|
+
sample_rate: z.ZodOptional<z.ZodInt>;
|
|
3885
3900
|
}, z.core.$strict>;
|
|
3886
3901
|
readonly kind: "unary";
|
|
3887
3902
|
readonly since: "1.6";
|
|
@@ -3890,6 +3905,7 @@ declare const OPS: {
|
|
|
3890
3905
|
readonly "audio.play": {
|
|
3891
3906
|
readonly params: z.ZodObject<{
|
|
3892
3907
|
path: z.ZodString;
|
|
3908
|
+
device_id: z.ZodOptional<z.ZodString>;
|
|
3893
3909
|
}, z.core.$strict>;
|
|
3894
3910
|
readonly result: z.ZodObject<{
|
|
3895
3911
|
path: z.ZodString;
|
package/dist/react.d.ts
CHANGED
|
@@ -3267,6 +3267,7 @@ declare const OPS: {
|
|
|
3267
3267
|
readonly "window.list": {
|
|
3268
3268
|
readonly params: z.ZodObject<{
|
|
3269
3269
|
title: z.ZodOptional<z.ZodString>;
|
|
3270
|
+
app: z.ZodOptional<z.ZodString>;
|
|
3270
3271
|
limit: z.ZodDefault<z.ZodInt>;
|
|
3271
3272
|
}, z.core.$strict>;
|
|
3272
3273
|
readonly result: z.ZodObject<{
|
|
@@ -3334,9 +3335,19 @@ declare const OPS: {
|
|
|
3334
3335
|
readonly "window.minimize": {
|
|
3335
3336
|
readonly params: z.ZodObject<{
|
|
3336
3337
|
id: z.ZodInt;
|
|
3338
|
+
mode: z.ZodOptional<z.ZodEnum<{
|
|
3339
|
+
minimize: "minimize";
|
|
3340
|
+
maximize: "maximize";
|
|
3341
|
+
restore: "restore";
|
|
3342
|
+
}>>;
|
|
3337
3343
|
}, z.core.$strict>;
|
|
3338
3344
|
readonly result: z.ZodObject<{
|
|
3339
3345
|
id: z.ZodInt;
|
|
3346
|
+
mode: z.ZodOptional<z.ZodEnum<{
|
|
3347
|
+
minimize: "minimize";
|
|
3348
|
+
maximize: "maximize";
|
|
3349
|
+
restore: "restore";
|
|
3350
|
+
}>>;
|
|
3340
3351
|
}, z.core.$strict>;
|
|
3341
3352
|
readonly kind: "unary";
|
|
3342
3353
|
readonly since: "1.4";
|
|
@@ -3876,12 +3887,16 @@ declare const OPS: {
|
|
|
3876
3887
|
seconds: z.ZodNumber;
|
|
3877
3888
|
device_id: z.ZodOptional<z.ZodString>;
|
|
3878
3889
|
path: z.ZodOptional<z.ZodString>;
|
|
3890
|
+
channels: z.ZodOptional<z.ZodInt>;
|
|
3891
|
+
sample_rate: z.ZodOptional<z.ZodInt>;
|
|
3879
3892
|
}, z.core.$strict>;
|
|
3880
3893
|
readonly result: z.ZodObject<{
|
|
3881
3894
|
path: z.ZodString;
|
|
3882
3895
|
seconds: z.ZodNumber;
|
|
3883
3896
|
bytes: z.ZodInt;
|
|
3884
3897
|
peak: z.ZodNumber;
|
|
3898
|
+
channels: z.ZodOptional<z.ZodInt>;
|
|
3899
|
+
sample_rate: z.ZodOptional<z.ZodInt>;
|
|
3885
3900
|
}, z.core.$strict>;
|
|
3886
3901
|
readonly kind: "unary";
|
|
3887
3902
|
readonly since: "1.6";
|
|
@@ -3890,6 +3905,7 @@ declare const OPS: {
|
|
|
3890
3905
|
readonly "audio.play": {
|
|
3891
3906
|
readonly params: z.ZodObject<{
|
|
3892
3907
|
path: z.ZodString;
|
|
3908
|
+
device_id: z.ZodOptional<z.ZodString>;
|
|
3893
3909
|
}, z.core.$strict>;
|
|
3894
3910
|
readonly result: z.ZodObject<{
|
|
3895
3911
|
path: z.ZodString;
|