portacode 1.3.29__tar.gz → 1.3.30__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 (93) hide show
  1. {portacode-1.3.29 → portacode-1.3.30}/PKG-INFO +1 -1
  2. {portacode-1.3.29 → portacode-1.3.30}/portacode/_version.py +2 -2
  3. {portacode-1.3.29 → portacode-1.3.30}/portacode/connection/handlers/terminal_handlers.py +21 -8
  4. {portacode-1.3.29 → portacode-1.3.30}/portacode.egg-info/PKG-INFO +1 -1
  5. {portacode-1.3.29 → portacode-1.3.30}/.claude/agents/communication-manager.md +0 -0
  6. {portacode-1.3.29 → portacode-1.3.30}/.claude/settings.local.json +0 -0
  7. {portacode-1.3.29 → portacode-1.3.30}/.gitignore +0 -0
  8. {portacode-1.3.29 → portacode-1.3.30}/.gitmodules +0 -0
  9. {portacode-1.3.29 → portacode-1.3.30}/LICENSE +0 -0
  10. {portacode-1.3.29 → portacode-1.3.30}/MANIFEST.in +0 -0
  11. {portacode-1.3.29 → portacode-1.3.30}/Makefile +0 -0
  12. {portacode-1.3.29 → portacode-1.3.30}/README.md +0 -0
  13. {portacode-1.3.29 → portacode-1.3.30}/backup.sh +0 -0
  14. {portacode-1.3.29 → portacode-1.3.30}/connect.py +0 -0
  15. {portacode-1.3.29 → portacode-1.3.30}/connect.sh +0 -0
  16. {portacode-1.3.29 → portacode-1.3.30}/docker-compose.yaml +0 -0
  17. {portacode-1.3.29 → portacode-1.3.30}/portacode/README.md +0 -0
  18. {portacode-1.3.29 → portacode-1.3.30}/portacode/__init__.py +0 -0
  19. {portacode-1.3.29 → portacode-1.3.30}/portacode/__main__.py +0 -0
  20. {portacode-1.3.29 → portacode-1.3.30}/portacode/cli.py +0 -0
  21. {portacode-1.3.29 → portacode-1.3.30}/portacode/connection/README.md +0 -0
  22. {portacode-1.3.29 → portacode-1.3.30}/portacode/connection/__init__.py +0 -0
  23. {portacode-1.3.29 → portacode-1.3.30}/portacode/connection/client.py +0 -0
  24. {portacode-1.3.29 → portacode-1.3.30}/portacode/connection/handlers/README.md +0 -0
  25. {portacode-1.3.29 → portacode-1.3.30}/portacode/connection/handlers/WEBSOCKET_PROTOCOL.md +0 -0
  26. {portacode-1.3.29 → portacode-1.3.30}/portacode/connection/handlers/__init__.py +0 -0
  27. {portacode-1.3.29 → portacode-1.3.30}/portacode/connection/handlers/base.py +0 -0
  28. {portacode-1.3.29 → portacode-1.3.30}/portacode/connection/handlers/chunked_content.py +0 -0
  29. {portacode-1.3.29 → portacode-1.3.30}/portacode/connection/handlers/file_handlers.py +0 -0
  30. {portacode-1.3.29 → portacode-1.3.30}/portacode/connection/handlers/project_aware_file_handlers.py +0 -0
  31. {portacode-1.3.29 → portacode-1.3.30}/portacode/connection/handlers/project_state/README.md +0 -0
  32. {portacode-1.3.29 → portacode-1.3.30}/portacode/connection/handlers/project_state/__init__.py +0 -0
  33. {portacode-1.3.29 → portacode-1.3.30}/portacode/connection/handlers/project_state/file_system_watcher.py +0 -0
  34. {portacode-1.3.29 → portacode-1.3.30}/portacode/connection/handlers/project_state/git_manager.py +0 -0
  35. {portacode-1.3.29 → portacode-1.3.30}/portacode/connection/handlers/project_state/handlers.py +0 -0
  36. {portacode-1.3.29 → portacode-1.3.30}/portacode/connection/handlers/project_state/manager.py +0 -0
  37. {portacode-1.3.29 → portacode-1.3.30}/portacode/connection/handlers/project_state/models.py +0 -0
  38. {portacode-1.3.29 → portacode-1.3.30}/portacode/connection/handlers/project_state/utils.py +0 -0
  39. {portacode-1.3.29 → portacode-1.3.30}/portacode/connection/handlers/project_state_handlers.py +0 -0
  40. {portacode-1.3.29 → portacode-1.3.30}/portacode/connection/handlers/registry.py +0 -0
  41. {portacode-1.3.29 → portacode-1.3.30}/portacode/connection/handlers/session.py +0 -0
  42. {portacode-1.3.29 → portacode-1.3.30}/portacode/connection/handlers/system_handlers.py +0 -0
  43. {portacode-1.3.29 → portacode-1.3.30}/portacode/connection/handlers/tab_factory.py +0 -0
  44. {portacode-1.3.29 → portacode-1.3.30}/portacode/connection/multiplex.py +0 -0
  45. {portacode-1.3.29 → portacode-1.3.30}/portacode/connection/terminal.py +0 -0
  46. {portacode-1.3.29 → portacode-1.3.30}/portacode/data.py +0 -0
  47. {portacode-1.3.29 → portacode-1.3.30}/portacode/keypair.py +0 -0
  48. {portacode-1.3.29 → portacode-1.3.30}/portacode/logging_categories.py +0 -0
  49. {portacode-1.3.29 → portacode-1.3.30}/portacode/service.py +0 -0
  50. {portacode-1.3.29 → portacode-1.3.30}/portacode/static/js/test-ntp-clock.html +0 -0
  51. {portacode-1.3.29 → portacode-1.3.30}/portacode/static/js/utils/ntp-clock.js +0 -0
  52. {portacode-1.3.29 → portacode-1.3.30}/portacode/utils/NTP_ARCHITECTURE.md +0 -0
  53. {portacode-1.3.29 → portacode-1.3.30}/portacode/utils/__init__.py +0 -0
  54. {portacode-1.3.29 → portacode-1.3.30}/portacode/utils/ntp_clock.py +0 -0
  55. {portacode-1.3.29 → portacode-1.3.30}/portacode.egg-info/SOURCES.txt +0 -0
  56. {portacode-1.3.29 → portacode-1.3.30}/portacode.egg-info/dependency_links.txt +0 -0
  57. {portacode-1.3.29 → portacode-1.3.30}/portacode.egg-info/entry_points.txt +0 -0
  58. {portacode-1.3.29 → portacode-1.3.30}/portacode.egg-info/requires.txt +0 -0
  59. {portacode-1.3.29 → portacode-1.3.30}/portacode.egg-info/top_level.txt +0 -0
  60. {portacode-1.3.29 → portacode-1.3.30}/pyproject.toml +0 -0
  61. {portacode-1.3.29 → portacode-1.3.30}/restore.sh +0 -0
  62. {portacode-1.3.29 → portacode-1.3.30}/run_tests.py +0 -0
  63. {portacode-1.3.29 → portacode-1.3.30}/setup.cfg +0 -0
  64. {portacode-1.3.29 → portacode-1.3.30}/setup.py +0 -0
  65. {portacode-1.3.29 → portacode-1.3.30}/test.sh +0 -0
  66. {portacode-1.3.29 → portacode-1.3.30}/test_modules/README.md +0 -0
  67. {portacode-1.3.29 → portacode-1.3.30}/test_modules/__init__.py +0 -0
  68. {portacode-1.3.29 → portacode-1.3.30}/test_modules/test_device_online.py +0 -0
  69. {portacode-1.3.29 → portacode-1.3.30}/test_modules/test_file_operations.py +0 -0
  70. {portacode-1.3.29 → portacode-1.3.30}/test_modules/test_git_status_ui.py +0 -0
  71. {portacode-1.3.29 → portacode-1.3.30}/test_modules/test_login_flow.py +0 -0
  72. {portacode-1.3.29 → portacode-1.3.30}/test_modules/test_navigate_testing_folder.py +0 -0
  73. {portacode-1.3.29 → portacode-1.3.30}/test_modules/test_terminal_buffer_performance.py +0 -0
  74. {portacode-1.3.29 → portacode-1.3.30}/test_modules/test_terminal_interaction.py +0 -0
  75. {portacode-1.3.29 → portacode-1.3.30}/test_modules/test_terminal_loading_race_condition.py +0 -0
  76. {portacode-1.3.29 → portacode-1.3.30}/test_modules/test_terminal_start.py +0 -0
  77. {portacode-1.3.29 → portacode-1.3.30}/test_request_id.py +0 -0
  78. {portacode-1.3.29 → portacode-1.3.30}/testing_framework/.env.example +0 -0
  79. {portacode-1.3.29 → portacode-1.3.30}/testing_framework/README.md +0 -0
  80. {portacode-1.3.29 → portacode-1.3.30}/testing_framework/__init__.py +0 -0
  81. {portacode-1.3.29 → portacode-1.3.30}/testing_framework/cli.py +0 -0
  82. {portacode-1.3.29 → portacode-1.3.30}/testing_framework/core/__init__.py +0 -0
  83. {portacode-1.3.29 → portacode-1.3.30}/testing_framework/core/base_test.py +0 -0
  84. {portacode-1.3.29 → portacode-1.3.30}/testing_framework/core/cli_manager.py +0 -0
  85. {portacode-1.3.29 → portacode-1.3.30}/testing_framework/core/hierarchical_runner.py +0 -0
  86. {portacode-1.3.29 → portacode-1.3.30}/testing_framework/core/playwright_manager.py +0 -0
  87. {portacode-1.3.29 → portacode-1.3.30}/testing_framework/core/runner.py +0 -0
  88. {portacode-1.3.29 → portacode-1.3.30}/testing_framework/core/shared_cli_manager.py +0 -0
  89. {portacode-1.3.29 → portacode-1.3.30}/testing_framework/core/test_discovery.py +0 -0
  90. {portacode-1.3.29 → portacode-1.3.30}/testing_framework/requirements.txt +0 -0
  91. {portacode-1.3.29 → portacode-1.3.30}/todo/issues/indefinite_resource_loading.md +0 -0
  92. {portacode-1.3.29 → portacode-1.3.30}/todo/issues/premature_terminal_exit.md +0 -0
  93. {portacode-1.3.29 → portacode-1.3.30}/tools/test_python_ntp_clock.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: portacode
3
- Version: 1.3.29
3
+ Version: 1.3.30
4
4
  Summary: Portacode CLI client and SDK
5
5
  Home-page: https://github.com/portacode/portacode
6
6
  Author: Meena Erian
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '1.3.29'
32
- __version_tuple__ = version_tuple = (1, 3, 29)
31
+ __version__ = version = '1.3.30'
32
+ __version_tuple__ = version_tuple = (1, 3, 30)
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -218,24 +218,33 @@ class TerminalListHandler(AsyncHandler):
218
218
 
219
219
  async def handle(self, message: Dict[str, Any], reply_channel: Optional[str] = None) -> None:
220
220
  """Handle the command by executing it and sending the response to the requesting client session."""
221
- logger.info("handler: Processing command %s with reply_channel=%s",
221
+ logger.info("handler: Processing command %s with reply_channel=%s",
222
222
  self.command_name, reply_channel)
223
-
223
+
224
224
  try:
225
225
  response = await self.execute(message)
226
226
  logger.info("handler: Command %s executed successfully", self.command_name)
227
-
227
+
228
+ # Automatically copy request_id if present in the incoming message
229
+ if "request_id" in message and "request_id" not in response:
230
+ response["request_id"] = message["request_id"]
231
+
228
232
  # Get the source client session from the message
229
233
  source_client_session = message.get("source_client_session")
230
234
  project_id = response.get("project_id")
231
-
232
- logger.info("handler: %s response project_id=%s, source_client_session=%s",
235
+
236
+ logger.info("handler: %s response project_id=%s, source_client_session=%s",
233
237
  self.command_name, project_id, source_client_session)
234
-
238
+
235
239
  # Send response only to the requesting client session
236
240
  if source_client_session:
237
241
  # Add client_sessions field to target only the requesting session
238
242
  response["client_sessions"] = [source_client_session]
243
+
244
+ import json
245
+ logger.info("handler: 📤 SENDING EVENT '%s' (via direct control_channel.send)", response.get("event", "unknown"))
246
+ logger.info("handler: 📤 FULL EVENT PAYLOAD: %s", json.dumps(response, indent=2, default=str))
247
+
239
248
  await self.control_channel.send(response)
240
249
  else:
241
250
  # Fallback to original behavior if no source_client_session
@@ -249,15 +258,19 @@ class TerminalListHandler(AsyncHandler):
249
258
  session_manager = self.context.get("session_manager")
250
259
  if not session_manager:
251
260
  raise RuntimeError("Session manager not available")
252
-
261
+
253
262
  # Accept project_id argument: None (default) = only no project, 'all' = all, else = filter by project_id
254
263
  requested_project_id = message.get("project_id")
264
+ logger.info("terminal_list: requested_project_id=%r (type: %s)", requested_project_id, type(requested_project_id))
255
265
 
256
266
  if requested_project_id == "all":
267
+ logger.info("terminal_list: Using 'all' mode to list all terminals")
257
268
  sessions = session_manager.list_sessions(project_id="all")
258
269
  else:
270
+ logger.info("terminal_list: Filtering by project_id=%r", requested_project_id)
259
271
  sessions = session_manager.list_sessions(project_id=requested_project_id)
260
-
272
+
273
+ logger.info("terminal_list: Found %d sessions, returning with project_id=%r", len(sessions), requested_project_id)
261
274
  return {
262
275
  "event": "terminal_list",
263
276
  "sessions": sessions,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: portacode
3
- Version: 1.3.29
3
+ Version: 1.3.30
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
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