cmdop 0.1.24__tar.gz → 0.1.25__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.
- {cmdop-0.1.24 → cmdop-0.1.25}/PKG-INFO +1 -1
- {cmdop-0.1.24 → cmdop-0.1.25}/pyproject.toml +1 -1
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/__init__.py +1 -1
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/helpers/network_analyzer.py +28 -9
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/services/browser/capabilities/visual.py +1 -1
- {cmdop-0.1.24 → cmdop-0.1.25}/.gitignore +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/LICENSE +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/README.md +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/__init__.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/agent_messages_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/agent_messages_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/agent_messages_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/common_types_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/common_types_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/common_types_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/control_messages_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/control_messages_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/control_messages_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_operations/__init__.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_operations/archive_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_operations/archive_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_operations/archive_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_operations/changes_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_operations/changes_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_operations/changes_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_operations/common_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_operations/common_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_operations/common_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_operations/directory_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_operations/directory_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_operations/directory_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_operations/file_crud_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_operations/file_crud_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_operations/file_crud_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_operations/hls_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_operations/hls_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_operations/hls_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_operations/requests_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_operations/requests_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_operations/requests_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_operations/search_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_operations/search_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_operations/search_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_operations/transfer_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_operations/transfer_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_operations/transfer_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_operations_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_operations_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_operations_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_rpc/__init__.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_rpc/archive_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_rpc/archive_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_rpc/archive_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_rpc/directory_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_rpc/directory_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_rpc/directory_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_rpc/file_crud_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_rpc/file_crud_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_rpc/file_crud_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_rpc/hls_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_rpc/hls_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_rpc/hls_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_rpc/search_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_rpc/search_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_rpc/search_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_rpc_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_rpc_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/file_rpc_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/message_pool.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/py.typed +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages/__init__.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages/agent_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages/agent_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages/agent_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages/browser_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages/browser_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages/browser_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages/device_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages/device_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages/device_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages/extract_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages/extract_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages/extract_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages/health_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages/health_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages/health_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages/history_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages/history_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages/history_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages/lifecycle_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages/lifecycle_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages/lifecycle_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages/push_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages/push_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages/push_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages/session_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages/session_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages/session_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages/terminal_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages/terminal_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages/terminal_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/rpc_messages_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/service_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/service_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/service_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/tunnel_pb2.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/tunnel_pb2.pyi +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/_generated/tunnel_pb2_grpc.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/__init__.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/__init__.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/machines/__init__.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/machines/client.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/machines/enums.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/machines/logger.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/machines/machines__api__machine_sharing/__init__.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/machines/machines__api__machine_sharing/client.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/machines/machines__api__machine_sharing/models.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/machines/machines__api__machine_sharing/sync_client.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/machines/machines__api__machines/__init__.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/machines/machines__api__machines/client.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/machines/machines__api__machines/models.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/machines/machines__api__machines/sync_client.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/machines/retry.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/machines/schema.json +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/machines/sync_client.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/system/__init__.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/system/client.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/system/enums.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/system/logger.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/system/retry.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/system/schema.json +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/system/sync_client.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/system/system__api__oauth/__init__.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/system/system__api__oauth/client.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/system/system__api__oauth/models.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/system/system__api__oauth/sync_client.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/system/system__api__system/__init__.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/system/system__api__system/client.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/system/system__api__system/models.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/system/system__api__system/sync_client.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/workspaces/__init__.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/workspaces/client.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/workspaces/enums.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/workspaces/logger.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/workspaces/retry.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/workspaces/schema.json +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/workspaces/sync_client.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/workspaces/workspaces__api__workspaces/__init__.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/workspaces/workspaces__api__workspaces/client.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/workspaces/workspaces__api__workspaces/models.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/workspaces/workspaces__api__workspaces/sync_client.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/client.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/config.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/discovery.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/exceptions.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/helpers/__init__.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/helpers/cleaner.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/helpers/formatting.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/logging.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/models/__init__.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/models/agent.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/models/base.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/models/config.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/models/extract.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/models/files.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/models/terminal.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/py.typed +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/services/__init__.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/services/agent.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/services/base.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/services/browser/__init__.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/services/browser/capabilities/__init__.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/services/browser/capabilities/_base.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/services/browser/capabilities/_helpers.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/services/browser/capabilities/dom.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/services/browser/capabilities/fetch.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/services/browser/capabilities/input.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/services/browser/capabilities/network.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/services/browser/capabilities/scroll.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/services/browser/capabilities/timing.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/services/browser/js/__init__.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/services/browser/js/core.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/services/browser/js/fetch.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/services/browser/js/interaction.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/services/browser/js/scroll.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/services/browser/models.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/services/browser/parsing.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/services/browser/service/__init__.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/services/browser/service/_helpers.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/services/browser/service/aio.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/services/browser/service/sync.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/services/browser/session.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/services/extract.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/services/files.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/services/terminal.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/streaming/__init__.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/streaming/base.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/streaming/handlers.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/streaming/terminal.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/transport/__init__.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/transport/auth.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/transport/base.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/transport/discovery.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/transport/local.py +0 -0
- {cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/transport/remote.py +0 -0
|
@@ -130,10 +130,10 @@ class NetworkSnapshot(BaseModel):
|
|
|
130
130
|
return self.model_dump_json(indent=indent)
|
|
131
131
|
|
|
132
132
|
def best_api(self) -> RequestSnapshot | None:
|
|
133
|
-
"""Get the best data API (most items)."""
|
|
133
|
+
"""Get the best data API (largest response, then most items)."""
|
|
134
134
|
if not self.api_requests:
|
|
135
135
|
return None
|
|
136
|
-
return max(self.api_requests, key=lambda r: r.item_count or 0)
|
|
136
|
+
return max(self.api_requests, key=lambda r: (r.size, r.item_count or 0))
|
|
137
137
|
|
|
138
138
|
|
|
139
139
|
class NetworkAnalyzer:
|
|
@@ -179,7 +179,7 @@ class NetworkAnalyzer:
|
|
|
179
179
|
clear_initial: bool = True,
|
|
180
180
|
same_origin: bool = True,
|
|
181
181
|
min_size: int = 100,
|
|
182
|
-
max_size: int =
|
|
182
|
+
max_size: int = 5_000_000,
|
|
183
183
|
countdown_message: str = "Click pagination!",
|
|
184
184
|
) -> NetworkSnapshot:
|
|
185
185
|
"""Capture network requests while user interacts with page.
|
|
@@ -230,6 +230,7 @@ class NetworkAnalyzer:
|
|
|
230
230
|
b.visual.countdown(wait_seconds, countdown_message)
|
|
231
231
|
|
|
232
232
|
# Get cookies
|
|
233
|
+
b.visual.toast("Getting cookies...")
|
|
233
234
|
try:
|
|
234
235
|
cookies = b.get_cookies()
|
|
235
236
|
snapshot.cookies = {c.name: c.value for c in cookies}
|
|
@@ -237,41 +238,54 @@ class NetworkAnalyzer:
|
|
|
237
238
|
pass
|
|
238
239
|
|
|
239
240
|
# Get stats
|
|
241
|
+
b.visual.toast("Getting network stats...")
|
|
240
242
|
stats = b.network.stats()
|
|
241
243
|
snapshot.total_requests = stats.total_captured
|
|
242
244
|
snapshot.total_bytes = stats.total_bytes
|
|
243
245
|
|
|
244
|
-
|
|
246
|
+
b.visual.toast(f"Captured {stats.total_captured} requests")
|
|
245
247
|
|
|
246
248
|
# Get XHR/Fetch calls
|
|
249
|
+
b.visual.toast("Filtering XHR/Fetch...")
|
|
250
|
+
# print("Calling network.filter...", flush=True)
|
|
247
251
|
api_calls = b.network.filter(
|
|
248
252
|
url_pattern=url_pattern,
|
|
249
253
|
resource_types=["xhr", "fetch"],
|
|
250
254
|
)
|
|
255
|
+
# print(f"Filter returned {len(api_calls)} calls", flush=True)
|
|
251
256
|
|
|
252
257
|
# Filter by domain
|
|
258
|
+
# print("Filtering by domain...", flush=True)
|
|
253
259
|
if same_origin:
|
|
254
260
|
api_calls = [
|
|
255
261
|
call for call in api_calls
|
|
256
262
|
if base_domain in urlparse(call.request.url).netloc
|
|
257
263
|
]
|
|
264
|
+
# print(f"After domain filter: {len(api_calls)}", flush=True)
|
|
265
|
+
|
|
266
|
+
# # Show sizes before filtering
|
|
267
|
+
# for call in api_calls:
|
|
268
|
+
# size = call.response.size if call.response else 0
|
|
269
|
+
# print(f" {call.request.url[:60]}... size={size}", flush=True)
|
|
258
270
|
|
|
259
271
|
# Filter by response size (ignore tracking pixels and heavy assets)
|
|
272
|
+
# print(f"Filtering by size ({min_size}-{max_size})...", flush=True)
|
|
260
273
|
api_calls = [
|
|
261
274
|
call for call in api_calls
|
|
262
275
|
if call.response and min_size <= call.response.size <= max_size
|
|
263
276
|
]
|
|
277
|
+
# print(f"After size filter: {len(api_calls)}", flush=True)
|
|
264
278
|
|
|
265
|
-
print(
|
|
279
|
+
# print("Showing toast...", flush=True)
|
|
280
|
+
b.visual.toast(f"Found {len(api_calls)} API calls")
|
|
266
281
|
|
|
267
|
-
# Analyze calls
|
|
282
|
+
# Analyze calls - all JSON responses are API requests
|
|
283
|
+
# print(f"Analyzing {len(api_calls)} calls...", flush=True)
|
|
268
284
|
for call in api_calls:
|
|
269
285
|
req = self._create_snapshot(call, snapshot.cookies)
|
|
270
286
|
if req:
|
|
271
|
-
if req.
|
|
287
|
+
if req.content_type and "json" in req.content_type:
|
|
272
288
|
snapshot.api_requests.append(req)
|
|
273
|
-
elif req.content_type and "json" in req.content_type:
|
|
274
|
-
snapshot.json_requests.append(req)
|
|
275
289
|
else:
|
|
276
290
|
snapshot.other_requests.append({
|
|
277
291
|
"url": call.request.url,
|
|
@@ -279,9 +293,14 @@ class NetworkAnalyzer:
|
|
|
279
293
|
"status": call.response.status if call.response else None,
|
|
280
294
|
})
|
|
281
295
|
|
|
296
|
+
# print("Analysis done", flush=True)
|
|
297
|
+
|
|
282
298
|
finally:
|
|
299
|
+
# print("Disabling network capture...", flush=True)
|
|
283
300
|
b.network.disable()
|
|
301
|
+
# print("Network disabled", flush=True)
|
|
284
302
|
|
|
303
|
+
# print("Returning snapshot", flush=True)
|
|
285
304
|
return snapshot
|
|
286
305
|
|
|
287
306
|
def _extract_base_domain(self, url: str) -> str:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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
|
{cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/machines/machines__api__machines/__init__.py
RENAMED
|
File without changes
|
{cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/machines/machines__api__machines/client.py
RENAMED
|
File without changes
|
{cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/machines/machines__api__machines/models.py
RENAMED
|
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
|
{cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/system/system__api__oauth/sync_client.py
RENAMED
|
File without changes
|
{cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/system/system__api__system/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cmdop-0.1.24 → cmdop-0.1.25}/src/cmdop/api/generated/system/system__api__system/sync_client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|