meshcode 2.10.89__tar.gz → 2.10.90__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.89 → meshcode-2.10.90}/PKG-INFO +1 -1
- meshcode-2.10.90/meshcode/__init__.py +82 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode/meshcode_mcp/server.py +56 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode.egg-info/PKG-INFO +1 -1
- {meshcode-2.10.89 → meshcode-2.10.90}/pyproject.toml +1 -1
- meshcode-2.10.89/meshcode/__init__.py +0 -82
- {meshcode-2.10.89 → meshcode-2.10.90}/README.md +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode/ascii_art.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode/cli.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode/comms_v4.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode/compat.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode/error_hints.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode/exceptions.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode/invites.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode/launcher.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode/launcher_install.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode/preferences.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode/protocol_v2.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode/quickstart.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode/run_agent.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode/secrets.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode/self_update.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode/setup_clients.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode/supervisor.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode/upload.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/comms_v4.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/meshcode/__init__.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/meshcode/cli.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/meshcode/compat.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/meshcode/invites.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/meshcode/launcher.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/meshcode/preferences.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/meshcode/secrets.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/meshcode/self_update.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/meshcode/upload.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/scripts/sentinel.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/tests/test_core.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/comms_v4.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/meshcode/__init__.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/meshcode/cli.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/meshcode/compat.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/meshcode/invites.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/meshcode/launcher.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/meshcode/preferences.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/meshcode/secrets.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/meshcode/self_update.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/meshcode/upload.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/scripts/sentinel.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/tests/test_core.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/comms_v4.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/meshcode/cli.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/meshcode/compat.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/meshcode/invites.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/meshcode/upload.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/tests/test_core.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode.egg-info/SOURCES.txt +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode.egg-info/dependency_links.txt +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode.egg-info/entry_points.txt +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode.egg-info/requires.txt +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/meshcode.egg-info/top_level.txt +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/setup.cfg +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/tests/test_core.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/tests/test_cross_agent_messaging.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/tests/test_esc_deaf_state.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/tests/test_exceptions.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/tests/test_mark_read_batch.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/tests/test_migration_integrity.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/tests/test_realtime_event_freshness.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/tests/test_rls_cross_tenant.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/tests/test_rpc_migrations.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/tests/test_security_regressions.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/tests/test_sentinel.py +0 -0
- {meshcode-2.10.89 → meshcode-2.10.90}/tests/test_status_enum_coverage.py +0 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"""MeshCode — Real-time communication between AI agents."""
|
|
2
|
+
__version__ = "2.10.90"
|
|
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
|
+
]
|
|
@@ -731,6 +731,19 @@ def with_working_status(func):
|
|
|
731
731
|
# Auto-log to activity feed (skip noisy read-only tools)
|
|
732
732
|
if not skip and name not in _ACTIVITY_LOG_SKIP:
|
|
733
733
|
_log_activity_bg("tool_call", f"{AGENT_NAME}: {name}")
|
|
734
|
+
# Persona hint injection (BE-S4.1.sdk): once per session.
|
|
735
|
+
global _PERSONA_INJECTED
|
|
736
|
+
if (not skip and not _PERSONA_INJECTED and _PERSONA
|
|
737
|
+
and isinstance(result, dict)):
|
|
738
|
+
_hint_fields = {
|
|
739
|
+
k: _PERSONA[k]
|
|
740
|
+
for k in ("tone", "language", "reply_max_tokens",
|
|
741
|
+
"emoji_policy", "decision_style")
|
|
742
|
+
if k in _PERSONA and _PERSONA[k] is not None
|
|
743
|
+
}
|
|
744
|
+
if _hint_fields:
|
|
745
|
+
result.setdefault("persona_hint", _hint_fields)
|
|
746
|
+
_PERSONA_INJECTED = True
|
|
734
747
|
return result
|
|
735
748
|
except asyncio.CancelledError:
|
|
736
749
|
log.debug(f"[meshcode] tool {name} cancelled by client (ESC)")
|
|
@@ -759,6 +772,22 @@ def with_working_status(func):
|
|
|
759
772
|
result = func(*args, **kwargs)
|
|
760
773
|
if not skip and name not in _ACTIVITY_LOG_SKIP:
|
|
761
774
|
_log_activity_bg("tool_call", f"{AGENT_NAME}: {name}")
|
|
775
|
+
# Persona hint injection (BE-S4.1.sdk): on the FIRST non-wait
|
|
776
|
+
# tool call after boot, attach a persona_hint envelope so the
|
|
777
|
+
# LLM stays in voice. Only once per session — agents are
|
|
778
|
+
# supposed to internalize tone after seeing it once.
|
|
779
|
+
global _PERSONA_INJECTED
|
|
780
|
+
if (not skip and not _PERSONA_INJECTED and _PERSONA
|
|
781
|
+
and isinstance(result, dict)):
|
|
782
|
+
_hint_fields = {
|
|
783
|
+
k: _PERSONA[k]
|
|
784
|
+
for k in ("tone", "language", "reply_max_tokens",
|
|
785
|
+
"emoji_policy", "decision_style")
|
|
786
|
+
if k in _PERSONA and _PERSONA[k] is not None
|
|
787
|
+
}
|
|
788
|
+
if _hint_fields:
|
|
789
|
+
result.setdefault("persona_hint", _hint_fields)
|
|
790
|
+
_PERSONA_INJECTED = True
|
|
762
791
|
return result
|
|
763
792
|
except Exception as e:
|
|
764
793
|
if not skip:
|
|
@@ -790,6 +819,11 @@ _BOOT_PPID = os.getppid()
|
|
|
790
819
|
_BOOT_CONTEXT_BUNDLE: Optional[Dict[str, Any]] = None
|
|
791
820
|
_BOOT_CONTEXT_AT: float = 0.0
|
|
792
821
|
_BOOT_CONTEXT_TTL_SECONDS: float = 30.0
|
|
822
|
+
# Per-agent persona JSONB (mig 232) cached at lifespan start. Drives tone /
|
|
823
|
+
# voice / reply length on first tool call after boot. TTL infinite within a
|
|
824
|
+
# session — persona changes are rare and need a relaunch to take effect.
|
|
825
|
+
_PERSONA: Optional[Dict[str, Any]] = None
|
|
826
|
+
_PERSONA_INJECTED: bool = False
|
|
793
827
|
|
|
794
828
|
def _acquire_lease() -> bool:
|
|
795
829
|
api_key = _get_api_key()
|
|
@@ -1640,6 +1674,28 @@ async def lifespan(_app):
|
|
|
1640
1674
|
log.warning(f"initial heartbeat attempt {_attempt+1} failed: {e}")
|
|
1641
1675
|
import time; time.sleep(2)
|
|
1642
1676
|
|
|
1677
|
+
# Per-agent persona (BE-S4.1.sdk / mig 232): tone/voice/policy that
|
|
1678
|
+
# shapes how the agent talks. Loaded once per session; soft-fail if the
|
|
1679
|
+
# RPC is unavailable on older projects.
|
|
1680
|
+
global _PERSONA
|
|
1681
|
+
try:
|
|
1682
|
+
_persona_resp = be.sb_rpc("mc_agent_persona", {
|
|
1683
|
+
"p_api_key": _get_api_key(),
|
|
1684
|
+
"p_project_id": _PROJECT_ID,
|
|
1685
|
+
"p_agent_name": AGENT_NAME,
|
|
1686
|
+
})
|
|
1687
|
+
if isinstance(_persona_resp, dict) and _persona_resp.get("ok"):
|
|
1688
|
+
_PERSONA = _persona_resp.get("persona") or {}
|
|
1689
|
+
log.info(
|
|
1690
|
+
f"[meshcode] persona loaded: tone={_PERSONA.get('tone','default')} "
|
|
1691
|
+
f"language={_PERSONA.get('language','en')} "
|
|
1692
|
+
f"reply_max_tokens={_PERSONA.get('reply_max_tokens','unset')}"
|
|
1693
|
+
)
|
|
1694
|
+
else:
|
|
1695
|
+
log.debug(f"persona load returned non-ok: {_persona_resp} — continuing without")
|
|
1696
|
+
except Exception as e:
|
|
1697
|
+
log.debug(f"persona RPC unavailable ({e}) — continuing without")
|
|
1698
|
+
|
|
1643
1699
|
# Boot-context bundle (S1-2.F2 / mig 217): single RPC returns last_seen
|
|
1644
1700
|
# + recent msgs + open tasks + relevant memories + peer state. Cached on
|
|
1645
1701
|
# the module global so the first ~30s of tool calls can short-circuit.
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
"""MeshCode — Real-time communication between AI agents."""
|
|
2
|
-
__version__ = "2.10.89"
|
|
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.89 → meshcode-2.10.90}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.10.89 → meshcode-2.10.90}/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.89 → meshcode-2.10.90}/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.89 → meshcode-2.10.90}/meshcode-backend-wt/tests/test_realtime_event_freshness.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{meshcode-2.10.89 → meshcode-2.10.90}/meshcode-backend-wt/tests/test_security_regressions.py
RENAMED
|
File without changes
|
|
File without changes
|
{meshcode-2.10.89 → meshcode-2.10.90}/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.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py
RENAMED
|
File without changes
|
{meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py
RENAMED
|
File without changes
|
{meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py
RENAMED
|
File without changes
|
{meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py
RENAMED
|
File without changes
|
{meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py
RENAMED
|
File without changes
|
{meshcode-2.10.89 → meshcode-2.10.90}/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.89 → meshcode-2.10.90}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.10.89 → meshcode-2.10.90}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py
RENAMED
|
File without changes
|
{meshcode-2.10.89 → meshcode-2.10.90}/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.89 → meshcode-2.10.90}/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.89 → meshcode-2.10.90}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py
RENAMED
|
File without changes
|
{meshcode-2.10.89 → meshcode-2.10.90}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py
RENAMED
|
File without changes
|
{meshcode-2.10.89 → meshcode-2.10.90}/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.89 → meshcode-2.10.90}/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
|