meshcode 2.11.18__tar.gz → 2.11.20__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.18 → meshcode-2.11.20}/PKG-INFO +1 -1
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/__init__.py +1 -1
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/meshcode_mcp/server.py +78 -8
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/rpc_allowlist.py +4 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode.egg-info/PKG-INFO +1 -1
- {meshcode-2.11.18 → meshcode-2.11.20}/pyproject.toml +1 -1
- {meshcode-2.11.18 → meshcode-2.11.20}/README.md +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/__main__.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/_stop_hook_template.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/cli.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/compat.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/daemon.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/date_parse.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/doctor.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/error_hints.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/exceptions.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/invites.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/launcher.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/preferences.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/protocol_handler.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/quickstart.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/run_agent.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/scripts/check_secrets.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/scripts/race_rate_harness.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/secrets.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/self_update.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/supervisor.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/upload.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/comms_v4.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_core.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/comms_v4.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_core.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/comms_v4.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/cli.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/compat.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/invites.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/upload.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_core.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode.egg-info/SOURCES.txt +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode.egg-info/dependency_links.txt +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode.egg-info/entry_points.txt +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode.egg-info/requires.txt +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/meshcode.egg-info/top_level.txt +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/setup.cfg +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_auto_update_hardening.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_boot_bug_regression.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_color_truecolor.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_core.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_date_parse.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_doctor.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_epistemic_v1_python_sdk.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_epistemic_v1_stop_conditions.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_exceptions.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_init_device_code.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_install_guard.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_lease_sigterm_release.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_migration_integrity.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_rpc_grants.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_security_regressions.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_sentinel.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_setup_path.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_sleep_signals.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_stay_on_loop_hook.py +0 -0
- {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_wait_open_tasks_contradiction.py +0 -0
|
@@ -3399,7 +3399,9 @@ async def meshcode_wait(timeout_seconds: int = 20, include_acks: bool = False) -
|
|
|
3399
3399
|
"got_message": True,
|
|
3400
3400
|
**split,
|
|
3401
3401
|
}
|
|
3402
|
-
#
|
|
3402
|
+
# MESH-IMPROVE-1: surface auto-mark-seen telemetry.
|
|
3403
|
+
resp["auto_marked"] = len(deduped)
|
|
3404
|
+
resp["types_seen"] = sorted({m.get("type", "msg") for m in deduped})
|
|
3403
3405
|
if split["done_signals"]:
|
|
3404
3406
|
resp["must_exit"] = True
|
|
3405
3407
|
resp["exit_reason"] = "sleep authorization received — set status=sleeping and end session"
|
|
@@ -3634,6 +3636,10 @@ async def _meshcode_wait_inner(actual_timeout: int, include_acks: bool) -> Dict[
|
|
|
3634
3636
|
"got_message": True,
|
|
3635
3637
|
**split,
|
|
3636
3638
|
}
|
|
3639
|
+
# MESH-IMPROVE-1: surface auto-mark-seen telemetry so callers can
|
|
3640
|
+
# audit what the SDK considered processed without re-reading.
|
|
3641
|
+
out["auto_marked"] = len(deduped)
|
|
3642
|
+
out["types_seen"] = sorted({m.get("type", "msg") for m in deduped})
|
|
3637
3643
|
done = _detect_global_done(deduped)
|
|
3638
3644
|
if done:
|
|
3639
3645
|
out["got_done"] = True
|
|
@@ -3717,7 +3723,12 @@ async def _meshcode_wait_inner(actual_timeout: int, include_acks: bool) -> Dict[
|
|
|
3717
3723
|
if not include_acks:
|
|
3718
3724
|
split["acks"] = []
|
|
3719
3725
|
if split["messages"] or split["done_signals"]:
|
|
3720
|
-
return {
|
|
3726
|
+
return {
|
|
3727
|
+
"got_message": True,
|
|
3728
|
+
**split,
|
|
3729
|
+
"auto_marked": len(deduped),
|
|
3730
|
+
"types_seen": sorted({m.get("type", "msg") for m in deduped}),
|
|
3731
|
+
}
|
|
3721
3732
|
except Exception as e:
|
|
3722
3733
|
log.debug(f"DB poll fallback error: {e}")
|
|
3723
3734
|
|
|
@@ -5323,6 +5334,8 @@ def meshcode_remember(
|
|
|
5323
5334
|
value: Any,
|
|
5324
5335
|
weight: int = 5,
|
|
5325
5336
|
emotion_tag: Optional[str] = None,
|
|
5337
|
+
scope: str = "agent",
|
|
5338
|
+
promote_from: Optional[str] = None,
|
|
5326
5339
|
) -> Dict[str, Any]:
|
|
5327
5340
|
"""Store a persistent memory (survives restarts). Only for reusable learnings, NOT task data.
|
|
5328
5341
|
|
|
@@ -5330,16 +5343,22 @@ def meshcode_remember(
|
|
|
5330
5343
|
key: Short key (e.g. "team_conventions").
|
|
5331
5344
|
value: Any JSON-serializable value.
|
|
5332
5345
|
weight: 1-10, default 5 (neutral). Higher = ranks higher on recall.
|
|
5333
|
-
|
|
5334
|
-
|
|
5335
|
-
|
|
5336
|
-
|
|
5346
|
+
emotion_tag: Optional free-form tag.
|
|
5347
|
+
scope: 'agent' (default, per-agent memory) OR 'mesh' (shared across
|
|
5348
|
+
the meshwork; visible to all agents). MESH-IMPROVE-2 (mig 339).
|
|
5349
|
+
On write conflict with an existing mesh value, server records the
|
|
5350
|
+
contradiction; resolve via meshcode_resolve_contradiction.
|
|
5351
|
+
promote_from: when scope='mesh', set this to an existing agent-scope
|
|
5352
|
+
memory key — server lifts that value to mesh-scope without
|
|
5353
|
+
duplicating the data. Caller's `value` arg is ignored when set.
|
|
5337
5354
|
"""
|
|
5338
5355
|
if not key or not key.strip():
|
|
5339
5356
|
return {"error": "key cannot be empty"}
|
|
5340
5357
|
key = key.strip()
|
|
5341
5358
|
if not isinstance(weight, int) or weight < 1 or weight > 10:
|
|
5342
5359
|
return {"error": "weight must be an integer 1..10"}
|
|
5360
|
+
if scope not in ("agent", "mesh"):
|
|
5361
|
+
return {"error": f"scope must be 'agent' or 'mesh', got {scope!r}"}
|
|
5343
5362
|
api_key = _get_api_key()
|
|
5344
5363
|
json_value = value if isinstance(value, (dict, list)) else json.dumps(value)
|
|
5345
5364
|
if isinstance(json_value, str):
|
|
@@ -5347,6 +5366,20 @@ def meshcode_remember(
|
|
|
5347
5366
|
json_value = json.loads(json_value)
|
|
5348
5367
|
except (json.JSONDecodeError, TypeError):
|
|
5349
5368
|
json_value = {"_raw": value}
|
|
5369
|
+
if scope == "mesh":
|
|
5370
|
+
# MESH-IMPROVE-2: mesh-scope write via mig 339 RPC. Surfaces
|
|
5371
|
+
# contradiction metadata in the response when an existing value
|
|
5372
|
+
# differs from the new one.
|
|
5373
|
+
return be.sb_rpc("mc_meshwork_remember", {
|
|
5374
|
+
"p_api_key": api_key,
|
|
5375
|
+
"p_project_id": _PROJECT_ID,
|
|
5376
|
+
"p_key": key,
|
|
5377
|
+
"p_value": json_value,
|
|
5378
|
+
"p_writer_agent": AGENT_NAME,
|
|
5379
|
+
"p_weight": weight,
|
|
5380
|
+
"p_emotion_tag": emotion_tag,
|
|
5381
|
+
"p_promote_from_agent_key": promote_from,
|
|
5382
|
+
})
|
|
5350
5383
|
result = be.sb_rpc("mc_memory_set", {
|
|
5351
5384
|
"p_api_key": api_key,
|
|
5352
5385
|
"p_agent_name": AGENT_NAME,
|
|
@@ -5357,15 +5390,52 @@ def meshcode_remember(
|
|
|
5357
5390
|
"p_weight": weight,
|
|
5358
5391
|
"p_emotion_tag": emotion_tag,
|
|
5359
5392
|
})
|
|
5360
|
-
# Best-effort sync to Obsidian vault (if configured)
|
|
5361
5393
|
if isinstance(result, dict) and result.get("ok"):
|
|
5362
5394
|
try:
|
|
5363
5395
|
_sync_to_obsidian(key, json_value)
|
|
5364
5396
|
except Exception:
|
|
5365
|
-
pass
|
|
5397
|
+
pass
|
|
5366
5398
|
return result
|
|
5367
5399
|
|
|
5368
5400
|
|
|
5401
|
+
@mcp.tool()
|
|
5402
|
+
@with_working_status
|
|
5403
|
+
def meshcode_recall_mesh(key: str) -> Dict[str, Any]:
|
|
5404
|
+
"""Read a mesh-scoped memory + any open contradictions on it.
|
|
5405
|
+
MESH-IMPROVE-2 (mig 339).
|
|
5406
|
+
"""
|
|
5407
|
+
if not key or not key.strip():
|
|
5408
|
+
return {"error": "key cannot be empty"}
|
|
5409
|
+
return be.sb_rpc("mc_meshwork_recall", {
|
|
5410
|
+
"p_api_key": _get_api_key(),
|
|
5411
|
+
"p_project_id": _PROJECT_ID,
|
|
5412
|
+
"p_key": key.strip(),
|
|
5413
|
+
})
|
|
5414
|
+
|
|
5415
|
+
|
|
5416
|
+
@mcp.tool()
|
|
5417
|
+
@with_working_status
|
|
5418
|
+
def meshcode_resolve_contradiction(key: str, winning_value: Any) -> Dict[str, Any]:
|
|
5419
|
+
"""Pick a winning value for a mesh-scoped memory with open contradictions.
|
|
5420
|
+
Marks every loser as superseded. MESH-IMPROVE-2 (mig 339).
|
|
5421
|
+
"""
|
|
5422
|
+
if not key or not key.strip():
|
|
5423
|
+
return {"error": "key cannot be empty"}
|
|
5424
|
+
json_value = winning_value if isinstance(winning_value, (dict, list)) else json.dumps(winning_value)
|
|
5425
|
+
if isinstance(json_value, str):
|
|
5426
|
+
try:
|
|
5427
|
+
json_value = json.loads(json_value)
|
|
5428
|
+
except (json.JSONDecodeError, TypeError):
|
|
5429
|
+
json_value = {"_raw": winning_value}
|
|
5430
|
+
return be.sb_rpc("mc_meshwork_resolve_contradiction", {
|
|
5431
|
+
"p_api_key": _get_api_key(),
|
|
5432
|
+
"p_project_id": _PROJECT_ID,
|
|
5433
|
+
"p_key": key.strip(),
|
|
5434
|
+
"p_winning_value": json_value,
|
|
5435
|
+
"p_resolver": AGENT_NAME,
|
|
5436
|
+
})
|
|
5437
|
+
|
|
5438
|
+
|
|
5369
5439
|
@mcp.tool()
|
|
5370
5440
|
@with_working_status
|
|
5371
5441
|
def meshcode_recall(key: Optional[str] = None) -> Dict[str, Any]:
|
|
@@ -67,6 +67,10 @@ AGENT_CALLABLE_RPCS = [
|
|
|
67
67
|
"mc_memory_list",
|
|
68
68
|
"mc_memory_search",
|
|
69
69
|
"mc_memory_contradictions",
|
|
70
|
+
# Mesh-scoped memory (mig 339)
|
|
71
|
+
"mc_meshwork_remember",
|
|
72
|
+
"mc_meshwork_recall",
|
|
73
|
+
"mc_meshwork_resolve_contradiction",
|
|
70
74
|
|
|
71
75
|
# ── Decisions / outcomes
|
|
72
76
|
"mc_has_open_decision",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_cross_agent_messaging.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_realtime_event_freshness.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_security_regressions.py
RENAMED
|
File without changes
|
|
File without changes
|
{meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_status_enum_coverage.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py
RENAMED
|
File without changes
|
{meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py
RENAMED
|
File without changes
|
{meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py
RENAMED
|
File without changes
|
{meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_realtime_event_freshness.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py
RENAMED
|
File without changes
|
{meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|