meshcode 2.11.42__tar.gz → 2.11.44__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.42 → meshcode-2.11.44}/PKG-INFO +1 -1
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/__init__.py +1 -1
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/comms_v4.py +60 -4
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/meshcode_mcp/backend.py +19 -1
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/meshcode_mcp/server.py +40 -5
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/run_agent.py +9 -1
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/setup_clients.py +37 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode.egg-info/PKG-INFO +1 -1
- meshcode-2.11.44/meshcode.egg-info/PKG-INFO 2 +452 -0
- meshcode-2.11.44/meshcode.egg-info/SOURCES.txt +235 -0
- meshcode-2.11.44/meshcode.egg-info/dependency_links.txt +1 -0
- meshcode-2.11.44/meshcode.egg-info/entry_points.txt +3 -0
- meshcode-2.11.44/meshcode.egg-info/requires.txt +13 -0
- meshcode-2.11.44/meshcode.egg-info/top_level.txt +4 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/pyproject.toml +1 -1
- {meshcode-2.11.42 → meshcode-2.11.44}/README.md +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/__main__.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/_stop_hook_template.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/atomic_push.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/cli.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/compat.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/daemon.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/date_parse.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/doctor.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/error_hints.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/exceptions.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/invites.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/launcher.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/preferences.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/protocol_handler.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/quickstart.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/rpc_allowlist.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/scripts/check_secrets.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/scripts/race_rate_harness.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/secrets.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/self_update.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/supervisor.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/upload.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/comms_v4.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/tests/test_core.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/comms_v4.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/tests/test_core.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/comms_v4.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/tests/test_core.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
- /meshcode-2.11.42/meshcode.egg-info/SOURCES.txt → /meshcode-2.11.44/meshcode.egg-info/SOURCES 2.txt +0 -0
- /meshcode-2.11.42/meshcode.egg-info/dependency_links.txt → /meshcode-2.11.44/meshcode.egg-info/dependency_links 2.txt +0 -0
- /meshcode-2.11.42/meshcode.egg-info/entry_points.txt → /meshcode-2.11.44/meshcode.egg-info/entry_points 2.txt +0 -0
- /meshcode-2.11.42/meshcode.egg-info/requires.txt → /meshcode-2.11.44/meshcode.egg-info/requires 2.txt +0 -0
- /meshcode-2.11.42/meshcode.egg-info/top_level.txt → /meshcode-2.11.44/meshcode.egg-info/top_level 2.txt +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/setup.cfg +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_auto_update_hardening.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_boot_bug_regression.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_color_truecolor.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_core.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_date_parse.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_doctor.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_epistemic_v1_python_sdk.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_epistemic_v1_stop_conditions.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_exceptions.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_init_device_code.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_install_guard.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_lease_sigterm_release.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_rpc_grants.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_run_agent_dry_run.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_run_agent_no_server_import.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_self_update_user_site.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_sentinel.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_setup_path.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_sleep_signals.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_stay_on_loop_hook.py +0 -0
- {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_wait_open_tasks_contradiction.py +0 -0
|
@@ -1602,13 +1602,23 @@ def show_status(project=None):
|
|
|
1602
1602
|
continue
|
|
1603
1603
|
|
|
1604
1604
|
print(f"\n [{proj['name']}]")
|
|
1605
|
+
_autonomous_count = 0
|
|
1605
1606
|
for a in agents:
|
|
1606
1607
|
# Count pending
|
|
1607
1608
|
pending = sb_select("mc_messages",
|
|
1608
1609
|
f"project_id=eq.{proj['id']}&to_agent=eq.{quote(a['name'])}&read=eq.false&type=neq.ack")
|
|
1609
1610
|
pcount = len(pending)
|
|
1610
1611
|
icon = "●" if pcount > 0 else "○"
|
|
1611
|
-
|
|
1612
|
+
_auto_marker = " 🔆" if a.get("autonomous_mode") else ""
|
|
1613
|
+
if a.get("autonomous_mode"):
|
|
1614
|
+
_autonomous_count += 1
|
|
1615
|
+
print(f" {icon} {a['name']:<14} {a.get('role',''):<25} pending: {pcount}{_auto_marker}")
|
|
1616
|
+
# AUTONOMOUS-MODE-UNIVERSAL P8 (task f57aa2d2): if multi-agent mesh
|
|
1617
|
+
# has 0% autonomous adoption, surface a 1-line hint so users see the
|
|
1618
|
+
# bottleneck without reading a memo. Hint hidden when single-agent
|
|
1619
|
+
# mesh or any agent is already autonomous (signal-only, no noise).
|
|
1620
|
+
if len(agents) >= 2 and _autonomous_count == 0:
|
|
1621
|
+
print(f" 💡 0/{len(agents)} agents autonomous. Re-run each with `--autonomous` (or `export MESHCODE_AUTONOMOUS=1`) to enable parallel self-driven work.")
|
|
1612
1622
|
print()
|
|
1613
1623
|
|
|
1614
1624
|
|
|
@@ -2734,7 +2744,7 @@ if __name__ == "__main__":
|
|
|
2734
2744
|
|
|
2735
2745
|
# Strip bare boolean flags from argv before parsing so they don't end
|
|
2736
2746
|
# up as positional args (e.g. --compact is a bare flag, not key=value).
|
|
2737
|
-
BARE_FLAGS = {"--compact", "--legacy", "--no-hook", "--mcp-only"}
|
|
2747
|
+
BARE_FLAGS = {"--compact", "--legacy", "--no-hook", "--mcp-only", "--autonomous"}
|
|
2738
2748
|
_bare_present = {a.lstrip("-") for a in sys.argv[2:] if a in BARE_FLAGS}
|
|
2739
2749
|
_argv_for_parse = [a for a in sys.argv[2:] if a not in BARE_FLAGS]
|
|
2740
2750
|
|
|
@@ -3038,6 +3048,45 @@ if __name__ == "__main__":
|
|
|
3038
3048
|
proj = sys.argv[2] if len(sys.argv) > 2 else None
|
|
3039
3049
|
show_status(proj)
|
|
3040
3050
|
|
|
3051
|
+
elif cmd in ("wake-all", "wakeall"):
|
|
3052
|
+
# AUTONOMOUS-MODE-UNIVERSAL P9 (task f57aa2d2): print copy-paste
|
|
3053
|
+
# launch commands for every offline agent in a meshwork. No process
|
|
3054
|
+
# control (those terminals are gone); just frictionless bootstrap.
|
|
3055
|
+
proj = sys.argv[2] if len(sys.argv) > 2 else None
|
|
3056
|
+
if not proj:
|
|
3057
|
+
print("Usage: meshcode wake-all <project>")
|
|
3058
|
+
sys.exit(1)
|
|
3059
|
+
api_key = _load_api_key_for_cli()
|
|
3060
|
+
if not api_key:
|
|
3061
|
+
print("[meshcode] Not logged in. Run: meshcode login <api_key>")
|
|
3062
|
+
sys.exit(1)
|
|
3063
|
+
_projs = sb_rpc("mc_list_user_projects", {"p_api_key": api_key})
|
|
3064
|
+
_agents = []
|
|
3065
|
+
if isinstance(_projs, dict) and _projs.get("projects"):
|
|
3066
|
+
for _p in _projs["projects"]:
|
|
3067
|
+
if _p.get("name") == proj:
|
|
3068
|
+
_agents = _p.get("agents") or []
|
|
3069
|
+
break
|
|
3070
|
+
if not _agents:
|
|
3071
|
+
print(f"[meshcode] No agents found in meshwork '{proj}'. Check the name with `meshcode projects`.")
|
|
3072
|
+
sys.exit(1)
|
|
3073
|
+
_offline = [a for a in _agents if a.get("status") in ("offline", "sleeping", None)]
|
|
3074
|
+
_online = [a for a in _agents if a not in _offline]
|
|
3075
|
+
print(f"[meshcode] meshwork '{proj}': {len(_online)} online, {len(_offline)} offline.")
|
|
3076
|
+
if not _offline:
|
|
3077
|
+
print(f"[meshcode] ✓ All agents already online. Nothing to wake.")
|
|
3078
|
+
sys.exit(0)
|
|
3079
|
+
print(f"[meshcode]")
|
|
3080
|
+
print(f"[meshcode] Copy-paste these into separate terminal panes to wake the offline agents")
|
|
3081
|
+
print(f"[meshcode] in autonomous mode (so they self-progress without per-step prompting):")
|
|
3082
|
+
print(f"[meshcode]")
|
|
3083
|
+
for a in _offline:
|
|
3084
|
+
print(f" meshcode run {proj}/{a.get('name', '?')} --autonomous")
|
|
3085
|
+
print(f"[meshcode]")
|
|
3086
|
+
print(f"[meshcode] Tip: `export MESHCODE_AUTONOMOUS=1` once in your shell rc, then you")
|
|
3087
|
+
print(f"[meshcode] can drop the `--autonomous` flag for the rest of the session.")
|
|
3088
|
+
sys.exit(0)
|
|
3089
|
+
|
|
3041
3090
|
elif cmd in ("projects", "list", "ls"):
|
|
3042
3091
|
list_projects()
|
|
3043
3092
|
|
|
@@ -3259,9 +3308,16 @@ if __name__ == "__main__":
|
|
|
3259
3308
|
else:
|
|
3260
3309
|
print("[meshcode] Login required. Run: meshcode login <api_key>")
|
|
3261
3310
|
sys.exit(1)
|
|
3311
|
+
# AUTONOMOUS-MODE-UNIVERSAL (task f248d98e): --autonomous flag OR
|
|
3312
|
+
# MESHCODE_AUTONOMOUS=1 env var → register-time autonomous=true.
|
|
3313
|
+
# Memo decision Q3: scope is `meshcode run` + add-agent. Env var
|
|
3314
|
+
# acts as shell-session default; explicit flag wins per-launch.
|
|
3315
|
+
autonomous_env = (os.environ.get("MESHCODE_AUTONOMOUS", "").strip().lower()
|
|
3316
|
+
in ("1", "true", "yes", "on"))
|
|
3317
|
+
autonomous = bool(flags.get("autonomous")) or autonomous_env
|
|
3262
3318
|
import importlib
|
|
3263
3319
|
_run = importlib.import_module("meshcode.run_agent").run
|
|
3264
|
-
sys.exit(_run(agent, project=proj_override, editor_override=editor_override, permission_override=perm_override, dry_run=dry_run))
|
|
3320
|
+
sys.exit(_run(agent, project=proj_override, editor_override=editor_override, permission_override=perm_override, dry_run=dry_run, autonomous=autonomous))
|
|
3265
3321
|
|
|
3266
3322
|
elif cmd == "scan":
|
|
3267
3323
|
# meshcode scan — detect identicon from stdin/clipboard and launch agent
|
|
@@ -3736,7 +3792,7 @@ if __name__ == "__main__":
|
|
|
3736
3792
|
"setup", "run", "go", "invite", "join", "invites", "members",
|
|
3737
3793
|
"revoke-invite", "revoke-member", "login", "prefs", "launcher",
|
|
3738
3794
|
"help", "init", "doctor", "compat", "upgrade", "profile", "validate-sessions", "wake-headless",
|
|
3739
|
-
"supervisor", "upload", "quickstart", "patch-hooks",
|
|
3795
|
+
"supervisor", "upload", "quickstart", "patch-hooks", "wake-all",
|
|
3740
3796
|
]
|
|
3741
3797
|
# Simple fuzzy: prefix match + Levenshtein-like best match
|
|
3742
3798
|
suggestions = [c for c in known_cmds if c.startswith(cmd)]
|
|
@@ -615,12 +615,30 @@ def register_agent(project: str, name: str, role: str = "", api_key: Optional[st
|
|
|
615
615
|
f"project_id=eq.{project_id}&name=eq.{quote(name)}",
|
|
616
616
|
{"task": role})
|
|
617
617
|
|
|
618
|
-
|
|
618
|
+
# AUTONOMOUS-MODE-UNIVERSAL (task f248d98e Phase 1): if launched with
|
|
619
|
+
# `meshcode run --autonomous` or MESHCODE_AUTONOMOUS=1, flip autonomous
|
|
620
|
+
# mode at register-time. RPC mc_agent_set_autonomous exists per mig 354.
|
|
621
|
+
# Best-effort: register success is reported even if autonomous flip fails.
|
|
622
|
+
_autonomous_out: Optional[bool] = None
|
|
623
|
+
if os.environ.get("MESHCODE_AUTONOMOUS", "").strip().lower() in ("1", "true", "yes", "on"):
|
|
624
|
+
_set_resp = sb_rpc("mc_agent_set_autonomous", {
|
|
625
|
+
"p_api_key": _ak or "",
|
|
626
|
+
"p_project_id": project_id,
|
|
627
|
+
"p_agent_name": name,
|
|
628
|
+
"p_enabled": True,
|
|
629
|
+
})
|
|
630
|
+
if isinstance(_set_resp, dict) and _set_resp.get("ok"):
|
|
631
|
+
_autonomous_out = True
|
|
632
|
+
|
|
633
|
+
out = {
|
|
619
634
|
"registered": True,
|
|
620
635
|
"project_id": project_id,
|
|
621
636
|
"agent_name": name,
|
|
622
637
|
"agent_id": result.get("agent_id") if isinstance(result, dict) else None,
|
|
623
638
|
}
|
|
639
|
+
if _autonomous_out is not None:
|
|
640
|
+
out["autonomous_mode"] = _autonomous_out
|
|
641
|
+
return out
|
|
624
642
|
|
|
625
643
|
|
|
626
644
|
# TTL cache for resolve_agent_name — avoids N+1 queries on every send().
|
|
@@ -3541,6 +3541,10 @@ async def meshcode_wait(timeout_seconds: int = 20, include_acks: bool = False) -
|
|
|
3541
3541
|
_snap = _get_mesh_online_snapshot()
|
|
3542
3542
|
if _snap is not None:
|
|
3543
3543
|
resp["mesh_online_snapshot"] = _snap
|
|
3544
|
+
# AUTONOMOUS-MODE-UNIVERSAL (task f248d98e Phase 1):
|
|
3545
|
+
# surface autonomy on the refused-path too so check
|
|
3546
|
+
# parity holds when wait short-circuits on unread msgs.
|
|
3547
|
+
resp["you_are_autonomous"] = _get_autonomous_mode()
|
|
3544
3548
|
return resp
|
|
3545
3549
|
# Ack-only batch — fall through to wait loop
|
|
3546
3550
|
except Exception:
|
|
@@ -3667,10 +3671,13 @@ async def meshcode_wait(timeout_seconds: int = 20, include_acks: bool = False) -
|
|
|
3667
3671
|
_snapshot = _get_mesh_online_snapshot()
|
|
3668
3672
|
if _snapshot is not None:
|
|
3669
3673
|
result["mesh_online_snapshot"] = _snapshot
|
|
3670
|
-
# AUTONOMOUS-MODE-1-RUNTIME
|
|
3671
|
-
# whether to operate proactively.
|
|
3674
|
+
# AUTONOMOUS-MODE-1-RUNTIME + UNIVERSAL (task f248d98e Phase 1):
|
|
3675
|
+
# surface the flag so the LLM knows whether to operate proactively.
|
|
3676
|
+
# `you_are_autonomous` is the canonical field per commander memo
|
|
3677
|
+
# decisions msg 29cae7f9; `autonomous_mode` retained for back-compat.
|
|
3672
3678
|
if isinstance(result, dict):
|
|
3673
3679
|
result["autonomous_mode"] = _autonomous
|
|
3680
|
+
result["you_are_autonomous"] = _autonomous
|
|
3674
3681
|
return result
|
|
3675
3682
|
finally:
|
|
3676
3683
|
_IN_WAIT = False
|
|
@@ -4019,6 +4026,11 @@ def meshcode_check(include_acks: bool = False, since: Optional[str] = None, mark
|
|
|
4019
4026
|
_ctx = _calendar_context_for_self()
|
|
4020
4027
|
if _ctx is not None:
|
|
4021
4028
|
result["calendar_context"] = _ctx
|
|
4029
|
+
# AUTONOMOUS-MODE-UNIVERSAL (task f248d98e Phase 1): surface autonomous
|
|
4030
|
+
# state on every check so agents have constant awareness without extra
|
|
4031
|
+
# tool calls. Uses 15s-TTL cache (_get_autonomous_mode), one RPC per cache
|
|
4032
|
+
# window — negligible cost on the inbox poll path.
|
|
4033
|
+
result["you_are_autonomous"] = _get_autonomous_mode()
|
|
4022
4034
|
return result
|
|
4023
4035
|
|
|
4024
4036
|
|
|
@@ -4087,9 +4099,13 @@ def meshcode_status() -> Dict[str, Any]:
|
|
|
4087
4099
|
"task": a.get("task", ""),
|
|
4088
4100
|
"last_heartbeat": a.get("last_heartbeat"),
|
|
4089
4101
|
"idle_seconds": _idle_seconds(a.get("last_response_at")),
|
|
4102
|
+
"autonomous_mode": bool(a.get("autonomous_mode")),
|
|
4090
4103
|
}
|
|
4091
4104
|
for a in agents
|
|
4092
4105
|
],
|
|
4106
|
+
# AUTONOMOUS-MODE-UNIVERSAL (task f248d98e Phase 1): constant
|
|
4107
|
+
# awareness of self autonomy on the status path too.
|
|
4108
|
+
"you_are_autonomous": _get_autonomous_mode(),
|
|
4093
4109
|
}
|
|
4094
4110
|
|
|
4095
4111
|
|
|
@@ -5350,20 +5366,39 @@ def meshcode_create_meshwork(name: str) -> Dict[str, Any]:
|
|
|
5350
5366
|
|
|
5351
5367
|
@mcp.tool()
|
|
5352
5368
|
@with_working_status
|
|
5353
|
-
def meshcode_add_agent(name: str, role: str = "") -> Dict[str, Any]:
|
|
5369
|
+
def meshcode_add_agent(name: str, role: str = "", autonomous: bool = False) -> Dict[str, Any]:
|
|
5354
5370
|
"""Add an agent to the current meshwork. Tell user to run 'meshcode setup <project> <name>' then 'meshcode run <name>'.
|
|
5355
5371
|
|
|
5356
5372
|
Args:
|
|
5357
5373
|
name: Agent name.
|
|
5358
5374
|
role: Agent role description.
|
|
5375
|
+
autonomous: If True, immediately flip the new agent into autonomous
|
|
5376
|
+
mode (decide+execute+report cadence; escalate only for risky/
|
|
5377
|
+
destructive ops). Task f248d98e Phase 1.
|
|
5359
5378
|
"""
|
|
5360
5379
|
effective_role = role or "MCP-connected agent"
|
|
5361
|
-
|
|
5380
|
+
# AUTONOMOUS-MODE-UNIVERSAL: thread the autonomous param via env so
|
|
5381
|
+
# register_agent picks it up at flip-time. Saved + restored to avoid
|
|
5382
|
+
# contaminating the parent process state.
|
|
5383
|
+
_prev_auto = os.environ.get("MESHCODE_AUTONOMOUS")
|
|
5384
|
+
if autonomous:
|
|
5385
|
+
os.environ["MESHCODE_AUTONOMOUS"] = "1"
|
|
5386
|
+
try:
|
|
5387
|
+
result = be.register_agent(PROJECT_NAME, name, effective_role, api_key=_get_api_key())
|
|
5388
|
+
finally:
|
|
5389
|
+
if autonomous:
|
|
5390
|
+
if _prev_auto is None:
|
|
5391
|
+
os.environ.pop("MESHCODE_AUTONOMOUS", None)
|
|
5392
|
+
else:
|
|
5393
|
+
os.environ["MESHCODE_AUTONOMOUS"] = _prev_auto
|
|
5362
5394
|
warn = _role_warning(name, effective_role)
|
|
5363
5395
|
if isinstance(result, dict) and not result.get("error"):
|
|
5364
|
-
|
|
5396
|
+
run_hint = f"meshcode run {name}" + (" --autonomous" if autonomous else "")
|
|
5397
|
+
out: Dict[str, Any] = {"ok": True, "agent": name, "next_step": f"Run: meshcode setup {PROJECT_NAME} {name} && {run_hint}"}
|
|
5365
5398
|
if warn:
|
|
5366
5399
|
out["warning"] = warn
|
|
5400
|
+
if autonomous and result.get("autonomous_mode"):
|
|
5401
|
+
out["autonomous_mode"] = True
|
|
5367
5402
|
return out
|
|
5368
5403
|
return result or {"error": "failed to add agent"}
|
|
5369
5404
|
|
|
@@ -678,7 +678,7 @@ def _preflight_heartbeat(agent: str, project: str) -> None:
|
|
|
678
678
|
print(f"[meshcode] Pre-flight heartbeat skipped: {e}", file=sys.stderr)
|
|
679
679
|
|
|
680
680
|
|
|
681
|
-
def run(agent: str, project: Optional[str] = None, editor_override: Optional[str] = None, permission_override: Optional[str] = None, dry_run: bool = False) -> int:
|
|
681
|
+
def run(agent: str, project: Optional[str] = None, editor_override: Optional[str] = None, permission_override: Optional[str] = None, dry_run: bool = False, autonomous: bool = False) -> int:
|
|
682
682
|
"""Launch the user's editor with ONLY the named agent's MCP server loaded.
|
|
683
683
|
|
|
684
684
|
dry_run: when True, exercise the full bootstrap codepath (auth check,
|
|
@@ -688,7 +688,15 @@ def run(agent: str, project: Optional[str] = None, editor_override: Optional[str
|
|
|
688
688
|
"[meshcode] DRY-RUN OK: ..." and return 0. Designed to catch bootstrap-
|
|
689
689
|
class bugs (import-time sys.exit, missing env-var guards, broken cross-
|
|
690
690
|
process imports — cf. BUG-COMMANDER-MCP-BOOT 2026-05-20) before publish.
|
|
691
|
+
|
|
692
|
+
autonomous: when True (via `--autonomous` flag or MESHCODE_AUTONOMOUS=1),
|
|
693
|
+
propagate MESHCODE_AUTONOMOUS=1 into the child env so the MCP server
|
|
694
|
+
boot path flips mc_agents.autonomous_mode=true at register time.
|
|
695
|
+
Task f248d98e Phase 1 (no-DDL subset).
|
|
691
696
|
"""
|
|
697
|
+
# Propagate autonomous flag to the editor + MCP child via env var.
|
|
698
|
+
if autonomous:
|
|
699
|
+
os.environ["MESHCODE_AUTONOMOUS"] = "1"
|
|
692
700
|
# Non-blocking self-update check (consumes prior result, may spawn bg pip).
|
|
693
701
|
# Skip in dry-run — we don't want CI / pre-publish smokes to fork a pip.
|
|
694
702
|
if not dry_run:
|
|
@@ -1372,6 +1372,43 @@ Call `meshcode_wait` now.
|
|
|
1372
1372
|
print(f"[meshcode]")
|
|
1373
1373
|
print(f"[meshcode] Closing the editor window flips this agent offline.")
|
|
1374
1374
|
print(f"[meshcode] Other agents stay independent — no cross-window pollution.")
|
|
1375
|
+
|
|
1376
|
+
# AUTONOMOUS-MODE-UNIVERSAL P6 (task f57aa2d2): if this agent makes the
|
|
1377
|
+
# 2nd+ in the meshwork AND no agent has autonomous_mode=true AND the
|
|
1378
|
+
# user didn't already opt in via env var, surface a one-line nudge.
|
|
1379
|
+
# Best-effort — never block setup on telemetry failure.
|
|
1380
|
+
if os.environ.get("MESHCODE_AUTONOMOUS", "").strip().lower() not in ("1", "true", "yes", "on"):
|
|
1381
|
+
try:
|
|
1382
|
+
from urllib.request import Request as _Req, urlopen as _urlopen
|
|
1383
|
+
_body = json.dumps({
|
|
1384
|
+
"p_api_key": api_key,
|
|
1385
|
+
"p_project_id": project_id,
|
|
1386
|
+
"p_agent_name": None,
|
|
1387
|
+
"p_select": "name,autonomous_mode",
|
|
1388
|
+
"p_limit": 50,
|
|
1389
|
+
}).encode()
|
|
1390
|
+
_req = _Req(
|
|
1391
|
+
f"{sb['SUPABASE_URL']}/rest/v1/rpc/mc_get_agents",
|
|
1392
|
+
data=_body, method="POST",
|
|
1393
|
+
headers={
|
|
1394
|
+
"apikey": sb["SUPABASE_KEY"],
|
|
1395
|
+
"Authorization": f"Bearer {sb['SUPABASE_KEY']}",
|
|
1396
|
+
"Content-Type": "application/json",
|
|
1397
|
+
},
|
|
1398
|
+
)
|
|
1399
|
+
with _urlopen(_req, timeout=5) as _resp:
|
|
1400
|
+
_data = json.loads(_resp.read().decode())
|
|
1401
|
+
_all = (_data or {}).get("agents") or []
|
|
1402
|
+
_n = len(_all)
|
|
1403
|
+
_auto = sum(1 for a in _all if a.get("autonomous_mode"))
|
|
1404
|
+
if _n >= 2 and _auto == 0:
|
|
1405
|
+
print(f"[meshcode]")
|
|
1406
|
+
print(f"[meshcode] 💡 Tip: this meshwork now has {_n} agents. Consider autonomous mode:")
|
|
1407
|
+
print(f"[meshcode] meshcode run {agent} --autonomous")
|
|
1408
|
+
print(f"[meshcode] or set once for your shell: export MESHCODE_AUTONOMOUS=1")
|
|
1409
|
+
print(f"[meshcode] Autonomous agents self-progress without per-step prompting.")
|
|
1410
|
+
except Exception:
|
|
1411
|
+
pass # best-effort hint; never fail setup on this
|
|
1375
1412
|
return 0
|
|
1376
1413
|
|
|
1377
1414
|
|