meshcode 2.11.78__tar.gz → 2.11.79__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.78 → meshcode-2.11.79}/PKG-INFO +1 -1
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/__init__.py +1 -1
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/hostd.py +72 -16
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode.egg-info/PKG-INFO +1 -1
- {meshcode-2.11.78 → meshcode-2.11.79}/pyproject.toml +1 -1
- {meshcode-2.11.78 → meshcode-2.11.79}/README.md +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/__main__.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/_stop_hook_template.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/atomic_push.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/claude_update.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/cli.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/compat.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/daemon.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/date_parse.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/doctor.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/error_hints.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/exceptions.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/invites.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/launcher.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/preferences.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/protocol_handler.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/quickstart.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/rpc_allowlist.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/run_agent.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/scripts/check_secrets.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/scripts/race_rate_harness.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/secrets.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/self_update.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/supervisor.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/up.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/upload.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/comms_v4.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/tests/test_core.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/comms_v4.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/tests/test_core.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/comms_v4.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/tests/test_core.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode.egg-info/SOURCES.txt +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode.egg-info/dependency_links.txt +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode.egg-info/entry_points.txt +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode.egg-info/requires.txt +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/meshcode.egg-info/top_level.txt +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/setup.cfg +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_auto_update_hardening.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_autonomous_closegap_1.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_autonomous_closegap_2.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_autonomous_closegap_3.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_autonomous_prompt_inject.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_boot_bug_regression.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_color_truecolor.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_core.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_date_parse.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_doctor.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_epistemic_v1_python_sdk.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_epistemic_v1_stop_conditions.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_exceptions.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_file_upload.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_init_device_code.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_install_guard.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_lease_sigterm_release.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_marketplace_ratings.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_rpc_grants.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_run_agent_dry_run.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_run_agent_no_server_import.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_self_update_user_site.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_sentinel.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_setup_path.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_sleep_signals.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_stay_on_loop_hook.py +0 -0
- {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_wait_open_tasks_contradiction.py +0 -0
|
@@ -457,10 +457,21 @@ def _hostd_plist_xml() -> str:
|
|
|
457
457
|
_HOSTD_TASK_NAME = "MeshCode hostd"
|
|
458
458
|
|
|
459
459
|
|
|
460
|
+
def _hostd_start_now_windows(launch_cmd) -> None:
|
|
461
|
+
"""Start hostd detached NOW (CREATE_NO_WINDOW | DETACHED_PROCESS) so the current session has a live
|
|
462
|
+
host immediately, independent of whichever persistence tier installed."""
|
|
463
|
+
try:
|
|
464
|
+
subprocess.Popen(["cmd.exe", "/c", str(launch_cmd)],
|
|
465
|
+
creationflags=0x08000000 | 0x00000008,
|
|
466
|
+
stdin=subprocess.DEVNULL, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
|
|
467
|
+
except Exception as e:
|
|
468
|
+
_log(f"hostd start-now (windows) failed: {e}")
|
|
469
|
+
|
|
470
|
+
|
|
460
471
|
def _hostd_install_windows() -> int:
|
|
461
|
-
"""Windows
|
|
462
|
-
|
|
463
|
-
|
|
472
|
+
"""Windows keep-alive — NON-ADMIN safe (task 843f282c). Persistence is best-effort across 3 tiers
|
|
473
|
+
(Register-ScheduledTask w/ watchdog -> schtasks ONLOGON CLI -> HKCU\\Run registry); hostd is ALWAYS
|
|
474
|
+
started now so the session works even if all persistence tiers fail (non-admin)."""
|
|
464
475
|
mc = shutil.which("meshcode") or "meshcode"
|
|
465
476
|
STATE_DIR.mkdir(parents=True, exist_ok=True)
|
|
466
477
|
(STATE_DIR / "logs").mkdir(parents=True, exist_ok=True)
|
|
@@ -473,23 +484,59 @@ def _hostd_install_windows() -> int:
|
|
|
473
484
|
f'"{mc}" hostd run\r\n',
|
|
474
485
|
encoding="utf-8",
|
|
475
486
|
)
|
|
476
|
-
# Register-ScheduledTask (PowerShell)
|
|
487
|
+
# Register-ScheduledTask (PowerShell) — ROBUST KEEP-ALIVE (task 843f282c CRITICAL: hostd died ~15:04
|
|
488
|
+
# and Task Scheduler did NOT revive it = silent dead daemon = stuck launches). Two triggers: at-logon
|
|
489
|
+
# AND a PERIODIC every-5min watchdog (re-starts if down; MultipleInstances=IgnoreNew so it never
|
|
490
|
+
# double-spawns a live one) + high RestartCount on crash + unlimited runtime + hidden.
|
|
477
491
|
ps = (
|
|
478
492
|
'$a = New-ScheduledTaskAction -Execute "cmd.exe" -Argument \'/c "' + str(launch_cmd) + '"\';'
|
|
479
|
-
'$
|
|
493
|
+
'$t1 = New-ScheduledTaskTrigger -AtLogOn;'
|
|
494
|
+
'$t2 = New-ScheduledTaskTrigger -Once -At (Get-Date) '
|
|
495
|
+
'-RepetitionInterval (New-TimeSpan -Minutes 5) -RepetitionDuration (New-TimeSpan -Days 3650);'
|
|
480
496
|
'$s = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries'
|
|
481
|
-
' -ExecutionTimeLimit ([TimeSpan]::Zero) -RestartCount
|
|
482
|
-
' -RestartInterval (New-TimeSpan -Minutes 1) -Hidden;'
|
|
497
|
+
' -ExecutionTimeLimit ([TimeSpan]::Zero) -RestartCount 999'
|
|
498
|
+
' -RestartInterval (New-TimeSpan -Minutes 1) -MultipleInstances IgnoreNew -Hidden;'
|
|
483
499
|
'$p = New-ScheduledTaskPrincipal -UserId $env:USERNAME -LogonType Interactive -RunLevel Limited;'
|
|
484
|
-
"Register-ScheduledTask -TaskName '" + _HOSTD_TASK_NAME + "' -Action $a -Trigger $
|
|
500
|
+
"Register-ScheduledTask -TaskName '" + _HOSTD_TASK_NAME + "' -Action $a -Trigger $t1,$t2"
|
|
485
501
|
' -Settings $s -Principal $p -Force | Out-Null'
|
|
486
502
|
)
|
|
503
|
+
# NON-ADMIN tiered persistence (task 843f282c): 99% of users are NOT admin, and Register-ScheduledTask
|
|
504
|
+
# fails Access-Denied (0x80070005) for them. Fall back: schtasks CLI (user task) -> HKCU\Run registry.
|
|
505
|
+
# hostd is ALWAYS started now regardless, so the current session has a live host immediately.
|
|
506
|
+
method = None
|
|
507
|
+
task_made = False
|
|
487
508
|
r = subprocess.run(["powershell", "-NoProfile", "-Command", ps], capture_output=True, text=True)
|
|
488
|
-
if r.returncode
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
509
|
+
if r.returncode == 0:
|
|
510
|
+
task_made = True
|
|
511
|
+
method = "Task Scheduler (at-logon + 5min watchdog + restart)"
|
|
512
|
+
else:
|
|
513
|
+
_log(f"Register-ScheduledTask failed ({(r.stderr or '').strip()[:120]}); trying non-admin fallbacks")
|
|
514
|
+
r2 = subprocess.run(["schtasks", "/Create", "/TN", _HOSTD_TASK_NAME,
|
|
515
|
+
"/TR", f'cmd /c "{launch_cmd}"', "/SC", "ONLOGON", "/F"],
|
|
516
|
+
capture_output=True, text=True)
|
|
517
|
+
if r2.returncode == 0:
|
|
518
|
+
task_made = True
|
|
519
|
+
method = "schtasks ONLOGON (CLI, non-admin; no watchdog)"
|
|
520
|
+
else:
|
|
521
|
+
_log(f"schtasks /Create failed ({((r2.stderr or '')+(r2.stdout or '')).strip()[:120]}); trying HKCU Run")
|
|
522
|
+
r3 = subprocess.run(["reg", "add",
|
|
523
|
+
r"HKCU\Software\Microsoft\Windows\CurrentVersion\Run",
|
|
524
|
+
"/v", "MeshCodeHostd", "/t", "REG_SZ", "/d", f'cmd /c "{launch_cmd}"', "/f"],
|
|
525
|
+
capture_output=True, text=True)
|
|
526
|
+
if r3.returncode == 0:
|
|
527
|
+
method = "HKCU\\Run registry (login autostart, no admin; no watchdog)"
|
|
528
|
+
# ensure hostd is RUNNING now (task tiers: start via the task w/ IgnoreNew; else detached Popen).
|
|
529
|
+
started = False
|
|
530
|
+
if task_made:
|
|
531
|
+
rr = subprocess.run(["schtasks", "/Run", "/TN", _HOSTD_TASK_NAME], capture_output=True, text=True)
|
|
532
|
+
started = (rr.returncode == 0)
|
|
533
|
+
if not started:
|
|
534
|
+
_hostd_start_now_windows(launch_cmd)
|
|
535
|
+
if method:
|
|
536
|
+
print(f"[hostd] keep-alive installed via {method}; hostd running now. launcher: {launch_cmd}")
|
|
537
|
+
return 0
|
|
538
|
+
print(f"[hostd] WARN: no persistence method available (non-admin) — hostd started for THIS session "
|
|
539
|
+
f"ONLY (re-run after reboot). launcher: {launch_cmd}", file=sys.stderr)
|
|
493
540
|
return 0
|
|
494
541
|
|
|
495
542
|
|
|
@@ -604,10 +651,13 @@ def _hostd_bootstrap(verbose: bool = False) -> bool:
|
|
|
604
651
|
elif sysname == "Windows":
|
|
605
652
|
q = subprocess.run(["schtasks", "/Query", "/TN", _HOSTD_TASK_NAME],
|
|
606
653
|
capture_output=True, text=True)
|
|
607
|
-
if q.returncode
|
|
654
|
+
if q.returncode == 0:
|
|
655
|
+
# task exists -> just ensure running (IgnoreNew => harmless if already up; no double-spawn)
|
|
656
|
+
subprocess.run(["schtasks", "/Run", "/TN", _HOSTD_TASK_NAME],
|
|
657
|
+
capture_output=True, text=True)
|
|
658
|
+
else:
|
|
659
|
+
# no task (incl non-admin registry-only / first run) -> install best tier + start now
|
|
608
660
|
_hostd_install_windows()
|
|
609
|
-
subprocess.run(["schtasks", "/Run", "/TN", _HOSTD_TASK_NAME],
|
|
610
|
-
capture_output=True, text=True) # harmless if already running
|
|
611
661
|
else: # Linux + others
|
|
612
662
|
if shutil.which("systemctl"):
|
|
613
663
|
act = subprocess.run(["systemctl", "--user", "is-active", _HOSTD_SYSTEMD_UNIT],
|
|
@@ -717,6 +767,12 @@ def cmd_hostd(args: list) -> int:
|
|
|
717
767
|
_log(f"hostd starting — host_id={host_id} interval={POLL_INTERVAL_SEC}s stale={STALE_SECONDS}s")
|
|
718
768
|
while True:
|
|
719
769
|
try:
|
|
770
|
+
# task 843f282c: heartbeat so the cloud knows this daemon is ALIVE — launch-request
|
|
771
|
+
# detects host_offline (dead hostd) and toasts instead of spinning forever (Ian's bug).
|
|
772
|
+
try:
|
|
773
|
+
_rpc("mc_host_heartbeat", {"p_api_key": api_key, "p_host_id": host_id})
|
|
774
|
+
except Exception:
|
|
775
|
+
pass
|
|
720
776
|
relaunched = _do_respawns(api_key, host_id)
|
|
721
777
|
recycled = _do_recycles(api_key, host_id)
|
|
722
778
|
ver_recycled = _do_version_recycles(api_key, host_id)
|
|
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
|
|
File without changes
|
{meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.78 → meshcode-2.11.79}/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.78 → meshcode-2.11.79}/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.78 → meshcode-2.11.79}/meshcode-backend-wt/tests/test_realtime_event_freshness.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/tests/test_security_regressions.py
RENAMED
|
File without changes
|
|
File without changes
|
{meshcode-2.11.78 → meshcode-2.11.79}/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.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py
RENAMED
|
File without changes
|
{meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py
RENAMED
|
File without changes
|
{meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py
RENAMED
|
File without changes
|
{meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.78 → meshcode-2.11.79}/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.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.78 → meshcode-2.11.79}/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.78 → meshcode-2.11.79}/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.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.78 → meshcode-2.11.79}/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.78 → meshcode-2.11.79}/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
|