meshcode 2.11.3__tar.gz → 2.11.4__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 (208) hide show
  1. {meshcode-2.11.3 → meshcode-2.11.4}/PKG-INFO +1 -1
  2. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/__init__.py +1 -1
  3. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/_stop_hook_template.py +29 -12
  4. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode.egg-info/PKG-INFO +1 -1
  5. {meshcode-2.11.3 → meshcode-2.11.4}/pyproject.toml +1 -1
  6. {meshcode-2.11.3 → meshcode-2.11.4}/README.md +0 -0
  7. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/ascii_art.py +0 -0
  8. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/cli.py +0 -0
  9. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/comms_v4.py +0 -0
  10. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/compat.py +0 -0
  11. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/daemon.py +0 -0
  12. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/error_hints.py +0 -0
  13. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/exceptions.py +0 -0
  14. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/invites.py +0 -0
  15. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/launcher.py +0 -0
  16. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/launcher_install.py +0 -0
  17. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/meshcode_mcp/__init__.py +0 -0
  18. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/meshcode_mcp/__main__.py +0 -0
  19. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/meshcode_mcp/backend.py +0 -0
  20. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/meshcode_mcp/realtime.py +0 -0
  21. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/meshcode_mcp/server.py +0 -0
  22. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/meshcode_mcp/test_backend.py +0 -0
  23. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/meshcode_mcp/test_realtime.py +0 -0
  24. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  25. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/preferences.py +0 -0
  26. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/protocol_handler.py +0 -0
  27. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/protocol_v2.py +0 -0
  28. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/quickstart.py +0 -0
  29. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/run_agent.py +0 -0
  30. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/scripts/check_secrets.py +0 -0
  31. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/scripts/race_rate_harness.py +0 -0
  32. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/secrets.py +0 -0
  33. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/self_update.py +0 -0
  34. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/setup_clients.py +0 -0
  35. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/supervisor.py +0 -0
  36. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode/upload.py +0 -0
  37. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/comms_v4.py +0 -0
  38. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/meshcode/__init__.py +0 -0
  39. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
  40. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/meshcode/cli.py +0 -0
  41. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
  42. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/meshcode/compat.py +0 -0
  43. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
  44. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
  45. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/meshcode/invites.py +0 -0
  46. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/meshcode/launcher.py +0 -0
  47. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
  48. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  49. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  50. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
  51. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  52. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
  53. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  54. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  55. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  56. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/meshcode/preferences.py +0 -0
  57. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
  58. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
  59. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
  60. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/meshcode/secrets.py +0 -0
  61. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/meshcode/self_update.py +0 -0
  62. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
  63. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
  64. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/meshcode/upload.py +0 -0
  65. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/scripts/sentinel.py +0 -0
  66. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/tests/test_core.py +0 -0
  67. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
  68. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
  69. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
  70. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
  71. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
  72. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
  73. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
  74. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
  75. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
  76. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
  77. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
  78. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
  79. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
  80. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
  81. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
  82. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
  83. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
  84. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
  85. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
  86. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
  87. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
  88. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
  89. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
  90. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
  91. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
  92. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
  93. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
  94. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
  95. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  96. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
  97. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
  98. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
  99. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
  100. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
  101. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
  102. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
  103. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
  104. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
  105. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/comms_v4.py +0 -0
  106. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/meshcode/__init__.py +0 -0
  107. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
  108. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/meshcode/cli.py +0 -0
  109. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
  110. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/meshcode/compat.py +0 -0
  111. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
  112. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
  113. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/meshcode/invites.py +0 -0
  114. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/meshcode/launcher.py +0 -0
  115. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
  116. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  117. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  118. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
  119. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  120. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
  121. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  122. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  123. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  124. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/meshcode/preferences.py +0 -0
  125. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
  126. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
  127. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
  128. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/meshcode/secrets.py +0 -0
  129. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/meshcode/self_update.py +0 -0
  130. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
  131. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
  132. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/meshcode/upload.py +0 -0
  133. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/scripts/sentinel.py +0 -0
  134. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/tests/test_core.py +0 -0
  135. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
  136. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
  137. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
  138. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
  139. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
  140. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
  141. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
  142. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
  143. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
  144. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
  145. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
  146. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/comms_v4.py +0 -0
  147. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
  148. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
  149. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/meshcode/cli.py +0 -0
  150. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
  151. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/meshcode/compat.py +0 -0
  152. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
  153. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
  154. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/meshcode/invites.py +0 -0
  155. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
  156. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
  157. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  158. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  159. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
  160. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  161. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
  162. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  163. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  164. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  165. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
  166. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
  167. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
  168. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
  169. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
  170. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
  171. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
  172. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
  173. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/meshcode/upload.py +0 -0
  174. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
  175. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/tests/test_core.py +0 -0
  176. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
  177. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
  178. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
  179. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
  180. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
  181. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
  182. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
  183. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
  184. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
  185. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
  186. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
  187. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode.egg-info/SOURCES.txt +0 -0
  188. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode.egg-info/dependency_links.txt +0 -0
  189. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode.egg-info/entry_points.txt +0 -0
  190. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode.egg-info/requires.txt +0 -0
  191. {meshcode-2.11.3 → meshcode-2.11.4}/meshcode.egg-info/top_level.txt +0 -0
  192. {meshcode-2.11.3 → meshcode-2.11.4}/setup.cfg +0 -0
  193. {meshcode-2.11.3 → meshcode-2.11.4}/tests/test_auto_update_hardening.py +0 -0
  194. {meshcode-2.11.3 → meshcode-2.11.4}/tests/test_core.py +0 -0
  195. {meshcode-2.11.3 → meshcode-2.11.4}/tests/test_cross_agent_messaging.py +0 -0
  196. {meshcode-2.11.3 → meshcode-2.11.4}/tests/test_esc_deaf_state.py +0 -0
  197. {meshcode-2.11.3 → meshcode-2.11.4}/tests/test_exceptions.py +0 -0
  198. {meshcode-2.11.3 → meshcode-2.11.4}/tests/test_lease_sigterm_release.py +0 -0
  199. {meshcode-2.11.3 → meshcode-2.11.4}/tests/test_mark_read_batch.py +0 -0
  200. {meshcode-2.11.3 → meshcode-2.11.4}/tests/test_migration_integrity.py +0 -0
  201. {meshcode-2.11.3 → meshcode-2.11.4}/tests/test_realtime_event_freshness.py +0 -0
  202. {meshcode-2.11.3 → meshcode-2.11.4}/tests/test_rls_cross_tenant.py +0 -0
  203. {meshcode-2.11.3 → meshcode-2.11.4}/tests/test_rpc_migrations.py +0 -0
  204. {meshcode-2.11.3 → meshcode-2.11.4}/tests/test_security_regressions.py +0 -0
  205. {meshcode-2.11.3 → meshcode-2.11.4}/tests/test_sentinel.py +0 -0
  206. {meshcode-2.11.3 → meshcode-2.11.4}/tests/test_status_enum_coverage.py +0 -0
  207. {meshcode-2.11.3 → meshcode-2.11.4}/tests/test_stay_on_loop_hook.py +0 -0
  208. {meshcode-2.11.3 → meshcode-2.11.4}/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.3
3
+ Version: 2.11.4
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.3"
2
+ __version__ = "2.11.4"
3
3
 
4
4
  # Exception hierarchy — eagerly imported (lightweight, no deps)
5
5
  from meshcode.exceptions import ( # noqa: F401
@@ -109,6 +109,23 @@ _USER_MCP_FAIL_PHRASES = (
109
109
  )
110
110
 
111
111
 
112
+ def _rec_role_content(rec):
113
+ """Extract (role, content) from a Claude Code transcript record.
114
+
115
+ Claude Code wraps user/assistant payloads in `rec["message"]` since the
116
+ schema migration; older parsers that read top-level `rec["role"]` /
117
+ `rec["content"]` MISS every record and silently never fire. Normalize
118
+ here so every helper sees the canonical shape. Falls back to top-level
119
+ keys for forward compat with hypothetical older transcripts.
120
+ """
121
+ if not isinstance(rec, dict):
122
+ return None, None
123
+ msg = rec.get("message")
124
+ if isinstance(msg, dict):
125
+ return msg.get("role"), msg.get("content")
126
+ return rec.get("role"), rec.get("content")
127
+
128
+
112
129
  def _last_user_message(transcript_path):
113
130
  try:
114
131
  last = ""
@@ -118,8 +135,8 @@ def _last_user_message(transcript_path):
118
135
  rec = json.loads(line)
119
136
  except json.JSONDecodeError:
120
137
  continue
121
- if rec.get("role") == "user":
122
- content = rec.get("content")
138
+ role, content = _rec_role_content(rec)
139
+ if role == "user":
123
140
  if isinstance(content, str):
124
141
  last = content
125
142
  elif isinstance(content, list):
@@ -147,12 +164,12 @@ def _last_assistant_turn_called_wait(transcript_path):
147
164
  continue
148
165
  last_assistant_blocks = []
149
166
  for rec in reversed(records):
150
- if rec.get("role") == "user":
167
+ role, content = _rec_role_content(rec)
168
+ if role == "user":
151
169
  if last_assistant_blocks:
152
170
  break
153
171
  continue
154
- if rec.get("role") == "assistant":
155
- content = rec.get("content")
172
+ if role == "assistant":
156
173
  if isinstance(content, list):
157
174
  last_assistant_blocks.extend(content)
158
175
  elif isinstance(content, dict):
@@ -185,9 +202,9 @@ def _latest_wait_result_authorizes_exit(transcript_path):
185
202
 
186
203
  wait_use_ids = set()
187
204
  for rec in records:
188
- if rec.get("role") != "assistant":
205
+ role, content = _rec_role_content(rec)
206
+ if role != "assistant":
189
207
  continue
190
- content = rec.get("content")
191
208
  blocks = content if isinstance(content, list) else [content] if isinstance(content, dict) else []
192
209
  for block in blocks:
193
210
  if not isinstance(block, dict):
@@ -201,9 +218,9 @@ def _latest_wait_result_authorizes_exit(transcript_path):
201
218
  return False
202
219
 
203
220
  for rec in reversed(records):
204
- if rec.get("role") != "user":
221
+ role, content = _rec_role_content(rec)
222
+ if role != "user":
205
223
  continue
206
- content = rec.get("content")
207
224
  blocks = content if isinstance(content, list) else [content] if isinstance(content, dict) else []
208
225
  for block in blocks:
209
226
  if not isinstance(block, dict):
@@ -310,7 +327,7 @@ def _mcp_unreachable_recently(transcript_path, lookback_records=_UNREACHABLE_LOO
310
327
  wait_tool_use_ids = set()
311
328
  toolsearch_wait_ids = set()
312
329
  for rec in tail:
313
- content = rec.get("content")
330
+ _, content = _rec_role_content(rec)
314
331
  blocks = content if isinstance(content, list) else [content] if isinstance(content, dict) else []
315
332
  for block in blocks:
316
333
  if not isinstance(block, dict):
@@ -429,9 +446,9 @@ def _user_explicitly_reports_mcp_failure(transcript_path, lookback_records=_UNRE
429
446
  continue
430
447
  tail = records[-lookback_records:] if lookback_records else records
431
448
  for rec in reversed(tail):
432
- if rec.get("role") != "user":
449
+ role, content = _rec_role_content(rec)
450
+ if role != "user":
433
451
  continue
434
- content = rec.get("content")
435
452
  text = ""
436
453
  if isinstance(content, str):
437
454
  text = content
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meshcode
3
- Version: 2.11.3
3
+ Version: 2.11.4
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.3"
7
+ version = "2.11.4"
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