meshcode 2.11.105__tar.gz → 2.11.106__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.105 → meshcode-2.11.106}/PKG-INFO +1 -1
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/__init__.py +1 -1
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/hostd.py +48 -2
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode.egg-info/PKG-INFO +1 -1
- {meshcode-2.11.105 → meshcode-2.11.106}/pyproject.toml +1 -1
- {meshcode-2.11.105 → meshcode-2.11.106}/README.md +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/__main__.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/_session_handoff_template 2.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/_session_handoff_template 3.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/_session_handoff_template.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/_stop_hook_template.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/atomic_push.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/claude_update 2.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/claude_update 3.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/claude_update.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/cli.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/compat.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/daemon.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/date_parse.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/doctor.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/error_hints.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/exceptions.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/hostd 2.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/invites.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/launcher.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/preferences.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/protocol_handler.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/quickstart.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/rpc_allowlist.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/run_agent.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/scripts/check_secrets.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/scripts/race_rate_harness.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/secrets.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/self_update.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/supervisor.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/up 2.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/up.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode/upload.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/comms_v4.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/tests/test_core.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/comms_v4.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/tests/test_core.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/comms_v4.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/tests/test_core.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode.egg-info/PKG-INFO 2 +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode.egg-info/SOURCES 2.txt +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode.egg-info/SOURCES.txt +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode.egg-info/dependency_links 2.txt +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode.egg-info/dependency_links.txt +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode.egg-info/entry_points 2.txt +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode.egg-info/entry_points.txt +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode.egg-info/requires 2.txt +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode.egg-info/requires.txt +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode.egg-info/top_level 2.txt +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/meshcode.egg-info/top_level.txt +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/setup.cfg +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_auto_update_hardening.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_autonomous_closegap_1.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_autonomous_closegap_2.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_autonomous_closegap_3.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_autonomous_prompt_inject 2.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_autonomous_prompt_inject 3.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_autonomous_prompt_inject.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_boot_bug_regression.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_color_truecolor.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_core.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_date_parse.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_doctor.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_epistemic_v1_python_sdk.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_epistemic_v1_stop_conditions.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_exceptions.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_file_upload.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_init_device_code.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_install_guard.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_lease_sigterm_release.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_marketplace_ratings.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_rpc_grants.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_run_agent_dry_run.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_run_agent_no_server_import.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_self_update_user_site.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_sentinel.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_setup_path.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_sleep_signals.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_stay_on_loop_hook.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.106}/tests/test_wait_open_tasks_contradiction.py +0 -0
|
@@ -801,6 +801,51 @@ def _do_stops(api_key: str, host_id: str) -> int:
|
|
|
801
801
|
return n
|
|
802
802
|
|
|
803
803
|
|
|
804
|
+
# 38523a98 Gap 1: explicit human force-kill of VISIBLE agents. DRY-RUN first (same gate as the reaper).
|
|
805
|
+
_FORCE_KILL_DRYRUN = True
|
|
806
|
+
|
|
807
|
+
|
|
808
|
+
def _do_force_kills(api_key: str, host_id: str) -> int:
|
|
809
|
+
"""38523a98 Gap 1 — EXPLICIT human force-kill of VISIBLE agents. The user clicked Stop/Remove
|
|
810
|
+
(desired_state='stopped' via mc_agent_power) but the visible agent didn't close/self-exit -> kill its
|
|
811
|
+
process ('lo cerré y sigue ahí'). Reads mc_agents_to_force_kill (visible + stopped + alive; ONLY this
|
|
812
|
+
new hostd calls that RPC, old hostd ignores it -> the DDL is safe to apply ahead of the deploy). This
|
|
813
|
+
fires ONLY on an explicit human stop — the AUTONOMOUS reaper (_do_reap) NEVER touches visible. DRY-RUN
|
|
814
|
+
(log-only) until verified. Returns count killed (0 while dry-run)."""
|
|
815
|
+
res = _rpc("mc_agents_to_force_kill", {"p_api_key": api_key, "p_host_id": host_id})
|
|
816
|
+
if not res or not res.get("ok"):
|
|
817
|
+
return 0 # old DB without the RPC -> {} -> no-op
|
|
818
|
+
agents = res.get("agents") or []
|
|
819
|
+
if not agents:
|
|
820
|
+
return 0
|
|
821
|
+
st = _load_state()
|
|
822
|
+
pids = st.get("headless_pids") or {}
|
|
823
|
+
n = 0
|
|
824
|
+
for a in agents:
|
|
825
|
+
proj, agent = a.get("project_name"), a.get("agent")
|
|
826
|
+
if not proj or not agent:
|
|
827
|
+
continue
|
|
828
|
+
target = f"{proj}/{agent}"
|
|
829
|
+
# recorded PID first, else discover by cmdline (visible agents aren't always in headless_pids).
|
|
830
|
+
cands = []
|
|
831
|
+
if pids.get(target):
|
|
832
|
+
cands.append(pids.get(target))
|
|
833
|
+
cands += [p for p in _discover_agent_pids(target) if p not in cands]
|
|
834
|
+
for pid in cands:
|
|
835
|
+
if not pid:
|
|
836
|
+
continue
|
|
837
|
+
if _FORCE_KILL_DRYRUN:
|
|
838
|
+
_log(f"FORCE-KILL-DRYRUN {target}: WOULD kill visible pid {pid} (explicit human stop, "
|
|
839
|
+
f"hb {a.get('heartbeat_age_s')}s) — log-only. Flip _FORCE_KILL_DRYRUN=False to enforce.")
|
|
840
|
+
elif _kill_headless_pid(target, pid):
|
|
841
|
+
pids.pop(target, None)
|
|
842
|
+
n += 1
|
|
843
|
+
_log(f"FORCE-KILL {target}: killed visible pid {pid} (explicit human stop)")
|
|
844
|
+
st["headless_pids"] = pids
|
|
845
|
+
_save_state(st)
|
|
846
|
+
return n
|
|
847
|
+
|
|
848
|
+
|
|
804
849
|
# 38523a98 reaper. Commander guardrail #1: DRY-RUN FIRST — ship LOG-ONLY, confirm ZERO false positives in
|
|
805
850
|
# the logs (REAP-DRYRUN lines), THEN flip _REAP_DRYRUN=False to actually kill. Protects against mis-killing
|
|
806
851
|
# a live agent (Samuel's trauma). Guardrail #2: the orphan grace before reaping a stopped-but-alive zombie.
|
|
@@ -1518,11 +1563,12 @@ def cmd_hostd(args: list) -> int:
|
|
|
1518
1563
|
recycled = _do_recycles(api_key, host_id)
|
|
1519
1564
|
ver_recycled = _do_version_recycles(api_key, host_id)
|
|
1520
1565
|
stopped = _do_stops(api_key, host_id)
|
|
1566
|
+
force_killed = _do_force_kills(api_key, host_id) # 38523a98 Gap1: visible explicit human stop
|
|
1521
1567
|
reaped = _do_reap(api_key, host_id) # 38523a98: kill ghosts/dup-PIDs/crashed-orphans
|
|
1522
1568
|
_gc_headless_pids() # cb90b058: drop dead PIDs (stale entry can't mask a live agent)
|
|
1523
1569
|
_up = int(time.monotonic() - _spawn_mono)
|
|
1524
|
-
if relaunched or recycled or ver_recycled or stopped or enforced or reaped:
|
|
1525
|
-
_log(f"sweep done (uptime={_up}s) — {relaunched} respawned, {recycled} recycled, {ver_recycled} version-recycled, {stopped} stopped, {enforced} recycle-enforced, {reaped} reaped")
|
|
1570
|
+
if relaunched or recycled or ver_recycled or stopped or enforced or reaped or force_killed:
|
|
1571
|
+
_log(f"sweep done (uptime={_up}s) — {relaunched} respawned, {recycled} recycled, {ver_recycled} version-recycled, {stopped} stopped, {force_killed} force-killed, {enforced} recycle-enforced, {reaped} reaped")
|
|
1526
1572
|
elif time.monotonic() - _last_alive_log >= 60:
|
|
1527
1573
|
_log(f"alive — uptime={_up}s")
|
|
1528
1574
|
_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
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py
RENAMED
|
File without changes
|
{meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py
RENAMED
|
File without changes
|
{meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py
RENAMED
|
File without changes
|
|
File without changes
|
{meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.105 → meshcode-2.11.106}/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.105 → meshcode-2.11.106}/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.105 → meshcode-2.11.106}/meshcode-backend-wt/tests/test_migration_integrity.py
RENAMED
|
File without changes
|
{meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/tests/test_realtime_event_freshness.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.105 → meshcode-2.11.106}/meshcode-backend-wt/tests/test_security_regressions.py
RENAMED
|
File without changes
|
|
File without changes
|
{meshcode-2.11.105 → meshcode-2.11.106}/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.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py
RENAMED
|
File without changes
|
{meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py
RENAMED
|
File without changes
|
{meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py
RENAMED
|
File without changes
|
{meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.105 → meshcode-2.11.106}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.105 → meshcode-2.11.106}/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.105 → meshcode-2.11.106}/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.105 → meshcode-2.11.106}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.105 → meshcode-2.11.106}/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.105 → meshcode-2.11.106}/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.105 → meshcode-2.11.106}/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.105 → meshcode-2.11.106}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.105 → meshcode-2.11.106}/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.105 → meshcode-2.11.106}/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.105 → meshcode-2.11.106}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.105 → meshcode-2.11.106}/meshcode-tasks-wt/tests/test_security_regressions.py
RENAMED
|
File without changes
|
|
File without changes
|
{meshcode-2.11.105 → meshcode-2.11.106}/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
|
|
File without changes
|