agentenv-framework-protocol 0.1.494__tar.gz → 0.1.496__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.
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/PKG-INFO +1 -1
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/pyproject.toml +1 -1
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/app_data.py +49 -12
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_computer_app_data.py +60 -5
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/.gitignore +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/LICENSE +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/NOTICE +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/README.md +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/THIRD_PARTY_NOTICES.md +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/examples/__init__.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/examples/advanced_agent.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/examples/basic_agent.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/examples/custom_extensions_agent.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/examples/multimodal_agent.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/examples/reference_model.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/examples/streaming_agent.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/examples/website/notes/.gitignore +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/examples/website/notes/Dockerfile +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/examples/website/notes/Dockerfile.dockerignore +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/examples/website/notes/README.md +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/examples/website/notes/data/seed.json +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/examples/website/notes/env.toml +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/examples/website/notes/site.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/examples/website/notes/web/index.html +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/examples/website/notes/web/package-lock.json +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/examples/website/notes/web/package.json +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/examples/website/notes/web/src/main.js +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/examples/website/notes/web/src/style.css +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/examples/website/notes/web/vite.config.js +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/__init__.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/a2a_agent/__init__.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/a2a_agent/_trajectory_log.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/a2a_agent/_triggers.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/a2a_agent/extensions.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/a2a_agent/framework.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/a2a_agent/peer_agents.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/a2a_agent/proxy.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/a2a_agent/registry.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/a2a_agent/staging.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/a2a_agent/tasks/__init__.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/a2a_agent/tasks/v1.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/agent_env_environment.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/browser_cdp.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/client.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/__init__.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/_declare.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/_job.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/_linux.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/_load.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/_macos.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/_reaping.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/_session_posix.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/_session_windows.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/_with_fds.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/_x11.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/app.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/app_runtime.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/apps.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/card.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/checks.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/conformance/__init__.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/conformance/__main__.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/conformance/checks.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/conformance/client.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/conformance/desk.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/conformance/fixture.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/conformance/mp4.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/conformance/page_fixture.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/conformance/report.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/conformance/wayland_fixture.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/dataplane.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/driver.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/errors.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/extensions.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/frames.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/keys.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/launch.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/manifest.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/operations.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/platform.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/prefix.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/queue.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/recording.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/results.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/run_install_step.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/runtime.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/seed.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/serve.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/serve_app.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/served.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/session.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/settings.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/skill.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/spaces.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/svc.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/computer/tools.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/errors.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/manifest.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/preflight.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/tool_access.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/tool_client.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/tool_context.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/transfers.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/types.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/website/__init__.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/website/clock.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/website/conformance.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/website/environment.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/website/errors.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/website/readiness.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/website/routes.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/website/session.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/website_browser/__init__.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/website_browser/control.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/website_browser/data.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/website_browser/devtools.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/website_browser/environment.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/src/agentenv_protocol/website_browser/shapes.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/computer_fake.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/probe_fake.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_a2a_agent.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_a2a_agent_examples.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_a2a_cdp_config.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_a2a_object_transfers.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_a2a_peer_agents.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_a2a_proxy.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_a2a_staging.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_a2a_trajectory_log.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_agent_env_environment.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_browser_cdp.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_browser_data.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_browser_state.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_client.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_computer_app_server.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_computer_conformance.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_computer_conformance_checks.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_computer_conformance_page.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_computer_conformance_recording.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_computer_dataplane.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_computer_declare.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_computer_driver.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_computer_extensions.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_computer_frames.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_computer_macos.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_computer_page.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_computer_queue.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_computer_recording.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_computer_seed.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_computer_serve.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_computer_served.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_computer_session_windows.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_computer_spaces.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_computer_svc_forward.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_computer_tool_prefix.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_control_token.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_data_objects.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_errors.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_extension_methods.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_intake.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_manifest.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_preflight.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_tool_access.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_tool_annotations.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_tool_client.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_tool_context.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_tool_context_fastmcp.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_tool_context_injection.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_website_api.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_website_browser.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_website_conformance.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_website_environment.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_website_mcp.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_website_notes_example.py +0 -0
- {agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_website_readiness.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: agentenv-framework-protocol
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.496
|
|
4
4
|
Summary: Open data-plane protocol and server SDK for agent environments.
|
|
5
5
|
Project-URL: Homepage, https://www.agentenvframework.com
|
|
6
6
|
Project-URL: Documentation, https://www.agentenvframework.com/docs
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"""An app's data plane as its own server serves it (``AppDataPlane``), by the app's data hooks or, with none, the
|
|
2
2
|
defaults on the paths it keeps its data in, under the session user's home: a load writes the files it's given under
|
|
3
3
|
them, an export returns the files there, and a reset puts back the copy its server kept when it first started on this
|
|
4
|
-
boot, which is the app as installed, since every boot starts from the computer's image.
|
|
4
|
+
boot, which is the app as installed, since every boot starts from the computer's image. An export copies the files with
|
|
5
|
+
the app paused, or, where the app holds one so that no other process may read it, as Windows lets an app hold a file
|
|
6
|
+
and a pause doesn't release, with it stopped and relaunched after."""
|
|
5
7
|
from __future__ import annotations
|
|
6
8
|
|
|
7
9
|
import asyncio
|
|
@@ -17,7 +19,7 @@ from typing import TYPE_CHECKING, Any, Optional
|
|
|
17
19
|
|
|
18
20
|
from ..agent_env_environment import OP_ADD_DATA, OP_GET_DATA, OP_RESET_DATA
|
|
19
21
|
from ..transfers import WriteNamespaceGrant
|
|
20
|
-
from ..types import METHOD_ADD, METHOD_RESET, FilePart, uploaded_object_path
|
|
22
|
+
from ..types import METHOD_ADD, METHOD_GET, METHOD_RESET, FilePart, uploaded_object_path
|
|
21
23
|
from .app_runtime import paused_app
|
|
22
24
|
from .dataplane import data_files, file_parts, part_bytes
|
|
23
25
|
|
|
@@ -27,15 +29,24 @@ if TYPE_CHECKING:
|
|
|
27
29
|
logger = logging.getLogger(__name__)
|
|
28
30
|
|
|
29
31
|
#: The cause a launch after each data call logs.
|
|
30
|
-
_CAUSES = {OP_ADD_DATA: METHOD_ADD, OP_RESET_DATA: METHOD_RESET}
|
|
32
|
+
_CAUSES = {OP_ADD_DATA: METHOD_ADD, OP_GET_DATA: METHOD_GET, OP_RESET_DATA: METHOD_RESET}
|
|
31
33
|
#: Where an app's server keeps its paths as installed, in the app's folder.
|
|
32
34
|
INITIAL = Path(".agentenv/initial")
|
|
35
|
+
#: Windows' errors for a file another process holds so that no other may read it: a sharing violation, and a lock on
|
|
36
|
+
#: the part read.
|
|
37
|
+
_HELD = (32, 33)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class HeldByApp(OSError):
|
|
41
|
+
"""A file under the app's paths that the running app holds so that no other process may read it, which stopping
|
|
42
|
+
the app releases and pausing it doesn't."""
|
|
33
43
|
|
|
34
44
|
|
|
35
45
|
class AppDataPlane:
|
|
36
46
|
"""An app's data plane, served around its contract: one data call or launch at a time; a load and a reset stop the
|
|
37
47
|
running app first and relaunch it after, but for those the app serves live, and a load that fails is followed by a
|
|
38
|
-
reset, when the app says so
|
|
48
|
+
reset, when the app says so; an export the app holds a file of (``HeldByApp``) stops it and relaunches it too. A
|
|
49
|
+
call fails once it runs
|
|
39
50
|
past ``timeout_s`` and is cancelled: what awaits stops at once, but a thread can't be stopped, so a sync hook's or
|
|
40
51
|
a default's thread is waited for, as are the reset and relaunch after it and the next call."""
|
|
41
52
|
|
|
@@ -90,7 +101,7 @@ class AppDataPlane:
|
|
|
90
101
|
running = op != OP_GET_DATA and op not in self.live and await self.runtime.stop_app()
|
|
91
102
|
ran = op in self.live and self.runtime.running()
|
|
92
103
|
try:
|
|
93
|
-
result = await self.
|
|
104
|
+
result = await self._within_held(op, served, args, answer)
|
|
94
105
|
except Exception:
|
|
95
106
|
if op == OP_ADD_DATA and self.resets_failed_add():
|
|
96
107
|
if op in self.live:
|
|
@@ -110,6 +121,24 @@ class AppDataPlane:
|
|
|
110
121
|
else:
|
|
111
122
|
answer.set_result(result)
|
|
112
123
|
|
|
124
|
+
async def _within_held(self, op: str, served: Callable, args: tuple, answer: asyncio.Future) -> Any:
|
|
125
|
+
"""``served``'s result within ``timeout_s``; where the app holds a file of its paths (``HeldByApp``), again with
|
|
126
|
+
the app stopped, in what's left of it, and the app relaunched after, as a load's is."""
|
|
127
|
+
loop = asyncio.get_running_loop()
|
|
128
|
+
deadline = loop.time() + self.timeout_s
|
|
129
|
+
try:
|
|
130
|
+
return await self._within(op, served, args, answer)
|
|
131
|
+
except HeldByApp:
|
|
132
|
+
stopped = await self.runtime.stop_app()
|
|
133
|
+
try:
|
|
134
|
+
result = await self._within(op, served, args, answer, deadline - loop.time())
|
|
135
|
+
finally:
|
|
136
|
+
if stopped:
|
|
137
|
+
await self.runtime.launch_app(_CAUSES[op])
|
|
138
|
+
if stopped and self.relaunched is not None:
|
|
139
|
+
await self.relaunched(op)
|
|
140
|
+
return result
|
|
141
|
+
|
|
113
142
|
async def _undo(self, answer: asyncio.Future) -> None:
|
|
114
143
|
"""Reset the app's data after a load that failed."""
|
|
115
144
|
if (reset := self._served(OP_RESET_DATA)) is None:
|
|
@@ -140,12 +169,14 @@ class AppDataPlane:
|
|
|
140
169
|
OP_GET_DATA: functools.partial(get, self.paths),
|
|
141
170
|
OP_RESET_DATA: functools.partial(reset, self.paths)}[op]
|
|
142
171
|
|
|
143
|
-
async def _within(self, op: str, served: Callable, args: tuple, answer: asyncio.Future
|
|
144
|
-
|
|
145
|
-
|
|
172
|
+
async def _within(self, op: str, served: Callable, args: tuple, answer: asyncio.Future,
|
|
173
|
+
left_s: Optional[float] = None) -> Any:
|
|
174
|
+
"""``served``'s result within ``left_s``, ``timeout_s`` by default; past it, ``answer`` fails at once and the
|
|
175
|
+
call is cancelled, and this raises the same once it has ended: at once for what awaits, after any thread it
|
|
176
|
+
runs."""
|
|
146
177
|
work = asyncio.ensure_future(_called(served, *args))
|
|
147
178
|
try:
|
|
148
|
-
return await asyncio.wait_for(asyncio.shield(work), self.timeout_s)
|
|
179
|
+
return await asyncio.wait_for(asyncio.shield(work), max(0.0, self.timeout_s if left_s is None else left_s))
|
|
149
180
|
except TimeoutError:
|
|
150
181
|
late = TimeoutError(f"{op} ran past the app's data_timeout_s, {self.timeout_s:g} s")
|
|
151
182
|
if not answer.done():
|
|
@@ -185,11 +216,17 @@ async def add(parts: list, paths: list[str]) -> None:
|
|
|
185
216
|
|
|
186
217
|
async def get(paths: list[str], write_namespace: Optional[WriteNamespaceGrant]) -> list:
|
|
187
218
|
"""A part for each file under ``paths``, copied with the app this server launched paused (``paused_app``), so they
|
|
188
|
-
are of one moment, and sent from the copy once it runs again; an app's own data/get hook calls it so too.
|
|
219
|
+
are of one moment, and sent from the copy once it runs again; an app's own data/get hook calls it so too. A file
|
|
220
|
+
the paused app holds raises ``HeldByApp``, for its data plane to copy them with it stopped."""
|
|
189
221
|
INITIAL.parent.mkdir(parents=True, exist_ok=True)
|
|
190
222
|
with tempfile.TemporaryDirectory(dir=INITIAL.parent) as staging:
|
|
191
|
-
|
|
192
|
-
|
|
223
|
+
try:
|
|
224
|
+
with paused_app():
|
|
225
|
+
await in_thread(_stage, Path.home(), paths, Path(staging))
|
|
226
|
+
except OSError as e:
|
|
227
|
+
if getattr(e, "winerror", None) in _HELD:
|
|
228
|
+
raise HeldByApp(f"the running app holds {e.filename or 'a file'} so that nothing else may read it") from e
|
|
229
|
+
raise
|
|
193
230
|
return await file_parts(Path(staging), paths, write_namespace)
|
|
194
231
|
|
|
195
232
|
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
the defaults: a load writes files under them, through no link out of them, an export returns them, and a reset puts back
|
|
3
3
|
the copy its server kept before it served; its card declares a file tree. Hooks override paths, and read the parts they
|
|
4
4
|
get with part_bytes. Around a load and a reset the app is stopped and relaunched, a failed load is followed by a reset,
|
|
5
|
-
and data calls take turns; an
|
|
6
|
-
|
|
5
|
+
and data calls take turns; an export of a file the paused app holds stops it, copies it in what's left of its
|
|
6
|
+
timeout, and relaunches it after; an app that loads live is left running through a load, and a failed one is reset
|
|
7
|
+
with it stopped, or left as it is when the app says so; an app with hooks may keep its paths as installed. A call past
|
|
7
8
|
data_timeout_s fails then and is cancelled, but a sync hook runs in a thread, which its reset and relaunch, and the next
|
|
8
9
|
call, wait for. The app serves its skill file."""
|
|
9
10
|
from __future__ import annotations
|
|
@@ -20,7 +21,7 @@ pytest.importorskip("mcp.server.fastmcp")
|
|
|
20
21
|
|
|
21
22
|
import httpx # noqa: E402
|
|
22
23
|
|
|
23
|
-
from agentenv_protocol import add_data, client, reset_data # noqa: E402
|
|
24
|
+
from agentenv_protocol import add_data, client, get_data, reset_data # noqa: E402
|
|
24
25
|
from agentenv_protocol.agent_env_environment import OP_ADD_DATA # noqa: E402
|
|
25
26
|
from agentenv_protocol.computer import ComputerAppEnvironment, Launch, linux, part_bytes # noqa: E402
|
|
26
27
|
from agentenv_protocol.computer import app, app_data, app_runtime, session # noqa: E402
|
|
@@ -106,8 +107,10 @@ def desktop(monkeypatch):
|
|
|
106
107
|
@contextlib.contextmanager
|
|
107
108
|
def paused(pid):
|
|
108
109
|
events.append(("pause", pid))
|
|
109
|
-
|
|
110
|
-
|
|
110
|
+
try:
|
|
111
|
+
yield
|
|
112
|
+
finally:
|
|
113
|
+
events.append(("continue", pid))
|
|
111
114
|
|
|
112
115
|
monkeypatch.setattr(session, "launch", launch)
|
|
113
116
|
monkeypatch.setattr(session, "stop", stop)
|
|
@@ -210,6 +213,32 @@ async def test_a_load_and_a_reset_stop_the_running_app_and_relaunch_it_and_an_ex
|
|
|
210
213
|
("stop", 4244), ("launch", 4248)]
|
|
211
214
|
|
|
212
215
|
|
|
216
|
+
@pytest.mark.asyncio
|
|
217
|
+
async def test_an_export_of_a_file_the_paused_app_holds_stops_the_app_copies_it_and_relaunches_it(home, desktop,
|
|
218
|
+
monkeypatch):
|
|
219
|
+
"""As Windows lets an app hold a file that no other process may read, which a pause doesn't release."""
|
|
220
|
+
(home / "Mail").mkdir()
|
|
221
|
+
(home / "Mail/inbox.txt").write_text("held")
|
|
222
|
+
mail = PathsMail()
|
|
223
|
+
mail._computer_app_data_plane().keep_initial()
|
|
224
|
+
await mail._computer_app.launch_app()
|
|
225
|
+
stage = app_data._stage
|
|
226
|
+
|
|
227
|
+
def held_while_running(*args):
|
|
228
|
+
if desktop[-1][0] == "pause":
|
|
229
|
+
held = PermissionError(13, "The process cannot access the file", str(home / "Mail/inbox.txt"))
|
|
230
|
+
held.winerror = 32
|
|
231
|
+
raise held
|
|
232
|
+
stage(*args)
|
|
233
|
+
|
|
234
|
+
monkeypatch.setattr(app_data, "_stage", held_while_running)
|
|
235
|
+
async with _http(mail) as http:
|
|
236
|
+
exported = _files(await _rpc(http, "data/get", {}))
|
|
237
|
+
|
|
238
|
+
assert [event[0] for event in desktop] == ["launch", "pause", "continue", "stop", "launch"]
|
|
239
|
+
assert desktop[3] == ("stop", 4242) and exported["Mail/inbox.txt"] == b"held"
|
|
240
|
+
|
|
241
|
+
|
|
213
242
|
@pytest.mark.asyncio
|
|
214
243
|
async def test_an_export_copies_the_paths_with_the_app_paused_and_sends_the_copy_once_it_runs_again(home, desktop,
|
|
215
244
|
monkeypatch):
|
|
@@ -414,6 +443,32 @@ async def test_calls_take_turns_and_one_past_its_timeout_fails_then_while_what_f
|
|
|
414
443
|
("launch", 4248), ("stop", 4248), ("load", 1), ("loaded", 1), ("launch", 4252)]
|
|
415
444
|
|
|
416
445
|
|
|
446
|
+
@pytest.mark.asyncio
|
|
447
|
+
async def test_an_export_retried_with_the_app_stopped_gets_only_what_is_left_of_its_timeout(home, desktop):
|
|
448
|
+
@linux(launch=Launch(command=["held"]))
|
|
449
|
+
class Held(ComputerAppEnvironment):
|
|
450
|
+
data_timeout_s = 1.0
|
|
451
|
+
|
|
452
|
+
@get_data
|
|
453
|
+
async def export(self) -> list:
|
|
454
|
+
if desktop[-1][0] == "launch":
|
|
455
|
+
await asyncio.sleep(0.8)
|
|
456
|
+
raise app_data.HeldByApp("the running app holds a file")
|
|
457
|
+
await asyncio.Event().wait()
|
|
458
|
+
|
|
459
|
+
held = Held()
|
|
460
|
+
await held._computer_app.launch_app()
|
|
461
|
+
started = time.monotonic()
|
|
462
|
+
async with _http(held) as http:
|
|
463
|
+
late = await http.post(RPC_PATH, json=_call("data/get", {}))
|
|
464
|
+
answered = time.monotonic() - started
|
|
465
|
+
await asyncio.gather(*held._computer_app_data_plane().changing)
|
|
466
|
+
|
|
467
|
+
assert late.json()["error"]["message"] == "get_data ran past the app's data_timeout_s, 1 s"
|
|
468
|
+
assert answered < 1.5
|
|
469
|
+
assert desktop == [("launch", 4242), ("stop", 4242), ("launch", 4244)]
|
|
470
|
+
|
|
471
|
+
|
|
417
472
|
@pytest.mark.asyncio
|
|
418
473
|
async def test_it_serves_its_skill_file_and_no_skill_without_one(home, tmp_path):
|
|
419
474
|
(tmp_path / "folder" / "SKILL.md").write_text("---\ndescription: Reading and sending mail.\n---\n\n# Mail\nUse it.\n")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/THIRD_PARTY_NOTICES.md
RENAMED
|
File without changes
|
{agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/examples/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/examples/basic_agent.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
|
|
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
|
{agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/computer_fake.py
RENAMED
|
File without changes
|
{agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/probe_fake.py
RENAMED
|
File without changes
|
{agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_a2a_agent.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_a2a_proxy.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_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
|
{agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_errors.py
RENAMED
|
File without changes
|
|
File without changes
|
{agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_intake.py
RENAMED
|
File without changes
|
{agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_manifest.py
RENAMED
|
File without changes
|
{agentenv_framework_protocol-0.1.494 → agentenv_framework_protocol-0.1.496}/tests/test_preflight.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
|