meshcode 2.11.40__tar.gz → 2.11.41__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.
Files changed (231) hide show
  1. {meshcode-2.11.40 → meshcode-2.11.41}/PKG-INFO +1 -1
  2. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/__init__.py +1 -1
  3. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/meshcode_mcp/backend.py +8 -1
  4. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/meshcode_mcp/server.py +72 -5
  5. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode.egg-info/PKG-INFO +1 -1
  6. {meshcode-2.11.40 → meshcode-2.11.41}/pyproject.toml +1 -1
  7. {meshcode-2.11.40 → meshcode-2.11.41}/README.md +0 -0
  8. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/__main__.py +0 -0
  9. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/_stop_hook_template.py +0 -0
  10. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/ascii_art.py +0 -0
  11. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/atomic_push.py +0 -0
  12. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/cli.py +0 -0
  13. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/comms_v4.py +0 -0
  14. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/compat.py +0 -0
  15. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/daemon.py +0 -0
  16. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/date_parse.py +0 -0
  17. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/doctor.py +0 -0
  18. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/error_hints.py +0 -0
  19. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/exceptions.py +0 -0
  20. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/invites.py +0 -0
  21. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/launcher.py +0 -0
  22. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/launcher_install.py +0 -0
  23. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/meshcode_mcp/__init__.py +0 -0
  24. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/meshcode_mcp/__main__.py +0 -0
  25. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/meshcode_mcp/realtime.py +0 -0
  26. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
  27. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/meshcode_mcp/test_backend.py +0 -0
  28. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
  29. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
  30. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
  31. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/meshcode_mcp/test_realtime.py +0 -0
  32. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  33. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/preferences.py +0 -0
  34. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/protocol_handler.py +0 -0
  35. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/protocol_v2.py +0 -0
  36. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/quickstart.py +0 -0
  37. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/rpc_allowlist.py +0 -0
  38. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/run_agent.py +0 -0
  39. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/scripts/check_secrets.py +0 -0
  40. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/scripts/race_rate_harness.py +0 -0
  41. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/secrets.py +0 -0
  42. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/self_update.py +0 -0
  43. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/setup_clients.py +0 -0
  44. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/supervisor.py +0 -0
  45. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode/upload.py +0 -0
  46. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/comms_v4.py +0 -0
  47. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/meshcode/__init__.py +0 -0
  48. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
  49. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/meshcode/cli.py +0 -0
  50. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
  51. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/meshcode/compat.py +0 -0
  52. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
  53. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
  54. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/meshcode/invites.py +0 -0
  55. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/meshcode/launcher.py +0 -0
  56. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
  57. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  58. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  59. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
  60. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  61. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
  62. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  63. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  64. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  65. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/meshcode/preferences.py +0 -0
  66. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
  67. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
  68. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
  69. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/meshcode/secrets.py +0 -0
  70. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/meshcode/self_update.py +0 -0
  71. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
  72. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
  73. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/meshcode/upload.py +0 -0
  74. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/scripts/sentinel.py +0 -0
  75. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/tests/test_core.py +0 -0
  76. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
  77. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
  78. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
  79. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
  80. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
  81. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
  82. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
  83. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
  84. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
  85. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
  86. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
  87. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
  88. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
  89. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
  90. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
  91. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
  92. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
  93. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
  94. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
  95. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
  96. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
  97. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
  98. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
  99. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
  100. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
  101. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
  102. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
  103. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
  104. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  105. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
  106. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
  107. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
  108. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
  109. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
  110. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
  111. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
  112. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
  113. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
  114. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/comms_v4.py +0 -0
  115. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/meshcode/__init__.py +0 -0
  116. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
  117. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/meshcode/cli.py +0 -0
  118. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
  119. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/meshcode/compat.py +0 -0
  120. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
  121. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
  122. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/meshcode/invites.py +0 -0
  123. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/meshcode/launcher.py +0 -0
  124. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
  125. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  126. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  127. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
  128. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  129. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
  130. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  131. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  132. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  133. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/meshcode/preferences.py +0 -0
  134. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
  135. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
  136. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
  137. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/meshcode/secrets.py +0 -0
  138. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/meshcode/self_update.py +0 -0
  139. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
  140. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
  141. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/meshcode/upload.py +0 -0
  142. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/scripts/sentinel.py +0 -0
  143. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/tests/test_core.py +0 -0
  144. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
  145. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
  146. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
  147. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
  148. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
  149. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
  150. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
  151. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
  152. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
  153. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
  154. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
  155. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/comms_v4.py +0 -0
  156. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
  157. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
  158. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/meshcode/cli.py +0 -0
  159. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
  160. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/meshcode/compat.py +0 -0
  161. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
  162. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
  163. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/meshcode/invites.py +0 -0
  164. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
  165. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
  166. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  167. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  168. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
  169. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  170. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
  171. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  172. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  173. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  174. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
  175. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
  176. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
  177. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
  178. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
  179. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
  180. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
  181. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
  182. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/meshcode/upload.py +0 -0
  183. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
  184. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/tests/test_core.py +0 -0
  185. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
  186. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
  187. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
  188. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
  189. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
  190. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
  191. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
  192. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
  193. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
  194. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
  195. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
  196. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode.egg-info/SOURCES.txt +0 -0
  197. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode.egg-info/dependency_links.txt +0 -0
  198. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode.egg-info/entry_points.txt +0 -0
  199. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode.egg-info/requires.txt +0 -0
  200. {meshcode-2.11.40 → meshcode-2.11.41}/meshcode.egg-info/top_level.txt +0 -0
  201. {meshcode-2.11.40 → meshcode-2.11.41}/setup.cfg +0 -0
  202. {meshcode-2.11.40 → meshcode-2.11.41}/tests/test_auto_update_hardening.py +0 -0
  203. {meshcode-2.11.40 → meshcode-2.11.41}/tests/test_boot_bug_regression.py +0 -0
  204. {meshcode-2.11.40 → meshcode-2.11.41}/tests/test_color_truecolor.py +0 -0
  205. {meshcode-2.11.40 → meshcode-2.11.41}/tests/test_core.py +0 -0
  206. {meshcode-2.11.40 → meshcode-2.11.41}/tests/test_cross_agent_messaging.py +0 -0
  207. {meshcode-2.11.40 → meshcode-2.11.41}/tests/test_date_parse.py +0 -0
  208. {meshcode-2.11.40 → meshcode-2.11.41}/tests/test_doctor.py +0 -0
  209. {meshcode-2.11.40 → meshcode-2.11.41}/tests/test_epistemic_v1_python_sdk.py +0 -0
  210. {meshcode-2.11.40 → meshcode-2.11.41}/tests/test_epistemic_v1_stop_conditions.py +0 -0
  211. {meshcode-2.11.40 → meshcode-2.11.41}/tests/test_esc_deaf_state.py +0 -0
  212. {meshcode-2.11.40 → meshcode-2.11.41}/tests/test_exceptions.py +0 -0
  213. {meshcode-2.11.40 → meshcode-2.11.41}/tests/test_init_device_code.py +0 -0
  214. {meshcode-2.11.40 → meshcode-2.11.41}/tests/test_install_guard.py +0 -0
  215. {meshcode-2.11.40 → meshcode-2.11.41}/tests/test_lease_sigterm_release.py +0 -0
  216. {meshcode-2.11.40 → meshcode-2.11.41}/tests/test_mark_read_batch.py +0 -0
  217. {meshcode-2.11.40 → meshcode-2.11.41}/tests/test_migration_integrity.py +0 -0
  218. {meshcode-2.11.40 → meshcode-2.11.41}/tests/test_realtime_event_freshness.py +0 -0
  219. {meshcode-2.11.40 → meshcode-2.11.41}/tests/test_rls_cross_tenant.py +0 -0
  220. {meshcode-2.11.40 → meshcode-2.11.41}/tests/test_rpc_grants.py +0 -0
  221. {meshcode-2.11.40 → meshcode-2.11.41}/tests/test_rpc_migrations.py +0 -0
  222. {meshcode-2.11.40 → meshcode-2.11.41}/tests/test_run_agent_dry_run.py +0 -0
  223. {meshcode-2.11.40 → meshcode-2.11.41}/tests/test_run_agent_no_server_import.py +0 -0
  224. {meshcode-2.11.40 → meshcode-2.11.41}/tests/test_security_regressions.py +0 -0
  225. {meshcode-2.11.40 → meshcode-2.11.41}/tests/test_self_update_user_site.py +0 -0
  226. {meshcode-2.11.40 → meshcode-2.11.41}/tests/test_sentinel.py +0 -0
  227. {meshcode-2.11.40 → meshcode-2.11.41}/tests/test_setup_path.py +0 -0
  228. {meshcode-2.11.40 → meshcode-2.11.41}/tests/test_sleep_signals.py +0 -0
  229. {meshcode-2.11.40 → meshcode-2.11.41}/tests/test_status_enum_coverage.py +0 -0
  230. {meshcode-2.11.40 → meshcode-2.11.41}/tests/test_stay_on_loop_hook.py +0 -0
  231. {meshcode-2.11.40 → meshcode-2.11.41}/tests/test_wait_open_tasks_contradiction.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meshcode
3
- Version: 2.11.40
3
+ Version: 2.11.41
4
4
  Summary: Real-time communication between AI agents — Supabase-backed CLI
5
5
  Author-email: MeshCode <hello@meshcode.io>
6
6
  License: MIT
@@ -1,5 +1,5 @@
1
1
  """MeshCode — Real-time communication between AI agents."""
2
- __version__ = "2.11.40"
2
+ __version__ = "2.11.41"
3
3
 
4
4
  # Exception hierarchy — eagerly imported (lightweight, no deps)
5
5
  from meshcode.exceptions import ( # noqa: F401
@@ -437,7 +437,14 @@ _recording_session_id = ""
437
437
  _SKIP_RECORDING = {"mc_heartbeat", "mc_record_event", "mc_agent_set_status_by_api_key",
438
438
  "mc_acquire_agent_lease", "mc_release_agent_lease",
439
439
  "mc_update_agent", "mc_get_agents",
440
- "mc_task_list", "mc_count_pending", "mc_mark_message_read"}
440
+ "mc_task_list", "mc_count_pending", "mc_mark_message_read",
441
+ # Stop-gap (per commander 1b789a11): mc_tasks_due_soon lives
442
+ # only in `meshcode` schema (mig 329); no `public` wrapper
443
+ # exists, so PostgREST returns PGRST202 ~every wait cycle.
444
+ # ~18k err/12h log pollution. The two call sites already
445
+ # treat it as soft-fail. Silence telemetry until Samuel
446
+ # approves the public-wrapper DDL.
447
+ "mc_tasks_due_soon"}
441
448
 
442
449
 
443
450
  def _get_api_key() -> Optional[str]:
@@ -95,6 +95,58 @@ def _agent_color(name: str) -> str:
95
95
  return _ANSI_COLORS[h % len(_ANSI_COLORS)]
96
96
 
97
97
 
98
+ # DUP-AGENTS-P3 (memo afc88b8f, vote 2/2 + chief pending): register-time
99
+ # name/role family sanity check. Catches the class-of-bug where an agent
100
+ # named `front-2` gets registered with role="Backend Engineer". Warning-only:
101
+ # never blocks; surfaces via `warning` field that admin UI renders as badge.
102
+ _ROLE_FAMILY_PREFIX_MAP = (
103
+ ("commander", "Commander"),
104
+ ("chief", "Commander"),
105
+ ("co-dev-", "Engineer"),
106
+ ("front-", "Frontend"),
107
+ ("back-", "Backend"),
108
+ ("backend", "Backend"),
109
+ ("frontend", "Frontend"),
110
+ ("qa-", "QA"),
111
+ ("qa", "QA"),
112
+ ("design-", "Design"),
113
+ ("ops-", "Ops"),
114
+ ("data-", "Data"),
115
+ )
116
+
117
+
118
+ def _role_family_from_name(name: str) -> Optional[str]:
119
+ """Derive expected role family from agent name prefix. None = unknown
120
+ prefix, no opinion (skip warning to avoid noise on names like
121
+ `mesh-commander` or one-off custom names)."""
122
+ if not name:
123
+ return None
124
+ lower = name.lower()
125
+ for prefix, family in _ROLE_FAMILY_PREFIX_MAP:
126
+ if prefix.endswith("-"):
127
+ if lower.startswith(prefix):
128
+ return family
129
+ else:
130
+ if lower == prefix or lower.startswith(prefix + "-") or lower.startswith(prefix + "_"):
131
+ return family
132
+ return None
133
+
134
+
135
+ def _role_warning(name: str, role: str) -> Optional[str]:
136
+ """Returns a warning string if name-prefix family ≠ role text family.
137
+ None when names with unknown prefixes (avoid false positives), or when
138
+ role text contains the expected family substring (case-insensitive).
139
+ """
140
+ if not name or not role:
141
+ return None
142
+ expected = _role_family_from_name(name)
143
+ if not expected:
144
+ return None
145
+ if expected.lower() in role.lower():
146
+ return None
147
+ return f"name '{name}' suggests {expected} but role is '{role}' — possible typo or mislabel"
148
+
149
+
98
150
  def _mc_log(msg: str, level: str = "info") -> None:
99
151
  """Colored [meshcode-mcp] log line. Uses agent color if available.
100
152
 
@@ -4045,7 +4097,12 @@ def meshcode_status() -> Dict[str, Any]:
4045
4097
  @with_working_status
4046
4098
  def meshcode_register(role: str = "") -> Dict[str, Any]:
4047
4099
  """Re-register agent (update role)."""
4048
- return be.register_agent(PROJECT_NAME, AGENT_NAME, role or AGENT_ROLE, api_key=_get_api_key())
4100
+ effective_role = role or AGENT_ROLE
4101
+ result = be.register_agent(PROJECT_NAME, AGENT_NAME, effective_role, api_key=_get_api_key())
4102
+ warn = _role_warning(AGENT_NAME, effective_role)
4103
+ if warn and isinstance(result, dict):
4104
+ result = {**result, "warning": warn}
4105
+ return result
4049
4106
 
4050
4107
 
4051
4108
  @mcp.tool()
@@ -4102,8 +4159,13 @@ def meshcode_init(project: str, agent: str, role: str = "") -> Dict[str, Any]:
4102
4159
  if not pid:
4103
4160
  return {"error": f"project '{project}' not found"}
4104
4161
  _PROJECT_ID = pid
4105
- result = be.register_agent(project, agent, role or "MCP-connected agent", api_key=_get_api_key())
4106
- return {"ok": True, "project": project, "agent": agent, "register": result}
4162
+ effective_role = role or "MCP-connected agent"
4163
+ result = be.register_agent(project, agent, effective_role, api_key=_get_api_key())
4164
+ warn = _role_warning(agent, effective_role)
4165
+ out: Dict[str, Any] = {"ok": True, "project": project, "agent": agent, "register": result}
4166
+ if warn:
4167
+ out["warning"] = warn
4168
+ return out
4107
4169
 
4108
4170
 
4109
4171
  @mcp.tool()
@@ -5295,9 +5357,14 @@ def meshcode_add_agent(name: str, role: str = "") -> Dict[str, Any]:
5295
5357
  name: Agent name.
5296
5358
  role: Agent role description.
5297
5359
  """
5298
- result = be.register_agent(PROJECT_NAME, name, role or "MCP-connected agent", api_key=_get_api_key())
5360
+ effective_role = role or "MCP-connected agent"
5361
+ result = be.register_agent(PROJECT_NAME, name, effective_role, api_key=_get_api_key())
5362
+ warn = _role_warning(name, effective_role)
5299
5363
  if isinstance(result, dict) and not result.get("error"):
5300
- return {"ok": True, "agent": name, "next_step": f"Run: meshcode setup {PROJECT_NAME} {name} && meshcode run {name}"}
5364
+ out: Dict[str, Any] = {"ok": True, "agent": name, "next_step": f"Run: meshcode setup {PROJECT_NAME} {name} && meshcode run {name}"}
5365
+ if warn:
5366
+ out["warning"] = warn
5367
+ return out
5301
5368
  return result or {"error": "failed to add agent"}
5302
5369
 
5303
5370
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meshcode
3
- Version: 2.11.40
3
+ Version: 2.11.41
4
4
  Summary: Real-time communication between AI agents — Supabase-backed CLI
5
5
  Author-email: MeshCode <hello@meshcode.io>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "meshcode"
7
- version = "2.11.40"
7
+ version = "2.11.41"
8
8
  description = "Real-time communication between AI agents — Supabase-backed CLI"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
File without changes
File without changes
File without changes