meshcode 2.11.64__tar.gz → 2.11.66__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 (254) hide show
  1. {meshcode-2.11.64 → meshcode-2.11.66}/PKG-INFO +1 -1
  2. {meshcode-2.11.64 → meshcode-2.11.66}/meshcode/__init__.py +1 -1
  3. {meshcode-2.11.64 → meshcode-2.11.66}/meshcode/hostd.py +15 -2
  4. {meshcode-2.11.64 → meshcode-2.11.66}/meshcode/meshcode_mcp/server.py +268 -0
  5. {meshcode-2.11.64 → meshcode-2.11.66}/meshcode.egg-info/PKG-INFO +1 -1
  6. meshcode-2.11.66/meshcode.egg-info/SOURCES.txt +88 -0
  7. meshcode-2.11.66/meshcode.egg-info/top_level.txt +1 -0
  8. {meshcode-2.11.64 → meshcode-2.11.66}/pyproject.toml +1 -1
  9. meshcode-2.11.64/meshcode/ascii_art.py +0 -638
  10. meshcode-2.11.64/meshcode/claude_update 2.py +0 -253
  11. meshcode-2.11.64/meshcode/claude_update 3.py +0 -253
  12. meshcode-2.11.64/meshcode/claude_update 4.py +0 -253
  13. meshcode-2.11.64/meshcode/cli.py +0 -42
  14. meshcode-2.11.64/meshcode/compat.py +0 -174
  15. meshcode-2.11.64/meshcode/error_hints.py +0 -74
  16. meshcode-2.11.64/meshcode/exceptions.py +0 -52
  17. meshcode-2.11.64/meshcode/hostd 2.py +0 -381
  18. meshcode-2.11.64/meshcode/hostd 3.py +0 -381
  19. meshcode-2.11.64/meshcode/hostd 4.py +0 -381
  20. meshcode-2.11.64/meshcode/invites.py +0 -406
  21. meshcode-2.11.64/meshcode/launcher.py +0 -353
  22. meshcode-2.11.64/meshcode/launcher_install.py +0 -414
  23. meshcode-2.11.64/meshcode/meshcode_mcp/__init__.py +0 -22
  24. meshcode-2.11.64/meshcode/meshcode_mcp/__main__.py +0 -62
  25. meshcode-2.11.64/meshcode/meshcode_mcp/test_backend.py +0 -86
  26. meshcode-2.11.64/meshcode/meshcode_mcp/test_realtime.py +0 -95
  27. meshcode-2.11.64/meshcode/meshcode_mcp/test_server_wrapper.py +0 -117
  28. meshcode-2.11.64/meshcode/preferences.py +0 -260
  29. meshcode-2.11.64/meshcode/protocol_v2.py +0 -129
  30. meshcode-2.11.64/meshcode/secrets.py +0 -365
  31. meshcode-2.11.64/meshcode/supervisor.py +0 -186
  32. meshcode-2.11.64/meshcode/up 2.py +0 -220
  33. meshcode-2.11.64/meshcode/up 3.py +0 -220
  34. meshcode-2.11.64/meshcode/upload.py +0 -125
  35. meshcode-2.11.64/meshcode-backend-wt/comms_v4.py +0 -1941
  36. meshcode-2.11.64/meshcode-backend-wt/meshcode/__init__.py +0 -82
  37. meshcode-2.11.64/meshcode-backend-wt/meshcode/comms_v4.py +0 -3563
  38. meshcode-2.11.64/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -1261
  39. meshcode-2.11.64/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -460
  40. meshcode-2.11.64/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -4117
  41. meshcode-2.11.64/meshcode-backend-wt/meshcode/quickstart.py +0 -148
  42. meshcode-2.11.64/meshcode-backend-wt/meshcode/run_agent.py +0 -958
  43. meshcode-2.11.64/meshcode-backend-wt/meshcode/self_update.py +0 -345
  44. meshcode-2.11.64/meshcode-backend-wt/meshcode/setup_clients.py +0 -926
  45. meshcode-2.11.64/meshcode-backend-wt/scripts/sentinel.py +0 -257
  46. meshcode-2.11.64/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -387
  47. meshcode-2.11.64/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -82
  48. meshcode-2.11.64/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -638
  49. meshcode-2.11.64/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -42
  50. meshcode-2.11.64/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -3563
  51. meshcode-2.11.64/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -174
  52. meshcode-2.11.64/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -74
  53. meshcode-2.11.64/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -52
  54. meshcode-2.11.64/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -406
  55. meshcode-2.11.64/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -353
  56. meshcode-2.11.64/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -414
  57. meshcode-2.11.64/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -22
  58. meshcode-2.11.64/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -62
  59. meshcode-2.11.64/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -1261
  60. meshcode-2.11.64/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -460
  61. meshcode-2.11.64/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -4117
  62. meshcode-2.11.64/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -86
  63. meshcode-2.11.64/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -95
  64. meshcode-2.11.64/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -117
  65. meshcode-2.11.64/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -260
  66. meshcode-2.11.64/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -129
  67. meshcode-2.11.64/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -148
  68. meshcode-2.11.64/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -958
  69. meshcode-2.11.64/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -365
  70. meshcode-2.11.64/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -345
  71. meshcode-2.11.64/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -926
  72. meshcode-2.11.64/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -186
  73. meshcode-2.11.64/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -125
  74. meshcode-2.11.64/meshcode-noun-wt/comms_v4.py +0 -1941
  75. meshcode-2.11.64/meshcode-noun-wt/meshcode/__init__.py +0 -82
  76. meshcode-2.11.64/meshcode-noun-wt/meshcode/ascii_art.py +0 -638
  77. meshcode-2.11.64/meshcode-noun-wt/meshcode/cli.py +0 -42
  78. meshcode-2.11.64/meshcode-noun-wt/meshcode/comms_v4.py +0 -3563
  79. meshcode-2.11.64/meshcode-noun-wt/meshcode/compat.py +0 -174
  80. meshcode-2.11.64/meshcode-noun-wt/meshcode/error_hints.py +0 -74
  81. meshcode-2.11.64/meshcode-noun-wt/meshcode/exceptions.py +0 -52
  82. meshcode-2.11.64/meshcode-noun-wt/meshcode/invites.py +0 -406
  83. meshcode-2.11.64/meshcode-noun-wt/meshcode/launcher.py +0 -353
  84. meshcode-2.11.64/meshcode-noun-wt/meshcode/launcher_install.py +0 -414
  85. meshcode-2.11.64/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -22
  86. meshcode-2.11.64/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -62
  87. meshcode-2.11.64/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -1261
  88. meshcode-2.11.64/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -460
  89. meshcode-2.11.64/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -4117
  90. meshcode-2.11.64/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -86
  91. meshcode-2.11.64/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -95
  92. meshcode-2.11.64/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -117
  93. meshcode-2.11.64/meshcode-noun-wt/meshcode/preferences.py +0 -260
  94. meshcode-2.11.64/meshcode-noun-wt/meshcode/protocol_v2.py +0 -129
  95. meshcode-2.11.64/meshcode-noun-wt/meshcode/quickstart.py +0 -148
  96. meshcode-2.11.64/meshcode-noun-wt/meshcode/run_agent.py +0 -958
  97. meshcode-2.11.64/meshcode-noun-wt/meshcode/secrets.py +0 -365
  98. meshcode-2.11.64/meshcode-noun-wt/meshcode/self_update.py +0 -345
  99. meshcode-2.11.64/meshcode-noun-wt/meshcode/setup_clients.py +0 -926
  100. meshcode-2.11.64/meshcode-noun-wt/meshcode/supervisor.py +0 -186
  101. meshcode-2.11.64/meshcode-noun-wt/meshcode/upload.py +0 -125
  102. meshcode-2.11.64/meshcode-noun-wt/scripts/sentinel.py +0 -257
  103. meshcode-2.11.64/meshcode-noun-wt/tests/test_core.py +0 -216
  104. meshcode-2.11.64/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -366
  105. meshcode-2.11.64/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -361
  106. meshcode-2.11.64/meshcode-noun-wt/tests/test_exceptions.py +0 -107
  107. meshcode-2.11.64/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -200
  108. meshcode-2.11.64/meshcode-noun-wt/tests/test_migration_integrity.py +0 -176
  109. meshcode-2.11.64/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -236
  110. meshcode-2.11.64/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -255
  111. meshcode-2.11.64/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -387
  112. meshcode-2.11.64/meshcode-noun-wt/tests/test_security_regressions.py +0 -171
  113. meshcode-2.11.64/meshcode-noun-wt/tests/test_sentinel.py +0 -148
  114. meshcode-2.11.64/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -231
  115. meshcode-2.11.64/meshcode-tasks-wt/comms_v4.py +0 -1941
  116. meshcode-2.11.64/meshcode-tasks-wt/meshcode/__init__.py +0 -82
  117. meshcode-2.11.64/meshcode-tasks-wt/meshcode/ascii_art.py +0 -638
  118. meshcode-2.11.64/meshcode-tasks-wt/meshcode/cli.py +0 -42
  119. meshcode-2.11.64/meshcode-tasks-wt/meshcode/comms_v4.py +0 -3563
  120. meshcode-2.11.64/meshcode-tasks-wt/meshcode/compat.py +0 -174
  121. meshcode-2.11.64/meshcode-tasks-wt/meshcode/error_hints.py +0 -74
  122. meshcode-2.11.64/meshcode-tasks-wt/meshcode/exceptions.py +0 -52
  123. meshcode-2.11.64/meshcode-tasks-wt/meshcode/invites.py +0 -406
  124. meshcode-2.11.64/meshcode-tasks-wt/meshcode/launcher.py +0 -353
  125. meshcode-2.11.64/meshcode-tasks-wt/meshcode/launcher_install.py +0 -414
  126. meshcode-2.11.64/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -22
  127. meshcode-2.11.64/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -62
  128. meshcode-2.11.64/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -1261
  129. meshcode-2.11.64/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -460
  130. meshcode-2.11.64/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -4117
  131. meshcode-2.11.64/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -86
  132. meshcode-2.11.64/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -95
  133. meshcode-2.11.64/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -117
  134. meshcode-2.11.64/meshcode-tasks-wt/meshcode/preferences.py +0 -260
  135. meshcode-2.11.64/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -129
  136. meshcode-2.11.64/meshcode-tasks-wt/meshcode/quickstart.py +0 -148
  137. meshcode-2.11.64/meshcode-tasks-wt/meshcode/run_agent.py +0 -958
  138. meshcode-2.11.64/meshcode-tasks-wt/meshcode/secrets.py +0 -365
  139. meshcode-2.11.64/meshcode-tasks-wt/meshcode/self_update.py +0 -345
  140. meshcode-2.11.64/meshcode-tasks-wt/meshcode/setup_clients.py +0 -926
  141. meshcode-2.11.64/meshcode-tasks-wt/meshcode/supervisor.py +0 -186
  142. meshcode-2.11.64/meshcode-tasks-wt/meshcode/upload.py +0 -125
  143. meshcode-2.11.64/meshcode-tasks-wt/scripts/sentinel.py +0 -257
  144. meshcode-2.11.64/meshcode-tasks-wt/tests/test_core.py +0 -216
  145. meshcode-2.11.64/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -366
  146. meshcode-2.11.64/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -361
  147. meshcode-2.11.64/meshcode-tasks-wt/tests/test_exceptions.py +0 -107
  148. meshcode-2.11.64/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -200
  149. meshcode-2.11.64/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -176
  150. meshcode-2.11.64/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -236
  151. meshcode-2.11.64/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -255
  152. meshcode-2.11.64/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -387
  153. meshcode-2.11.64/meshcode-tasks-wt/tests/test_security_regressions.py +0 -171
  154. meshcode-2.11.64/meshcode-tasks-wt/tests/test_sentinel.py +0 -148
  155. meshcode-2.11.64/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -231
  156. meshcode-2.11.64/meshcode.egg-info/SOURCES.txt +0 -250
  157. meshcode-2.11.64/meshcode.egg-info/top_level.txt +0 -4
  158. meshcode-2.11.64/tests/test_autonomous_prompt_inject 2.py +0 -126
  159. meshcode-2.11.64/tests/test_autonomous_prompt_inject 3.py +0 -126
  160. meshcode-2.11.64/tests/test_autonomous_prompt_inject 4.py +0 -126
  161. meshcode-2.11.64/tests/test_autonomous_prompt_inject 5.py +0 -126
  162. meshcode-2.11.64/tests/test_core.py +0 -216
  163. meshcode-2.11.64/tests/test_cross_agent_messaging.py +0 -366
  164. meshcode-2.11.64/tests/test_esc_deaf_state.py +0 -361
  165. meshcode-2.11.64/tests/test_exceptions.py +0 -107
  166. meshcode-2.11.64/tests/test_mark_read_batch.py +0 -200
  167. meshcode-2.11.64/tests/test_migration_integrity.py +0 -176
  168. meshcode-2.11.64/tests/test_realtime_event_freshness.py +0 -236
  169. meshcode-2.11.64/tests/test_rls_cross_tenant.py +0 -255
  170. meshcode-2.11.64/tests/test_security_regressions.py +0 -171
  171. meshcode-2.11.64/tests/test_sentinel.py +0 -148
  172. meshcode-2.11.64/tests/test_status_enum_coverage.py +0 -231
  173. {meshcode-2.11.64 → meshcode-2.11.66}/README.md +0 -0
  174. {meshcode-2.11.64 → meshcode-2.11.66}/meshcode/__main__.py +0 -0
  175. {meshcode-2.11.64 → meshcode-2.11.66}/meshcode/_stop_hook_template.py +0 -0
  176. {meshcode-2.11.64/meshcode-backend-wt → meshcode-2.11.66}/meshcode/ascii_art.py +0 -0
  177. {meshcode-2.11.64 → meshcode-2.11.66}/meshcode/atomic_push.py +0 -0
  178. {meshcode-2.11.64 → meshcode-2.11.66}/meshcode/claude_update.py +0 -0
  179. {meshcode-2.11.64/meshcode-backend-wt → meshcode-2.11.66}/meshcode/cli.py +0 -0
  180. {meshcode-2.11.64 → meshcode-2.11.66}/meshcode/comms_v4.py +0 -0
  181. {meshcode-2.11.64/meshcode-backend-wt → meshcode-2.11.66}/meshcode/compat.py +0 -0
  182. {meshcode-2.11.64 → meshcode-2.11.66}/meshcode/daemon.py +0 -0
  183. {meshcode-2.11.64 → meshcode-2.11.66}/meshcode/date_parse.py +0 -0
  184. {meshcode-2.11.64 → meshcode-2.11.66}/meshcode/doctor.py +0 -0
  185. {meshcode-2.11.64/meshcode-backend-wt → meshcode-2.11.66}/meshcode/error_hints.py +0 -0
  186. {meshcode-2.11.64/meshcode-backend-wt → meshcode-2.11.66}/meshcode/exceptions.py +0 -0
  187. {meshcode-2.11.64/meshcode-backend-wt → meshcode-2.11.66}/meshcode/invites.py +0 -0
  188. {meshcode-2.11.64/meshcode-backend-wt → meshcode-2.11.66}/meshcode/launcher.py +0 -0
  189. {meshcode-2.11.64/meshcode-backend-wt → meshcode-2.11.66}/meshcode/launcher_install.py +0 -0
  190. {meshcode-2.11.64/meshcode-backend-wt → meshcode-2.11.66}/meshcode/meshcode_mcp/__init__.py +0 -0
  191. {meshcode-2.11.64/meshcode-backend-wt → meshcode-2.11.66}/meshcode/meshcode_mcp/__main__.py +0 -0
  192. {meshcode-2.11.64 → meshcode-2.11.66}/meshcode/meshcode_mcp/backend.py +0 -0
  193. {meshcode-2.11.64 → meshcode-2.11.66}/meshcode/meshcode_mcp/realtime.py +0 -0
  194. {meshcode-2.11.64 → meshcode-2.11.66}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
  195. {meshcode-2.11.64/meshcode-backend-wt → meshcode-2.11.66}/meshcode/meshcode_mcp/test_backend.py +0 -0
  196. {meshcode-2.11.64 → meshcode-2.11.66}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
  197. {meshcode-2.11.64 → meshcode-2.11.66}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
  198. {meshcode-2.11.64 → meshcode-2.11.66}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
  199. {meshcode-2.11.64/meshcode-backend-wt → meshcode-2.11.66}/meshcode/meshcode_mcp/test_realtime.py +0 -0
  200. {meshcode-2.11.64/meshcode-backend-wt → meshcode-2.11.66}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  201. {meshcode-2.11.64/meshcode-backend-wt → meshcode-2.11.66}/meshcode/preferences.py +0 -0
  202. {meshcode-2.11.64 → meshcode-2.11.66}/meshcode/protocol_handler.py +0 -0
  203. {meshcode-2.11.64/meshcode-backend-wt → meshcode-2.11.66}/meshcode/protocol_v2.py +0 -0
  204. {meshcode-2.11.64 → meshcode-2.11.66}/meshcode/quickstart.py +0 -0
  205. {meshcode-2.11.64 → meshcode-2.11.66}/meshcode/rpc_allowlist.py +0 -0
  206. {meshcode-2.11.64 → meshcode-2.11.66}/meshcode/run_agent.py +0 -0
  207. {meshcode-2.11.64 → meshcode-2.11.66}/meshcode/scripts/check_secrets.py +0 -0
  208. {meshcode-2.11.64 → meshcode-2.11.66}/meshcode/scripts/race_rate_harness.py +0 -0
  209. {meshcode-2.11.64/meshcode-backend-wt → meshcode-2.11.66}/meshcode/secrets.py +0 -0
  210. {meshcode-2.11.64 → meshcode-2.11.66}/meshcode/self_update.py +0 -0
  211. {meshcode-2.11.64 → meshcode-2.11.66}/meshcode/setup_clients.py +0 -0
  212. {meshcode-2.11.64/meshcode-backend-wt → meshcode-2.11.66}/meshcode/supervisor.py +0 -0
  213. {meshcode-2.11.64 → meshcode-2.11.66}/meshcode/up.py +0 -0
  214. {meshcode-2.11.64/meshcode-backend-wt → meshcode-2.11.66}/meshcode/upload.py +0 -0
  215. {meshcode-2.11.64 → meshcode-2.11.66}/meshcode.egg-info/dependency_links.txt +0 -0
  216. {meshcode-2.11.64 → meshcode-2.11.66}/meshcode.egg-info/entry_points.txt +0 -0
  217. {meshcode-2.11.64 → meshcode-2.11.66}/meshcode.egg-info/requires.txt +0 -0
  218. {meshcode-2.11.64 → meshcode-2.11.66}/setup.cfg +0 -0
  219. {meshcode-2.11.64 → meshcode-2.11.66}/tests/test_auto_update_hardening.py +0 -0
  220. {meshcode-2.11.64 → meshcode-2.11.66}/tests/test_autonomous_closegap_1.py +0 -0
  221. {meshcode-2.11.64 → meshcode-2.11.66}/tests/test_autonomous_closegap_2.py +0 -0
  222. {meshcode-2.11.64 → meshcode-2.11.66}/tests/test_autonomous_closegap_3.py +0 -0
  223. {meshcode-2.11.64 → meshcode-2.11.66}/tests/test_autonomous_prompt_inject.py +0 -0
  224. {meshcode-2.11.64 → meshcode-2.11.66}/tests/test_boot_bug_regression.py +0 -0
  225. {meshcode-2.11.64 → meshcode-2.11.66}/tests/test_color_truecolor.py +0 -0
  226. {meshcode-2.11.64/meshcode-backend-wt → meshcode-2.11.66}/tests/test_core.py +0 -0
  227. {meshcode-2.11.64/meshcode-backend-wt → meshcode-2.11.66}/tests/test_cross_agent_messaging.py +0 -0
  228. {meshcode-2.11.64 → meshcode-2.11.66}/tests/test_date_parse.py +0 -0
  229. {meshcode-2.11.64 → meshcode-2.11.66}/tests/test_doctor.py +0 -0
  230. {meshcode-2.11.64 → meshcode-2.11.66}/tests/test_epistemic_v1_python_sdk.py +0 -0
  231. {meshcode-2.11.64 → meshcode-2.11.66}/tests/test_epistemic_v1_stop_conditions.py +0 -0
  232. {meshcode-2.11.64/meshcode-backend-wt → meshcode-2.11.66}/tests/test_esc_deaf_state.py +0 -0
  233. {meshcode-2.11.64/meshcode-backend-wt → meshcode-2.11.66}/tests/test_exceptions.py +0 -0
  234. {meshcode-2.11.64 → meshcode-2.11.66}/tests/test_file_upload.py +0 -0
  235. {meshcode-2.11.64 → meshcode-2.11.66}/tests/test_init_device_code.py +0 -0
  236. {meshcode-2.11.64 → meshcode-2.11.66}/tests/test_install_guard.py +0 -0
  237. {meshcode-2.11.64 → meshcode-2.11.66}/tests/test_lease_sigterm_release.py +0 -0
  238. {meshcode-2.11.64/meshcode-backend-wt → meshcode-2.11.66}/tests/test_mark_read_batch.py +0 -0
  239. {meshcode-2.11.64 → meshcode-2.11.66}/tests/test_marketplace_ratings.py +0 -0
  240. {meshcode-2.11.64/meshcode-backend-wt → meshcode-2.11.66}/tests/test_migration_integrity.py +0 -0
  241. {meshcode-2.11.64/meshcode-backend-wt → meshcode-2.11.66}/tests/test_realtime_event_freshness.py +0 -0
  242. {meshcode-2.11.64/meshcode-backend-wt → meshcode-2.11.66}/tests/test_rls_cross_tenant.py +0 -0
  243. {meshcode-2.11.64 → meshcode-2.11.66}/tests/test_rpc_grants.py +0 -0
  244. {meshcode-2.11.64 → meshcode-2.11.66}/tests/test_rpc_migrations.py +0 -0
  245. {meshcode-2.11.64 → meshcode-2.11.66}/tests/test_run_agent_dry_run.py +0 -0
  246. {meshcode-2.11.64 → meshcode-2.11.66}/tests/test_run_agent_no_server_import.py +0 -0
  247. {meshcode-2.11.64/meshcode-backend-wt → meshcode-2.11.66}/tests/test_security_regressions.py +0 -0
  248. {meshcode-2.11.64 → meshcode-2.11.66}/tests/test_self_update_user_site.py +0 -0
  249. {meshcode-2.11.64/meshcode-backend-wt → meshcode-2.11.66}/tests/test_sentinel.py +0 -0
  250. {meshcode-2.11.64 → meshcode-2.11.66}/tests/test_setup_path.py +0 -0
  251. {meshcode-2.11.64 → meshcode-2.11.66}/tests/test_sleep_signals.py +0 -0
  252. {meshcode-2.11.64/meshcode-backend-wt → meshcode-2.11.66}/tests/test_status_enum_coverage.py +0 -0
  253. {meshcode-2.11.64 → meshcode-2.11.66}/tests/test_stay_on_loop_hook.py +0 -0
  254. {meshcode-2.11.64 → meshcode-2.11.66}/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.64
3
+ Version: 2.11.66
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.64"
2
+ __version__ = "2.11.66"
3
3
 
4
4
  # Exception hierarchy — eagerly imported (lightweight, no deps)
5
5
  from meshcode.exceptions import ( # noqa: F401
@@ -252,11 +252,24 @@ def _do_recycles(api_key: str, host_id: str) -> int:
252
252
  continue # task boundary only — never mid-task
253
253
  if (now - first) >= float(value) * 3600.0:
254
254
  _log(f"RECYCLE {proj}/{agent} (uptime {(now-first)/3600:.1f}h >= {value}h)")
255
- if _spawn_agent(proj, agent):
255
+ # Server-authorized clean-exit (task 548c863e, mig 364): SIGNAL the
256
+ # recycle instead of spawning. A direct _spawn_agent here duplicates
257
+ # the still-alive process. mc_request_recycle sets a flag; the
258
+ # agent's wait-loop consumes it, returns must_exit/reason=recycle,
259
+ # exits CLEAN (Stop-hook writes the handoff), then the respawn path
260
+ # (_do_respawns) relaunches it fresh. Recorded via mc_record_recycle
261
+ # so it's NEVER counted against the crash respawn cap.
262
+ req = _rpc("mc_request_recycle",
263
+ {"p_api_key": api_key, "p_project_id": a.get("project_id"), "p_agent_name": agent})
264
+ if req and req.get("ok") and req.get("requested"):
256
265
  _rpc("mc_record_recycle",
257
266
  {"p_api_key": api_key, "p_project_id": a.get("project_id"), "p_agent_name": agent})
258
- st[key] = now # reset clock after recycle
267
+ st[key] = now # reset clock after signaling recycle
259
268
  n += 1
269
+ elif req and req.get("ok") and not req.get("requested"):
270
+ # Agent flipped busy between the roster read and the request —
271
+ # skip; retry next sweep at the next task boundary.
272
+ _log(f"SKIP recycle {proj}/{agent}: {req.get('reason','not_requested')}")
260
273
  # prune state for agents no longer managed on this host
261
274
  for k in [k for k in st if k not in seen]:
262
275
  st.pop(k, None)
@@ -3372,6 +3372,33 @@ def _get_pending_tasks_summary() -> Optional[List[Dict[str, str]]]:
3372
3372
  return None
3373
3373
 
3374
3374
 
3375
+ def _check_recycle_request() -> bool:
3376
+ """Server-authorized recycle (task 548c863e, mig 364).
3377
+
3378
+ The hostd daemon sets mc_agents.recycle_requested_at at a TASK BOUNDARY
3379
+ when an agent exceeds its uptime-recycle policy. This consumes the flag
3380
+ (atomic read+clear via mc_consume_recycle — fires exactly once) so the
3381
+ wait-loop can return must_exit=True/reason=recycle a single time. The
3382
+ agent then exits CLEAN (its Stop-hook writes the handoff; the
3383
+ stay_on_loop hook already releases on must_exit=True), and the respawn
3384
+ path (mc_agents_needing_respawn → hostd._do_respawns) relaunches it fresh
3385
+ with that handoff — no duplicate process, no hard-kill, no lost state.
3386
+ Best-effort: any failure returns False (never blocks the loop).
3387
+ """
3388
+ try:
3389
+ api_key = _get_api_key()
3390
+ if not api_key:
3391
+ return False
3392
+ resp = be.sb_rpc("mc_consume_recycle", {
3393
+ "p_api_key": api_key,
3394
+ "p_project_id": _PROJECT_ID,
3395
+ "p_agent_name": AGENT_NAME,
3396
+ })
3397
+ return bool(isinstance(resp, dict) and resp.get("ok") and resp.get("recycle"))
3398
+ except Exception:
3399
+ return False
3400
+
3401
+
3375
3402
  def _try_auto_claim_self_assigned_tasks(max_claims: int = 20) -> List[Dict[str, str]]:
3376
3403
  """URGENT_RUNTIME_FIX_TASK_PULL (Samuel directive 2026-05-26T04:20Z msg
3377
3404
  a15d7ed4 + commander msg 0cfca3f3 AUTOCLAIM_ON_RECONNECT): claim every
@@ -4031,6 +4058,13 @@ async def meshcode_wait(timeout_seconds: int = 20, include_acks: bool = False) -
4031
4058
  # surface autonomy on the refused-path too so check
4032
4059
  # parity holds when wait short-circuits on unread msgs.
4033
4060
  resp["you_are_autonomous"] = _get_autonomous_mode()
4061
+ # c0ab14c1 Phase 2: time-awareness on the wait delivery path.
4062
+ try:
4063
+ _pa = _promise_awareness(_get_api_key())
4064
+ if _pa:
4065
+ resp["time_awareness"] = _pa
4066
+ except Exception:
4067
+ pass
4034
4068
  return resp
4035
4069
  # Ack-only batch — fall through to wait loop
4036
4070
  except Exception:
@@ -4071,6 +4105,21 @@ async def meshcode_wait(timeout_seconds: int = 20, include_acks: bool = False) -
4071
4105
  if result.get("timed_out"):
4072
4106
  _CONSECUTIVE_IDLE_SECONDS += capped_timeout
4073
4107
 
4108
+ # Server-authorized recycle (task 548c863e): the daemon flagged
4109
+ # us for uptime-recycle at a task boundary. Exit CLEAN now so
4110
+ # the Stop-hook persists a handoff and the respawn path relaunches
4111
+ # us fresh. Checked BEFORE pending_tasks: the fresh session
4112
+ # re-attacks any open tasks on boot, so an outstanding backlog
4113
+ # must not pin a stale, context-heavy session alive.
4114
+ if _check_recycle_request():
4115
+ _set_state("sleeping", "recycle")
4116
+ result["must_exit"] = True
4117
+ result["exit_reason"] = (
4118
+ "recycle authorized — set status=sleeping and END the session now; "
4119
+ "hostd will relaunch you fresh with your handoff (do NOT meshcode_wait again)")
4120
+ result["recycle"] = True
4121
+ break
4122
+
4074
4123
  # Check if new tasks appeared while we waited
4075
4124
  pending_tasks = _get_pending_tasks_summary()
4076
4125
  if pending_tasks:
@@ -5785,6 +5834,16 @@ def meshcode_boot() -> Dict[str, Any]:
5785
5834
  # Non-fatal: surface that the hints are unavailable but boot succeeds.
5786
5835
  resp.setdefault("time_context_available", False)
5787
5836
 
5837
+ # c0ab14c1 Phase 2: open-promise time-awareness (what I owe / what I'm
5838
+ # waiting on, with overdue/elapsed minutes). Soft-fail; only added when
5839
+ # there's something open.
5840
+ try:
5841
+ _pa = _promise_awareness(api_key)
5842
+ if _pa:
5843
+ resp["time_awareness"] = _pa
5844
+ except Exception:
5845
+ pass
5846
+
5788
5847
  return resp
5789
5848
 
5790
5849
 
@@ -6219,6 +6278,215 @@ def meshcode_remember(
6219
6278
  return result
6220
6279
 
6221
6280
 
6281
+ # ----------------- TIME-AWARE PROMISES / EXPECTATIONS (anti-stalemate) -----------------
6282
+ # Task c0ab14c1. Backend substrate = mc_promises + mig 371 backoff/re-nudge sweep +
6283
+ # mig 372 mc_promises_involving. Semantics: agent_name = RESPONSIBLE party (who must
6284
+ # act); to_target = waiter. When an ETA passes unfulfilled the server proactively
6285
+ # nudges the RESPONSIBLE agent (backoff/mute), escalates mutual deadlocks to the
6286
+ # commander, and routes cross-mesh overdue to the commander. Phase-1 server-side
6287
+ # parser already auto-captures explicit ETAs from messages; these tools make it
6288
+ # explicit + deterministic.
6289
+
6290
+ def _promise_expires_iso(eta_minutes: int) -> Optional[str]:
6291
+ """now()+eta as ISO-8601 UTC. Returns None if eta is out of the 1..1440 horizon."""
6292
+ if not isinstance(eta_minutes, int) or eta_minutes < 1 or eta_minutes > 1440:
6293
+ return None
6294
+ from datetime import datetime as _dt, timezone as _tz, timedelta as _td
6295
+ return (_dt.now(_tz.utc) + _td(minutes=eta_minutes)).isoformat()
6296
+
6297
+
6298
+ def _promise_awareness(api_key: str) -> Optional[Dict[str, Any]]:
6299
+ """Compact time-awareness block for boot/wait payloads: what I owe + what I'm
6300
+ waiting on, with overdue/elapsed minutes. None when there's nothing open."""
6301
+ try:
6302
+ r = be.sb_rpc("mc_promises_involving", {
6303
+ "p_api_key": api_key,
6304
+ "p_agent_name": AGENT_NAME,
6305
+ })
6306
+ except Exception:
6307
+ return None
6308
+ if not isinstance(r, dict) or not r.get("ok"):
6309
+ return None
6310
+ owe = r.get("i_owe") or []
6311
+ waiting = r.get("waiting_on") or []
6312
+ if not owe and not waiting:
6313
+ return None
6314
+ return {
6315
+ "i_owe": owe,
6316
+ "waiting_on": waiting,
6317
+ "overdue_i_owe": sum(1 for p in owe if isinstance(p, dict) and p.get("overdue")),
6318
+ "overdue_waiting_on": sum(1 for p in waiting if isinstance(p, dict) and p.get("overdue")),
6319
+ "hint": "Act on overdue items you owe; for items you're waiting on, the server is already nudging the responsible agent. meshcode_fulfill(promise_id) when done.",
6320
+ }
6321
+
6322
+
6323
+ @mcp.tool()
6324
+ @with_working_status
6325
+ def meshcode_promise(to: str, what: str, eta_minutes: int) -> Dict[str, Any]:
6326
+ """Register a time-bound commitment YOU are responsible for: "I'll do <what>
6327
+ for <to> within <eta_minutes>". If the ETA passes unfulfilled, the server
6328
+ proactively pings YOU (exponential backoff, auto-mutes) so nothing stalls
6329
+ waiting on you. Call meshcode_fulfill(promise_id) when done.
6330
+
6331
+ Use this whenever you tell another agent an ETA. Horizon cap = 24h
6332
+ (1440 min) — for longer commitments create a task instead.
6333
+
6334
+ Args:
6335
+ to: the agent you're committing to (the waiter / beneficiary).
6336
+ what: short description of what you'll deliver.
6337
+ eta_minutes: minutes from now until you expect to deliver (1..1440).
6338
+ """
6339
+ if not to or not to.strip():
6340
+ return {"ok": False, "error": "to (recipient agent) is required"}
6341
+ if not what or not what.strip():
6342
+ return {"ok": False, "error": "what (promise text) is required"}
6343
+ expires = _promise_expires_iso(eta_minutes)
6344
+ if expires is None:
6345
+ return {"ok": False, "error": "eta_minutes must be an integer 1..1440 (24h); use a task for longer"}
6346
+ return be.sb_rpc("mc_record_promise", {
6347
+ "p_api_key": _get_api_key(),
6348
+ "p_to_target": to.strip(),
6349
+ "p_text": what.strip(),
6350
+ "p_expires_at": expires,
6351
+ "p_source_msg_id": None,
6352
+ "p_agent_name": AGENT_NAME, # responsible = me
6353
+ })
6354
+
6355
+
6356
+ @mcp.tool()
6357
+ @with_working_status
6358
+ def meshcode_expect(of: str, what: str, eta_minutes: int) -> Dict[str, Any]:
6359
+ """Register that you are WAITING on another agent: "<of> will do <what>
6360
+ within <eta_minutes>". If it doesn't happen in time, the server nudges
6361
+ <of> (the RESPONSIBLE agent) — not you. This is the anti-stalemate path:
6362
+ use it whenever you're blocked on someone else (e.g. "you push first, then
6363
+ I deploy"). Cancel with meshcode_fulfill(promise_id) once they deliver.
6364
+
6365
+ Args:
6366
+ of: the agent you're waiting on (the responsible party).
6367
+ what: short description of what you expect them to do.
6368
+ eta_minutes: minutes from now you expect it by (1..1440).
6369
+ """
6370
+ if not of or not of.strip():
6371
+ return {"ok": False, "error": "of (agent you're waiting on) is required"}
6372
+ if not what or not what.strip():
6373
+ return {"ok": False, "error": "what (expectation text) is required"}
6374
+ expires = _promise_expires_iso(eta_minutes)
6375
+ if expires is None:
6376
+ return {"ok": False, "error": "eta_minutes must be an integer 1..1440 (24h); use a task for longer"}
6377
+ # responsible = `of`; waiter = me. Server nudges `of` when overdue.
6378
+ return be.sb_rpc("mc_record_promise", {
6379
+ "p_api_key": _get_api_key(),
6380
+ "p_to_target": AGENT_NAME,
6381
+ "p_text": what.strip(),
6382
+ "p_expires_at": expires,
6383
+ "p_source_msg_id": None,
6384
+ "p_agent_name": of.strip(), # responsible = the other agent
6385
+ })
6386
+
6387
+
6388
+ @mcp.tool()
6389
+ @with_working_status
6390
+ def meshcode_fulfill(promise_id: str) -> Dict[str, Any]:
6391
+ """Mark a promise/expectation fulfilled — stops all follow-up nudges
6392
+ immediately. Call this the moment the committed work is delivered (or the
6393
+ thing you were waiting on arrives).
6394
+
6395
+ Args:
6396
+ promise_id: the id returned by meshcode_promise / meshcode_expect (or
6397
+ surfaced in a promise_overdue nudge or the boot/wait time_awareness block).
6398
+ """
6399
+ if not promise_id or not str(promise_id).strip():
6400
+ return {"ok": False, "error": "promise_id is required"}
6401
+ return be.sb_rpc("mc_fulfill_promise", {
6402
+ "p_api_key": _get_api_key(),
6403
+ "p_promise_id": str(promise_id).strip(),
6404
+ })
6405
+
6406
+
6407
+ # ----------------- PENDING APPROVALS (flagship: GO/no-go gate) -----------------
6408
+ # Task bb396c9b. The agent asks for a GO/no-go before a gated action; a human (or an
6409
+ # autonomous commander) approves/rejects with one button in the dashboard panel.
6410
+ # AUTO-APPROVE: if the project commander is in autonomous_mode AND the action is NOT
6411
+ # destructive, mc_request_approval auto-approves at creation. SAFETY FLOOR: a
6412
+ # destructive/irreversible action ALWAYS escalates to a human, even in autonomous mode.
6413
+
6414
+ _APPROVAL_RISK = ("low", "medium", "high", "critical")
6415
+ _APPROVAL_ACTIONS = ("push", "ddl", "deploy", "send", "task_complete", "custom")
6416
+
6417
+
6418
+ @mcp.tool()
6419
+ @with_working_status
6420
+ def meshcode_request_approval(
6421
+ title: str,
6422
+ detail: Optional[str] = None,
6423
+ risk_level: str = "medium",
6424
+ action_type: str = "custom",
6425
+ is_destructive: bool = False,
6426
+ context: Optional[Dict[str, Any]] = None,
6427
+ timeout_seconds: int = 1800,
6428
+ ) -> Dict[str, Any]:
6429
+ """Request a human/commander GO-no-go approval before a gated action, then BLOCK
6430
+ until it's resolved. Use before anything risky/outward-facing you want a human to
6431
+ confirm (prod DDL, deploy, force-push, external send, spending money, etc.).
6432
+
6433
+ Auto-approves instantly IF the project's commander is in autonomous_mode AND the
6434
+ action is NOT destructive. A destructive/irreversible action ALWAYS waits for a
6435
+ human, even under autonomous_mode (safety floor).
6436
+
6437
+ Args:
6438
+ title: short one-line summary of what you want to do (shown as the panel row).
6439
+ detail: optional markdown detail (the diff/command/plan/target).
6440
+ risk_level: 'low' | 'med' | 'high'.
6441
+ action_type: 'push' | 'ddl' | 'deploy' | 'send' | 'task_complete' | 'custom'.
6442
+ is_destructive: True for irreversible/destructive actions (always human-gated).
6443
+ context: optional jsonb context (diff, command, target ids).
6444
+ timeout_seconds: how long to block waiting for the decision (default 1800).
6445
+
6446
+ Returns: {ok, approval_id, decision: 'approved'|'rejected'|'expired'|'timeout',
6447
+ auto_approved: bool, resolved_by?}.
6448
+ """
6449
+ if not title or not title.strip():
6450
+ return {"ok": False, "error": "title is required"}
6451
+ if risk_level not in _APPROVAL_RISK:
6452
+ return {"ok": False, "error": f"risk_level must be one of {_APPROVAL_RISK}"}
6453
+ if action_type not in _APPROVAL_ACTIONS:
6454
+ return {"ok": False, "error": f"action_type must be one of {_APPROVAL_ACTIONS}"}
6455
+ api_key = _get_api_key()
6456
+ created = be.sb_rpc("mc_request_approval", {
6457
+ "p_api_key": api_key,
6458
+ "p_title": title.strip(),
6459
+ "p_detail": (detail or None),
6460
+ "p_risk_level": risk_level,
6461
+ "p_action_type": action_type,
6462
+ "p_is_destructive": bool(is_destructive),
6463
+ "p_context": context if isinstance(context, dict) else None,
6464
+ })
6465
+ if not isinstance(created, dict) or not created.get("ok"):
6466
+ return created if isinstance(created, dict) else {"ok": False, "error": "create_failed"}
6467
+ approval_id = created.get("approval_id")
6468
+ status = created.get("status")
6469
+ # Auto-approved at creation (autonomous commander, non-destructive) -> return now.
6470
+ if status in ("approved", "auto_approved"):
6471
+ return {"ok": True, "approval_id": approval_id, "decision": status,
6472
+ "auto_approved": (status == "auto_approved"), "resolved_by": created.get("resolved_by")}
6473
+ if status in ("rejected", "expired"):
6474
+ return {"ok": True, "approval_id": approval_id, "decision": status, "auto_approved": False}
6475
+ # Pending -> block-poll until resolved / expired / timeout.
6476
+ import time as _time
6477
+ deadline = _time.monotonic() + max(30, int(timeout_seconds))
6478
+ while _time.monotonic() < deadline:
6479
+ _time.sleep(4)
6480
+ st = be.sb_rpc("mc_approval_status", {"p_api_key": api_key, "p_approval_id": approval_id})
6481
+ if isinstance(st, dict) and st.get("ok"):
6482
+ cur = st.get("status")
6483
+ if cur in ("approved", "auto_approved", "rejected", "expired"):
6484
+ return {"ok": True, "approval_id": approval_id, "decision": cur,
6485
+ "auto_approved": False, "resolved_by": st.get("resolved_by")}
6486
+ return {"ok": True, "approval_id": approval_id, "decision": "timeout", "auto_approved": False,
6487
+ "hint": "still pending; re-check with the panel or call again"}
6488
+
6489
+
6222
6490
  @mcp.tool()
6223
6491
  @with_working_status
6224
6492
  def meshcode_seed_fixture(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meshcode
3
- Version: 2.11.64
3
+ Version: 2.11.66
4
4
  Summary: Real-time communication between AI agents — Supabase-backed CLI
5
5
  Author-email: MeshCode <hello@meshcode.io>
6
6
  License: MIT
@@ -0,0 +1,88 @@
1
+ README.md
2
+ pyproject.toml
3
+ meshcode/__init__.py
4
+ meshcode/__main__.py
5
+ meshcode/_stop_hook_template.py
6
+ meshcode/ascii_art.py
7
+ meshcode/atomic_push.py
8
+ meshcode/claude_update.py
9
+ meshcode/cli.py
10
+ meshcode/comms_v4.py
11
+ meshcode/compat.py
12
+ meshcode/daemon.py
13
+ meshcode/date_parse.py
14
+ meshcode/doctor.py
15
+ meshcode/error_hints.py
16
+ meshcode/exceptions.py
17
+ meshcode/hostd.py
18
+ meshcode/invites.py
19
+ meshcode/launcher.py
20
+ meshcode/launcher_install.py
21
+ meshcode/preferences.py
22
+ meshcode/protocol_handler.py
23
+ meshcode/protocol_v2.py
24
+ meshcode/quickstart.py
25
+ meshcode/rpc_allowlist.py
26
+ meshcode/run_agent.py
27
+ meshcode/secrets.py
28
+ meshcode/self_update.py
29
+ meshcode/setup_clients.py
30
+ meshcode/supervisor.py
31
+ meshcode/up.py
32
+ meshcode/upload.py
33
+ meshcode.egg-info/PKG-INFO
34
+ meshcode.egg-info/SOURCES.txt
35
+ meshcode.egg-info/dependency_links.txt
36
+ meshcode.egg-info/entry_points.txt
37
+ meshcode.egg-info/requires.txt
38
+ meshcode.egg-info/top_level.txt
39
+ meshcode/meshcode_mcp/__init__.py
40
+ meshcode/meshcode_mcp/__main__.py
41
+ meshcode/meshcode_mcp/backend.py
42
+ meshcode/meshcode_mcp/realtime.py
43
+ meshcode/meshcode_mcp/server.py
44
+ meshcode/meshcode_mcp/sleep_signals.py
45
+ meshcode/meshcode_mcp/test_backend.py
46
+ meshcode/meshcode_mcp/test_boot_timing.py
47
+ meshcode/meshcode_mcp/test_install_guard.py
48
+ meshcode/meshcode_mcp/test_prefs_claude_version.py
49
+ meshcode/meshcode_mcp/test_realtime.py
50
+ meshcode/meshcode_mcp/test_server_wrapper.py
51
+ meshcode/scripts/check_secrets.py
52
+ meshcode/scripts/race_rate_harness.py
53
+ tests/test_auto_update_hardening.py
54
+ tests/test_autonomous_closegap_1.py
55
+ tests/test_autonomous_closegap_2.py
56
+ tests/test_autonomous_closegap_3.py
57
+ tests/test_autonomous_prompt_inject.py
58
+ tests/test_boot_bug_regression.py
59
+ tests/test_color_truecolor.py
60
+ tests/test_core.py
61
+ tests/test_cross_agent_messaging.py
62
+ tests/test_date_parse.py
63
+ tests/test_doctor.py
64
+ tests/test_epistemic_v1_python_sdk.py
65
+ tests/test_epistemic_v1_stop_conditions.py
66
+ tests/test_esc_deaf_state.py
67
+ tests/test_exceptions.py
68
+ tests/test_file_upload.py
69
+ tests/test_init_device_code.py
70
+ tests/test_install_guard.py
71
+ tests/test_lease_sigterm_release.py
72
+ tests/test_mark_read_batch.py
73
+ tests/test_marketplace_ratings.py
74
+ tests/test_migration_integrity.py
75
+ tests/test_realtime_event_freshness.py
76
+ tests/test_rls_cross_tenant.py
77
+ tests/test_rpc_grants.py
78
+ tests/test_rpc_migrations.py
79
+ tests/test_run_agent_dry_run.py
80
+ tests/test_run_agent_no_server_import.py
81
+ tests/test_security_regressions.py
82
+ tests/test_self_update_user_site.py
83
+ tests/test_sentinel.py
84
+ tests/test_setup_path.py
85
+ tests/test_sleep_signals.py
86
+ tests/test_status_enum_coverage.py
87
+ tests/test_stay_on_loop_hook.py
88
+ tests/test_wait_open_tasks_contradiction.py
@@ -0,0 +1 @@
1
+ meshcode
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "meshcode"
7
- version = "2.11.64"
7
+ version = "2.11.66"
8
8
  description = "Real-time communication between AI agents — Supabase-backed CLI"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}