meshcode 2.11.5__tar.gz → 2.11.6__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 (210) hide show
  1. {meshcode-2.11.5 → meshcode-2.11.6}/PKG-INFO +1 -1
  2. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/__init__.py +1 -1
  3. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/meshcode_mcp/server.py +162 -67
  4. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode.egg-info/PKG-INFO +1 -1
  5. {meshcode-2.11.5 → meshcode-2.11.6}/pyproject.toml +1 -1
  6. {meshcode-2.11.5 → meshcode-2.11.6}/README.md +0 -0
  7. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/_stop_hook_template.py +0 -0
  8. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/ascii_art.py +0 -0
  9. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/cli.py +0 -0
  10. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/comms_v4.py +0 -0
  11. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/compat.py +0 -0
  12. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/daemon.py +0 -0
  13. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/error_hints.py +0 -0
  14. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/exceptions.py +0 -0
  15. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/invites.py +0 -0
  16. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/launcher.py +0 -0
  17. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/launcher_install.py +0 -0
  18. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/meshcode_mcp/__init__.py +0 -0
  19. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/meshcode_mcp/__main__.py +0 -0
  20. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/meshcode_mcp/backend.py +0 -0
  21. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/meshcode_mcp/realtime.py +0 -0
  22. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
  23. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/meshcode_mcp/test_backend.py +0 -0
  24. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/meshcode_mcp/test_realtime.py +0 -0
  25. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  26. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/preferences.py +0 -0
  27. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/protocol_handler.py +0 -0
  28. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/protocol_v2.py +0 -0
  29. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/quickstart.py +0 -0
  30. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/run_agent.py +0 -0
  31. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/scripts/check_secrets.py +0 -0
  32. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/scripts/race_rate_harness.py +0 -0
  33. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/secrets.py +0 -0
  34. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/self_update.py +0 -0
  35. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/setup_clients.py +0 -0
  36. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/supervisor.py +0 -0
  37. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode/upload.py +0 -0
  38. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/comms_v4.py +0 -0
  39. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/meshcode/__init__.py +0 -0
  40. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
  41. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/meshcode/cli.py +0 -0
  42. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
  43. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/meshcode/compat.py +0 -0
  44. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
  45. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
  46. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/meshcode/invites.py +0 -0
  47. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/meshcode/launcher.py +0 -0
  48. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
  49. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  50. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  51. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
  52. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  53. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
  54. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  55. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  56. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  57. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/meshcode/preferences.py +0 -0
  58. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
  59. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
  60. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
  61. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/meshcode/secrets.py +0 -0
  62. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/meshcode/self_update.py +0 -0
  63. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
  64. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
  65. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/meshcode/upload.py +0 -0
  66. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/scripts/sentinel.py +0 -0
  67. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/tests/test_core.py +0 -0
  68. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
  69. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
  70. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
  71. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
  72. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
  73. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
  74. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
  75. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
  76. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
  77. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
  78. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
  79. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
  80. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
  81. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
  82. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
  83. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
  84. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
  85. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
  86. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
  87. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
  88. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
  89. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
  90. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
  91. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
  92. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
  93. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
  94. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
  95. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
  96. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  97. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
  98. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
  99. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
  100. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
  101. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
  102. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
  103. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
  104. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
  105. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
  106. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/comms_v4.py +0 -0
  107. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/meshcode/__init__.py +0 -0
  108. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
  109. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/meshcode/cli.py +0 -0
  110. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
  111. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/meshcode/compat.py +0 -0
  112. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
  113. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
  114. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/meshcode/invites.py +0 -0
  115. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/meshcode/launcher.py +0 -0
  116. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
  117. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  118. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  119. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
  120. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  121. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
  122. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  123. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  124. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  125. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/meshcode/preferences.py +0 -0
  126. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
  127. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
  128. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
  129. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/meshcode/secrets.py +0 -0
  130. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/meshcode/self_update.py +0 -0
  131. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
  132. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
  133. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/meshcode/upload.py +0 -0
  134. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/scripts/sentinel.py +0 -0
  135. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/tests/test_core.py +0 -0
  136. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
  137. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
  138. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
  139. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
  140. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
  141. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
  142. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
  143. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
  144. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
  145. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
  146. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
  147. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/comms_v4.py +0 -0
  148. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
  149. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
  150. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/meshcode/cli.py +0 -0
  151. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
  152. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/meshcode/compat.py +0 -0
  153. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
  154. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
  155. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/meshcode/invites.py +0 -0
  156. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
  157. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
  158. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  159. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  160. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
  161. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  162. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
  163. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  164. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  165. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  166. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
  167. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
  168. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
  169. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
  170. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
  171. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
  172. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
  173. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
  174. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/meshcode/upload.py +0 -0
  175. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
  176. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/tests/test_core.py +0 -0
  177. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
  178. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
  179. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
  180. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
  181. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
  182. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
  183. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
  184. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
  185. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
  186. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
  187. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
  188. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode.egg-info/SOURCES.txt +0 -0
  189. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode.egg-info/dependency_links.txt +0 -0
  190. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode.egg-info/entry_points.txt +0 -0
  191. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode.egg-info/requires.txt +0 -0
  192. {meshcode-2.11.5 → meshcode-2.11.6}/meshcode.egg-info/top_level.txt +0 -0
  193. {meshcode-2.11.5 → meshcode-2.11.6}/setup.cfg +0 -0
  194. {meshcode-2.11.5 → meshcode-2.11.6}/tests/test_auto_update_hardening.py +0 -0
  195. {meshcode-2.11.5 → meshcode-2.11.6}/tests/test_core.py +0 -0
  196. {meshcode-2.11.5 → meshcode-2.11.6}/tests/test_cross_agent_messaging.py +0 -0
  197. {meshcode-2.11.5 → meshcode-2.11.6}/tests/test_esc_deaf_state.py +0 -0
  198. {meshcode-2.11.5 → meshcode-2.11.6}/tests/test_exceptions.py +0 -0
  199. {meshcode-2.11.5 → meshcode-2.11.6}/tests/test_lease_sigterm_release.py +0 -0
  200. {meshcode-2.11.5 → meshcode-2.11.6}/tests/test_mark_read_batch.py +0 -0
  201. {meshcode-2.11.5 → meshcode-2.11.6}/tests/test_migration_integrity.py +0 -0
  202. {meshcode-2.11.5 → meshcode-2.11.6}/tests/test_realtime_event_freshness.py +0 -0
  203. {meshcode-2.11.5 → meshcode-2.11.6}/tests/test_rls_cross_tenant.py +0 -0
  204. {meshcode-2.11.5 → meshcode-2.11.6}/tests/test_rpc_migrations.py +0 -0
  205. {meshcode-2.11.5 → meshcode-2.11.6}/tests/test_security_regressions.py +0 -0
  206. {meshcode-2.11.5 → meshcode-2.11.6}/tests/test_sentinel.py +0 -0
  207. {meshcode-2.11.5 → meshcode-2.11.6}/tests/test_sleep_signals.py +0 -0
  208. {meshcode-2.11.5 → meshcode-2.11.6}/tests/test_status_enum_coverage.py +0 -0
  209. {meshcode-2.11.5 → meshcode-2.11.6}/tests/test_stay_on_loop_hook.py +0 -0
  210. {meshcode-2.11.5 → meshcode-2.11.6}/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.5
3
+ Version: 2.11.6
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.5"
2
+ __version__ = "2.11.6"
3
3
 
4
4
  # Exception hierarchy — eagerly imported (lightweight, no deps)
5
5
  from meshcode.exceptions import ( # noqa: F401
@@ -1438,18 +1438,14 @@ def _build_instructions() -> str:
1438
1438
  f"\nUSER-PROVIDED ROLE PROMPT (from the dashboard):\n---\n{_LAUNCH_PROMPT}\n---\n"
1439
1439
  if _LAUNCH_PROMPT else ""
1440
1440
  )
1441
- # Pull the canonical loop directive from the DB so product can tune it
1442
- # without a client release. Falls back to the baked-in version below if
1443
- # the RPC isn't available (older DB) or the call fails.
1441
+ # MIG-PLAN-A 2026-05-18 (boot bug 00d73223 second RC): module-import-time
1442
+ # be.sb_rpc calls block MCP InitializeResult on commander-class agents with
1443
+ # heavy memory payloads, even after mig 312 closed the SDK↔DDL CHECK retry
1444
+ # storm. Defer ALL network I/O out of _build_instructions(). The baked-in
1445
+ # static LOOP directive below is sufficient for boot; if product later
1446
+ # wants live tuning, fetch in BG and inject via memory_hints envelope on
1447
+ # first tool call. NO be.sb_rpc here.
1444
1448
  _db_loop = ""
1445
- try:
1446
- _r = be.sb_rpc("mc_get_loop_directive", {})
1447
- if isinstance(_r, list) and _r:
1448
- _r = _r[0]
1449
- if isinstance(_r, str) and _r.strip():
1450
- _db_loop = _r.strip() + "\n\n"
1451
- except Exception:
1452
- pass
1453
1449
 
1454
1450
  base = f"""You are agent "{AGENT_NAME}" in meshwork "{PROJECT_NAME}".{role_block}{launch_block}
1455
1451
 
@@ -1462,6 +1458,8 @@ SESSION START (run NOW, don't wait for input). If tool schemas are deferred:
1462
1458
  Then: set_status(online,ready) → check() → tasks() → auto_wake() → status() → wait(). Don't ask user "what to work on" — the mesh tells you.
1463
1459
 
1464
1460
  COMMUNICATE BY CALLING TOOLS, not by thinking aloud. Cross-mesh: send(to="agent@meshwork"). Reference docs (memory/scratchpad/account ops) → recall agent_protocol_quick_ref when needed.
1461
+
1462
+ DECISIONS: when you face a non-trivial pick (architectural choice, risky migration, scope decision), call meshcode_decide(decision, alternatives, evidence_refs) BEFORE acting — returns a trace_id. Call meshcode_outcome(trace_id, outcome, outcome_eval) when the result becomes observable. Use meshcode_explain(memory_key=…) or (decision_substring=…) to surface prior traces + open contradictions. Memory hints with open_contradictions take a -0.2 ranking penalty — treat as a flag, not a veto.
1465
1463
  """
1466
1464
  # Inject commander protocol if this agent is a leader
1467
1465
  is_leader = _is_leader_agent()
@@ -1485,67 +1483,68 @@ COMMANDER PROTOCOL (you are the team lead):
1485
1483
  return base
1486
1484
 
1487
1485
 
1486
+ # MIG-PLAN-A 2026-05-18 (boot bug 00d73223 part 2): timer-bracketed
1487
+ # _INSTRUCTIONS construction. If module-import-time work exceeds the budget,
1488
+ # the regression sentinel (CI) trips so we don't silently regress past the
1489
+ # Claude Code MCP-handshake window again. Caught the zylo-commander 17:28
1490
+ # repro after mig 312 had already closed the SDK↔DDL retry storm.
1491
+ _INSTRUCTIONS_BUILD_NS = _time.monotonic_ns()
1488
1492
  _INSTRUCTIONS = _build_instructions()
1493
+ _INSTRUCTIONS_BUILD_NS = _time.monotonic_ns() - _INSTRUCTIONS_BUILD_NS
1494
+ log.info(
1495
+ f"_INSTRUCTIONS built in {_INSTRUCTIONS_BUILD_NS/1_000_000:.1f}ms "
1496
+ f"(budget <500ms — MCP handshake window)"
1497
+ )
1498
+ if _INSTRUCTIONS_BUILD_NS > 500_000_000:
1499
+ log.warning(
1500
+ f"_INSTRUCTIONS build exceeded 500ms budget ({_INSTRUCTIONS_BUILD_NS/1_000_000:.1f}ms) "
1501
+ f"— commander-class agents may fail MCP handshake on slower networks. "
1502
+ f"Investigate any be.sb_rpc / network I/O added to _build_instructions()."
1503
+ )
1489
1504
 
1490
- # Pre-load persistent memories into instructions (tiered, ~10x cheaper than legacy
1491
- # load-all). Strategy:
1492
- # - critical: full content always preloaded (cap 10 keys per agent)
1493
- # - reference: key list only (fetch values on demand via meshcode_recall)
1494
- # - episodic: NEVER preloaded search via meshcode_recall_search instead
1495
- # Falls back to legacy load-all if migration 080 isn't applied yet (overload missing).
1496
- try:
1497
- _api_key = _get_api_key()
1498
- _crit = be.sb_rpc("mc_memory_list", {
1499
- "p_api_key": _api_key,
1500
- "p_agent_name": AGENT_NAME,
1501
- "p_tier": "critical",
1502
- "p_project_name": PROJECT_NAME,
1503
- })
1504
- _ref = be.sb_rpc("mc_memory_list", {
1505
- "p_api_key": _api_key,
1506
- "p_agent_name": AGENT_NAME,
1507
- "p_tier": "reference",
1508
- "p_project_name": PROJECT_NAME,
1509
- })
1510
-
1511
- _crit_ok = isinstance(_crit, dict) and _crit.get("ok")
1512
- _ref_ok = isinstance(_ref, dict) and _ref.get("ok")
1513
-
1514
- if _crit_ok or _ref_ok:
1515
- _sections = []
1516
- if _crit_ok and _crit.get("memories"):
1517
- _crit_lines = [f" {m['key']}: {json.dumps(m['value'], default=str)}"
1518
- for m in _crit["memories"]]
1519
- _sections.append("CRITICAL MEMORIES (always loaded):\n" + "\n".join(_crit_lines))
1520
- if _ref_ok and _ref.get("memories"):
1521
- _ref_keys = [m["key"] for m in _ref["memories"]]
1522
- _sections.append(
1523
- "REFERENCE MEMORIES (key list — fetch on demand via meshcode_recall(key)):\n "
1524
- + ", ".join(_ref_keys)
1525
- )
1526
- _sections.append(
1527
- "EPISODIC MEMORIES: not preloaded. Search via "
1528
- "meshcode_recall_search(query) when you need past incident context."
1529
- )
1530
- _INSTRUCTIONS += "\n" + "\n\n".join(_sections) + "\n"
1531
- log.info(
1532
- f"pre-loaded tiered memories: critical={len(_crit.get('memories', [])) if _crit_ok else 0}, "
1533
- f"reference={len(_ref.get('memories', [])) if _ref_ok else 0}"
1534
- )
1535
- else:
1536
- # Legacy fallback: migration 080 not applied → load all (old behavior)
1537
- _legacy = be.sb_rpc("mc_memory_list", {
1538
- "p_api_key": _api_key,
1505
+ # MIG-PLAN-A 2026-05-18: memory pre-load deferred to BG daemon thread.
1506
+ # Was synchronous mc_memory_list (critical+reference tiers + legacy fallback)
1507
+ # that appended to module-global _INSTRUCTIONS at import time. On commander-
1508
+ # class agents with heavy memory accumulation, this exceeded Claude Code's
1509
+ # MCP InitializeResult window "MCP tools not in deferred list" until
1510
+ # manual /mcp reconnect. Two prior partial fixes: fe57b7a5 mode-a (persona +
1511
+ # boot_context BG) and mig 312 (SDK↔DDL needs_launch CHECK). Plan A is the
1512
+ # remaining piece. Memory content is still surfaced — just via the
1513
+ # memory_hints envelope on the first meshcode_check / meshcode_boot tool
1514
+ # call instead of via MCP InitializeResult.instructions. Tradeoff: handshake
1515
+ # guaranteed <1s vs first-tool result ~1s heavier. Net wins handshake budget.
1516
+ _PRELOADED_CRITICAL: Optional[List[Dict[str, Any]]] = None
1517
+ _PRELOADED_REFERENCE_KEYS: Optional[List[str]] = None
1518
+
1519
+ def _preload_memories_bg() -> None:
1520
+ """Run by daemon thread spawned at lifespan start. Populates module-
1521
+ global _PRELOADED_* used by memory_hints envelope. Soft-fail; consumers
1522
+ fall through to live RPC paths if globals stay None."""
1523
+ global _PRELOADED_CRITICAL, _PRELOADED_REFERENCE_KEYS
1524
+ try:
1525
+ api_key = _get_api_key()
1526
+ crit = be.sb_rpc("mc_memory_list", {
1527
+ "p_api_key": api_key,
1539
1528
  "p_agent_name": AGENT_NAME,
1529
+ "p_tier": "critical",
1540
1530
  "p_project_name": PROJECT_NAME,
1541
1531
  })
1542
- if isinstance(_legacy, dict) and _legacy.get("ok") and _legacy.get("memories"):
1543
- _mem_lines = [f" {m['key']}: {json.dumps(m['value'], default=str)}"
1544
- for m in _legacy["memories"]]
1545
- _INSTRUCTIONS += "\nPRE-LOADED MEMORIES (legacy):\n" + "\n".join(_mem_lines) + "\n"
1546
- log.info(f"pre-loaded {len(_mem_lines)} memories (legacy fallback)")
1547
- except Exception as _e:
1548
- log.debug(f"memory pre-load skipped: {_e}")
1532
+ ref = be.sb_rpc("mc_memory_list", {
1533
+ "p_api_key": api_key,
1534
+ "p_agent_name": AGENT_NAME,
1535
+ "p_tier": "reference",
1536
+ "p_project_name": PROJECT_NAME,
1537
+ })
1538
+ if isinstance(crit, dict) and crit.get("ok"):
1539
+ _PRELOADED_CRITICAL = crit.get("memories") or []
1540
+ if isinstance(ref, dict) and ref.get("ok"):
1541
+ _PRELOADED_REFERENCE_KEYS = [m["key"] for m in (ref.get("memories") or []) if "key" in m]
1542
+ log.info(
1543
+ f"memory pre-load (bg): critical={len(_PRELOADED_CRITICAL or [])} "
1544
+ f"reference_keys={len(_PRELOADED_REFERENCE_KEYS or [])}"
1545
+ )
1546
+ except Exception as e:
1547
+ log.debug(f"memory pre-load (bg) skipped: {e}")
1549
1548
 
1550
1549
 
1551
1550
  # ============================================================
@@ -2104,6 +2103,9 @@ async def lifespan(_app):
2104
2103
 
2105
2104
  _threading.Thread(target=_load_persona_bg, daemon=True, name="meshcode-load-persona").start()
2106
2105
  _threading.Thread(target=_load_boot_context_bg, daemon=True, name="meshcode-load-boot-context").start()
2106
+ # MIG-PLAN-A 2026-05-18: memory pre-load deferred from module-import-time
2107
+ # to here. Soft-fail consumers read from _PRELOADED_CRITICAL / _PRELOADED_REFERENCE_KEYS.
2108
+ _threading.Thread(target=_preload_memories_bg, daemon=True, name="meshcode-preload-memories").start()
2107
2109
 
2108
2110
  # Heartbeat in daemon thread — independent of asyncio event loop.
2109
2111
  _heartbeat_stop.clear()
@@ -4868,6 +4870,99 @@ def meshcode_recall_search(query: str) -> Dict[str, Any]:
4868
4870
  })
4869
4871
 
4870
4872
 
4873
+ # ----------------- EPISTEMIC V1 (decide / outcome / explain) -----------------
4874
+ # mig 305-308 SQL substrate; mig 313 memory_hints contradictions + ranking;
4875
+ # mig 314 public.* wrappers. Task b4befbfd.
4876
+
4877
+ @mcp.tool()
4878
+ @with_working_status
4879
+ def meshcode_decide(
4880
+ decision: str,
4881
+ alternatives: Optional[List[str]] = None,
4882
+ evidence_refs: Optional[List[Dict[str, Any]]] = None,
4883
+ tier: str = "episodic",
4884
+ ) -> Dict[str, Any]:
4885
+ """Log a non-trivial decision to mc_traces (architectural choice, risky migration,
4886
+ scope decision). Returns {trace_id}. Pair with meshcode_outcome later when the
4887
+ result becomes observable so the team can learn from outcomes.
4888
+
4889
+ Args:
4890
+ decision: What you decided (one sentence).
4891
+ alternatives: Other options you considered (list of strings).
4892
+ evidence_refs: Pointers to evidence (list of {type, id|key} dicts).
4893
+ type values: 'memory','msg','task','file','rpc'.
4894
+ tier: 'episodic' (default) | 'reference' | 'critical'.
4895
+ """
4896
+ if not decision or not decision.strip():
4897
+ return {"ok": False, "error": "decision required"}
4898
+ return be.sb_rpc("mc_decide", {
4899
+ "p_api_key": _get_api_key(),
4900
+ "p_project_id": _PROJECT_ID,
4901
+ "p_agent_name": AGENT_NAME,
4902
+ "p_decision": decision.strip(),
4903
+ "p_alternatives": json.dumps(alternatives or []),
4904
+ "p_evidence_refs": json.dumps(evidence_refs or []),
4905
+ "p_tier": tier,
4906
+ })
4907
+
4908
+
4909
+ @mcp.tool()
4910
+ @with_working_status
4911
+ def meshcode_outcome(
4912
+ trace_id: str,
4913
+ outcome: str,
4914
+ outcome_eval: str,
4915
+ ) -> Dict[str, Any]:
4916
+ """Record the observable outcome of a prior decision (logged via meshcode_decide).
4917
+ Call this when results become visible — even partial results help future-you and
4918
+ the team learn what worked.
4919
+
4920
+ Args:
4921
+ trace_id: UUID returned by meshcode_decide.
4922
+ outcome: Free-form description of what happened.
4923
+ outcome_eval: 'success' | 'failure' | 'partial' | 'unknown'.
4924
+ """
4925
+ if outcome_eval not in ("success", "failure", "partial", "unknown"):
4926
+ return {"ok": False, "error": "outcome_eval must be success|failure|partial|unknown"}
4927
+ return be.sb_rpc("mc_outcome", {
4928
+ "p_api_key": _get_api_key(),
4929
+ "p_project_id": _PROJECT_ID,
4930
+ "p_agent_name": AGENT_NAME,
4931
+ "p_trace_id": trace_id,
4932
+ "p_outcome": outcome,
4933
+ "p_outcome_eval": outcome_eval,
4934
+ })
4935
+
4936
+
4937
+ @mcp.tool()
4938
+ @with_working_status
4939
+ def meshcode_explain(
4940
+ memory_key: Optional[str] = None,
4941
+ decision_substring: Optional[str] = None,
4942
+ trace_limit: int = 20,
4943
+ ) -> Dict[str, Any]:
4944
+ """Surface recent traces + open contradictions tied to a memory key or decision
4945
+ substring. Use when you want to understand why a memory ranks the way it does,
4946
+ or recall the chain of reasoning around a past choice. Exactly one of
4947
+ (memory_key, decision_substring) is required.
4948
+
4949
+ Args:
4950
+ memory_key: Match traces whose evidence_refs reference this key.
4951
+ decision_substring: ILIKE match against the decision text.
4952
+ trace_limit: Cap on returned traces (1..200, default 20).
4953
+ """
4954
+ if not memory_key and not decision_substring:
4955
+ return {"ok": False, "error": "one of (memory_key, decision_substring) required"}
4956
+ return be.sb_rpc("mc_explain", {
4957
+ "p_api_key": _get_api_key(),
4958
+ "p_project_id": _PROJECT_ID,
4959
+ "p_agent_name": AGENT_NAME,
4960
+ "p_memory_key": memory_key,
4961
+ "p_decision_substring": decision_substring,
4962
+ "p_trace_limit": trace_limit,
4963
+ })
4964
+
4965
+
4871
4966
  # ----------------- BUG REPORTING -----------------
4872
4967
 
4873
4968
  @mcp.tool()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meshcode
3
- Version: 2.11.5
3
+ Version: 2.11.6
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.5"
7
+ version = "2.11.6"
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
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes