cmdop 0.1.25__tar.gz → 0.1.27__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 (217) hide show
  1. {cmdop-0.1.25 → cmdop-0.1.27}/PKG-INFO +47 -19
  2. {cmdop-0.1.25 → cmdop-0.1.27}/README.md +45 -15
  3. {cmdop-0.1.25 → cmdop-0.1.27}/pyproject.toml +2 -6
  4. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/__init__.py +9 -4
  5. cmdop-0.1.27/src/cmdop/_generated/rpc_messages/browser_pb2.py +183 -0
  6. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages/browser_pb2.pyi +6 -2
  7. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/machines/__init__.py +1 -1
  8. cmdop-0.1.27/src/cmdop/api/generated/machines/enums.py +66 -0
  9. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/machines/machines__api__machine_sharing/client.py +21 -6
  10. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/machines/machines__api__machine_sharing/models.py +46 -19
  11. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/machines/machines__api__machine_sharing/sync_client.py +20 -5
  12. cmdop-0.1.27/src/cmdop/api/generated/machines/machines__api__machines/client.py +226 -0
  13. cmdop-0.1.27/src/cmdop/api/generated/machines/machines__api__machines/models.py +332 -0
  14. cmdop-0.1.27/src/cmdop/api/generated/machines/machines__api__machines/sync_client.py +223 -0
  15. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/machines/schema.json +72 -0
  16. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/system/__init__.py +1 -1
  17. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/system/enums.py +0 -52
  18. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/system/schema.json +54 -0
  19. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/system/system__api__oauth/client.py +42 -12
  20. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/system/system__api__oauth/models.py +111 -85
  21. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/system/system__api__oauth/sync_client.py +38 -8
  22. cmdop-0.1.27/src/cmdop/api/generated/system/system__api__system/client.py +243 -0
  23. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/system/system__api__system/models.py +83 -83
  24. cmdop-0.1.27/src/cmdop/api/generated/system/system__api__system/sync_client.py +240 -0
  25. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/workspaces/__init__.py +1 -1
  26. cmdop-0.1.27/src/cmdop/api/generated/workspaces/enums.py +86 -0
  27. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/workspaces/schema.json +47 -0
  28. cmdop-0.1.27/src/cmdop/api/generated/workspaces/workspaces__api__workspaces/client.py +393 -0
  29. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/workspaces/workspaces__api__workspaces/models.py +126 -85
  30. cmdop-0.1.27/src/cmdop/api/generated/workspaces/workspaces__api__workspaces/sync_client.py +386 -0
  31. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/helpers/__init__.py +0 -4
  32. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/services/browser/service/sync.py +4 -0
  33. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/services/files.py +159 -17
  34. cmdop-0.1.25/src/cmdop/_generated/rpc_messages/browser_pb2.py +0 -183
  35. cmdop-0.1.25/src/cmdop/api/generated/machines/enums.py +0 -178
  36. cmdop-0.1.25/src/cmdop/api/generated/machines/machines__api__machines/client.py +0 -161
  37. cmdop-0.1.25/src/cmdop/api/generated/machines/machines__api__machines/models.py +0 -314
  38. cmdop-0.1.25/src/cmdop/api/generated/machines/machines__api__machines/sync_client.py +0 -158
  39. cmdop-0.1.25/src/cmdop/api/generated/system/system__api__system/client.py +0 -168
  40. cmdop-0.1.25/src/cmdop/api/generated/system/system__api__system/sync_client.py +0 -165
  41. cmdop-0.1.25/src/cmdop/api/generated/workspaces/enums.py +0 -223
  42. cmdop-0.1.25/src/cmdop/api/generated/workspaces/workspaces__api__workspaces/client.py +0 -278
  43. cmdop-0.1.25/src/cmdop/api/generated/workspaces/workspaces__api__workspaces/sync_client.py +0 -270
  44. cmdop-0.1.25/src/cmdop/helpers/cleaner.py +0 -53
  45. cmdop-0.1.25/src/cmdop/helpers/formatting.py +0 -15
  46. {cmdop-0.1.25 → cmdop-0.1.27}/.gitignore +0 -0
  47. {cmdop-0.1.25 → cmdop-0.1.27}/LICENSE +0 -0
  48. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/__init__.py +0 -0
  49. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/agent_messages_pb2.py +0 -0
  50. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/agent_messages_pb2.pyi +0 -0
  51. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/agent_messages_pb2_grpc.py +0 -0
  52. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/common_types_pb2.py +0 -0
  53. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/common_types_pb2.pyi +0 -0
  54. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/common_types_pb2_grpc.py +0 -0
  55. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/control_messages_pb2.py +0 -0
  56. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/control_messages_pb2.pyi +0 -0
  57. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/control_messages_pb2_grpc.py +0 -0
  58. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_operations/__init__.py +0 -0
  59. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_operations/archive_pb2.py +0 -0
  60. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_operations/archive_pb2.pyi +0 -0
  61. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_operations/archive_pb2_grpc.py +0 -0
  62. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_operations/changes_pb2.py +0 -0
  63. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_operations/changes_pb2.pyi +0 -0
  64. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_operations/changes_pb2_grpc.py +0 -0
  65. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_operations/common_pb2.py +0 -0
  66. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_operations/common_pb2.pyi +0 -0
  67. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_operations/common_pb2_grpc.py +0 -0
  68. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_operations/directory_pb2.py +0 -0
  69. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_operations/directory_pb2.pyi +0 -0
  70. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_operations/directory_pb2_grpc.py +0 -0
  71. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_operations/file_crud_pb2.py +0 -0
  72. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_operations/file_crud_pb2.pyi +0 -0
  73. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_operations/file_crud_pb2_grpc.py +0 -0
  74. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_operations/hls_pb2.py +0 -0
  75. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_operations/hls_pb2.pyi +0 -0
  76. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_operations/hls_pb2_grpc.py +0 -0
  77. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_operations/requests_pb2.py +0 -0
  78. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_operations/requests_pb2.pyi +0 -0
  79. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_operations/requests_pb2_grpc.py +0 -0
  80. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_operations/search_pb2.py +0 -0
  81. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_operations/search_pb2.pyi +0 -0
  82. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_operations/search_pb2_grpc.py +0 -0
  83. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_operations/transfer_pb2.py +0 -0
  84. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_operations/transfer_pb2.pyi +0 -0
  85. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_operations/transfer_pb2_grpc.py +0 -0
  86. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_operations_pb2.py +0 -0
  87. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_operations_pb2.pyi +0 -0
  88. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_operations_pb2_grpc.py +0 -0
  89. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_rpc/__init__.py +0 -0
  90. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_rpc/archive_pb2.py +0 -0
  91. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_rpc/archive_pb2.pyi +0 -0
  92. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_rpc/archive_pb2_grpc.py +0 -0
  93. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_rpc/directory_pb2.py +0 -0
  94. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_rpc/directory_pb2.pyi +0 -0
  95. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_rpc/directory_pb2_grpc.py +0 -0
  96. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_rpc/file_crud_pb2.py +0 -0
  97. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_rpc/file_crud_pb2.pyi +0 -0
  98. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_rpc/file_crud_pb2_grpc.py +0 -0
  99. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_rpc/hls_pb2.py +0 -0
  100. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_rpc/hls_pb2.pyi +0 -0
  101. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_rpc/hls_pb2_grpc.py +0 -0
  102. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_rpc/search_pb2.py +0 -0
  103. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_rpc/search_pb2.pyi +0 -0
  104. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_rpc/search_pb2_grpc.py +0 -0
  105. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_rpc_pb2.py +0 -0
  106. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_rpc_pb2.pyi +0 -0
  107. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/file_rpc_pb2_grpc.py +0 -0
  108. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/message_pool.py +0 -0
  109. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/py.typed +0 -0
  110. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages/__init__.py +0 -0
  111. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages/agent_pb2.py +0 -0
  112. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages/agent_pb2.pyi +0 -0
  113. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages/agent_pb2_grpc.py +0 -0
  114. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages/browser_pb2_grpc.py +0 -0
  115. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages/device_pb2.py +0 -0
  116. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages/device_pb2.pyi +0 -0
  117. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages/device_pb2_grpc.py +0 -0
  118. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages/extract_pb2.py +0 -0
  119. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages/extract_pb2.pyi +0 -0
  120. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages/extract_pb2_grpc.py +0 -0
  121. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages/health_pb2.py +0 -0
  122. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages/health_pb2.pyi +0 -0
  123. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages/health_pb2_grpc.py +0 -0
  124. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages/history_pb2.py +0 -0
  125. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages/history_pb2.pyi +0 -0
  126. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages/history_pb2_grpc.py +0 -0
  127. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages/lifecycle_pb2.py +0 -0
  128. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages/lifecycle_pb2.pyi +0 -0
  129. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages/lifecycle_pb2_grpc.py +0 -0
  130. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages/push_pb2.py +0 -0
  131. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages/push_pb2.pyi +0 -0
  132. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages/push_pb2_grpc.py +0 -0
  133. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages/session_pb2.py +0 -0
  134. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages/session_pb2.pyi +0 -0
  135. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages/session_pb2_grpc.py +0 -0
  136. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages/terminal_pb2.py +0 -0
  137. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages/terminal_pb2.pyi +0 -0
  138. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages/terminal_pb2_grpc.py +0 -0
  139. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages_pb2.py +0 -0
  140. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages_pb2.pyi +0 -0
  141. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/rpc_messages_pb2_grpc.py +0 -0
  142. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/service_pb2.py +0 -0
  143. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/service_pb2.pyi +0 -0
  144. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/service_pb2_grpc.py +0 -0
  145. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/tunnel_pb2.py +0 -0
  146. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/tunnel_pb2.pyi +0 -0
  147. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/_generated/tunnel_pb2_grpc.py +0 -0
  148. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/__init__.py +0 -0
  149. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/__init__.py +0 -0
  150. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/machines/client.py +0 -0
  151. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/machines/logger.py +0 -0
  152. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/machines/machines__api__machine_sharing/__init__.py +0 -0
  153. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/machines/machines__api__machines/__init__.py +0 -0
  154. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/machines/retry.py +0 -0
  155. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/machines/sync_client.py +0 -0
  156. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/system/client.py +0 -0
  157. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/system/logger.py +0 -0
  158. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/system/retry.py +0 -0
  159. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/system/sync_client.py +0 -0
  160. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/system/system__api__oauth/__init__.py +0 -0
  161. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/system/system__api__system/__init__.py +0 -0
  162. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/workspaces/client.py +0 -0
  163. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/workspaces/logger.py +0 -0
  164. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/workspaces/retry.py +0 -0
  165. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/workspaces/sync_client.py +0 -0
  166. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/api/generated/workspaces/workspaces__api__workspaces/__init__.py +0 -0
  167. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/client.py +0 -0
  168. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/config.py +0 -0
  169. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/discovery.py +0 -0
  170. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/exceptions.py +0 -0
  171. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/helpers/network_analyzer.py +0 -0
  172. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/logging.py +0 -0
  173. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/models/__init__.py +0 -0
  174. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/models/agent.py +0 -0
  175. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/models/base.py +0 -0
  176. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/models/config.py +0 -0
  177. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/models/extract.py +0 -0
  178. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/models/files.py +0 -0
  179. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/models/terminal.py +0 -0
  180. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/py.typed +0 -0
  181. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/services/__init__.py +0 -0
  182. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/services/agent.py +0 -0
  183. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/services/base.py +0 -0
  184. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/services/browser/__init__.py +0 -0
  185. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/services/browser/capabilities/__init__.py +0 -0
  186. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/services/browser/capabilities/_base.py +0 -0
  187. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/services/browser/capabilities/_helpers.py +0 -0
  188. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/services/browser/capabilities/dom.py +0 -0
  189. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/services/browser/capabilities/fetch.py +0 -0
  190. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/services/browser/capabilities/input.py +0 -0
  191. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/services/browser/capabilities/network.py +0 -0
  192. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/services/browser/capabilities/scroll.py +0 -0
  193. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/services/browser/capabilities/timing.py +0 -0
  194. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/services/browser/capabilities/visual.py +0 -0
  195. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/services/browser/js/__init__.py +0 -0
  196. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/services/browser/js/core.py +0 -0
  197. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/services/browser/js/fetch.py +0 -0
  198. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/services/browser/js/interaction.py +0 -0
  199. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/services/browser/js/scroll.py +0 -0
  200. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/services/browser/models.py +0 -0
  201. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/services/browser/parsing.py +0 -0
  202. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/services/browser/service/__init__.py +0 -0
  203. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/services/browser/service/_helpers.py +0 -0
  204. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/services/browser/service/aio.py +0 -0
  205. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/services/browser/session.py +0 -0
  206. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/services/extract.py +0 -0
  207. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/services/terminal.py +0 -0
  208. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/streaming/__init__.py +0 -0
  209. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/streaming/base.py +0 -0
  210. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/streaming/handlers.py +0 -0
  211. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/streaming/terminal.py +0 -0
  212. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/transport/__init__.py +0 -0
  213. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/transport/auth.py +0 -0
  214. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/transport/base.py +0 -0
  215. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/transport/discovery.py +0 -0
  216. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/transport/local.py +0 -0
  217. {cmdop-0.1.25 → cmdop-0.1.27}/src/cmdop/transport/remote.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cmdop
3
- Version: 0.1.25
3
+ Version: 0.1.27
4
4
  Summary: Python SDK for CMDOP agent interaction
5
5
  Project-URL: Homepage, https://cmdop.com
6
6
  Project-URL: Documentation, https://cmdop.com
@@ -19,17 +19,15 @@ Classifier: Programming Language :: Python :: 3.12
19
19
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
20
20
  Classifier: Typing :: Typed
21
21
  Requires-Python: >=3.10
22
- Requires-Dist: beautifulsoup4>=4.12.0
22
+ Requires-Dist: beautifulsoup4>=4.14.3
23
23
  Requires-Dist: grpcio>=1.60.0
24
24
  Requires-Dist: httpx>=0.27.0
25
- Requires-Dist: lxml>=5.0.0
26
25
  Requires-Dist: protobuf>=4.25.0
27
26
  Requires-Dist: pydantic-settings>=2.0.0
28
27
  Requires-Dist: pydantic>=2.5.0
29
28
  Requires-Dist: rich>=13.0.0
30
29
  Requires-Dist: toon-python>=0.1.2
31
30
  Provides-Extra: dev
32
- Requires-Dist: beautifulsoup4>=4.12.0; extra == 'dev'
33
31
  Requires-Dist: grpcio-tools>=1.60.0; extra == 'dev'
34
32
  Requires-Dist: mypy>=1.8.0; extra == 'dev'
35
33
  Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
@@ -91,8 +89,28 @@ with client.browser.create_session(headless=False) as s:
91
89
  s.get_page_info() # Full page info
92
90
  s.get_cookies()
93
91
  s.set_cookies([...])
92
+
93
+ # Fast mode: block images and media for faster page loads
94
+ with client.browser.create_session(
95
+ block_images=True,
96
+ block_media=True,
97
+ ) as s:
98
+ s.navigate("https://shop.com/catalog")
99
+ items = s.dom.extract(".product-title")
94
100
  ```
95
101
 
102
+ **`create_session` parameters:**
103
+ | Parameter | Default | Description |
104
+ |-----------|---------|-------------|
105
+ | `start_url` | `None` | Initial URL to navigate to |
106
+ | `provider` | `"camoufox"` | Browser provider (`"camoufox"` or `"rod"`) |
107
+ | `profile_id` | `None` | Profile ID for session persistence (cookies, localStorage) |
108
+ | `headless` | `False` | Run browser without UI |
109
+ | `width` | `1280` | Viewport width |
110
+ | `height` | `800` | Viewport height |
111
+ | `block_images` | `False` | Disable loading images (set at launch, cannot change at runtime) |
112
+ | `block_media` | `False` | Disable loading audio/video (set at launch, cannot change at runtime) |
113
+
96
114
  **WaitUntil options:**
97
115
  | Value | Description |
98
116
  |-------|-------------|
@@ -143,8 +161,6 @@ s.timing.timeout(fn, 10, cleanup) # Run with timeout
143
161
  ```python
144
162
  s.dom.html(".container") # Get HTML
145
163
  s.dom.text(".title") # Get text
146
- s.dom.soup(".items") # → SoupWrapper (chainable BS4)
147
- s.dom.parse(html_string) # → BeautifulSoup
148
164
  s.dom.extract(".items", "href") # Get attr list
149
165
  s.dom.select("#country", "US") # Dropdown select
150
166
  s.dom.close_modal() # Close dialogs/popups
@@ -275,14 +291,31 @@ client.terminal.close(session.session_id)
275
291
  ## Files
276
292
 
277
293
  ```python
294
+ # Local IPC - session_id not required
278
295
  client.files.list("/var/log")
279
296
  client.files.read("/etc/nginx/nginx.conf")
280
297
  client.files.write("/tmp/config.json", b'{"key": "value"}')
281
- client.files.delete("/tmp/old.txt")
282
- client.files.copy("/src", "/dst")
283
- client.files.move("/old", "/new")
284
- client.files.mkdir("/new/dir")
285
- client.files.info("/path")
298
+
299
+ # Remote - session_id required
300
+ session = client.terminal.get_active_session()
301
+ client.files.set_session_id(session.session_id) # Set once
302
+ client.files.list("/var/log")
303
+ client.files.read("/etc/nginx/nginx.conf")
304
+
305
+ # Or pass session_id directly to each call
306
+ client.files.list("/var/log", session_id=session.session_id)
307
+ ```
308
+
309
+ **Files methods:**
310
+ ```python
311
+ client.files.list("/path", include_hidden=True) # List directory
312
+ client.files.read("/path/file.txt") # Read file
313
+ client.files.write("/path/file.txt", b"data") # Write file
314
+ client.files.delete("/path", recursive=True) # Delete file/dir
315
+ client.files.copy("/src", "/dst") # Copy
316
+ client.files.move("/old", "/new") # Move/rename
317
+ client.files.mkdir("/new/dir") # Create directory
318
+ client.files.info("/path") # Get file info
286
319
  ```
287
320
 
288
321
  ## SDKBaseModel
@@ -302,18 +335,13 @@ class Product(SDKBaseModel):
302
335
  products = Product.from_list(raw["items"]) # Auto dedupe + filter
303
336
  ```
304
337
 
305
- ## Utilities
338
+ ## Logging
306
339
 
307
340
  ```python
308
- from cmdop import get_logger, json_to_toon
341
+ from cmdop import get_logger
309
342
 
310
- # Logging (rich console + file)
311
343
  log = get_logger(__name__)
312
- log.info("Starting")
313
-
314
- # TOON format (30-50% token savings)
315
- toon = json_to_toon({"name": "Alice", "age": 25})
316
- # → "name: Alice\nage: 25"
344
+ log.info("Starting") # Rich console + file output
317
345
  ```
318
346
 
319
347
  ## Requirements
@@ -50,8 +50,28 @@ with client.browser.create_session(headless=False) as s:
50
50
  s.get_page_info() # Full page info
51
51
  s.get_cookies()
52
52
  s.set_cookies([...])
53
+
54
+ # Fast mode: block images and media for faster page loads
55
+ with client.browser.create_session(
56
+ block_images=True,
57
+ block_media=True,
58
+ ) as s:
59
+ s.navigate("https://shop.com/catalog")
60
+ items = s.dom.extract(".product-title")
53
61
  ```
54
62
 
63
+ **`create_session` parameters:**
64
+ | Parameter | Default | Description |
65
+ |-----------|---------|-------------|
66
+ | `start_url` | `None` | Initial URL to navigate to |
67
+ | `provider` | `"camoufox"` | Browser provider (`"camoufox"` or `"rod"`) |
68
+ | `profile_id` | `None` | Profile ID for session persistence (cookies, localStorage) |
69
+ | `headless` | `False` | Run browser without UI |
70
+ | `width` | `1280` | Viewport width |
71
+ | `height` | `800` | Viewport height |
72
+ | `block_images` | `False` | Disable loading images (set at launch, cannot change at runtime) |
73
+ | `block_media` | `False` | Disable loading audio/video (set at launch, cannot change at runtime) |
74
+
55
75
  **WaitUntil options:**
56
76
  | Value | Description |
57
77
  |-------|-------------|
@@ -102,8 +122,6 @@ s.timing.timeout(fn, 10, cleanup) # Run with timeout
102
122
  ```python
103
123
  s.dom.html(".container") # Get HTML
104
124
  s.dom.text(".title") # Get text
105
- s.dom.soup(".items") # → SoupWrapper (chainable BS4)
106
- s.dom.parse(html_string) # → BeautifulSoup
107
125
  s.dom.extract(".items", "href") # Get attr list
108
126
  s.dom.select("#country", "US") # Dropdown select
109
127
  s.dom.close_modal() # Close dialogs/popups
@@ -234,14 +252,31 @@ client.terminal.close(session.session_id)
234
252
  ## Files
235
253
 
236
254
  ```python
255
+ # Local IPC - session_id not required
237
256
  client.files.list("/var/log")
238
257
  client.files.read("/etc/nginx/nginx.conf")
239
258
  client.files.write("/tmp/config.json", b'{"key": "value"}')
240
- client.files.delete("/tmp/old.txt")
241
- client.files.copy("/src", "/dst")
242
- client.files.move("/old", "/new")
243
- client.files.mkdir("/new/dir")
244
- client.files.info("/path")
259
+
260
+ # Remote - session_id required
261
+ session = client.terminal.get_active_session()
262
+ client.files.set_session_id(session.session_id) # Set once
263
+ client.files.list("/var/log")
264
+ client.files.read("/etc/nginx/nginx.conf")
265
+
266
+ # Or pass session_id directly to each call
267
+ client.files.list("/var/log", session_id=session.session_id)
268
+ ```
269
+
270
+ **Files methods:**
271
+ ```python
272
+ client.files.list("/path", include_hidden=True) # List directory
273
+ client.files.read("/path/file.txt") # Read file
274
+ client.files.write("/path/file.txt", b"data") # Write file
275
+ client.files.delete("/path", recursive=True) # Delete file/dir
276
+ client.files.copy("/src", "/dst") # Copy
277
+ client.files.move("/old", "/new") # Move/rename
278
+ client.files.mkdir("/new/dir") # Create directory
279
+ client.files.info("/path") # Get file info
245
280
  ```
246
281
 
247
282
  ## SDKBaseModel
@@ -261,18 +296,13 @@ class Product(SDKBaseModel):
261
296
  products = Product.from_list(raw["items"]) # Auto dedupe + filter
262
297
  ```
263
298
 
264
- ## Utilities
299
+ ## Logging
265
300
 
266
301
  ```python
267
- from cmdop import get_logger, json_to_toon
302
+ from cmdop import get_logger
268
303
 
269
- # Logging (rich console + file)
270
304
  log = get_logger(__name__)
271
- log.info("Starting")
272
-
273
- # TOON format (30-50% token savings)
274
- toon = json_to_toon({"name": "Alice", "age": 25})
275
- # → "name: Alice\nage: 25"
305
+ log.info("Starting") # Rich console + file output
276
306
  ```
277
307
 
278
308
  ## Requirements
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "cmdop"
3
- version = "0.1.25"
3
+ version = "0.1.27"
4
4
  description = "Python SDK for CMDOP agent interaction"
5
5
  readme = "README.md"
6
6
  license = { text = "MIT" }
@@ -32,9 +32,7 @@ dependencies = [
32
32
  "toon-python>=0.1.2",
33
33
  # Logging
34
34
  "rich>=13.0.0",
35
- # HTML parsing (browser SDK)
36
- "beautifulsoup4>=4.12.0",
37
- "lxml>=5.0.0",
35
+ "beautifulsoup4>=4.14.3",
38
36
  ]
39
37
 
40
38
  [project.optional-dependencies]
@@ -47,8 +45,6 @@ dev = [
47
45
  "ruff>=0.1.0",
48
46
  # For proto generation (still uses grpcio-tools with betterproto plugin)
49
47
  "grpcio-tools>=1.60.0",
50
- # HTML parsing for tests
51
- "beautifulsoup4>=4.12.0",
52
48
  ]
53
49
 
54
50
  [project.urls]
@@ -116,7 +116,11 @@ from cmdop.discovery import (
116
116
  get_online_agents,
117
117
  list_agents,
118
118
  )
119
- from cmdop.helpers import json_to_toon, JsonCleaner
119
+ from cmdop.helpers import (
120
+ NetworkAnalyzer,
121
+ NetworkSnapshot,
122
+ RequestSnapshot,
123
+ )
120
124
  from cmdop.logging import (
121
125
  get_logger,
122
126
  setup_logging,
@@ -124,7 +128,7 @@ from cmdop.logging import (
124
128
  get_log_dir,
125
129
  )
126
130
 
127
- __version__ = "0.1.25"
131
+ __version__ = "0.1.27"
128
132
 
129
133
  __all__ = [
130
134
  # Version
@@ -218,8 +222,9 @@ __all__ = [
218
222
  "BrowserNavigationError",
219
223
  "BrowserElementNotFoundError",
220
224
  # Helpers
221
- "json_to_toon",
222
- "JsonCleaner",
225
+ "NetworkAnalyzer",
226
+ "NetworkSnapshot",
227
+ "RequestSnapshot",
223
228
  # Logging
224
229
  "get_logger",
225
230
  "setup_logging",
@@ -0,0 +1,183 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # NO CHECKED-IN PROTOBUF GENCODE
4
+ # source: rpc_messages/browser.proto
5
+ # Protobuf Python Version: 6.31.1
6
+ """Generated protocol buffer code."""
7
+ from google.protobuf import descriptor as _descriptor
8
+ from google.protobuf import descriptor_pool as _descriptor_pool
9
+ from google.protobuf import runtime_version as _runtime_version
10
+ from google.protobuf import symbol_database as _symbol_database
11
+ from google.protobuf.internal import builder as _builder
12
+ _runtime_version.ValidateProtobufRuntimeVersion(
13
+ _runtime_version.Domain.PUBLIC,
14
+ 6,
15
+ 31,
16
+ 1,
17
+ '',
18
+ 'rpc_messages/browser.proto'
19
+ )
20
+ # @@protoc_insertion_point(imports)
21
+
22
+ _sym_db = _symbol_database.Default()
23
+
24
+
25
+
26
+
27
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1arpc_messages/browser.proto\x12\x08terminal\"\xc6\x01\n\x1b\x42rowserCreateSessionRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x10\n\x08provider\x18\x02 \x01(\t\x12\x12\n\nprofile_id\x18\x03 \x01(\t\x12\x11\n\tstart_url\x18\x04 \x01(\t\x12\x10\n\x08headless\x18\x05 \x01(\x08\x12\r\n\x05width\x18\x06 \x01(\x05\x12\x0e\n\x06height\x18\x07 \x01(\x05\x12\x14\n\x0c\x62lock_images\x18\x08 \x01(\x08\x12\x13\n\x0b\x62lock_media\x18\t \x01(\x08\"Z\n\x1c\x42rowserCreateSessionResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"L\n\x1a\x42rowserCloseSessionRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\"=\n\x1b\x42rowserCloseSessionResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"\x92\x01\n\x16\x42rowserNavigateRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x0b\n\x03url\x18\x03 \x01(\t\x12\x12\n\ntimeout_ms\x18\x04 \x01(\x05\x12\'\n\nwait_until\x18\x05 \x01(\x0e\x32\x13.terminal.WaitUntil\"L\n\x17\x42rowserNavigateResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x11\n\tfinal_url\x18\x02 \x01(\t\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"\x80\x01\n\x13\x42rowserClickRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x10\n\x08selector\x18\x03 \x01(\t\x12\x12\n\ntimeout_ms\x18\x04 \x01(\x05\x12\x13\n\x0bmove_cursor\x18\x05 \x01(\x08\"6\n\x14\x42rowserClickResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"\x8d\x01\n\x12\x42rowserTypeRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x10\n\x08selector\x18\x03 \x01(\t\x12\x0c\n\x04text\x18\x04 \x01(\t\x12\x12\n\nhuman_like\x18\x05 \x01(\x08\x12\x13\n\x0b\x63lear_first\x18\x06 \x01(\x08\"5\n\x13\x42rowserTypeResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"j\n\x12\x42rowserWaitRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x10\n\x08selector\x18\x03 \x01(\t\x12\x12\n\ntimeout_ms\x18\x04 \x01(\x05\"D\n\x13\x42rowserWaitResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\r\n\x05\x66ound\x18\x02 \x01(\x08\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"{\n\x15\x42rowserExtractRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x10\n\x08selector\x18\x03 \x01(\t\x12\x11\n\tattribute\x18\x04 \x01(\t\x12\r\n\x05limit\x18\x05 \x01(\x05\"W\n\x16\x42rowserExtractResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0e\n\x06values\x18\x02 \x03(\t\x12\r\n\x05\x63ount\x18\x03 \x01(\x05\x12\r\n\x05\x65rror\x18\x04 \x01(\t\"\x7f\n\x1a\x42rowserExtractRegexRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x0f\n\x07pattern\x18\x03 \x01(\t\x12\x11\n\tfrom_html\x18\x04 \x01(\x08\x12\r\n\x05limit\x18\x05 \x01(\x05\"]\n\x1b\x42rowserExtractRegexResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0f\n\x07matches\x18\x02 \x03(\t\x12\r\n\x05\x63ount\x18\x03 \x01(\x05\x12\r\n\x05\x65rror\x18\x04 \x01(\t\"Y\n\x15\x42rowserGetHTMLRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x10\n\x08selector\x18\x03 \x01(\t\"F\n\x16\x42rowserGetHTMLResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0c\n\x04html\x18\x02 \x01(\t\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"Y\n\x15\x42rowserGetTextRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x10\n\x08selector\x18\x03 \x01(\t\"F\n\x16\x42rowserGetTextResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0c\n\x04text\x18\x02 \x01(\t\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"]\n\x1b\x42rowserExecuteScriptRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x0e\n\x06script\x18\x03 \x01(\t\"N\n\x1c\x42rowserExecuteScriptResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0e\n\x06result\x18\x02 \x01(\t\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"~\n\x18\x42rowserScreenshotRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x11\n\tfull_page\x18\x03 \x01(\x08\x12\x0e\n\x06\x66ormat\x18\x04 \x01(\t\x12\x0f\n\x07quality\x18\x05 \x01(\x05\"I\n\x19\x42rowserScreenshotResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"H\n\x16\x42rowserGetStateRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\"U\n\x17\x42rowserGetStateResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0b\n\x03url\x18\x02 \x01(\t\x12\r\n\x05title\x18\x03 \x01(\t\x12\r\n\x05\x65rror\x18\x04 \x01(\t\"K\n\x19\x42rowserGetPageInfoRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\"\xbb\x03\n\x1a\x42rowserGetPageInfoResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\r\n\x05\x65rror\x18\x02 \x01(\t\x12\x0b\n\x03url\x18\x03 \x01(\t\x12\r\n\x05title\x18\x04 \x01(\t\x12\x13\n\x0bpage_height\x18\x05 \x01(\x05\x12\x17\n\x0fviewport_height\x18\x06 \x01(\x05\x12\x16\n\x0eviewport_width\x18\x07 \x01(\x05\x12\x10\n\x08scroll_x\x18\x08 \x01(\x05\x12\x10\n\x08scroll_y\x18\t \x01(\x05\x12\x0e\n\x06\x61t_top\x18\n \x01(\x08\x12\x11\n\tat_bottom\x18\x0b \x01(\x08\x12\x14\n\x0cload_time_ms\x18\x0c \x01(\x05\x12\x15\n\rcookies_count\x18\r \x01(\x05\x12\x10\n\x08is_https\x18\x0e \x01(\x08\x12\x13\n\x0bhas_iframes\x18\x0f \x01(\x08\x12\x15\n\rdom_nodes_raw\x18\x10 \x01(\x05\x12\x19\n\x11\x64om_nodes_cleaned\x18\x11 \x01(\x05\x12\x17\n\x0ftokens_estimate\x18\x12 \x01(\x05\x12\x1b\n\x13\x63loudflare_detected\x18\x13 \x01(\x08\x12\x18\n\x10\x63\x61ptcha_detected\x18\x14 \x01(\x08\"\x91\x01\n\rBrowserCookie\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\x12\x0e\n\x06\x64omain\x18\x03 \x01(\t\x12\x0c\n\x04path\x18\x04 \x01(\t\x12\x0e\n\x06secure\x18\x05 \x01(\x08\x12\x11\n\thttp_only\x18\x06 \x01(\x08\x12\x11\n\tsame_site\x18\x07 \x01(\t\x12\x0f\n\x07\x65xpires\x18\x08 \x01(\x03\"t\n\x18\x42rowserSetCookiesRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12(\n\x07\x63ookies\x18\x03 \x03(\x0b\x32\x17.terminal.BrowserCookie\";\n\x19\x42rowserSetCookiesResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"Z\n\x18\x42rowserGetCookiesRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x0e\n\x06\x64omain\x18\x03 \x01(\t\"e\n\x19\x42rowserGetCookiesResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12(\n\x07\x63ookies\x18\x02 \x03(\x0b\x32\x17.terminal.BrowserCookie\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"n\n\x17\x42rowserMouseMoveRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\t\n\x01x\x18\x03 \x01(\x05\x12\t\n\x01y\x18\x04 \x01(\x05\x12\r\n\x05steps\x18\x05 \x01(\x05\":\n\x18\x42rowserMouseMoveResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"k\n\x13\x42rowserHoverRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x10\n\x08selector\x18\x03 \x01(\t\x12\x12\n\ntimeout_ms\x18\x04 \x01(\x05\"6\n\x14\x42rowserHoverResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"\x9e\x01\n\x14\x42rowserScrollRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x11\n\tdirection\x18\x03 \x01(\t\x12\x0e\n\x06\x61mount\x18\x04 \x01(\x05\x12\x10\n\x08selector\x18\x05 \x01(\t\x12\x11\n\tcontainer\x18\x06 \x01(\t\x12\x0e\n\x06smooth\x18\x07 \x01(\x08\"\xb1\x01\n\x15\x42rowserScrollResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x10\n\x08scroll_x\x18\x02 \x01(\x05\x12\x10\n\x08scroll_y\x18\x03 \x01(\x05\x12\x13\n\x0bscrolled_by\x18\x04 \x01(\x05\x12\x13\n\x0bpage_height\x18\x05 \x01(\x05\x12\x17\n\x0fviewport_height\x18\x06 \x01(\x05\x12\x11\n\tat_bottom\x18\x07 \x01(\x08\x12\r\n\x05\x65rror\x18\x08 \x01(\t\"\xd5\x01\n\x1f\x42rowserValidateSelectorsRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x0c\n\x04item\x18\x03 \x01(\t\x12\x45\n\x06\x66ields\x18\x04 \x03(\x0b\x32\x35.terminal.BrowserValidateSelectorsRequest.FieldsEntry\x1a-\n\x0b\x46ieldsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xd2\x02\n BrowserValidateSelectorsResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\r\n\x05valid\x18\x02 \x01(\x08\x12\x46\n\x06\x63ounts\x18\x03 \x03(\x0b\x32\x36.terminal.BrowserValidateSelectorsResponse.CountsEntry\x12H\n\x07samples\x18\x04 \x03(\x0b\x32\x37.terminal.BrowserValidateSelectorsResponse.SamplesEntry\x12\x0e\n\x06\x65rrors\x18\x05 \x03(\t\x12\r\n\x05\x65rror\x18\x06 \x01(\t\x1a-\n\x0b\x43ountsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x1a.\n\x0cSamplesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"}\n\x19\x42rowserExtractDataRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x0c\n\x04item\x18\x03 \x01(\t\x12\x13\n\x0b\x66ields_json\x18\x04 \x01(\t\x12\r\n\x05limit\x18\x05 \x01(\x05\"_\n\x1a\x42rowserExtractDataResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x12\n\nitems_json\x18\x02 \x01(\t\x12\r\n\x05\x63ount\x18\x03 \x01(\x05\x12\r\n\x05\x65rror\x18\x04 \x01(\t\"\x7f\n\x1b\x42rowserNetworkEnableRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x15\n\rmax_exchanges\x18\x03 \x01(\x05\x12\x19\n\x11max_response_size\x18\x04 \x01(\x03\">\n\x1c\x42rowserNetworkEnableResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"N\n\x1c\x42rowserNetworkDisableRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\"?\n\x1d\x42rowserNetworkDisableResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"\xb6\x01\n!BrowserNetworkGetExchangesRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x13\n\x0burl_pattern\x18\x03 \x01(\t\x12\x0f\n\x07methods\x18\x04 \x03(\t\x12\x14\n\x0cstatus_codes\x18\x05 \x03(\x05\x12\x16\n\x0eresource_types\x18\x06 \x03(\t\x12\r\n\x05limit\x18\x07 \x01(\x05\"\x81\x01\n\"BrowserNetworkGetExchangesResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12,\n\texchanges\x18\x02 \x03(\x0b\x32\x19.terminal.NetworkExchange\x12\r\n\x05\x63ount\x18\x03 \x01(\x05\x12\r\n\x05\x65rror\x18\x04 \x01(\t\"g\n BrowserNetworkGetExchangeRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x13\n\x0b\x65xchange_id\x18\x03 \x01(\t\"p\n!BrowserNetworkGetExchangeResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12+\n\x08\x65xchange\x18\x02 \x01(\x0b\x32\x19.terminal.NetworkExchange\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"c\n\x1c\x42rowserNetworkGetLastRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x13\n\x0burl_pattern\x18\x03 \x01(\t\"l\n\x1d\x42rowserNetworkGetLastResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12+\n\x08\x65xchange\x18\x02 \x01(\x0b\x32\x19.terminal.NetworkExchange\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"L\n\x1a\x42rowserNetworkClearRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\"=\n\x1b\x42rowserNetworkClearResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"L\n\x1a\x42rowserNetworkStatsRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\"\xae\x01\n\x1b\x42rowserNetworkStatsResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0f\n\x07\x65nabled\x18\x02 \x01(\x08\x12\x16\n\x0etotal_captured\x18\x03 \x01(\x05\x12\x14\n\x0ctotal_errors\x18\x04 \x01(\x05\x12\x13\n\x0btotal_bytes\x18\x05 \x01(\x03\x12\x1b\n\x13\x61verage_duration_ms\x18\x06 \x01(\x05\x12\r\n\x05\x65rror\x18\x07 \x01(\t\"\xa4\x01\n\x1e\x42rowserNetworkExportHARRequest\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x1a\n\x12\x62rowser_session_id\x18\x02 \x01(\t\x12\x13\n\x0burl_pattern\x18\x03 \x01(\t\x12\x0f\n\x07methods\x18\x04 \x03(\t\x12\x14\n\x0cstatus_codes\x18\x05 \x03(\x05\x12\x16\n\x0eresource_types\x18\x06 \x03(\t\"S\n\x1f\x42rowserNetworkExportHARResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x10\n\x08har_data\x18\x02 \x01(\x0c\x12\r\n\x05\x65rror\x18\x03 \x01(\t\"\xd0\x01\n\x0eNetworkRequest\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x0e\n\x06method\x18\x02 \x01(\t\x12\x36\n\x07headers\x18\x03 \x03(\x0b\x32%.terminal.NetworkRequest.HeadersEntry\x12\x0c\n\x04\x62ody\x18\x04 \x01(\x0c\x12\x14\n\x0c\x63ontent_type\x18\x05 \x01(\t\x12\x15\n\rresource_type\x18\x06 \x01(\t\x1a.\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xe5\x01\n\x0fNetworkResponse\x12\x0e\n\x06status\x18\x01 \x01(\x05\x12\x13\n\x0bstatus_text\x18\x02 \x01(\t\x12\x37\n\x07headers\x18\x03 \x03(\x0b\x32&.terminal.NetworkResponse.HeadersEntry\x12\x0c\n\x04\x62ody\x18\x04 \x01(\x0c\x12\x14\n\x0c\x63ontent_type\x18\x05 \x01(\t\x12\x0c\n\x04size\x18\x06 \x01(\x03\x12\x12\n\nfrom_cache\x18\x07 \x01(\x08\x1a.\n\x0cHeadersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x7f\n\rNetworkTiming\x12\x15\n\rstarted_at_ms\x18\x01 \x01(\x03\x12\x13\n\x0b\x65nded_at_ms\x18\x02 \x01(\x03\x12\x13\n\x0b\x64uration_ms\x18\x03 \x01(\x05\x12\x14\n\x0cwait_time_ms\x18\x04 \x01(\x05\x12\x17\n\x0freceive_time_ms\x18\x05 \x01(\x05\"\xd2\x01\n\x0fNetworkExchange\x12\n\n\x02id\x18\x01 \x01(\t\x12)\n\x07request\x18\x02 \x01(\x0b\x32\x18.terminal.NetworkRequest\x12+\n\x08response\x18\x03 \x01(\x0b\x32\x19.terminal.NetworkResponse\x12\'\n\x06timing\x18\x04 \x01(\x0b\x32\x17.terminal.NetworkTiming\x12\r\n\x05\x65rror\x18\x05 \x01(\t\x12\x10\n\x08\x66rame_id\x18\x06 \x01(\t\x12\x11\n\tinitiator\x18\x07 \x01(\t*\\\n\tWaitUntil\x12\r\n\tWAIT_LOAD\x10\x00\x12\x19\n\x15WAIT_DOMCONTENTLOADED\x10\x01\x12\x14\n\x10WAIT_NETWORKIDLE\x10\x02\x12\x0f\n\x0bWAIT_COMMIT\x10\x03\x42\x10Z\x0eterminal/protob\x06proto3')
28
+
29
+ _globals = globals()
30
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
31
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'rpc_messages.browser_pb2', _globals)
32
+ if not _descriptor._USE_C_DESCRIPTORS:
33
+ _globals['DESCRIPTOR']._loaded_options = None
34
+ _globals['DESCRIPTOR']._serialized_options = b'Z\016terminal/proto'
35
+ _globals['_BROWSERVALIDATESELECTORSREQUEST_FIELDSENTRY']._loaded_options = None
36
+ _globals['_BROWSERVALIDATESELECTORSREQUEST_FIELDSENTRY']._serialized_options = b'8\001'
37
+ _globals['_BROWSERVALIDATESELECTORSRESPONSE_COUNTSENTRY']._loaded_options = None
38
+ _globals['_BROWSERVALIDATESELECTORSRESPONSE_COUNTSENTRY']._serialized_options = b'8\001'
39
+ _globals['_BROWSERVALIDATESELECTORSRESPONSE_SAMPLESENTRY']._loaded_options = None
40
+ _globals['_BROWSERVALIDATESELECTORSRESPONSE_SAMPLESENTRY']._serialized_options = b'8\001'
41
+ _globals['_NETWORKREQUEST_HEADERSENTRY']._loaded_options = None
42
+ _globals['_NETWORKREQUEST_HEADERSENTRY']._serialized_options = b'8\001'
43
+ _globals['_NETWORKRESPONSE_HEADERSENTRY']._loaded_options = None
44
+ _globals['_NETWORKRESPONSE_HEADERSENTRY']._serialized_options = b'8\001'
45
+ _globals['_WAITUNTIL']._serialized_start=7590
46
+ _globals['_WAITUNTIL']._serialized_end=7682
47
+ _globals['_BROWSERCREATESESSIONREQUEST']._serialized_start=41
48
+ _globals['_BROWSERCREATESESSIONREQUEST']._serialized_end=239
49
+ _globals['_BROWSERCREATESESSIONRESPONSE']._serialized_start=241
50
+ _globals['_BROWSERCREATESESSIONRESPONSE']._serialized_end=331
51
+ _globals['_BROWSERCLOSESESSIONREQUEST']._serialized_start=333
52
+ _globals['_BROWSERCLOSESESSIONREQUEST']._serialized_end=409
53
+ _globals['_BROWSERCLOSESESSIONRESPONSE']._serialized_start=411
54
+ _globals['_BROWSERCLOSESESSIONRESPONSE']._serialized_end=472
55
+ _globals['_BROWSERNAVIGATEREQUEST']._serialized_start=475
56
+ _globals['_BROWSERNAVIGATEREQUEST']._serialized_end=621
57
+ _globals['_BROWSERNAVIGATERESPONSE']._serialized_start=623
58
+ _globals['_BROWSERNAVIGATERESPONSE']._serialized_end=699
59
+ _globals['_BROWSERCLICKREQUEST']._serialized_start=702
60
+ _globals['_BROWSERCLICKREQUEST']._serialized_end=830
61
+ _globals['_BROWSERCLICKRESPONSE']._serialized_start=832
62
+ _globals['_BROWSERCLICKRESPONSE']._serialized_end=886
63
+ _globals['_BROWSERTYPEREQUEST']._serialized_start=889
64
+ _globals['_BROWSERTYPEREQUEST']._serialized_end=1030
65
+ _globals['_BROWSERTYPERESPONSE']._serialized_start=1032
66
+ _globals['_BROWSERTYPERESPONSE']._serialized_end=1085
67
+ _globals['_BROWSERWAITREQUEST']._serialized_start=1087
68
+ _globals['_BROWSERWAITREQUEST']._serialized_end=1193
69
+ _globals['_BROWSERWAITRESPONSE']._serialized_start=1195
70
+ _globals['_BROWSERWAITRESPONSE']._serialized_end=1263
71
+ _globals['_BROWSEREXTRACTREQUEST']._serialized_start=1265
72
+ _globals['_BROWSEREXTRACTREQUEST']._serialized_end=1388
73
+ _globals['_BROWSEREXTRACTRESPONSE']._serialized_start=1390
74
+ _globals['_BROWSEREXTRACTRESPONSE']._serialized_end=1477
75
+ _globals['_BROWSEREXTRACTREGEXREQUEST']._serialized_start=1479
76
+ _globals['_BROWSEREXTRACTREGEXREQUEST']._serialized_end=1606
77
+ _globals['_BROWSEREXTRACTREGEXRESPONSE']._serialized_start=1608
78
+ _globals['_BROWSEREXTRACTREGEXRESPONSE']._serialized_end=1701
79
+ _globals['_BROWSERGETHTMLREQUEST']._serialized_start=1703
80
+ _globals['_BROWSERGETHTMLREQUEST']._serialized_end=1792
81
+ _globals['_BROWSERGETHTMLRESPONSE']._serialized_start=1794
82
+ _globals['_BROWSERGETHTMLRESPONSE']._serialized_end=1864
83
+ _globals['_BROWSERGETTEXTREQUEST']._serialized_start=1866
84
+ _globals['_BROWSERGETTEXTREQUEST']._serialized_end=1955
85
+ _globals['_BROWSERGETTEXTRESPONSE']._serialized_start=1957
86
+ _globals['_BROWSERGETTEXTRESPONSE']._serialized_end=2027
87
+ _globals['_BROWSEREXECUTESCRIPTREQUEST']._serialized_start=2029
88
+ _globals['_BROWSEREXECUTESCRIPTREQUEST']._serialized_end=2122
89
+ _globals['_BROWSEREXECUTESCRIPTRESPONSE']._serialized_start=2124
90
+ _globals['_BROWSEREXECUTESCRIPTRESPONSE']._serialized_end=2202
91
+ _globals['_BROWSERSCREENSHOTREQUEST']._serialized_start=2204
92
+ _globals['_BROWSERSCREENSHOTREQUEST']._serialized_end=2330
93
+ _globals['_BROWSERSCREENSHOTRESPONSE']._serialized_start=2332
94
+ _globals['_BROWSERSCREENSHOTRESPONSE']._serialized_end=2405
95
+ _globals['_BROWSERGETSTATEREQUEST']._serialized_start=2407
96
+ _globals['_BROWSERGETSTATEREQUEST']._serialized_end=2479
97
+ _globals['_BROWSERGETSTATERESPONSE']._serialized_start=2481
98
+ _globals['_BROWSERGETSTATERESPONSE']._serialized_end=2566
99
+ _globals['_BROWSERGETPAGEINFOREQUEST']._serialized_start=2568
100
+ _globals['_BROWSERGETPAGEINFOREQUEST']._serialized_end=2643
101
+ _globals['_BROWSERGETPAGEINFORESPONSE']._serialized_start=2646
102
+ _globals['_BROWSERGETPAGEINFORESPONSE']._serialized_end=3089
103
+ _globals['_BROWSERCOOKIE']._serialized_start=3092
104
+ _globals['_BROWSERCOOKIE']._serialized_end=3237
105
+ _globals['_BROWSERSETCOOKIESREQUEST']._serialized_start=3239
106
+ _globals['_BROWSERSETCOOKIESREQUEST']._serialized_end=3355
107
+ _globals['_BROWSERSETCOOKIESRESPONSE']._serialized_start=3357
108
+ _globals['_BROWSERSETCOOKIESRESPONSE']._serialized_end=3416
109
+ _globals['_BROWSERGETCOOKIESREQUEST']._serialized_start=3418
110
+ _globals['_BROWSERGETCOOKIESREQUEST']._serialized_end=3508
111
+ _globals['_BROWSERGETCOOKIESRESPONSE']._serialized_start=3510
112
+ _globals['_BROWSERGETCOOKIESRESPONSE']._serialized_end=3611
113
+ _globals['_BROWSERMOUSEMOVEREQUEST']._serialized_start=3613
114
+ _globals['_BROWSERMOUSEMOVEREQUEST']._serialized_end=3723
115
+ _globals['_BROWSERMOUSEMOVERESPONSE']._serialized_start=3725
116
+ _globals['_BROWSERMOUSEMOVERESPONSE']._serialized_end=3783
117
+ _globals['_BROWSERHOVERREQUEST']._serialized_start=3785
118
+ _globals['_BROWSERHOVERREQUEST']._serialized_end=3892
119
+ _globals['_BROWSERHOVERRESPONSE']._serialized_start=3894
120
+ _globals['_BROWSERHOVERRESPONSE']._serialized_end=3948
121
+ _globals['_BROWSERSCROLLREQUEST']._serialized_start=3951
122
+ _globals['_BROWSERSCROLLREQUEST']._serialized_end=4109
123
+ _globals['_BROWSERSCROLLRESPONSE']._serialized_start=4112
124
+ _globals['_BROWSERSCROLLRESPONSE']._serialized_end=4289
125
+ _globals['_BROWSERVALIDATESELECTORSREQUEST']._serialized_start=4292
126
+ _globals['_BROWSERVALIDATESELECTORSREQUEST']._serialized_end=4505
127
+ _globals['_BROWSERVALIDATESELECTORSREQUEST_FIELDSENTRY']._serialized_start=4460
128
+ _globals['_BROWSERVALIDATESELECTORSREQUEST_FIELDSENTRY']._serialized_end=4505
129
+ _globals['_BROWSERVALIDATESELECTORSRESPONSE']._serialized_start=4508
130
+ _globals['_BROWSERVALIDATESELECTORSRESPONSE']._serialized_end=4846
131
+ _globals['_BROWSERVALIDATESELECTORSRESPONSE_COUNTSENTRY']._serialized_start=4753
132
+ _globals['_BROWSERVALIDATESELECTORSRESPONSE_COUNTSENTRY']._serialized_end=4798
133
+ _globals['_BROWSERVALIDATESELECTORSRESPONSE_SAMPLESENTRY']._serialized_start=4800
134
+ _globals['_BROWSERVALIDATESELECTORSRESPONSE_SAMPLESENTRY']._serialized_end=4846
135
+ _globals['_BROWSEREXTRACTDATAREQUEST']._serialized_start=4848
136
+ _globals['_BROWSEREXTRACTDATAREQUEST']._serialized_end=4973
137
+ _globals['_BROWSEREXTRACTDATARESPONSE']._serialized_start=4975
138
+ _globals['_BROWSEREXTRACTDATARESPONSE']._serialized_end=5070
139
+ _globals['_BROWSERNETWORKENABLEREQUEST']._serialized_start=5072
140
+ _globals['_BROWSERNETWORKENABLEREQUEST']._serialized_end=5199
141
+ _globals['_BROWSERNETWORKENABLERESPONSE']._serialized_start=5201
142
+ _globals['_BROWSERNETWORKENABLERESPONSE']._serialized_end=5263
143
+ _globals['_BROWSERNETWORKDISABLEREQUEST']._serialized_start=5265
144
+ _globals['_BROWSERNETWORKDISABLEREQUEST']._serialized_end=5343
145
+ _globals['_BROWSERNETWORKDISABLERESPONSE']._serialized_start=5345
146
+ _globals['_BROWSERNETWORKDISABLERESPONSE']._serialized_end=5408
147
+ _globals['_BROWSERNETWORKGETEXCHANGESREQUEST']._serialized_start=5411
148
+ _globals['_BROWSERNETWORKGETEXCHANGESREQUEST']._serialized_end=5593
149
+ _globals['_BROWSERNETWORKGETEXCHANGESRESPONSE']._serialized_start=5596
150
+ _globals['_BROWSERNETWORKGETEXCHANGESRESPONSE']._serialized_end=5725
151
+ _globals['_BROWSERNETWORKGETEXCHANGEREQUEST']._serialized_start=5727
152
+ _globals['_BROWSERNETWORKGETEXCHANGEREQUEST']._serialized_end=5830
153
+ _globals['_BROWSERNETWORKGETEXCHANGERESPONSE']._serialized_start=5832
154
+ _globals['_BROWSERNETWORKGETEXCHANGERESPONSE']._serialized_end=5944
155
+ _globals['_BROWSERNETWORKGETLASTREQUEST']._serialized_start=5946
156
+ _globals['_BROWSERNETWORKGETLASTREQUEST']._serialized_end=6045
157
+ _globals['_BROWSERNETWORKGETLASTRESPONSE']._serialized_start=6047
158
+ _globals['_BROWSERNETWORKGETLASTRESPONSE']._serialized_end=6155
159
+ _globals['_BROWSERNETWORKCLEARREQUEST']._serialized_start=6157
160
+ _globals['_BROWSERNETWORKCLEARREQUEST']._serialized_end=6233
161
+ _globals['_BROWSERNETWORKCLEARRESPONSE']._serialized_start=6235
162
+ _globals['_BROWSERNETWORKCLEARRESPONSE']._serialized_end=6296
163
+ _globals['_BROWSERNETWORKSTATSREQUEST']._serialized_start=6298
164
+ _globals['_BROWSERNETWORKSTATSREQUEST']._serialized_end=6374
165
+ _globals['_BROWSERNETWORKSTATSRESPONSE']._serialized_start=6377
166
+ _globals['_BROWSERNETWORKSTATSRESPONSE']._serialized_end=6551
167
+ _globals['_BROWSERNETWORKEXPORTHARREQUEST']._serialized_start=6554
168
+ _globals['_BROWSERNETWORKEXPORTHARREQUEST']._serialized_end=6718
169
+ _globals['_BROWSERNETWORKEXPORTHARRESPONSE']._serialized_start=6720
170
+ _globals['_BROWSERNETWORKEXPORTHARRESPONSE']._serialized_end=6803
171
+ _globals['_NETWORKREQUEST']._serialized_start=6806
172
+ _globals['_NETWORKREQUEST']._serialized_end=7014
173
+ _globals['_NETWORKREQUEST_HEADERSENTRY']._serialized_start=6968
174
+ _globals['_NETWORKREQUEST_HEADERSENTRY']._serialized_end=7014
175
+ _globals['_NETWORKRESPONSE']._serialized_start=7017
176
+ _globals['_NETWORKRESPONSE']._serialized_end=7246
177
+ _globals['_NETWORKRESPONSE_HEADERSENTRY']._serialized_start=6968
178
+ _globals['_NETWORKRESPONSE_HEADERSENTRY']._serialized_end=7014
179
+ _globals['_NETWORKTIMING']._serialized_start=7248
180
+ _globals['_NETWORKTIMING']._serialized_end=7375
181
+ _globals['_NETWORKEXCHANGE']._serialized_start=7378
182
+ _globals['_NETWORKEXCHANGE']._serialized_end=7588
183
+ # @@protoc_insertion_point(module_scope)
@@ -19,7 +19,7 @@ WAIT_NETWORKIDLE: WaitUntil
19
19
  WAIT_COMMIT: WaitUntil
20
20
 
21
21
  class BrowserCreateSessionRequest(_message.Message):
22
- __slots__ = ("session_id", "provider", "profile_id", "start_url", "headless", "width", "height")
22
+ __slots__ = ("session_id", "provider", "profile_id", "start_url", "headless", "width", "height", "block_images", "block_media")
23
23
  SESSION_ID_FIELD_NUMBER: _ClassVar[int]
24
24
  PROVIDER_FIELD_NUMBER: _ClassVar[int]
25
25
  PROFILE_ID_FIELD_NUMBER: _ClassVar[int]
@@ -27,6 +27,8 @@ class BrowserCreateSessionRequest(_message.Message):
27
27
  HEADLESS_FIELD_NUMBER: _ClassVar[int]
28
28
  WIDTH_FIELD_NUMBER: _ClassVar[int]
29
29
  HEIGHT_FIELD_NUMBER: _ClassVar[int]
30
+ BLOCK_IMAGES_FIELD_NUMBER: _ClassVar[int]
31
+ BLOCK_MEDIA_FIELD_NUMBER: _ClassVar[int]
30
32
  session_id: str
31
33
  provider: str
32
34
  profile_id: str
@@ -34,7 +36,9 @@ class BrowserCreateSessionRequest(_message.Message):
34
36
  headless: bool
35
37
  width: int
36
38
  height: int
37
- def __init__(self, session_id: _Optional[str] = ..., provider: _Optional[str] = ..., profile_id: _Optional[str] = ..., start_url: _Optional[str] = ..., headless: bool = ..., width: _Optional[int] = ..., height: _Optional[int] = ...) -> None: ...
39
+ block_images: bool
40
+ block_media: bool
41
+ def __init__(self, session_id: _Optional[str] = ..., provider: _Optional[str] = ..., profile_id: _Optional[str] = ..., start_url: _Optional[str] = ..., headless: bool = ..., width: _Optional[int] = ..., height: _Optional[int] = ..., block_images: bool = ..., block_media: bool = ...) -> None: ...
38
42
 
39
43
  class BrowserCreateSessionResponse(_message.Message):
40
44
  __slots__ = ("success", "browser_session_id", "error")
@@ -37,7 +37,7 @@ from .machines__api__machine_sharing import MachinesMachineSharingAPI
37
37
  from .machines__api__machines import MachinesMachinesAPI
38
38
  from . import enums
39
39
  # NOTE: Individual enum imports commented out due to invalid Python syntax with dotted names
40
- # from .enums import Machine.os, Machine.status, MachineCreate.os, MachineCreateRequest.os, MachineLog.level, MachineLogRequest.level, MachineRequest.os, MachineRequest.status, MachinesMachinesUpdateMetricsCreateRequest.status, PatchedMachineRequest.os, PatchedMachineRequest.status, SharedMachine.permission, SharedMachineList.permission
40
+ # from .enums import Machine.os, Machine.status, MachineLog.level, MachinesMachinesUpdateMetricsCreateRequest.status, SharedMachine.permission
41
41
 
42
42
  TOKEN_KEY = "auth_token"
43
43
  REFRESH_TOKEN_KEY = "refresh_token"
@@ -0,0 +1,66 @@
1
+ # Auto-generated by DjangoCFG - see CLAUDE.md
2
+ from enum import IntEnum, Enum
3
+
4
+ # Python 3.10 compatibility: StrEnum was added in Python 3.11
5
+ # Use str + Enum instead for backward compatibility
6
+ class StrEnum(str, Enum):
7
+ """String Enum for Python 3.10+ compatibility"""
8
+ pass
9
+
10
+
11
+ class MachineOs(StrEnum):
12
+ """
13
+ * `macos` - macOS
14
+ * `windows` - Windows
15
+ * `linux` - Linux
16
+ * `ios` - iOS
17
+ * `android` - Android
18
+ """
19
+
20
+ MACOS = "macos"
21
+ WINDOWS = "windows"
22
+ LINUX = "linux"
23
+ IOS = "ios"
24
+ ANDROID = "android"
25
+
26
+
27
+
28
+ class MachineStatus(StrEnum):
29
+ """
30
+ * `online` - Online
31
+ * `offline` - Offline
32
+ """
33
+
34
+ ONLINE = "online"
35
+ OFFLINE = "offline"
36
+
37
+
38
+
39
+ class MachineLogLevel(StrEnum):
40
+ """
41
+ * `info` - Info
42
+ * `warning` - Warning
43
+ * `error` - Error
44
+ """
45
+
46
+ INFO = "info"
47
+ WARNING = "warning"
48
+ ERROR = "error"
49
+
50
+
51
+
52
+ class SharedMachinePermission(StrEnum):
53
+ """
54
+ * `read_only` - Read Only
55
+ """
56
+
57
+ READ_ONLY = "read_only"
58
+
59
+
60
+
61
+ class MachinesMachinesUpdateMetricsCreateRequestStatus(StrEnum):
62
+ ONLINE = "online"
63
+ OFFLINE = "offline"
64
+
65
+
66
+
@@ -20,20 +20,30 @@ class MachinesMachineSharingAPI:
20
20
  workspace owner or admin can create shares.
21
21
  """
22
22
  url = f"/api/machines/machines/{id}/share/"
23
- response = await self._client.post(url, json=data.model_dump())
24
- response.raise_for_status()
23
+ response = await self._client.post(url, json=data.model_dump(exclude_unset=True))
24
+ if not response.is_success:
25
+ try:
26
+ error_body = response.json()
27
+ except Exception:
28
+ error_body = response.text
29
+ raise httpx.HTTPStatusError(f"{response.status_code}: {error_body}", request=response.request, response=response)
25
30
  return SharedMachine.model_validate(response.json())
26
31
 
27
32
 
28
- async def machines_machines_shares_list(self, id: str, page: int | None = None, page_size: int | None = None) -> list[PaginatedSharedMachineListList]:
33
+ async def machines_machines_shares_list(self, id: str, ordering: str | None = None, page: int | None = None, page_size: int | None = None, search: str | None = None) -> list[PaginatedSharedMachineListList]:
29
34
  """
30
35
  List active shares for machine
31
36
 
32
37
  Get all active share links for this machine
33
38
  """
34
39
  url = f"/api/machines/machines/{id}/shares/"
35
- response = await self._client.get(url, params={"page": page if page is not None else None, "page_size": page_size if page_size is not None else None})
36
- response.raise_for_status()
40
+ response = await self._client.get(url, params={"ordering": ordering if ordering is not None else None, "page": page if page is not None else None, "page_size": page_size if page_size is not None else None, "search": search if search is not None else None})
41
+ if not response.is_success:
42
+ try:
43
+ error_body = response.json()
44
+ except Exception:
45
+ error_body = response.text
46
+ raise httpx.HTTPStatusError(f"{response.status_code}: {error_body}", request=response.request, response=response)
37
47
  return PaginatedSharedMachineListList.model_validate(response.json())
38
48
 
39
49
 
@@ -46,7 +56,12 @@ class MachinesMachineSharingAPI:
46
56
  """
47
57
  url = f"/api/machines/machines/{id}/unshare/"
48
58
  response = await self._client.delete(url)
49
- response.raise_for_status()
59
+ if not response.is_success:
60
+ try:
61
+ error_body = response.json()
62
+ except Exception:
63
+ error_body = response.text
64
+ raise httpx.HTTPStatusError(f"{response.status_code}: {error_body}", request=response.request, response=response)
50
65
  return None
51
66
 
52
67