meshcode 2.11.18__tar.gz → 2.11.20__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. {meshcode-2.11.18 → meshcode-2.11.20}/PKG-INFO +1 -1
  2. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/__init__.py +1 -1
  3. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/meshcode_mcp/server.py +78 -8
  4. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/rpc_allowlist.py +4 -0
  5. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode.egg-info/PKG-INFO +1 -1
  6. {meshcode-2.11.18 → meshcode-2.11.20}/pyproject.toml +1 -1
  7. {meshcode-2.11.18 → meshcode-2.11.20}/README.md +0 -0
  8. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/__main__.py +0 -0
  9. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/_stop_hook_template.py +0 -0
  10. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/ascii_art.py +0 -0
  11. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/cli.py +0 -0
  12. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/comms_v4.py +0 -0
  13. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/compat.py +0 -0
  14. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/daemon.py +0 -0
  15. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/date_parse.py +0 -0
  16. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/doctor.py +0 -0
  17. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/error_hints.py +0 -0
  18. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/exceptions.py +0 -0
  19. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/invites.py +0 -0
  20. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/launcher.py +0 -0
  21. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/launcher_install.py +0 -0
  22. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/meshcode_mcp/__init__.py +0 -0
  23. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/meshcode_mcp/__main__.py +0 -0
  24. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/meshcode_mcp/backend.py +0 -0
  25. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/meshcode_mcp/realtime.py +0 -0
  26. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
  27. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/meshcode_mcp/test_backend.py +0 -0
  28. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
  29. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
  30. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
  31. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/meshcode_mcp/test_realtime.py +0 -0
  32. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  33. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/preferences.py +0 -0
  34. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/protocol_handler.py +0 -0
  35. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/protocol_v2.py +0 -0
  36. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/quickstart.py +0 -0
  37. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/run_agent.py +0 -0
  38. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/scripts/check_secrets.py +0 -0
  39. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/scripts/race_rate_harness.py +0 -0
  40. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/secrets.py +0 -0
  41. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/self_update.py +0 -0
  42. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/setup_clients.py +0 -0
  43. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/supervisor.py +0 -0
  44. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode/upload.py +0 -0
  45. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/comms_v4.py +0 -0
  46. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/__init__.py +0 -0
  47. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
  48. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/cli.py +0 -0
  49. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
  50. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/compat.py +0 -0
  51. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
  52. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
  53. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/invites.py +0 -0
  54. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/launcher.py +0 -0
  55. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
  56. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  57. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  58. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
  59. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  60. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
  61. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  62. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  63. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  64. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/preferences.py +0 -0
  65. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
  66. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
  67. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
  68. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/secrets.py +0 -0
  69. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/self_update.py +0 -0
  70. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
  71. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
  72. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/upload.py +0 -0
  73. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/scripts/sentinel.py +0 -0
  74. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_core.py +0 -0
  75. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
  76. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
  77. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
  78. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
  79. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
  80. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
  81. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
  82. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
  83. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
  84. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
  85. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
  86. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
  87. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
  88. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
  89. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
  90. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
  91. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
  92. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
  93. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
  94. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
  95. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
  96. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
  97. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
  98. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
  99. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
  100. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
  101. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
  102. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
  103. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  104. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
  105. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
  106. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
  107. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
  108. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
  109. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
  110. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
  111. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
  112. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
  113. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/comms_v4.py +0 -0
  114. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/__init__.py +0 -0
  115. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
  116. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/cli.py +0 -0
  117. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
  118. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/compat.py +0 -0
  119. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
  120. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
  121. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/invites.py +0 -0
  122. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/launcher.py +0 -0
  123. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
  124. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  125. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  126. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
  127. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  128. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
  129. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  130. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  131. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  132. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/preferences.py +0 -0
  133. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
  134. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
  135. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
  136. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/secrets.py +0 -0
  137. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/self_update.py +0 -0
  138. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
  139. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
  140. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/upload.py +0 -0
  141. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/scripts/sentinel.py +0 -0
  142. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_core.py +0 -0
  143. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
  144. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
  145. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
  146. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
  147. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
  148. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
  149. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
  150. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
  151. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
  152. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
  153. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
  154. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/comms_v4.py +0 -0
  155. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
  156. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
  157. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/cli.py +0 -0
  158. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
  159. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/compat.py +0 -0
  160. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
  161. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
  162. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/invites.py +0 -0
  163. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
  164. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
  165. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  166. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  167. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
  168. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  169. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
  170. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  171. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  172. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  173. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
  174. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
  175. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
  176. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
  177. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
  178. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
  179. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
  180. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
  181. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/upload.py +0 -0
  182. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
  183. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_core.py +0 -0
  184. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
  185. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
  186. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
  187. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
  188. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
  189. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
  190. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
  191. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
  192. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
  193. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
  194. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
  195. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode.egg-info/SOURCES.txt +0 -0
  196. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode.egg-info/dependency_links.txt +0 -0
  197. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode.egg-info/entry_points.txt +0 -0
  198. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode.egg-info/requires.txt +0 -0
  199. {meshcode-2.11.18 → meshcode-2.11.20}/meshcode.egg-info/top_level.txt +0 -0
  200. {meshcode-2.11.18 → meshcode-2.11.20}/setup.cfg +0 -0
  201. {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_auto_update_hardening.py +0 -0
  202. {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_boot_bug_regression.py +0 -0
  203. {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_color_truecolor.py +0 -0
  204. {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_core.py +0 -0
  205. {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_cross_agent_messaging.py +0 -0
  206. {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_date_parse.py +0 -0
  207. {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_doctor.py +0 -0
  208. {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_epistemic_v1_python_sdk.py +0 -0
  209. {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_epistemic_v1_stop_conditions.py +0 -0
  210. {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_esc_deaf_state.py +0 -0
  211. {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_exceptions.py +0 -0
  212. {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_init_device_code.py +0 -0
  213. {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_install_guard.py +0 -0
  214. {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_lease_sigterm_release.py +0 -0
  215. {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_mark_read_batch.py +0 -0
  216. {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_migration_integrity.py +0 -0
  217. {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_realtime_event_freshness.py +0 -0
  218. {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_rls_cross_tenant.py +0 -0
  219. {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_rpc_grants.py +0 -0
  220. {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_rpc_migrations.py +0 -0
  221. {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_security_regressions.py +0 -0
  222. {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_sentinel.py +0 -0
  223. {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_setup_path.py +0 -0
  224. {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_sleep_signals.py +0 -0
  225. {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_status_enum_coverage.py +0 -0
  226. {meshcode-2.11.18 → meshcode-2.11.20}/tests/test_stay_on_loop_hook.py +0 -0
  227. {meshcode-2.11.18 → meshcode-2.11.20}/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.18
3
+ Version: 2.11.20
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.18"
2
+ __version__ = "2.11.20"
3
3
 
4
4
  # Exception hierarchy — eagerly imported (lightweight, no deps)
5
5
  from meshcode.exceptions import ( # noqa: F401
@@ -3399,7 +3399,9 @@ async def meshcode_wait(timeout_seconds: int = 20, include_acks: bool = False) -
3399
3399
  "got_message": True,
3400
3400
  **split,
3401
3401
  }
3402
- # BE-S5.11: surface explicit must_exit when sleep authorized.
3402
+ # MESH-IMPROVE-1: surface auto-mark-seen telemetry.
3403
+ resp["auto_marked"] = len(deduped)
3404
+ resp["types_seen"] = sorted({m.get("type", "msg") for m in deduped})
3403
3405
  if split["done_signals"]:
3404
3406
  resp["must_exit"] = True
3405
3407
  resp["exit_reason"] = "sleep authorization received — set status=sleeping and end session"
@@ -3634,6 +3636,10 @@ async def _meshcode_wait_inner(actual_timeout: int, include_acks: bool) -> Dict[
3634
3636
  "got_message": True,
3635
3637
  **split,
3636
3638
  }
3639
+ # MESH-IMPROVE-1: surface auto-mark-seen telemetry so callers can
3640
+ # audit what the SDK considered processed without re-reading.
3641
+ out["auto_marked"] = len(deduped)
3642
+ out["types_seen"] = sorted({m.get("type", "msg") for m in deduped})
3637
3643
  done = _detect_global_done(deduped)
3638
3644
  if done:
3639
3645
  out["got_done"] = True
@@ -3717,7 +3723,12 @@ async def _meshcode_wait_inner(actual_timeout: int, include_acks: bool) -> Dict[
3717
3723
  if not include_acks:
3718
3724
  split["acks"] = []
3719
3725
  if split["messages"] or split["done_signals"]:
3720
- return {"got_message": True, **split}
3726
+ return {
3727
+ "got_message": True,
3728
+ **split,
3729
+ "auto_marked": len(deduped),
3730
+ "types_seen": sorted({m.get("type", "msg") for m in deduped}),
3731
+ }
3721
3732
  except Exception as e:
3722
3733
  log.debug(f"DB poll fallback error: {e}")
3723
3734
 
@@ -5323,6 +5334,8 @@ def meshcode_remember(
5323
5334
  value: Any,
5324
5335
  weight: int = 5,
5325
5336
  emotion_tag: Optional[str] = None,
5337
+ scope: str = "agent",
5338
+ promote_from: Optional[str] = None,
5326
5339
  ) -> Dict[str, Any]:
5327
5340
  """Store a persistent memory (survives restarts). Only for reusable learnings, NOT task data.
5328
5341
 
@@ -5330,16 +5343,22 @@ def meshcode_remember(
5330
5343
  key: Short key (e.g. "team_conventions").
5331
5344
  value: Any JSON-serializable value.
5332
5345
  weight: 1-10, default 5 (neutral). Higher = ranks higher on recall.
5333
- Use 8-10 for hard-won lessons (e.g. Samuel-frustrated-4x).
5334
- emotion_tag: Optional free-form tag (e.g. "frustration", "delight",
5335
- "concern"). Surfaced in recall hints so agents see why a memory
5336
- ranked.
5346
+ emotion_tag: Optional free-form tag.
5347
+ scope: 'agent' (default, per-agent memory) OR 'mesh' (shared across
5348
+ the meshwork; visible to all agents). MESH-IMPROVE-2 (mig 339).
5349
+ On write conflict with an existing mesh value, server records the
5350
+ contradiction; resolve via meshcode_resolve_contradiction.
5351
+ promote_from: when scope='mesh', set this to an existing agent-scope
5352
+ memory key — server lifts that value to mesh-scope without
5353
+ duplicating the data. Caller's `value` arg is ignored when set.
5337
5354
  """
5338
5355
  if not key or not key.strip():
5339
5356
  return {"error": "key cannot be empty"}
5340
5357
  key = key.strip()
5341
5358
  if not isinstance(weight, int) or weight < 1 or weight > 10:
5342
5359
  return {"error": "weight must be an integer 1..10"}
5360
+ if scope not in ("agent", "mesh"):
5361
+ return {"error": f"scope must be 'agent' or 'mesh', got {scope!r}"}
5343
5362
  api_key = _get_api_key()
5344
5363
  json_value = value if isinstance(value, (dict, list)) else json.dumps(value)
5345
5364
  if isinstance(json_value, str):
@@ -5347,6 +5366,20 @@ def meshcode_remember(
5347
5366
  json_value = json.loads(json_value)
5348
5367
  except (json.JSONDecodeError, TypeError):
5349
5368
  json_value = {"_raw": value}
5369
+ if scope == "mesh":
5370
+ # MESH-IMPROVE-2: mesh-scope write via mig 339 RPC. Surfaces
5371
+ # contradiction metadata in the response when an existing value
5372
+ # differs from the new one.
5373
+ return be.sb_rpc("mc_meshwork_remember", {
5374
+ "p_api_key": api_key,
5375
+ "p_project_id": _PROJECT_ID,
5376
+ "p_key": key,
5377
+ "p_value": json_value,
5378
+ "p_writer_agent": AGENT_NAME,
5379
+ "p_weight": weight,
5380
+ "p_emotion_tag": emotion_tag,
5381
+ "p_promote_from_agent_key": promote_from,
5382
+ })
5350
5383
  result = be.sb_rpc("mc_memory_set", {
5351
5384
  "p_api_key": api_key,
5352
5385
  "p_agent_name": AGENT_NAME,
@@ -5357,15 +5390,52 @@ def meshcode_remember(
5357
5390
  "p_weight": weight,
5358
5391
  "p_emotion_tag": emotion_tag,
5359
5392
  })
5360
- # Best-effort sync to Obsidian vault (if configured)
5361
5393
  if isinstance(result, dict) and result.get("ok"):
5362
5394
  try:
5363
5395
  _sync_to_obsidian(key, json_value)
5364
5396
  except Exception:
5365
- pass # Obsidian sync is best-effort, never block memory writes
5397
+ pass
5366
5398
  return result
5367
5399
 
5368
5400
 
5401
+ @mcp.tool()
5402
+ @with_working_status
5403
+ def meshcode_recall_mesh(key: str) -> Dict[str, Any]:
5404
+ """Read a mesh-scoped memory + any open contradictions on it.
5405
+ MESH-IMPROVE-2 (mig 339).
5406
+ """
5407
+ if not key or not key.strip():
5408
+ return {"error": "key cannot be empty"}
5409
+ return be.sb_rpc("mc_meshwork_recall", {
5410
+ "p_api_key": _get_api_key(),
5411
+ "p_project_id": _PROJECT_ID,
5412
+ "p_key": key.strip(),
5413
+ })
5414
+
5415
+
5416
+ @mcp.tool()
5417
+ @with_working_status
5418
+ def meshcode_resolve_contradiction(key: str, winning_value: Any) -> Dict[str, Any]:
5419
+ """Pick a winning value for a mesh-scoped memory with open contradictions.
5420
+ Marks every loser as superseded. MESH-IMPROVE-2 (mig 339).
5421
+ """
5422
+ if not key or not key.strip():
5423
+ return {"error": "key cannot be empty"}
5424
+ json_value = winning_value if isinstance(winning_value, (dict, list)) else json.dumps(winning_value)
5425
+ if isinstance(json_value, str):
5426
+ try:
5427
+ json_value = json.loads(json_value)
5428
+ except (json.JSONDecodeError, TypeError):
5429
+ json_value = {"_raw": winning_value}
5430
+ return be.sb_rpc("mc_meshwork_resolve_contradiction", {
5431
+ "p_api_key": _get_api_key(),
5432
+ "p_project_id": _PROJECT_ID,
5433
+ "p_key": key.strip(),
5434
+ "p_winning_value": json_value,
5435
+ "p_resolver": AGENT_NAME,
5436
+ })
5437
+
5438
+
5369
5439
  @mcp.tool()
5370
5440
  @with_working_status
5371
5441
  def meshcode_recall(key: Optional[str] = None) -> Dict[str, Any]:
@@ -67,6 +67,10 @@ AGENT_CALLABLE_RPCS = [
67
67
  "mc_memory_list",
68
68
  "mc_memory_search",
69
69
  "mc_memory_contradictions",
70
+ # Mesh-scoped memory (mig 339)
71
+ "mc_meshwork_remember",
72
+ "mc_meshwork_recall",
73
+ "mc_meshwork_resolve_contradiction",
70
74
 
71
75
  # ── Decisions / outcomes
72
76
  "mc_has_open_decision",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meshcode
3
- Version: 2.11.18
3
+ Version: 2.11.20
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.18"
7
+ version = "2.11.20"
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