PyMemoryEditor 3.0.1__tar.gz → 3.0.2__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 (185) hide show
  1. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PKG-INFO +3 -1
  2. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/__init__.py +1 -1
  3. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/app/application.py +13 -0
  4. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/README.md +2 -0
  5. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/conf.py +1 -1
  6. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/mcp.md +3 -0
  7. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/pyproject.toml +1 -0
  8. pymemoryeditor-3.0.2/tests/mcp_server/test_registry.py +88 -0
  9. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/.flake8 +0 -0
  10. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/.gitignore +0 -0
  11. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/.readthedocs.yaml +0 -0
  12. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/CODE_OF_CONDUCT.md +0 -0
  13. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/CONTRIBUTING.md +0 -0
  14. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/LICENSE +0 -0
  15. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/Makefile +0 -0
  16. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/__main__.py +0 -0
  17. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/app/__init__.py +0 -0
  18. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/app/_auto_refresh_dialog.py +0 -0
  19. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/app/_icon.py +0 -0
  20. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/app/_widgets.py +0 -0
  21. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/app/assets/icon.svg +0 -0
  22. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/app/cheat_entry.py +0 -0
  23. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/app/cheat_poll_worker.py +0 -0
  24. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/app/cheat_table.py +0 -0
  25. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/app/log_console_dialog.py +0 -0
  26. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/app/main_window.py +0 -0
  27. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/app/memory_map_dialog.py +0 -0
  28. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/app/memory_viewer_dialog.py +0 -0
  29. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/app/modules_dialog.py +0 -0
  30. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/app/open_process_dialog.py +0 -0
  31. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/app/pointer_chain_dialog.py +0 -0
  32. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/app/pointer_scan_dialog.py +0 -0
  33. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/app/results_view.py +0 -0
  34. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/app/scan_types.py +0 -0
  35. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/app/scan_worker.py +0 -0
  36. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/app/scanner_panel.py +0 -0
  37. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/app/threads_dialog.py +0 -0
  38. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/app/value_types.py +0 -0
  39. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/enums.py +0 -0
  40. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/linux/functions.py +0 -0
  41. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/linux/libc.py +0 -0
  42. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/linux/process.py +0 -0
  43. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/linux/types.py +0 -0
  44. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/macos/__init__.py +0 -0
  45. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/macos/functions.py +0 -0
  46. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/macos/libsystem.py +0 -0
  47. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/macos/process.py +0 -0
  48. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/macos/types.py +0 -0
  49. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/mcp/__init__.py +0 -0
  50. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/mcp/__main__.py +0 -0
  51. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/mcp/config.py +0 -0
  52. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/mcp/policy.py +0 -0
  53. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/mcp/server.py +0 -0
  54. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/mcp/session.py +0 -0
  55. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/mcp/toolset.py +0 -0
  56. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/process/__init__.py +0 -0
  57. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/process/abstract.py +0 -0
  58. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/process/errors.py +0 -0
  59. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/process/info.py +0 -0
  60. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/process/module_info.py +0 -0
  61. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/process/pointer_scan.py +0 -0
  62. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/process/region.py +0 -0
  63. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/process/remote_pointer.py +0 -0
  64. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/process/scanning.py +0 -0
  65. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/process/thread_info.py +0 -0
  66. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/process/util.py +0 -0
  67. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/py.typed +0 -0
  68. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/util/__init__.py +0 -0
  69. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/util/convert.py +0 -0
  70. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/util/pattern.py +0 -0
  71. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/util/scan.py +0 -0
  72. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/util/scan_numpy.py +0 -0
  73. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/win32/enums/__init__.py +0 -0
  74. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/win32/enums/memory_allocation_states.py +0 -0
  75. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/win32/enums/memory_protections.py +0 -0
  76. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/win32/enums/memory_types.py +0 -0
  77. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/win32/enums/process_operations.py +0 -0
  78. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/win32/enums/standard_access_rights.py +0 -0
  79. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/win32/functions.py +0 -0
  80. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/win32/process.py +0 -0
  81. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/PyMemoryEditor/win32/types.py +0 -0
  82. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/SECURITY.md +0 -0
  83. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/assets/screenshots/app.png +0 -0
  84. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/assets/social-preview.html +0 -0
  85. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/assets/social-preview.png +0 -0
  86. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/_static/.gitkeep +0 -0
  87. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/_static/custom.css +0 -0
  88. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/_templates/layout.html +0 -0
  89. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/api/enums.md +0 -0
  90. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/api/errors.md +0 -0
  91. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/api/index.md +0 -0
  92. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/api/memory-region.md +0 -0
  93. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/api/module-info.md +0 -0
  94. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/api/openprocess.md +0 -0
  95. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/api/pointer-path.md +0 -0
  96. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/api/remote-pointer.md +0 -0
  97. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/api/thread-info.md +0 -0
  98. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/api/utilities.md +0 -0
  99. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/app.md +0 -0
  100. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/contributing.md +0 -0
  101. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/funding.md +0 -0
  102. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/glossary.md +0 -0
  103. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/guide/allocate-free.md +0 -0
  104. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/guide/logging.md +0 -0
  105. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/guide/memory-regions.md +0 -0
  106. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/guide/modules-threads.md +0 -0
  107. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/guide/opening-process.md +0 -0
  108. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/guide/pattern-scan.md +0 -0
  109. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/guide/pointer-scan.md +0 -0
  110. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/guide/pointers.md +0 -0
  111. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/guide/read-write.md +0 -0
  112. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/guide/searching.md +0 -0
  113. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/index.md +0 -0
  114. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/installation.md +0 -0
  115. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/license.md +0 -0
  116. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/platform-notes.md +0 -0
  117. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/quickstart.md +0 -0
  118. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/requirements.txt +0 -0
  119. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/troubleshooting.md +0 -0
  120. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/docs/why.md +0 -0
  121. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/app/__init__.py +0 -0
  122. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/app/test_app_cheat_entry.py +0 -0
  123. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/app/test_app_pointer_parsing.py +0 -0
  124. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/app/test_app_scan_request.py +0 -0
  125. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/app/test_app_smoke.py +0 -0
  126. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/app/test_app_value_types.py +0 -0
  127. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/app/test_app_widgets.py +0 -0
  128. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/app/test_auto_refresh_dialog.py +0 -0
  129. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/app/test_cheat_poll_worker.py +0 -0
  130. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/app/test_open_process_dialog.py +0 -0
  131. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/app/test_refine_scan_worker.py +0 -0
  132. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/conftest.py +0 -0
  133. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/core/__init__.py +0 -0
  134. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/core/test_errors.py +0 -0
  135. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/core/test_logger.py +0 -0
  136. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/mcp_server/__init__.py +0 -0
  137. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/mcp_server/conftest.py +0 -0
  138. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/mcp_server/test_argument_fuzz.py +0 -0
  139. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/mcp_server/test_fake_fidelity.py +0 -0
  140. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/mcp_server/test_live.py +0 -0
  141. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/mcp_server/test_parsing.py +0 -0
  142. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/mcp_server/test_policy.py +0 -0
  143. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/mcp_server/test_server.py +0 -0
  144. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/mcp_server/test_session.py +0 -0
  145. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/mcp_server/test_toolset.py +0 -0
  146. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/memory/__init__.py +0 -0
  147. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/memory/test_allocate_free.py +0 -0
  148. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/memory/test_bufflength_inference.py +0 -0
  149. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/memory/test_editor.py +0 -0
  150. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/memory/test_narrow_width_consistency.py +0 -0
  151. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/memory/test_partial_io.py +0 -0
  152. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/memory/test_read_into.py +0 -0
  153. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/memory/test_str_boundary.py +0 -0
  154. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/memory/test_str_decode_consistency.py +0 -0
  155. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/memory/test_typed_accessors.py +0 -0
  156. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/memory/test_write_safety.py +0 -0
  157. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/memory/test_write_span.py +0 -0
  158. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/memory/test_write_str_bytes_width.py +0 -0
  159. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/platforms/__init__.py +0 -0
  160. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/platforms/test_bitness.py +0 -0
  161. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/platforms/test_bitness_fallback_warns.py +0 -0
  162. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/platforms/test_linux_types.py +0 -0
  163. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/platforms/test_macos_protect.py +0 -0
  164. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/platforms/test_macos_transient_reads.py +0 -0
  165. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/platforms/test_win32_permissions.py +0 -0
  166. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/pointer/__init__.py +0 -0
  167. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/pointer/test_pointer_chain.py +0 -0
  168. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/pointer/test_pointer_scan.py +0 -0
  169. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/pointer/test_remote_pointer.py +0 -0
  170. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/process/__init__.py +0 -0
  171. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/process/test_memory_region.py +0 -0
  172. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/process/test_module_enumeration.py +0 -0
  173. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/process/test_partial_name_match.py +0 -0
  174. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/process/test_process_enumeration.py +0 -0
  175. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/process/test_process_lookup.py +0 -0
  176. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/process/test_thread_enumeration.py +0 -0
  177. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/scan/__init__.py +0 -0
  178. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/scan/test_chunking_integration.py +0 -0
  179. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/scan/test_pattern_compile.py +0 -0
  180. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/scan/test_pattern_scan.py +0 -0
  181. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/scan/test_region_snapshot.py +0 -0
  182. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/scan/test_scan.py +0 -0
  183. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/scan/test_scan_numpy.py +0 -0
  184. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/scan/test_scan_properties.py +0 -0
  185. {pymemoryeditor-3.0.1 → pymemoryeditor-3.0.2}/tests/scan/test_scanning_helper.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: PyMemoryEditor
3
- Version: 3.0.1
3
+ Version: 3.0.2
4
4
  Summary: Read, write and scan process memory in a few lines of Python — Cheat Engine-style scans, pointer chains and AOB search on Windows, Linux and macOS.
5
5
  Project-URL: Homepage, https://github.com/JeanExtreme002/PyMemoryEditor
6
6
  Project-URL: Documentation, https://pymemoryeditor.readthedocs.io
@@ -61,6 +61,8 @@ Description-Content-Type: text/markdown
61
61
 
62
62
  # PyMemoryEditor
63
63
 
64
+ <!-- mcp-name: io.github.JeanExtreme002/PyMemoryEditor -->
65
+
64
66
  A pure-Python library (built on [ctypes](https://docs.python.org/3/library/ctypes.html)) that lets you **inspect, modify and search the memory of any running process in a few lines of Python** — Cheat Engine workflows on Windows, Linux and macOS!
65
67
 
66
68
  ---
@@ -8,7 +8,7 @@ Supported platforms: Windows, Linux and macOS (32-bit and 64-bit).
8
8
  """
9
9
 
10
10
  __author__ = "Jean Loui Bernard Silva de Jesus"
11
- __version__ = "3.0.1"
11
+ __version__ = "3.0.2"
12
12
 
13
13
  import logging
14
14
  import sys
@@ -559,7 +559,20 @@ def main_cli(argv=None):
559
559
 
560
560
  Kept separate from :func:`main` so that process-wide change only happens
561
561
  when the app *is* the process, never when it is embedded in someone else's.
562
+
563
+ ``pymemoryeditor mcp [flags]`` runs the MCP server instead, the same as
564
+ ``pymemoryeditor-mcp [flags]``. MCP registries launch a PyPI package by its
565
+ project name (``uvx --from "PyMemoryEditor[mcp]" pymemoryeditor mcp``), so
566
+ this is the only command they can reach. It never touches Qt, and the
567
+ server keeps its own signal handling.
562
568
  """
569
+ if argv is None:
570
+ argv = sys.argv
571
+ if len(argv) > 1 and argv[1].strip() == "mcp":
572
+ from PyMemoryEditor.mcp.server import main as mcp_main
573
+
574
+ return mcp_main(argv[2:])
575
+
563
576
  with _scoped_signal_handler(signal.SIGINT, signal.SIG_DFL):
564
577
  return main(argv)
565
578
 
@@ -1,5 +1,7 @@
1
1
  # PyMemoryEditor
2
2
 
3
+ <!-- mcp-name: io.github.JeanExtreme002/PyMemoryEditor -->
4
+
3
5
  A pure-Python library (built on [ctypes](https://docs.python.org/3/library/ctypes.html)) that lets you **inspect, modify and search the memory of any running process in a few lines of Python** — Cheat Engine workflows on Windows, Linux and macOS!
4
6
 
5
7
  ---
@@ -23,7 +23,7 @@ copyright = f"{datetime.now().year}, {author}"
23
23
  try:
24
24
  from PyMemoryEditor import __version__ as release
25
25
  except Exception: # pragma: no cover - docs can build without the package installed
26
- release = "3.0.1"
26
+ release = "3.0.2"
27
27
 
28
28
  version = ".".join(release.split(".")[:2])
29
29
 
@@ -85,6 +85,9 @@ pymemoryeditor-mcp --allow-process game.exe # never asks for game.exe
85
85
  pymemoryeditor-mcp --allow-any-process # never asks at all (scripts/CI)
86
86
  ```
87
87
 
88
+ `pymemoryeditor mcp` is the same command, flags included: it is how clients
89
+ that install from the MCP Registry start the server.
90
+
88
91
  ## Flags
89
92
 
90
93
  <table>
@@ -166,6 +166,7 @@ exclude = [
166
166
  "/.coveragerc-lib",
167
167
  "/.coveragerc-mcp",
168
168
  "/scripts",
169
+ "/server.json",
169
170
  ]
170
171
 
171
172
  # hatchling>=1.27 is required for PEP 639 metadata: the SPDX ``license = "MIT"``
@@ -0,0 +1,88 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ """
4
+ The MCP Registry listing (server.json) and the command it makes clients run.
5
+
6
+ A registry client starts a PyPI server as ``uvx <runtime args> <identifier>
7
+ <package args>``, with the identifier being the PyPI project. So the listing
8
+ only works while four things agree: the server name in server.json and the
9
+ ``mcp-name`` marker in the README that PyPI shows (the registry's ownership
10
+ check), the versions in server.json and the package, and the console script
11
+ the identifier names, which must start the server when given ``mcp``.
12
+ """
13
+
14
+ import json
15
+ import re
16
+ import sys
17
+ from pathlib import Path
18
+
19
+ import pytest
20
+
21
+ import PyMemoryEditor
22
+
23
+ ROOT = Path(__file__).resolve().parents[2]
24
+
25
+
26
+ @pytest.fixture(scope="module")
27
+ def server():
28
+ return json.loads((ROOT / "server.json").read_text(encoding="utf-8"))
29
+
30
+
31
+ @pytest.fixture(scope="module")
32
+ def package(server):
33
+ (package,) = server["packages"]
34
+ return package
35
+
36
+
37
+ def test_readme_carries_the_registry_name(server):
38
+ readme = (ROOT / "README.md").read_text(encoding="utf-8")
39
+
40
+ assert re.findall(r"mcp-name: (\S+) -->", readme) == [server["name"]]
41
+
42
+
43
+ def test_versions_follow_the_package(server, package):
44
+ version = PyMemoryEditor.__version__
45
+
46
+ assert server["version"] == package["version"] == version
47
+ assert {"type": "named", "name": "--from"}.items() <= package["runtimeArguments"][0].items()
48
+ assert package["runtimeArguments"][0]["value"] == "PyMemoryEditor[mcp]==" + version
49
+
50
+
51
+ def test_the_command_a_client_builds_starts_the_server(package):
52
+ pyproject = (ROOT / "pyproject.toml").read_text(encoding="utf-8")
53
+ scripts = re.search(r"\[project\.scripts\](.*?)\n\[", pyproject, re.S).group(1)
54
+
55
+ # uvx looks the executable up by its exact name, and the console scripts
56
+ # are lowercase: "PyMemoryEditor" would not be found on Linux.
57
+ assert re.search(r'^{} = "PyMemoryEditor\.app\.application:main_cli"$'.format(package["identifier"]), scripts, re.M)
58
+ assert package["runtimeHint"] == "uvx"
59
+ assert package["packageArguments"] == [{"type": "positional", "value": "mcp"}]
60
+ assert package["transport"] == {"type": "stdio"}
61
+
62
+
63
+ def test_description_fits_the_registry_limit(server):
64
+ # The registry rejects a description over 100 characters at publish time.
65
+ assert len(server["description"]) <= 100
66
+
67
+
68
+ def test_mcp_subcommand_runs_the_server_without_qt(monkeypatch):
69
+ from PyMemoryEditor.app import application
70
+ from PyMemoryEditor.mcp import server as mcp_server
71
+
72
+ received = []
73
+ monkeypatch.setattr(mcp_server, "main", lambda argv: received.append(list(argv)) or 0)
74
+ monkeypatch.setattr(application, "main", lambda argv: pytest.fail("the Qt app started"))
75
+ monkeypatch.setitem(sys.modules, "PySide6", None) # any Qt import would raise
76
+
77
+ assert application.main_cli(["pymemoryeditor", "mcp", "--read-only", "--allow-process", "game.exe"]) == 0
78
+ assert received == [["--read-only", "--allow-process", "game.exe"]]
79
+
80
+
81
+ def test_other_arguments_still_reach_the_app(monkeypatch):
82
+ from PyMemoryEditor.app import application
83
+
84
+ received = []
85
+ monkeypatch.setattr(application, "main", lambda argv: received.append(argv))
86
+
87
+ application.main_cli(["pymemoryeditor", "--version"])
88
+ assert received == [["pymemoryeditor", "--version"]]
File without changes
File without changes
File without changes