meshcode 2.11.81__tar.gz → 2.11.82__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.81 → meshcode-2.11.82}/PKG-INFO +1 -1
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/__init__.py +1 -1
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/hostd.py +38 -19
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode.egg-info/PKG-INFO +1 -1
- {meshcode-2.11.81 → meshcode-2.11.82}/pyproject.toml +1 -1
- {meshcode-2.11.81 → meshcode-2.11.82}/README.md +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/__main__.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/_stop_hook_template.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/atomic_push.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/claude_update.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/cli.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/compat.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/daemon.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/date_parse.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/doctor.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/error_hints.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/exceptions.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/invites.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/launcher.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/preferences.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/protocol_handler.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/quickstart.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/rpc_allowlist.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/run_agent.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/scripts/check_secrets.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/scripts/race_rate_harness.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/secrets.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/self_update.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/supervisor.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/up.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode/upload.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/comms_v4.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/tests/test_core.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/comms_v4.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/tests/test_core.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/comms_v4.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/tests/test_core.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode.egg-info/SOURCES.txt +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode.egg-info/dependency_links.txt +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode.egg-info/entry_points.txt +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode.egg-info/requires.txt +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/meshcode.egg-info/top_level.txt +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/setup.cfg +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_auto_update_hardening.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_autonomous_closegap_1.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_autonomous_closegap_2.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_autonomous_closegap_3.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_autonomous_prompt_inject.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_boot_bug_regression.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_color_truecolor.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_core.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_date_parse.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_doctor.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_epistemic_v1_python_sdk.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_epistemic_v1_stop_conditions.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_exceptions.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_file_upload.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_init_device_code.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_install_guard.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_lease_sigterm_release.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_marketplace_ratings.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_rpc_grants.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_run_agent_dry_run.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_run_agent_no_server_import.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_self_update_user_site.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_sentinel.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_setup_path.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_sleep_signals.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_stay_on_loop_hook.py +0 -0
- {meshcode-2.11.81 → meshcode-2.11.82}/tests/test_wait_open_tasks_contradiction.py +0 -0
|
@@ -502,7 +502,7 @@ def _hostd_install_windows() -> int:
|
|
|
502
502
|
'$a = New-ScheduledTaskAction -Execute "cmd.exe" -Argument \'/c "' + str(launch_cmd) + '"\';'
|
|
503
503
|
'$t1 = New-ScheduledTaskTrigger -AtLogOn;'
|
|
504
504
|
'$t2 = New-ScheduledTaskTrigger -Once -At (Get-Date) '
|
|
505
|
-
'-RepetitionInterval (New-TimeSpan -Minutes
|
|
505
|
+
'-RepetitionInterval (New-TimeSpan -Minutes 1) -RepetitionDuration (New-TimeSpan -Days 3650);'
|
|
506
506
|
'$s = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries'
|
|
507
507
|
' -ExecutionTimeLimit ([TimeSpan]::Zero) -RestartCount 999'
|
|
508
508
|
' -RestartInterval (New-TimeSpan -Minutes 1) -MultipleInstances IgnoreNew -Hidden;'
|
|
@@ -791,32 +791,51 @@ def cmd_hostd(args: list) -> int:
|
|
|
791
791
|
if not api_key:
|
|
792
792
|
_log("FATAL: no api key — run `meshcode login` (key is read from the keychain)")
|
|
793
793
|
return 1
|
|
794
|
-
#
|
|
795
|
-
#
|
|
796
|
-
#
|
|
797
|
-
#
|
|
794
|
+
# P1 hostd_CRASH_LOOP: the detached Windows daemon has NO console, so crashes (incl hard
|
|
795
|
+
# faults / uncaught exceptions) went to INVISIBLE stderr — hostd.log showed nothing. Capture
|
|
796
|
+
# stderr + faulthandler tracebacks to a file + install an excepthook so the NEXT crash is
|
|
797
|
+
# diagnosable, and the daemon never dies silently.
|
|
798
|
+
try:
|
|
799
|
+
import faulthandler, traceback as _tbmod
|
|
800
|
+
(STATE_DIR / "logs").mkdir(parents=True, exist_ok=True)
|
|
801
|
+
_errf = open(STATE_DIR / "logs" / "hostd.stderr.log", "a", buffering=1, encoding="utf-8")
|
|
802
|
+
sys.stderr = _errf
|
|
803
|
+
faulthandler.enable(file=_errf, all_threads=True)
|
|
804
|
+
sys.excepthook = lambda t, v, tb: _log("UNCAUGHT: " + "".join(_tbmod.format_exception(t, v, tb)))
|
|
805
|
+
except Exception:
|
|
806
|
+
pass
|
|
807
|
+
# Register this host in mc_host_config so the dashboard can list it as a launch target.
|
|
798
808
|
_reg = _rpc("mc_host_config_set", {"p_api_key": api_key, "p_host_id": host_id})
|
|
799
809
|
if _reg and _reg.get("ok"):
|
|
800
810
|
_log(f"registered host {host_id} in mc_host_config")
|
|
801
811
|
else:
|
|
802
812
|
_log(f"WARN: host registration failed (dashboard may not list this host): {_reg}")
|
|
803
813
|
_log(f"hostd starting — host_id={host_id} interval={POLL_INTERVAL_SEC}s stale={STALE_SECONDS}s")
|
|
814
|
+
# OUTER resilience (P1): a code exception in the poll loop must NEVER kill the daemon.
|
|
804
815
|
while True:
|
|
805
816
|
try:
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
817
|
+
while True:
|
|
818
|
+
try:
|
|
819
|
+
# heartbeat so the cloud knows this daemon is ALIVE (host_offline detection).
|
|
820
|
+
try:
|
|
821
|
+
_rpc("mc_host_heartbeat", {"p_api_key": api_key, "p_host_id": host_id})
|
|
822
|
+
except Exception:
|
|
823
|
+
pass
|
|
824
|
+
relaunched = _do_respawns(api_key, host_id)
|
|
825
|
+
recycled = _do_recycles(api_key, host_id)
|
|
826
|
+
ver_recycled = _do_version_recycles(api_key, host_id)
|
|
827
|
+
if relaunched or recycled or ver_recycled:
|
|
828
|
+
_log(f"sweep done — {relaunched} respawned, {recycled} recycled, {ver_recycled} version-recycled")
|
|
829
|
+
except Exception as e:
|
|
830
|
+
import traceback as _tb
|
|
831
|
+
_log(f"WARN: sweep error: {e}\n{_tb.format_exc()}")
|
|
832
|
+
time.sleep(POLL_INTERVAL_SEC)
|
|
833
|
+
except (KeyboardInterrupt, SystemExit):
|
|
834
|
+
raise # honor a real shutdown signal
|
|
835
|
+
except BaseException as e:
|
|
836
|
+
import traceback as _tb
|
|
837
|
+
_log(f"FATAL: poll loop crashed (restarting loop in 5s): {e}\n{_tb.format_exc()}")
|
|
838
|
+
time.sleep(5)
|
|
820
839
|
|
|
821
840
|
print(f"[hostd] unknown subcommand: {sub}", file=sys.stderr)
|
|
822
841
|
return 1
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.81 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.81 → meshcode-2.11.82}/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.81 → meshcode-2.11.82}/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.81 → meshcode-2.11.82}/meshcode-backend-wt/tests/test_realtime_event_freshness.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.81 → meshcode-2.11.82}/meshcode-backend-wt/tests/test_security_regressions.py
RENAMED
|
File without changes
|
|
File without changes
|
{meshcode-2.11.81 → meshcode-2.11.82}/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.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py
RENAMED
|
File without changes
|
{meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py
RENAMED
|
File without changes
|
{meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py
RENAMED
|
File without changes
|
{meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.81 → meshcode-2.11.82}/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.81 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.81 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.81 → meshcode-2.11.82}/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.81 → meshcode-2.11.82}/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.81 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.81 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.81 → meshcode-2.11.82}/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.81 → meshcode-2.11.82}/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
|