meshcode 2.11.93__tar.gz → 2.11.94__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 (245) hide show
  1. {meshcode-2.11.93 → meshcode-2.11.94}/PKG-INFO +1 -1
  2. {meshcode-2.11.93 → meshcode-2.11.94}/meshcode/__init__.py +1 -1
  3. meshcode-2.11.94/meshcode/cli.py +42 -0
  4. meshcode-2.11.94/meshcode/compat.py +174 -0
  5. meshcode-2.11.94/meshcode/daemon.py +0 -0
  6. meshcode-2.11.94/meshcode/error_hints.py +74 -0
  7. meshcode-2.11.94/meshcode/exceptions.py +52 -0
  8. meshcode-2.11.94/meshcode/invites.py +406 -0
  9. meshcode-2.11.94/meshcode/launcher.py +353 -0
  10. meshcode-2.11.94/meshcode/launcher_install.py +414 -0
  11. meshcode-2.11.94/meshcode/meshcode_mcp/__init__.py +22 -0
  12. meshcode-2.11.94/meshcode/meshcode_mcp/__main__.py +62 -0
  13. meshcode-2.11.94/meshcode/meshcode_mcp/backend.py +0 -0
  14. meshcode-2.11.94/meshcode/meshcode_mcp/realtime.py +0 -0
  15. {meshcode-2.11.93 → meshcode-2.11.94}/meshcode/meshcode_mcp/server.py +33 -0
  16. meshcode-2.11.94/meshcode/meshcode_mcp/test_backend.py +86 -0
  17. meshcode-2.11.94/meshcode/meshcode_mcp/test_realtime.py +95 -0
  18. meshcode-2.11.94/meshcode/meshcode_mcp/test_server_wrapper.py +117 -0
  19. meshcode-2.11.94/meshcode/preferences.py +260 -0
  20. meshcode-2.11.94/meshcode/protocol_v2.py +129 -0
  21. meshcode-2.11.94/meshcode/secrets.py +365 -0
  22. meshcode-2.11.94/meshcode/self_update.py +0 -0
  23. meshcode-2.11.94/meshcode/setup_clients.py +0 -0
  24. meshcode-2.11.94/meshcode/supervisor.py +186 -0
  25. meshcode-2.11.94/meshcode/upload.py +125 -0
  26. meshcode-2.11.94/meshcode-backend-wt/comms_v4.py +0 -0
  27. meshcode-2.11.94/meshcode-backend-wt/meshcode/__init__.py +82 -0
  28. meshcode-2.11.94/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
  29. meshcode-2.11.94/meshcode-backend-wt/meshcode/comms_v4.py +3563 -0
  30. {meshcode-2.11.93 → meshcode-2.11.94/meshcode-backend-wt}/meshcode/meshcode_mcp/backend.py +31 -319
  31. meshcode-2.11.94/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  32. meshcode-2.11.94/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
  33. meshcode-2.11.94/meshcode-backend-wt/meshcode/quickstart.py +148 -0
  34. meshcode-2.11.94/meshcode-backend-wt/meshcode/run_agent.py +0 -0
  35. {meshcode-2.11.93 → meshcode-2.11.94/meshcode-backend-wt}/meshcode/self_update.py +4 -203
  36. meshcode-2.11.94/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
  37. meshcode-2.11.94/meshcode-backend-wt/scripts/sentinel.py +257 -0
  38. meshcode-2.11.94/meshcode-backend-wt/tests/test_rpc_migrations.py +387 -0
  39. meshcode-2.11.94/meshcode-noun-wt/build/lib/meshcode/__init__.py +82 -0
  40. meshcode-2.11.94/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +638 -0
  41. meshcode-2.11.94/meshcode-noun-wt/build/lib/meshcode/cli.py +42 -0
  42. meshcode-2.11.94/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
  43. meshcode-2.11.94/meshcode-noun-wt/build/lib/meshcode/compat.py +174 -0
  44. meshcode-2.11.94/meshcode-noun-wt/build/lib/meshcode/error_hints.py +74 -0
  45. meshcode-2.11.94/meshcode-noun-wt/build/lib/meshcode/exceptions.py +52 -0
  46. meshcode-2.11.94/meshcode-noun-wt/build/lib/meshcode/invites.py +406 -0
  47. meshcode-2.11.94/meshcode-noun-wt/build/lib/meshcode/launcher.py +353 -0
  48. meshcode-2.11.94/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +414 -0
  49. meshcode-2.11.94/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +22 -0
  50. meshcode-2.11.94/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +62 -0
  51. meshcode-2.11.94/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
  52. meshcode-2.11.94/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
  53. meshcode-2.11.94/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
  54. meshcode-2.11.94/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +86 -0
  55. meshcode-2.11.94/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +95 -0
  56. meshcode-2.11.94/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +117 -0
  57. meshcode-2.11.94/meshcode-noun-wt/build/lib/meshcode/preferences.py +260 -0
  58. meshcode-2.11.94/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +129 -0
  59. meshcode-2.11.94/meshcode-noun-wt/build/lib/meshcode/quickstart.py +148 -0
  60. meshcode-2.11.94/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
  61. meshcode-2.11.94/meshcode-noun-wt/build/lib/meshcode/secrets.py +365 -0
  62. meshcode-2.11.94/meshcode-noun-wt/build/lib/meshcode/self_update.py +345 -0
  63. meshcode-2.11.94/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
  64. meshcode-2.11.94/meshcode-noun-wt/build/lib/meshcode/supervisor.py +186 -0
  65. meshcode-2.11.94/meshcode-noun-wt/build/lib/meshcode/upload.py +125 -0
  66. meshcode-2.11.94/meshcode-noun-wt/comms_v4.py +0 -0
  67. meshcode-2.11.94/meshcode-noun-wt/meshcode/__init__.py +82 -0
  68. meshcode-2.11.94/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
  69. meshcode-2.11.94/meshcode-noun-wt/meshcode/cli.py +42 -0
  70. meshcode-2.11.94/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
  71. meshcode-2.11.94/meshcode-noun-wt/meshcode/compat.py +174 -0
  72. meshcode-2.11.94/meshcode-noun-wt/meshcode/error_hints.py +74 -0
  73. meshcode-2.11.94/meshcode-noun-wt/meshcode/exceptions.py +52 -0
  74. meshcode-2.11.94/meshcode-noun-wt/meshcode/invites.py +406 -0
  75. meshcode-2.11.94/meshcode-noun-wt/meshcode/launcher.py +353 -0
  76. meshcode-2.11.94/meshcode-noun-wt/meshcode/launcher_install.py +414 -0
  77. meshcode-2.11.94/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +22 -0
  78. meshcode-2.11.94/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +62 -0
  79. meshcode-2.11.94/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
  80. meshcode-2.11.94/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  81. meshcode-2.11.94/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
  82. meshcode-2.11.94/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +86 -0
  83. meshcode-2.11.94/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +95 -0
  84. meshcode-2.11.94/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +117 -0
  85. meshcode-2.11.94/meshcode-noun-wt/meshcode/preferences.py +260 -0
  86. meshcode-2.11.94/meshcode-noun-wt/meshcode/protocol_v2.py +129 -0
  87. meshcode-2.11.94/meshcode-noun-wt/meshcode/quickstart.py +148 -0
  88. meshcode-2.11.94/meshcode-noun-wt/meshcode/run_agent.py +0 -0
  89. meshcode-2.11.94/meshcode-noun-wt/meshcode/secrets.py +365 -0
  90. meshcode-2.11.94/meshcode-noun-wt/meshcode/self_update.py +345 -0
  91. meshcode-2.11.94/meshcode-noun-wt/meshcode/setup_clients.py +926 -0
  92. meshcode-2.11.94/meshcode-noun-wt/meshcode/supervisor.py +186 -0
  93. meshcode-2.11.94/meshcode-noun-wt/meshcode/upload.py +125 -0
  94. meshcode-2.11.94/meshcode-noun-wt/scripts/sentinel.py +257 -0
  95. meshcode-2.11.94/meshcode-noun-wt/tests/test_core.py +216 -0
  96. meshcode-2.11.94/meshcode-noun-wt/tests/test_cross_agent_messaging.py +366 -0
  97. meshcode-2.11.94/meshcode-noun-wt/tests/test_esc_deaf_state.py +361 -0
  98. meshcode-2.11.94/meshcode-noun-wt/tests/test_exceptions.py +107 -0
  99. meshcode-2.11.94/meshcode-noun-wt/tests/test_mark_read_batch.py +200 -0
  100. meshcode-2.11.94/meshcode-noun-wt/tests/test_migration_integrity.py +176 -0
  101. meshcode-2.11.94/meshcode-noun-wt/tests/test_realtime_event_freshness.py +236 -0
  102. meshcode-2.11.94/meshcode-noun-wt/tests/test_rls_cross_tenant.py +255 -0
  103. meshcode-2.11.94/meshcode-noun-wt/tests/test_rpc_migrations.py +387 -0
  104. meshcode-2.11.94/meshcode-noun-wt/tests/test_security_regressions.py +171 -0
  105. meshcode-2.11.94/meshcode-noun-wt/tests/test_sentinel.py +148 -0
  106. meshcode-2.11.94/meshcode-noun-wt/tests/test_status_enum_coverage.py +231 -0
  107. meshcode-2.11.94/meshcode-tasks-wt/comms_v4.py +1941 -0
  108. meshcode-2.11.94/meshcode-tasks-wt/meshcode/__init__.py +82 -0
  109. meshcode-2.11.94/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
  110. meshcode-2.11.94/meshcode-tasks-wt/meshcode/cli.py +42 -0
  111. meshcode-2.11.94/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
  112. meshcode-2.11.94/meshcode-tasks-wt/meshcode/compat.py +174 -0
  113. meshcode-2.11.94/meshcode-tasks-wt/meshcode/error_hints.py +74 -0
  114. meshcode-2.11.94/meshcode-tasks-wt/meshcode/exceptions.py +52 -0
  115. meshcode-2.11.94/meshcode-tasks-wt/meshcode/invites.py +406 -0
  116. meshcode-2.11.94/meshcode-tasks-wt/meshcode/launcher.py +353 -0
  117. meshcode-2.11.94/meshcode-tasks-wt/meshcode/launcher_install.py +414 -0
  118. meshcode-2.11.94/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +22 -0
  119. meshcode-2.11.94/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +62 -0
  120. meshcode-2.11.94/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +1261 -0
  121. {meshcode-2.11.93 → meshcode-2.11.94/meshcode-tasks-wt}/meshcode/meshcode_mcp/realtime.py +0 -5
  122. meshcode-2.11.94/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
  123. meshcode-2.11.94/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +86 -0
  124. meshcode-2.11.94/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +95 -0
  125. meshcode-2.11.94/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +117 -0
  126. meshcode-2.11.94/meshcode-tasks-wt/meshcode/preferences.py +260 -0
  127. meshcode-2.11.94/meshcode-tasks-wt/meshcode/protocol_v2.py +129 -0
  128. meshcode-2.11.94/meshcode-tasks-wt/meshcode/quickstart.py +148 -0
  129. meshcode-2.11.94/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
  130. meshcode-2.11.94/meshcode-tasks-wt/meshcode/secrets.py +365 -0
  131. meshcode-2.11.94/meshcode-tasks-wt/meshcode/self_update.py +345 -0
  132. meshcode-2.11.94/meshcode-tasks-wt/meshcode/setup_clients.py +926 -0
  133. meshcode-2.11.94/meshcode-tasks-wt/meshcode/supervisor.py +186 -0
  134. meshcode-2.11.94/meshcode-tasks-wt/meshcode/upload.py +125 -0
  135. meshcode-2.11.94/meshcode-tasks-wt/scripts/sentinel.py +257 -0
  136. meshcode-2.11.94/meshcode-tasks-wt/tests/test_core.py +216 -0
  137. meshcode-2.11.94/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +366 -0
  138. meshcode-2.11.94/meshcode-tasks-wt/tests/test_esc_deaf_state.py +361 -0
  139. meshcode-2.11.94/meshcode-tasks-wt/tests/test_exceptions.py +107 -0
  140. meshcode-2.11.94/meshcode-tasks-wt/tests/test_mark_read_batch.py +200 -0
  141. meshcode-2.11.94/meshcode-tasks-wt/tests/test_migration_integrity.py +176 -0
  142. meshcode-2.11.94/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +236 -0
  143. meshcode-2.11.94/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +255 -0
  144. meshcode-2.11.94/meshcode-tasks-wt/tests/test_rpc_migrations.py +387 -0
  145. meshcode-2.11.94/meshcode-tasks-wt/tests/test_security_regressions.py +171 -0
  146. meshcode-2.11.94/meshcode-tasks-wt/tests/test_sentinel.py +148 -0
  147. meshcode-2.11.94/meshcode-tasks-wt/tests/test_status_enum_coverage.py +231 -0
  148. {meshcode-2.11.93 → meshcode-2.11.94}/meshcode.egg-info/PKG-INFO +1 -1
  149. meshcode-2.11.94/meshcode.egg-info/SOURCES.txt +239 -0
  150. meshcode-2.11.94/meshcode.egg-info/top_level.txt +4 -0
  151. {meshcode-2.11.93 → meshcode-2.11.94}/pyproject.toml +1 -1
  152. meshcode-2.11.94/tests/test_core.py +216 -0
  153. meshcode-2.11.94/tests/test_cross_agent_messaging.py +366 -0
  154. meshcode-2.11.94/tests/test_esc_deaf_state.py +361 -0
  155. meshcode-2.11.94/tests/test_exceptions.py +107 -0
  156. meshcode-2.11.94/tests/test_mark_read_batch.py +200 -0
  157. meshcode-2.11.94/tests/test_migration_integrity.py +176 -0
  158. meshcode-2.11.94/tests/test_realtime_event_freshness.py +236 -0
  159. meshcode-2.11.94/tests/test_rls_cross_tenant.py +255 -0
  160. meshcode-2.11.94/tests/test_security_regressions.py +171 -0
  161. meshcode-2.11.94/tests/test_sentinel.py +148 -0
  162. meshcode-2.11.94/tests/test_status_enum_coverage.py +231 -0
  163. meshcode-2.11.93/meshcode/daemon.py +0 -492
  164. meshcode-2.11.93/meshcode/setup_clients.py +0 -1884
  165. meshcode-2.11.93/meshcode.egg-info/SOURCES.txt +0 -89
  166. meshcode-2.11.93/meshcode.egg-info/top_level.txt +0 -1
  167. {meshcode-2.11.93 → meshcode-2.11.94}/README.md +0 -0
  168. {meshcode-2.11.93 → meshcode-2.11.94}/meshcode/__main__.py +0 -0
  169. {meshcode-2.11.93 → meshcode-2.11.94}/meshcode/_session_handoff_template.py +0 -0
  170. {meshcode-2.11.93 → meshcode-2.11.94}/meshcode/_stop_hook_template.py +0 -0
  171. {meshcode-2.11.93 → meshcode-2.11.94}/meshcode/ascii_art.py +0 -0
  172. {meshcode-2.11.93 → meshcode-2.11.94}/meshcode/atomic_push.py +0 -0
  173. {meshcode-2.11.93 → meshcode-2.11.94}/meshcode/claude_update.py +0 -0
  174. {meshcode-2.11.93 → meshcode-2.11.94}/meshcode/comms_v4.py +0 -0
  175. {meshcode-2.11.93 → meshcode-2.11.94}/meshcode/date_parse.py +0 -0
  176. {meshcode-2.11.93 → meshcode-2.11.94}/meshcode/doctor.py +0 -0
  177. {meshcode-2.11.93 → meshcode-2.11.94}/meshcode/hostd.py +0 -0
  178. {meshcode-2.11.93 → meshcode-2.11.94}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
  179. {meshcode-2.11.93 → meshcode-2.11.94}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
  180. {meshcode-2.11.93 → meshcode-2.11.94}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
  181. {meshcode-2.11.93 → meshcode-2.11.94}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
  182. {meshcode-2.11.93 → meshcode-2.11.94}/meshcode/protocol_handler.py +0 -0
  183. {meshcode-2.11.93 → meshcode-2.11.94}/meshcode/quickstart.py +0 -0
  184. {meshcode-2.11.93 → meshcode-2.11.94}/meshcode/rpc_allowlist.py +0 -0
  185. {meshcode-2.11.93 → meshcode-2.11.94}/meshcode/run_agent.py +0 -0
  186. {meshcode-2.11.93 → meshcode-2.11.94}/meshcode/scripts/check_secrets.py +0 -0
  187. {meshcode-2.11.93 → meshcode-2.11.94}/meshcode/scripts/race_rate_harness.py +0 -0
  188. {meshcode-2.11.93 → meshcode-2.11.94}/meshcode/up.py +0 -0
  189. {meshcode-2.11.93 → meshcode-2.11.94/meshcode-backend-wt}/meshcode/cli.py +0 -0
  190. {meshcode-2.11.93 → meshcode-2.11.94/meshcode-backend-wt}/meshcode/compat.py +0 -0
  191. {meshcode-2.11.93 → meshcode-2.11.94/meshcode-backend-wt}/meshcode/error_hints.py +0 -0
  192. {meshcode-2.11.93 → meshcode-2.11.94/meshcode-backend-wt}/meshcode/exceptions.py +0 -0
  193. {meshcode-2.11.93 → meshcode-2.11.94/meshcode-backend-wt}/meshcode/invites.py +0 -0
  194. {meshcode-2.11.93 → meshcode-2.11.94/meshcode-backend-wt}/meshcode/launcher.py +0 -0
  195. {meshcode-2.11.93 → meshcode-2.11.94/meshcode-backend-wt}/meshcode/launcher_install.py +0 -0
  196. {meshcode-2.11.93 → meshcode-2.11.94/meshcode-backend-wt}/meshcode/meshcode_mcp/__init__.py +0 -0
  197. {meshcode-2.11.93 → meshcode-2.11.94/meshcode-backend-wt}/meshcode/meshcode_mcp/__main__.py +0 -0
  198. {meshcode-2.11.93 → meshcode-2.11.94/meshcode-backend-wt}/meshcode/meshcode_mcp/test_backend.py +0 -0
  199. {meshcode-2.11.93 → meshcode-2.11.94/meshcode-backend-wt}/meshcode/meshcode_mcp/test_realtime.py +0 -0
  200. {meshcode-2.11.93 → meshcode-2.11.94/meshcode-backend-wt}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  201. {meshcode-2.11.93 → meshcode-2.11.94/meshcode-backend-wt}/meshcode/preferences.py +0 -0
  202. {meshcode-2.11.93 → meshcode-2.11.94/meshcode-backend-wt}/meshcode/protocol_v2.py +0 -0
  203. {meshcode-2.11.93 → meshcode-2.11.94/meshcode-backend-wt}/meshcode/secrets.py +0 -0
  204. {meshcode-2.11.93 → meshcode-2.11.94/meshcode-backend-wt}/meshcode/supervisor.py +0 -0
  205. {meshcode-2.11.93 → meshcode-2.11.94/meshcode-backend-wt}/meshcode/upload.py +0 -0
  206. {meshcode-2.11.93 → meshcode-2.11.94/meshcode-backend-wt}/tests/test_core.py +0 -0
  207. {meshcode-2.11.93 → meshcode-2.11.94/meshcode-backend-wt}/tests/test_cross_agent_messaging.py +0 -0
  208. {meshcode-2.11.93 → meshcode-2.11.94/meshcode-backend-wt}/tests/test_esc_deaf_state.py +0 -0
  209. {meshcode-2.11.93 → meshcode-2.11.94/meshcode-backend-wt}/tests/test_exceptions.py +0 -0
  210. {meshcode-2.11.93 → meshcode-2.11.94/meshcode-backend-wt}/tests/test_mark_read_batch.py +0 -0
  211. {meshcode-2.11.93 → meshcode-2.11.94/meshcode-backend-wt}/tests/test_migration_integrity.py +0 -0
  212. {meshcode-2.11.93 → meshcode-2.11.94/meshcode-backend-wt}/tests/test_realtime_event_freshness.py +0 -0
  213. {meshcode-2.11.93 → meshcode-2.11.94/meshcode-backend-wt}/tests/test_rls_cross_tenant.py +0 -0
  214. {meshcode-2.11.93 → meshcode-2.11.94/meshcode-backend-wt}/tests/test_security_regressions.py +0 -0
  215. {meshcode-2.11.93 → meshcode-2.11.94/meshcode-backend-wt}/tests/test_sentinel.py +0 -0
  216. {meshcode-2.11.93 → meshcode-2.11.94/meshcode-backend-wt}/tests/test_status_enum_coverage.py +0 -0
  217. {meshcode-2.11.93 → meshcode-2.11.94}/meshcode.egg-info/dependency_links.txt +0 -0
  218. {meshcode-2.11.93 → meshcode-2.11.94}/meshcode.egg-info/entry_points.txt +0 -0
  219. {meshcode-2.11.93 → meshcode-2.11.94}/meshcode.egg-info/requires.txt +0 -0
  220. {meshcode-2.11.93 → meshcode-2.11.94}/setup.cfg +0 -0
  221. {meshcode-2.11.93 → meshcode-2.11.94}/tests/test_auto_update_hardening.py +0 -0
  222. {meshcode-2.11.93 → meshcode-2.11.94}/tests/test_autonomous_closegap_1.py +0 -0
  223. {meshcode-2.11.93 → meshcode-2.11.94}/tests/test_autonomous_closegap_2.py +0 -0
  224. {meshcode-2.11.93 → meshcode-2.11.94}/tests/test_autonomous_closegap_3.py +0 -0
  225. {meshcode-2.11.93 → meshcode-2.11.94}/tests/test_autonomous_prompt_inject.py +0 -0
  226. {meshcode-2.11.93 → meshcode-2.11.94}/tests/test_boot_bug_regression.py +0 -0
  227. {meshcode-2.11.93 → meshcode-2.11.94}/tests/test_color_truecolor.py +0 -0
  228. {meshcode-2.11.93 → meshcode-2.11.94}/tests/test_date_parse.py +0 -0
  229. {meshcode-2.11.93 → meshcode-2.11.94}/tests/test_doctor.py +0 -0
  230. {meshcode-2.11.93 → meshcode-2.11.94}/tests/test_epistemic_v1_python_sdk.py +0 -0
  231. {meshcode-2.11.93 → meshcode-2.11.94}/tests/test_epistemic_v1_stop_conditions.py +0 -0
  232. {meshcode-2.11.93 → meshcode-2.11.94}/tests/test_file_upload.py +0 -0
  233. {meshcode-2.11.93 → meshcode-2.11.94}/tests/test_init_device_code.py +0 -0
  234. {meshcode-2.11.93 → meshcode-2.11.94}/tests/test_install_guard.py +0 -0
  235. {meshcode-2.11.93 → meshcode-2.11.94}/tests/test_lease_sigterm_release.py +0 -0
  236. {meshcode-2.11.93 → meshcode-2.11.94}/tests/test_marketplace_ratings.py +0 -0
  237. {meshcode-2.11.93 → meshcode-2.11.94}/tests/test_rpc_grants.py +0 -0
  238. {meshcode-2.11.93 → meshcode-2.11.94}/tests/test_rpc_migrations.py +0 -0
  239. {meshcode-2.11.93 → meshcode-2.11.94}/tests/test_run_agent_dry_run.py +0 -0
  240. {meshcode-2.11.93 → meshcode-2.11.94}/tests/test_run_agent_no_server_import.py +0 -0
  241. {meshcode-2.11.93 → meshcode-2.11.94}/tests/test_self_update_user_site.py +0 -0
  242. {meshcode-2.11.93 → meshcode-2.11.94}/tests/test_setup_path.py +0 -0
  243. {meshcode-2.11.93 → meshcode-2.11.94}/tests/test_sleep_signals.py +0 -0
  244. {meshcode-2.11.93 → meshcode-2.11.94}/tests/test_stay_on_loop_hook.py +0 -0
  245. {meshcode-2.11.93 → meshcode-2.11.94}/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.93
3
+ Version: 2.11.94
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.93"
2
+ __version__ = "2.11.94"
3
3
 
4
4
  # Exception hierarchy — eagerly imported (lightweight, no deps)
5
5
  from meshcode.exceptions import ( # noqa: F401
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env python3
2
+ """MeshCode CLI entry point for pip install."""
3
+ import sys
4
+ import os
5
+
6
+ # Force UTF-8 on stdout/stderr for Windows terminals (cp1252 default crashes
7
+ # on emojis, em-dashes, and any non-ASCII output the CLI prints).
8
+ # Python 3.7+ supports reconfigure(); older versions get a no-op.
9
+ try:
10
+ if hasattr(sys.stdout, "reconfigure"):
11
+ sys.stdout.reconfigure(encoding="utf-8", errors="replace")
12
+ if hasattr(sys.stderr, "reconfigure"):
13
+ sys.stderr.reconfigure(encoding="utf-8", errors="replace")
14
+ except Exception:
15
+ pass
16
+
17
+
18
+ def main():
19
+ """Entry point that delegates to comms_v4.py within the package."""
20
+ # Find comms_v4.py — first in package dir, then in repo root
21
+ pkg_dir = os.path.dirname(os.path.abspath(__file__))
22
+ repo_root = os.path.dirname(pkg_dir)
23
+
24
+ for candidate in [
25
+ os.path.join(pkg_dir, "comms_v4.py"),
26
+ os.path.join(repo_root, "comms_v4.py"),
27
+ ]:
28
+ if os.path.exists(candidate):
29
+ sys.argv[0] = candidate
30
+ # Set __name__ and __file__ for the script
31
+ globs = {"__name__": "__main__", "__file__": candidate}
32
+ # Force UTF-8 on Windows (cp1252 default crashes on non-ASCII)
33
+ with open(candidate, encoding="utf-8") as f:
34
+ exec(compile(f.read(), candidate, "exec"), globs)
35
+ return
36
+
37
+ print("[meshcode] ERROR: comms_v4.py not found. Reinstall: pip install meshcode")
38
+ sys.exit(1)
39
+
40
+
41
+ if __name__ == "__main__":
42
+ main()
@@ -0,0 +1,174 @@
1
+ """Claude Code version compatibility matrix.
2
+
3
+ Tracks known-good and known-bad Claude Code versions so the SDK can
4
+ adjust behavior at runtime and warn users about regressions.
5
+
6
+ HEARTBEAT THRESHOLD CONTRACT (reference):
7
+ clear(60) < guard(90) < decay(180) < display(300) < client(600)
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ import subprocess
13
+ import shutil
14
+ from typing import Optional, Dict, List, Tuple
15
+
16
+
17
+ # ============================================================
18
+ # COMPATIBILITY MATRIX
19
+ # ============================================================
20
+ # Each entry: version_prefix -> {status, issues[], mitigations[]}
21
+ # status: "safe", "degraded", "broken"
22
+ # Versions not listed are assumed "unknown" (treated as safe with warning).
23
+
24
+ MATRIX: Dict[str, Dict] = {
25
+ # Known-good versions
26
+ "2.1.104": {
27
+ "status": "safe",
28
+ "issues": [],
29
+ "mitigations": [],
30
+ },
31
+ # ESC/MCP stdio regression range: 2.1.111 through 2.1.119
32
+ "2.1.111": {
33
+ "status": "broken",
34
+ "issues": ["ESC closes MCP stdio pipe instead of sending cancel notification"],
35
+ "mitigations": ["Pin to 2.1.104: npm i -g @anthropic-ai/claude-code@2.1.104"],
36
+ },
37
+ "2.1.112": {
38
+ "status": "broken",
39
+ "issues": ["ESC closes MCP stdio pipe (same as 2.1.111)"],
40
+ "mitigations": ["Pin to 2.1.104: npm i -g @anthropic-ai/claude-code@2.1.104"],
41
+ },
42
+ "2.1.113": {
43
+ "status": "broken",
44
+ "issues": ["ESC closes MCP stdio pipe (same as 2.1.111)"],
45
+ "mitigations": ["Pin to 2.1.104: npm i -g @anthropic-ai/claude-code@2.1.104"],
46
+ },
47
+ "2.1.114": {
48
+ "status": "broken",
49
+ "issues": ["ESC closes MCP stdio pipe (same as 2.1.111)"],
50
+ "mitigations": ["Pin to 2.1.104: npm i -g @anthropic-ai/claude-code@2.1.104"],
51
+ },
52
+ "2.1.115": {
53
+ "status": "broken",
54
+ "issues": ["ESC closes MCP stdio pipe (same as 2.1.111)"],
55
+ "mitigations": ["Pin to 2.1.104: npm i -g @anthropic-ai/claude-code@2.1.104"],
56
+ },
57
+ "2.1.116": {
58
+ "status": "broken",
59
+ "issues": ["ESC closes MCP stdio pipe (same as 2.1.111)"],
60
+ "mitigations": ["Pin to 2.1.104: npm i -g @anthropic-ai/claude-code@2.1.104"],
61
+ },
62
+ "2.1.117": {
63
+ "status": "broken",
64
+ "issues": ["ESC closes MCP stdio pipe (same as 2.1.111)"],
65
+ "mitigations": ["Pin to 2.1.104: npm i -g @anthropic-ai/claude-code@2.1.104"],
66
+ },
67
+ "2.1.118": {
68
+ "status": "broken",
69
+ "issues": ["ESC closes MCP stdio pipe (same as 2.1.111)"],
70
+ "mitigations": ["Pin to 2.1.104: npm i -g @anthropic-ai/claude-code@2.1.104"],
71
+ },
72
+ "2.1.119": {
73
+ "status": "broken",
74
+ "issues": ["ESC closes MCP stdio pipe (same as 2.1.111)"],
75
+ "mitigations": ["Pin to 2.1.104: npm i -g @anthropic-ai/claude-code@2.1.104"],
76
+ },
77
+ }
78
+
79
+ RECOMMENDED_VERSION = "2.1.104"
80
+
81
+
82
+ def detect_cc_version() -> Optional[str]:
83
+ """Detect installed Claude Code version. Returns version string or None."""
84
+ claude_bin = shutil.which("claude")
85
+ if not claude_bin:
86
+ return None
87
+ try:
88
+ out = subprocess.run(
89
+ [claude_bin, "--version"],
90
+ capture_output=True, text=True, timeout=5,
91
+ )
92
+ # Output like "2.1.104 (Claude Code)" or "Claude Code 2.1.104"
93
+ text = out.stdout.strip()
94
+ for part in text.split():
95
+ # Find the version-like token
96
+ if part[0].isdigit() and "." in part:
97
+ return part.strip("()")
98
+ except Exception:
99
+ pass
100
+ return None
101
+
102
+
103
+ def lookup(version: str) -> Dict:
104
+ """Look up a version in the matrix. Returns entry or unknown default."""
105
+ if version in MATRIX:
106
+ return MATRIX[version]
107
+ # Try prefix match (e.g., "2.1.104" matches "2.1.104-beta")
108
+ for key in MATRIX:
109
+ if version.startswith(key):
110
+ return MATRIX[key]
111
+ return {
112
+ "status": "unknown",
113
+ "issues": [],
114
+ "mitigations": [],
115
+ }
116
+
117
+
118
+ def check() -> Tuple[str, str, Dict]:
119
+ """Check current CC version against matrix.
120
+
121
+ Returns: (version_str, status, entry_dict)
122
+ """
123
+ version = detect_cc_version()
124
+ if not version:
125
+ return ("not found", "unknown", {
126
+ "status": "unknown",
127
+ "issues": ["Claude Code not found in PATH"],
128
+ "mitigations": ["Install: npm i -g @anthropic-ai/claude-code"],
129
+ })
130
+ entry = lookup(version)
131
+ return (version, entry["status"], entry)
132
+
133
+
134
+ def get_runtime_adjustments(version: str) -> Dict:
135
+ """Return runtime parameter adjustments for a given CC version.
136
+
137
+ These can be applied by the MCP server to mitigate known issues.
138
+ """
139
+ entry = lookup(version)
140
+ adjustments = {}
141
+
142
+ if entry["status"] == "broken":
143
+ # ESC kills MCP: use shorter wait timeouts so if MCP dies,
144
+ # it restarts faster and doesn't miss too many messages.
145
+ adjustments["wait_timeout_cap"] = 10 # seconds (default 20)
146
+ adjustments["heartbeat_interval"] = 15 # seconds (default 30)
147
+ adjustments["warn_on_boot"] = True
148
+
149
+ elif entry["status"] == "degraded":
150
+ adjustments["heartbeat_interval"] = 20 # slightly more aggressive
151
+ adjustments["warn_on_boot"] = True
152
+
153
+ return adjustments
154
+
155
+
156
+ def format_report(version: str, entry: Dict) -> str:
157
+ """Format a human-readable compatibility report."""
158
+ lines = []
159
+ lines.append(f" Claude Code version: {version}")
160
+ lines.append(f" Status: {entry.get('status', 'unknown').upper()}")
161
+ lines.append(f" Recommended: {RECOMMENDED_VERSION}")
162
+ if entry.get("issues"):
163
+ lines.append("")
164
+ lines.append(" Known issues:")
165
+ for issue in entry["issues"]:
166
+ lines.append(f" - {issue}")
167
+ if entry.get("mitigations"):
168
+ lines.append("")
169
+ lines.append(" Fixes:")
170
+ for m in entry["mitigations"]:
171
+ lines.append(f" - {m}")
172
+ if entry.get("status") == "safe":
173
+ lines.append(" No known issues.")
174
+ return "\n".join(lines)
File without changes
@@ -0,0 +1,74 @@
1
+ """Smart error messages — maps common error patterns to actionable fix commands.
2
+
3
+ Usage:
4
+ from meshcode.error_hints import hint_for_error
5
+ print(hint_for_error("agent not found"))
6
+ # → "Run: meshcode register <project> <agent> <role>"
7
+ """
8
+
9
+ _HINTS = [
10
+ # Auth errors
11
+ ("invalid api_key", "Run: meshcode login <api_key> to set your credentials"),
12
+ ("api key", "Run: meshcode login <api_key> to refresh credentials"),
13
+ ("auth_failed", "Run: meshcode login to re-authenticate"),
14
+ ("forbidden", "You don't have permission. Check: meshcode doctor"),
15
+ ("not authenticated", "Run: meshcode login <api_key>"),
16
+
17
+ # Agent errors
18
+ ("agent not found", "Run: meshcode register <project> <agent_name> <role>"),
19
+ ("agent.*not registered", "Run: meshcode register <project> <agent_name> <role>"),
20
+
21
+ # Project errors
22
+ ("project.*not found", "Check project name with: meshcode projects"),
23
+ ("no projects found", "Create one at meshcode.io/dashboard or: meshcode init <project_name>"),
24
+
25
+ # Network errors
26
+ ("circuit breaker open", "Supabase is temporarily unavailable. Wait 30s and retry. Details: meshcode doctor"),
27
+ ("connection refused", "Check internet connection. If persists: meshcode doctor"),
28
+ ("network error", "Check internet connection. If persists: meshcode doctor"),
29
+ ("timeout", "Request timed out. Check connection: meshcode doctor"),
30
+
31
+ # MCP errors
32
+ ("MCP server crashed", "Restart: meshcode run <agent>"),
33
+ ("stdin EOF", "MCP pipe closed. Restart the MCP server or Claude Code session"),
34
+ ("mcp.*failed", "Check MCP config: meshcode doctor"),
35
+
36
+ # Task errors
37
+ ("task.*already claimed", "This task is being worked on. Try: meshcode tasks to see available tasks"),
38
+ ("task not found", "Check task ID. List tasks: meshcode tasks"),
39
+
40
+ # Config errors
41
+ ("comms_v4.py not found", "Reinstall: pip install --upgrade meshcode"),
42
+ ("\.mcp\.json", "Run: meshcode setup <project> <agent> to create config"),
43
+
44
+ # Token errors
45
+ ("token expired", "Generate a new token from the dashboard"),
46
+ ("token already used", "Generate a new token from the dashboard"),
47
+ ]
48
+
49
+
50
+ def hint_for_error(error_msg: str) -> str:
51
+ """Return an actionable fix suggestion for a given error message.
52
+
53
+ Returns empty string if no hint matches.
54
+ """
55
+ import re
56
+ lower = error_msg.lower()
57
+ for pattern, hint in _HINTS:
58
+ if re.search(pattern, lower):
59
+ return hint
60
+ return ""
61
+
62
+
63
+ def format_error(error_msg: str, prefix: str = "[meshcode]") -> str:
64
+ """Format an error with an actionable hint if available.
65
+
66
+ Example output:
67
+ [meshcode] ERROR: agent not found
68
+ [meshcode] Fix: Run: meshcode register <project> <agent_name> <role>
69
+ """
70
+ lines = [f"{prefix} ERROR: {error_msg}"]
71
+ hint = hint_for_error(error_msg)
72
+ if hint:
73
+ lines.append(f"{prefix} Fix: {hint}")
74
+ return "\n".join(lines)
@@ -0,0 +1,52 @@
1
+ """MeshCode exception hierarchy.
2
+
3
+ All SDK-specific errors inherit from :class:`MeshCodeError` so callers can
4
+ catch a single base class, or narrow down to the specific failure mode.
5
+
6
+ CLI entry points (cli.py, launcher.py, server.py boot) catch these and
7
+ convert to ``sys.exit(2)`` so end-user behaviour is unchanged.
8
+ """
9
+
10
+
11
+ class MeshCodeError(Exception):
12
+ """Base exception for all MeshCode SDK errors."""
13
+
14
+
15
+ class AuthError(MeshCodeError):
16
+ """Authentication or API-key related failure.
17
+
18
+ Raised when:
19
+ - No API key is found in the keychain or environment
20
+ - The secrets module cannot be loaded
21
+ - An API key is rejected by the server
22
+ """
23
+
24
+
25
+ class RPCError(MeshCodeError):
26
+ """A Supabase RPC call returned an error payload.
27
+
28
+ Attributes:
29
+ rpc_name: Name of the RPC function that failed (if known).
30
+ detail: Server-provided error message.
31
+ """
32
+
33
+ def __init__(self, message: str, *, rpc_name: str = "", detail: str = ""):
34
+ super().__init__(message)
35
+ self.rpc_name = rpc_name
36
+ self.detail = detail
37
+
38
+
39
+ class MeshCodeTimeoutError(MeshCodeError):
40
+ """A network or RPC call timed out.
41
+
42
+ Named ``MeshCodeTimeoutError`` to avoid shadowing the builtin
43
+ :class:`TimeoutError`.
44
+ """
45
+
46
+
47
+ class MeshCodeConnectionError(MeshCodeError):
48
+ """Could not reach the MeshCode / Supabase backend.
49
+
50
+ Named ``MeshCodeConnectionError`` to avoid shadowing the builtin
51
+ :class:`ConnectionError`.
52
+ """