meshcode 2.10.87__tar.gz → 2.10.88__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.10.87 → meshcode-2.10.88}/PKG-INFO +1 -1
- meshcode-2.10.88/meshcode/__init__.py +82 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode/meshcode_mcp/server.py +33 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode.egg-info/PKG-INFO +1 -1
- {meshcode-2.10.87 → meshcode-2.10.88}/pyproject.toml +1 -1
- meshcode-2.10.87/meshcode/__init__.py +0 -82
- {meshcode-2.10.87 → meshcode-2.10.88}/README.md +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode/ascii_art.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode/cli.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode/comms_v4.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode/compat.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode/error_hints.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode/exceptions.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode/invites.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode/launcher.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode/launcher_install.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode/preferences.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode/protocol_v2.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode/quickstart.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode/run_agent.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode/secrets.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode/self_update.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode/setup_clients.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode/supervisor.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode/upload.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/comms_v4.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/meshcode/__init__.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/meshcode/cli.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/meshcode/compat.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/meshcode/invites.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/meshcode/launcher.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/meshcode/preferences.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/meshcode/secrets.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/meshcode/self_update.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/meshcode/upload.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/scripts/sentinel.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/tests/test_core.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/comms_v4.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/meshcode/__init__.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/meshcode/cli.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/meshcode/compat.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/meshcode/invites.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/meshcode/launcher.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/meshcode/preferences.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/meshcode/secrets.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/meshcode/self_update.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/meshcode/upload.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/scripts/sentinel.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/tests/test_core.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/comms_v4.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/meshcode/cli.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/meshcode/compat.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/meshcode/invites.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/meshcode/upload.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/tests/test_core.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode.egg-info/SOURCES.txt +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode.egg-info/dependency_links.txt +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode.egg-info/entry_points.txt +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode.egg-info/requires.txt +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/meshcode.egg-info/top_level.txt +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/setup.cfg +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/tests/test_core.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/tests/test_exceptions.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/tests/test_migration_integrity.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/tests/test_security_regressions.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/tests/test_sentinel.py +0 -0
- {meshcode-2.10.87 → meshcode-2.10.88}/tests/test_status_enum_coverage.py +0 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"""MeshCode — Real-time communication between AI agents."""
|
|
2
|
+
__version__ = "2.10.88"
|
|
3
|
+
|
|
4
|
+
# Exception hierarchy — eagerly imported (lightweight, no deps)
|
|
5
|
+
from meshcode.exceptions import ( # noqa: F401
|
|
6
|
+
MeshCodeError,
|
|
7
|
+
AuthError,
|
|
8
|
+
RPCError,
|
|
9
|
+
MeshCodeTimeoutError,
|
|
10
|
+
MeshCodeConnectionError,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
# Public API — lazy imports to avoid heavy deps at import time
|
|
14
|
+
def __getattr__(name):
|
|
15
|
+
if name == "backend":
|
|
16
|
+
from meshcode.meshcode_mcp import backend
|
|
17
|
+
return backend
|
|
18
|
+
if name in _BACKEND_EXPORTS:
|
|
19
|
+
from meshcode.meshcode_mcp import backend
|
|
20
|
+
return getattr(backend, name)
|
|
21
|
+
if name in _SECRETS_EXPORTS:
|
|
22
|
+
from meshcode import secrets
|
|
23
|
+
return getattr(secrets, name)
|
|
24
|
+
raise AttributeError(f"module 'meshcode' has no attribute {name!r}")
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
# Backend: core messaging & agent management
|
|
28
|
+
_BACKEND_EXPORTS = {
|
|
29
|
+
"send_message",
|
|
30
|
+
"read_inbox",
|
|
31
|
+
"count_pending",
|
|
32
|
+
"get_board",
|
|
33
|
+
"heartbeat",
|
|
34
|
+
"set_status",
|
|
35
|
+
"register_agent",
|
|
36
|
+
"get_project_id",
|
|
37
|
+
"sb_rpc",
|
|
38
|
+
"task_create",
|
|
39
|
+
"task_list",
|
|
40
|
+
"encrypt_payload",
|
|
41
|
+
"decrypt_payload",
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
# Secrets: credential management
|
|
45
|
+
_SECRETS_EXPORTS = {
|
|
46
|
+
"get_api_key",
|
|
47
|
+
"set_api_key",
|
|
48
|
+
"list_profiles",
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
__all__ = [
|
|
52
|
+
"__version__",
|
|
53
|
+
"backend",
|
|
54
|
+
# Exceptions
|
|
55
|
+
"MeshCodeError",
|
|
56
|
+
"AuthError",
|
|
57
|
+
"RPCError",
|
|
58
|
+
"MeshCodeTimeoutError",
|
|
59
|
+
"MeshCodeConnectionError",
|
|
60
|
+
# Messaging
|
|
61
|
+
"send_message",
|
|
62
|
+
"read_inbox",
|
|
63
|
+
"count_pending",
|
|
64
|
+
# Agent management
|
|
65
|
+
"register_agent",
|
|
66
|
+
"get_project_id",
|
|
67
|
+
"get_board",
|
|
68
|
+
"heartbeat",
|
|
69
|
+
"set_status",
|
|
70
|
+
# Tasks
|
|
71
|
+
"task_create",
|
|
72
|
+
"task_list",
|
|
73
|
+
# Low-level
|
|
74
|
+
"sb_rpc",
|
|
75
|
+
# Encryption
|
|
76
|
+
"encrypt_payload",
|
|
77
|
+
"decrypt_payload",
|
|
78
|
+
# Credentials
|
|
79
|
+
"get_api_key",
|
|
80
|
+
"set_api_key",
|
|
81
|
+
"list_profiles",
|
|
82
|
+
]
|
|
@@ -783,6 +783,13 @@ _INSTANCE_ID = f"mcp-{_uuid.uuid4().hex[:12]}"
|
|
|
783
783
|
# launch via launchd/systemd) the orphan check is a no-op and we never
|
|
784
784
|
# false-terminate a legitimately-detached process.
|
|
785
785
|
_BOOT_PPID = os.getppid()
|
|
786
|
+
# Boot-context bundle (S1-2.F2): mc_agent_boot_context result cached at
|
|
787
|
+
# lifespan startup so the first 30s of tool calls can short-circuit
|
|
788
|
+
# repeated queries. Tools that read this fall back to live RPCs after the
|
|
789
|
+
# cache TTL.
|
|
790
|
+
_BOOT_CONTEXT_BUNDLE: Optional[Dict[str, Any]] = None
|
|
791
|
+
_BOOT_CONTEXT_AT: float = 0.0
|
|
792
|
+
_BOOT_CONTEXT_TTL_SECONDS: float = 30.0
|
|
786
793
|
|
|
787
794
|
def _acquire_lease() -> bool:
|
|
788
795
|
api_key = _get_api_key()
|
|
@@ -1633,6 +1640,32 @@ async def lifespan(_app):
|
|
|
1633
1640
|
log.warning(f"initial heartbeat attempt {_attempt+1} failed: {e}")
|
|
1634
1641
|
import time; time.sleep(2)
|
|
1635
1642
|
|
|
1643
|
+
# Boot-context bundle (S1-2.F2 / mig 217): single RPC returns last_seen
|
|
1644
|
+
# + recent msgs + open tasks + relevant memories + peer state. Cached on
|
|
1645
|
+
# the module global so the first ~30s of tool calls can short-circuit.
|
|
1646
|
+
# Soft-fail: if the RPC isn't deployed (older project) or errors, log
|
|
1647
|
+
# warn + continue with the legacy lazy-load path.
|
|
1648
|
+
global _BOOT_CONTEXT_BUNDLE, _BOOT_CONTEXT_AT
|
|
1649
|
+
try:
|
|
1650
|
+
_ctx = be.sb_rpc("mc_agent_boot_context", {
|
|
1651
|
+
"p_api_key": _get_api_key(),
|
|
1652
|
+
"p_project_id": _PROJECT_ID,
|
|
1653
|
+
"p_agent_name": AGENT_NAME,
|
|
1654
|
+
})
|
|
1655
|
+
if isinstance(_ctx, dict) and _ctx.get("ok"):
|
|
1656
|
+
_BOOT_CONTEXT_BUNDLE = _ctx
|
|
1657
|
+
_BOOT_CONTEXT_AT = _time.time()
|
|
1658
|
+
log.info(
|
|
1659
|
+
f"[meshcode] boot_context: "
|
|
1660
|
+
f"{len(_ctx.get('recent_msgs', []))} unread, "
|
|
1661
|
+
f"{len(_ctx.get('open_tasks', []))} open tasks, "
|
|
1662
|
+
f"{len(_ctx.get('relevant_memories', []))} memories surfaced"
|
|
1663
|
+
)
|
|
1664
|
+
else:
|
|
1665
|
+
log.warning(f"boot_context returned non-ok: {_ctx} — continuing legacy boot")
|
|
1666
|
+
except Exception as e:
|
|
1667
|
+
log.warning(f"boot_context RPC unavailable ({e}) — continuing legacy boot")
|
|
1668
|
+
|
|
1636
1669
|
# Heartbeat in daemon thread — independent of asyncio event loop.
|
|
1637
1670
|
_heartbeat_stop.clear()
|
|
1638
1671
|
hb_thread = _threading.Thread(target=_heartbeat_thread_fn, daemon=True, name="meshcode-heartbeat")
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
"""MeshCode — Real-time communication between AI agents."""
|
|
2
|
-
__version__ = "2.10.87"
|
|
3
|
-
|
|
4
|
-
# Exception hierarchy — eagerly imported (lightweight, no deps)
|
|
5
|
-
from meshcode.exceptions import ( # noqa: F401
|
|
6
|
-
MeshCodeError,
|
|
7
|
-
AuthError,
|
|
8
|
-
RPCError,
|
|
9
|
-
MeshCodeTimeoutError,
|
|
10
|
-
MeshCodeConnectionError,
|
|
11
|
-
)
|
|
12
|
-
|
|
13
|
-
# Public API — lazy imports to avoid heavy deps at import time
|
|
14
|
-
def __getattr__(name):
|
|
15
|
-
if name == "backend":
|
|
16
|
-
from meshcode.meshcode_mcp import backend
|
|
17
|
-
return backend
|
|
18
|
-
if name in _BACKEND_EXPORTS:
|
|
19
|
-
from meshcode.meshcode_mcp import backend
|
|
20
|
-
return getattr(backend, name)
|
|
21
|
-
if name in _SECRETS_EXPORTS:
|
|
22
|
-
from meshcode import secrets
|
|
23
|
-
return getattr(secrets, name)
|
|
24
|
-
raise AttributeError(f"module 'meshcode' has no attribute {name!r}")
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
# Backend: core messaging & agent management
|
|
28
|
-
_BACKEND_EXPORTS = {
|
|
29
|
-
"send_message",
|
|
30
|
-
"read_inbox",
|
|
31
|
-
"count_pending",
|
|
32
|
-
"get_board",
|
|
33
|
-
"heartbeat",
|
|
34
|
-
"set_status",
|
|
35
|
-
"register_agent",
|
|
36
|
-
"get_project_id",
|
|
37
|
-
"sb_rpc",
|
|
38
|
-
"task_create",
|
|
39
|
-
"task_list",
|
|
40
|
-
"encrypt_payload",
|
|
41
|
-
"decrypt_payload",
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
# Secrets: credential management
|
|
45
|
-
_SECRETS_EXPORTS = {
|
|
46
|
-
"get_api_key",
|
|
47
|
-
"set_api_key",
|
|
48
|
-
"list_profiles",
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
__all__ = [
|
|
52
|
-
"__version__",
|
|
53
|
-
"backend",
|
|
54
|
-
# Exceptions
|
|
55
|
-
"MeshCodeError",
|
|
56
|
-
"AuthError",
|
|
57
|
-
"RPCError",
|
|
58
|
-
"MeshCodeTimeoutError",
|
|
59
|
-
"MeshCodeConnectionError",
|
|
60
|
-
# Messaging
|
|
61
|
-
"send_message",
|
|
62
|
-
"read_inbox",
|
|
63
|
-
"count_pending",
|
|
64
|
-
# Agent management
|
|
65
|
-
"register_agent",
|
|
66
|
-
"get_project_id",
|
|
67
|
-
"get_board",
|
|
68
|
-
"heartbeat",
|
|
69
|
-
"set_status",
|
|
70
|
-
# Tasks
|
|
71
|
-
"task_create",
|
|
72
|
-
"task_list",
|
|
73
|
-
# Low-level
|
|
74
|
-
"sb_rpc",
|
|
75
|
-
# Encryption
|
|
76
|
-
"encrypt_payload",
|
|
77
|
-
"decrypt_payload",
|
|
78
|
-
# Credentials
|
|
79
|
-
"get_api_key",
|
|
80
|
-
"set_api_key",
|
|
81
|
-
"list_profiles",
|
|
82
|
-
]
|
|
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.10.87 → meshcode-2.10.88}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.10.87 → meshcode-2.10.88}/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.10.87 → meshcode-2.10.88}/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.10.87 → meshcode-2.10.88}/meshcode-backend-wt/tests/test_realtime_event_freshness.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.10.87 → meshcode-2.10.88}/meshcode-backend-wt/tests/test_security_regressions.py
RENAMED
|
File without changes
|
|
File without changes
|
{meshcode-2.10.87 → meshcode-2.10.88}/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.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py
RENAMED
|
File without changes
|
{meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py
RENAMED
|
File without changes
|
{meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py
RENAMED
|
File without changes
|
{meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py
RENAMED
|
File without changes
|
{meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py
RENAMED
|
File without changes
|
{meshcode-2.10.87 → meshcode-2.10.88}/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.10.87 → meshcode-2.10.88}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.10.87 → meshcode-2.10.88}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py
RENAMED
|
File without changes
|
{meshcode-2.10.87 → meshcode-2.10.88}/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.10.87 → meshcode-2.10.88}/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.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.10.87 → meshcode-2.10.88}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py
RENAMED
|
File without changes
|
{meshcode-2.10.87 → meshcode-2.10.88}/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.10.87 → meshcode-2.10.88}/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
|