meshcode 2.11.23__tar.gz → 2.11.25__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 (228) hide show
  1. {meshcode-2.11.23 → meshcode-2.11.25}/PKG-INFO +1 -1
  2. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/__init__.py +1 -1
  3. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/meshcode_mcp/server.py +129 -0
  4. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/rpc_allowlist.py +3 -0
  5. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode.egg-info/PKG-INFO +1 -1
  6. {meshcode-2.11.23 → meshcode-2.11.25}/pyproject.toml +1 -1
  7. {meshcode-2.11.23 → meshcode-2.11.25}/README.md +0 -0
  8. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/__main__.py +0 -0
  9. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/_stop_hook_template.py +0 -0
  10. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/ascii_art.py +0 -0
  11. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/atomic_push.py +0 -0
  12. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/cli.py +0 -0
  13. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/comms_v4.py +0 -0
  14. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/compat.py +0 -0
  15. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/daemon.py +0 -0
  16. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/date_parse.py +0 -0
  17. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/doctor.py +0 -0
  18. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/error_hints.py +0 -0
  19. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/exceptions.py +0 -0
  20. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/invites.py +0 -0
  21. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/launcher.py +0 -0
  22. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/launcher_install.py +0 -0
  23. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/meshcode_mcp/__init__.py +0 -0
  24. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/meshcode_mcp/__main__.py +0 -0
  25. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/meshcode_mcp/backend.py +0 -0
  26. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/meshcode_mcp/realtime.py +0 -0
  27. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
  28. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/meshcode_mcp/test_backend.py +0 -0
  29. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
  30. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
  31. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
  32. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/meshcode_mcp/test_realtime.py +0 -0
  33. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  34. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/preferences.py +0 -0
  35. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/protocol_handler.py +0 -0
  36. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/protocol_v2.py +0 -0
  37. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/quickstart.py +0 -0
  38. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/run_agent.py +0 -0
  39. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/scripts/check_secrets.py +0 -0
  40. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/scripts/race_rate_harness.py +0 -0
  41. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/secrets.py +0 -0
  42. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/self_update.py +0 -0
  43. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/setup_clients.py +0 -0
  44. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/supervisor.py +0 -0
  45. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode/upload.py +0 -0
  46. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/comms_v4.py +0 -0
  47. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/__init__.py +0 -0
  48. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
  49. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/cli.py +0 -0
  50. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
  51. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/compat.py +0 -0
  52. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
  53. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
  54. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/invites.py +0 -0
  55. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/launcher.py +0 -0
  56. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
  57. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  58. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  59. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
  60. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  61. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
  62. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  63. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  64. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  65. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/preferences.py +0 -0
  66. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
  67. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
  68. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
  69. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/secrets.py +0 -0
  70. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/self_update.py +0 -0
  71. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
  72. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
  73. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/meshcode/upload.py +0 -0
  74. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/scripts/sentinel.py +0 -0
  75. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/tests/test_core.py +0 -0
  76. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
  77. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
  78. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
  79. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
  80. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
  81. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
  82. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
  83. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
  84. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
  85. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
  86. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
  87. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
  88. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
  89. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
  90. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
  91. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
  92. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
  93. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
  94. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
  95. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
  96. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
  97. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
  98. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
  99. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
  100. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
  101. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
  102. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
  103. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
  104. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  105. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
  106. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
  107. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
  108. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
  109. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
  110. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
  111. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
  112. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
  113. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
  114. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/comms_v4.py +0 -0
  115. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/__init__.py +0 -0
  116. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
  117. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/cli.py +0 -0
  118. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
  119. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/compat.py +0 -0
  120. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
  121. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
  122. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/invites.py +0 -0
  123. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/launcher.py +0 -0
  124. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
  125. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  126. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  127. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
  128. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  129. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
  130. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  131. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  132. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  133. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/preferences.py +0 -0
  134. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
  135. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
  136. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
  137. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/secrets.py +0 -0
  138. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/self_update.py +0 -0
  139. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
  140. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
  141. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/meshcode/upload.py +0 -0
  142. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/scripts/sentinel.py +0 -0
  143. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/tests/test_core.py +0 -0
  144. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
  145. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
  146. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
  147. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
  148. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
  149. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
  150. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
  151. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
  152. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
  153. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
  154. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
  155. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/comms_v4.py +0 -0
  156. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
  157. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
  158. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/cli.py +0 -0
  159. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
  160. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/compat.py +0 -0
  161. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
  162. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
  163. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/invites.py +0 -0
  164. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
  165. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
  166. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  167. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  168. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
  169. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  170. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
  171. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  172. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  173. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  174. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
  175. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
  176. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
  177. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
  178. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
  179. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
  180. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
  181. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
  182. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/meshcode/upload.py +0 -0
  183. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
  184. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/tests/test_core.py +0 -0
  185. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
  186. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
  187. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
  188. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
  189. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
  190. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
  191. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
  192. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
  193. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
  194. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
  195. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
  196. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode.egg-info/SOURCES.txt +0 -0
  197. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode.egg-info/dependency_links.txt +0 -0
  198. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode.egg-info/entry_points.txt +0 -0
  199. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode.egg-info/requires.txt +0 -0
  200. {meshcode-2.11.23 → meshcode-2.11.25}/meshcode.egg-info/top_level.txt +0 -0
  201. {meshcode-2.11.23 → meshcode-2.11.25}/setup.cfg +0 -0
  202. {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_auto_update_hardening.py +0 -0
  203. {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_boot_bug_regression.py +0 -0
  204. {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_color_truecolor.py +0 -0
  205. {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_core.py +0 -0
  206. {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_cross_agent_messaging.py +0 -0
  207. {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_date_parse.py +0 -0
  208. {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_doctor.py +0 -0
  209. {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_epistemic_v1_python_sdk.py +0 -0
  210. {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_epistemic_v1_stop_conditions.py +0 -0
  211. {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_esc_deaf_state.py +0 -0
  212. {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_exceptions.py +0 -0
  213. {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_init_device_code.py +0 -0
  214. {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_install_guard.py +0 -0
  215. {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_lease_sigterm_release.py +0 -0
  216. {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_mark_read_batch.py +0 -0
  217. {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_migration_integrity.py +0 -0
  218. {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_realtime_event_freshness.py +0 -0
  219. {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_rls_cross_tenant.py +0 -0
  220. {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_rpc_grants.py +0 -0
  221. {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_rpc_migrations.py +0 -0
  222. {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_security_regressions.py +0 -0
  223. {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_sentinel.py +0 -0
  224. {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_setup_path.py +0 -0
  225. {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_sleep_signals.py +0 -0
  226. {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_status_enum_coverage.py +0 -0
  227. {meshcode-2.11.23 → meshcode-2.11.25}/tests/test_stay_on_loop_hook.py +0 -0
  228. {meshcode-2.11.23 → meshcode-2.11.25}/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.23
3
+ Version: 2.11.25
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.23"
2
+ __version__ = "2.11.25"
3
3
 
4
4
  # Exception hierarchy — eagerly imported (lightweight, no deps)
5
5
  from meshcode.exceptions import ( # noqa: F401
@@ -5398,6 +5398,38 @@ def meshcode_remember(
5398
5398
  return result
5399
5399
 
5400
5400
 
5401
+ @mcp.tool()
5402
+ @with_working_status
5403
+ def meshcode_register_skills(skills: List[str]) -> Dict[str, Any]:
5404
+ """Register the skill catalog available in this MCP session.
5405
+ MESH-IMPROVE-8 (mig 344). Call at boot or when runtime skills change.
5406
+ """
5407
+ if skills is None:
5408
+ skills = []
5409
+ return be.sb_rpc("mc_register_skills", {
5410
+ "p_api_key": _get_api_key(),
5411
+ "p_project_id": _PROJECT_ID,
5412
+ "p_agent_name": AGENT_NAME,
5413
+ "p_skills": skills,
5414
+ })
5415
+
5416
+
5417
+ @mcp.tool()
5418
+ @with_working_status
5419
+ def meshcode_mandate_skill(skill_name: str) -> Dict[str, Any]:
5420
+ """Commander-class broadcast: report which agents have the skill, notify
5421
+ missing ones via system msg. MESH-IMPROVE-8 (mig 344).
5422
+ Returns: {ok, skill, present_agents, missing_agents, notified_count}.
5423
+ """
5424
+ if not skill_name or not skill_name.strip():
5425
+ return {"error": "skill_name cannot be empty"}
5426
+ return be.sb_rpc("mc_mandate_skill", {
5427
+ "p_api_key": _get_api_key(),
5428
+ "p_project_id": _PROJECT_ID,
5429
+ "p_skill_name": skill_name.strip(),
5430
+ })
5431
+
5432
+
5401
5433
  @mcp.tool()
5402
5434
  @with_working_status
5403
5435
  def meshcode_atomic_push(
@@ -5439,6 +5471,103 @@ def meshcode_atomic_push(
5439
5471
  return {"error": str(e), "error_type": type(e).__name__}
5440
5472
 
5441
5473
 
5474
+ @mcp.tool()
5475
+ @with_working_status
5476
+ def meshcode_check_deploy_drift(
5477
+ target_url: str = "https://meshcode.io/build-sha.txt",
5478
+ expected_sha: Optional[str] = None,
5479
+ fallback_to_meta_tag: bool = True,
5480
+ ) -> Dict[str, Any]:
5481
+ """Compare a deployed build SHA against expected (or local origin HEAD).
5482
+ MESH-IMPROVE-6 Part B (pair with front-end's Vite plugin, 82a1378).
5483
+
5484
+ Strategy:
5485
+ 1. fetch target_url; if text contains a 40-hex SHA, that's deployed_sha
5486
+ 2. if (1) fails AND fallback_to_meta_tag, fetch the site root and grep
5487
+ <meta name="meshcode-build-sha" content="..."/>
5488
+ 3. if expected_sha not provided, fetch origin/main HEAD via gh-api
5489
+ (uses PAT from .git/config — same pattern as atomic_push)
5490
+ 4. report {deployed_sha, expected_sha, commits_ahead_estimate,
5491
+ drift_warning, suggested_action}
5492
+
5493
+ Args:
5494
+ target_url: where to read the deployed SHA from (default build-sha.txt)
5495
+ expected_sha: explicit expected; omit to auto-fetch origin/main HEAD
5496
+ fallback_to_meta_tag: if build-sha.txt 404s, try meta tag
5497
+
5498
+ Returns: {ok, deployed_sha, expected_sha, drift_warning, suggested_action}
5499
+ """
5500
+ import re as _re
5501
+ import urllib.request as _ur
5502
+ import urllib.error as _ue
5503
+ deployed_sha = None
5504
+ fetch_err = None
5505
+ try:
5506
+ req = _ur.Request(target_url, headers={"User-Agent": "meshcode-deploy-drift/1.0"})
5507
+ with _ur.urlopen(req, timeout=10) as r:
5508
+ body = r.read().decode(errors="replace").strip()
5509
+ m = _re.search(r"\b[0-9a-f]{7,40}\b", body)
5510
+ if m:
5511
+ deployed_sha = m.group(0)
5512
+ except (_ue.HTTPError, _ue.URLError) as e:
5513
+ fetch_err = f"{type(e).__name__}: {e}"
5514
+ if deployed_sha is None and fallback_to_meta_tag:
5515
+ try:
5516
+ root_url = "/".join(target_url.split("/")[:3]) + "/"
5517
+ req = _ur.Request(root_url, headers={"User-Agent": "meshcode-deploy-drift/1.0"})
5518
+ with _ur.urlopen(req, timeout=10) as r:
5519
+ body = r.read().decode(errors="replace")
5520
+ m = _re.search(r'meta\s+name="meshcode-build-sha"\s+content="([0-9a-f]{7,40})"', body)
5521
+ if m:
5522
+ deployed_sha = m.group(1)
5523
+ except Exception as e:
5524
+ fetch_err = (fetch_err or "") + f"; meta_tag_fetch: {e}"
5525
+ if expected_sha is None:
5526
+ try:
5527
+ from meshcode.atomic_push import parse_git_config
5528
+ remotes = parse_git_config()
5529
+ if "origin" in remotes:
5530
+ owner, repo, pat = remotes["origin"]
5531
+ api_url = f"https://api.github.com/repos/{owner}/{repo}/git/ref/heads/main"
5532
+ req = _ur.Request(api_url)
5533
+ req.add_header("Authorization", f"Bearer {pat}")
5534
+ req.add_header("Accept", "application/vnd.github+json")
5535
+ with _ur.urlopen(req, timeout=10) as r:
5536
+ expected_sha = json.loads(r.read().decode())["object"]["sha"]
5537
+ except Exception as e:
5538
+ return {
5539
+ "ok": False,
5540
+ "error": f"could not resolve expected_sha: {e}",
5541
+ "deployed_sha": deployed_sha,
5542
+ "fetch_err": fetch_err,
5543
+ }
5544
+ if not deployed_sha:
5545
+ return {
5546
+ "ok": False,
5547
+ "error": "could not read deployed SHA from target_url or meta tag",
5548
+ "target_url": target_url,
5549
+ "expected_sha": expected_sha,
5550
+ "fetch_err": fetch_err,
5551
+ }
5552
+ # Compare prefixes (deployed might be 7-char short)
5553
+ drift = not (
5554
+ deployed_sha == expected_sha
5555
+ or deployed_sha == expected_sha[: len(deployed_sha)]
5556
+ or expected_sha == deployed_sha[: len(expected_sha)]
5557
+ )
5558
+ return {
5559
+ "ok": True,
5560
+ "deployed_sha": deployed_sha,
5561
+ "expected_sha": expected_sha,
5562
+ "drift_warning": drift,
5563
+ "suggested_action": (
5564
+ "wait for publish/build to rotate OR trigger remote build"
5565
+ if drift else "deployed matches expected — safe to verify"
5566
+ ),
5567
+ "target_url": target_url,
5568
+ }
5569
+
5570
+
5442
5571
  @mcp.tool()
5443
5572
  @with_working_status
5444
5573
  def meshcode_commander_brief(
@@ -104,6 +104,9 @@ AGENT_CALLABLE_RPCS = [
104
104
  # ── Misc agent-callable
105
105
  "mc_list_user_projects",
106
106
  "mc_commander_brief", # mig 341
107
+ # Skill parity (mig 344)
108
+ "mc_register_skills",
109
+ "mc_mandate_skill",
107
110
  ]
108
111
 
109
112
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meshcode
3
- Version: 2.11.23
3
+ Version: 2.11.25
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.23"
7
+ version = "2.11.25"
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