meshcode 2.11.17__tar.gz → 2.11.19__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.17 → meshcode-2.11.19}/PKG-INFO +7 -1
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/__init__.py +1 -1
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/meshcode_mcp/server.py +34 -5
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode.egg-info/PKG-INFO +7 -1
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode.egg-info/requires.txt +8 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/pyproject.toml +5 -1
- {meshcode-2.11.17 → meshcode-2.11.19}/README.md +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/__main__.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/_stop_hook_template.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/cli.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/compat.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/daemon.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/date_parse.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/doctor.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/error_hints.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/exceptions.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/invites.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/launcher.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/preferences.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/protocol_handler.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/quickstart.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/rpc_allowlist.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/run_agent.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/scripts/check_secrets.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/scripts/race_rate_harness.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/secrets.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/self_update.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/supervisor.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode/upload.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/comms_v4.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/tests/test_core.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/comms_v4.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/tests/test_core.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/comms_v4.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/tests/test_core.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode.egg-info/SOURCES.txt +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode.egg-info/dependency_links.txt +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode.egg-info/entry_points.txt +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/meshcode.egg-info/top_level.txt +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/setup.cfg +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/tests/test_auto_update_hardening.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/tests/test_boot_bug_regression.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/tests/test_color_truecolor.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/tests/test_core.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/tests/test_date_parse.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/tests/test_doctor.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/tests/test_epistemic_v1_python_sdk.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/tests/test_epistemic_v1_stop_conditions.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/tests/test_exceptions.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/tests/test_init_device_code.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/tests/test_install_guard.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/tests/test_lease_sigterm_release.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/tests/test_rpc_grants.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/tests/test_sentinel.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/tests/test_setup_path.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/tests/test_sleep_signals.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/tests/test_stay_on_loop_hook.py +0 -0
- {meshcode-2.11.17 → meshcode-2.11.19}/tests/test_wait_open_tasks_contradiction.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: meshcode
|
|
3
|
-
Version: 2.11.
|
|
3
|
+
Version: 2.11.19
|
|
4
4
|
Summary: Real-time communication between AI agents — Supabase-backed CLI
|
|
5
5
|
Author-email: MeshCode <hello@meshcode.io>
|
|
6
6
|
License: MIT
|
|
@@ -23,6 +23,12 @@ Requires-Dist: websockets>=12.0
|
|
|
23
23
|
Requires-Dist: realtime>=2.0.0
|
|
24
24
|
Requires-Dist: keyring>=24.0
|
|
25
25
|
Requires-Dist: cryptography>=41.0
|
|
26
|
+
Provides-Extra: test
|
|
27
|
+
Requires-Dist: pytest>=8; extra == "test"
|
|
28
|
+
Provides-Extra: dev
|
|
29
|
+
Requires-Dist: build>=1.0; extra == "dev"
|
|
30
|
+
Requires-Dist: twine>=4; extra == "dev"
|
|
31
|
+
Requires-Dist: pytest>=8; extra == "dev"
|
|
26
32
|
|
|
27
33
|
# MeshCode
|
|
28
34
|
|
|
@@ -2093,6 +2093,8 @@ def _get_parent_cpu() -> float:
|
|
|
2093
2093
|
|
|
2094
2094
|
|
|
2095
2095
|
_heartbeat_crash_count = 0
|
|
2096
|
+
_heartbeat_crash_count_max = 0 # all-time max for long-term telemetry
|
|
2097
|
+
_heartbeat_successive_ok = 0
|
|
2096
2098
|
|
|
2097
2099
|
def _heartbeat_thread_fn():
|
|
2098
2100
|
"""Heartbeat in a DAEMON THREAD — independent of asyncio event loop.
|
|
@@ -2104,18 +2106,34 @@ def _heartbeat_thread_fn():
|
|
|
2104
2106
|
Wrapped in an outer try/except so uncaught exceptions (including from
|
|
2105
2107
|
_heartbeat_stop.wait()) restart the loop instead of silently killing
|
|
2106
2108
|
the thread — which would leave the agent as a ghost on the dashboard.
|
|
2109
|
+
|
|
2110
|
+
AUDIT-C3: crash counter decays after 100 successive clean iterations
|
|
2111
|
+
(~25min on free plan). Persistent all-time-max kept in
|
|
2112
|
+
_heartbeat_crash_count_max for triage.
|
|
2107
2113
|
"""
|
|
2108
|
-
global _heartbeat_crash_count
|
|
2114
|
+
global _heartbeat_crash_count, _heartbeat_crash_count_max, _heartbeat_successive_ok
|
|
2109
2115
|
while not _heartbeat_stop.is_set():
|
|
2110
2116
|
try:
|
|
2111
2117
|
_heartbeat_loop_inner()
|
|
2118
|
+
_heartbeat_successive_ok += 1
|
|
2119
|
+
if _heartbeat_successive_ok >= 100 and _heartbeat_crash_count > 0:
|
|
2120
|
+
log.info(
|
|
2121
|
+
f"heartbeat crash counter reset "
|
|
2122
|
+
f"(was {_heartbeat_crash_count}x, "
|
|
2123
|
+
f"all-time max {_heartbeat_crash_count_max}x)"
|
|
2124
|
+
)
|
|
2125
|
+
_heartbeat_crash_count = 0
|
|
2126
|
+
_heartbeat_successive_ok = 0
|
|
2112
2127
|
except Exception as e:
|
|
2113
2128
|
_heartbeat_crash_count += 1
|
|
2129
|
+
if _heartbeat_crash_count > _heartbeat_crash_count_max:
|
|
2130
|
+
_heartbeat_crash_count_max = _heartbeat_crash_count
|
|
2131
|
+
_heartbeat_successive_ok = 0
|
|
2114
2132
|
log.error(
|
|
2115
|
-
f"heartbeat thread crashed ({_heartbeat_crash_count}x
|
|
2133
|
+
f"heartbeat thread crashed ({_heartbeat_crash_count}x, "
|
|
2134
|
+
f"all-time {_heartbeat_crash_count_max}x): {e} — "
|
|
2116
2135
|
f"restarting in 5s to prevent ghost agent"
|
|
2117
2136
|
)
|
|
2118
|
-
# Brief sleep before restart to avoid tight crash loop
|
|
2119
2137
|
_heartbeat_stop.wait(5)
|
|
2120
2138
|
|
|
2121
2139
|
|
|
@@ -3381,7 +3399,9 @@ async def meshcode_wait(timeout_seconds: int = 20, include_acks: bool = False) -
|
|
|
3381
3399
|
"got_message": True,
|
|
3382
3400
|
**split,
|
|
3383
3401
|
}
|
|
3384
|
-
#
|
|
3402
|
+
# MESH-IMPROVE-1: surface auto-mark-seen telemetry.
|
|
3403
|
+
resp["auto_marked"] = len(deduped)
|
|
3404
|
+
resp["types_seen"] = sorted({m.get("type", "msg") for m in deduped})
|
|
3385
3405
|
if split["done_signals"]:
|
|
3386
3406
|
resp["must_exit"] = True
|
|
3387
3407
|
resp["exit_reason"] = "sleep authorization received — set status=sleeping and end session"
|
|
@@ -3616,6 +3636,10 @@ async def _meshcode_wait_inner(actual_timeout: int, include_acks: bool) -> Dict[
|
|
|
3616
3636
|
"got_message": True,
|
|
3617
3637
|
**split,
|
|
3618
3638
|
}
|
|
3639
|
+
# MESH-IMPROVE-1: surface auto-mark-seen telemetry so callers can
|
|
3640
|
+
# audit what the SDK considered processed without re-reading.
|
|
3641
|
+
out["auto_marked"] = len(deduped)
|
|
3642
|
+
out["types_seen"] = sorted({m.get("type", "msg") for m in deduped})
|
|
3619
3643
|
done = _detect_global_done(deduped)
|
|
3620
3644
|
if done:
|
|
3621
3645
|
out["got_done"] = True
|
|
@@ -3699,7 +3723,12 @@ async def _meshcode_wait_inner(actual_timeout: int, include_acks: bool) -> Dict[
|
|
|
3699
3723
|
if not include_acks:
|
|
3700
3724
|
split["acks"] = []
|
|
3701
3725
|
if split["messages"] or split["done_signals"]:
|
|
3702
|
-
return {
|
|
3726
|
+
return {
|
|
3727
|
+
"got_message": True,
|
|
3728
|
+
**split,
|
|
3729
|
+
"auto_marked": len(deduped),
|
|
3730
|
+
"types_seen": sorted({m.get("type", "msg") for m in deduped}),
|
|
3731
|
+
}
|
|
3703
3732
|
except Exception as e:
|
|
3704
3733
|
log.debug(f"DB poll fallback error: {e}")
|
|
3705
3734
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: meshcode
|
|
3
|
-
Version: 2.11.
|
|
3
|
+
Version: 2.11.19
|
|
4
4
|
Summary: Real-time communication between AI agents — Supabase-backed CLI
|
|
5
5
|
Author-email: MeshCode <hello@meshcode.io>
|
|
6
6
|
License: MIT
|
|
@@ -23,6 +23,12 @@ Requires-Dist: websockets>=12.0
|
|
|
23
23
|
Requires-Dist: realtime>=2.0.0
|
|
24
24
|
Requires-Dist: keyring>=24.0
|
|
25
25
|
Requires-Dist: cryptography>=41.0
|
|
26
|
+
Provides-Extra: test
|
|
27
|
+
Requires-Dist: pytest>=8; extra == "test"
|
|
28
|
+
Provides-Extra: dev
|
|
29
|
+
Requires-Dist: build>=1.0; extra == "dev"
|
|
30
|
+
Requires-Dist: twine>=4; extra == "dev"
|
|
31
|
+
Requires-Dist: pytest>=8; extra == "dev"
|
|
26
32
|
|
|
27
33
|
# MeshCode
|
|
28
34
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "meshcode"
|
|
7
|
-
version = "2.11.
|
|
7
|
+
version = "2.11.19"
|
|
8
8
|
description = "Real-time communication between AI agents — Supabase-backed CLI"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = {text = "MIT"}
|
|
@@ -30,6 +30,10 @@ classifiers = [
|
|
|
30
30
|
"Operating System :: OS Independent",
|
|
31
31
|
]
|
|
32
32
|
|
|
33
|
+
[project.optional-dependencies]
|
|
34
|
+
test = ["pytest>=8"]
|
|
35
|
+
dev = ["build>=1.0", "twine>=4", "pytest>=8"]
|
|
36
|
+
|
|
33
37
|
[project.scripts]
|
|
34
38
|
meshcode = "meshcode.cli:main"
|
|
35
39
|
meshcode-mcp = "meshcode.meshcode_mcp.__main__:main"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.17 → meshcode-2.11.19}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.17 → meshcode-2.11.19}/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.17 → meshcode-2.11.19}/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.17 → meshcode-2.11.19}/meshcode-backend-wt/tests/test_realtime_event_freshness.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.17 → meshcode-2.11.19}/meshcode-backend-wt/tests/test_security_regressions.py
RENAMED
|
File without changes
|
|
File without changes
|
{meshcode-2.11.17 → meshcode-2.11.19}/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.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py
RENAMED
|
File without changes
|
{meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py
RENAMED
|
File without changes
|
{meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py
RENAMED
|
File without changes
|
{meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.17 → meshcode-2.11.19}/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.17 → meshcode-2.11.19}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.17 → meshcode-2.11.19}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.17 → meshcode-2.11.19}/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.17 → meshcode-2.11.19}/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.17 → meshcode-2.11.19}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.17 → meshcode-2.11.19}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.17 → meshcode-2.11.19}/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.17 → meshcode-2.11.19}/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
|