meshcode 2.11.40__tar.gz → 2.11.42__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.40 → meshcode-2.11.42}/PKG-INFO +1 -1
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/__init__.py +1 -1
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/meshcode_mcp/backend.py +8 -1
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/meshcode_mcp/server.py +72 -5
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode.egg-info/PKG-INFO +1 -1
- {meshcode-2.11.40 → meshcode-2.11.42}/pyproject.toml +1 -1
- {meshcode-2.11.40 → meshcode-2.11.42}/README.md +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/__main__.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/_stop_hook_template.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/atomic_push.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/cli.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/compat.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/daemon.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/date_parse.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/doctor.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/error_hints.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/exceptions.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/invites.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/launcher.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/preferences.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/protocol_handler.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/quickstart.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/rpc_allowlist.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/run_agent.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/scripts/check_secrets.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/scripts/race_rate_harness.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/secrets.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/self_update.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/supervisor.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode/upload.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/comms_v4.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/tests/test_core.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/comms_v4.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/tests/test_core.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/comms_v4.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/tests/test_core.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode.egg-info/SOURCES.txt +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode.egg-info/dependency_links.txt +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode.egg-info/entry_points.txt +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode.egg-info/requires.txt +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/meshcode.egg-info/top_level.txt +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/setup.cfg +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/tests/test_auto_update_hardening.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/tests/test_boot_bug_regression.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/tests/test_color_truecolor.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/tests/test_core.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/tests/test_date_parse.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/tests/test_doctor.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/tests/test_epistemic_v1_python_sdk.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/tests/test_epistemic_v1_stop_conditions.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/tests/test_exceptions.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/tests/test_init_device_code.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/tests/test_install_guard.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/tests/test_lease_sigterm_release.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/tests/test_rpc_grants.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/tests/test_run_agent_dry_run.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/tests/test_run_agent_no_server_import.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/tests/test_self_update_user_site.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/tests/test_sentinel.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/tests/test_setup_path.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/tests/test_sleep_signals.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/tests/test_stay_on_loop_hook.py +0 -0
- {meshcode-2.11.40 → meshcode-2.11.42}/tests/test_wait_open_tasks_contradiction.py +0 -0
|
@@ -437,7 +437,14 @@ _recording_session_id = ""
|
|
|
437
437
|
_SKIP_RECORDING = {"mc_heartbeat", "mc_record_event", "mc_agent_set_status_by_api_key",
|
|
438
438
|
"mc_acquire_agent_lease", "mc_release_agent_lease",
|
|
439
439
|
"mc_update_agent", "mc_get_agents",
|
|
440
|
-
"mc_task_list", "mc_count_pending", "mc_mark_message_read"
|
|
440
|
+
"mc_task_list", "mc_count_pending", "mc_mark_message_read",
|
|
441
|
+
# Stop-gap (per commander 1b789a11): mc_tasks_due_soon lives
|
|
442
|
+
# only in `meshcode` schema (mig 329); no `public` wrapper
|
|
443
|
+
# exists, so PostgREST returns PGRST202 ~every wait cycle.
|
|
444
|
+
# ~18k err/12h log pollution. The two call sites already
|
|
445
|
+
# treat it as soft-fail. Silence telemetry until Samuel
|
|
446
|
+
# approves the public-wrapper DDL.
|
|
447
|
+
"mc_tasks_due_soon"}
|
|
441
448
|
|
|
442
449
|
|
|
443
450
|
def _get_api_key() -> Optional[str]:
|
|
@@ -95,6 +95,58 @@ def _agent_color(name: str) -> str:
|
|
|
95
95
|
return _ANSI_COLORS[h % len(_ANSI_COLORS)]
|
|
96
96
|
|
|
97
97
|
|
|
98
|
+
# DUP-AGENTS-P3 (memo afc88b8f, vote 2/2 + chief pending): register-time
|
|
99
|
+
# name/role family sanity check. Catches the class-of-bug where an agent
|
|
100
|
+
# named `front-2` gets registered with role="Backend Engineer". Warning-only:
|
|
101
|
+
# never blocks; surfaces via `warning` field that admin UI renders as badge.
|
|
102
|
+
_ROLE_FAMILY_PREFIX_MAP = (
|
|
103
|
+
("commander", "Commander"),
|
|
104
|
+
("chief", "Commander"),
|
|
105
|
+
("co-dev-", "Engineer"),
|
|
106
|
+
("front-", "Frontend"),
|
|
107
|
+
("back-", "Backend"),
|
|
108
|
+
("backend", "Backend"),
|
|
109
|
+
("frontend", "Frontend"),
|
|
110
|
+
("qa-", "QA"),
|
|
111
|
+
("qa", "QA"),
|
|
112
|
+
("design-", "Design"),
|
|
113
|
+
("ops-", "Ops"),
|
|
114
|
+
("data-", "Data"),
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def _role_family_from_name(name: str) -> Optional[str]:
|
|
119
|
+
"""Derive expected role family from agent name prefix. None = unknown
|
|
120
|
+
prefix, no opinion (skip warning to avoid noise on names like
|
|
121
|
+
`mesh-commander` or one-off custom names)."""
|
|
122
|
+
if not name:
|
|
123
|
+
return None
|
|
124
|
+
lower = name.lower()
|
|
125
|
+
for prefix, family in _ROLE_FAMILY_PREFIX_MAP:
|
|
126
|
+
if prefix.endswith("-"):
|
|
127
|
+
if lower.startswith(prefix):
|
|
128
|
+
return family
|
|
129
|
+
else:
|
|
130
|
+
if lower == prefix or lower.startswith(prefix + "-") or lower.startswith(prefix + "_"):
|
|
131
|
+
return family
|
|
132
|
+
return None
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def _role_warning(name: str, role: str) -> Optional[str]:
|
|
136
|
+
"""Returns a warning string if name-prefix family ≠ role text family.
|
|
137
|
+
None when names with unknown prefixes (avoid false positives), or when
|
|
138
|
+
role text contains the expected family substring (case-insensitive).
|
|
139
|
+
"""
|
|
140
|
+
if not name or not role:
|
|
141
|
+
return None
|
|
142
|
+
expected = _role_family_from_name(name)
|
|
143
|
+
if not expected:
|
|
144
|
+
return None
|
|
145
|
+
if expected.lower() in role.lower():
|
|
146
|
+
return None
|
|
147
|
+
return f"name '{name}' suggests {expected} but role is '{role}' — possible typo or mislabel"
|
|
148
|
+
|
|
149
|
+
|
|
98
150
|
def _mc_log(msg: str, level: str = "info") -> None:
|
|
99
151
|
"""Colored [meshcode-mcp] log line. Uses agent color if available.
|
|
100
152
|
|
|
@@ -4045,7 +4097,12 @@ def meshcode_status() -> Dict[str, Any]:
|
|
|
4045
4097
|
@with_working_status
|
|
4046
4098
|
def meshcode_register(role: str = "") -> Dict[str, Any]:
|
|
4047
4099
|
"""Re-register agent (update role)."""
|
|
4048
|
-
|
|
4100
|
+
effective_role = role or AGENT_ROLE
|
|
4101
|
+
result = be.register_agent(PROJECT_NAME, AGENT_NAME, effective_role, api_key=_get_api_key())
|
|
4102
|
+
warn = _role_warning(AGENT_NAME, effective_role)
|
|
4103
|
+
if warn and isinstance(result, dict):
|
|
4104
|
+
result = {**result, "warning": warn}
|
|
4105
|
+
return result
|
|
4049
4106
|
|
|
4050
4107
|
|
|
4051
4108
|
@mcp.tool()
|
|
@@ -4102,8 +4159,13 @@ def meshcode_init(project: str, agent: str, role: str = "") -> Dict[str, Any]:
|
|
|
4102
4159
|
if not pid:
|
|
4103
4160
|
return {"error": f"project '{project}' not found"}
|
|
4104
4161
|
_PROJECT_ID = pid
|
|
4105
|
-
|
|
4106
|
-
|
|
4162
|
+
effective_role = role or "MCP-connected agent"
|
|
4163
|
+
result = be.register_agent(project, agent, effective_role, api_key=_get_api_key())
|
|
4164
|
+
warn = _role_warning(agent, effective_role)
|
|
4165
|
+
out: Dict[str, Any] = {"ok": True, "project": project, "agent": agent, "register": result}
|
|
4166
|
+
if warn:
|
|
4167
|
+
out["warning"] = warn
|
|
4168
|
+
return out
|
|
4107
4169
|
|
|
4108
4170
|
|
|
4109
4171
|
@mcp.tool()
|
|
@@ -5295,9 +5357,14 @@ def meshcode_add_agent(name: str, role: str = "") -> Dict[str, Any]:
|
|
|
5295
5357
|
name: Agent name.
|
|
5296
5358
|
role: Agent role description.
|
|
5297
5359
|
"""
|
|
5298
|
-
|
|
5360
|
+
effective_role = role or "MCP-connected agent"
|
|
5361
|
+
result = be.register_agent(PROJECT_NAME, name, effective_role, api_key=_get_api_key())
|
|
5362
|
+
warn = _role_warning(name, effective_role)
|
|
5299
5363
|
if isinstance(result, dict) and not result.get("error"):
|
|
5300
|
-
|
|
5364
|
+
out: Dict[str, Any] = {"ok": True, "agent": name, "next_step": f"Run: meshcode setup {PROJECT_NAME} {name} && meshcode run {name}"}
|
|
5365
|
+
if warn:
|
|
5366
|
+
out["warning"] = warn
|
|
5367
|
+
return out
|
|
5301
5368
|
return result or {"error": "failed to add agent"}
|
|
5302
5369
|
|
|
5303
5370
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.40 → meshcode-2.11.42}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.40 → meshcode-2.11.42}/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.40 → meshcode-2.11.42}/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.40 → meshcode-2.11.42}/meshcode-backend-wt/tests/test_realtime_event_freshness.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.40 → meshcode-2.11.42}/meshcode-backend-wt/tests/test_security_regressions.py
RENAMED
|
File without changes
|
|
File without changes
|
{meshcode-2.11.40 → meshcode-2.11.42}/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.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py
RENAMED
|
File without changes
|
{meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py
RENAMED
|
File without changes
|
{meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py
RENAMED
|
File without changes
|
{meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.40 → meshcode-2.11.42}/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.40 → meshcode-2.11.42}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.40 → meshcode-2.11.42}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.40 → meshcode-2.11.42}/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.40 → meshcode-2.11.42}/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.40 → meshcode-2.11.42}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.40 → meshcode-2.11.42}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.40 → meshcode-2.11.42}/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.40 → meshcode-2.11.42}/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
|