meshcode 2.11.19__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.19 → meshcode-2.11.20}/PKG-INFO +1 -1
  2. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/__init__.py +1 -1
  3. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/meshcode_mcp/server.py +65 -6
  4. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/rpc_allowlist.py +4 -0
  5. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode.egg-info/PKG-INFO +1 -1
  6. {meshcode-2.11.19 → meshcode-2.11.20}/pyproject.toml +1 -1
  7. {meshcode-2.11.19 → meshcode-2.11.20}/README.md +0 -0
  8. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/__main__.py +0 -0
  9. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/_stop_hook_template.py +0 -0
  10. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/ascii_art.py +0 -0
  11. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/cli.py +0 -0
  12. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/comms_v4.py +0 -0
  13. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/compat.py +0 -0
  14. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/daemon.py +0 -0
  15. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/date_parse.py +0 -0
  16. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/doctor.py +0 -0
  17. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/error_hints.py +0 -0
  18. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/exceptions.py +0 -0
  19. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/invites.py +0 -0
  20. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/launcher.py +0 -0
  21. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/launcher_install.py +0 -0
  22. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/meshcode_mcp/__init__.py +0 -0
  23. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/meshcode_mcp/__main__.py +0 -0
  24. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/meshcode_mcp/backend.py +0 -0
  25. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/meshcode_mcp/realtime.py +0 -0
  26. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
  27. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/meshcode_mcp/test_backend.py +0 -0
  28. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
  29. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
  30. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
  31. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/meshcode_mcp/test_realtime.py +0 -0
  32. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  33. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/preferences.py +0 -0
  34. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/protocol_handler.py +0 -0
  35. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/protocol_v2.py +0 -0
  36. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/quickstart.py +0 -0
  37. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/run_agent.py +0 -0
  38. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/scripts/check_secrets.py +0 -0
  39. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/scripts/race_rate_harness.py +0 -0
  40. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/secrets.py +0 -0
  41. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/self_update.py +0 -0
  42. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/setup_clients.py +0 -0
  43. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/supervisor.py +0 -0
  44. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode/upload.py +0 -0
  45. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/comms_v4.py +0 -0
  46. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/__init__.py +0 -0
  47. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
  48. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/cli.py +0 -0
  49. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
  50. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/compat.py +0 -0
  51. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
  52. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
  53. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/invites.py +0 -0
  54. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/launcher.py +0 -0
  55. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
  56. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  57. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  58. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
  59. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  60. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
  61. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  62. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  63. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  64. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/preferences.py +0 -0
  65. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
  66. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
  67. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
  68. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/secrets.py +0 -0
  69. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/self_update.py +0 -0
  70. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
  71. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
  72. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/meshcode/upload.py +0 -0
  73. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/scripts/sentinel.py +0 -0
  74. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_core.py +0 -0
  75. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
  76. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
  77. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
  78. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
  79. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
  80. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
  81. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
  82. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
  83. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
  84. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
  85. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
  86. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
  87. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
  88. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
  89. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
  90. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
  91. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
  92. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
  93. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
  94. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
  95. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
  96. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
  97. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
  98. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
  99. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
  100. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
  101. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
  102. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
  103. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  104. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
  105. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
  106. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
  107. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
  108. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
  109. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
  110. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
  111. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
  112. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
  113. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/comms_v4.py +0 -0
  114. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/__init__.py +0 -0
  115. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
  116. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/cli.py +0 -0
  117. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
  118. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/compat.py +0 -0
  119. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
  120. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
  121. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/invites.py +0 -0
  122. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/launcher.py +0 -0
  123. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
  124. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  125. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  126. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
  127. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  128. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
  129. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  130. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  131. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  132. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/preferences.py +0 -0
  133. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
  134. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
  135. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
  136. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/secrets.py +0 -0
  137. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/self_update.py +0 -0
  138. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
  139. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
  140. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/meshcode/upload.py +0 -0
  141. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/scripts/sentinel.py +0 -0
  142. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_core.py +0 -0
  143. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
  144. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
  145. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
  146. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
  147. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
  148. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
  149. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
  150. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
  151. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
  152. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
  153. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
  154. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/comms_v4.py +0 -0
  155. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
  156. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
  157. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/cli.py +0 -0
  158. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
  159. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/compat.py +0 -0
  160. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
  161. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
  162. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/invites.py +0 -0
  163. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
  164. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
  165. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  166. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  167. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
  168. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  169. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
  170. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  171. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  172. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  173. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
  174. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
  175. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
  176. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
  177. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
  178. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
  179. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
  180. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
  181. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/meshcode/upload.py +0 -0
  182. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
  183. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_core.py +0 -0
  184. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
  185. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
  186. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
  187. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
  188. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
  189. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
  190. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
  191. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
  192. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
  193. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
  194. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
  195. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode.egg-info/SOURCES.txt +0 -0
  196. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode.egg-info/dependency_links.txt +0 -0
  197. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode.egg-info/entry_points.txt +0 -0
  198. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode.egg-info/requires.txt +0 -0
  199. {meshcode-2.11.19 → meshcode-2.11.20}/meshcode.egg-info/top_level.txt +0 -0
  200. {meshcode-2.11.19 → meshcode-2.11.20}/setup.cfg +0 -0
  201. {meshcode-2.11.19 → meshcode-2.11.20}/tests/test_auto_update_hardening.py +0 -0
  202. {meshcode-2.11.19 → meshcode-2.11.20}/tests/test_boot_bug_regression.py +0 -0
  203. {meshcode-2.11.19 → meshcode-2.11.20}/tests/test_color_truecolor.py +0 -0
  204. {meshcode-2.11.19 → meshcode-2.11.20}/tests/test_core.py +0 -0
  205. {meshcode-2.11.19 → meshcode-2.11.20}/tests/test_cross_agent_messaging.py +0 -0
  206. {meshcode-2.11.19 → meshcode-2.11.20}/tests/test_date_parse.py +0 -0
  207. {meshcode-2.11.19 → meshcode-2.11.20}/tests/test_doctor.py +0 -0
  208. {meshcode-2.11.19 → meshcode-2.11.20}/tests/test_epistemic_v1_python_sdk.py +0 -0
  209. {meshcode-2.11.19 → meshcode-2.11.20}/tests/test_epistemic_v1_stop_conditions.py +0 -0
  210. {meshcode-2.11.19 → meshcode-2.11.20}/tests/test_esc_deaf_state.py +0 -0
  211. {meshcode-2.11.19 → meshcode-2.11.20}/tests/test_exceptions.py +0 -0
  212. {meshcode-2.11.19 → meshcode-2.11.20}/tests/test_init_device_code.py +0 -0
  213. {meshcode-2.11.19 → meshcode-2.11.20}/tests/test_install_guard.py +0 -0
  214. {meshcode-2.11.19 → meshcode-2.11.20}/tests/test_lease_sigterm_release.py +0 -0
  215. {meshcode-2.11.19 → meshcode-2.11.20}/tests/test_mark_read_batch.py +0 -0
  216. {meshcode-2.11.19 → meshcode-2.11.20}/tests/test_migration_integrity.py +0 -0
  217. {meshcode-2.11.19 → meshcode-2.11.20}/tests/test_realtime_event_freshness.py +0 -0
  218. {meshcode-2.11.19 → meshcode-2.11.20}/tests/test_rls_cross_tenant.py +0 -0
  219. {meshcode-2.11.19 → meshcode-2.11.20}/tests/test_rpc_grants.py +0 -0
  220. {meshcode-2.11.19 → meshcode-2.11.20}/tests/test_rpc_migrations.py +0 -0
  221. {meshcode-2.11.19 → meshcode-2.11.20}/tests/test_security_regressions.py +0 -0
  222. {meshcode-2.11.19 → meshcode-2.11.20}/tests/test_sentinel.py +0 -0
  223. {meshcode-2.11.19 → meshcode-2.11.20}/tests/test_setup_path.py +0 -0
  224. {meshcode-2.11.19 → meshcode-2.11.20}/tests/test_sleep_signals.py +0 -0
  225. {meshcode-2.11.19 → meshcode-2.11.20}/tests/test_status_enum_coverage.py +0 -0
  226. {meshcode-2.11.19 → meshcode-2.11.20}/tests/test_stay_on_loop_hook.py +0 -0
  227. {meshcode-2.11.19 → 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.19
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.19"
2
+ __version__ = "2.11.20"
3
3
 
4
4
  # Exception hierarchy — eagerly imported (lightweight, no deps)
5
5
  from meshcode.exceptions import ( # noqa: F401
@@ -5334,6 +5334,8 @@ def meshcode_remember(
5334
5334
  value: Any,
5335
5335
  weight: int = 5,
5336
5336
  emotion_tag: Optional[str] = None,
5337
+ scope: str = "agent",
5338
+ promote_from: Optional[str] = None,
5337
5339
  ) -> Dict[str, Any]:
5338
5340
  """Store a persistent memory (survives restarts). Only for reusable learnings, NOT task data.
5339
5341
 
@@ -5341,16 +5343,22 @@ def meshcode_remember(
5341
5343
  key: Short key (e.g. "team_conventions").
5342
5344
  value: Any JSON-serializable value.
5343
5345
  weight: 1-10, default 5 (neutral). Higher = ranks higher on recall.
5344
- Use 8-10 for hard-won lessons (e.g. Samuel-frustrated-4x).
5345
- emotion_tag: Optional free-form tag (e.g. "frustration", "delight",
5346
- "concern"). Surfaced in recall hints so agents see why a memory
5347
- 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.
5348
5354
  """
5349
5355
  if not key or not key.strip():
5350
5356
  return {"error": "key cannot be empty"}
5351
5357
  key = key.strip()
5352
5358
  if not isinstance(weight, int) or weight < 1 or weight > 10:
5353
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}"}
5354
5362
  api_key = _get_api_key()
5355
5363
  json_value = value if isinstance(value, (dict, list)) else json.dumps(value)
5356
5364
  if isinstance(json_value, str):
@@ -5358,6 +5366,20 @@ def meshcode_remember(
5358
5366
  json_value = json.loads(json_value)
5359
5367
  except (json.JSONDecodeError, TypeError):
5360
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
+ })
5361
5383
  result = be.sb_rpc("mc_memory_set", {
5362
5384
  "p_api_key": api_key,
5363
5385
  "p_agent_name": AGENT_NAME,
@@ -5368,15 +5390,52 @@ def meshcode_remember(
5368
5390
  "p_weight": weight,
5369
5391
  "p_emotion_tag": emotion_tag,
5370
5392
  })
5371
- # Best-effort sync to Obsidian vault (if configured)
5372
5393
  if isinstance(result, dict) and result.get("ok"):
5373
5394
  try:
5374
5395
  _sync_to_obsidian(key, json_value)
5375
5396
  except Exception:
5376
- pass # Obsidian sync is best-effort, never block memory writes
5397
+ pass
5377
5398
  return result
5378
5399
 
5379
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
+
5380
5439
  @mcp.tool()
5381
5440
  @with_working_status
5382
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.19
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.19"
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