meshcode 2.11.80__tar.gz → 2.11.82__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.80 → meshcode-2.11.82}/PKG-INFO +1 -1
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/__init__.py +1 -1
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/hostd.py +64 -19
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/meshcode_mcp/server.py +14 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/run_agent.py +7 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode.egg-info/PKG-INFO +1 -1
- {meshcode-2.11.80 → meshcode-2.11.82}/pyproject.toml +1 -1
- {meshcode-2.11.80 → meshcode-2.11.82}/README.md +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/__main__.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/_stop_hook_template.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/atomic_push.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/claude_update.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/cli.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/compat.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/daemon.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/date_parse.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/doctor.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/error_hints.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/exceptions.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/invites.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/launcher.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/preferences.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/protocol_handler.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/quickstart.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/rpc_allowlist.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/scripts/check_secrets.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/scripts/race_rate_harness.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/secrets.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/self_update.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/supervisor.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/up.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode/upload.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/comms_v4.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/tests/test_core.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/comms_v4.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/tests/test_core.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/comms_v4.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/tests/test_core.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode.egg-info/SOURCES.txt +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode.egg-info/dependency_links.txt +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode.egg-info/entry_points.txt +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode.egg-info/requires.txt +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/meshcode.egg-info/top_level.txt +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/setup.cfg +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_auto_update_hardening.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_autonomous_closegap_1.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_autonomous_closegap_2.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_autonomous_closegap_3.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_autonomous_prompt_inject.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_boot_bug_regression.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_color_truecolor.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_core.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_date_parse.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_doctor.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_epistemic_v1_python_sdk.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_epistemic_v1_stop_conditions.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_exceptions.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_file_upload.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_init_device_code.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_install_guard.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_lease_sigterm_release.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_marketplace_ratings.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_rpc_grants.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_run_agent_dry_run.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_run_agent_no_server_import.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_self_update_user_site.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_sentinel.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_setup_path.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_sleep_signals.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_stay_on_loop_hook.py +0 -0
- {meshcode-2.11.80 → meshcode-2.11.82}/tests/test_wait_open_tasks_contradiction.py +0 -0
|
@@ -502,7 +502,7 @@ def _hostd_install_windows() -> int:
|
|
|
502
502
|
'$a = New-ScheduledTaskAction -Execute "cmd.exe" -Argument \'/c "' + str(launch_cmd) + '"\';'
|
|
503
503
|
'$t1 = New-ScheduledTaskTrigger -AtLogOn;'
|
|
504
504
|
'$t2 = New-ScheduledTaskTrigger -Once -At (Get-Date) '
|
|
505
|
-
'-RepetitionInterval (New-TimeSpan -Minutes
|
|
505
|
+
'-RepetitionInterval (New-TimeSpan -Minutes 1) -RepetitionDuration (New-TimeSpan -Days 3650);'
|
|
506
506
|
'$s = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries'
|
|
507
507
|
' -ExecutionTimeLimit ([TimeSpan]::Zero) -RestartCount 999'
|
|
508
508
|
' -RestartInterval (New-TimeSpan -Minutes 1) -MultipleInstances IgnoreNew -Hidden;'
|
|
@@ -641,6 +641,32 @@ def _hostd_uninstall() -> int:
|
|
|
641
641
|
return 0
|
|
642
642
|
|
|
643
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
|
+
|
|
644
670
|
def _hostd_bootstrap(verbose: bool = False) -> bool:
|
|
645
671
|
"""Idempotent auto-install + start of hostd (task f12b9d36) — called from `meshcode login`
|
|
646
672
|
so onboarding is just `pip install meshcode` + `meshcode login` (no manual `hostd install`).
|
|
@@ -765,32 +791,51 @@ def cmd_hostd(args: list) -> int:
|
|
|
765
791
|
if not api_key:
|
|
766
792
|
_log("FATAL: no api key — run `meshcode login` (key is read from the keychain)")
|
|
767
793
|
return 1
|
|
768
|
-
#
|
|
769
|
-
#
|
|
770
|
-
#
|
|
771
|
-
#
|
|
794
|
+
# P1 hostd_CRASH_LOOP: the detached Windows daemon has NO console, so crashes (incl hard
|
|
795
|
+
# faults / uncaught exceptions) went to INVISIBLE stderr — hostd.log showed nothing. Capture
|
|
796
|
+
# stderr + faulthandler tracebacks to a file + install an excepthook so the NEXT crash is
|
|
797
|
+
# diagnosable, and the daemon never dies silently.
|
|
798
|
+
try:
|
|
799
|
+
import faulthandler, traceback as _tbmod
|
|
800
|
+
(STATE_DIR / "logs").mkdir(parents=True, exist_ok=True)
|
|
801
|
+
_errf = open(STATE_DIR / "logs" / "hostd.stderr.log", "a", buffering=1, encoding="utf-8")
|
|
802
|
+
sys.stderr = _errf
|
|
803
|
+
faulthandler.enable(file=_errf, all_threads=True)
|
|
804
|
+
sys.excepthook = lambda t, v, tb: _log("UNCAUGHT: " + "".join(_tbmod.format_exception(t, v, tb)))
|
|
805
|
+
except Exception:
|
|
806
|
+
pass
|
|
807
|
+
# Register this host in mc_host_config so the dashboard can list it as a launch target.
|
|
772
808
|
_reg = _rpc("mc_host_config_set", {"p_api_key": api_key, "p_host_id": host_id})
|
|
773
809
|
if _reg and _reg.get("ok"):
|
|
774
810
|
_log(f"registered host {host_id} in mc_host_config")
|
|
775
811
|
else:
|
|
776
812
|
_log(f"WARN: host registration failed (dashboard may not list this host): {_reg}")
|
|
777
813
|
_log(f"hostd starting — host_id={host_id} interval={POLL_INTERVAL_SEC}s stale={STALE_SECONDS}s")
|
|
814
|
+
# OUTER resilience (P1): a code exception in the poll loop must NEVER kill the daemon.
|
|
778
815
|
while True:
|
|
779
816
|
try:
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
817
|
+
while True:
|
|
818
|
+
try:
|
|
819
|
+
# heartbeat so the cloud knows this daemon is ALIVE (host_offline detection).
|
|
820
|
+
try:
|
|
821
|
+
_rpc("mc_host_heartbeat", {"p_api_key": api_key, "p_host_id": host_id})
|
|
822
|
+
except Exception:
|
|
823
|
+
pass
|
|
824
|
+
relaunched = _do_respawns(api_key, host_id)
|
|
825
|
+
recycled = _do_recycles(api_key, host_id)
|
|
826
|
+
ver_recycled = _do_version_recycles(api_key, host_id)
|
|
827
|
+
if relaunched or recycled or ver_recycled:
|
|
828
|
+
_log(f"sweep done — {relaunched} respawned, {recycled} recycled, {ver_recycled} version-recycled")
|
|
829
|
+
except Exception as e:
|
|
830
|
+
import traceback as _tb
|
|
831
|
+
_log(f"WARN: sweep error: {e}\n{_tb.format_exc()}")
|
|
832
|
+
time.sleep(POLL_INTERVAL_SEC)
|
|
833
|
+
except (KeyboardInterrupt, SystemExit):
|
|
834
|
+
raise # honor a real shutdown signal
|
|
835
|
+
except BaseException as e:
|
|
836
|
+
import traceback as _tb
|
|
837
|
+
_log(f"FATAL: poll loop crashed (restarting loop in 5s): {e}\n{_tb.format_exc()}")
|
|
838
|
+
time.sleep(5)
|
|
794
839
|
|
|
795
840
|
print(f"[hostd] unknown subcommand: {sub}", file=sys.stderr)
|
|
796
841
|
return 1
|
|
@@ -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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.80 → meshcode-2.11.82}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.80 → meshcode-2.11.82}/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.80 → meshcode-2.11.82}/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.80 → meshcode-2.11.82}/meshcode-backend-wt/tests/test_realtime_event_freshness.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.80 → meshcode-2.11.82}/meshcode-backend-wt/tests/test_security_regressions.py
RENAMED
|
File without changes
|
|
File without changes
|
{meshcode-2.11.80 → meshcode-2.11.82}/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.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py
RENAMED
|
File without changes
|
{meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py
RENAMED
|
File without changes
|
{meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py
RENAMED
|
File without changes
|
{meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.80 → meshcode-2.11.82}/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.80 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.80 → meshcode-2.11.82}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.80 → meshcode-2.11.82}/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.80 → meshcode-2.11.82}/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.80 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.80 → meshcode-2.11.82}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.80 → meshcode-2.11.82}/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.80 → meshcode-2.11.82}/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
|