meshcode 2.11.75__tar.gz → 2.11.77__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.75 → meshcode-2.11.77}/PKG-INFO +1 -1
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/__init__.py +1 -1
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/hostd.py +72 -13
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/run_agent.py +6 -5
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode.egg-info/PKG-INFO +1 -1
- meshcode-2.11.75/meshcode.egg-info/SOURCES 2.txt → meshcode-2.11.77/meshcode.egg-info/SOURCES.txt +0 -12
- {meshcode-2.11.75 → meshcode-2.11.77}/pyproject.toml +1 -1
- meshcode-2.11.75/meshcode/hostd 3.py +0 -509
- meshcode-2.11.75/meshcode.egg-info/PKG-INFO 2 +0 -452
- meshcode-2.11.75/meshcode.egg-info/SOURCES.txt +0 -266
- meshcode-2.11.75/meshcode.egg-info/dependency_links 2.txt +0 -1
- meshcode-2.11.75/meshcode.egg-info/entry_points 2.txt +0 -3
- meshcode-2.11.75/meshcode.egg-info/requires 2.txt +0 -13
- meshcode-2.11.75/meshcode.egg-info/top_level 2.txt +0 -4
- meshcode-2.11.75/tests/test_autonomous_prompt_inject 10.py +0 -126
- meshcode-2.11.75/tests/test_autonomous_prompt_inject 11.py +0 -126
- meshcode-2.11.75/tests/test_autonomous_prompt_inject 12.py +0 -126
- meshcode-2.11.75/tests/test_autonomous_prompt_inject 13.py +0 -126
- meshcode-2.11.75/tests/test_autonomous_prompt_inject 14.py +0 -126
- meshcode-2.11.75/tests/test_autonomous_prompt_inject 15.py +0 -126
- meshcode-2.11.75/tests/test_autonomous_prompt_inject 16.py +0 -126
- meshcode-2.11.75/tests/test_autonomous_prompt_inject 17.py +0 -126
- meshcode-2.11.75/tests/test_autonomous_prompt_inject 18.py +0 -126
- meshcode-2.11.75/tests/test_autonomous_prompt_inject 19.py +0 -126
- meshcode-2.11.75/tests/test_autonomous_prompt_inject 2.py +0 -126
- meshcode-2.11.75/tests/test_autonomous_prompt_inject 20.py +0 -126
- meshcode-2.11.75/tests/test_autonomous_prompt_inject 21.py +0 -126
- meshcode-2.11.75/tests/test_autonomous_prompt_inject 22.py +0 -126
- meshcode-2.11.75/tests/test_autonomous_prompt_inject 3.py +0 -126
- meshcode-2.11.75/tests/test_autonomous_prompt_inject 4.py +0 -126
- meshcode-2.11.75/tests/test_autonomous_prompt_inject 5.py +0 -126
- meshcode-2.11.75/tests/test_autonomous_prompt_inject 6.py +0 -126
- meshcode-2.11.75/tests/test_autonomous_prompt_inject 7.py +0 -126
- meshcode-2.11.75/tests/test_autonomous_prompt_inject 8.py +0 -126
- meshcode-2.11.75/tests/test_autonomous_prompt_inject 9.py +0 -126
- {meshcode-2.11.75 → meshcode-2.11.77}/README.md +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/__main__.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/_stop_hook_template.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/atomic_push.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/claude_update.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/cli.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/compat.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/daemon.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/date_parse.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/doctor.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/error_hints.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/exceptions.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/invites.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/launcher.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/preferences.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/protocol_handler.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/quickstart.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/rpc_allowlist.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/scripts/check_secrets.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/scripts/race_rate_harness.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/secrets.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/self_update.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/supervisor.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/up.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode/upload.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/comms_v4.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_core.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/comms_v4.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_core.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/comms_v4.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_core.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode.egg-info/dependency_links.txt +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode.egg-info/entry_points.txt +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode.egg-info/requires.txt +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/meshcode.egg-info/top_level.txt +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/setup.cfg +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_auto_update_hardening.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_autonomous_closegap_1.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_autonomous_closegap_2.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_autonomous_closegap_3.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_autonomous_prompt_inject.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_boot_bug_regression.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_color_truecolor.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_core.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_date_parse.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_doctor.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_epistemic_v1_python_sdk.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_epistemic_v1_stop_conditions.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_exceptions.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_file_upload.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_init_device_code.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_install_guard.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_lease_sigterm_release.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_marketplace_ratings.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_rpc_grants.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_run_agent_dry_run.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_run_agent_no_server_import.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_self_update_user_site.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_sentinel.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_setup_path.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_sleep_signals.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_stay_on_loop_hook.py +0 -0
- {meshcode-2.11.75 → meshcode-2.11.77}/tests/test_wait_open_tasks_contradiction.py +0 -0
|
@@ -212,10 +212,13 @@ def _spawn_agent(project: str, agent: str, headless: bool = False) -> bool:
|
|
|
212
212
|
# background, NO terminal — UNIVERSAL macOS/Linux/Windows (task c1a6c6a8, mesh-dev specs).
|
|
213
213
|
# Clean env (a stale CLAUDECODE aborts `meshcode run`); keep crash logs in a per-agent logfile
|
|
214
214
|
# (NOT DEVNULL — we want to debug headless agents that die on boot).
|
|
215
|
+
# task 14782bb4: spawned agents DO auto-update (non-blocking) — strip any inherited
|
|
216
|
+
# NO_*UPDATE so the agent's launch runs the bg updater (the daemon launcher stays disabled).
|
|
217
|
+
# No hang: run_agent now uses the NON-blocking updater + we spawn via `python -m meshcode`
|
|
218
|
+
# (not the .exe shim) so a bg `pip install -U` can replace meshcode.exe on Windows.
|
|
215
219
|
env = {k: v for k, v in os.environ.items()
|
|
216
|
-
if k not in ("CLAUDECODE", "CLAUDE_CODE_SESSION"
|
|
217
|
-
|
|
218
|
-
env["MESHCODE_NO_UPDATE"] = "1" # belt-and-suspenders: var honored pre-2.11.74 (no launch-hang)
|
|
220
|
+
if k not in ("CLAUDECODE", "CLAUDE_CODE_SESSION",
|
|
221
|
+
"MESHCODE_NO_UPDATE", "MESHCODE_NO_AUTO_UPDATE")}
|
|
219
222
|
log_dir = STATE_DIR / "logs"
|
|
220
223
|
try:
|
|
221
224
|
log_dir.mkdir(parents=True, exist_ok=True)
|
|
@@ -236,11 +239,11 @@ def _spawn_agent(project: str, agent: str, headless: bool = False) -> bool:
|
|
|
236
239
|
}
|
|
237
240
|
if sys.platform == "win32":
|
|
238
241
|
# CREATE_NO_WINDOW (0x08000000) | DETACHED_PROCESS (0x08): no console window, fully
|
|
239
|
-
# detached from this daemon.
|
|
240
|
-
#
|
|
242
|
+
# detached from this daemon. NEVER pythonw (swallows stderr). Ensure venv Scripts +
|
|
243
|
+
# System32 on PATH (Windows PATH cap ~32k).
|
|
241
244
|
kwargs["creationflags"] = 0x08000000 | 0x00000008
|
|
242
245
|
try:
|
|
243
|
-
scripts = str(Path(
|
|
246
|
+
scripts = str(Path(sys.executable).resolve().parent) # venv Scripts dir
|
|
244
247
|
except Exception:
|
|
245
248
|
scripts = ""
|
|
246
249
|
sysroot = os.environ.get("SystemRoot", r"C:\Windows")
|
|
@@ -250,7 +253,9 @@ def _spawn_agent(project: str, agent: str, headless: bool = False) -> bool:
|
|
|
250
253
|
# POSIX: detach into its own session so it survives the daemon + has no controlling tty.
|
|
251
254
|
kwargs["start_new_session"] = True
|
|
252
255
|
try:
|
|
253
|
-
|
|
256
|
+
# `python -m meshcode` (NOT the meshcode.exe shim) so the .exe isn't held open by the
|
|
257
|
+
# agent -> a background `pip install -U` can replace it on Windows (task 14782bb4 #4).
|
|
258
|
+
subprocess.Popen([sys.executable, "-m", "meshcode", "run", target], **kwargs)
|
|
254
259
|
_log(f"spawned {target} HEADLESS (no window, {sys.platform}; log={log_path})")
|
|
255
260
|
return True
|
|
256
261
|
except Exception as e:
|
|
@@ -267,13 +272,15 @@ def _spawn_agent(project: str, agent: str, headless: bool = False) -> bool:
|
|
|
267
272
|
# command PER-PLATFORM (mesh-core FIX1, 0x80070002): cmd.exe uses & (NOT ';'), set "V=" to clear
|
|
268
273
|
# (NOT bash unset/export), double-quotes (NOT shlex POSIX), no exec — else Windows Terminal splits
|
|
269
274
|
# on ';' -> file-not-found. Layered ON TOP of the 2.11.72 headless-flags fix (visible branch only).
|
|
275
|
+
# task 14782bb4: CLEAR any inherited NO_*UPDATE (so the agent auto-updates non-blocking) and run
|
|
276
|
+
# via `python -m meshcode` (NOT the .exe shim) so a bg `pip install -U` can replace meshcode.exe.
|
|
270
277
|
if sys.platform == "win32":
|
|
271
278
|
cmd = (f'set "CLAUDECODE=" & set "CLAUDE_CODE_SESSION=" & '
|
|
272
|
-
f'set "
|
|
273
|
-
f'"{
|
|
279
|
+
f'set "MESHCODE_NO_UPDATE=" & set "MESHCODE_NO_AUTO_UPDATE=" & '
|
|
280
|
+
f'"{sys.executable}" -m meshcode run "{target}"')
|
|
274
281
|
else:
|
|
275
|
-
cmd = (f"unset CLAUDECODE CLAUDE_CODE_SESSION
|
|
276
|
-
f"
|
|
282
|
+
cmd = (f"unset CLAUDECODE CLAUDE_CODE_SESSION MESHCODE_NO_UPDATE MESHCODE_NO_AUTO_UPDATE; "
|
|
283
|
+
f"exec {shlex.quote(sys.executable)} -m meshcode run {shlex.quote(target)}")
|
|
277
284
|
try:
|
|
278
285
|
from meshcode import protocol_handler as _ph
|
|
279
286
|
ok, info = _ph._spawn_terminal(cmd)
|
|
@@ -619,6 +626,57 @@ def _hostd_bootstrap(verbose: bool = False) -> bool:
|
|
|
619
626
|
return False
|
|
620
627
|
|
|
621
628
|
|
|
629
|
+
def _do_version_recycles(api_key: str, host_id: str) -> int:
|
|
630
|
+
"""Recycle managed agents running an OLDER meshcode than what's installed on disk so they pick up
|
|
631
|
+
the auto-updated version (task 14782bb4 D). GRACIOUS (guardrail #5): idle-only (NEVER a BUSY agent /
|
|
632
|
+
mid-task), rate-limited (<=1 version-recycle per agent / 30min), recycle-not-kill (clean handoff via
|
|
633
|
+
mc_request_recycle -> agent exits at its boundary -> _do_respawns relaunches on the new version).
|
|
634
|
+
Recorded via mc_record_recycle (NEVER counts against the mig406 crash respawn cap). Owner-scoped."""
|
|
635
|
+
cfg = _rpc("mc_host_config_get", {"p_api_key": api_key, "p_host_id": host_id})
|
|
636
|
+
if not cfg or not cfg.get("ok"):
|
|
637
|
+
return 0
|
|
638
|
+
try:
|
|
639
|
+
from meshcode import self_update as _su
|
|
640
|
+
disk = _su._current_version()
|
|
641
|
+
except Exception:
|
|
642
|
+
return 0
|
|
643
|
+
if not disk:
|
|
644
|
+
return 0
|
|
645
|
+
st = _load_state()
|
|
646
|
+
now = time.time()
|
|
647
|
+
n = 0
|
|
648
|
+
for a in cfg.get("agents", []):
|
|
649
|
+
if a.get("desired_state") != "running":
|
|
650
|
+
continue
|
|
651
|
+
cv = a.get("cli_version")
|
|
652
|
+
if not cv:
|
|
653
|
+
continue
|
|
654
|
+
try:
|
|
655
|
+
if not _su._is_newer(disk, cv):
|
|
656
|
+
continue # agent already on the on-disk version (or newer) — nothing to do
|
|
657
|
+
except Exception:
|
|
658
|
+
continue
|
|
659
|
+
if (a.get("status") or "") in BUSY_STATUSES:
|
|
660
|
+
continue # safe-point ONLY — never recycle a working agent mid-task
|
|
661
|
+
proj, agent = a.get("project_name"), a.get("name")
|
|
662
|
+
if not proj or not agent:
|
|
663
|
+
continue
|
|
664
|
+
key = f"verrec/{a.get('project_id')}/{agent}"
|
|
665
|
+
if now - float(st.get(key, 0) or 0) < 1800:
|
|
666
|
+
continue # rate-limit: <=1 version-recycle per agent / 30min (no recycle-storm)
|
|
667
|
+
req = _rpc("mc_request_recycle",
|
|
668
|
+
{"p_api_key": api_key, "p_project_id": a.get("project_id"), "p_agent_name": agent})
|
|
669
|
+
if req and req.get("ok") and req.get("requested"):
|
|
670
|
+
_rpc("mc_record_recycle",
|
|
671
|
+
{"p_api_key": api_key, "p_project_id": a.get("project_id"), "p_agent_name": agent})
|
|
672
|
+
st[key] = now
|
|
673
|
+
n += 1
|
|
674
|
+
_log(f"VERSION-RECYCLE {proj}/{agent}: running {cv} < disk {disk} — recycle at idle to update")
|
|
675
|
+
if n:
|
|
676
|
+
_save_state(st)
|
|
677
|
+
return n
|
|
678
|
+
|
|
679
|
+
|
|
622
680
|
def cmd_hostd(args: list) -> int:
|
|
623
681
|
"""Entry point for `meshcode hostd ...`."""
|
|
624
682
|
if not args or args[0] in ("-h", "--help"):
|
|
@@ -661,8 +719,9 @@ def cmd_hostd(args: list) -> int:
|
|
|
661
719
|
try:
|
|
662
720
|
relaunched = _do_respawns(api_key, host_id)
|
|
663
721
|
recycled = _do_recycles(api_key, host_id)
|
|
664
|
-
|
|
665
|
-
|
|
722
|
+
ver_recycled = _do_version_recycles(api_key, host_id)
|
|
723
|
+
if relaunched or recycled or ver_recycled:
|
|
724
|
+
_log(f"sweep done — {relaunched} respawned, {recycled} recycled, {ver_recycled} version-recycled")
|
|
666
725
|
except Exception as e:
|
|
667
726
|
_log(f"WARN: sweep error: {e}")
|
|
668
727
|
time.sleep(POLL_INTERVAL_SEC)
|
|
@@ -698,13 +698,14 @@ def run(agent: str, project: Optional[str] = None, editor_override: Optional[str
|
|
|
698
698
|
# Propagate autonomous flag to the editor + MCP child via env var.
|
|
699
699
|
if autonomous:
|
|
700
700
|
os.environ["MESHCODE_AUTONOMOUS"] = "1"
|
|
701
|
-
#
|
|
702
|
-
#
|
|
703
|
-
#
|
|
704
|
-
#
|
|
701
|
+
# NON-BLOCKING self-update (task 14782bb4): kick a detached background `pip install -U meshcode`
|
|
702
|
+
# and return IMMEDIATELY — the launch NEVER waits/hangs (Samuel req; the old blocking variant hung
|
|
703
|
+
# every Windows launch on WinError 32). This launch runs the current version; the next spawn/recycle
|
|
704
|
+
# picks up the new one (two-launch async). Skip in dry-run (CI/pre-publish smokes must not fork pip).
|
|
705
|
+
# Fully opt-out via MESHCODE_NO_UPDATE / MESHCODE_NO_AUTO_UPDATE (handled inside check_and_maybe_update).
|
|
705
706
|
if not dry_run:
|
|
706
707
|
try:
|
|
707
|
-
self_update.
|
|
708
|
+
self_update.check_and_maybe_update()
|
|
708
709
|
except Exception:
|
|
709
710
|
pass
|
|
710
711
|
|
meshcode-2.11.75/meshcode.egg-info/SOURCES 2.txt → meshcode-2.11.77/meshcode.egg-info/SOURCES.txt
RENAMED
|
@@ -5,9 +5,6 @@ meshcode/__main__.py
|
|
|
5
5
|
meshcode/_stop_hook_template.py
|
|
6
6
|
meshcode/ascii_art.py
|
|
7
7
|
meshcode/atomic_push.py
|
|
8
|
-
meshcode/claude_update 2.py
|
|
9
|
-
meshcode/claude_update 3.py
|
|
10
|
-
meshcode/claude_update 4.py
|
|
11
8
|
meshcode/claude_update.py
|
|
12
9
|
meshcode/cli.py
|
|
13
10
|
meshcode/comms_v4.py
|
|
@@ -17,9 +14,6 @@ meshcode/date_parse.py
|
|
|
17
14
|
meshcode/doctor.py
|
|
18
15
|
meshcode/error_hints.py
|
|
19
16
|
meshcode/exceptions.py
|
|
20
|
-
meshcode/hostd 2.py
|
|
21
|
-
meshcode/hostd 3.py
|
|
22
|
-
meshcode/hostd 4.py
|
|
23
17
|
meshcode/hostd.py
|
|
24
18
|
meshcode/invites.py
|
|
25
19
|
meshcode/launcher.py
|
|
@@ -34,8 +28,6 @@ meshcode/secrets.py
|
|
|
34
28
|
meshcode/self_update.py
|
|
35
29
|
meshcode/setup_clients.py
|
|
36
30
|
meshcode/supervisor.py
|
|
37
|
-
meshcode/up 2.py
|
|
38
|
-
meshcode/up 3.py
|
|
39
31
|
meshcode/up.py
|
|
40
32
|
meshcode/upload.py
|
|
41
33
|
meshcode-backend-wt/comms_v4.py
|
|
@@ -212,10 +204,6 @@ tests/test_auto_update_hardening.py
|
|
|
212
204
|
tests/test_autonomous_closegap_1.py
|
|
213
205
|
tests/test_autonomous_closegap_2.py
|
|
214
206
|
tests/test_autonomous_closegap_3.py
|
|
215
|
-
tests/test_autonomous_prompt_inject 2.py
|
|
216
|
-
tests/test_autonomous_prompt_inject 3.py
|
|
217
|
-
tests/test_autonomous_prompt_inject 4.py
|
|
218
|
-
tests/test_autonomous_prompt_inject 5.py
|
|
219
207
|
tests/test_autonomous_prompt_inject.py
|
|
220
208
|
tests/test_boot_bug_regression.py
|
|
221
209
|
tests/test_color_truecolor.py
|