replx 1.6.1__tar.gz → 1.6.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 (138) hide show
  1. {replx-1.6.1/replx.egg-info → replx-1.6.2}/PKG-INFO +1 -1
  2. {replx-1.6.1 → replx-1.6.2}/replx/__init__.py +1 -1
  3. {replx-1.6.1 → replx-1.6.2}/replx/cli/agent/client/core.py +6 -3
  4. {replx-1.6.1 → replx-1.6.2}/replx/cli/agent/server/core.py +0 -6
  5. {replx-1.6.1 → replx-1.6.2/replx.egg-info}/PKG-INFO +1 -1
  6. {replx-1.6.1 → replx-1.6.2}/LICENSE +0 -0
  7. {replx-1.6.1 → replx-1.6.2}/README.md +0 -0
  8. {replx-1.6.1 → replx-1.6.2}/pyproject.toml +0 -0
  9. {replx-1.6.1 → replx-1.6.2}/replx/cli/__init__.py +0 -0
  10. {replx-1.6.1 → replx-1.6.2}/replx/cli/agent/__init__.py +0 -0
  11. {replx-1.6.1 → replx-1.6.2}/replx/cli/agent/client/__init__.py +0 -0
  12. {replx-1.6.1 → replx-1.6.2}/replx/cli/agent/client/session.py +0 -0
  13. {replx-1.6.1 → replx-1.6.2}/replx/cli/agent/protocol.py +0 -0
  14. {replx-1.6.1 → replx-1.6.2}/replx/cli/agent/server/__init__.py +0 -0
  15. {replx-1.6.1 → replx-1.6.2}/replx/cli/agent/server/__main__.py +0 -0
  16. {replx-1.6.1 → replx-1.6.2}/replx/cli/agent/server/command_dispatcher.py +0 -0
  17. {replx-1.6.1 → replx-1.6.2}/replx/cli/agent/server/connection_manager.py +0 -0
  18. {replx-1.6.1 → replx-1.6.2}/replx/cli/agent/server/handlers/__init__.py +0 -0
  19. {replx-1.6.1 → replx-1.6.2}/replx/cli/agent/server/handlers/exec.py +0 -0
  20. {replx-1.6.1 → replx-1.6.2}/replx/cli/agent/server/handlers/filesystem.py +0 -0
  21. {replx-1.6.1 → replx-1.6.2}/replx/cli/agent/server/handlers/repl.py +0 -0
  22. {replx-1.6.1 → replx-1.6.2}/replx/cli/agent/server/handlers/session.py +0 -0
  23. {replx-1.6.1 → replx-1.6.2}/replx/cli/agent/server/handlers/transfer.py +0 -0
  24. {replx-1.6.1 → replx-1.6.2}/replx/cli/agent/server/session_manager.py +0 -0
  25. {replx-1.6.1 → replx-1.6.2}/replx/cli/app.py +0 -0
  26. {replx-1.6.1 → replx-1.6.2}/replx/cli/commands/__init__.py +0 -0
  27. {replx-1.6.1 → replx-1.6.2}/replx/cli/commands/device.py +0 -0
  28. {replx-1.6.1 → replx-1.6.2}/replx/cli/commands/exec.py +0 -0
  29. {replx-1.6.1 → replx-1.6.2}/replx/cli/commands/file.py +0 -0
  30. {replx-1.6.1 → replx-1.6.2}/replx/cli/commands/firmware.py +0 -0
  31. {replx-1.6.1 → replx-1.6.2}/replx/cli/commands/package.py +0 -0
  32. {replx-1.6.1 → replx-1.6.2}/replx/cli/commands/utility.py +0 -0
  33. {replx-1.6.1 → replx-1.6.2}/replx/cli/config.py +0 -0
  34. {replx-1.6.1 → replx-1.6.2}/replx/cli/connection.py +0 -0
  35. {replx-1.6.1 → replx-1.6.2}/replx/cli/helpers/__init__.py +0 -0
  36. {replx-1.6.1 → replx-1.6.2}/replx/cli/helpers/compiler.py +0 -0
  37. {replx-1.6.1 → replx-1.6.2}/replx/cli/helpers/environment.py +0 -0
  38. {replx-1.6.1 → replx-1.6.2}/replx/cli/helpers/output.py +0 -0
  39. {replx-1.6.1 → replx-1.6.2}/replx/cli/helpers/registry.py +0 -0
  40. {replx-1.6.1 → replx-1.6.2}/replx/cli/helpers/scanner.py +0 -0
  41. {replx-1.6.1 → replx-1.6.2}/replx/cli/helpers/store.py +0 -0
  42. {replx-1.6.1 → replx-1.6.2}/replx/cli/helpers/updater.py +0 -0
  43. {replx-1.6.1 → replx-1.6.2}/replx/commands.py +0 -0
  44. {replx-1.6.1 → replx-1.6.2}/replx/protocol/__init__.py +0 -0
  45. {replx-1.6.1 → replx-1.6.2}/replx/protocol/repl.py +0 -0
  46. {replx-1.6.1 → replx-1.6.2}/replx/protocol/storage.py +0 -0
  47. {replx-1.6.1 → replx-1.6.2}/replx/terminal.py +0 -0
  48. {replx-1.6.1 → replx-1.6.2}/replx/transport/__init__.py +0 -0
  49. {replx-1.6.1 → replx-1.6.2}/replx/transport/base.py +0 -0
  50. {replx-1.6.1 → replx-1.6.2}/replx/transport/serial.py +0 -0
  51. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/_thread.pyi +0 -0
  52. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/aioble/__init__.pyi +0 -0
  53. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/array.pyi +0 -0
  54. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/asyncio/__init__.pyi +0 -0
  55. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/binascii.pyi +0 -0
  56. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/bluetooth.pyi +0 -0
  57. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/builtins.pyi +0 -0
  58. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/cmath.pyi +0 -0
  59. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/collections.pyi +0 -0
  60. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/cryptolib.pyi +0 -0
  61. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/deflate.pyi +0 -0
  62. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/errno.pyi +0 -0
  63. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/framebuf.pyi +0 -0
  64. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/gc.pyi +0 -0
  65. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/hashlib.pyi +0 -0
  66. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/heapq.pyi +0 -0
  67. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/io.pyi +0 -0
  68. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/json.pyi +0 -0
  69. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/lwip.pyi +0 -0
  70. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/machine.pyi +0 -0
  71. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/math.pyi +0 -0
  72. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/micropython.pyi +0 -0
  73. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/mip/__init__.pyi +0 -0
  74. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/network.pyi +0 -0
  75. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/ntptime.pyi +0 -0
  76. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/os.pyi +0 -0
  77. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/platform.pyi +0 -0
  78. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/random.pyi +0 -0
  79. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/re.pyi +0 -0
  80. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/requests/__init__.pyi +0 -0
  81. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/select.pyi +0 -0
  82. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/socket.pyi +0 -0
  83. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/ssl.pyi +0 -0
  84. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/struct.pyi +0 -0
  85. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/sys.pyi +0 -0
  86. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/time.pyi +0 -0
  87. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/tls.pyi +0 -0
  88. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/uasyncio.pyi +0 -0
  89. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/uctypes.pyi +0 -0
  90. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/urequests.pyi +0 -0
  91. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm/vfs.pyi +0 -0
  92. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm_separate/EFR32MG/binascii.pyi +0 -0
  93. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm_separate/EFR32MG/errno.pyi +0 -0
  94. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm_separate/EFR32MG/hashlib.pyi +0 -0
  95. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm_separate/EFR32MG/io.pyi +0 -0
  96. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm_separate/EFR32MG/json.pyi +0 -0
  97. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm_separate/EFR32MG/machine.pyi +0 -0
  98. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm_separate/EFR32MG/math.pyi +0 -0
  99. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm_separate/EFR32MG/micropython.pyi +0 -0
  100. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm_separate/EFR32MG/network.pyi +0 -0
  101. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm_separate/EFR32MG/os.pyi +0 -0
  102. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm_separate/EFR32MG/select.pyi +0 -0
  103. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm_separate/EFR32MG/socket.pyi +0 -0
  104. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm_separate/EFR32MG/ssl.pyi +0 -0
  105. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm_separate/EFR32MG/struct.pyi +0 -0
  106. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm_separate/EFR32MG/sys.pyi +0 -0
  107. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm_separate/EFR32MG/time.pyi +0 -0
  108. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm_separate/EFR32MG/ubinascii.pyi +0 -0
  109. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm_separate/EFR32MG/ucryptolib.pyi +0 -0
  110. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm_separate/EFR32MG/uerrno.pyi +0 -0
  111. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm_separate/EFR32MG/uhashlib.pyi +0 -0
  112. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm_separate/EFR32MG/uio.pyi +0 -0
  113. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm_separate/EFR32MG/ujson.pyi +0 -0
  114. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm_separate/EFR32MG/umachine.pyi +0 -0
  115. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm_separate/EFR32MG/uos.pyi +0 -0
  116. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm_separate/EFR32MG/uselect.pyi +0 -0
  117. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm_separate/EFR32MG/usocket.pyi +0 -0
  118. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm_separate/EFR32MG/ussl.pyi +0 -0
  119. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm_separate/EFR32MG/ustruct.pyi +0 -0
  120. {replx-1.6.1 → replx-1.6.2}/replx/typehints/comm_separate/EFR32MG/utime.pyi +0 -0
  121. {replx-1.6.1 → replx-1.6.2}/replx/typehints/core/ESP32/aioespnow.pyi +0 -0
  122. {replx-1.6.1 → replx-1.6.2}/replx/typehints/core/ESP32/esp.pyi +0 -0
  123. {replx-1.6.1 → replx-1.6.2}/replx/typehints/core/ESP32/esp32.pyi +0 -0
  124. {replx-1.6.1 → replx-1.6.2}/replx/typehints/core/ESP32/espnow.pyi +0 -0
  125. {replx-1.6.1 → replx-1.6.2}/replx/typehints/core/MIMXRT1062DVJ6A/mimxrt.pyi +0 -0
  126. {replx-1.6.1 → replx-1.6.2}/replx/typehints/core/RP2350/rp2.pyi +0 -0
  127. {replx-1.6.1 → replx-1.6.2}/replx/utils/__init__.py +0 -0
  128. {replx-1.6.1 → replx-1.6.2}/replx/utils/constants.py +0 -0
  129. {replx-1.6.1 → replx-1.6.2}/replx/utils/device_info.py +0 -0
  130. {replx-1.6.1 → replx-1.6.2}/replx/utils/exceptions.py +0 -0
  131. {replx-1.6.1 → replx-1.6.2}/replx.egg-info/SOURCES.txt +0 -0
  132. {replx-1.6.1 → replx-1.6.2}/replx.egg-info/dependency_links.txt +0 -0
  133. {replx-1.6.1 → replx-1.6.2}/replx.egg-info/entry_points.txt +0 -0
  134. {replx-1.6.1 → replx-1.6.2}/replx.egg-info/requires.txt +0 -0
  135. {replx-1.6.1 → replx-1.6.2}/replx.egg-info/top_level.txt +0 -0
  136. {replx-1.6.1 → replx-1.6.2}/setup.cfg +0 -0
  137. {replx-1.6.1 → replx-1.6.2}/test/test_line_mode_terminal.py +0 -0
  138. {replx-1.6.1 → replx-1.6.2}/test/test_termio.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: replx
3
- Version: 1.6.1
3
+ Version: 1.6.2
4
4
  Summary: replx is a fast, modern MicroPython CLI: turbo REPL, robust file sync (put/get), project install, mpy-cross integration, and smart port discovery.
5
5
  Author-email: "chanmin.park" <devcamp@gmail.com>
6
6
  License-Expression: MIT
@@ -1,5 +1,5 @@
1
1
  __all__ = ["__version__", "get_version", "__description__"]
2
- __version__ = "1.6.1"
2
+ __version__ = "1.6.2"
3
3
  __description__ = "Fast, modern MicroPython CLI with REPL, file sync, install, and smart port detection."
4
4
  __author__ = "PlanX Lab Development Team"
5
5
 
@@ -1,3 +1,4 @@
1
+ import locale
1
2
  import os
2
3
  import sys
3
4
  import socket
@@ -322,6 +323,7 @@ class AgentClient:
322
323
  import subprocess
323
324
  python_exe = sys.executable
324
325
  agent_module = 'replx.cli.agent.server'
326
+ agent_port = port or DEFAULT_AGENT_PORT
325
327
 
326
328
  cmd = [python_exe, '-m', agent_module]
327
329
  if port:
@@ -335,7 +337,7 @@ class AgentClient:
335
337
  try:
336
338
  fd, stderr_path = tempfile.mkstemp(prefix='replx_agent_', suffix='.err')
337
339
  os.close(fd)
338
- stderr_file = open(stderr_path, 'w', encoding='utf-8')
340
+ stderr_file = open(stderr_path, 'wb')
339
341
  except Exception:
340
342
  stderr_file = None
341
343
  stderr_path = None
@@ -375,8 +377,9 @@ class AgentClient:
375
377
  detail = ''
376
378
  if stderr_path:
377
379
  try:
378
- with open(stderr_path, 'r', encoding='utf-8', errors='replace') as f:
379
- detail = f.read().strip()
380
+ enc = locale.getpreferredencoding(False) or 'utf-8'
381
+ with open(stderr_path, 'rb') as f:
382
+ detail = f.read().decode(enc, errors='replace').strip()
380
383
  except Exception:
381
384
  pass
382
385
  msg = f"Failed to start agent (process exited with code {proc.returncode})"
@@ -400,9 +400,6 @@ class AgentServer(
400
400
  self.connection_manager.disconnect(port)
401
401
  self.session_manager.remove_connection_from_all_sessions(port)
402
402
 
403
- if not self.connection_manager.get_connected_ports():
404
- self.running = False
405
-
406
403
  self._last_command_time = time.time()
407
404
 
408
405
  return zombie_counter, gc_counter
@@ -734,9 +731,6 @@ class AgentServer(
734
731
  failed_port = active_conn.port
735
732
  self.connection_manager.disconnect(failed_port)
736
733
  self.session_manager.remove_connection_from_all_sessions(failed_port)
737
- if not self.connection_manager.get_connected_ports():
738
- self.running = False
739
- return AgentProtocol.create_response(seq=seq, error=f"Connection {failed_port} lost: {str(e)}. No connections remain, agent shutting down.")
740
734
  return AgentProtocol.create_response(seq=seq, error=f"Connection {failed_port} lost: {str(e)}. Connection removed.")
741
735
  else:
742
736
  return AgentProtocol.create_response(seq=seq, error=f"Connection error: {str(e)}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: replx
3
- Version: 1.6.1
3
+ Version: 1.6.2
4
4
  Summary: replx is a fast, modern MicroPython CLI: turbo REPL, robust file sync (put/get), project install, mpy-cross integration, and smart port discovery.
5
5
  Author-email: "chanmin.park" <devcamp@gmail.com>
6
6
  License-Expression: MIT
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes