meshcode 2.11.172__tar.gz → 2.11.173__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.172 → meshcode-2.11.173}/PKG-INFO +1 -1
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/__init__.py +1 -1
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/hostd.py +27 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode.egg-info/PKG-INFO +1 -1
- {meshcode-2.11.172 → meshcode-2.11.173}/pyproject.toml +1 -1
- {meshcode-2.11.172 → meshcode-2.11.173}/README.md +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/__main__.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/_launch_smoke.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/_session_handoff_template.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/_stop_hook_template.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/_update_guard.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/atomic_push.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/claude_update.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/cli.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/compat.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/daemon.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/date_parse.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/doctor.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/error_hints.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/exceptions.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/hooks/__init__.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/hooks/push_guard.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/hooks/repo_path_lock.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/invites.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/launcher.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/preferences.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/protocol_handler.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/quickstart.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/rpc_allowlist.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/run_agent.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/scripts/check_secrets.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/scripts/race_rate_harness.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/secrets.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/self_update.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/supervisor.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/terminal_mirror_runner.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/up.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode/upload.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode.egg-info/SOURCES.txt +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode.egg-info/dependency_links.txt +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode.egg-info/entry_points.txt +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode.egg-info/requires.txt +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/meshcode.egg-info/top_level.txt +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/setup.cfg +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_auto_update_hardening.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_autonomous_closegap_1.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_autonomous_closegap_2.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_autonomous_closegap_3.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_autonomous_prompt_inject.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_boot_bug_regression.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_color_truecolor.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_core.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_date_parse.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_doctor.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_ensure_boot_env_urgent_wake.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_epistemic_v1_python_sdk.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_epistemic_v1_stop_conditions.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_exceptions.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_file_upload.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_fleet_reaper.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_hostd_launch_pinned_env.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_hostd_serve_discovery_split.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_hostd_zombie_sessions.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_init_device_code.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_install_guard.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_launch_smoke.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_lease_sigterm_release.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_live_mesh_guard.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_marketplace_ratings.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_no_appleevents_on_sweep.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_preflight_hb_gate.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_pretrust_claude.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_prompt_dedup_budget.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_push_guard.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_replica_base_workspace_fallback.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_replica_boot_protocol_unconditional.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_rm_guard.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_rpc_grants.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_run_agent_dry_run.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_run_agent_no_server_import.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_self_update_user_site.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_sentinel.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_session_replay_gate.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_setup_path.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_sleep_signals.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_stay_on_loop_hook.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_stop_ghost_terminal.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_task_progress.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_terminal_lifecycle.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_up_launch_cmd.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_update_guard.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_urgent_wake_tmux.py +0 -0
- {meshcode-2.11.172 → meshcode-2.11.173}/tests/test_wait_open_tasks_contradiction.py +0 -0
|
@@ -3308,6 +3308,33 @@ def cmd_hostd(args: list) -> int:
|
|
|
3308
3308
|
sys.excepthook = lambda t, v, tb: _log("UNCAUGHT: " + "".join(_tbmod.format_exception(t, v, tb)))
|
|
3309
3309
|
except Exception:
|
|
3310
3310
|
pass
|
|
3311
|
+
# task cccb0b88: DEATH-MARKER — hostd must never exit silently again
|
|
3312
|
+
# (2026-07-03: died 11:16:46 with no FATAL line). atexit covers normal
|
|
3313
|
+
# interpreter exit / sys.exit; handlers cover TERM/INT/HUP and re-raise
|
|
3314
|
+
# with SIG_DFL so launchd still sees the true exit status (KeepAlive
|
|
3315
|
+
# relaunch semantics unchanged). SIGKILL/OOM is unloggable by the dying
|
|
3316
|
+
# process — covered server-side by mc_hostd_absent_sweep (mig 704).
|
|
3317
|
+
try:
|
|
3318
|
+
import atexit as _atexit
|
|
3319
|
+
_death_spawn_mono = time.monotonic()
|
|
3320
|
+
def _death_marker(reason: str) -> None:
|
|
3321
|
+
try:
|
|
3322
|
+
_log(f"DEATH-MARKER: hostd exiting reason={reason} pid={os.getpid()} "
|
|
3323
|
+
f"uptime={int(time.monotonic() - _death_spawn_mono)}s")
|
|
3324
|
+
except Exception:
|
|
3325
|
+
pass
|
|
3326
|
+
_atexit.register(_death_marker, "atexit")
|
|
3327
|
+
def _death_sig(signum, frame):
|
|
3328
|
+
_death_marker(f"signal-{_signal.Signals(signum).name}")
|
|
3329
|
+
_signal.signal(signum, _signal.SIG_DFL)
|
|
3330
|
+
os.kill(os.getpid(), signum)
|
|
3331
|
+
for _s in (_signal.SIGTERM, _signal.SIGINT, _signal.SIGHUP):
|
|
3332
|
+
try:
|
|
3333
|
+
_signal.signal(_s, _death_sig)
|
|
3334
|
+
except Exception:
|
|
3335
|
+
pass
|
|
3336
|
+
except Exception:
|
|
3337
|
+
pass
|
|
3311
3338
|
# Register this host in mc_host_config so the dashboard can list it as a launch target.
|
|
3312
3339
|
_reg = _rpc("mc_host_config_set", {"p_api_key": api_key, "p_host_id": host_id})
|
|
3313
3340
|
if _reg and _reg.get("ok"):
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|