meshcode 2.11.58__tar.gz → 2.11.59__tar.gz
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.
- {meshcode-2.11.58 → meshcode-2.11.59}/PKG-INFO +1 -1
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/__init__.py +1 -1
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/hostd.py +80 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode.egg-info/PKG-INFO +1 -1
- {meshcode-2.11.58 → meshcode-2.11.59}/pyproject.toml +1 -1
- {meshcode-2.11.58 → meshcode-2.11.59}/README.md +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/__main__.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/_stop_hook_template.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/atomic_push.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/claude_update.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/cli.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/compat.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/daemon.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/date_parse.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/doctor.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/error_hints.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/exceptions.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/invites.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/launcher.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/preferences.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/protocol_handler.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/quickstart.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/rpc_allowlist.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/run_agent.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/scripts/check_secrets.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/scripts/race_rate_harness.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/secrets.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/self_update.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/supervisor.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode/upload.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/comms_v4.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/tests/test_core.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/comms_v4.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/tests/test_core.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/comms_v4.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/tests/test_core.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode.egg-info/SOURCES.txt +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode.egg-info/dependency_links.txt +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode.egg-info/entry_points.txt +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode.egg-info/requires.txt +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/meshcode.egg-info/top_level.txt +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/setup.cfg +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_auto_update_hardening.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_autonomous_closegap_1.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_autonomous_closegap_2.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_autonomous_closegap_3.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_autonomous_prompt_inject 2.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_autonomous_prompt_inject.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_boot_bug_regression.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_color_truecolor.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_core.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_date_parse.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_doctor.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_epistemic_v1_python_sdk.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_epistemic_v1_stop_conditions.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_exceptions.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_file_upload.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_init_device_code.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_install_guard.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_lease_sigterm_release.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_marketplace_ratings.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_rpc_grants.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_run_agent_dry_run.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_run_agent_no_server_import.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_self_update_user_site.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_sentinel.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_setup_path.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_sleep_signals.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_stay_on_loop_hook.py +0 -0
- {meshcode-2.11.58 → meshcode-2.11.59}/tests/test_wait_open_tasks_contradiction.py +0 -0
|
@@ -193,6 +193,80 @@ def _do_respawns(api_key: str, host_id: str) -> int:
|
|
|
193
193
|
return n
|
|
194
194
|
|
|
195
195
|
|
|
196
|
+
# ------------------------------------------------------------------
|
|
197
|
+
# launchd trigger-start (macOS) — extends supervisor.py pattern.
|
|
198
|
+
# The hostd daemon is NOT autostart-at-login: RunAtLoad=false. It is
|
|
199
|
+
# kicked off on demand (button -> meshcode:// -> `launchctl kickstart`)
|
|
200
|
+
# and KeepAlive keeps it alive while it runs. One job per host.
|
|
201
|
+
# ------------------------------------------------------------------
|
|
202
|
+
|
|
203
|
+
_HOSTD_PLIST_LABEL = "io.meshcode.hostd"
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
def _hostd_plist_path():
|
|
207
|
+
return Path.home() / "Library" / "LaunchAgents" / f"{_HOSTD_PLIST_LABEL}.plist"
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
def _hostd_plist_xml() -> str:
|
|
211
|
+
import shutil
|
|
212
|
+
mc = shutil.which("meshcode") or f"{sys.executable} -m meshcode"
|
|
213
|
+
args = (mc.split() + ["hostd", "run"]) if " -m " in mc else [mc, "hostd", "run"]
|
|
214
|
+
args_xml = "\n".join(f" <string>{a}</string>" for a in args)
|
|
215
|
+
logdir = STATE_DIR / "logs"
|
|
216
|
+
logdir.mkdir(parents=True, exist_ok=True)
|
|
217
|
+
return f"""<?xml version="1.0" encoding="UTF-8"?>
|
|
218
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
219
|
+
<plist version="1.0">
|
|
220
|
+
<dict>
|
|
221
|
+
<key>Label</key><string>{_HOSTD_PLIST_LABEL}</string>
|
|
222
|
+
<key>ProgramArguments</key>
|
|
223
|
+
<array>
|
|
224
|
+
{args_xml}
|
|
225
|
+
</array>
|
|
226
|
+
<key>RunAtLoad</key><false/>
|
|
227
|
+
<key>KeepAlive</key><true/>
|
|
228
|
+
<key>ThrottleInterval</key><integer>10</integer>
|
|
229
|
+
<key>StandardOutPath</key><string>{logdir / "hostd.stdout.log"}</string>
|
|
230
|
+
<key>StandardErrorPath</key><string>{logdir / "hostd.stderr.log"}</string>
|
|
231
|
+
<key>EnvironmentVariables</key>
|
|
232
|
+
<dict>
|
|
233
|
+
<key>PATH</key><string>/usr/local/bin:/usr/bin:/bin:{os.path.dirname(sys.executable)}</string>
|
|
234
|
+
<key>MESHCODE_NO_AUTO_UPDATE</key><string>1</string>
|
|
235
|
+
</dict>
|
|
236
|
+
</dict>
|
|
237
|
+
</plist>
|
|
238
|
+
"""
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
def _hostd_install() -> int:
|
|
242
|
+
import platform
|
|
243
|
+
if platform.system() != "Darwin":
|
|
244
|
+
print("[hostd] launchd install is macOS only (Linux: use systemd --user; or run `meshcode hostd run` under your own supervisor).", file=sys.stderr)
|
|
245
|
+
return 2
|
|
246
|
+
plist = _hostd_plist_path()
|
|
247
|
+
plist.parent.mkdir(parents=True, exist_ok=True)
|
|
248
|
+
plist.write_text(_hostd_plist_xml(), encoding="utf-8")
|
|
249
|
+
subprocess.run(["launchctl", "unload", str(plist)], capture_output=True, text=True)
|
|
250
|
+
r = subprocess.run(["launchctl", "load", str(plist)], capture_output=True, text=True)
|
|
251
|
+
if r.returncode != 0:
|
|
252
|
+
print(f"[hostd] launchctl load failed: {r.stderr.strip()}", file=sys.stderr)
|
|
253
|
+
return 1
|
|
254
|
+
print(f"[hostd] installed (RunAtLoad=false, trigger-start). plist: {plist}")
|
|
255
|
+
print(f"[hostd] start now: launchctl kickstart gui/$(id -u)/{_HOSTD_PLIST_LABEL}")
|
|
256
|
+
return 0
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
def _hostd_uninstall() -> int:
|
|
260
|
+
plist = _hostd_plist_path()
|
|
261
|
+
if not plist.exists():
|
|
262
|
+
print("[hostd] not installed")
|
|
263
|
+
return 0
|
|
264
|
+
subprocess.run(["launchctl", "unload", str(plist)], capture_output=True, text=True)
|
|
265
|
+
plist.unlink(missing_ok=True)
|
|
266
|
+
print("[hostd] uninstalled")
|
|
267
|
+
return 0
|
|
268
|
+
|
|
269
|
+
|
|
196
270
|
def cmd_hostd(args: list) -> int:
|
|
197
271
|
"""Entry point for `meshcode hostd ...`."""
|
|
198
272
|
if not args or args[0] in ("-h", "--help"):
|
|
@@ -211,6 +285,12 @@ def cmd_hostd(args: list) -> int:
|
|
|
211
285
|
print(json.dumps({"host_id": host_id, "needing_respawn": res}, indent=2))
|
|
212
286
|
return 0
|
|
213
287
|
|
|
288
|
+
if sub == "install":
|
|
289
|
+
return _hostd_install()
|
|
290
|
+
|
|
291
|
+
if sub == "uninstall":
|
|
292
|
+
return _hostd_uninstall()
|
|
293
|
+
|
|
214
294
|
if sub == "run":
|
|
215
295
|
if not api_key:
|
|
216
296
|
_log("FATAL: no api key — set MESHCODE_API_KEY")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/tests/test_cross_agent_messaging.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/tests/test_realtime_event_freshness.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/tests/test_security_regressions.py
RENAMED
|
File without changes
|
|
File without changes
|
{meshcode-2.11.58 → meshcode-2.11.59}/meshcode-backend-wt/tests/test_status_enum_coverage.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py
RENAMED
|
File without changes
|
{meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py
RENAMED
|
File without changes
|
{meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py
RENAMED
|
File without changes
|
{meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.58 → meshcode-2.11.59}/meshcode-noun-wt/tests/test_realtime_event_freshness.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.58 → meshcode-2.11.59}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|