meshcode 2.11.100__tar.gz → 2.11.102__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.100 → meshcode-2.11.102}/PKG-INFO +1 -1
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/__init__.py +1 -1
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/hostd.py +81 -2
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode.egg-info/PKG-INFO +1 -1
- {meshcode-2.11.100 → meshcode-2.11.102}/pyproject.toml +1 -1
- {meshcode-2.11.100 → meshcode-2.11.102}/README.md +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/__main__.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/_session_handoff_template 2.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/_session_handoff_template.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/_stop_hook_template.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/atomic_push.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/claude_update 2.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/claude_update.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/cli.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/compat.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/daemon.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/date_parse.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/doctor.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/error_hints.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/exceptions.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/hostd 2.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/invites.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/launcher.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/preferences.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/protocol_handler.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/quickstart.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/rpc_allowlist.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/run_agent.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/scripts/check_secrets.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/scripts/race_rate_harness.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/secrets.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/self_update.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/supervisor.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/up 2.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/up.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode/upload.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/comms_v4.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/tests/test_core.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/comms_v4.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/tests/test_core.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/comms_v4.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/tests/test_core.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode.egg-info/PKG-INFO 2 +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode.egg-info/SOURCES 2.txt +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode.egg-info/SOURCES.txt +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode.egg-info/dependency_links 2.txt +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode.egg-info/dependency_links.txt +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode.egg-info/entry_points 2.txt +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode.egg-info/entry_points.txt +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode.egg-info/requires 2.txt +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode.egg-info/requires.txt +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode.egg-info/top_level 2.txt +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/meshcode.egg-info/top_level.txt +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/setup.cfg +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_auto_update_hardening.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_autonomous_closegap_1.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_autonomous_closegap_2.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_autonomous_closegap_3.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_autonomous_prompt_inject 2.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_autonomous_prompt_inject.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_boot_bug_regression.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_color_truecolor.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_core.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_date_parse.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_doctor.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_epistemic_v1_python_sdk.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_epistemic_v1_stop_conditions.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_exceptions.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_file_upload.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_init_device_code.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_install_guard.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_lease_sigterm_release.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_marketplace_ratings.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_rpc_grants.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_run_agent_dry_run.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_run_agent_no_server_import.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_self_update_user_site.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_sentinel.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_setup_path.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_sleep_signals.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_stay_on_loop_hook.py +0 -0
- {meshcode-2.11.100 → meshcode-2.11.102}/tests/test_wait_open_tasks_contradiction.py +0 -0
|
@@ -458,6 +458,10 @@ def _spawn_agent(project: str, agent: str, headless: bool = False) -> bool:
|
|
|
458
458
|
return False
|
|
459
459
|
|
|
460
460
|
|
|
461
|
+
# 38523a98: max terminals opened per host per sweep (anti boot-storm; excess defers to next sweep).
|
|
462
|
+
_MAX_SPAWNS_PER_SWEEP = 3
|
|
463
|
+
|
|
464
|
+
|
|
461
465
|
def _do_respawns(api_key: str, host_id: str) -> int:
|
|
462
466
|
"""One respawn sweep. Returns number relaunched."""
|
|
463
467
|
res = _rpc("mc_agents_needing_respawn",
|
|
@@ -466,6 +470,14 @@ def _do_respawns(api_key: str, host_id: str) -> int:
|
|
|
466
470
|
return 0
|
|
467
471
|
n = 0
|
|
468
472
|
for c in res.get("candidates", []):
|
|
473
|
+
# 38523a98 GLOBAL spawn cap: never open more than _MAX_SPAWNS_PER_SWEEP terminals in one ~10s
|
|
474
|
+
# sweep (canonical model: 2-3, not 7-at-once). Excess agents respawn on the NEXT sweep — smooths
|
|
475
|
+
# the boot-storm Samuel hit (a fresh host with the whole fleet stale spawned every agent at once).
|
|
476
|
+
# Per-target rate-limit + circuit-breaker still apply below; this is the cross-agent backstop.
|
|
477
|
+
if n >= _MAX_SPAWNS_PER_SWEEP:
|
|
478
|
+
_log(f"GLOBAL spawn cap {_MAX_SPAWNS_PER_SWEEP}/sweep hit — deferring remaining respawn(s) "
|
|
479
|
+
f"to next sweep (anti boot-storm)")
|
|
480
|
+
break
|
|
469
481
|
proj, agent = c.get("project_name"), c.get("agent")
|
|
470
482
|
if not proj or not agent:
|
|
471
483
|
continue
|
|
@@ -789,6 +801,72 @@ def _do_stops(api_key: str, host_id: str) -> int:
|
|
|
789
801
|
return n
|
|
790
802
|
|
|
791
803
|
|
|
804
|
+
def _do_reap(api_key: str, host_id: str) -> int:
|
|
805
|
+
"""Reaper (38523a98) — kill headless processes that should NOT be running. CONSERVATIVE: a no-op in
|
|
806
|
+
normal operation. Both cases are protected by _kill_headless_pid's cmdline reuse-guard (final safety):
|
|
807
|
+
(A) DUP ghosts: an agent with >1 live `meshcode run <target>` process (a double-spawn left ghost
|
|
808
|
+
terminals — Samuel's 'se traslapan y desconectan otro'). Kill the EXTRAS, KEEP the recorded PID
|
|
809
|
+
— but ONLY when that recorded PID is itself confirmed ALIVE, so a known-good survivor stays. If
|
|
810
|
+
the recorded PID is dead we do NOT guess a survivor (leave it to _do_respawns/_do_stops).
|
|
811
|
+
(B) ORPHAN: a headless agent the owner set to a TERMINAL state (desired_state in stopped/crashed)
|
|
812
|
+
whose recorded PID is still alive AND heartbeat is stale (>=90s, so NOT a just-recovered agent)
|
|
813
|
+
— the 'offline but still reading' case. _do_stops (runs first) already kills stopped+FRESH; this
|
|
814
|
+
catches the stale-but-alive gap + 'crashed'.
|
|
815
|
+
NEVER reaps: a VISIBLE agent (user owns the window), a FRESH-heartbeat agent (genuinely alive), or a
|
|
816
|
+
desired_state='running' agent. Returns number of processes killed."""
|
|
817
|
+
cfg = _rpc("mc_host_config_get", {"p_api_key": api_key, "p_host_id": host_id})
|
|
818
|
+
if not cfg or not cfg.get("ok"):
|
|
819
|
+
return 0
|
|
820
|
+
agents = cfg.get("agents") or []
|
|
821
|
+
if not agents:
|
|
822
|
+
return 0
|
|
823
|
+
|
|
824
|
+
def _alive(p) -> bool:
|
|
825
|
+
if not p:
|
|
826
|
+
return False
|
|
827
|
+
try:
|
|
828
|
+
os.kill(int(p), 0)
|
|
829
|
+
return True
|
|
830
|
+
except ProcessLookupError:
|
|
831
|
+
return False
|
|
832
|
+
except PermissionError:
|
|
833
|
+
return True # exists, owned by another uid — treat as alive (don't reap blindly)
|
|
834
|
+
except Exception:
|
|
835
|
+
return False
|
|
836
|
+
|
|
837
|
+
st = _load_state()
|
|
838
|
+
pids = st.get("headless_pids") or {}
|
|
839
|
+
n = 0
|
|
840
|
+
for a in agents:
|
|
841
|
+
if not a.get("headless"):
|
|
842
|
+
continue # NEVER reap a visible agent — the user closes its window
|
|
843
|
+
proj, agent = a.get("project_name"), a.get("name")
|
|
844
|
+
if not proj or not agent:
|
|
845
|
+
continue
|
|
846
|
+
target = f"{proj}/{agent}"
|
|
847
|
+
hb = a.get("heartbeat_age_s")
|
|
848
|
+
fresh = (hb is not None and hb < 90) # genuinely alive => never reap
|
|
849
|
+
keep = pids.get(target)
|
|
850
|
+
keep_alive = _alive(keep)
|
|
851
|
+
# (A) DEDUP — only with a CONFIRMED-ALIVE survivor to keep.
|
|
852
|
+
if keep_alive:
|
|
853
|
+
discovered = _discover_agent_pids(target)
|
|
854
|
+
if len(discovered) > 1:
|
|
855
|
+
for p in discovered:
|
|
856
|
+
if p != keep and _kill_headless_pid(target, p):
|
|
857
|
+
n += 1
|
|
858
|
+
_log(f"REAP-DUP {target}: killed duplicate ghost pid {p} (kept live {keep})")
|
|
859
|
+
# (B) ORPHAN — owner set it stopped/crashed, it's not a recovered (fresh-hb) agent.
|
|
860
|
+
if keep_alive and (a.get("desired_state") in ("stopped", "crashed")) and not fresh:
|
|
861
|
+
if _kill_headless_pid(target, keep):
|
|
862
|
+
pids.pop(target, None)
|
|
863
|
+
n += 1
|
|
864
|
+
_log(f"REAP {target}: killed orphan (desired={a.get('desired_state')}, hb={hb}s) headless pid {keep}")
|
|
865
|
+
st["headless_pids"] = pids
|
|
866
|
+
_save_state(st)
|
|
867
|
+
return n
|
|
868
|
+
|
|
869
|
+
|
|
792
870
|
def _do_recycle_enforce(api_key: str, host_id: str) -> int:
|
|
793
871
|
"""RECYCLE-MUST-GUARANTEE-RESPAWN (task c0fc5597). An interactive claude (no --print) can't
|
|
794
872
|
self-exit on must_exit=recycle: the model leaves its loop but the process idles + the MCP
|
|
@@ -1375,10 +1453,11 @@ def cmd_hostd(args: list) -> int:
|
|
|
1375
1453
|
recycled = _do_recycles(api_key, host_id)
|
|
1376
1454
|
ver_recycled = _do_version_recycles(api_key, host_id)
|
|
1377
1455
|
stopped = _do_stops(api_key, host_id)
|
|
1456
|
+
reaped = _do_reap(api_key, host_id) # 38523a98: kill ghosts/dup-PIDs/crashed-orphans
|
|
1378
1457
|
_gc_headless_pids() # cb90b058: drop dead PIDs (stale entry can't mask a live agent)
|
|
1379
1458
|
_up = int(time.monotonic() - _spawn_mono)
|
|
1380
|
-
if relaunched or recycled or ver_recycled or stopped or enforced:
|
|
1381
|
-
_log(f"sweep done (uptime={_up}s) — {relaunched} respawned, {recycled} recycled, {ver_recycled} version-recycled, {stopped} stopped, {enforced} recycle-enforced")
|
|
1459
|
+
if relaunched or recycled or ver_recycled or stopped or enforced or reaped:
|
|
1460
|
+
_log(f"sweep done (uptime={_up}s) — {relaunched} respawned, {recycled} recycled, {ver_recycled} version-recycled, {stopped} stopped, {enforced} recycle-enforced, {reaped} reaped")
|
|
1382
1461
|
elif time.monotonic() - _last_alive_log >= 60:
|
|
1383
1462
|
_log(f"alive — uptime={_up}s")
|
|
1384
1463
|
_last_alive_log = time.monotonic()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py
RENAMED
|
File without changes
|
{meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py
RENAMED
|
File without changes
|
{meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py
RENAMED
|
File without changes
|
|
File without changes
|
{meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.100 → meshcode-2.11.102}/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.100 → meshcode-2.11.102}/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.100 → meshcode-2.11.102}/meshcode-backend-wt/tests/test_migration_integrity.py
RENAMED
|
File without changes
|
{meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/tests/test_realtime_event_freshness.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.100 → meshcode-2.11.102}/meshcode-backend-wt/tests/test_security_regressions.py
RENAMED
|
File without changes
|
|
File without changes
|
{meshcode-2.11.100 → meshcode-2.11.102}/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.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py
RENAMED
|
File without changes
|
{meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py
RENAMED
|
File without changes
|
{meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py
RENAMED
|
File without changes
|
{meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.100 → meshcode-2.11.102}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.100 → meshcode-2.11.102}/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.100 → meshcode-2.11.102}/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.100 → meshcode-2.11.102}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.100 → meshcode-2.11.102}/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.100 → meshcode-2.11.102}/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.100 → meshcode-2.11.102}/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.100 → meshcode-2.11.102}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-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.100 → meshcode-2.11.102}/meshcode-tasks-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.100 → meshcode-2.11.102}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-wt/tests/test_security_regressions.py
RENAMED
|
File without changes
|
|
File without changes
|
{meshcode-2.11.100 → meshcode-2.11.102}/meshcode-tasks-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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|