meshcode 2.11.7__tar.gz → 2.11.8__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 (217) hide show
  1. {meshcode-2.11.7 → meshcode-2.11.8}/PKG-INFO +1 -1
  2. meshcode-2.11.8/meshcode/__init__.py +90 -0
  3. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode/meshcode_mcp/backend.py +111 -2
  4. meshcode-2.11.8/meshcode/meshcode_mcp/realtime.py +465 -0
  5. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode/meshcode_mcp/server.py +245 -87
  6. meshcode-2.11.8/meshcode/meshcode_mcp/test_boot_timing.py +110 -0
  7. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode.egg-info/PKG-INFO +1 -1
  8. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode.egg-info/SOURCES.txt +2 -0
  9. {meshcode-2.11.7 → meshcode-2.11.8}/pyproject.toml +1 -1
  10. {meshcode-2.11.7 → meshcode-2.11.8}/tests/test_boot_bug_regression.py +1 -1
  11. meshcode-2.11.8/tests/test_epistemic_v1_python_sdk.py +177 -0
  12. meshcode-2.11.7/meshcode/__init__.py +0 -82
  13. meshcode-2.11.7/meshcode/meshcode_mcp/realtime.py +0 -460
  14. {meshcode-2.11.7 → meshcode-2.11.8}/README.md +0 -0
  15. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode/_stop_hook_template.py +0 -0
  16. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode/ascii_art.py +0 -0
  17. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode/cli.py +0 -0
  18. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode/comms_v4.py +0 -0
  19. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode/compat.py +0 -0
  20. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode/daemon.py +0 -0
  21. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode/error_hints.py +0 -0
  22. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode/exceptions.py +0 -0
  23. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode/invites.py +0 -0
  24. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode/launcher.py +0 -0
  25. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode/launcher_install.py +0 -0
  26. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode/meshcode_mcp/__init__.py +0 -0
  27. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode/meshcode_mcp/__main__.py +0 -0
  28. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode/meshcode_mcp/sleep_signals.py +0 -0
  29. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode/meshcode_mcp/test_backend.py +0 -0
  30. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode/meshcode_mcp/test_realtime.py +0 -0
  31. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  32. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode/preferences.py +0 -0
  33. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode/protocol_handler.py +0 -0
  34. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode/protocol_v2.py +0 -0
  35. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode/quickstart.py +0 -0
  36. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode/run_agent.py +0 -0
  37. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode/scripts/check_secrets.py +0 -0
  38. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode/scripts/race_rate_harness.py +0 -0
  39. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode/secrets.py +0 -0
  40. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode/self_update.py +0 -0
  41. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode/setup_clients.py +0 -0
  42. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode/supervisor.py +0 -0
  43. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode/upload.py +0 -0
  44. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/comms_v4.py +0 -0
  45. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/meshcode/__init__.py +0 -0
  46. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/meshcode/ascii_art.py +0 -0
  47. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/meshcode/cli.py +0 -0
  48. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/meshcode/comms_v4.py +0 -0
  49. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/meshcode/compat.py +0 -0
  50. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/meshcode/error_hints.py +0 -0
  51. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/meshcode/exceptions.py +0 -0
  52. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/meshcode/invites.py +0 -0
  53. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/meshcode/launcher.py +0 -0
  54. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/meshcode/launcher_install.py +0 -0
  55. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  56. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  57. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/meshcode/meshcode_mcp/backend.py +0 -0
  58. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  59. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/meshcode/meshcode_mcp/server.py +0 -0
  60. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  61. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  62. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  63. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/meshcode/preferences.py +0 -0
  64. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/meshcode/protocol_v2.py +0 -0
  65. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/meshcode/quickstart.py +0 -0
  66. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/meshcode/run_agent.py +0 -0
  67. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/meshcode/secrets.py +0 -0
  68. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/meshcode/self_update.py +0 -0
  69. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/meshcode/setup_clients.py +0 -0
  70. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/meshcode/supervisor.py +0 -0
  71. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/meshcode/upload.py +0 -0
  72. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/scripts/sentinel.py +0 -0
  73. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/tests/test_core.py +0 -0
  74. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/tests/test_cross_agent_messaging.py +0 -0
  75. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/tests/test_esc_deaf_state.py +0 -0
  76. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/tests/test_exceptions.py +0 -0
  77. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/tests/test_mark_read_batch.py +0 -0
  78. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/tests/test_migration_integrity.py +0 -0
  79. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/tests/test_realtime_event_freshness.py +0 -0
  80. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/tests/test_rls_cross_tenant.py +0 -0
  81. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/tests/test_rpc_migrations.py +0 -0
  82. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/tests/test_security_regressions.py +0 -0
  83. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/tests/test_sentinel.py +0 -0
  84. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-backend-wt/tests/test_status_enum_coverage.py +0 -0
  85. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/build/lib/meshcode/__init__.py +0 -0
  86. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/build/lib/meshcode/ascii_art.py +0 -0
  87. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/build/lib/meshcode/cli.py +0 -0
  88. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/build/lib/meshcode/comms_v4.py +0 -0
  89. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/build/lib/meshcode/compat.py +0 -0
  90. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/build/lib/meshcode/error_hints.py +0 -0
  91. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/build/lib/meshcode/exceptions.py +0 -0
  92. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/build/lib/meshcode/invites.py +0 -0
  93. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/build/lib/meshcode/launcher.py +0 -0
  94. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/build/lib/meshcode/launcher_install.py +0 -0
  95. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__init__.py +0 -0
  96. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/__main__.py +0 -0
  97. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/backend.py +0 -0
  98. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/realtime.py +0 -0
  99. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/server.py +0 -0
  100. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_backend.py +0 -0
  101. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_realtime.py +0 -0
  102. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/build/lib/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  103. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/build/lib/meshcode/preferences.py +0 -0
  104. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/build/lib/meshcode/protocol_v2.py +0 -0
  105. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/build/lib/meshcode/quickstart.py +0 -0
  106. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/build/lib/meshcode/run_agent.py +0 -0
  107. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/build/lib/meshcode/secrets.py +0 -0
  108. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/build/lib/meshcode/self_update.py +0 -0
  109. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/build/lib/meshcode/setup_clients.py +0 -0
  110. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/build/lib/meshcode/supervisor.py +0 -0
  111. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/build/lib/meshcode/upload.py +0 -0
  112. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/comms_v4.py +0 -0
  113. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/meshcode/__init__.py +0 -0
  114. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/meshcode/ascii_art.py +0 -0
  115. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/meshcode/cli.py +0 -0
  116. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/meshcode/comms_v4.py +0 -0
  117. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/meshcode/compat.py +0 -0
  118. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/meshcode/error_hints.py +0 -0
  119. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/meshcode/exceptions.py +0 -0
  120. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/meshcode/invites.py +0 -0
  121. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/meshcode/launcher.py +0 -0
  122. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/meshcode/launcher_install.py +0 -0
  123. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  124. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  125. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/meshcode/meshcode_mcp/backend.py +0 -0
  126. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  127. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/meshcode/meshcode_mcp/server.py +0 -0
  128. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  129. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  130. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  131. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/meshcode/preferences.py +0 -0
  132. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/meshcode/protocol_v2.py +0 -0
  133. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/meshcode/quickstart.py +0 -0
  134. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/meshcode/run_agent.py +0 -0
  135. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/meshcode/secrets.py +0 -0
  136. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/meshcode/self_update.py +0 -0
  137. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/meshcode/setup_clients.py +0 -0
  138. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/meshcode/supervisor.py +0 -0
  139. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/meshcode/upload.py +0 -0
  140. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/scripts/sentinel.py +0 -0
  141. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/tests/test_core.py +0 -0
  142. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/tests/test_cross_agent_messaging.py +0 -0
  143. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/tests/test_esc_deaf_state.py +0 -0
  144. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/tests/test_exceptions.py +0 -0
  145. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/tests/test_mark_read_batch.py +0 -0
  146. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/tests/test_migration_integrity.py +0 -0
  147. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/tests/test_realtime_event_freshness.py +0 -0
  148. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/tests/test_rls_cross_tenant.py +0 -0
  149. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/tests/test_rpc_migrations.py +0 -0
  150. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/tests/test_security_regressions.py +0 -0
  151. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/tests/test_sentinel.py +0 -0
  152. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-noun-wt/tests/test_status_enum_coverage.py +0 -0
  153. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/comms_v4.py +0 -0
  154. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/meshcode/__init__.py +0 -0
  155. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/meshcode/ascii_art.py +0 -0
  156. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/meshcode/cli.py +0 -0
  157. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/meshcode/comms_v4.py +0 -0
  158. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/meshcode/compat.py +0 -0
  159. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/meshcode/error_hints.py +0 -0
  160. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/meshcode/exceptions.py +0 -0
  161. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/meshcode/invites.py +0 -0
  162. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/meshcode/launcher.py +0 -0
  163. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/meshcode/launcher_install.py +0 -0
  164. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/meshcode/meshcode_mcp/__init__.py +0 -0
  165. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/meshcode/meshcode_mcp/__main__.py +0 -0
  166. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/meshcode/meshcode_mcp/backend.py +0 -0
  167. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/meshcode/meshcode_mcp/realtime.py +0 -0
  168. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/meshcode/meshcode_mcp/server.py +0 -0
  169. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_backend.py +0 -0
  170. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_realtime.py +0 -0
  171. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/meshcode/meshcode_mcp/test_server_wrapper.py +0 -0
  172. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/meshcode/preferences.py +0 -0
  173. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/meshcode/protocol_v2.py +0 -0
  174. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/meshcode/quickstart.py +0 -0
  175. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/meshcode/run_agent.py +0 -0
  176. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/meshcode/secrets.py +0 -0
  177. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/meshcode/self_update.py +0 -0
  178. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/meshcode/setup_clients.py +0 -0
  179. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/meshcode/supervisor.py +0 -0
  180. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/meshcode/upload.py +0 -0
  181. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/scripts/sentinel.py +0 -0
  182. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/tests/test_core.py +0 -0
  183. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/tests/test_cross_agent_messaging.py +0 -0
  184. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/tests/test_esc_deaf_state.py +0 -0
  185. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/tests/test_exceptions.py +0 -0
  186. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/tests/test_mark_read_batch.py +0 -0
  187. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/tests/test_migration_integrity.py +0 -0
  188. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/tests/test_realtime_event_freshness.py +0 -0
  189. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/tests/test_rls_cross_tenant.py +0 -0
  190. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/tests/test_rpc_migrations.py +0 -0
  191. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/tests/test_security_regressions.py +0 -0
  192. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/tests/test_sentinel.py +0 -0
  193. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode-tasks-wt/tests/test_status_enum_coverage.py +0 -0
  194. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode.egg-info/dependency_links.txt +0 -0
  195. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode.egg-info/entry_points.txt +0 -0
  196. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode.egg-info/requires.txt +0 -0
  197. {meshcode-2.11.7 → meshcode-2.11.8}/meshcode.egg-info/top_level.txt +0 -0
  198. {meshcode-2.11.7 → meshcode-2.11.8}/setup.cfg +0 -0
  199. {meshcode-2.11.7 → meshcode-2.11.8}/tests/test_auto_update_hardening.py +0 -0
  200. {meshcode-2.11.7 → meshcode-2.11.8}/tests/test_core.py +0 -0
  201. {meshcode-2.11.7 → meshcode-2.11.8}/tests/test_cross_agent_messaging.py +0 -0
  202. {meshcode-2.11.7 → meshcode-2.11.8}/tests/test_epistemic_v1_stop_conditions.py +0 -0
  203. {meshcode-2.11.7 → meshcode-2.11.8}/tests/test_esc_deaf_state.py +0 -0
  204. {meshcode-2.11.7 → meshcode-2.11.8}/tests/test_exceptions.py +0 -0
  205. {meshcode-2.11.7 → meshcode-2.11.8}/tests/test_install_guard.py +0 -0
  206. {meshcode-2.11.7 → meshcode-2.11.8}/tests/test_lease_sigterm_release.py +0 -0
  207. {meshcode-2.11.7 → meshcode-2.11.8}/tests/test_mark_read_batch.py +0 -0
  208. {meshcode-2.11.7 → meshcode-2.11.8}/tests/test_migration_integrity.py +0 -0
  209. {meshcode-2.11.7 → meshcode-2.11.8}/tests/test_realtime_event_freshness.py +0 -0
  210. {meshcode-2.11.7 → meshcode-2.11.8}/tests/test_rls_cross_tenant.py +0 -0
  211. {meshcode-2.11.7 → meshcode-2.11.8}/tests/test_rpc_migrations.py +0 -0
  212. {meshcode-2.11.7 → meshcode-2.11.8}/tests/test_security_regressions.py +0 -0
  213. {meshcode-2.11.7 → meshcode-2.11.8}/tests/test_sentinel.py +0 -0
  214. {meshcode-2.11.7 → meshcode-2.11.8}/tests/test_sleep_signals.py +0 -0
  215. {meshcode-2.11.7 → meshcode-2.11.8}/tests/test_status_enum_coverage.py +0 -0
  216. {meshcode-2.11.7 → meshcode-2.11.8}/tests/test_stay_on_loop_hook.py +0 -0
  217. {meshcode-2.11.7 → meshcode-2.11.8}/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.7
3
+ Version: 2.11.8
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,90 @@
1
+ """MeshCode — Real-time communication between AI agents."""
2
+ __version__ = "2.11.8"
3
+
4
+ # Exception hierarchy — eagerly imported (lightweight, no deps)
5
+ from meshcode.exceptions import ( # noqa: F401
6
+ MeshCodeError,
7
+ AuthError,
8
+ RPCError,
9
+ MeshCodeTimeoutError,
10
+ MeshCodeConnectionError,
11
+ )
12
+
13
+ # Public API — lazy imports to avoid heavy deps at import time
14
+ def __getattr__(name):
15
+ if name == "backend":
16
+ from meshcode.meshcode_mcp import backend
17
+ return backend
18
+ if name in _BACKEND_EXPORTS:
19
+ from meshcode.meshcode_mcp import backend
20
+ return getattr(backend, name)
21
+ if name in _SECRETS_EXPORTS:
22
+ from meshcode import secrets
23
+ return getattr(secrets, name)
24
+ raise AttributeError(f"module 'meshcode' has no attribute {name!r}")
25
+
26
+
27
+ # Backend: core messaging & agent management
28
+ _BACKEND_EXPORTS = {
29
+ "send_message",
30
+ "read_inbox",
31
+ "count_pending",
32
+ "get_board",
33
+ "heartbeat",
34
+ "set_status",
35
+ "register_agent",
36
+ "get_project_id",
37
+ "sb_rpc",
38
+ "task_create",
39
+ "task_list",
40
+ "encrypt_payload",
41
+ "decrypt_payload",
42
+ # Epistemic v1
43
+ "decide",
44
+ "outcome",
45
+ "explain",
46
+ }
47
+
48
+ # Secrets: credential management
49
+ _SECRETS_EXPORTS = {
50
+ "get_api_key",
51
+ "set_api_key",
52
+ "list_profiles",
53
+ }
54
+
55
+ __all__ = [
56
+ "__version__",
57
+ "backend",
58
+ # Exceptions
59
+ "MeshCodeError",
60
+ "AuthError",
61
+ "RPCError",
62
+ "MeshCodeTimeoutError",
63
+ "MeshCodeConnectionError",
64
+ # Messaging
65
+ "send_message",
66
+ "read_inbox",
67
+ "count_pending",
68
+ # Agent management
69
+ "register_agent",
70
+ "get_project_id",
71
+ "get_board",
72
+ "heartbeat",
73
+ "set_status",
74
+ # Tasks
75
+ "task_create",
76
+ "task_list",
77
+ # Low-level
78
+ "sb_rpc",
79
+ # Epistemic v1
80
+ "decide",
81
+ "outcome",
82
+ "explain",
83
+ # Encryption
84
+ "encrypt_payload",
85
+ "decrypt_payload",
86
+ # Credentials
87
+ "get_api_key",
88
+ "set_api_key",
89
+ "list_profiles",
90
+ ]
@@ -1132,7 +1132,7 @@ def get_board(project_id: str, api_key: Optional[str] = None) -> List[Dict]:
1132
1132
  "p_api_key": _ak,
1133
1133
  "p_project_id": project_id,
1134
1134
  "p_agent_name": None,
1135
- "p_select": ["name", "role", "status", "task", "last_heartbeat", "registered_at"],
1135
+ "p_select": ["name", "role", "status", "task", "last_heartbeat", "last_response_at", "registered_at"],
1136
1136
  "p_limit": None,
1137
1137
  })
1138
1138
  if isinstance(_res, dict) and _res.get("ok"):
@@ -1140,7 +1140,7 @@ def get_board(project_id: str, api_key: Optional[str] = None) -> List[Dict]:
1140
1140
  # Fallback: direct SELECT (gradual rollout)
1141
1141
  return sb_select(
1142
1142
  "mc_agents",
1143
- f"project_id=eq.{project_id}&select=name,role,status,task,last_heartbeat,registered_at",
1143
+ f"project_id=eq.{project_id}&select=name,role,status,task,last_heartbeat,last_response_at,registered_at",
1144
1144
  order="registered_at.asc",
1145
1145
  )
1146
1146
 
@@ -1340,6 +1340,112 @@ def get_message_by_id(project_id: str, msg_id: str, api_key: Optional[str] = Non
1340
1340
  return results[0] if results else None
1341
1341
 
1342
1342
 
1343
+ # ============================================================
1344
+ # EPISTEMIC V1: decide / outcome / explain — Python-embedded API.
1345
+ # Mirrors the MCP tools meshcode_decide/_outcome/_explain (server.py 5094-5184).
1346
+ # RPCs: public.mc_decide / mc_outcome / mc_explain (mig 314 wrappers around
1347
+ # meshcode.* SECDEF implementations). Use when integrating MeshCode into a
1348
+ # Python application directly (no MCP layer).
1349
+ # ============================================================
1350
+
1351
+ def decide(
1352
+ project_id: str,
1353
+ agent_name: str,
1354
+ decision: str,
1355
+ alternatives: Optional[List[str]] = None,
1356
+ evidence_refs: Optional[List[Dict[str, Any]]] = None,
1357
+ tier: str = "episodic",
1358
+ api_key: Optional[str] = None,
1359
+ ) -> Dict[str, Any]:
1360
+ """Log a non-trivial decision to mc_traces. Returns {trace_id}.
1361
+
1362
+ Pair with outcome() later when the result becomes observable.
1363
+
1364
+ Args:
1365
+ project_id: UUID of the project.
1366
+ agent_name: Name of the agent making the decision.
1367
+ decision: What was decided (one sentence).
1368
+ alternatives: Other options considered (list of strings).
1369
+ evidence_refs: Evidence pointers (list of {type, id|key} dicts);
1370
+ type values: 'memory','msg','task','file','rpc'.
1371
+ tier: 'episodic' (default) | 'reference' | 'critical'.
1372
+ api_key: Required for the SECDEF RPC. Falls back to env via _get_api_key().
1373
+ """
1374
+ if not decision or not decision.strip():
1375
+ return {"ok": False, "error": "decision required"}
1376
+ return sb_rpc("mc_decide", {
1377
+ "p_api_key": api_key or _get_api_key(),
1378
+ "p_project_id": project_id,
1379
+ "p_agent_name": agent_name,
1380
+ "p_decision": decision.strip(),
1381
+ "p_alternatives": json.dumps(alternatives or []),
1382
+ "p_evidence_refs": json.dumps(evidence_refs or []),
1383
+ "p_tier": tier,
1384
+ })
1385
+
1386
+
1387
+ def outcome(
1388
+ project_id: str,
1389
+ agent_name: str,
1390
+ trace_id: str,
1391
+ outcome: str,
1392
+ outcome_eval: str,
1393
+ api_key: Optional[str] = None,
1394
+ ) -> Dict[str, Any]:
1395
+ """Record the observable outcome of a prior decision().
1396
+
1397
+ Args:
1398
+ project_id: UUID of the project.
1399
+ agent_name: Name of the agent recording the outcome.
1400
+ trace_id: UUID returned by decide().
1401
+ outcome: Free-form description of what happened.
1402
+ outcome_eval: 'success' | 'failure' | 'partial' | 'unknown'.
1403
+ api_key: Required for the SECDEF RPC. Falls back to env.
1404
+ """
1405
+ if outcome_eval not in ("success", "failure", "partial", "unknown"):
1406
+ return {"ok": False, "error": "outcome_eval must be success|failure|partial|unknown"}
1407
+ return sb_rpc("mc_outcome", {
1408
+ "p_api_key": api_key or _get_api_key(),
1409
+ "p_project_id": project_id,
1410
+ "p_agent_name": agent_name,
1411
+ "p_trace_id": trace_id,
1412
+ "p_outcome": outcome,
1413
+ "p_outcome_eval": outcome_eval,
1414
+ })
1415
+
1416
+
1417
+ def explain(
1418
+ project_id: str,
1419
+ agent_name: str,
1420
+ memory_key: Optional[str] = None,
1421
+ decision_substring: Optional[str] = None,
1422
+ trace_limit: int = 20,
1423
+ api_key: Optional[str] = None,
1424
+ ) -> Dict[str, Any]:
1425
+ """Surface recent traces + open contradictions tied to a memory key or
1426
+ decision substring. Exactly one of (memory_key, decision_substring) is
1427
+ required.
1428
+
1429
+ Args:
1430
+ project_id: UUID of the project.
1431
+ agent_name: Name of the agent asking.
1432
+ memory_key: Match traces whose evidence_refs reference this key.
1433
+ decision_substring: ILIKE match against the decision text.
1434
+ trace_limit: Cap on returned traces (1..200, default 20).
1435
+ api_key: Required for the SECDEF RPC. Falls back to env.
1436
+ """
1437
+ if not memory_key and not decision_substring:
1438
+ return {"ok": False, "error": "one of (memory_key, decision_substring) required"}
1439
+ return sb_rpc("mc_explain", {
1440
+ "p_api_key": api_key or _get_api_key(),
1441
+ "p_project_id": project_id,
1442
+ "p_agent_name": agent_name,
1443
+ "p_memory_key": memory_key,
1444
+ "p_decision_substring": decision_substring,
1445
+ "p_trace_limit": trace_limit,
1446
+ })
1447
+
1448
+
1343
1449
  # ============================================================
1344
1450
  # Convenience class so `from meshcode.meshcode_mcp.backend import MeshCodeBackend`
1345
1451
  # works for users who expect a class-based API (e.g. Windows onboarding docs).
@@ -1370,3 +1476,6 @@ class MeshCodeBackend:
1370
1476
  sb_select = staticmethod(sb_select)
1371
1477
  sb_insert = staticmethod(sb_insert)
1372
1478
  sb_update = staticmethod(sb_update)
1479
+ decide = staticmethod(decide)
1480
+ outcome = staticmethod(outcome)
1481
+ explain = staticmethod(explain)