meshcode 2.11.23__tar.gz → 2.11.25__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.23 → meshcode-2.11.25}/PKG-INFO +1 -1
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/__init__.py +1 -1
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/meshcode_mcp/server.py +129 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/rpc_allowlist.py +3 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode.egg-info/PKG-INFO +1 -1
- {meshcode-2.11.23 → meshcode-2.11.25}/pyproject.toml +1 -1
- {meshcode-2.11.23 → meshcode-2.11.25}/README.md +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/__main__.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/_stop_hook_template.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/atomic_push.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/cli.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/compat.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/daemon.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/date_parse.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/doctor.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/error_hints.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/exceptions.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/invites.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/launcher.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/preferences.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/protocol_handler.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/quickstart.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/run_agent.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/scripts/check_secrets.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/scripts/race_rate_harness.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/secrets.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/self_update.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/supervisor.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/upload.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/comms_v4.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/tests/test_core.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/comms_v4.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/tests/test_core.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/comms_v4.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/tests/test_core.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode.egg-info/SOURCES.txt +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode.egg-info/dependency_links.txt +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode.egg-info/entry_points.txt +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode.egg-info/requires.txt +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/meshcode.egg-info/top_level.txt +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/setup.cfg +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_auto_update_hardening.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_boot_bug_regression.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_color_truecolor.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_core.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_date_parse.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_doctor.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_epistemic_v1_python_sdk.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_epistemic_v1_stop_conditions.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_exceptions.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_init_device_code.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_install_guard.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_lease_sigterm_release.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_rpc_grants.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_sentinel.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_setup_path.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_sleep_signals.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_stay_on_loop_hook.py +0 -0
- {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_wait_open_tasks_contradiction.py +0 -0
|
@@ -5398,6 +5398,38 @@ def meshcode_remember(
|
|
|
5398
5398
|
return result
|
|
5399
5399
|
|
|
5400
5400
|
|
|
5401
|
+
@mcp.tool()
|
|
5402
|
+
@with_working_status
|
|
5403
|
+
def meshcode_register_skills(skills: List[str]) -> Dict[str, Any]:
|
|
5404
|
+
"""Register the skill catalog available in this MCP session.
|
|
5405
|
+
MESH-IMPROVE-8 (mig 344). Call at boot or when runtime skills change.
|
|
5406
|
+
"""
|
|
5407
|
+
if skills is None:
|
|
5408
|
+
skills = []
|
|
5409
|
+
return be.sb_rpc("mc_register_skills", {
|
|
5410
|
+
"p_api_key": _get_api_key(),
|
|
5411
|
+
"p_project_id": _PROJECT_ID,
|
|
5412
|
+
"p_agent_name": AGENT_NAME,
|
|
5413
|
+
"p_skills": skills,
|
|
5414
|
+
})
|
|
5415
|
+
|
|
5416
|
+
|
|
5417
|
+
@mcp.tool()
|
|
5418
|
+
@with_working_status
|
|
5419
|
+
def meshcode_mandate_skill(skill_name: str) -> Dict[str, Any]:
|
|
5420
|
+
"""Commander-class broadcast: report which agents have the skill, notify
|
|
5421
|
+
missing ones via system msg. MESH-IMPROVE-8 (mig 344).
|
|
5422
|
+
Returns: {ok, skill, present_agents, missing_agents, notified_count}.
|
|
5423
|
+
"""
|
|
5424
|
+
if not skill_name or not skill_name.strip():
|
|
5425
|
+
return {"error": "skill_name cannot be empty"}
|
|
5426
|
+
return be.sb_rpc("mc_mandate_skill", {
|
|
5427
|
+
"p_api_key": _get_api_key(),
|
|
5428
|
+
"p_project_id": _PROJECT_ID,
|
|
5429
|
+
"p_skill_name": skill_name.strip(),
|
|
5430
|
+
})
|
|
5431
|
+
|
|
5432
|
+
|
|
5401
5433
|
@mcp.tool()
|
|
5402
5434
|
@with_working_status
|
|
5403
5435
|
def meshcode_atomic_push(
|
|
@@ -5439,6 +5471,103 @@ def meshcode_atomic_push(
|
|
|
5439
5471
|
return {"error": str(e), "error_type": type(e).__name__}
|
|
5440
5472
|
|
|
5441
5473
|
|
|
5474
|
+
@mcp.tool()
|
|
5475
|
+
@with_working_status
|
|
5476
|
+
def meshcode_check_deploy_drift(
|
|
5477
|
+
target_url: str = "https://meshcode.io/build-sha.txt",
|
|
5478
|
+
expected_sha: Optional[str] = None,
|
|
5479
|
+
fallback_to_meta_tag: bool = True,
|
|
5480
|
+
) -> Dict[str, Any]:
|
|
5481
|
+
"""Compare a deployed build SHA against expected (or local origin HEAD).
|
|
5482
|
+
MESH-IMPROVE-6 Part B (pair with front-end's Vite plugin, 82a1378).
|
|
5483
|
+
|
|
5484
|
+
Strategy:
|
|
5485
|
+
1. fetch target_url; if text contains a 40-hex SHA, that's deployed_sha
|
|
5486
|
+
2. if (1) fails AND fallback_to_meta_tag, fetch the site root and grep
|
|
5487
|
+
<meta name="meshcode-build-sha" content="..."/>
|
|
5488
|
+
3. if expected_sha not provided, fetch origin/main HEAD via gh-api
|
|
5489
|
+
(uses PAT from .git/config — same pattern as atomic_push)
|
|
5490
|
+
4. report {deployed_sha, expected_sha, commits_ahead_estimate,
|
|
5491
|
+
drift_warning, suggested_action}
|
|
5492
|
+
|
|
5493
|
+
Args:
|
|
5494
|
+
target_url: where to read the deployed SHA from (default build-sha.txt)
|
|
5495
|
+
expected_sha: explicit expected; omit to auto-fetch origin/main HEAD
|
|
5496
|
+
fallback_to_meta_tag: if build-sha.txt 404s, try meta tag
|
|
5497
|
+
|
|
5498
|
+
Returns: {ok, deployed_sha, expected_sha, drift_warning, suggested_action}
|
|
5499
|
+
"""
|
|
5500
|
+
import re as _re
|
|
5501
|
+
import urllib.request as _ur
|
|
5502
|
+
import urllib.error as _ue
|
|
5503
|
+
deployed_sha = None
|
|
5504
|
+
fetch_err = None
|
|
5505
|
+
try:
|
|
5506
|
+
req = _ur.Request(target_url, headers={"User-Agent": "meshcode-deploy-drift/1.0"})
|
|
5507
|
+
with _ur.urlopen(req, timeout=10) as r:
|
|
5508
|
+
body = r.read().decode(errors="replace").strip()
|
|
5509
|
+
m = _re.search(r"\b[0-9a-f]{7,40}\b", body)
|
|
5510
|
+
if m:
|
|
5511
|
+
deployed_sha = m.group(0)
|
|
5512
|
+
except (_ue.HTTPError, _ue.URLError) as e:
|
|
5513
|
+
fetch_err = f"{type(e).__name__}: {e}"
|
|
5514
|
+
if deployed_sha is None and fallback_to_meta_tag:
|
|
5515
|
+
try:
|
|
5516
|
+
root_url = "/".join(target_url.split("/")[:3]) + "/"
|
|
5517
|
+
req = _ur.Request(root_url, headers={"User-Agent": "meshcode-deploy-drift/1.0"})
|
|
5518
|
+
with _ur.urlopen(req, timeout=10) as r:
|
|
5519
|
+
body = r.read().decode(errors="replace")
|
|
5520
|
+
m = _re.search(r'meta\s+name="meshcode-build-sha"\s+content="([0-9a-f]{7,40})"', body)
|
|
5521
|
+
if m:
|
|
5522
|
+
deployed_sha = m.group(1)
|
|
5523
|
+
except Exception as e:
|
|
5524
|
+
fetch_err = (fetch_err or "") + f"; meta_tag_fetch: {e}"
|
|
5525
|
+
if expected_sha is None:
|
|
5526
|
+
try:
|
|
5527
|
+
from meshcode.atomic_push import parse_git_config
|
|
5528
|
+
remotes = parse_git_config()
|
|
5529
|
+
if "origin" in remotes:
|
|
5530
|
+
owner, repo, pat = remotes["origin"]
|
|
5531
|
+
api_url = f"https://api.github.com/repos/{owner}/{repo}/git/ref/heads/main"
|
|
5532
|
+
req = _ur.Request(api_url)
|
|
5533
|
+
req.add_header("Authorization", f"Bearer {pat}")
|
|
5534
|
+
req.add_header("Accept", "application/vnd.github+json")
|
|
5535
|
+
with _ur.urlopen(req, timeout=10) as r:
|
|
5536
|
+
expected_sha = json.loads(r.read().decode())["object"]["sha"]
|
|
5537
|
+
except Exception as e:
|
|
5538
|
+
return {
|
|
5539
|
+
"ok": False,
|
|
5540
|
+
"error": f"could not resolve expected_sha: {e}",
|
|
5541
|
+
"deployed_sha": deployed_sha,
|
|
5542
|
+
"fetch_err": fetch_err,
|
|
5543
|
+
}
|
|
5544
|
+
if not deployed_sha:
|
|
5545
|
+
return {
|
|
5546
|
+
"ok": False,
|
|
5547
|
+
"error": "could not read deployed SHA from target_url or meta tag",
|
|
5548
|
+
"target_url": target_url,
|
|
5549
|
+
"expected_sha": expected_sha,
|
|
5550
|
+
"fetch_err": fetch_err,
|
|
5551
|
+
}
|
|
5552
|
+
# Compare prefixes (deployed might be 7-char short)
|
|
5553
|
+
drift = not (
|
|
5554
|
+
deployed_sha == expected_sha
|
|
5555
|
+
or deployed_sha == expected_sha[: len(deployed_sha)]
|
|
5556
|
+
or expected_sha == deployed_sha[: len(expected_sha)]
|
|
5557
|
+
)
|
|
5558
|
+
return {
|
|
5559
|
+
"ok": True,
|
|
5560
|
+
"deployed_sha": deployed_sha,
|
|
5561
|
+
"expected_sha": expected_sha,
|
|
5562
|
+
"drift_warning": drift,
|
|
5563
|
+
"suggested_action": (
|
|
5564
|
+
"wait for publish/build to rotate OR trigger remote build"
|
|
5565
|
+
if drift else "deployed matches expected — safe to verify"
|
|
5566
|
+
),
|
|
5567
|
+
"target_url": target_url,
|
|
5568
|
+
}
|
|
5569
|
+
|
|
5570
|
+
|
|
5442
5571
|
@mcp.tool()
|
|
5443
5572
|
@with_working_status
|
|
5444
5573
|
def meshcode_commander_brief(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.23 → meshcode-2.11.25}/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.23 → meshcode-2.11.25}/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.23 → meshcode-2.11.25}/meshcode-backend-wt/tests/test_realtime_event_freshness.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/tests/test_security_regressions.py
RENAMED
|
File without changes
|
|
File without changes
|
{meshcode-2.11.23 → meshcode-2.11.25}/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.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py
RENAMED
|
File without changes
|
{meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py
RENAMED
|
File without changes
|
{meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py
RENAMED
|
File without changes
|
{meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.23 → meshcode-2.11.25}/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.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.23 → meshcode-2.11.25}/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.23 → meshcode-2.11.25}/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.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.23 → meshcode-2.11.25}/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.23 → meshcode-2.11.25}/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
|