meshcode 2.11.79__tar.gz → 2.11.81__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.79 → meshcode-2.11.81}/PKG-INFO +1 -1
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/__init__.py +1 -1
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/hostd.py +36 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/meshcode_mcp/server.py +14 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/run_agent.py +17 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode.egg-info/PKG-INFO +1 -1
- {meshcode-2.11.79 → meshcode-2.11.81}/pyproject.toml +1 -1
- {meshcode-2.11.79 → meshcode-2.11.81}/README.md +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/__main__.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/_stop_hook_template.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/atomic_push.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/claude_update.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/cli.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/compat.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/daemon.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/date_parse.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/doctor.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/error_hints.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/exceptions.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/invites.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/launcher.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/preferences.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/protocol_handler.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/quickstart.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/rpc_allowlist.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/scripts/check_secrets.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/scripts/race_rate_harness.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/secrets.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/self_update.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/supervisor.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/up.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode/upload.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/comms_v4.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/tests/test_core.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/comms_v4.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/tests/test_core.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/comms_v4.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/tests/test_core.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode.egg-info/SOURCES.txt +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode.egg-info/dependency_links.txt +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode.egg-info/entry_points.txt +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode.egg-info/requires.txt +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/meshcode.egg-info/top_level.txt +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/setup.cfg +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_auto_update_hardening.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_autonomous_closegap_1.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_autonomous_closegap_2.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_autonomous_closegap_3.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_autonomous_prompt_inject.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_boot_bug_regression.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_color_truecolor.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_core.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_date_parse.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_doctor.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_epistemic_v1_python_sdk.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_epistemic_v1_stop_conditions.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_exceptions.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_file_upload.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_init_device_code.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_install_guard.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_lease_sigterm_release.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_marketplace_ratings.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_rpc_grants.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_run_agent_dry_run.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_run_agent_no_server_import.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_self_update_user_site.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_sentinel.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_setup_path.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_sleep_signals.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_stay_on_loop_hook.py +0 -0
- {meshcode-2.11.79 → meshcode-2.11.81}/tests/test_wait_open_tasks_contradiction.py +0 -0
|
@@ -321,6 +321,16 @@ def _do_respawns(api_key: str, host_id: str) -> int:
|
|
|
321
321
|
# The old mc_set_desired_state(p_state=crashed) call passed NO agent id = no-op; dropped.
|
|
322
322
|
if rec and rec.get("give_up"):
|
|
323
323
|
_log(f"ALERT {proj}/{agent}: respawn cap hit — marked crashed (atomic). No more respawns.")
|
|
324
|
+
# task 843f282c Phase 2: an agent that spawned but NEVER came online (hit the cap) is
|
|
325
|
+
# almost always Claude Code not logged in (hangs on an invisible headless login prompt).
|
|
326
|
+
# Resolve the pending launch -> FE toast instead of an eternal spinner.
|
|
327
|
+
try:
|
|
328
|
+
_rpc("mc_resolve_launch", {
|
|
329
|
+
"p_api_key": api_key, "p_project_id": c.get("project_id"), "p_agent": agent,
|
|
330
|
+
"p_status": "failed", "p_reason": "spawn_failed",
|
|
331
|
+
"p_detail": "agent spawned but never connected — check Claude Code login (run `claude`)"})
|
|
332
|
+
except Exception:
|
|
333
|
+
pass
|
|
324
334
|
n += 1
|
|
325
335
|
return n
|
|
326
336
|
|
|
@@ -631,6 +641,32 @@ def _hostd_uninstall() -> int:
|
|
|
631
641
|
return 0
|
|
632
642
|
|
|
633
643
|
|
|
644
|
+
_BOOTSTRAP_MARKER = STATE_DIR / ".bootstrap_check"
|
|
645
|
+
|
|
646
|
+
|
|
647
|
+
def _hostd_bootstrap_if_needed(ttl_sec: int = 3600, verbose: bool = False) -> bool:
|
|
648
|
+
"""TTL-guarded bootstrap for the `meshcode run` / MCP-serve entry points (task 61b22c7b Phase 1):
|
|
649
|
+
bootstrap hostd if it wasn't checked within ttl_sec — covers users who run an agent BEFORE/without
|
|
650
|
+
`meshcode login`. The TTL avoids hammering schtasks/launchctl on every agent spawn (hostd spawns N
|
|
651
|
+
agents; only the first bootstraps). Best-effort: never raises."""
|
|
652
|
+
try:
|
|
653
|
+
if _BOOTSTRAP_MARKER.exists() and (time.time() - _BOOTSTRAP_MARKER.stat().st_mtime) < ttl_sec:
|
|
654
|
+
return False # recently bootstrapped — skip
|
|
655
|
+
except Exception:
|
|
656
|
+
pass
|
|
657
|
+
ok = False
|
|
658
|
+
try:
|
|
659
|
+
ok = _hostd_bootstrap(verbose=verbose)
|
|
660
|
+
except Exception:
|
|
661
|
+
pass
|
|
662
|
+
try:
|
|
663
|
+
STATE_DIR.mkdir(parents=True, exist_ok=True)
|
|
664
|
+
_BOOTSTRAP_MARKER.write_text(str(int(time.time())), encoding="utf-8")
|
|
665
|
+
except Exception:
|
|
666
|
+
pass
|
|
667
|
+
return ok
|
|
668
|
+
|
|
669
|
+
|
|
634
670
|
def _hostd_bootstrap(verbose: bool = False) -> bool:
|
|
635
671
|
"""Idempotent auto-install + start of hostd (task f12b9d36) — called from `meshcode login`
|
|
636
672
|
so onboarding is just `pip install meshcode` + `meshcode login` (no manual `hostd install`).
|
|
@@ -7406,6 +7406,20 @@ def _check_boot_version_drift():
|
|
|
7406
7406
|
def run_server():
|
|
7407
7407
|
"""Start the MCP server on stdio (default for Claude Code)."""
|
|
7408
7408
|
_auto_update()
|
|
7409
|
+
# task 61b22c7b Phase 1: best-effort, NON-blocking — ensure a hostd is running even if this
|
|
7410
|
+
# agent's MCP serve came up without a prior `meshcode login`/hostd. TTL-guarded + idempotent;
|
|
7411
|
+
# runs in a daemon thread so it never delays the MCP handshake.
|
|
7412
|
+
try:
|
|
7413
|
+
import threading as _th_bs
|
|
7414
|
+
def _bg_hostd_bootstrap():
|
|
7415
|
+
try:
|
|
7416
|
+
from meshcode import hostd as _hostd_bs
|
|
7417
|
+
_hostd_bs._hostd_bootstrap_if_needed()
|
|
7418
|
+
except Exception:
|
|
7419
|
+
pass
|
|
7420
|
+
_th_bs.Thread(target=_bg_hostd_bootstrap, daemon=True).start()
|
|
7421
|
+
except Exception:
|
|
7422
|
+
pass
|
|
7409
7423
|
# Telemetry canary: surface any installed/loaded version drift loudly
|
|
7410
7424
|
# to stderr so it shows up in Claude Code's MCP server output. The first
|
|
7411
7425
|
# heartbeat carries the loaded version to mc_agents; this stderr line is
|
|
@@ -708,6 +708,13 @@ def run(agent: str, project: Optional[str] = None, editor_override: Optional[str
|
|
|
708
708
|
self_update.check_and_maybe_update()
|
|
709
709
|
except Exception:
|
|
710
710
|
pass
|
|
711
|
+
# task 61b22c7b Phase 1: ensure a hostd is running even if the user ran an agent BEFORE
|
|
712
|
+
# (or without) `meshcode login` — idempotent + TTL-guarded so spawned agents don't hammer it.
|
|
713
|
+
try:
|
|
714
|
+
from . import hostd as _hostd
|
|
715
|
+
_hostd._hostd_bootstrap_if_needed()
|
|
716
|
+
except Exception:
|
|
717
|
+
pass
|
|
711
718
|
|
|
712
719
|
# Detect: are we already inside a Claude Code session? os.execvp(claude)
|
|
713
720
|
# from inside an existing claude won't work — claude needs a fresh
|
|
@@ -1082,6 +1089,16 @@ def run(agent: str, project: Optional[str] = None, editor_override: Optional[str
|
|
|
1082
1089
|
os.execvp(cmd[0], cmd)
|
|
1083
1090
|
except FileNotFoundError:
|
|
1084
1091
|
print(f"[meshcode] ERROR: '{editor}' not found in PATH", file=sys.stderr)
|
|
1092
|
+
# task 843f282c Phase 2: tell the dashboard WHY (claude_not_installed) so the pending launch
|
|
1093
|
+
# toast fires with an actionable message instead of spinning forever. Best-effort.
|
|
1094
|
+
try:
|
|
1095
|
+
from .comms_v4 import sb_rpc as _rpc_resolve
|
|
1096
|
+
_rpc_resolve("mc_resolve_launch", {
|
|
1097
|
+
"p_api_key": api_key, "p_project_id": project_id, "p_agent": agent,
|
|
1098
|
+
"p_status": "failed", "p_reason": "claude_not_installed",
|
|
1099
|
+
"p_detail": f"'{editor}' not found in PATH — install: npm i -g @anthropic-ai/claude-code"})
|
|
1100
|
+
except Exception:
|
|
1101
|
+
pass
|
|
1085
1102
|
return 127
|
|
1086
1103
|
except Exception as e:
|
|
1087
1104
|
print(f"[meshcode] ERROR launching {editor}: {e}", file=sys.stderr)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.79 → meshcode-2.11.81}/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.79 → meshcode-2.11.81}/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.79 → meshcode-2.11.81}/meshcode-backend-wt/tests/test_realtime_event_freshness.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.79 → meshcode-2.11.81}/meshcode-backend-wt/tests/test_security_regressions.py
RENAMED
|
File without changes
|
|
File without changes
|
{meshcode-2.11.79 → meshcode-2.11.81}/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.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py
RENAMED
|
File without changes
|
{meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py
RENAMED
|
File without changes
|
{meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py
RENAMED
|
File without changes
|
{meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.79 → meshcode-2.11.81}/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.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.79 → meshcode-2.11.81}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.79 → meshcode-2.11.81}/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.79 → meshcode-2.11.81}/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.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.79 → meshcode-2.11.81}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.79 → meshcode-2.11.81}/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.79 → meshcode-2.11.81}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|