meshcode 2.11.56__tar.gz → 2.11.58__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.56 → meshcode-2.11.58}/PKG-INFO +1 -1
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/__init__.py +1 -1
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/comms_v4.py +8 -1
- meshcode-2.11.58/meshcode/hostd.py +229 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/self_update.py +11 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode.egg-info/PKG-INFO +1 -1
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode.egg-info/SOURCES.txt +1 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/pyproject.toml +1 -1
- {meshcode-2.11.56 → meshcode-2.11.58}/README.md +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/__main__.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/_stop_hook_template.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/atomic_push.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/claude_update.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/cli.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/compat.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/daemon.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/date_parse.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/doctor.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/error_hints.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/exceptions.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/invites.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/launcher.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/preferences.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/protocol_handler.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/quickstart.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/rpc_allowlist.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/run_agent.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/scripts/check_secrets.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/scripts/race_rate_harness.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/secrets.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/supervisor.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode/upload.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/comms_v4.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/tests/test_core.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/comms_v4.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/tests/test_core.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/comms_v4.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/tests/test_core.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode.egg-info/dependency_links.txt +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode.egg-info/entry_points.txt +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode.egg-info/requires.txt +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/meshcode.egg-info/top_level.txt +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/setup.cfg +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_auto_update_hardening.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_autonomous_closegap_1.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_autonomous_closegap_2.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_autonomous_closegap_3.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_autonomous_prompt_inject 2.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_autonomous_prompt_inject.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_boot_bug_regression.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_color_truecolor.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_core.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_date_parse.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_doctor.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_epistemic_v1_python_sdk.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_epistemic_v1_stop_conditions.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_exceptions.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_file_upload.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_init_device_code.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_install_guard.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_lease_sigterm_release.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_marketplace_ratings.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_rpc_grants.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_run_agent_dry_run.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_run_agent_no_server_import.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_self_update_user_site.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_sentinel.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_setup_path.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_sleep_signals.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_stay_on_loop_hook.py +0 -0
- {meshcode-2.11.56 → meshcode-2.11.58}/tests/test_wait_open_tasks_contradiction.py +0 -0
|
@@ -3808,6 +3808,13 @@ if __name__ == "__main__":
|
|
|
3808
3808
|
else:
|
|
3809
3809
|
print(f"Usage: meshcode supervisor [start|stop|status|--simple] <project> <agent>")
|
|
3810
3810
|
|
|
3811
|
+
elif cmd == "hostd":
|
|
3812
|
+
# meshcode hostd run|status — local respawn/recycle watchdog daemon
|
|
3813
|
+
# (auto-relaunch of stale/dead managed agents; mesh-core incident fix).
|
|
3814
|
+
import importlib
|
|
3815
|
+
_hostd = importlib.import_module("meshcode.hostd")
|
|
3816
|
+
sys.exit(_hostd.cmd_hostd(pos))
|
|
3817
|
+
|
|
3811
3818
|
else:
|
|
3812
3819
|
known_cmds = [
|
|
3813
3820
|
"register", "send", "broadcast", "read", "check", "watch", "inbox", "next",
|
|
@@ -3816,7 +3823,7 @@ if __name__ == "__main__":
|
|
|
3816
3823
|
"setup", "add-agent", "run", "go", "invite", "join", "invites", "members",
|
|
3817
3824
|
"revoke-invite", "revoke-member", "login", "prefs", "launcher",
|
|
3818
3825
|
"help", "init", "doctor", "compat", "upgrade", "profile", "validate-sessions", "wake-headless",
|
|
3819
|
-
"supervisor", "upload", "quickstart", "patch-hooks", "wake-all",
|
|
3826
|
+
"supervisor", "hostd", "upload", "quickstart", "patch-hooks", "wake-all",
|
|
3820
3827
|
]
|
|
3821
3828
|
# Simple fuzzy: prefix match + Levenshtein-like best match
|
|
3822
3829
|
suggestions = [c for c in known_cmds if c.startswith(cmd)]
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
"""meshcode hostd — host-side daemon: respawn + recycle managed agents.
|
|
2
|
+
|
|
3
|
+
Complements supervisor.py (launchd KeepAlive = process-exit restart only).
|
|
4
|
+
hostd polls the CLOUD for staleness (heartbeat) + recycle triggers that
|
|
5
|
+
launchd cannot see:
|
|
6
|
+
|
|
7
|
+
- RESPAWN: agent's heartbeat is stale (process/daemon-thread dead) and
|
|
8
|
+
desired_state='running' → relaunch. Loop-guard cap 3/10min → 'crashed'.
|
|
9
|
+
- RECYCLE: managed agent exceeds its recycle policy (context% or uptime)
|
|
10
|
+
→ relaunch at a task boundary (never mid-task). Recorded separately
|
|
11
|
+
from the crash cap.
|
|
12
|
+
|
|
13
|
+
Contract (mig366/367/368/369, DBA-cleared):
|
|
14
|
+
mc_register_host, mc_agents_needing_respawn, mc_record_respawn,
|
|
15
|
+
mc_record_recycle, mc_set_desired_state, mc_host_recycle_policy.
|
|
16
|
+
|
|
17
|
+
Source of truth is the cloud (mc_agents / mc_host_config), never local
|
|
18
|
+
folders. host_id lives in ~/.meshcode/host_id (generated once).
|
|
19
|
+
|
|
20
|
+
meshcode hostd run — run the daemon loop (foreground)
|
|
21
|
+
meshcode hostd status — show this host's managed agents
|
|
22
|
+
meshcode hostd install — install launchd trigger-start plist
|
|
23
|
+
meshcode hostd uninstall — remove it
|
|
24
|
+
|
|
25
|
+
Design invariants:
|
|
26
|
+
- NEVER respawn desired_state != 'running' (NULL=unmanaged, stopped=
|
|
27
|
+
intentional, crashed=gave-up). The cloud RPC enforces this; we trust it.
|
|
28
|
+
- Single retry / capped respawn — never an infinite relaunch loop.
|
|
29
|
+
- Recycle only at task boundary: we relaunch a recycle candidate only
|
|
30
|
+
when it is NOT actively working (status not in working/online-busy) OR
|
|
31
|
+
the agent has self-flagged 'recycling'. Mid-task agents are skipped.
|
|
32
|
+
"""
|
|
33
|
+
from __future__ import annotations
|
|
34
|
+
|
|
35
|
+
import json
|
|
36
|
+
import os
|
|
37
|
+
import subprocess
|
|
38
|
+
import sys
|
|
39
|
+
import time
|
|
40
|
+
import urllib.request
|
|
41
|
+
import uuid
|
|
42
|
+
from pathlib import Path
|
|
43
|
+
from typing import Optional
|
|
44
|
+
|
|
45
|
+
STATE_DIR = Path.home() / ".meshcode"
|
|
46
|
+
HOST_ID_PATH = STATE_DIR / "host_id"
|
|
47
|
+
LOG_PATH = STATE_DIR / "hostd.log"
|
|
48
|
+
|
|
49
|
+
POLL_INTERVAL_SEC = 45
|
|
50
|
+
STALE_SECONDS = 150 # heartbeat liveness cutoff (QA #3)
|
|
51
|
+
RESPAWN_TIMEOUT_SEC = 30
|
|
52
|
+
# statuses that mean "actively working" → never recycle mid-task
|
|
53
|
+
BUSY_STATUSES = {"working", "online", "busy"}
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def _log(msg: str) -> None:
|
|
57
|
+
line = f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] {msg}"
|
|
58
|
+
print(line, file=sys.stderr)
|
|
59
|
+
try:
|
|
60
|
+
STATE_DIR.mkdir(parents=True, exist_ok=True)
|
|
61
|
+
with open(LOG_PATH, "a", encoding="utf-8") as f:
|
|
62
|
+
f.write(line + "\n")
|
|
63
|
+
except Exception:
|
|
64
|
+
pass
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def get_host_id() -> str:
|
|
68
|
+
"""Read ~/.meshcode/host_id, generating a stable UUID on first use."""
|
|
69
|
+
try:
|
|
70
|
+
if HOST_ID_PATH.exists():
|
|
71
|
+
v = HOST_ID_PATH.read_text(encoding="utf-8").strip()
|
|
72
|
+
if v:
|
|
73
|
+
return v
|
|
74
|
+
except Exception:
|
|
75
|
+
pass
|
|
76
|
+
new_id = str(uuid.uuid4())
|
|
77
|
+
try:
|
|
78
|
+
STATE_DIR.mkdir(parents=True, exist_ok=True)
|
|
79
|
+
HOST_ID_PATH.write_text(new_id, encoding="utf-8")
|
|
80
|
+
except Exception:
|
|
81
|
+
pass
|
|
82
|
+
return new_id
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
# ------------------------------------------------------------------
|
|
86
|
+
# Cloud RPC (PostgREST) — self-contained urllib, no internal client dep
|
|
87
|
+
# ------------------------------------------------------------------
|
|
88
|
+
|
|
89
|
+
def _supabase_cfg() -> tuple:
|
|
90
|
+
url = os.environ.get("SUPABASE_URL", "").rstrip("/")
|
|
91
|
+
key = os.environ.get("SUPABASE_KEY") or os.environ.get("MESHCODE_SUPABASE_ANON_KEY") or ""
|
|
92
|
+
return url, key
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def _api_key() -> Optional[str]:
|
|
96
|
+
"""The meshcode agent/user api key, used as p_api_key in mc_ RPCs."""
|
|
97
|
+
k = os.environ.get("MESHCODE_API_KEY")
|
|
98
|
+
if k:
|
|
99
|
+
return k
|
|
100
|
+
try:
|
|
101
|
+
# same source meshcode run uses (per-profile state)
|
|
102
|
+
prof = STATE_DIR / "profiles.json"
|
|
103
|
+
if prof.exists():
|
|
104
|
+
data = json.loads(prof.read_text(encoding="utf-8"))
|
|
105
|
+
# best-effort: first profile with an api_key
|
|
106
|
+
for v in (data.values() if isinstance(data, dict) else []):
|
|
107
|
+
if isinstance(v, dict) and v.get("api_key"):
|
|
108
|
+
return v["api_key"]
|
|
109
|
+
except Exception:
|
|
110
|
+
pass
|
|
111
|
+
return None
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def _rpc(fn: str, payload: dict) -> Optional[dict]:
|
|
115
|
+
"""Call a PostgREST RPC. Returns parsed JSON or None on any failure."""
|
|
116
|
+
url, key = _supabase_cfg()
|
|
117
|
+
if not url or not key:
|
|
118
|
+
_log("WARN: SUPABASE_URL/KEY not set — cannot reach cloud")
|
|
119
|
+
return None
|
|
120
|
+
try:
|
|
121
|
+
req = urllib.request.Request(
|
|
122
|
+
f"{url}/rest/v1/rpc/{fn}",
|
|
123
|
+
data=json.dumps(payload).encode("utf-8"),
|
|
124
|
+
headers={
|
|
125
|
+
"apikey": key,
|
|
126
|
+
"Authorization": f"Bearer {key}",
|
|
127
|
+
"Content-Type": "application/json",
|
|
128
|
+
},
|
|
129
|
+
method="POST",
|
|
130
|
+
)
|
|
131
|
+
with urllib.request.urlopen(req, timeout=15) as resp:
|
|
132
|
+
return json.loads(resp.read().decode("utf-8"))
|
|
133
|
+
except Exception as e:
|
|
134
|
+
_log(f"WARN: rpc {fn} failed: {e}")
|
|
135
|
+
return None
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
# ------------------------------------------------------------------
|
|
139
|
+
# Respawn
|
|
140
|
+
# ------------------------------------------------------------------
|
|
141
|
+
|
|
142
|
+
def _meshcode_bin() -> str:
|
|
143
|
+
cand = Path(sys.argv[0]).resolve()
|
|
144
|
+
if cand.exists() and cand.name.startswith("meshcode"):
|
|
145
|
+
return str(cand)
|
|
146
|
+
return "meshcode"
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
def _spawn_agent(project: str, agent: str) -> bool:
|
|
150
|
+
"""Relaunch `meshcode run <project>/<agent>` detached + visible-friendly."""
|
|
151
|
+
target = f"{project}/{agent}"
|
|
152
|
+
env = dict(os.environ)
|
|
153
|
+
# env hygiene (item1 RC): a stale CLAUDECODE aborts `meshcode run` (exit2)
|
|
154
|
+
env.pop("CLAUDECODE", None)
|
|
155
|
+
env.pop("CLAUDE_CODE_SESSION", None)
|
|
156
|
+
env["MESHCODE_NO_AUTO_UPDATE"] = env.get("MESHCODE_NO_AUTO_UPDATE", "1")
|
|
157
|
+
try:
|
|
158
|
+
subprocess.Popen(
|
|
159
|
+
[_meshcode_bin(), "run", target],
|
|
160
|
+
env=env, start_new_session=True,
|
|
161
|
+
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL,
|
|
162
|
+
)
|
|
163
|
+
return True
|
|
164
|
+
except Exception as e:
|
|
165
|
+
_log(f"WARN: spawn {target} failed: {e}")
|
|
166
|
+
return False
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
def _do_respawns(api_key: str, host_id: str) -> int:
|
|
170
|
+
"""One respawn sweep. Returns number relaunched."""
|
|
171
|
+
res = _rpc("mc_agents_needing_respawn",
|
|
172
|
+
{"p_api_key": api_key, "p_host_id": host_id, "p_stale_seconds": STALE_SECONDS})
|
|
173
|
+
if not res or not res.get("ok"):
|
|
174
|
+
return 0
|
|
175
|
+
n = 0
|
|
176
|
+
for c in res.get("candidates", []):
|
|
177
|
+
proj, agent = c.get("project_name"), c.get("agent")
|
|
178
|
+
if not proj or not agent:
|
|
179
|
+
continue
|
|
180
|
+
if not c.get("respawn_allowed", True):
|
|
181
|
+
_log(f"SKIP respawn {proj}/{agent}: cap reached (count={c.get('respawn_count')})")
|
|
182
|
+
rec = _rpc("mc_record_respawn",
|
|
183
|
+
{"p_api_key": api_key, "p_project_id": c.get("project_id"), "p_agent_name": agent})
|
|
184
|
+
if rec and rec.get("give_up"):
|
|
185
|
+
_rpc("mc_set_desired_state", {"p_api_key": api_key, "p_state": "crashed"})
|
|
186
|
+
_log(f"ALERT {proj}/{agent}: marked crashed after respawn cap — operator attention")
|
|
187
|
+
continue
|
|
188
|
+
_log(f"RESPAWN {proj}/{agent} (stale {c.get('heartbeat_age_s')}s)")
|
|
189
|
+
if _spawn_agent(proj, agent):
|
|
190
|
+
_rpc("mc_record_respawn",
|
|
191
|
+
{"p_api_key": api_key, "p_project_id": c.get("project_id"), "p_agent_name": agent})
|
|
192
|
+
n += 1
|
|
193
|
+
return n
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
def cmd_hostd(args: list) -> int:
|
|
197
|
+
"""Entry point for `meshcode hostd ...`."""
|
|
198
|
+
if not args or args[0] in ("-h", "--help"):
|
|
199
|
+
print(__doc__)
|
|
200
|
+
return 0
|
|
201
|
+
sub = args[0]
|
|
202
|
+
host_id = get_host_id()
|
|
203
|
+
api_key = _api_key()
|
|
204
|
+
|
|
205
|
+
if sub == "status":
|
|
206
|
+
if not api_key:
|
|
207
|
+
print("[hostd] no api key configured", file=sys.stderr)
|
|
208
|
+
return 1
|
|
209
|
+
res = _rpc("mc_agents_needing_respawn",
|
|
210
|
+
{"p_api_key": api_key, "p_host_id": host_id, "p_stale_seconds": STALE_SECONDS})
|
|
211
|
+
print(json.dumps({"host_id": host_id, "needing_respawn": res}, indent=2))
|
|
212
|
+
return 0
|
|
213
|
+
|
|
214
|
+
if sub == "run":
|
|
215
|
+
if not api_key:
|
|
216
|
+
_log("FATAL: no api key — set MESHCODE_API_KEY")
|
|
217
|
+
return 1
|
|
218
|
+
_log(f"hostd starting — host_id={host_id} interval={POLL_INTERVAL_SEC}s stale={STALE_SECONDS}s")
|
|
219
|
+
while True:
|
|
220
|
+
try:
|
|
221
|
+
relaunched = _do_respawns(api_key, host_id)
|
|
222
|
+
if relaunched:
|
|
223
|
+
_log(f"sweep done — {relaunched} relaunched")
|
|
224
|
+
except Exception as e:
|
|
225
|
+
_log(f"WARN: sweep error: {e}")
|
|
226
|
+
time.sleep(POLL_INTERVAL_SEC)
|
|
227
|
+
|
|
228
|
+
print(f"[hostd] unknown subcommand: {sub}", file=sys.stderr)
|
|
229
|
+
return 1
|
|
@@ -441,6 +441,17 @@ def check_and_maybe_update_blocking(verbose: bool = True, timeout_sec: int = 60)
|
|
|
441
441
|
)
|
|
442
442
|
logf.flush()
|
|
443
443
|
proc = subprocess.run(cmd, stdout=logf, stderr=logf, timeout=timeout_sec)
|
|
444
|
+
# Protected-path fallback (RC 2026-05-30): a non-user-site install
|
|
445
|
+
# in a system/admin path fails pip with a permission error
|
|
446
|
+
# (exit != 0) even when auto_update is on — the update fires but
|
|
447
|
+
# never lands, so the agent stays on a stale SDK (mesh-core
|
|
448
|
+
# incident). Retry once forcing --user so the upgrade lands in the
|
|
449
|
+
# writable user site. Single retry only — never loop.
|
|
450
|
+
if proc.returncode != 0 and mode == "pip" and "--user" not in cmd:
|
|
451
|
+
logf.write(b"--- retry forcing --user --break-system-packages ---\n")
|
|
452
|
+
logf.flush()
|
|
453
|
+
retry_cmd = cmd[:-1] + ["--user", "--break-system-packages", PKG_NAME]
|
|
454
|
+
proc = subprocess.run(retry_cmd, stdout=logf, stderr=logf, timeout=timeout_sec)
|
|
444
455
|
if proc.returncode == 0:
|
|
445
456
|
if verbose:
|
|
446
457
|
print(f"[meshcode] meshcode upgraded to {latest}", file=sys.stderr)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.56 → meshcode-2.11.58}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.56 → meshcode-2.11.58}/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.56 → meshcode-2.11.58}/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.56 → meshcode-2.11.58}/meshcode-backend-wt/tests/test_realtime_event_freshness.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.56 → meshcode-2.11.58}/meshcode-backend-wt/tests/test_security_regressions.py
RENAMED
|
File without changes
|
|
File without changes
|
{meshcode-2.11.56 → meshcode-2.11.58}/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.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py
RENAMED
|
File without changes
|
{meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py
RENAMED
|
File without changes
|
{meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py
RENAMED
|
File without changes
|
{meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.56 → meshcode-2.11.58}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.56 → meshcode-2.11.58}/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
|