meshcode 2.11.31__tar.gz → 2.11.33__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.31 → meshcode-2.11.33}/PKG-INFO +1 -1
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/__init__.py +1 -1
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/meshcode_mcp/backend.py +8 -2
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/meshcode_mcp/server.py +110 -5
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode.egg-info/PKG-INFO +1 -1
- {meshcode-2.11.31 → meshcode-2.11.33}/pyproject.toml +1 -1
- {meshcode-2.11.31 → meshcode-2.11.33}/README.md +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/__main__.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/_stop_hook_template.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/atomic_push.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/cli.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/compat.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/daemon.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/date_parse.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/doctor.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/error_hints.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/exceptions.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/invites.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/launcher.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/preferences.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/protocol_handler.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/quickstart.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/rpc_allowlist.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/run_agent.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/scripts/check_secrets.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/scripts/race_rate_harness.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/secrets.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/self_update.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/supervisor.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode/upload.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/comms_v4.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/tests/test_core.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/comms_v4.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/tests/test_core.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/comms_v4.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/tests/test_core.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode.egg-info/SOURCES.txt +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode.egg-info/dependency_links.txt +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode.egg-info/entry_points.txt +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode.egg-info/requires.txt +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/meshcode.egg-info/top_level.txt +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/setup.cfg +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/tests/test_auto_update_hardening.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/tests/test_boot_bug_regression.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/tests/test_color_truecolor.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/tests/test_core.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/tests/test_date_parse.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/tests/test_doctor.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/tests/test_epistemic_v1_python_sdk.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/tests/test_epistemic_v1_stop_conditions.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/tests/test_exceptions.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/tests/test_init_device_code.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/tests/test_install_guard.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/tests/test_lease_sigterm_release.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/tests/test_rpc_grants.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/tests/test_run_agent_dry_run.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/tests/test_run_agent_no_server_import.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/tests/test_self_update_user_site.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/tests/test_sentinel.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/tests/test_setup_path.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/tests/test_sleep_signals.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/tests/test_stay_on_loop_hook.py +0 -0
- {meshcode-2.11.31 → meshcode-2.11.33}/tests/test_wait_open_tasks_contradiction.py +0 -0
|
@@ -428,10 +428,16 @@ _recording_project_id = ""
|
|
|
428
428
|
_recording_agent_name = ""
|
|
429
429
|
_recording_session_id = ""
|
|
430
430
|
|
|
431
|
-
# RPCs that should NOT be recorded (internal/heartbeat/recording itself)
|
|
431
|
+
# RPCs that should NOT be recorded (internal/heartbeat/recording itself).
|
|
432
|
+
# M3a (SUPABASE-PROD-QUOTA-CRITICAL 2026-05-22): added mc_task_list +
|
|
433
|
+
# mc_count_pending + mc_mark_message_read — these were generating 87% of
|
|
434
|
+
# all session_events (~46k of 53k in last 6h) as null-tool tool_call rows
|
|
435
|
+
# from the wait-loop polling. Pure infrastructure noise — no analytic
|
|
436
|
+
# value. The session_events table was 1.2 GB driven mostly by these.
|
|
432
437
|
_SKIP_RECORDING = {"mc_heartbeat", "mc_record_event", "mc_agent_set_status_by_api_key",
|
|
433
438
|
"mc_acquire_agent_lease", "mc_release_agent_lease",
|
|
434
|
-
"mc_update_agent", "mc_get_agents"
|
|
439
|
+
"mc_update_agent", "mc_get_agents",
|
|
440
|
+
"mc_task_list", "mc_count_pending", "mc_mark_message_read"}
|
|
435
441
|
|
|
436
442
|
|
|
437
443
|
def _get_api_key() -> Optional[str]:
|
|
@@ -2835,10 +2835,36 @@ def meshcode_send(to: Union[str, List[str]], message: Any, in_reply_to: Optional
|
|
|
2835
2835
|
result["encrypted"] = True
|
|
2836
2836
|
return result
|
|
2837
2837
|
|
|
2838
|
-
|
|
2839
|
-
|
|
2840
|
-
|
|
2841
|
-
|
|
2838
|
+
_result = be.send_message(_PROJECT_ID, AGENT_NAME, to, payload,
|
|
2839
|
+
msg_type=type or "msg",
|
|
2840
|
+
parent_msg_id=in_reply_to, sensitive=sensitive,
|
|
2841
|
+
api_key=_get_api_key(), encrypted=encrypted)
|
|
2842
|
+
|
|
2843
|
+
# C2 (BACKEND-AUDIT-TASK-FRICTION F4, 2026-05-22): detect payloads that
|
|
2844
|
+
# look like the agent is trying to "claim" a task via a status message
|
|
2845
|
+
# instead of calling meshcode_task_claim. The status_msg path does NOT
|
|
2846
|
+
# update mc_tasks.claimed_by → task sits open while the agent believes
|
|
2847
|
+
# it's working it. Soft hint, never refuse.
|
|
2848
|
+
try:
|
|
2849
|
+
if isinstance(_result, dict) and _result.get("sent"):
|
|
2850
|
+
_ptype = str(payload.get("type", "")).lower()
|
|
2851
|
+
_ptext = str(payload.get("text", "")).lower()
|
|
2852
|
+
_has_task_ref = any(k in payload for k in ("task", "task_id"))
|
|
2853
|
+
_looks_like_claim = (
|
|
2854
|
+
_ptype in {"claim", "claim_status", "status_claim"}
|
|
2855
|
+
or ("claim" in _ptext and _has_task_ref)
|
|
2856
|
+
or (_ptype.startswith("status") and "claim" in _ptext)
|
|
2857
|
+
)
|
|
2858
|
+
if _looks_like_claim:
|
|
2859
|
+
_result["hint"] = (
|
|
2860
|
+
"claim_via_status_msg_does_not_update_task_table — "
|
|
2861
|
+
"call meshcode_task_claim(<task_id>) for the actual "
|
|
2862
|
+
"claim. status_msg is fine as a peer notification "
|
|
2863
|
+
"but is not the system-of-record."
|
|
2864
|
+
)
|
|
2865
|
+
except Exception:
|
|
2866
|
+
pass
|
|
2867
|
+
return _result
|
|
2842
2868
|
|
|
2843
2869
|
|
|
2844
2870
|
@mcp.tool()
|
|
@@ -3236,6 +3262,14 @@ _AUTO_SLEEP_THRESHOLD = int(os.environ.get("MESHCODE_AUTO_SLEEP_SECONDS", "600")
|
|
|
3236
3262
|
_STAY_AWAKE = False # Set by meshcode_set_status("online") — prevents auto-sleep
|
|
3237
3263
|
_LAST_SEEN_TS: Optional[str] = None # auto-persisted for message dedup
|
|
3238
3264
|
|
|
3265
|
+
# M2 (SUPABASE-PROD-QUOTA-CRITICAL 2026-05-22): when an agent has been idle
|
|
3266
|
+
# longer than _M2_IDLE_THRESHOLD seconds, skip the per-tick mc_tasks poll on
|
|
3267
|
+
# (n-1)/n of timeouts — effective task-poll rate drops 1/N. Cuts mc_tasks
|
|
3268
|
+
# RPC volume which accounted for ~26.95M cumulative calls in the audit.
|
|
3269
|
+
_M2_IDLE_THRESHOLD = int(os.environ.get("MESHCODE_WAIT_IDLE_TASK_POLL_SKIP", "300")) # secs
|
|
3270
|
+
_M2_POLL_EVERY_N = int(os.environ.get("MESHCODE_WAIT_IDLE_POLL_EVERY_N", "3"))
|
|
3271
|
+
_M2_TICK_COUNTER = 0
|
|
3272
|
+
|
|
3239
3273
|
# Hydrate _LAST_SEEN_TS from mesh memory on boot so restarts skip old messages
|
|
3240
3274
|
try:
|
|
3241
3275
|
_ls_result = be.sb_rpc("mc_memory_get", {
|
|
@@ -3299,6 +3333,56 @@ def _get_pending_tasks_summary() -> Optional[List[Dict[str, str]]]:
|
|
|
3299
3333
|
return None
|
|
3300
3334
|
|
|
3301
3335
|
|
|
3336
|
+
def _check_task_dedupe(title: str, assignee: str) -> Optional[Dict[str, Any]]:
|
|
3337
|
+
"""Find an open/in_progress task with similar title + same assignee.
|
|
3338
|
+
|
|
3339
|
+
Samuel directive 2026-05-21T23:41Z (`commander_dedupe_before_task_from_status_msg`):
|
|
3340
|
+
commanders kept creating duplicate tasks when reacting to status msgs from
|
|
3341
|
+
agents that had already claimed/shipped the same work. The 5ac1d9fe /
|
|
3342
|
+
dd41054d MOBILE-FIRST-3/4 dupes sat OPEN since 2026-05-20 because nobody
|
|
3343
|
+
deduped before creating new ones. Server-side soft guard surfaces a
|
|
3344
|
+
`dedupe_warning` in task_create responses when a likely duplicate
|
|
3345
|
+
exists — non-blocking, so legitimate near-titles still create, but the
|
|
3346
|
+
commander sees the dupe candidate and can cancel + reuse instead.
|
|
3347
|
+
"""
|
|
3348
|
+
try:
|
|
3349
|
+
api_key = _get_api_key()
|
|
3350
|
+
if not api_key:
|
|
3351
|
+
return None
|
|
3352
|
+
result = be.task_list(api_key, _PROJECT_ID, AGENT_NAME, status_filter=None)
|
|
3353
|
+
if not isinstance(result, dict) or not result.get("ok"):
|
|
3354
|
+
return None
|
|
3355
|
+
tasks = result.get("tasks", [])
|
|
3356
|
+
target = (title or "").strip().lower()
|
|
3357
|
+
if not target:
|
|
3358
|
+
return None
|
|
3359
|
+
target_prefix = target[:40]
|
|
3360
|
+
for t in tasks:
|
|
3361
|
+
if t.get("status") not in ("open", "in_progress"):
|
|
3362
|
+
continue
|
|
3363
|
+
if t.get("assignee") != assignee:
|
|
3364
|
+
continue
|
|
3365
|
+
t_title = (t.get("title") or "").strip().lower()
|
|
3366
|
+
if not t_title:
|
|
3367
|
+
continue
|
|
3368
|
+
t_prefix = t_title[:40]
|
|
3369
|
+
match = None
|
|
3370
|
+
if t_prefix == target_prefix:
|
|
3371
|
+
match = "prefix-40"
|
|
3372
|
+
elif target in t_title or t_title in target:
|
|
3373
|
+
match = "substring"
|
|
3374
|
+
if match:
|
|
3375
|
+
return {
|
|
3376
|
+
"dupe_task_id": t.get("id"),
|
|
3377
|
+
"dupe_title": t.get("title"),
|
|
3378
|
+
"dupe_status": t.get("status"),
|
|
3379
|
+
"match_type": match,
|
|
3380
|
+
}
|
|
3381
|
+
except Exception:
|
|
3382
|
+
pass
|
|
3383
|
+
return None
|
|
3384
|
+
|
|
3385
|
+
|
|
3302
3386
|
def _attach_pending_tasks_to_resp(resp: Dict[str, Any]) -> Dict[str, Any]:
|
|
3303
3387
|
"""Surface this agent's open/in_progress assigned tasks on EVERY wait response.
|
|
3304
3388
|
|
|
@@ -3465,8 +3549,16 @@ async def meshcode_wait(timeout_seconds: int = 20, include_acks: bool = False) -
|
|
|
3465
3549
|
if result.get("timed_out"):
|
|
3466
3550
|
_CONSECUTIVE_IDLE_SECONDS += capped_timeout
|
|
3467
3551
|
|
|
3552
|
+
# M2 (2026-05-22): when idle >5min, poll mc_tasks every Nth
|
|
3553
|
+
# tick instead of every tick. Active agents (recent msg)
|
|
3554
|
+
# keep checking every tick.
|
|
3555
|
+
global _M2_TICK_COUNTER
|
|
3556
|
+
_check_tasks = True
|
|
3557
|
+
if _CONSECUTIVE_IDLE_SECONDS >= _M2_IDLE_THRESHOLD and _M2_POLL_EVERY_N > 1:
|
|
3558
|
+
_M2_TICK_COUNTER = (_M2_TICK_COUNTER + 1) % _M2_POLL_EVERY_N
|
|
3559
|
+
_check_tasks = (_M2_TICK_COUNTER == 0)
|
|
3468
3560
|
# Check if new tasks appeared while we waited
|
|
3469
|
-
pending_tasks = _get_pending_tasks_summary()
|
|
3561
|
+
pending_tasks = _get_pending_tasks_summary() if _check_tasks else None
|
|
3470
3562
|
if pending_tasks:
|
|
3471
3563
|
result["pending_tasks"] = pending_tasks
|
|
3472
3564
|
break # Return so agent can work tasks
|
|
@@ -4076,11 +4168,24 @@ def meshcode_task_create(title: str, description: str = "", assignee: Optional[s
|
|
|
4076
4168
|
except Exception as _de:
|
|
4077
4169
|
return {"error": f"due_parse_failed: {_de}"}
|
|
4078
4170
|
api_key = _get_api_key()
|
|
4171
|
+
# Soft dedupe guard (Samuel directive 2026-05-21): surface likely-duplicate
|
|
4172
|
+
# open/in_progress task with same assignee + similar title. Non-blocking —
|
|
4173
|
+
# caller still gets the new task_id, but sees `dedupe_warning` and can
|
|
4174
|
+
# cancel + reuse the existing task instead of accumulating dupes.
|
|
4175
|
+
dedupe_hit = _check_task_dedupe(title.strip(), assignee) if assignee != "auto" else None
|
|
4079
4176
|
result = be.task_create(api_key, _PROJECT_ID, AGENT_NAME, title.strip(),
|
|
4080
4177
|
description=description, assignee=assignee,
|
|
4081
4178
|
priority=priority, parent_task_id=parent_task_id,
|
|
4082
4179
|
due_at=parsed_due_at, due_label=parsed_due_label,
|
|
4083
4180
|
depends_on=depends_on or None)
|
|
4181
|
+
if isinstance(result, dict) and result.get("ok") and dedupe_hit:
|
|
4182
|
+
result["dedupe_warning"] = (
|
|
4183
|
+
f"Possible duplicate of task {dedupe_hit['dupe_task_id'][:8]} "
|
|
4184
|
+
f"('{dedupe_hit['dupe_title'][:60]}', status={dedupe_hit['dupe_status']}, "
|
|
4185
|
+
f"match={dedupe_hit['match_type']}). Consider canceling this new task "
|
|
4186
|
+
f"and reusing the existing one."
|
|
4187
|
+
)
|
|
4188
|
+
result["dedupe_candidate"] = dedupe_hit
|
|
4084
4189
|
# Auto-notify the resolved assignee so they wake from meshcode_wait.
|
|
4085
4190
|
# Read result["assignee"] (server may have resolved 'auto' to a real name).
|
|
4086
4191
|
if isinstance(result, dict) and result.get("ok"):
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.31 → meshcode-2.11.33}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.31 → meshcode-2.11.33}/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.31 → meshcode-2.11.33}/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.31 → meshcode-2.11.33}/meshcode-backend-wt/tests/test_realtime_event_freshness.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.31 → meshcode-2.11.33}/meshcode-backend-wt/tests/test_security_regressions.py
RENAMED
|
File without changes
|
|
File without changes
|
{meshcode-2.11.31 → meshcode-2.11.33}/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.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py
RENAMED
|
File without changes
|
{meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py
RENAMED
|
File without changes
|
{meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py
RENAMED
|
File without changes
|
{meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.31 → meshcode-2.11.33}/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.31 → meshcode-2.11.33}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.31 → meshcode-2.11.33}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.31 → meshcode-2.11.33}/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.31 → meshcode-2.11.33}/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.31 → meshcode-2.11.33}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.31 → meshcode-2.11.33}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.31 → meshcode-2.11.33}/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.31 → meshcode-2.11.33}/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
|