meshcode 2.11.34__tar.gz → 2.11.36__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 (231) hide show
  1. {meshcode-2.11.34 → meshcode-2.11.36}/PKG-INFO +1 -1
  2. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/__init__.py +1 -1
  3. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/meshcode_mcp/backend.py +23 -3
  4. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/meshcode_mcp/server.py +11 -18
  5. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode.egg-info/PKG-INFO +1 -1
  6. {meshcode-2.11.34 → meshcode-2.11.36}/pyproject.toml +1 -1
  7. {meshcode-2.11.34 → meshcode-2.11.36}/README.md +0 -0
  8. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/__main__.py +0 -0
  9. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/_stop_hook_template.py +0 -0
  10. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/ascii_art.py +0 -0
  11. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/atomic_push.py +0 -0
  12. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/cli.py +0 -0
  13. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/comms_v4.py +0 -0
  14. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/compat.py +0 -0
  15. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/daemon.py +0 -0
  16. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/date_parse.py +0 -0
  17. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/doctor.py +0 -0
  18. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/error_hints.py +0 -0
  19. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/exceptions.py +0 -0
  20. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/invites.py +0 -0
  21. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/launcher.py +0 -0
  22. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/launcher_install.py +0 -0
  23. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/meshcode_mcp/__init__.py +0 -0
  24. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/meshcode_mcp/__main__.py +0 -0
  25. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/meshcode_mcp/realtime.py +0 -0
  26. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
  27. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/meshcode_mcp/test_backend.py +0 -0
  28. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
  29. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
  30. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
  31. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/meshcode_mcp/test_realtime.py +0 -0
  32. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  33. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/preferences.py +0 -0
  34. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/protocol_handler.py +0 -0
  35. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/protocol_v2.py +0 -0
  36. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/quickstart.py +0 -0
  37. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/rpc_allowlist.py +0 -0
  38. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/run_agent.py +0 -0
  39. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/scripts/check_secrets.py +0 -0
  40. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/scripts/race_rate_harness.py +0 -0
  41. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/secrets.py +0 -0
  42. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/self_update.py +0 -0
  43. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/setup_clients.py +0 -0
  44. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/supervisor.py +0 -0
  45. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode/upload.py +0 -0
  46. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/comms_v4.py +0 -0
  47. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/meshcode/__init__.py +0 -0
  48. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
  49. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/meshcode/cli.py +0 -0
  50. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
  51. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/meshcode/compat.py +0 -0
  52. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
  53. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
  54. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/meshcode/invites.py +0 -0
  55. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/meshcode/launcher.py +0 -0
  56. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
  57. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  58. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  59. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
  60. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  61. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
  62. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  63. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  64. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  65. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/meshcode/preferences.py +0 -0
  66. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
  67. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
  68. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
  69. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/meshcode/secrets.py +0 -0
  70. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/meshcode/self_update.py +0 -0
  71. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
  72. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
  73. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/meshcode/upload.py +0 -0
  74. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/scripts/sentinel.py +0 -0
  75. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/tests/test_core.py +0 -0
  76. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
  77. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
  78. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
  79. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
  80. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
  81. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
  82. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
  83. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
  84. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
  85. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
  86. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
  87. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
  88. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
  89. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
  90. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
  91. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
  92. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
  93. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
  94. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
  95. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
  96. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
  97. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
  98. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
  99. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
  100. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
  101. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
  102. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
  103. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
  104. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  105. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
  106. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
  107. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
  108. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
  109. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
  110. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
  111. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
  112. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
  113. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
  114. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/comms_v4.py +0 -0
  115. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/meshcode/__init__.py +0 -0
  116. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
  117. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/meshcode/cli.py +0 -0
  118. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
  119. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/meshcode/compat.py +0 -0
  120. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
  121. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
  122. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/meshcode/invites.py +0 -0
  123. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/meshcode/launcher.py +0 -0
  124. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
  125. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  126. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  127. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
  128. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  129. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
  130. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  131. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  132. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  133. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/meshcode/preferences.py +0 -0
  134. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
  135. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
  136. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
  137. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/meshcode/secrets.py +0 -0
  138. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/meshcode/self_update.py +0 -0
  139. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
  140. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
  141. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/meshcode/upload.py +0 -0
  142. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/scripts/sentinel.py +0 -0
  143. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/tests/test_core.py +0 -0
  144. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
  145. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
  146. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
  147. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
  148. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
  149. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
  150. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
  151. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
  152. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
  153. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
  154. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
  155. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/comms_v4.py +0 -0
  156. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
  157. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
  158. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/meshcode/cli.py +0 -0
  159. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
  160. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/meshcode/compat.py +0 -0
  161. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
  162. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
  163. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/meshcode/invites.py +0 -0
  164. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
  165. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
  166. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  167. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  168. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
  169. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  170. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
  171. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  172. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  173. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  174. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
  175. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
  176. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
  177. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
  178. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
  179. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
  180. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
  181. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
  182. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/meshcode/upload.py +0 -0
  183. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
  184. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/tests/test_core.py +0 -0
  185. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
  186. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
  187. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
  188. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
  189. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
  190. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
  191. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
  192. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
  193. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
  194. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
  195. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
  196. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode.egg-info/SOURCES.txt +0 -0
  197. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode.egg-info/dependency_links.txt +0 -0
  198. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode.egg-info/entry_points.txt +0 -0
  199. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode.egg-info/requires.txt +0 -0
  200. {meshcode-2.11.34 → meshcode-2.11.36}/meshcode.egg-info/top_level.txt +0 -0
  201. {meshcode-2.11.34 → meshcode-2.11.36}/setup.cfg +0 -0
  202. {meshcode-2.11.34 → meshcode-2.11.36}/tests/test_auto_update_hardening.py +0 -0
  203. {meshcode-2.11.34 → meshcode-2.11.36}/tests/test_boot_bug_regression.py +0 -0
  204. {meshcode-2.11.34 → meshcode-2.11.36}/tests/test_color_truecolor.py +0 -0
  205. {meshcode-2.11.34 → meshcode-2.11.36}/tests/test_core.py +0 -0
  206. {meshcode-2.11.34 → meshcode-2.11.36}/tests/test_cross_agent_messaging.py +0 -0
  207. {meshcode-2.11.34 → meshcode-2.11.36}/tests/test_date_parse.py +0 -0
  208. {meshcode-2.11.34 → meshcode-2.11.36}/tests/test_doctor.py +0 -0
  209. {meshcode-2.11.34 → meshcode-2.11.36}/tests/test_epistemic_v1_python_sdk.py +0 -0
  210. {meshcode-2.11.34 → meshcode-2.11.36}/tests/test_epistemic_v1_stop_conditions.py +0 -0
  211. {meshcode-2.11.34 → meshcode-2.11.36}/tests/test_esc_deaf_state.py +0 -0
  212. {meshcode-2.11.34 → meshcode-2.11.36}/tests/test_exceptions.py +0 -0
  213. {meshcode-2.11.34 → meshcode-2.11.36}/tests/test_init_device_code.py +0 -0
  214. {meshcode-2.11.34 → meshcode-2.11.36}/tests/test_install_guard.py +0 -0
  215. {meshcode-2.11.34 → meshcode-2.11.36}/tests/test_lease_sigterm_release.py +0 -0
  216. {meshcode-2.11.34 → meshcode-2.11.36}/tests/test_mark_read_batch.py +0 -0
  217. {meshcode-2.11.34 → meshcode-2.11.36}/tests/test_migration_integrity.py +0 -0
  218. {meshcode-2.11.34 → meshcode-2.11.36}/tests/test_realtime_event_freshness.py +0 -0
  219. {meshcode-2.11.34 → meshcode-2.11.36}/tests/test_rls_cross_tenant.py +0 -0
  220. {meshcode-2.11.34 → meshcode-2.11.36}/tests/test_rpc_grants.py +0 -0
  221. {meshcode-2.11.34 → meshcode-2.11.36}/tests/test_rpc_migrations.py +0 -0
  222. {meshcode-2.11.34 → meshcode-2.11.36}/tests/test_run_agent_dry_run.py +0 -0
  223. {meshcode-2.11.34 → meshcode-2.11.36}/tests/test_run_agent_no_server_import.py +0 -0
  224. {meshcode-2.11.34 → meshcode-2.11.36}/tests/test_security_regressions.py +0 -0
  225. {meshcode-2.11.34 → meshcode-2.11.36}/tests/test_self_update_user_site.py +0 -0
  226. {meshcode-2.11.34 → meshcode-2.11.36}/tests/test_sentinel.py +0 -0
  227. {meshcode-2.11.34 → meshcode-2.11.36}/tests/test_setup_path.py +0 -0
  228. {meshcode-2.11.34 → meshcode-2.11.36}/tests/test_sleep_signals.py +0 -0
  229. {meshcode-2.11.34 → meshcode-2.11.36}/tests/test_status_enum_coverage.py +0 -0
  230. {meshcode-2.11.34 → meshcode-2.11.36}/tests/test_stay_on_loop_hook.py +0 -0
  231. {meshcode-2.11.34 → meshcode-2.11.36}/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.34
3
+ Version: 2.11.36
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.34"
2
+ __version__ = "2.11.36"
3
3
 
4
4
  # Exception hierarchy — eagerly imported (lightweight, no deps)
5
5
  from meshcode.exceptions import ( # noqa: F401
@@ -969,13 +969,22 @@ def read_inbox(project_id: str, agent: str, mark_read: bool = True, api_key: Opt
969
969
 
970
970
 
971
971
  def count_pending(project_id: str, agent: str, api_key: Optional[str] = None) -> int:
972
- # Use SECURITY DEFINER RPC when api_key is available
972
+ # Use SECURITY DEFINER RPC when api_key is available.
973
+ # SEC-5 R-SEC5-A: call rate-limited _rl wrapper. Server-side returns
974
+ # cached payload on limit so Python contract stays {ok:true, count:int}.
975
+ # Falls back to non-rl on 404 if the wrapper isn't deployed yet.
973
976
  if api_key:
974
- result = sb_rpc("mc_count_pending", {
977
+ result = sb_rpc("mc_count_pending_rl", {
975
978
  "p_api_key": api_key,
976
979
  "p_project_id": project_id,
977
980
  "p_agent_name": agent,
978
981
  })
982
+ if isinstance(result, dict) and result.get("error_code") == "404":
983
+ result = sb_rpc("mc_count_pending", {
984
+ "p_api_key": api_key,
985
+ "p_project_id": project_id,
986
+ "p_agent_name": agent,
987
+ })
979
988
  if isinstance(result, dict) and result.get("ok"):
980
989
  return result.get("count", 0)
981
990
  # Fall through to direct query if RPC doesn't exist yet
@@ -1248,13 +1257,24 @@ def task_list(api_key, project_id, agent, status_filter=None, include_done=False
1248
1257
  cached = _TASK_LIST_CACHE.get(cache_key)
1249
1258
  if cached and (now - cached[1]) < _TASK_LIST_MIN_INTERVAL:
1250
1259
  return cached[0]
1251
- result = sb_rpc("mc_task_list", {
1260
+ # SEC-5 R-SEC5-A: call rate-limited _rl wrapper. Returns same shape as
1261
+ # original (with extra rate_limited/remaining metadata Python ignores).
1262
+ # Falls back to non-rl on 404 if wrapper isn't deployed.
1263
+ result = sb_rpc("mc_task_list_rl", {
1252
1264
  "p_api_key": api_key,
1253
1265
  "p_project_id": project_id,
1254
1266
  "p_agent": agent,
1255
1267
  "p_status_filter": status_filter,
1256
1268
  "p_include_done": include_done,
1257
1269
  })
1270
+ if isinstance(result, dict) and result.get("error_code") == "404":
1271
+ result = sb_rpc("mc_task_list", {
1272
+ "p_api_key": api_key,
1273
+ "p_project_id": project_id,
1274
+ "p_agent": agent,
1275
+ "p_status_filter": status_filter,
1276
+ "p_include_done": include_done,
1277
+ })
1258
1278
  with _TASK_LIST_CACHE_LOCK:
1259
1279
  if len(_TASK_LIST_CACHE) >= _TASK_LIST_CACHE_MAX:
1260
1280
  oldest_key = min(_TASK_LIST_CACHE, key=lambda k: _TASK_LIST_CACHE[k][1])
@@ -4073,27 +4073,20 @@ def meshcode_set_status(status: str, task: str = "") -> Dict[str, Any]:
4073
4073
  task: Optional human-readable task description.
4074
4074
  """
4075
4075
  global _STAY_AWAKE, _CONSECUTIVE_IDLE_SECONDS
4076
- # PRODUCT RULE: Cannot sleep/idle/standby with CLAIMED tasks. Work first.
4077
- # 2026-05-22 (Samuel autonomy session): refined from "any pending" to
4078
- # "claimed by me"unclaimed assignee=AGENT_NAME tasks are awaiting
4079
- # action but the wake-broadcast cron (mc_wake_idle_assignees, jobid 22)
4080
- # already picks them up on next session boot via task_assigned wake msg.
4081
- # Blocking sleep on unclaimed assignments created a trap where commanders
4082
- # who delegated 7 tasks couldn't sleep because the delegations bounced
4083
- # back as own-assignments via reassign-to-self workarounds. Now: only
4084
- # tasks the agent ACTIVELY claimed (claimed_by=me) block sleep — those
4085
- # are work the agent committed to and can't drop silently.
4076
+ # PRODUCT RULE: Cannot sleep/idle/standby with ANY open tasks (claimed
4077
+ # or just assigned). Samuel directive 2026-05-22T01:01Z confirmed the
4078
+ # strict rule is intentional agents MUST work their assigned queue
4079
+ # before sleeping. Reverting the 2026-05-22T00:55Z "claimed-only" relax
4080
+ # (2.11.34) per Samuel's correction. The wake-cron is BACKUP for
4081
+ # disconnected sessions, NOT a license to sleep on assignments.
4086
4082
  if status in ("sleeping", "idle", "standby"):
4087
4083
  pending_tasks = _get_pending_tasks_summary()
4088
4084
  if pending_tasks:
4089
- claimed_pending = [t for t in pending_tasks if t.get("status") == "in_progress"]
4090
- if claimed_pending:
4091
- return {
4092
- "refused": True,
4093
- "reason": f"Cannot set status '{status}' — you have {len(claimed_pending)} CLAIMED in_progress tasks. Complete/release them first (unclaimed assignees: {len(pending_tasks) - len(claimed_pending)} — wake-cron will pick those up next session).",
4094
- "pending_tasks": pending_tasks,
4095
- "claimed_blocking_sleep": claimed_pending,
4096
- }
4085
+ return {
4086
+ "refused": True,
4087
+ "reason": f"Cannot set status '{status}' — you have {len(pending_tasks)} open task(s) assigned or claimed. Work them first (claim → progress → complete) or task_reject to release.",
4088
+ "pending_tasks": pending_tasks,
4089
+ }
4097
4090
  # Setting online/working = stay awake (prevent auto-sleep)
4098
4091
  # Setting sleeping = allow auto-sleep again
4099
4092
  if status in ("online", "working"):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meshcode
3
- Version: 2.11.34
3
+ Version: 2.11.36
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.34"
7
+ version = "2.11.36"
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