portacode 0.3.20.dev6__tar.gz → 0.3.20.dev7__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 (80) hide show
  1. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/PKG-INFO +1 -1
  2. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/_version.py +2 -2
  3. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/connection/handlers/project_state/centralized_manager.py +8 -2
  4. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/connection/handlers/project_state/simplified_file_watcher.py +28 -4
  5. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode.egg-info/PKG-INFO +1 -1
  6. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/.claude/agents/communication-manager.md +0 -0
  7. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/.claude/settings.local.json +0 -0
  8. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/.gitignore +0 -0
  9. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/.gitmodules +0 -0
  10. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/LICENSE +0 -0
  11. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/MANIFEST.in +0 -0
  12. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/Makefile +0 -0
  13. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/README.md +0 -0
  14. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/backup.sh +0 -0
  15. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/docker-compose.yaml +0 -0
  16. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/README.md +0 -0
  17. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/__init__.py +0 -0
  18. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/__main__.py +0 -0
  19. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/cli.py +0 -0
  20. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/connection/README.md +0 -0
  21. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/connection/__init__.py +0 -0
  22. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/connection/client.py +0 -0
  23. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/connection/handlers/README.md +0 -0
  24. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/connection/handlers/WEBSOCKET_PROTOCOL.md +0 -0
  25. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/connection/handlers/__init__.py +0 -0
  26. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/connection/handlers/base.py +0 -0
  27. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/connection/handlers/file_handlers.py +0 -0
  28. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/connection/handlers/project_state/README.md +0 -0
  29. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/connection/handlers/project_state/__init__.py +0 -0
  30. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/connection/handlers/project_state/centralized_handlers.py +0 -0
  31. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/connection/handlers/project_state/centralized_state.py +0 -0
  32. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/connection/handlers/project_state/file_system_watcher.py +0 -0
  33. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/connection/handlers/project_state/git_manager.py +0 -0
  34. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/connection/handlers/project_state/handlers.py +0 -0
  35. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/connection/handlers/project_state/manager.py +0 -0
  36. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/connection/handlers/project_state/models.py +0 -0
  37. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/connection/handlers/project_state/utils.py +0 -0
  38. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/connection/handlers/project_state_handlers.py +0 -0
  39. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/connection/handlers/registry.py +0 -0
  40. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/connection/handlers/session.py +0 -0
  41. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/connection/handlers/system_handlers.py +0 -0
  42. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/connection/handlers/tab_factory.py +0 -0
  43. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/connection/handlers/terminal_handlers.py +0 -0
  44. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/connection/multiplex.py +0 -0
  45. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/connection/terminal.py +0 -0
  46. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/data.py +0 -0
  47. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/keypair.py +0 -0
  48. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode/service.py +0 -0
  49. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode.egg-info/SOURCES.txt +0 -0
  50. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode.egg-info/dependency_links.txt +0 -0
  51. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode.egg-info/entry_points.txt +0 -0
  52. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode.egg-info/requires.txt +0 -0
  53. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/portacode.egg-info/top_level.txt +0 -0
  54. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/pyproject.toml +0 -0
  55. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/restore.sh +0 -0
  56. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/run_tests.py +0 -0
  57. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/setup.cfg +0 -0
  58. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/setup.py +0 -0
  59. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/test.sh +0 -0
  60. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/test_modules/README.md +0 -0
  61. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/test_modules/__init__.py +0 -0
  62. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/test_modules/test_device_online.py +0 -0
  63. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/test_modules/test_file_operations.py +0 -0
  64. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/test_modules/test_login_flow.py +0 -0
  65. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/test_modules/test_navigate_testing_folder.py +0 -0
  66. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/test_modules/test_terminal_interaction.py +0 -0
  67. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/test_modules/test_terminal_start.py +0 -0
  68. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/testing_framework/.env.example +0 -0
  69. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/testing_framework/README.md +0 -0
  70. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/testing_framework/__init__.py +0 -0
  71. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/testing_framework/cli.py +0 -0
  72. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/testing_framework/core/__init__.py +0 -0
  73. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/testing_framework/core/base_test.py +0 -0
  74. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/testing_framework/core/cli_manager.py +0 -0
  75. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/testing_framework/core/hierarchical_runner.py +0 -0
  76. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/testing_framework/core/playwright_manager.py +0 -0
  77. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/testing_framework/core/runner.py +0 -0
  78. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/testing_framework/core/shared_cli_manager.py +0 -0
  79. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/testing_framework/core/test_discovery.py +0 -0
  80. {portacode-0.3.20.dev6 → portacode-0.3.20.dev7}/testing_framework/requirements.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: portacode
3
- Version: 0.3.20.dev6
3
+ Version: 0.3.20.dev7
4
4
  Summary: Portacode CLI client and SDK
5
5
  Home-page: https://github.com/portacode/portacode
6
6
  Author: Meena Erian
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '0.3.20.dev6'
21
- __version_tuple__ = version_tuple = (0, 3, 20, 'dev6')
20
+ __version__ = version = '0.3.20.dev7'
21
+ __version_tuple__ = version_tuple = (0, 3, 20, 'dev7')
@@ -186,8 +186,9 @@ class CentralizedProjectStateManager:
186
186
  try:
187
187
  with os.scandir(folder_path) as entries:
188
188
  for entry in entries:
189
- if entry.name.startswith('.') and entry.name != '.git':
190
- continue # Skip hidden files except .git
189
+ # Skip all hidden files including .git - git monitoring is handled separately
190
+ if entry.name.startswith('.'):
191
+ continue
191
192
 
192
193
  stat_info = entry.stat()
193
194
  item = FileItem(
@@ -301,6 +302,11 @@ class CentralizedProjectStateManager:
301
302
  if not state:
302
303
  return False
303
304
 
305
+ # Skip .git directories entirely
306
+ if '.git' in Path(folder_path).parts or folder_path.endswith('.git'):
307
+ logger.debug("Skipping expansion of .git directory: %s", folder_path)
308
+ return False
309
+
304
310
  monitored_folders = state.monitored_folders.copy()
305
311
 
306
312
  # Find and expand the folder
@@ -61,9 +61,14 @@ class SimplifiedFileSystemWatcher:
61
61
  logger.warning("Cannot start watching %s - watchdog not available", path)
62
62
  return
63
63
 
64
+ # Skip .git directories entirely
65
+ if '.git' in Path(path).parts or path.endswith('.git'):
66
+ logger.debug("Skipping .git directory for watching: %s", path)
67
+ return
68
+
64
69
  if path not in self.watched_paths:
65
70
  try:
66
- # Only watch for non-git file changes
71
+ # Only watch for non-git file changes, non-recursive to avoid .git monitoring
67
72
  self.observer.schedule(self.event_handler, path, recursive=False)
68
73
  self.watched_paths.add(path)
69
74
  logger.info("Started watching path for file changes: %s", path)
@@ -109,11 +114,30 @@ class SimplifiedEventHandler(FileSystemEventHandler):
109
114
  return
110
115
 
111
116
  # Skip git directories entirely - they're handled by periodic polling
112
- path_parts = Path(event.src_path).parts
113
- if '.git' in path_parts or event.src_path.endswith(('.git', '/.git')):
114
- logger.debug("Skipping git directory event: %s", event.src_path)
117
+ src_path_str = str(event.src_path)
118
+ path_obj = Path(src_path_str)
119
+
120
+ # Multiple checks to ensure no .git paths are processed
121
+ if ('.git' in path_obj.parts or
122
+ '.git' in src_path_str or
123
+ src_path_str.endswith('.git') or
124
+ '/.git/' in src_path_str or
125
+ '\\.git\\' in src_path_str):
126
+ logger.debug("Skipping git directory event: %s", src_path_str)
115
127
  return
116
128
 
129
+ # Also check destination path for move events
130
+ if hasattr(event, 'dest_path') and event.dest_path:
131
+ dest_path_str = str(event.dest_path)
132
+ dest_path_obj = Path(dest_path_str)
133
+ if ('.git' in dest_path_obj.parts or
134
+ '.git' in dest_path_str or
135
+ dest_path_str.endswith('.git') or
136
+ '/.git/' in dest_path_str or
137
+ '\\.git\\' in dest_path_str):
138
+ logger.debug("Skipping git directory move event: %s -> %s", src_path_str, dest_path_str)
139
+ return
140
+
117
141
  # Skip opened/closed events that don't indicate file modifications
118
142
  if event.event_type in ('opened', 'closed'):
119
143
  logger.debug("Skipping opened/closed event: %s", event.event_type)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: portacode
3
- Version: 0.3.20.dev6
3
+ Version: 0.3.20.dev7
4
4
  Summary: Portacode CLI client and SDK
5
5
  Home-page: https://github.com/portacode/portacode
6
6
  Author: Meena Erian
File without changes
File without changes