meshcode 2.11.105__tar.gz → 2.11.107__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.107}/PKG-INFO +1 -1
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/__init__.py +1 -1
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/hostd.py +48 -2
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/meshcode_mcp/server.py +27 -5
- meshcode-2.11.107/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +4117 -0
- meshcode-2.11.107/meshcode-backend-wt/meshcode/run_agent.py +958 -0
- meshcode-2.11.107/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +638 -0
- meshcode-2.11.107/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +3563 -0
- meshcode-2.11.107/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +460 -0
- meshcode-2.11.107/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +4117 -0
- meshcode-2.11.107/meshcode-noun-wt/build/lib/meshcode/run_agent.py +958 -0
- meshcode-2.11.107/meshcode-noun-wt/comms_v4.py +1941 -0
- meshcode-2.11.107/meshcode-noun-wt/meshcode/ascii_art.py +638 -0
- meshcode-2.11.107/meshcode-noun-wt/meshcode/comms_v4.py +3563 -0
- meshcode-2.11.107/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +1261 -0
- meshcode-2.11.107/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +460 -0
- meshcode-2.11.107/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +4117 -0
- meshcode-2.11.107/meshcode-noun-wt/meshcode/run_agent.py +958 -0
- meshcode-2.11.107/meshcode-noun-wt/meshcode/setup_clients.py +926 -0
- meshcode-2.11.107/meshcode-tasks-wt/comms_v4.py +1941 -0
- meshcode-2.11.107/meshcode-tasks-wt/meshcode/ascii_art.py +638 -0
- meshcode-2.11.107/meshcode-tasks-wt/meshcode/comms_v4.py +3563 -0
- meshcode-2.11.107/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +1261 -0
- meshcode-2.11.107/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +460 -0
- meshcode-2.11.107/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +4117 -0
- meshcode-2.11.107/meshcode-tasks-wt/meshcode/run_agent.py +958 -0
- meshcode-2.11.107/meshcode-tasks-wt/meshcode/setup_clients.py +926 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode.egg-info/PKG-INFO +1 -1
- {meshcode-2.11.105 → meshcode-2.11.107}/pyproject.toml +1 -1
- meshcode-2.11.105/meshcode-backend-wt/comms_v4.py +0 -0
- meshcode-2.11.105/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
- meshcode-2.11.105/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- meshcode-2.11.105/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
- meshcode-2.11.105/meshcode-backend-wt/meshcode/run_agent.py +0 -0
- meshcode-2.11.105/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
- meshcode-2.11.105/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
- meshcode-2.11.105/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
- meshcode-2.11.105/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
- meshcode-2.11.105/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
- meshcode-2.11.105/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
- meshcode-2.11.105/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
- meshcode-2.11.105/meshcode-noun-wt/comms_v4.py +0 -0
- meshcode-2.11.105/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
- meshcode-2.11.105/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
- meshcode-2.11.105/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
- meshcode-2.11.105/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- meshcode-2.11.105/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
- meshcode-2.11.105/meshcode-noun-wt/meshcode/run_agent.py +0 -0
- meshcode-2.11.105/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
- meshcode-2.11.105/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
- meshcode-2.11.105/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
- meshcode-2.11.105/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/README.md +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/__main__.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/_session_handoff_template 2.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/_session_handoff_template 3.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/_session_handoff_template.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/_stop_hook_template.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/atomic_push.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/claude_update 2.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/claude_update 3.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/claude_update.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/cli.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/compat.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/daemon.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/date_parse.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/doctor.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/error_hints.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/exceptions.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/hostd 2.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/invites.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/launcher.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/preferences.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/protocol_handler.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/quickstart.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/rpc_allowlist.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/run_agent.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/scripts/check_secrets.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/scripts/race_rate_harness.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/secrets.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/self_update.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/supervisor.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/up 2.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/up.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode/upload.py +0 -0
- {meshcode-2.11.105/meshcode-tasks-wt → meshcode-2.11.107/meshcode-backend-wt}/comms_v4.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.105/meshcode-noun-wt/build/lib → meshcode-2.11.107/meshcode-backend-wt}/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.105/meshcode-tasks-wt → meshcode-2.11.107/meshcode-backend-wt}/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.105/meshcode-noun-wt → meshcode-2.11.107/meshcode-backend-wt}/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/tests/test_core.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.105/meshcode-tasks-wt → meshcode-2.11.107/meshcode-noun-wt/build/lib}/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
- {meshcode-2.11.105/meshcode-tasks-wt → meshcode-2.11.107/meshcode-noun-wt/build/lib}/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/tests/test_core.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/tests/test_core.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode.egg-info/PKG-INFO 2 +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode.egg-info/SOURCES 2.txt +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode.egg-info/SOURCES.txt +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode.egg-info/dependency_links 2.txt +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode.egg-info/dependency_links.txt +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode.egg-info/entry_points 2.txt +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode.egg-info/entry_points.txt +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode.egg-info/requires 2.txt +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode.egg-info/requires.txt +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode.egg-info/top_level 2.txt +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/meshcode.egg-info/top_level.txt +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/setup.cfg +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_auto_update_hardening.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_autonomous_closegap_1.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_autonomous_closegap_2.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_autonomous_closegap_3.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_autonomous_prompt_inject 2.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_autonomous_prompt_inject 3.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_autonomous_prompt_inject.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_boot_bug_regression.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_color_truecolor.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_core.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_date_parse.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_doctor.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_epistemic_v1_python_sdk.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_epistemic_v1_stop_conditions.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_exceptions.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_file_upload.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_init_device_code.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_install_guard.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_lease_sigterm_release.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_marketplace_ratings.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_rpc_grants.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_run_agent_dry_run.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_run_agent_no_server_import.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_self_update_user_site.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_sentinel.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_setup_path.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_sleep_signals.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/tests/test_stay_on_loop_hook.py +0 -0
- {meshcode-2.11.105 → meshcode-2.11.107}/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()
|
|
@@ -4030,14 +4030,36 @@ async def meshcode_wait(timeout_seconds: int = 20, include_acks: bool = False) -
|
|
|
4030
4030
|
# legacy "no paraba hasta completar todos" cadence. Non-leader
|
|
4031
4031
|
# agents only — leaders need to stay in wait to triage wildcard
|
|
4032
4032
|
# tasks for the mesh.
|
|
4033
|
-
|
|
4034
|
-
|
|
4035
|
-
|
|
4036
|
-
|
|
4033
|
+
# DURABLE-NO-IDLE-SPIN (task 2adb1705): the task-pull short-circuit must
|
|
4034
|
+
# only fire for tasks that still need STARTING (status 'open'). A task
|
|
4035
|
+
# already in_progress by THIS agent means it has been started and is being
|
|
4036
|
+
# worked — or is BLOCKED on an external gate (e.g. a missing credential).
|
|
4037
|
+
# Re-emitting the pull every wait for an in_progress task is exactly the
|
|
4038
|
+
# idle-spin that burned ~45min/148k tokens re-printing "holding". So we
|
|
4039
|
+
# only short-circuit on _tasks_to_start; in_progress tasks fall through to
|
|
4040
|
+
# the normal message-blocking wait (surfaced as a non-blocking reminder).
|
|
4041
|
+
_tasks_to_start = [t for t in (pending_tasks or []) if t.get("status") == "open"]
|
|
4042
|
+
_in_progress_mine = [t for t in (pending_tasks or []) if t.get("status") == "in_progress"]
|
|
4043
|
+
# CHAT-DELIVERY-FIX (2026-06-04, Samuel "fix now"): message delivery MUST take
|
|
4044
|
+
# priority over the task-pull short-circuit. Previously this block returned BEFORE
|
|
4045
|
+
# PRODUCT RULE 2 (below), so any agent holding an OPEN task went DEAF to incoming
|
|
4046
|
+
# messages — never read them, no blue check, the human's chat appeared broken
|
|
4047
|
+
# ("te escribo y no sale palomita azul en nadie"). If there are unread messages,
|
|
4048
|
+
# skip task_pull and fall through to PRODUCT RULE 2 so they get delivered + marked
|
|
4049
|
+
# read first. Task-pull still fires normally when the inbox is empty.
|
|
4050
|
+
_has_unread = False
|
|
4051
|
+
try:
|
|
4052
|
+
_has_unread = bool(be.count_pending(_PROJECT_ID, AGENT_NAME, api_key=_get_api_key()))
|
|
4053
|
+
except Exception:
|
|
4054
|
+
_has_unread = False
|
|
4055
|
+
if _tasks_to_start and not _is_leader_agent() and not _has_unread:
|
|
4056
|
+
# Auto-start the highest priority OPEN task so the agent sees it as
|
|
4057
|
+
# in_progress and works it immediately. Samuel directive: "agents
|
|
4058
|
+
# should claim and work right away one by one."
|
|
4037
4059
|
_auto_started = None
|
|
4038
4060
|
_PRIO_ORDER = {"urgent": 0, "high": 1, "normal": 2, "low": 3}
|
|
4039
4061
|
_sorted_pending = sorted(
|
|
4040
|
-
|
|
4062
|
+
_tasks_to_start,
|
|
4041
4063
|
key=lambda t: (_PRIO_ORDER.get(t.get("priority", "normal"), 2), t.get("id", "")),
|
|
4042
4064
|
)
|
|
4043
4065
|
for _pt in _sorted_pending:
|