hud-python 0.3.1__tar.gz → 0.3.3__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.
Potentially problematic release.
This version of hud-python might be problematic. Click here for more details.
- {hud_python-0.3.1 → hud_python-0.3.3}/PKG-INFO +3 -3
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/README.md +27 -1
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/docker_debug.py +66 -24
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/README.md +1 -1
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/task.py +1 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/tools/computer/hud.py +13 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/utils/tests/test_version.py +1 -1
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/version.py +1 -1
- {hud_python-0.3.1 → hud_python-0.3.3}/pyproject.toml +3 -3
- {hud_python-0.3.1 → hud_python-0.3.3}/.env.example +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/.github/workflows/ci.yml +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/.github/workflows/release.yml +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/.gitignore +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/LICENSE +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/MANIFEST.in +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/README.md +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/advanced/cla-details.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/advanced/environment-control.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/advanced/tracing.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/advanced/uploading.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/api-reference/adapters.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/api-reference/env.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/api-reference/gym.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/api-reference/job.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/api-reference/task.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/api-reference/taskset.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/api-reference/telemetry.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/api-reference/trajectory.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/concepts/adapter.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/concepts/agent.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/concepts/environment.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/concepts/job.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/concepts/task.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/concepts/trajectory.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/docs.json +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/environment-creation.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/environments/browser.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/environments/custom-environments.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/environments/custom.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/environments/osworld-ubuntu.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/environments/qa.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/examples/alignment-evaluation.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/examples/benchmarking-agents.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/examples/custom-os-env.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/examples/mcp-agent-tracing.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/examples/web-app-testing.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/examples/web-mocks.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/favicon.png +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/logo/hud_logo.svg +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/logo/hud_logo_dark.svg +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/quickstart.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/running-your-agent.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/docs/task-creation.mdx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/pokemon_controller/Dockerfile +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/pokemon_controller/pyproject.toml +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/pokemon_controller/src/hud_controller/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/pokemon_controller/src/hud_controller/display_adapters.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/pokemon_controller/src/hud_controller/emulator.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/pokemon_controller/src/hud_controller/evaluator.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/pokemon_controller/src/hud_controller/kill.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/pokemon_controller/src/hud_controller/main.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/pokemon_controller/src/hud_controller/setup.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/pokemon_controller/src/hud_controller/step.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/qa_controller/Dockerfile +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/qa_controller/pyproject.toml +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/qa_controller/src/hud_controller/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/qa_controller/src/hud_controller/evaluate/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/qa_controller/src/hud_controller/evaluate/matchers.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/qa_controller/src/hud_controller/info.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/qa_controller/src/hud_controller/setup/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/qa_controller/src/hud_controller/setup/question.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/qa_controller/src/hud_controller/step.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/qa_controller/src/hud_controller/utils/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/qa_controller/src/hud_controller/utils/state.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/Dockerfile +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/README.md +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/pyproject.toml +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/__main__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/browser_computer_tool.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/evaluators/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/evaluators/context.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/evaluators/cookie_exists.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/evaluators/cookie_match.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/evaluators/history_length.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/evaluators/page_contains.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/evaluators/raw_last_action_is.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/evaluators/registry.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/evaluators/selector_history.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/evaluators/sheet_contains.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/evaluators/sheets_cell_values.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/evaluators/url_match.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/evaluators/verify_type_action.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/playwright_with_memory.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/problems/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/problems/navigate_and_verify.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/problems/registry.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/providers/README.md +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/providers/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/providers/anchorbrowser.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/providers/base.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/providers/browserbase.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/providers/hyperbrowser.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/providers/kernel.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/providers/steel.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/runtime.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/server.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/setup/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/setup/cookies.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/setup/interact.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/setup/load_html.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/setup/navigate.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/setup/registry.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/setup/sheets.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/test_mcp.sh +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/.dockerignore +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/.gitignore +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/Dockerfile +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/apps/README.md +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/apps/todo/README.md +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/apps/todo/backend/main.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/apps/todo/backend/pyproject.toml +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/apps/todo/frontend/app/globals.css +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/apps/todo/frontend/app/layout.tsx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/apps/todo/frontend/app/page.tsx +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/apps/todo/frontend/next.config.js +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/apps/todo/frontend/package-lock.json +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/apps/todo/frontend/package.json +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/apps/todo/frontend/postcss.config.js +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/apps/todo/frontend/tailwind.config.js +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/apps/todo/frontend/tsconfig.json +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/apps/todo/launch.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/docker-compose.yml +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/pyproject.toml +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/src/hud_controller/README.md +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/src/hud_controller/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/src/hud_controller/__main__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/src/hud_controller/evaluators/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/src/hud_controller/evaluators/context.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/src/hud_controller/evaluators/registry.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/src/hud_controller/evaluators/todo.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/src/hud_controller/problems/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/src/hud_controller/problems/registry.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/src/hud_controller/problems/todo.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/src/hud_controller/runtime.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/src/hud_controller/server.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/src/hud_controller/services.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/src/hud_controller/setup/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/src/hud_controller/setup/registry.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/src/hud_controller/setup/todo.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/environments/simple_browser/start.sh +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/examples/README.md +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/examples/agents_tools/browser_use.ipynb +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/examples/agents_tools/mcp_claude_agent.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/examples/agents_tools/mcp_openai_agent.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/examples/agents_tools/mcp_test.ipynb +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/examples/agents_tools/mcp_use_agent.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/examples/agents_tools/sensitive_data.ipynb +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/examples/agents_tools/simple_task_example.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/examples/environments/gmail_local.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/examples/environments/gmail_remote.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/examples/environments/pokemon_local.ipynb +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/examples/environments/pokemon_remote.ipynb +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/examples/environments/remote.ipynb +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/examples/environments/resources_example.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/examples/environments/simple_browser_example.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/examples/evaluations/eval.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/examples/evaluations/osworld.ipynb +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/examples/evaluations/sheetbench_direct_example.ipynb +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/examples/evaluations/tasks.ipynb +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/examples/evaluations/telemetry_and_datasets.ipynb +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/examples/evaluations/wordle_example.ipynb +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/examples/sheets_bench_cua_example.ipynb +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/adapters/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/adapters/claude/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/adapters/claude/adapter.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/adapters/claude/tests/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/adapters/claude/tests/test_adapter.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/adapters/common/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/adapters/common/adapter.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/adapters/common/tests/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/adapters/common/tests/test_adapter.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/adapters/common/types.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/adapters/operator/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/adapters/operator/adapter.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/adapters/operator/tests/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/adapters/operator/tests/test_adapter.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/agent/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/agent/base.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/agent/claude.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/agent/claude_plays_pokemon.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/agent/langchain.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/agent/misc/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/agent/misc/response_agent.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/agent/operator.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/agent/tests/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/agent/tests/test_base.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/datasets.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/env/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/env/client.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/env/docker_client.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/env/environment.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/env/local_docker_client.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/env/remote_client.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/env/remote_docker_client.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/exceptions.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/gym.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/job.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/mcp/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/mcp/base.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/mcp/claude.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/mcp/client.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/mcp/langchain.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/mcp/openai.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/mcp/tests/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/mcp/tests/test_base.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/mcp/tests/test_claude.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/mcp/tests/test_client.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/mcp/tests/test_openai.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/py.typed +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/server/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/server/requests.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/server/tests/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/server/tests/test_requests.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/settings.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/taskset.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/telemetry/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/telemetry/_trace.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/telemetry/context.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/telemetry/exporter.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/telemetry/instrumentation/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/telemetry/instrumentation/mcp.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/telemetry/instrumentation/registry.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/telemetry/job.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/telemetry/mcp_models.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/telemetry/tests/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/telemetry/tests/test_context.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/telemetry/tests/test_trace.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/tools/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/tools/base.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/tools/bash.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/tools/computer/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/tools/computer/anthropic.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/tools/computer/openai.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/tools/edit.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/tools/executors/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/tools/executors/base.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/tools/executors/pyautogui.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/tools/executors/tests/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/tools/executors/tests/test_base_executor.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/tools/executors/tests/test_pyautogui_executor.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/tools/executors/xdo.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/tools/helper/README.md +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/tools/helper/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/tools/helper/mcp_server.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/tools/helper/server_initialization.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/tools/helper/utils.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/tools/playwright_tool.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/tools/tests/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/tools/tests/test_bash.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/tools/tests/test_computer.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/tools/tests/test_computer_actions.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/tools/tests/test_edit.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/tools/tests/test_init.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/tools/tests/test_playwright_tool.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/tools/tests/test_tools.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/tools/tests/test_utils.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/tools/utils.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/trajectory.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/types.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/utils/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/utils/agent.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/utils/common.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/utils/config.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/utils/misc.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/utils/progress.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/utils/telemetry.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/utils/tests/__init__.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/utils/tests/test_common.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/utils/tests/test_config.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/utils/tests/test_init.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/utils/tests/test_progress.py +0 -0
- {hud_python-0.3.1 → hud_python-0.3.3}/hud/utils/tests/test_telemetry.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: hud-python
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.3
|
|
4
4
|
Summary: SDK for the HUD platform.
|
|
5
5
|
Project-URL: Homepage, https://github.com/hud-evals/hud-python
|
|
6
6
|
Project-URL: Bug Tracker, https://github.com/hud-evals/hud-python/issues
|
|
@@ -36,14 +36,14 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
36
36
|
Classifier: Programming Language :: Python :: 3.13
|
|
37
37
|
Requires-Python: <3.14,>=3.11
|
|
38
38
|
Requires-Dist: anthropic
|
|
39
|
-
Requires-Dist: datasets>=
|
|
39
|
+
Requires-Dist: datasets>=2.14.0
|
|
40
40
|
Requires-Dist: dotenv>=0.9.9
|
|
41
41
|
Requires-Dist: httpx<1,>=0.23.0
|
|
42
42
|
Requires-Dist: langchain
|
|
43
43
|
Requires-Dist: langchain-anthropic
|
|
44
44
|
Requires-Dist: langchain-openai
|
|
45
45
|
Requires-Dist: mcp-use>=1.3.7
|
|
46
|
-
Requires-Dist: mcp
|
|
46
|
+
Requires-Dist: mcp>=1.12.2
|
|
47
47
|
Requires-Dist: openai
|
|
48
48
|
Requires-Dist: pathspec>=0.12.1
|
|
49
49
|
Requires-Dist: pydantic-settings<3,>=2
|
|
@@ -19,6 +19,26 @@ The official MCP lifecycle specification is an excellent companion reference –
|
|
|
19
19
|
|
|
20
20
|
Take the phases one at a time; do **not** jump ahead. Each stage’s checkpoint is the foundation for the next.
|
|
21
21
|
|
|
22
|
+
### One-command sanity check (`docker_debug.py`)
|
|
23
|
+
|
|
24
|
+
While you move through the phases it’s handy to run the **interactive checker** to make sure nothing broke:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
python environments/docker_debug.py my-environment:latest
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
The script walks the *same* checklist and prints coloured, human-friendly hints whenever something fails.
|
|
31
|
+
|
|
32
|
+
| What it validates | Phase |
|
|
33
|
+
|-------------------|-------|
|
|
34
|
+
| Container starts & logs to **stderr** | 1 |
|
|
35
|
+
| MCP server responds to an `initialize` request | 2 |
|
|
36
|
+
| Discovers `setup`, `evaluate`, and interaction tools | 3 |
|
|
37
|
+
| Calls `setup` / `evaluate`, checks telemetry & startup time | 4 |
|
|
38
|
+
| Spawns three concurrent clients to stress-test resources | 5 |
|
|
39
|
+
|
|
40
|
+
💡 **Run it after finishing each phase.** If the checker exits with a red ❌, scroll up for the gold-coloured *hint* block – it usually points directly to the root cause.
|
|
41
|
+
|
|
22
42
|
---
|
|
23
43
|
|
|
24
44
|
## Phase 1 – Write a *Simple* Dockerfile
|
|
@@ -32,7 +52,8 @@ Why stderr? In Phase 2 the MCP server will reserve **stdout** for JSON-RPC traf
|
|
|
32
52
|
```dockerfile
|
|
33
53
|
FROM python:3.11-slim
|
|
34
54
|
|
|
35
|
-
WORKDIR /
|
|
55
|
+
WORKDIR /apphello
|
|
56
|
+
|
|
36
57
|
COPY . .
|
|
37
58
|
|
|
38
59
|
# Optional: install requirements
|
|
@@ -58,6 +79,8 @@ docker run --rm -it my-environment # look for the log line on stderr
|
|
|
58
79
|
|
|
59
80
|
Checkpoint reached? Congratulations – move on.
|
|
60
81
|
|
|
82
|
+
👉 Quick sanity check: `python environments/docker_debug.py my-environment:latest` (verifies Phase 1 automatically)
|
|
83
|
+
|
|
61
84
|
Need inspiration? Skim the real Dockerfiles used in the example browser environments:
|
|
62
85
|
• [`simple_browser/Dockerfile`](./simple_browser/Dockerfile)
|
|
63
86
|
• [`remote_browser/Dockerfile`](./remote_browser/Dockerfile)
|
|
@@ -129,6 +152,7 @@ CMD ["uv", "pip", "run", "python", "-m", "your_module_name"] # Replace 'your_mo
|
|
|
129
152
|
| 1 | **Direct stdio test** – pipe the JSON below into your script | Proves the Python code handles `initialize` without any client or Docker noise |
|
|
130
153
|
| 2 | **MCP Inspector** – `npx @modelcontextprotocol/inspector python -m my_package.server` | Lets you click around: view capabilities, tools, resources |
|
|
131
154
|
| 3 | **Inside Docker** – rebuild the image and run it | This is *exactly* how HUD will execute the server |
|
|
155
|
+
| 4 | **Run `docker_debug.py`** – `python environments/docker_debug.py my-environment:latest` | Combines the above checks & points out common mistakes |
|
|
132
156
|
|
|
133
157
|
#### JSON for step 1
|
|
134
158
|
|
|
@@ -154,6 +178,8 @@ If all three validations succeed, you have a real MCP server – time to make it
|
|
|
154
178
|
|
|
155
179
|
**Goal →** tools are discoverable in the Inspector *and* callable from the HUD SDK.
|
|
156
180
|
|
|
181
|
+
👉 After wiring in the tools, confirm with `python environments/docker_debug.py my-environment:latest` – it now checks for their presence and basic execution.
|
|
182
|
+
|
|
157
183
|
1. Write **`setup`** and **`evaluate`** tools first – they are *lifecycle* tools and never shown to the LLM.
|
|
158
184
|
2. Register at least one **interaction** tool (`computer`, `playwright`, or your own).
|
|
159
185
|
|
|
@@ -400,7 +400,7 @@ async def debug_mcp_docker(image: str) -> None:
|
|
|
400
400
|
cmd = ["docker"] + mcp_config["test"]["args"]
|
|
401
401
|
log_command(cmd)
|
|
402
402
|
|
|
403
|
-
log_info("Creating MCP client
|
|
403
|
+
log_info("Creating MCP client via hud...")
|
|
404
404
|
client = MCPClient(mcp_config=mcp_config, verbose=False)
|
|
405
405
|
|
|
406
406
|
await client.initialize()
|
|
@@ -473,7 +473,8 @@ async def debug_mcp_docker(image: str) -> None:
|
|
|
473
473
|
show_progress_bar(phases_completed, total_phases)
|
|
474
474
|
return
|
|
475
475
|
|
|
476
|
-
|
|
476
|
+
# Keep client open for Phase 4
|
|
477
|
+
# await client.close()
|
|
477
478
|
|
|
478
479
|
except Exception as e:
|
|
479
480
|
log_error(f"Tool discovery failed: {e}")
|
|
@@ -503,14 +504,21 @@ async def debug_mcp_docker(image: str) -> None:
|
|
|
503
504
|
setup_success = False
|
|
504
505
|
if "setup" in [t.name for t in tools]:
|
|
505
506
|
try:
|
|
506
|
-
log_info("Calling setup tool
|
|
507
|
-
setup_result = await client.call_tool("setup", {
|
|
507
|
+
log_info("Calling setup tool (no params to test existence)...")
|
|
508
|
+
setup_result = await client.call_tool("setup", {})
|
|
508
509
|
|
|
509
|
-
if
|
|
510
|
+
# Even if it errors, if we get a response it means the tool exists
|
|
511
|
+
if hasattr(setup_result, "isError") and setup_result.isError:
|
|
512
|
+
log_info(
|
|
513
|
+
f"Setup tool exists but returned error (expected): {setup_result.content[0].text if setup_result.content else 'Unknown error'}"
|
|
514
|
+
)
|
|
515
|
+
setup_success = True # Tool exists, that's what we're checking
|
|
516
|
+
elif isinstance(setup_result, dict) and "status" in setup_result:
|
|
510
517
|
log_success(f"Setup tool returned: {setup_result}")
|
|
511
518
|
setup_success = setup_result.get("status") == "success"
|
|
512
519
|
else:
|
|
513
|
-
|
|
520
|
+
log_success(f"Setup tool exists and returned: {type(setup_result)}")
|
|
521
|
+
setup_success = True
|
|
514
522
|
except Exception as e:
|
|
515
523
|
log_error(f"Setup tool failed: {e}")
|
|
516
524
|
|
|
@@ -518,10 +526,16 @@ async def debug_mcp_docker(image: str) -> None:
|
|
|
518
526
|
evaluate_success = False
|
|
519
527
|
if "evaluate" in [t.name for t in tools]:
|
|
520
528
|
try:
|
|
521
|
-
log_info("Calling evaluate tool...")
|
|
522
|
-
eval_result = await client.call_tool("evaluate", {
|
|
529
|
+
log_info("Calling evaluate tool (no params to test existence)...")
|
|
530
|
+
eval_result = await client.call_tool("evaluate", {})
|
|
523
531
|
|
|
524
|
-
if
|
|
532
|
+
# Even if it errors, if we get a response it means the tool exists
|
|
533
|
+
if hasattr(eval_result, "isError") and eval_result.isError:
|
|
534
|
+
log_info(
|
|
535
|
+
f"Evaluate tool exists but returned error (expected): {eval_result.content[0].text if eval_result.content else 'Unknown error'}"
|
|
536
|
+
)
|
|
537
|
+
evaluate_success = True # Tool exists, that's what we're checking
|
|
538
|
+
elif (
|
|
525
539
|
isinstance(eval_result, dict)
|
|
526
540
|
and "reward" in eval_result
|
|
527
541
|
and "done" in eval_result
|
|
@@ -531,7 +545,8 @@ async def debug_mcp_docker(image: str) -> None:
|
|
|
531
545
|
)
|
|
532
546
|
evaluate_success = True
|
|
533
547
|
else:
|
|
534
|
-
|
|
548
|
+
log_success(f"Evaluate tool exists and returned: {type(eval_result)}")
|
|
549
|
+
evaluate_success = True
|
|
535
550
|
except Exception as e:
|
|
536
551
|
log_error(f"Evaluate tool failed: {e}")
|
|
537
552
|
|
|
@@ -540,16 +555,20 @@ async def debug_mcp_docker(image: str) -> None:
|
|
|
540
555
|
resources_found = []
|
|
541
556
|
try:
|
|
542
557
|
session = client._sessions.get("test")
|
|
543
|
-
if session:
|
|
544
|
-
resources = await session.list_resources()
|
|
545
|
-
for res in resources:
|
|
558
|
+
if session and hasattr(session, "connector"):
|
|
559
|
+
resources = await session.connector.list_resources()
|
|
560
|
+
for res in resources.resources:
|
|
546
561
|
resources_found.append(res.uri)
|
|
547
562
|
if "telemetry://live" in res.uri:
|
|
548
563
|
log_info(f"Found telemetry resource: {res.uri}")
|
|
549
564
|
elif "registry" in res.uri:
|
|
550
565
|
log_info(f"Found registry resource: {res.uri}")
|
|
566
|
+
if not resources_found:
|
|
567
|
+
log_info("No resources exposed by this environment")
|
|
568
|
+
else:
|
|
569
|
+
log_info("Session connector not available for resource listing")
|
|
551
570
|
except Exception as e:
|
|
552
|
-
|
|
571
|
+
log_info(f"Resource check skipped: {e}")
|
|
553
572
|
|
|
554
573
|
# Performance check
|
|
555
574
|
log_info("Checking initialization performance...")
|
|
@@ -569,11 +588,19 @@ async def debug_mcp_docker(image: str) -> None:
|
|
|
569
588
|
log_success("Remote deployment readiness checks passed")
|
|
570
589
|
else:
|
|
571
590
|
log_error("Missing or failing lifecycle tools")
|
|
591
|
+
await client.close()
|
|
572
592
|
show_progress_bar(phases_completed, total_phases)
|
|
573
593
|
return
|
|
574
594
|
|
|
595
|
+
# Close client from Phase 3/4
|
|
596
|
+
await client.close()
|
|
597
|
+
|
|
575
598
|
except Exception as e:
|
|
576
599
|
log_error(f"Phase 4 failed: {e}")
|
|
600
|
+
try:
|
|
601
|
+
await client.close()
|
|
602
|
+
except:
|
|
603
|
+
pass
|
|
577
604
|
show_progress_bar(phases_completed, total_phases)
|
|
578
605
|
return
|
|
579
606
|
|
|
@@ -583,7 +610,6 @@ async def debug_mcp_docker(image: str) -> None:
|
|
|
583
610
|
concurrent_clients = []
|
|
584
611
|
try:
|
|
585
612
|
import psutil
|
|
586
|
-
import asyncio
|
|
587
613
|
|
|
588
614
|
# Get baseline resource usage
|
|
589
615
|
process = psutil.Process()
|
|
@@ -635,15 +661,24 @@ async def debug_mcp_docker(image: str) -> None:
|
|
|
635
661
|
# Test clean shutdown
|
|
636
662
|
log_info("Testing clean shutdown of all clients...")
|
|
637
663
|
for i, client in enumerate(concurrent_clients):
|
|
638
|
-
|
|
639
|
-
|
|
664
|
+
try:
|
|
665
|
+
await client.close()
|
|
666
|
+
log_info(f"Client {i + 1} disconnected")
|
|
667
|
+
except Exception as e:
|
|
668
|
+
log_info(f"Client {i + 1} close error: {e}")
|
|
640
669
|
|
|
641
|
-
#
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
670
|
+
# Small delay to allow cleanup
|
|
671
|
+
try:
|
|
672
|
+
await asyncio.sleep(0.5)
|
|
673
|
+
except asyncio.CancelledError:
|
|
674
|
+
pass
|
|
645
675
|
|
|
646
|
-
|
|
676
|
+
try:
|
|
677
|
+
final_memory = process.memory_info().rss / 1024 / 1024
|
|
678
|
+
memory_freed = current_memory - final_memory
|
|
679
|
+
log_info(f"After cleanup: Memory={final_memory:.1f}MB (freed {memory_freed:.1f}MB)")
|
|
680
|
+
except:
|
|
681
|
+
pass
|
|
647
682
|
|
|
648
683
|
phases_completed = 5
|
|
649
684
|
log_success("Concurrent client testing completed")
|
|
@@ -681,9 +716,16 @@ async def debug_mcp_docker(image: str) -> None:
|
|
|
681
716
|
|
|
682
717
|
finally:
|
|
683
718
|
# Ensure all clients are closed
|
|
684
|
-
|
|
719
|
+
if concurrent_clients:
|
|
720
|
+
log_info("Final cleanup of any remaining clients...")
|
|
721
|
+
for client in concurrent_clients:
|
|
722
|
+
try:
|
|
723
|
+
await client.close()
|
|
724
|
+
except:
|
|
725
|
+
pass
|
|
726
|
+
# Small delay for cleanup
|
|
685
727
|
try:
|
|
686
|
-
await
|
|
728
|
+
await asyncio.sleep(0.2)
|
|
687
729
|
except:
|
|
688
730
|
pass
|
|
689
731
|
|
|
@@ -31,6 +31,7 @@ class HudComputerTool:
|
|
|
31
31
|
height: int | None = None,
|
|
32
32
|
display_num: int | None = None,
|
|
33
33
|
platform_type: Literal["auto", "xdo", "pyautogui"] = "auto",
|
|
34
|
+
custom_executor: BaseExecutor | None = None,
|
|
34
35
|
rescale_images: bool = False,
|
|
35
36
|
) -> None:
|
|
36
37
|
"""
|
|
@@ -44,6 +45,7 @@ class HudComputerTool:
|
|
|
44
45
|
- "auto": Automatically detect based on platform
|
|
45
46
|
- "xdo": Use XDOExecutor (Linux/X11 only)
|
|
46
47
|
- "pyautogui": Use PyAutoGUIExecutor (cross-platform)
|
|
48
|
+
custom_executor: If None, executor class will be determined based on platform_type.
|
|
47
49
|
rescale_images: If True, rescale screenshots. If False, only rescale action coordinates
|
|
48
50
|
"""
|
|
49
51
|
# Use provided dimensions or defaults
|
|
@@ -70,6 +72,17 @@ class HudComputerTool:
|
|
|
70
72
|
# Check if we need to scale
|
|
71
73
|
self.needs_scaling = self.scale != 1.0
|
|
72
74
|
|
|
75
|
+
if custom_executor is None:
|
|
76
|
+
self._choose_executor(platform_type, display_num)
|
|
77
|
+
else:
|
|
78
|
+
self.executor = custom_executor
|
|
79
|
+
|
|
80
|
+
def _choose_executor(
|
|
81
|
+
self,
|
|
82
|
+
platform_type: Literal["auto", "xdo", "pyautogui"],
|
|
83
|
+
display_num: int | None,
|
|
84
|
+
) -> None:
|
|
85
|
+
"""Choose executor based on platform_type."""
|
|
73
86
|
# Choose executor based on platform_type
|
|
74
87
|
if platform_type == "auto":
|
|
75
88
|
# Auto-detect based on platform
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "hud-python"
|
|
3
|
-
version = "0.3.
|
|
3
|
+
version = "0.3.3"
|
|
4
4
|
description = "SDK for the HUD platform."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.11, <3.14"
|
|
@@ -13,7 +13,7 @@ dependencies = [
|
|
|
13
13
|
"httpx>=0.23.0,<1",
|
|
14
14
|
"pydantic>=2,<3",
|
|
15
15
|
"pydantic-settings>=2,<3",
|
|
16
|
-
"mcp
|
|
16
|
+
"mcp>=1.12.2",
|
|
17
17
|
"mcp-use>=1.3.7",
|
|
18
18
|
"pathspec>=0.12.1",
|
|
19
19
|
"wrapt>=1.14.0",
|
|
@@ -25,7 +25,7 @@ dependencies = [
|
|
|
25
25
|
"langchain-anthropic",
|
|
26
26
|
# Common utilities
|
|
27
27
|
"dotenv>=0.9.9",
|
|
28
|
-
"datasets>=
|
|
28
|
+
"datasets>=2.14.0",
|
|
29
29
|
]
|
|
30
30
|
classifiers = [
|
|
31
31
|
"Development Status :: 4 - Beta",
|
|
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
|
{hud_python-0.3.1 → hud_python-0.3.3}/environments/pokemon_controller/src/hud_controller/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{hud_python-0.3.1 → hud_python-0.3.3}/environments/pokemon_controller/src/hud_controller/emulator.py
RENAMED
|
File without changes
|
|
File without changes
|
{hud_python-0.3.1 → hud_python-0.3.3}/environments/pokemon_controller/src/hud_controller/kill.py
RENAMED
|
File without changes
|
{hud_python-0.3.1 → hud_python-0.3.3}/environments/pokemon_controller/src/hud_controller/main.py
RENAMED
|
File without changes
|
{hud_python-0.3.1 → hud_python-0.3.3}/environments/pokemon_controller/src/hud_controller/setup.py
RENAMED
|
File without changes
|
{hud_python-0.3.1 → hud_python-0.3.3}/environments/pokemon_controller/src/hud_controller/step.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{hud_python-0.3.1 → hud_python-0.3.3}/environments/qa_controller/src/hud_controller/__init__.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
|
{hud_python-0.3.1 → hud_python-0.3.3}/environments/qa_controller/src/hud_controller/utils/state.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/__init__.py
RENAMED
|
File without changes
|
{hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/__main__.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
|
{hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/runtime.py
RENAMED
|
File without changes
|
{hud_python-0.3.1 → hud_python-0.3.3}/environments/remote_browser/src/hud_controller/server.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|