meshcode 2.11.103__tar.gz → 2.11.104__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.103 → meshcode-2.11.104}/PKG-INFO +1 -1
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/__init__.py +1 -1
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/hostd.py +64 -26
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode.egg-info/PKG-INFO +1 -1
- {meshcode-2.11.103 → meshcode-2.11.104}/pyproject.toml +1 -1
- {meshcode-2.11.103 → meshcode-2.11.104}/README.md +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/__main__.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/_session_handoff_template 2.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/_session_handoff_template.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/_stop_hook_template.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/atomic_push.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/claude_update 2.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/claude_update.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/cli.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/compat.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/daemon.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/date_parse.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/doctor.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/error_hints.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/exceptions.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/hostd 2.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/invites.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/launcher.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/preferences.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/protocol_handler.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/quickstart.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/rpc_allowlist.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/run_agent.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/scripts/check_secrets.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/scripts/race_rate_harness.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/secrets.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/self_update.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/supervisor.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/up 2.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/up.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode/upload.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/comms_v4.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/tests/test_core.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/comms_v4.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/tests/test_core.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/comms_v4.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/tests/test_core.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode.egg-info/PKG-INFO 2 +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode.egg-info/SOURCES 2.txt +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode.egg-info/SOURCES.txt +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode.egg-info/dependency_links 2.txt +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode.egg-info/dependency_links.txt +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode.egg-info/entry_points 2.txt +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode.egg-info/entry_points.txt +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode.egg-info/requires 2.txt +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode.egg-info/requires.txt +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode.egg-info/top_level 2.txt +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/meshcode.egg-info/top_level.txt +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/setup.cfg +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_auto_update_hardening.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_autonomous_closegap_1.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_autonomous_closegap_2.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_autonomous_closegap_3.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_autonomous_prompt_inject 2.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_autonomous_prompt_inject.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_boot_bug_regression.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_color_truecolor.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_core.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_date_parse.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_doctor.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_epistemic_v1_python_sdk.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_epistemic_v1_stop_conditions.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_exceptions.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_file_upload.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_init_device_code.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_install_guard.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_lease_sigterm_release.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_marketplace_ratings.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_rpc_grants.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_run_agent_dry_run.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_run_agent_no_server_import.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_self_update_user_site.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_sentinel.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_setup_path.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_sleep_signals.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_stay_on_loop_hook.py +0 -0
- {meshcode-2.11.103 → meshcode-2.11.104}/tests/test_wait_open_tasks_contradiction.py +0 -0
|
@@ -801,19 +801,28 @@ def _do_stops(api_key: str, host_id: str) -> int:
|
|
|
801
801
|
return n
|
|
802
802
|
|
|
803
803
|
|
|
804
|
+
# 38523a98 reaper. Commander guardrail #1: DRY-RUN FIRST — ship LOG-ONLY, confirm ZERO false positives in
|
|
805
|
+
# the logs (REAP-DRYRUN lines), THEN flip _REAP_DRYRUN=False to actually kill. Protects against mis-killing
|
|
806
|
+
# a live agent (Samuel's trauma). Guardrail #2: the orphan grace before reaping a stopped-but-alive zombie.
|
|
807
|
+
_REAP_DRYRUN = True
|
|
808
|
+
_REAP_ORPHAN_GRACE_SEC = 90 # don't reap a just-stopped agent — give the cooperative self-exit time first
|
|
809
|
+
|
|
810
|
+
|
|
804
811
|
def _do_reap(api_key: str, host_id: str) -> int:
|
|
805
|
-
"""Reaper (38523a98) —
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
(B) ORPHAN: a headless agent the owner set to a TERMINAL state (desired_state
|
|
812
|
-
whose recorded PID is
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
desired_state='running' agent
|
|
812
|
+
"""Reaper (38523a98) — identify headless processes that should NOT be running. CONSERVATIVE + currently
|
|
813
|
+
DRY-RUN (LOG-ONLY, _REAP_DRYRUN=True): logs what it WOULD kill, kills nothing, until verified. Cases,
|
|
814
|
+
both protected by _kill_headless_pid's cmdline reuse-guard (final safety):
|
|
815
|
+
(A) DUP ghosts: an agent with >1 live `meshcode run <target>` process (double-spawn ghost terminals —
|
|
816
|
+
Samuel's 'se traslapan y desconectan otro'). Reap the EXTRAS, KEEP the recorded PID — only when
|
|
817
|
+
that recorded PID is confirmed ALIVE (known-good survivor). Dead recorded PID => don't guess.
|
|
818
|
+
(B) ORPHAN ZOMBIE: a headless agent the owner set to a TERMINAL state (desired_state stopped/crashed)
|
|
819
|
+
whose recorded PID is STILL ALIVE — the 'offline-but-still-reading' / 'lo cerré y sigue ahí' case.
|
|
820
|
+
A FRESH heartbeat here IS the zombie (still reading despite stop). Reap it, but only AFTER a
|
|
821
|
+
~90s grace from first-sighting (commander guardrail #2) so the cooperative self-exit
|
|
822
|
+
(mc_consume_stop -> must_exit) gets first crack. Grace tracked in hostd_state (reapseen/*).
|
|
823
|
+
NEVER touches: a VISIBLE agent (user owns the window), or a desired_state='running' agent (workers are
|
|
824
|
+
sacred — only the dup-EXTRA of a running agent is reapable, never its live survivor). Returns count
|
|
825
|
+
actually killed (0 while DRY-RUN)."""
|
|
817
826
|
cfg = _rpc("mc_host_config_get", {"p_api_key": api_key, "p_host_id": host_id})
|
|
818
827
|
if not cfg or not cfg.get("ok"):
|
|
819
828
|
return 0
|
|
@@ -834,35 +843,64 @@ def _do_reap(api_key: str, host_id: str) -> int:
|
|
|
834
843
|
except Exception:
|
|
835
844
|
return False
|
|
836
845
|
|
|
846
|
+
def _reap(target, pid, reason):
|
|
847
|
+
"""LOG-ONLY while _REAP_DRYRUN; else hard-kill (reuse-guard inside). Returns 1 if killed."""
|
|
848
|
+
nonlocal pids
|
|
849
|
+
if _REAP_DRYRUN:
|
|
850
|
+
_log(f"REAP-DRYRUN {target}: WOULD kill pid {pid} ({reason}) — log-only, no kill. "
|
|
851
|
+
f"Flip _REAP_DRYRUN=False after confirming zero false positives.")
|
|
852
|
+
return 0
|
|
853
|
+
if _kill_headless_pid(target, pid):
|
|
854
|
+
if pids.get(target) == pid:
|
|
855
|
+
pids.pop(target, None)
|
|
856
|
+
_log(f"REAP {target}: killed pid {pid} ({reason})")
|
|
857
|
+
return 1
|
|
858
|
+
return 0
|
|
859
|
+
|
|
837
860
|
st = _load_state()
|
|
838
861
|
pids = st.get("headless_pids") or {}
|
|
862
|
+
seen = st.get("reapseen") or {}
|
|
863
|
+
now = time.time()
|
|
839
864
|
n = 0
|
|
865
|
+
live_targets = set()
|
|
840
866
|
for a in agents:
|
|
841
|
-
if not a.get("headless"):
|
|
842
|
-
continue # NEVER reap a visible agent — the user closes its window
|
|
843
867
|
proj, agent = a.get("project_name"), a.get("name")
|
|
844
868
|
if not proj or not agent:
|
|
845
869
|
continue
|
|
846
870
|
target = f"{proj}/{agent}"
|
|
847
|
-
|
|
848
|
-
|
|
871
|
+
live_targets.add(target)
|
|
872
|
+
if not a.get("headless"):
|
|
873
|
+
continue # NEVER reap a visible agent — the user closes its window
|
|
874
|
+
ds = a.get("desired_state")
|
|
849
875
|
keep = pids.get(target)
|
|
850
876
|
keep_alive = _alive(keep)
|
|
851
|
-
# (A) DEDUP — only with a CONFIRMED-ALIVE survivor to keep.
|
|
877
|
+
# (A) DEDUP — only with a CONFIRMED-ALIVE survivor to keep. (Applies to running agents too: we only
|
|
878
|
+
# ever reap the EXTRA ghost, never the live survivor.)
|
|
852
879
|
if keep_alive:
|
|
853
880
|
discovered = _discover_agent_pids(target)
|
|
854
881
|
if len(discovered) > 1:
|
|
855
882
|
for p in discovered:
|
|
856
|
-
if p != keep
|
|
857
|
-
n +=
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
if
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
883
|
+
if p != keep:
|
|
884
|
+
n += _reap(target, p, f"duplicate ghost; kept live {keep}")
|
|
885
|
+
# (B) ORPHAN ZOMBIE — owner set stopped/crashed but the proc is still alive. NEVER for running.
|
|
886
|
+
if ds in ("stopped", "crashed") and keep_alive:
|
|
887
|
+
first = seen.get(target)
|
|
888
|
+
if first is None:
|
|
889
|
+
seen[target] = now # start the grace clock; self-exit gets first crack
|
|
890
|
+
_log(f"REAP-PENDING {target}: desired={ds} but pid {keep} alive (hb={a.get('heartbeat_age_s')}s) "
|
|
891
|
+
f"— {_REAP_ORPHAN_GRACE_SEC}s grace for cooperative self-exit before reap")
|
|
892
|
+
elif now - float(first) >= _REAP_ORPHAN_GRACE_SEC:
|
|
893
|
+
n += _reap(target, keep, f"orphan zombie desired={ds}, hb={a.get('heartbeat_age_s')}s, "
|
|
894
|
+
f"alive {int(now-float(first))}s past stop")
|
|
895
|
+
seen.pop(target, None)
|
|
896
|
+
else:
|
|
897
|
+
seen.pop(target, None) # recovered / running / gone — clear the grace clock
|
|
898
|
+
# prune grace entries for agents no longer in the roster
|
|
899
|
+
for t in list(seen.keys()):
|
|
900
|
+
if t not in live_targets:
|
|
901
|
+
seen.pop(t, None)
|
|
865
902
|
st["headless_pids"] = pids
|
|
903
|
+
st["reapseen"] = seen
|
|
866
904
|
_save_state(st)
|
|
867
905
|
return n
|
|
868
906
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py
RENAMED
|
File without changes
|
{meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py
RENAMED
|
File without changes
|
{meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py
RENAMED
|
File without changes
|
|
File without changes
|
{meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.103 → meshcode-2.11.104}/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.103 → meshcode-2.11.104}/meshcode-backend-wt/tests/test_cross_agent_messaging.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/tests/test_migration_integrity.py
RENAMED
|
File without changes
|
{meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/tests/test_realtime_event_freshness.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.103 → meshcode-2.11.104}/meshcode-backend-wt/tests/test_security_regressions.py
RENAMED
|
File without changes
|
|
File without changes
|
{meshcode-2.11.103 → meshcode-2.11.104}/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.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py
RENAMED
|
File without changes
|
{meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py
RENAMED
|
File without changes
|
{meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py
RENAMED
|
File without changes
|
{meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.103 → meshcode-2.11.104}/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
|
{meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/build/lib/meshcode/setup_clients.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
|
{meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.103 → meshcode-2.11.104}/meshcode-noun-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.103 → meshcode-2.11.104}/meshcode-noun-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.103 → meshcode-2.11.104}/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
|