meshcode 2.11.42__tar.gz → 2.11.44__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 (237) hide show
  1. {meshcode-2.11.42 → meshcode-2.11.44}/PKG-INFO +1 -1
  2. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/__init__.py +1 -1
  3. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/comms_v4.py +60 -4
  4. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/meshcode_mcp/backend.py +19 -1
  5. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/meshcode_mcp/server.py +40 -5
  6. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/run_agent.py +9 -1
  7. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/setup_clients.py +37 -0
  8. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode.egg-info/PKG-INFO +1 -1
  9. meshcode-2.11.44/meshcode.egg-info/PKG-INFO 2 +452 -0
  10. meshcode-2.11.44/meshcode.egg-info/SOURCES.txt +235 -0
  11. meshcode-2.11.44/meshcode.egg-info/dependency_links.txt +1 -0
  12. meshcode-2.11.44/meshcode.egg-info/entry_points.txt +3 -0
  13. meshcode-2.11.44/meshcode.egg-info/requires.txt +13 -0
  14. meshcode-2.11.44/meshcode.egg-info/top_level.txt +4 -0
  15. {meshcode-2.11.42 → meshcode-2.11.44}/pyproject.toml +1 -1
  16. {meshcode-2.11.42 → meshcode-2.11.44}/README.md +0 -0
  17. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/__main__.py +0 -0
  18. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/_stop_hook_template.py +0 -0
  19. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/ascii_art.py +0 -0
  20. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/atomic_push.py +0 -0
  21. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/cli.py +0 -0
  22. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/compat.py +0 -0
  23. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/daemon.py +0 -0
  24. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/date_parse.py +0 -0
  25. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/doctor.py +0 -0
  26. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/error_hints.py +0 -0
  27. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/exceptions.py +0 -0
  28. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/invites.py +0 -0
  29. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/launcher.py +0 -0
  30. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/launcher_install.py +0 -0
  31. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/meshcode_mcp/__init__.py +0 -0
  32. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/meshcode_mcp/__main__.py +0 -0
  33. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/meshcode_mcp/realtime.py +0 -0
  34. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
  35. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/meshcode_mcp/test_backend.py +0 -0
  36. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
  37. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
  38. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
  39. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/meshcode_mcp/test_realtime.py +0 -0
  40. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  41. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/preferences.py +0 -0
  42. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/protocol_handler.py +0 -0
  43. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/protocol_v2.py +0 -0
  44. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/quickstart.py +0 -0
  45. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/rpc_allowlist.py +0 -0
  46. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/scripts/check_secrets.py +0 -0
  47. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/scripts/race_rate_harness.py +0 -0
  48. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/secrets.py +0 -0
  49. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/self_update.py +0 -0
  50. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/supervisor.py +0 -0
  51. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode/upload.py +0 -0
  52. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/comms_v4.py +0 -0
  53. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/__init__.py +0 -0
  54. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
  55. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/cli.py +0 -0
  56. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
  57. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/compat.py +0 -0
  58. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
  59. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
  60. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/invites.py +0 -0
  61. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/launcher.py +0 -0
  62. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
  63. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  64. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  65. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
  66. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  67. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
  68. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  69. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  70. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  71. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/preferences.py +0 -0
  72. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
  73. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
  74. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
  75. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/secrets.py +0 -0
  76. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/self_update.py +0 -0
  77. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
  78. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
  79. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/meshcode/upload.py +0 -0
  80. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/scripts/sentinel.py +0 -0
  81. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/tests/test_core.py +0 -0
  82. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
  83. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
  84. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
  85. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
  86. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
  87. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
  88. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
  89. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
  90. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
  91. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
  92. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
  93. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
  94. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
  95. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
  96. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
  97. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
  98. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
  99. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
  100. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
  101. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
  102. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
  103. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
  104. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
  105. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
  106. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
  107. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
  108. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
  109. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
  110. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  111. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
  112. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
  113. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
  114. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
  115. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
  116. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
  117. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
  118. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
  119. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
  120. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/comms_v4.py +0 -0
  121. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/__init__.py +0 -0
  122. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
  123. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/cli.py +0 -0
  124. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
  125. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/compat.py +0 -0
  126. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
  127. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
  128. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/invites.py +0 -0
  129. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/launcher.py +0 -0
  130. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
  131. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  132. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  133. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
  134. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  135. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
  136. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  137. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  138. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  139. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/preferences.py +0 -0
  140. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
  141. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
  142. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
  143. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/secrets.py +0 -0
  144. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/self_update.py +0 -0
  145. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
  146. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
  147. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/meshcode/upload.py +0 -0
  148. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/scripts/sentinel.py +0 -0
  149. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/tests/test_core.py +0 -0
  150. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
  151. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
  152. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
  153. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
  154. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
  155. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
  156. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
  157. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
  158. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
  159. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
  160. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
  161. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/comms_v4.py +0 -0
  162. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
  163. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
  164. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/cli.py +0 -0
  165. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
  166. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/compat.py +0 -0
  167. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
  168. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
  169. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/invites.py +0 -0
  170. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
  171. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
  172. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  173. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  174. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
  175. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  176. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
  177. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  178. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  179. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  180. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
  181. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
  182. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
  183. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
  184. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
  185. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
  186. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
  187. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
  188. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/meshcode/upload.py +0 -0
  189. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
  190. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/tests/test_core.py +0 -0
  191. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
  192. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
  193. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
  194. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
  195. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
  196. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
  197. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
  198. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
  199. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
  200. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
  201. {meshcode-2.11.42 → meshcode-2.11.44}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
  202. /meshcode-2.11.42/meshcode.egg-info/SOURCES.txt → /meshcode-2.11.44/meshcode.egg-info/SOURCES 2.txt +0 -0
  203. /meshcode-2.11.42/meshcode.egg-info/dependency_links.txt → /meshcode-2.11.44/meshcode.egg-info/dependency_links 2.txt +0 -0
  204. /meshcode-2.11.42/meshcode.egg-info/entry_points.txt → /meshcode-2.11.44/meshcode.egg-info/entry_points 2.txt +0 -0
  205. /meshcode-2.11.42/meshcode.egg-info/requires.txt → /meshcode-2.11.44/meshcode.egg-info/requires 2.txt +0 -0
  206. /meshcode-2.11.42/meshcode.egg-info/top_level.txt → /meshcode-2.11.44/meshcode.egg-info/top_level 2.txt +0 -0
  207. {meshcode-2.11.42 → meshcode-2.11.44}/setup.cfg +0 -0
  208. {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_auto_update_hardening.py +0 -0
  209. {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_boot_bug_regression.py +0 -0
  210. {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_color_truecolor.py +0 -0
  211. {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_core.py +0 -0
  212. {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_cross_agent_messaging.py +0 -0
  213. {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_date_parse.py +0 -0
  214. {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_doctor.py +0 -0
  215. {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_epistemic_v1_python_sdk.py +0 -0
  216. {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_epistemic_v1_stop_conditions.py +0 -0
  217. {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_esc_deaf_state.py +0 -0
  218. {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_exceptions.py +0 -0
  219. {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_init_device_code.py +0 -0
  220. {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_install_guard.py +0 -0
  221. {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_lease_sigterm_release.py +0 -0
  222. {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_mark_read_batch.py +0 -0
  223. {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_migration_integrity.py +0 -0
  224. {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_realtime_event_freshness.py +0 -0
  225. {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_rls_cross_tenant.py +0 -0
  226. {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_rpc_grants.py +0 -0
  227. {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_rpc_migrations.py +0 -0
  228. {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_run_agent_dry_run.py +0 -0
  229. {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_run_agent_no_server_import.py +0 -0
  230. {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_security_regressions.py +0 -0
  231. {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_self_update_user_site.py +0 -0
  232. {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_sentinel.py +0 -0
  233. {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_setup_path.py +0 -0
  234. {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_sleep_signals.py +0 -0
  235. {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_status_enum_coverage.py +0 -0
  236. {meshcode-2.11.42 → meshcode-2.11.44}/tests/test_stay_on_loop_hook.py +0 -0
  237. {meshcode-2.11.42 → meshcode-2.11.44}/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.42
3
+ Version: 2.11.44
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.42"
2
+ __version__ = "2.11.44"
3
3
 
4
4
  # Exception hierarchy — eagerly imported (lightweight, no deps)
5
5
  from meshcode.exceptions import ( # noqa: F401
@@ -1602,13 +1602,23 @@ def show_status(project=None):
1602
1602
  continue
1603
1603
 
1604
1604
  print(f"\n [{proj['name']}]")
1605
+ _autonomous_count = 0
1605
1606
  for a in agents:
1606
1607
  # Count pending
1607
1608
  pending = sb_select("mc_messages",
1608
1609
  f"project_id=eq.{proj['id']}&to_agent=eq.{quote(a['name'])}&read=eq.false&type=neq.ack")
1609
1610
  pcount = len(pending)
1610
1611
  icon = "●" if pcount > 0 else "○"
1611
- print(f" {icon} {a['name']:<14} {a.get('role',''):<25} pending: {pcount}")
1612
+ _auto_marker = " 🔆" if a.get("autonomous_mode") else ""
1613
+ if a.get("autonomous_mode"):
1614
+ _autonomous_count += 1
1615
+ print(f" {icon} {a['name']:<14} {a.get('role',''):<25} pending: {pcount}{_auto_marker}")
1616
+ # AUTONOMOUS-MODE-UNIVERSAL P8 (task f57aa2d2): if multi-agent mesh
1617
+ # has 0% autonomous adoption, surface a 1-line hint so users see the
1618
+ # bottleneck without reading a memo. Hint hidden when single-agent
1619
+ # mesh or any agent is already autonomous (signal-only, no noise).
1620
+ if len(agents) >= 2 and _autonomous_count == 0:
1621
+ print(f" 💡 0/{len(agents)} agents autonomous. Re-run each with `--autonomous` (or `export MESHCODE_AUTONOMOUS=1`) to enable parallel self-driven work.")
1612
1622
  print()
1613
1623
 
1614
1624
 
@@ -2734,7 +2744,7 @@ if __name__ == "__main__":
2734
2744
 
2735
2745
  # Strip bare boolean flags from argv before parsing so they don't end
2736
2746
  # up as positional args (e.g. --compact is a bare flag, not key=value).
2737
- BARE_FLAGS = {"--compact", "--legacy", "--no-hook", "--mcp-only"}
2747
+ BARE_FLAGS = {"--compact", "--legacy", "--no-hook", "--mcp-only", "--autonomous"}
2738
2748
  _bare_present = {a.lstrip("-") for a in sys.argv[2:] if a in BARE_FLAGS}
2739
2749
  _argv_for_parse = [a for a in sys.argv[2:] if a not in BARE_FLAGS]
2740
2750
 
@@ -3038,6 +3048,45 @@ if __name__ == "__main__":
3038
3048
  proj = sys.argv[2] if len(sys.argv) > 2 else None
3039
3049
  show_status(proj)
3040
3050
 
3051
+ elif cmd in ("wake-all", "wakeall"):
3052
+ # AUTONOMOUS-MODE-UNIVERSAL P9 (task f57aa2d2): print copy-paste
3053
+ # launch commands for every offline agent in a meshwork. No process
3054
+ # control (those terminals are gone); just frictionless bootstrap.
3055
+ proj = sys.argv[2] if len(sys.argv) > 2 else None
3056
+ if not proj:
3057
+ print("Usage: meshcode wake-all <project>")
3058
+ sys.exit(1)
3059
+ api_key = _load_api_key_for_cli()
3060
+ if not api_key:
3061
+ print("[meshcode] Not logged in. Run: meshcode login <api_key>")
3062
+ sys.exit(1)
3063
+ _projs = sb_rpc("mc_list_user_projects", {"p_api_key": api_key})
3064
+ _agents = []
3065
+ if isinstance(_projs, dict) and _projs.get("projects"):
3066
+ for _p in _projs["projects"]:
3067
+ if _p.get("name") == proj:
3068
+ _agents = _p.get("agents") or []
3069
+ break
3070
+ if not _agents:
3071
+ print(f"[meshcode] No agents found in meshwork '{proj}'. Check the name with `meshcode projects`.")
3072
+ sys.exit(1)
3073
+ _offline = [a for a in _agents if a.get("status") in ("offline", "sleeping", None)]
3074
+ _online = [a for a in _agents if a not in _offline]
3075
+ print(f"[meshcode] meshwork '{proj}': {len(_online)} online, {len(_offline)} offline.")
3076
+ if not _offline:
3077
+ print(f"[meshcode] ✓ All agents already online. Nothing to wake.")
3078
+ sys.exit(0)
3079
+ print(f"[meshcode]")
3080
+ print(f"[meshcode] Copy-paste these into separate terminal panes to wake the offline agents")
3081
+ print(f"[meshcode] in autonomous mode (so they self-progress without per-step prompting):")
3082
+ print(f"[meshcode]")
3083
+ for a in _offline:
3084
+ print(f" meshcode run {proj}/{a.get('name', '?')} --autonomous")
3085
+ print(f"[meshcode]")
3086
+ print(f"[meshcode] Tip: `export MESHCODE_AUTONOMOUS=1` once in your shell rc, then you")
3087
+ print(f"[meshcode] can drop the `--autonomous` flag for the rest of the session.")
3088
+ sys.exit(0)
3089
+
3041
3090
  elif cmd in ("projects", "list", "ls"):
3042
3091
  list_projects()
3043
3092
 
@@ -3259,9 +3308,16 @@ if __name__ == "__main__":
3259
3308
  else:
3260
3309
  print("[meshcode] Login required. Run: meshcode login <api_key>")
3261
3310
  sys.exit(1)
3311
+ # AUTONOMOUS-MODE-UNIVERSAL (task f248d98e): --autonomous flag OR
3312
+ # MESHCODE_AUTONOMOUS=1 env var → register-time autonomous=true.
3313
+ # Memo decision Q3: scope is `meshcode run` + add-agent. Env var
3314
+ # acts as shell-session default; explicit flag wins per-launch.
3315
+ autonomous_env = (os.environ.get("MESHCODE_AUTONOMOUS", "").strip().lower()
3316
+ in ("1", "true", "yes", "on"))
3317
+ autonomous = bool(flags.get("autonomous")) or autonomous_env
3262
3318
  import importlib
3263
3319
  _run = importlib.import_module("meshcode.run_agent").run
3264
- sys.exit(_run(agent, project=proj_override, editor_override=editor_override, permission_override=perm_override, dry_run=dry_run))
3320
+ sys.exit(_run(agent, project=proj_override, editor_override=editor_override, permission_override=perm_override, dry_run=dry_run, autonomous=autonomous))
3265
3321
 
3266
3322
  elif cmd == "scan":
3267
3323
  # meshcode scan — detect identicon from stdin/clipboard and launch agent
@@ -3736,7 +3792,7 @@ if __name__ == "__main__":
3736
3792
  "setup", "run", "go", "invite", "join", "invites", "members",
3737
3793
  "revoke-invite", "revoke-member", "login", "prefs", "launcher",
3738
3794
  "help", "init", "doctor", "compat", "upgrade", "profile", "validate-sessions", "wake-headless",
3739
- "supervisor", "upload", "quickstart", "patch-hooks",
3795
+ "supervisor", "upload", "quickstart", "patch-hooks", "wake-all",
3740
3796
  ]
3741
3797
  # Simple fuzzy: prefix match + Levenshtein-like best match
3742
3798
  suggestions = [c for c in known_cmds if c.startswith(cmd)]
@@ -615,12 +615,30 @@ def register_agent(project: str, name: str, role: str = "", api_key: Optional[st
615
615
  f"project_id=eq.{project_id}&name=eq.{quote(name)}",
616
616
  {"task": role})
617
617
 
618
- return {
618
+ # AUTONOMOUS-MODE-UNIVERSAL (task f248d98e Phase 1): if launched with
619
+ # `meshcode run --autonomous` or MESHCODE_AUTONOMOUS=1, flip autonomous
620
+ # mode at register-time. RPC mc_agent_set_autonomous exists per mig 354.
621
+ # Best-effort: register success is reported even if autonomous flip fails.
622
+ _autonomous_out: Optional[bool] = None
623
+ if os.environ.get("MESHCODE_AUTONOMOUS", "").strip().lower() in ("1", "true", "yes", "on"):
624
+ _set_resp = sb_rpc("mc_agent_set_autonomous", {
625
+ "p_api_key": _ak or "",
626
+ "p_project_id": project_id,
627
+ "p_agent_name": name,
628
+ "p_enabled": True,
629
+ })
630
+ if isinstance(_set_resp, dict) and _set_resp.get("ok"):
631
+ _autonomous_out = True
632
+
633
+ out = {
619
634
  "registered": True,
620
635
  "project_id": project_id,
621
636
  "agent_name": name,
622
637
  "agent_id": result.get("agent_id") if isinstance(result, dict) else None,
623
638
  }
639
+ if _autonomous_out is not None:
640
+ out["autonomous_mode"] = _autonomous_out
641
+ return out
624
642
 
625
643
 
626
644
  # TTL cache for resolve_agent_name — avoids N+1 queries on every send().
@@ -3541,6 +3541,10 @@ async def meshcode_wait(timeout_seconds: int = 20, include_acks: bool = False) -
3541
3541
  _snap = _get_mesh_online_snapshot()
3542
3542
  if _snap is not None:
3543
3543
  resp["mesh_online_snapshot"] = _snap
3544
+ # AUTONOMOUS-MODE-UNIVERSAL (task f248d98e Phase 1):
3545
+ # surface autonomy on the refused-path too so check
3546
+ # parity holds when wait short-circuits on unread msgs.
3547
+ resp["you_are_autonomous"] = _get_autonomous_mode()
3544
3548
  return resp
3545
3549
  # Ack-only batch — fall through to wait loop
3546
3550
  except Exception:
@@ -3667,10 +3671,13 @@ async def meshcode_wait(timeout_seconds: int = 20, include_acks: bool = False) -
3667
3671
  _snapshot = _get_mesh_online_snapshot()
3668
3672
  if _snapshot is not None:
3669
3673
  result["mesh_online_snapshot"] = _snapshot
3670
- # AUTONOMOUS-MODE-1-RUNTIME: surface the flag so the LLM knows
3671
- # whether to operate proactively.
3674
+ # AUTONOMOUS-MODE-1-RUNTIME + UNIVERSAL (task f248d98e Phase 1):
3675
+ # surface the flag so the LLM knows whether to operate proactively.
3676
+ # `you_are_autonomous` is the canonical field per commander memo
3677
+ # decisions msg 29cae7f9; `autonomous_mode` retained for back-compat.
3672
3678
  if isinstance(result, dict):
3673
3679
  result["autonomous_mode"] = _autonomous
3680
+ result["you_are_autonomous"] = _autonomous
3674
3681
  return result
3675
3682
  finally:
3676
3683
  _IN_WAIT = False
@@ -4019,6 +4026,11 @@ def meshcode_check(include_acks: bool = False, since: Optional[str] = None, mark
4019
4026
  _ctx = _calendar_context_for_self()
4020
4027
  if _ctx is not None:
4021
4028
  result["calendar_context"] = _ctx
4029
+ # AUTONOMOUS-MODE-UNIVERSAL (task f248d98e Phase 1): surface autonomous
4030
+ # state on every check so agents have constant awareness without extra
4031
+ # tool calls. Uses 15s-TTL cache (_get_autonomous_mode), one RPC per cache
4032
+ # window — negligible cost on the inbox poll path.
4033
+ result["you_are_autonomous"] = _get_autonomous_mode()
4022
4034
  return result
4023
4035
 
4024
4036
 
@@ -4087,9 +4099,13 @@ def meshcode_status() -> Dict[str, Any]:
4087
4099
  "task": a.get("task", ""),
4088
4100
  "last_heartbeat": a.get("last_heartbeat"),
4089
4101
  "idle_seconds": _idle_seconds(a.get("last_response_at")),
4102
+ "autonomous_mode": bool(a.get("autonomous_mode")),
4090
4103
  }
4091
4104
  for a in agents
4092
4105
  ],
4106
+ # AUTONOMOUS-MODE-UNIVERSAL (task f248d98e Phase 1): constant
4107
+ # awareness of self autonomy on the status path too.
4108
+ "you_are_autonomous": _get_autonomous_mode(),
4093
4109
  }
4094
4110
 
4095
4111
 
@@ -5350,20 +5366,39 @@ def meshcode_create_meshwork(name: str) -> Dict[str, Any]:
5350
5366
 
5351
5367
  @mcp.tool()
5352
5368
  @with_working_status
5353
- def meshcode_add_agent(name: str, role: str = "") -> Dict[str, Any]:
5369
+ def meshcode_add_agent(name: str, role: str = "", autonomous: bool = False) -> Dict[str, Any]:
5354
5370
  """Add an agent to the current meshwork. Tell user to run 'meshcode setup <project> <name>' then 'meshcode run <name>'.
5355
5371
 
5356
5372
  Args:
5357
5373
  name: Agent name.
5358
5374
  role: Agent role description.
5375
+ autonomous: If True, immediately flip the new agent into autonomous
5376
+ mode (decide+execute+report cadence; escalate only for risky/
5377
+ destructive ops). Task f248d98e Phase 1.
5359
5378
  """
5360
5379
  effective_role = role or "MCP-connected agent"
5361
- result = be.register_agent(PROJECT_NAME, name, effective_role, api_key=_get_api_key())
5380
+ # AUTONOMOUS-MODE-UNIVERSAL: thread the autonomous param via env so
5381
+ # register_agent picks it up at flip-time. Saved + restored to avoid
5382
+ # contaminating the parent process state.
5383
+ _prev_auto = os.environ.get("MESHCODE_AUTONOMOUS")
5384
+ if autonomous:
5385
+ os.environ["MESHCODE_AUTONOMOUS"] = "1"
5386
+ try:
5387
+ result = be.register_agent(PROJECT_NAME, name, effective_role, api_key=_get_api_key())
5388
+ finally:
5389
+ if autonomous:
5390
+ if _prev_auto is None:
5391
+ os.environ.pop("MESHCODE_AUTONOMOUS", None)
5392
+ else:
5393
+ os.environ["MESHCODE_AUTONOMOUS"] = _prev_auto
5362
5394
  warn = _role_warning(name, effective_role)
5363
5395
  if isinstance(result, dict) and not result.get("error"):
5364
- out: Dict[str, Any] = {"ok": True, "agent": name, "next_step": f"Run: meshcode setup {PROJECT_NAME} {name} && meshcode run {name}"}
5396
+ run_hint = f"meshcode run {name}" + (" --autonomous" if autonomous else "")
5397
+ out: Dict[str, Any] = {"ok": True, "agent": name, "next_step": f"Run: meshcode setup {PROJECT_NAME} {name} && {run_hint}"}
5365
5398
  if warn:
5366
5399
  out["warning"] = warn
5400
+ if autonomous and result.get("autonomous_mode"):
5401
+ out["autonomous_mode"] = True
5367
5402
  return out
5368
5403
  return result or {"error": "failed to add agent"}
5369
5404
 
@@ -678,7 +678,7 @@ def _preflight_heartbeat(agent: str, project: str) -> None:
678
678
  print(f"[meshcode] Pre-flight heartbeat skipped: {e}", file=sys.stderr)
679
679
 
680
680
 
681
- def run(agent: str, project: Optional[str] = None, editor_override: Optional[str] = None, permission_override: Optional[str] = None, dry_run: bool = False) -> int:
681
+ def run(agent: str, project: Optional[str] = None, editor_override: Optional[str] = None, permission_override: Optional[str] = None, dry_run: bool = False, autonomous: bool = False) -> int:
682
682
  """Launch the user's editor with ONLY the named agent's MCP server loaded.
683
683
 
684
684
  dry_run: when True, exercise the full bootstrap codepath (auth check,
@@ -688,7 +688,15 @@ def run(agent: str, project: Optional[str] = None, editor_override: Optional[str
688
688
  "[meshcode] DRY-RUN OK: ..." and return 0. Designed to catch bootstrap-
689
689
  class bugs (import-time sys.exit, missing env-var guards, broken cross-
690
690
  process imports — cf. BUG-COMMANDER-MCP-BOOT 2026-05-20) before publish.
691
+
692
+ autonomous: when True (via `--autonomous` flag or MESHCODE_AUTONOMOUS=1),
693
+ propagate MESHCODE_AUTONOMOUS=1 into the child env so the MCP server
694
+ boot path flips mc_agents.autonomous_mode=true at register time.
695
+ Task f248d98e Phase 1 (no-DDL subset).
691
696
  """
697
+ # Propagate autonomous flag to the editor + MCP child via env var.
698
+ if autonomous:
699
+ os.environ["MESHCODE_AUTONOMOUS"] = "1"
692
700
  # Non-blocking self-update check (consumes prior result, may spawn bg pip).
693
701
  # Skip in dry-run — we don't want CI / pre-publish smokes to fork a pip.
694
702
  if not dry_run:
@@ -1372,6 +1372,43 @@ Call `meshcode_wait` now.
1372
1372
  print(f"[meshcode]")
1373
1373
  print(f"[meshcode] Closing the editor window flips this agent offline.")
1374
1374
  print(f"[meshcode] Other agents stay independent — no cross-window pollution.")
1375
+
1376
+ # AUTONOMOUS-MODE-UNIVERSAL P6 (task f57aa2d2): if this agent makes the
1377
+ # 2nd+ in the meshwork AND no agent has autonomous_mode=true AND the
1378
+ # user didn't already opt in via env var, surface a one-line nudge.
1379
+ # Best-effort — never block setup on telemetry failure.
1380
+ if os.environ.get("MESHCODE_AUTONOMOUS", "").strip().lower() not in ("1", "true", "yes", "on"):
1381
+ try:
1382
+ from urllib.request import Request as _Req, urlopen as _urlopen
1383
+ _body = json.dumps({
1384
+ "p_api_key": api_key,
1385
+ "p_project_id": project_id,
1386
+ "p_agent_name": None,
1387
+ "p_select": "name,autonomous_mode",
1388
+ "p_limit": 50,
1389
+ }).encode()
1390
+ _req = _Req(
1391
+ f"{sb['SUPABASE_URL']}/rest/v1/rpc/mc_get_agents",
1392
+ data=_body, method="POST",
1393
+ headers={
1394
+ "apikey": sb["SUPABASE_KEY"],
1395
+ "Authorization": f"Bearer {sb['SUPABASE_KEY']}",
1396
+ "Content-Type": "application/json",
1397
+ },
1398
+ )
1399
+ with _urlopen(_req, timeout=5) as _resp:
1400
+ _data = json.loads(_resp.read().decode())
1401
+ _all = (_data or {}).get("agents") or []
1402
+ _n = len(_all)
1403
+ _auto = sum(1 for a in _all if a.get("autonomous_mode"))
1404
+ if _n >= 2 and _auto == 0:
1405
+ print(f"[meshcode]")
1406
+ print(f"[meshcode] 💡 Tip: this meshwork now has {_n} agents. Consider autonomous mode:")
1407
+ print(f"[meshcode] meshcode run {agent} --autonomous")
1408
+ print(f"[meshcode] or set once for your shell: export MESHCODE_AUTONOMOUS=1")
1409
+ print(f"[meshcode] Autonomous agents self-progress without per-step prompting.")
1410
+ except Exception:
1411
+ pass # best-effort hint; never fail setup on this
1375
1412
  return 0
1376
1413
 
1377
1414
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meshcode
3
- Version: 2.11.42
3
+ Version: 2.11.44
4
4
  Summary: Real-time communication between AI agents — Supabase-backed CLI
5
5
  Author-email: MeshCode <hello@meshcode.io>
6
6
  License: MIT