meshcode 2.11.76__tar.gz → 2.11.78__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.76 → meshcode-2.11.78}/PKG-INFO +1 -1
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/__init__.py +1 -1
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/hostd.py +54 -2
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/self_update.py +5 -2
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode.egg-info/PKG-INFO +1 -1
- {meshcode-2.11.76 → meshcode-2.11.78}/pyproject.toml +1 -1
- {meshcode-2.11.76 → meshcode-2.11.78}/README.md +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/__main__.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/_stop_hook_template.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/atomic_push.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/claude_update.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/cli.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/compat.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/daemon.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/date_parse.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/doctor.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/error_hints.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/exceptions.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/invites.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/launcher.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/preferences.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/protocol_handler.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/quickstart.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/rpc_allowlist.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/run_agent.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/scripts/check_secrets.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/scripts/race_rate_harness.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/secrets.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/supervisor.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/up.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode/upload.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/comms_v4.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/tests/test_core.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/comms_v4.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/tests/test_core.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/comms_v4.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/tests/test_core.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode.egg-info/SOURCES.txt +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode.egg-info/dependency_links.txt +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode.egg-info/entry_points.txt +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode.egg-info/requires.txt +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/meshcode.egg-info/top_level.txt +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/setup.cfg +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_auto_update_hardening.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_autonomous_closegap_1.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_autonomous_closegap_2.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_autonomous_closegap_3.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_autonomous_prompt_inject.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_boot_bug_regression.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_color_truecolor.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_core.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_date_parse.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_doctor.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_epistemic_v1_python_sdk.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_epistemic_v1_stop_conditions.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_exceptions.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_file_upload.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_init_device_code.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_install_guard.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_lease_sigterm_release.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_marketplace_ratings.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_rpc_grants.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_run_agent_dry_run.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_run_agent_no_server_import.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_self_update_user_site.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_sentinel.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_setup_path.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_sleep_signals.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_stay_on_loop_hook.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.78}/tests/test_wait_open_tasks_contradiction.py +0 -0
|
@@ -626,6 +626,57 @@ def _hostd_bootstrap(verbose: bool = False) -> bool:
|
|
|
626
626
|
return False
|
|
627
627
|
|
|
628
628
|
|
|
629
|
+
def _do_version_recycles(api_key: str, host_id: str) -> int:
|
|
630
|
+
"""Recycle managed agents running an OLDER meshcode than what's installed on disk so they pick up
|
|
631
|
+
the auto-updated version (task 14782bb4 D). GRACIOUS (guardrail #5): idle-only (NEVER a BUSY agent /
|
|
632
|
+
mid-task), rate-limited (<=1 version-recycle per agent / 30min), recycle-not-kill (clean handoff via
|
|
633
|
+
mc_request_recycle -> agent exits at its boundary -> _do_respawns relaunches on the new version).
|
|
634
|
+
Recorded via mc_record_recycle (NEVER counts against the mig406 crash respawn cap). Owner-scoped."""
|
|
635
|
+
cfg = _rpc("mc_host_config_get", {"p_api_key": api_key, "p_host_id": host_id})
|
|
636
|
+
if not cfg or not cfg.get("ok"):
|
|
637
|
+
return 0
|
|
638
|
+
try:
|
|
639
|
+
from meshcode import self_update as _su
|
|
640
|
+
disk = _su._current_version()
|
|
641
|
+
except Exception:
|
|
642
|
+
return 0
|
|
643
|
+
if not disk:
|
|
644
|
+
return 0
|
|
645
|
+
st = _load_state()
|
|
646
|
+
now = time.time()
|
|
647
|
+
n = 0
|
|
648
|
+
for a in cfg.get("agents", []):
|
|
649
|
+
if a.get("desired_state") != "running":
|
|
650
|
+
continue
|
|
651
|
+
cv = a.get("cli_version")
|
|
652
|
+
if not cv:
|
|
653
|
+
continue
|
|
654
|
+
try:
|
|
655
|
+
if not _su._is_newer(disk, cv):
|
|
656
|
+
continue # agent already on the on-disk version (or newer) — nothing to do
|
|
657
|
+
except Exception:
|
|
658
|
+
continue
|
|
659
|
+
if (a.get("status") or "") in BUSY_STATUSES:
|
|
660
|
+
continue # safe-point ONLY — never recycle a working agent mid-task
|
|
661
|
+
proj, agent = a.get("project_name"), a.get("name")
|
|
662
|
+
if not proj or not agent:
|
|
663
|
+
continue
|
|
664
|
+
key = f"verrec/{a.get('project_id')}/{agent}"
|
|
665
|
+
if now - float(st.get(key, 0) or 0) < 1800:
|
|
666
|
+
continue # rate-limit: <=1 version-recycle per agent / 30min (no recycle-storm)
|
|
667
|
+
req = _rpc("mc_request_recycle",
|
|
668
|
+
{"p_api_key": api_key, "p_project_id": a.get("project_id"), "p_agent_name": agent})
|
|
669
|
+
if req and req.get("ok") and req.get("requested"):
|
|
670
|
+
_rpc("mc_record_recycle",
|
|
671
|
+
{"p_api_key": api_key, "p_project_id": a.get("project_id"), "p_agent_name": agent})
|
|
672
|
+
st[key] = now
|
|
673
|
+
n += 1
|
|
674
|
+
_log(f"VERSION-RECYCLE {proj}/{agent}: running {cv} < disk {disk} — recycle at idle to update")
|
|
675
|
+
if n:
|
|
676
|
+
_save_state(st)
|
|
677
|
+
return n
|
|
678
|
+
|
|
679
|
+
|
|
629
680
|
def cmd_hostd(args: list) -> int:
|
|
630
681
|
"""Entry point for `meshcode hostd ...`."""
|
|
631
682
|
if not args or args[0] in ("-h", "--help"):
|
|
@@ -668,8 +719,9 @@ def cmd_hostd(args: list) -> int:
|
|
|
668
719
|
try:
|
|
669
720
|
relaunched = _do_respawns(api_key, host_id)
|
|
670
721
|
recycled = _do_recycles(api_key, host_id)
|
|
671
|
-
|
|
672
|
-
|
|
722
|
+
ver_recycled = _do_version_recycles(api_key, host_id)
|
|
723
|
+
if relaunched or recycled or ver_recycled:
|
|
724
|
+
_log(f"sweep done — {relaunched} respawned, {recycled} recycled, {ver_recycled} version-recycled")
|
|
673
725
|
except Exception as e:
|
|
674
726
|
_log(f"WARN: sweep error: {e}")
|
|
675
727
|
time.sleep(POLL_INTERVAL_SEC)
|
|
@@ -280,7 +280,10 @@ try:
|
|
|
280
280
|
if mode == "pipx":
|
|
281
281
|
cmd = ["pipx", "upgrade", "meshcode"]
|
|
282
282
|
else:
|
|
283
|
-
|
|
283
|
+
# --no-cache-dir (task 14782bb4 / urgent): never let pip serve a STALE cached wheel — always
|
|
284
|
+
# fetch the true latest from PyPI (auto-update was grabbing an old cached version otherwise).
|
|
285
|
+
cmd = [sys.executable, "-m", "pip", "install", "-U", "--no-cache-dir",
|
|
286
|
+
"--disable-pip-version-check", "--quiet"]
|
|
284
287
|
# Keep upgrade in the same site as the current install so the
|
|
285
288
|
# user-PATH shim (~/Library/Python/X.Y/bin) doesn't get orphaned.
|
|
286
289
|
if site_flag == "user":
|
|
@@ -485,7 +488,7 @@ def check_and_maybe_update_blocking(verbose: bool = True, timeout_sec: int = 60)
|
|
|
485
488
|
cmd = ["pipx", "upgrade", PKG_NAME]
|
|
486
489
|
else:
|
|
487
490
|
cmd = [
|
|
488
|
-
sys.executable, "-m", "pip", "install", "-U",
|
|
491
|
+
sys.executable, "-m", "pip", "install", "-U", "--no-cache-dir",
|
|
489
492
|
"--disable-pip-version-check", "--quiet",
|
|
490
493
|
]
|
|
491
494
|
# Keep upgrade in the same site as the current install so the
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.76 → meshcode-2.11.78}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.76 → meshcode-2.11.78}/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.76 → meshcode-2.11.78}/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.76 → meshcode-2.11.78}/meshcode-backend-wt/tests/test_realtime_event_freshness.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.76 → meshcode-2.11.78}/meshcode-backend-wt/tests/test_security_regressions.py
RENAMED
|
File without changes
|
|
File without changes
|
{meshcode-2.11.76 → meshcode-2.11.78}/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.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py
RENAMED
|
File without changes
|
{meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py
RENAMED
|
File without changes
|
{meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py
RENAMED
|
File without changes
|
{meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.76 → meshcode-2.11.78}/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.76 → meshcode-2.11.78}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.76 → meshcode-2.11.78}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.76 → meshcode-2.11.78}/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.76 → meshcode-2.11.78}/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.76 → meshcode-2.11.78}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.76 → meshcode-2.11.78}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.76 → meshcode-2.11.78}/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.76 → meshcode-2.11.78}/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
|