meshcode 2.11.76__tar.gz → 2.11.77__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.77}/PKG-INFO +1 -1
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/__init__.py +1 -1
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/hostd.py +54 -2
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode.egg-info/PKG-INFO +1 -1
- {meshcode-2.11.76 → meshcode-2.11.77}/pyproject.toml +1 -1
- {meshcode-2.11.76 → meshcode-2.11.77}/README.md +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/__main__.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/_stop_hook_template.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/atomic_push.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/claude_update.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/cli.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/compat.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/daemon.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/date_parse.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/doctor.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/error_hints.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/exceptions.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/invites.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/launcher.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/preferences.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/protocol_handler.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/quickstart.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/rpc_allowlist.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/run_agent.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/scripts/check_secrets.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/scripts/race_rate_harness.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/secrets.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/self_update.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/supervisor.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/up.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode/upload.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/comms_v4.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_core.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/comms_v4.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_core.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/comms_v4.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_core.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode.egg-info/SOURCES.txt +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode.egg-info/dependency_links.txt +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode.egg-info/entry_points.txt +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode.egg-info/requires.txt +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/meshcode.egg-info/top_level.txt +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/setup.cfg +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_auto_update_hardening.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_autonomous_closegap_1.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_autonomous_closegap_2.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_autonomous_closegap_3.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_autonomous_prompt_inject.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_boot_bug_regression.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_color_truecolor.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_core.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_date_parse.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_doctor.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_epistemic_v1_python_sdk.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_epistemic_v1_stop_conditions.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_exceptions.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_file_upload.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_init_device_code.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_install_guard.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_lease_sigterm_release.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_marketplace_ratings.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_rpc_grants.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_run_agent_dry_run.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_run_agent_no_server_import.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_self_update_user_site.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_sentinel.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_setup_path.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_sleep_signals.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/tests/test_stay_on_loop_hook.py +0 -0
- {meshcode-2.11.76 → meshcode-2.11.77}/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)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.77}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.76 → meshcode-2.11.77}/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.77}/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.77}/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.77}/meshcode-backend-wt/tests/test_security_regressions.py
RENAMED
|
File without changes
|
|
File without changes
|
{meshcode-2.11.76 → meshcode-2.11.77}/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.77}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py
RENAMED
|
File without changes
|
{meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py
RENAMED
|
File without changes
|
{meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py
RENAMED
|
File without changes
|
{meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.76 → meshcode-2.11.77}/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.77}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.76 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.76 → meshcode-2.11.77}/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.77}/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.77}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.76 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.76 → meshcode-2.11.77}/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.77}/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
|