meshcode 2.11.78__tar.gz → 2.11.79__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 (240) hide show
  1. {meshcode-2.11.78 → meshcode-2.11.79}/PKG-INFO +1 -1
  2. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/__init__.py +1 -1
  3. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/hostd.py +72 -16
  4. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode.egg-info/PKG-INFO +1 -1
  5. {meshcode-2.11.78 → meshcode-2.11.79}/pyproject.toml +1 -1
  6. {meshcode-2.11.78 → meshcode-2.11.79}/README.md +0 -0
  7. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/__main__.py +0 -0
  8. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/_stop_hook_template.py +0 -0
  9. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/ascii_art.py +0 -0
  10. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/atomic_push.py +0 -0
  11. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/claude_update.py +0 -0
  12. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/cli.py +0 -0
  13. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/comms_v4.py +0 -0
  14. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/compat.py +0 -0
  15. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/daemon.py +0 -0
  16. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/date_parse.py +0 -0
  17. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/doctor.py +0 -0
  18. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/error_hints.py +0 -0
  19. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/exceptions.py +0 -0
  20. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/invites.py +0 -0
  21. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/launcher.py +0 -0
  22. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/launcher_install.py +0 -0
  23. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/meshcode_mcp/__init__.py +0 -0
  24. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/meshcode_mcp/__main__.py +0 -0
  25. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/meshcode_mcp/backend.py +0 -0
  26. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/meshcode_mcp/realtime.py +0 -0
  27. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/meshcode_mcp/server.py +0 -0
  28. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
  29. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/meshcode_mcp/test_backend.py +0 -0
  30. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/meshcode_mcp/test_boot_timing.py +0 -0
  31. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/meshcode_mcp/test_install_guard.py +0 -0
  32. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/meshcode_mcp/test_prefs_claude_version.py +0 -0
  33. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/meshcode_mcp/test_realtime.py +0 -0
  34. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  35. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/preferences.py +0 -0
  36. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/protocol_handler.py +0 -0
  37. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/protocol_v2.py +0 -0
  38. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/quickstart.py +0 -0
  39. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/rpc_allowlist.py +0 -0
  40. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/run_agent.py +0 -0
  41. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/scripts/check_secrets.py +0 -0
  42. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/scripts/race_rate_harness.py +0 -0
  43. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/secrets.py +0 -0
  44. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/self_update.py +0 -0
  45. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/setup_clients.py +0 -0
  46. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/supervisor.py +0 -0
  47. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/up.py +0 -0
  48. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode/upload.py +0 -0
  49. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/comms_v4.py +0 -0
  50. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/__init__.py +0 -0
  51. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
  52. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/cli.py +0 -0
  53. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
  54. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/compat.py +0 -0
  55. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
  56. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
  57. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/invites.py +0 -0
  58. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/launcher.py +0 -0
  59. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
  60. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  61. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  62. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
  63. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  64. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
  65. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  66. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  67. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  68. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/preferences.py +0 -0
  69. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
  70. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
  71. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
  72. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/secrets.py +0 -0
  73. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/self_update.py +0 -0
  74. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
  75. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
  76. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/meshcode/upload.py +0 -0
  77. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/scripts/sentinel.py +0 -0
  78. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/tests/test_core.py +0 -0
  79. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
  80. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
  81. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
  82. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
  83. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
  84. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
  85. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
  86. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
  87. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
  88. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
  89. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
  90. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
  91. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
  92. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
  93. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
  94. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
  95. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
  96. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
  97. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
  98. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
  99. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
  100. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
  101. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
  102. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
  103. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
  104. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
  105. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
  106. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
  107. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  108. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
  109. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
  110. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
  111. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
  112. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
  113. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
  114. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
  115. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
  116. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
  117. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/comms_v4.py +0 -0
  118. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/__init__.py +0 -0
  119. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
  120. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/cli.py +0 -0
  121. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
  122. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/compat.py +0 -0
  123. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
  124. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
  125. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/invites.py +0 -0
  126. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/launcher.py +0 -0
  127. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
  128. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  129. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  130. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
  131. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  132. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
  133. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  134. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  135. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  136. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/preferences.py +0 -0
  137. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
  138. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
  139. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
  140. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/secrets.py +0 -0
  141. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/self_update.py +0 -0
  142. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
  143. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
  144. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/meshcode/upload.py +0 -0
  145. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/scripts/sentinel.py +0 -0
  146. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/tests/test_core.py +0 -0
  147. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
  148. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
  149. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
  150. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
  151. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
  152. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
  153. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
  154. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
  155. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
  156. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
  157. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
  158. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/comms_v4.py +0 -0
  159. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
  160. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
  161. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/cli.py +0 -0
  162. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
  163. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/compat.py +0 -0
  164. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
  165. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
  166. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/invites.py +0 -0
  167. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
  168. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
  169. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  170. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  171. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
  172. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  173. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
  174. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  175. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  176. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  177. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
  178. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
  179. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
  180. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
  181. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
  182. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
  183. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
  184. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
  185. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/meshcode/upload.py +0 -0
  186. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
  187. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/tests/test_core.py +0 -0
  188. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
  189. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
  190. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
  191. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
  192. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
  193. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
  194. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
  195. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
  196. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
  197. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
  198. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
  199. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode.egg-info/SOURCES.txt +0 -0
  200. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode.egg-info/dependency_links.txt +0 -0
  201. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode.egg-info/entry_points.txt +0 -0
  202. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode.egg-info/requires.txt +0 -0
  203. {meshcode-2.11.78 → meshcode-2.11.79}/meshcode.egg-info/top_level.txt +0 -0
  204. {meshcode-2.11.78 → meshcode-2.11.79}/setup.cfg +0 -0
  205. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_auto_update_hardening.py +0 -0
  206. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_autonomous_closegap_1.py +0 -0
  207. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_autonomous_closegap_2.py +0 -0
  208. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_autonomous_closegap_3.py +0 -0
  209. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_autonomous_prompt_inject.py +0 -0
  210. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_boot_bug_regression.py +0 -0
  211. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_color_truecolor.py +0 -0
  212. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_core.py +0 -0
  213. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_cross_agent_messaging.py +0 -0
  214. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_date_parse.py +0 -0
  215. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_doctor.py +0 -0
  216. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_epistemic_v1_python_sdk.py +0 -0
  217. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_epistemic_v1_stop_conditions.py +0 -0
  218. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_esc_deaf_state.py +0 -0
  219. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_exceptions.py +0 -0
  220. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_file_upload.py +0 -0
  221. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_init_device_code.py +0 -0
  222. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_install_guard.py +0 -0
  223. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_lease_sigterm_release.py +0 -0
  224. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_mark_read_batch.py +0 -0
  225. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_marketplace_ratings.py +0 -0
  226. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_migration_integrity.py +0 -0
  227. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_realtime_event_freshness.py +0 -0
  228. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_rls_cross_tenant.py +0 -0
  229. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_rpc_grants.py +0 -0
  230. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_rpc_migrations.py +0 -0
  231. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_run_agent_dry_run.py +0 -0
  232. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_run_agent_no_server_import.py +0 -0
  233. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_security_regressions.py +0 -0
  234. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_self_update_user_site.py +0 -0
  235. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_sentinel.py +0 -0
  236. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_setup_path.py +0 -0
  237. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_sleep_signals.py +0 -0
  238. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_status_enum_coverage.py +0 -0
  239. {meshcode-2.11.78 → meshcode-2.11.79}/tests/test_stay_on_loop_hook.py +0 -0
  240. {meshcode-2.11.78 → meshcode-2.11.79}/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.78
3
+ Version: 2.11.79
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.78"
2
+ __version__ = "2.11.79"
3
3
 
4
4
  # Exception hierarchy — eagerly imported (lightweight, no deps)
5
5
  from meshcode.exceptions import ( # noqa: F401
@@ -457,10 +457,21 @@ def _hostd_plist_xml() -> str:
457
457
  _HOSTD_TASK_NAME = "MeshCode hostd"
458
458
 
459
459
 
460
+ def _hostd_start_now_windows(launch_cmd) -> None:
461
+ """Start hostd detached NOW (CREATE_NO_WINDOW | DETACHED_PROCESS) so the current session has a live
462
+ host immediately, independent of whichever persistence tier installed."""
463
+ try:
464
+ subprocess.Popen(["cmd.exe", "/c", str(launch_cmd)],
465
+ creationflags=0x08000000 | 0x00000008,
466
+ stdin=subprocess.DEVNULL, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
467
+ except Exception as e:
468
+ _log(f"hostd start-now (windows) failed: {e}")
469
+
470
+
460
471
  def _hostd_install_windows() -> int:
461
- """Windows Task Scheduler job (mesh-core ITEM2): at-logon, hidden, restart 3x/1min, no
462
- time-limit, runs `meshcode hostd run` with auto-update off. Proven model on Samuel's box
463
- (.meshcode/hostd-launch.cmd + scheduled task 'MeshCode hostd')."""
472
+ """Windows keep-alive NON-ADMIN safe (task 843f282c). Persistence is best-effort across 3 tiers
473
+ (Register-ScheduledTask w/ watchdog -> schtasks ONLOGON CLI -> HKCU\\Run registry); hostd is ALWAYS
474
+ started now so the session works even if all persistence tiers fail (non-admin)."""
464
475
  mc = shutil.which("meshcode") or "meshcode"
465
476
  STATE_DIR.mkdir(parents=True, exist_ok=True)
466
477
  (STATE_DIR / "logs").mkdir(parents=True, exist_ok=True)
@@ -473,23 +484,59 @@ def _hostd_install_windows() -> int:
473
484
  f'"{mc}" hostd run\r\n',
474
485
  encoding="utf-8",
475
486
  )
476
- # Register-ScheduledTask (PowerShell) for fidelity: hidden + restart + unlimited + at-logon.
487
+ # Register-ScheduledTask (PowerShell) ROBUST KEEP-ALIVE (task 843f282c CRITICAL: hostd died ~15:04
488
+ # and Task Scheduler did NOT revive it = silent dead daemon = stuck launches). Two triggers: at-logon
489
+ # AND a PERIODIC every-5min watchdog (re-starts if down; MultipleInstances=IgnoreNew so it never
490
+ # double-spawns a live one) + high RestartCount on crash + unlimited runtime + hidden.
477
491
  ps = (
478
492
  '$a = New-ScheduledTaskAction -Execute "cmd.exe" -Argument \'/c "' + str(launch_cmd) + '"\';'
479
- '$t = New-ScheduledTaskTrigger -AtLogOn;'
493
+ '$t1 = New-ScheduledTaskTrigger -AtLogOn;'
494
+ '$t2 = New-ScheduledTaskTrigger -Once -At (Get-Date) '
495
+ '-RepetitionInterval (New-TimeSpan -Minutes 5) -RepetitionDuration (New-TimeSpan -Days 3650);'
480
496
  '$s = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries'
481
- ' -ExecutionTimeLimit ([TimeSpan]::Zero) -RestartCount 3'
482
- ' -RestartInterval (New-TimeSpan -Minutes 1) -Hidden;'
497
+ ' -ExecutionTimeLimit ([TimeSpan]::Zero) -RestartCount 999'
498
+ ' -RestartInterval (New-TimeSpan -Minutes 1) -MultipleInstances IgnoreNew -Hidden;'
483
499
  '$p = New-ScheduledTaskPrincipal -UserId $env:USERNAME -LogonType Interactive -RunLevel Limited;'
484
- "Register-ScheduledTask -TaskName '" + _HOSTD_TASK_NAME + "' -Action $a -Trigger $t"
500
+ "Register-ScheduledTask -TaskName '" + _HOSTD_TASK_NAME + "' -Action $a -Trigger $t1,$t2"
485
501
  ' -Settings $s -Principal $p -Force | Out-Null'
486
502
  )
503
+ # NON-ADMIN tiered persistence (task 843f282c): 99% of users are NOT admin, and Register-ScheduledTask
504
+ # fails Access-Denied (0x80070005) for them. Fall back: schtasks CLI (user task) -> HKCU\Run registry.
505
+ # hostd is ALWAYS started now regardless, so the current session has a live host immediately.
506
+ method = None
507
+ task_made = False
487
508
  r = subprocess.run(["powershell", "-NoProfile", "-Command", ps], capture_output=True, text=True)
488
- if r.returncode != 0:
489
- print(f"[hostd] Register-ScheduledTask failed: {r.stderr.strip()}", file=sys.stderr)
490
- return 1
491
- print(f"[hostd] installed Windows Task Scheduler job '{_HOSTD_TASK_NAME}' (at-logon, hidden, restart). launcher: {launch_cmd}")
492
- print(f'[hostd] start now: schtasks /Run /TN "{_HOSTD_TASK_NAME}"')
509
+ if r.returncode == 0:
510
+ task_made = True
511
+ method = "Task Scheduler (at-logon + 5min watchdog + restart)"
512
+ else:
513
+ _log(f"Register-ScheduledTask failed ({(r.stderr or '').strip()[:120]}); trying non-admin fallbacks")
514
+ r2 = subprocess.run(["schtasks", "/Create", "/TN", _HOSTD_TASK_NAME,
515
+ "/TR", f'cmd /c "{launch_cmd}"', "/SC", "ONLOGON", "/F"],
516
+ capture_output=True, text=True)
517
+ if r2.returncode == 0:
518
+ task_made = True
519
+ method = "schtasks ONLOGON (CLI, non-admin; no watchdog)"
520
+ else:
521
+ _log(f"schtasks /Create failed ({((r2.stderr or '')+(r2.stdout or '')).strip()[:120]}); trying HKCU Run")
522
+ r3 = subprocess.run(["reg", "add",
523
+ r"HKCU\Software\Microsoft\Windows\CurrentVersion\Run",
524
+ "/v", "MeshCodeHostd", "/t", "REG_SZ", "/d", f'cmd /c "{launch_cmd}"', "/f"],
525
+ capture_output=True, text=True)
526
+ if r3.returncode == 0:
527
+ method = "HKCU\\Run registry (login autostart, no admin; no watchdog)"
528
+ # ensure hostd is RUNNING now (task tiers: start via the task w/ IgnoreNew; else detached Popen).
529
+ started = False
530
+ if task_made:
531
+ rr = subprocess.run(["schtasks", "/Run", "/TN", _HOSTD_TASK_NAME], capture_output=True, text=True)
532
+ started = (rr.returncode == 0)
533
+ if not started:
534
+ _hostd_start_now_windows(launch_cmd)
535
+ if method:
536
+ print(f"[hostd] keep-alive installed via {method}; hostd running now. launcher: {launch_cmd}")
537
+ return 0
538
+ print(f"[hostd] WARN: no persistence method available (non-admin) — hostd started for THIS session "
539
+ f"ONLY (re-run after reboot). launcher: {launch_cmd}", file=sys.stderr)
493
540
  return 0
494
541
 
495
542
 
@@ -604,10 +651,13 @@ def _hostd_bootstrap(verbose: bool = False) -> bool:
604
651
  elif sysname == "Windows":
605
652
  q = subprocess.run(["schtasks", "/Query", "/TN", _HOSTD_TASK_NAME],
606
653
  capture_output=True, text=True)
607
- if q.returncode != 0:
654
+ if q.returncode == 0:
655
+ # task exists -> just ensure running (IgnoreNew => harmless if already up; no double-spawn)
656
+ subprocess.run(["schtasks", "/Run", "/TN", _HOSTD_TASK_NAME],
657
+ capture_output=True, text=True)
658
+ else:
659
+ # no task (incl non-admin registry-only / first run) -> install best tier + start now
608
660
  _hostd_install_windows()
609
- subprocess.run(["schtasks", "/Run", "/TN", _HOSTD_TASK_NAME],
610
- capture_output=True, text=True) # harmless if already running
611
661
  else: # Linux + others
612
662
  if shutil.which("systemctl"):
613
663
  act = subprocess.run(["systemctl", "--user", "is-active", _HOSTD_SYSTEMD_UNIT],
@@ -717,6 +767,12 @@ def cmd_hostd(args: list) -> int:
717
767
  _log(f"hostd starting — host_id={host_id} interval={POLL_INTERVAL_SEC}s stale={STALE_SECONDS}s")
718
768
  while True:
719
769
  try:
770
+ # task 843f282c: heartbeat so the cloud knows this daemon is ALIVE — launch-request
771
+ # detects host_offline (dead hostd) and toasts instead of spinning forever (Ian's bug).
772
+ try:
773
+ _rpc("mc_host_heartbeat", {"p_api_key": api_key, "p_host_id": host_id})
774
+ except Exception:
775
+ pass
720
776
  relaunched = _do_respawns(api_key, host_id)
721
777
  recycled = _do_recycles(api_key, host_id)
722
778
  ver_recycled = _do_version_recycles(api_key, host_id)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meshcode
3
- Version: 2.11.78
3
+ Version: 2.11.79
4
4
  Summary: Real-time communication between AI agents — Supabase-backed CLI
5
5
  Author-email: MeshCode <hello@meshcode.io>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "meshcode"
7
- version = "2.11.78"
7
+ version = "2.11.79"
8
8
  description = "Real-time communication between AI agents — Supabase-backed CLI"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
File without changes
File without changes
File without changes
File without changes