portacode 0.3.16.dev5__tar.gz → 0.3.16.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 (44) hide show
  1. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/PKG-INFO +1 -1
  2. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/_version.py +2 -2
  3. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/handlers/project_state_handlers.py +29 -6
  4. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode.egg-info/PKG-INFO +1 -1
  5. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/.claude/agents/communication-manager.md +0 -0
  6. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/.claude/settings.local.json +0 -0
  7. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/.gitignore +0 -0
  8. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/.gitmodules +0 -0
  9. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/LICENSE +0 -0
  10. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/MANIFEST.in +0 -0
  11. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/Makefile +0 -0
  12. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/README.md +0 -0
  13. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/backup.sh +0 -0
  14. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/docker-compose.yaml +0 -0
  15. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/README.md +0 -0
  16. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/__init__.py +0 -0
  17. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/__main__.py +0 -0
  18. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/cli.py +0 -0
  19. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/README.md +0 -0
  20. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/__init__.py +0 -0
  21. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/client.py +0 -0
  22. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/handlers/README.md +0 -0
  23. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/handlers/WEBSOCKET_PROTOCOL.md +0 -0
  24. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/handlers/__init__.py +0 -0
  25. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/handlers/base.py +0 -0
  26. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/handlers/file_handlers.py +0 -0
  27. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/handlers/registry.py +0 -0
  28. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/handlers/session.py +0 -0
  29. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/handlers/system_handlers.py +0 -0
  30. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/handlers/terminal_handlers.py +0 -0
  31. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/multiplex.py +0 -0
  32. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/connection/terminal.py +0 -0
  33. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/data.py +0 -0
  34. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/keypair.py +0 -0
  35. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode/service.py +0 -0
  36. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode.egg-info/SOURCES.txt +0 -0
  37. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode.egg-info/dependency_links.txt +0 -0
  38. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode.egg-info/entry_points.txt +0 -0
  39. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode.egg-info/requires.txt +0 -0
  40. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/portacode.egg-info/top_level.txt +0 -0
  41. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/pyproject.toml +0 -0
  42. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/restore.sh +0 -0
  43. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/setup.cfg +0 -0
  44. {portacode-0.3.16.dev5 → portacode-0.3.16.dev7}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: portacode
3
- Version: 0.3.16.dev5
3
+ Version: 0.3.16.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.16.dev5'
21
- __version_tuple__ = version_tuple = (0, 3, 16, 'dev5')
20
+ __version__ = version = '0.3.16.dev7'
21
+ __version_tuple__ = version_tuple = (0, 3, 16, 'dev7')
@@ -49,6 +49,7 @@ class FileItem:
49
49
  is_git_tracked: Optional[bool] = None
50
50
  git_status: Optional[str] = None
51
51
  is_hidden: bool = False
52
+ is_ignored: bool = False
52
53
  children: Optional[List['FileItem']] = None
53
54
  is_expanded: bool = False
54
55
  is_loaded: bool = False
@@ -107,12 +108,21 @@ class GitManager:
107
108
  def get_file_status(self, file_path: str) -> Dict[str, Any]:
108
109
  """Get Git status for a specific file."""
109
110
  if not self.is_git_repo or not self.repo:
110
- return {"is_tracked": False, "status": None}
111
+ return {"is_tracked": False, "status": None, "is_ignored": False}
111
112
 
112
113
  try:
113
114
  # Convert to relative path from repo root
114
115
  rel_path = os.path.relpath(file_path, self.repo.working_dir)
115
116
 
117
+ # Check if file is ignored
118
+ is_ignored = False
119
+ try:
120
+ # Use git check-ignore to see if file is ignored
121
+ self.repo.git.check_ignore(rel_path)
122
+ is_ignored = True
123
+ except Exception:
124
+ is_ignored = False
125
+
116
126
  # Check if file is tracked
117
127
  try:
118
128
  self.repo.git.ls_files(rel_path, error_unmatch=True)
@@ -128,16 +138,18 @@ class GitManager:
128
138
  status = "modified"
129
139
  else:
130
140
  status = "clean"
141
+ elif is_ignored:
142
+ status = "ignored"
131
143
  else:
132
144
  # Check if it's untracked
133
145
  if os.path.exists(file_path):
134
146
  status = "untracked"
135
147
 
136
- return {"is_tracked": is_tracked, "status": status}
148
+ return {"is_tracked": is_tracked, "status": status, "is_ignored": is_ignored}
137
149
 
138
150
  except Exception as e:
139
151
  logger.debug("Error getting Git status for %s: %s", file_path, e)
140
- return {"is_tracked": False, "status": None}
152
+ return {"is_tracked": False, "status": None, "is_ignored": False}
141
153
 
142
154
  def get_status_summary(self) -> Dict[str, int]:
143
155
  """Get summary of Git status."""
@@ -334,26 +346,32 @@ class ProjectStateManager:
334
346
  with os.scandir(directory_path) as entries:
335
347
  for entry in entries:
336
348
  try:
349
+ # Skip .git folders and their contents
350
+ if entry.name == '.git' and entry.is_dir():
351
+ continue
352
+
337
353
  stat_info = entry.stat()
338
354
  is_hidden = entry.name.startswith('.')
339
355
 
340
356
  # Get Git status if available
341
- git_info = {"is_tracked": False, "status": None}
357
+ git_info = {"is_tracked": False, "status": None, "is_ignored": False}
342
358
  if git_manager:
343
359
  git_info = git_manager.get_file_status(entry.path)
344
360
 
345
361
  # Check if this directory is expanded
346
- is_expanded = entry.path in project_state.expanded_folders if entry.is_dir() else False
362
+ is_expanded = False
347
363
 
348
364
  file_item = FileItem(
349
365
  name=entry.name,
350
366
  path=entry.path,
351
367
  is_directory=entry.is_dir(),
368
+ parent_path=directory_path,
352
369
  size=stat_info.st_size if entry.is_file() else None,
353
370
  modified_time=stat_info.st_mtime,
354
371
  is_git_tracked=git_info["is_tracked"],
355
372
  git_status=git_info["status"],
356
373
  is_hidden=is_hidden,
374
+ is_ignored=git_info["is_ignored"],
357
375
  is_expanded=is_expanded,
358
376
  is_loaded=not entry.is_dir() # Files are always "loaded", directories need expansion
359
377
  )
@@ -414,11 +432,15 @@ class ProjectStateManager:
414
432
  with os.scandir(directory_path) as entries:
415
433
  for entry in entries:
416
434
  try:
435
+ # Skip .git folders and their contents
436
+ if entry.name == '.git' and entry.is_dir():
437
+ continue
438
+
417
439
  stat_info = entry.stat()
418
440
  is_hidden = entry.name.startswith('.')
419
441
 
420
442
  # Get Git status if available
421
- git_info = {"is_tracked": False, "status": None}
443
+ git_info = {"is_tracked": False, "status": None, "is_ignored": False}
422
444
  if git_manager:
423
445
  git_info = git_manager.get_file_status(entry.path)
424
446
 
@@ -438,6 +460,7 @@ class ProjectStateManager:
438
460
  is_git_tracked=git_info["is_tracked"],
439
461
  git_status=git_info["status"],
440
462
  is_hidden=is_hidden,
463
+ is_ignored=git_info["is_ignored"],
441
464
  is_expanded=is_expanded,
442
465
  is_loaded=not entry.is_dir()
443
466
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: portacode
3
- Version: 0.3.16.dev5
3
+ Version: 0.3.16.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