agentenv-framework-protocol 0.1.477__tar.gz → 0.1.479__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.477 → agentenv_framework_protocol-0.1.479}/PKG-INFO +4 -2
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/README.md +3 -1
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/pyproject.toml +1 -1
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/app_data.py +6 -6
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/app_runtime.py +9 -4
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/conformance/fixture.py +41 -2
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_computer_app_data.py +13 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_computer_conformance.py +71 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/.gitignore +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/LICENSE +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/NOTICE +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/THIRD_PARTY_NOTICES.md +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/examples/__init__.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/examples/advanced_agent.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/examples/basic_agent.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/examples/custom_extensions_agent.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/examples/multimodal_agent.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/examples/reference_model.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/examples/streaming_agent.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/examples/website/notes/.gitignore +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/examples/website/notes/Dockerfile +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/examples/website/notes/Dockerfile.dockerignore +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/examples/website/notes/README.md +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/examples/website/notes/data/seed.json +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/examples/website/notes/env.toml +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/examples/website/notes/site.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/examples/website/notes/web/index.html +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/examples/website/notes/web/package-lock.json +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/examples/website/notes/web/package.json +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/examples/website/notes/web/src/main.js +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/examples/website/notes/web/src/style.css +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/examples/website/notes/web/vite.config.js +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/__init__.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/a2a_agent/__init__.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/a2a_agent/_trajectory_log.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/a2a_agent/_triggers.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/a2a_agent/extensions.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/a2a_agent/framework.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/a2a_agent/peer_agents.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/a2a_agent/proxy.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/a2a_agent/registry.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/a2a_agent/staging.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/a2a_agent/tasks/__init__.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/a2a_agent/tasks/v1.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/agent_env_environment.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/browser_cdp.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/client.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/__init__.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/_declare.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/_linux.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/_load.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/_macos.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/_with_fds.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/_x11.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/app.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/apps.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/card.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/checks.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/conformance/__init__.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/conformance/__main__.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/conformance/checks.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/conformance/client.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/conformance/mp4.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/conformance/page_fixture.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/conformance/report.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/dataplane.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/driver.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/errors.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/extensions.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/frames.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/keys.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/launch.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/manifest.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/operations.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/platform.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/queue.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/recording.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/results.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/run_install_step.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/runtime.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/seed.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/serve.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/serve_app.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/session.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/settings.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/skill.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/spaces.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/svc.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/computer/tools.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/errors.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/manifest.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/preflight.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/tool_access.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/tool_client.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/tool_context.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/transfers.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/types.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/website/__init__.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/website/clock.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/website/conformance.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/website/environment.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/website/errors.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/website/readiness.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/website/routes.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/website/session.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/website_browser/__init__.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/website_browser/control.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/website_browser/data.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/website_browser/devtools.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/website_browser/environment.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/src/agentenv_protocol/website_browser/shapes.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/computer_fake.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/probe_fake.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_a2a_agent.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_a2a_agent_examples.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_a2a_cdp_config.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_a2a_object_transfers.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_a2a_peer_agents.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_a2a_proxy.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_a2a_staging.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_a2a_trajectory_log.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_agent_env_environment.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_browser_cdp.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_browser_data.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_browser_state.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_client.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_computer_app_server.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_computer_conformance_checks.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_computer_conformance_page.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_computer_conformance_recording.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_computer_dataplane.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_computer_declare.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_computer_driver.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_computer_extensions.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_computer_frames.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_computer_macos.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_computer_page.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_computer_queue.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_computer_recording.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_computer_seed.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_computer_serve.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_computer_spaces.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_computer_svc_forward.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_control_token.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_data_objects.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_errors.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_extension_methods.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_intake.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_manifest.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_preflight.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_tool_access.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_tool_annotations.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_tool_client.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_tool_context.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_tool_context_fastmcp.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_tool_context_injection.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_website_api.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_website_browser.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_website_conformance.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_website_environment.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_website_mcp.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_website_notes_example.py +0 -0
- {agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/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.479
|
|
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
|
|
@@ -761,7 +761,9 @@ driver booted with a control token is probed with it: `--token`, by default
|
|
|
761
761
|
|
|
762
762
|
At `full` the probe writes the Fixture Desk, a Tk window (`conformance/fixture.py`), into
|
|
763
763
|
`~/.agentenv-probe` with `data/add` and starts it with `computer-exec`. It aims at the boxes the
|
|
764
|
-
window's widgets report, reads back what reached them, and then removes the fixture.
|
|
764
|
+
window's widgets report, reads back what reached them, and then removes the fixture. On X11 the
|
|
765
|
+
window is maximized and kept above other windows, raising itself again when one covers it, so a
|
|
766
|
+
window an app keeps on top doesn't take the clicks aimed at it; elsewhere it is full screen. When the
|
|
765
767
|
fixture can't be staged, the `full` checks are unverified rather than failed.
|
|
766
768
|
|
|
767
769
|
On a driver whose card says `screen: "page"`, the desk is an HTML page with the same widgets at the
|
|
@@ -696,7 +696,9 @@ driver booted with a control token is probed with it: `--token`, by default
|
|
|
696
696
|
|
|
697
697
|
At `full` the probe writes the Fixture Desk, a Tk window (`conformance/fixture.py`), into
|
|
698
698
|
`~/.agentenv-probe` with `data/add` and starts it with `computer-exec`. It aims at the boxes the
|
|
699
|
-
window's widgets report, reads back what reached them, and then removes the fixture.
|
|
699
|
+
window's widgets report, reads back what reached them, and then removes the fixture. On X11 the
|
|
700
|
+
window is maximized and kept above other windows, raising itself again when one covers it, so a
|
|
701
|
+
window an app keeps on top doesn't take the clicks aimed at it; elsewhere it is full screen. When the
|
|
700
702
|
fixture can't be staged, the `full` checks are unverified rather than failed.
|
|
701
703
|
|
|
702
704
|
On a driver whose card says `screen: "page"`, the desk is an HTML page with the same widgets at the
|
|
@@ -18,6 +18,7 @@ from typing import TYPE_CHECKING, Any, Optional
|
|
|
18
18
|
from ..agent_env_environment import OP_ADD_DATA, OP_GET_DATA, OP_RESET_DATA
|
|
19
19
|
from ..transfers import WriteNamespaceGrant
|
|
20
20
|
from ..types import METHOD_ADD, METHOD_RESET, FilePart, uploaded_object_path
|
|
21
|
+
from .app_runtime import paused_app
|
|
21
22
|
from .dataplane import data_files, file_parts, part_bytes
|
|
22
23
|
|
|
23
24
|
if TYPE_CHECKING:
|
|
@@ -131,7 +132,7 @@ class AppDataPlane:
|
|
|
131
132
|
if not self.paths:
|
|
132
133
|
return None
|
|
133
134
|
return {OP_ADD_DATA: functools.partial(add, paths=self.paths),
|
|
134
|
-
OP_GET_DATA: functools.partial(get, self.paths
|
|
135
|
+
OP_GET_DATA: functools.partial(get, self.paths),
|
|
135
136
|
OP_RESET_DATA: functools.partial(reset, self.paths)}[op]
|
|
136
137
|
|
|
137
138
|
async def _within(self, op: str, served: Callable, args: tuple, answer: asyncio.Future) -> Any:
|
|
@@ -177,13 +178,12 @@ async def add(parts: list, paths: list[str]) -> None:
|
|
|
177
178
|
await in_thread(write_within, Path.home(), files, paths)
|
|
178
179
|
|
|
179
180
|
|
|
180
|
-
async def get(paths: list[str],
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
the copy once it runs again."""
|
|
181
|
+
async def get(paths: list[str], write_namespace: Optional[WriteNamespaceGrant]) -> list:
|
|
182
|
+
"""A part for each file under ``paths``, copied with the app this server launched paused (``paused_app``), so they
|
|
183
|
+
are of one moment, and sent from the copy once it runs again; an app's own data/get hook calls it so too."""
|
|
184
184
|
INITIAL.parent.mkdir(parents=True, exist_ok=True)
|
|
185
185
|
with tempfile.TemporaryDirectory(dir=INITIAL.parent) as staging:
|
|
186
|
-
with
|
|
186
|
+
with paused_app():
|
|
187
187
|
await in_thread(_stage, Path.home(), paths, Path(staging))
|
|
188
188
|
return await file_parts(Path(staging), paths, write_namespace)
|
|
189
189
|
|
|
@@ -139,10 +139,8 @@ class AppRuntime:
|
|
|
139
139
|
return _running() is not None
|
|
140
140
|
|
|
141
141
|
def paused(self) -> contextlib.AbstractContextManager:
|
|
142
|
-
"""The app this server launched last
|
|
143
|
-
|
|
144
|
-
pid = _running()
|
|
145
|
-
return session.paused(pid) if pid is not None else contextlib.nullcontext()
|
|
142
|
+
"""The app this server launched last paused while the block runs (``paused_app``)."""
|
|
143
|
+
return paused_app()
|
|
146
144
|
|
|
147
145
|
def exited(self) -> bool:
|
|
148
146
|
"""Log that the app this server launched last ended on its own, with its exit code or the signal that ended
|
|
@@ -242,6 +240,13 @@ def _running() -> Optional[int]:
|
|
|
242
240
|
return pid if pid is not None and session.alive(pid) else None
|
|
243
241
|
|
|
244
242
|
|
|
243
|
+
def paused_app() -> contextlib.AbstractContextManager:
|
|
244
|
+
"""The app this server launched last, every process of it, paused while the block runs, so a copy of its files
|
|
245
|
+
taken meanwhile is of one moment; nothing when it isn't running."""
|
|
246
|
+
pid = _running()
|
|
247
|
+
return session.paused(pid) if pid is not None else contextlib.nullcontext()
|
|
248
|
+
|
|
249
|
+
|
|
245
250
|
async def _bounded(name: str, check: Awaitable[Optional[str]]) -> Optional[str]:
|
|
246
251
|
"""What ``check`` finds wrong, within ``CHECK_TIMEOUT_S``; a check that runs past it or raises says so."""
|
|
247
252
|
try:
|
|
@@ -2,13 +2,15 @@
|
|
|
2
2
|
Desk, whose widgets' screen boxes are written to <state-dir>/layout.json and every effect that reaches it, with
|
|
3
3
|
whatever lands in <state-dir>/inbox.txt, to <state-dir>/state.json, so the probe can aim at it and read back what
|
|
4
4
|
arrived. It records the same effects under X11, macOS's Aqua and Windows, whose Tk names keys, binds select-all and
|
|
5
|
-
reports the wheel differently.
|
|
5
|
+
reports the wheel differently. On X11 it stays above an app's windows (``keep_on_top``); elsewhere it's full screen.
|
|
6
|
+
Run as ``python3 fixture.py <state-dir>``; it needs a 1280x800 screen or larger."""
|
|
6
7
|
from __future__ import annotations
|
|
7
8
|
|
|
8
9
|
import ctypes
|
|
9
10
|
import json
|
|
10
11
|
import os
|
|
11
12
|
import sys
|
|
13
|
+
import time
|
|
12
14
|
import tkinter as tk
|
|
13
15
|
from pathlib import Path
|
|
14
16
|
|
|
@@ -29,6 +31,8 @@ NOTCH_DELTA = 120
|
|
|
29
31
|
Y_BITS = 16
|
|
30
32
|
#: The pixels of a scrolled line, macOS's for a scroll posted in lines.
|
|
31
33
|
LINE_PX = 10
|
|
34
|
+
#: The least time between two of the fixture's raises over other windows, so it can't fight one that raises itself.
|
|
35
|
+
LIFT_GAP_S = 0.5
|
|
32
36
|
|
|
33
37
|
|
|
34
38
|
def main(state_dir: Path) -> None:
|
|
@@ -37,7 +41,10 @@ def main(state_dir: Path) -> None:
|
|
|
37
41
|
root.title("Fixture Desk")
|
|
38
42
|
width, height = root.winfo_screenwidth(), root.winfo_screenheight()
|
|
39
43
|
root.geometry(f"{width}x{height}+0+0")
|
|
40
|
-
root.
|
|
44
|
+
if root.tk.call("tk", "windowingsystem") == "x11":
|
|
45
|
+
keep_on_top(root)
|
|
46
|
+
else:
|
|
47
|
+
root.attributes("-fullscreen", True)
|
|
41
48
|
root.configure(bg="#f0f0f0")
|
|
42
49
|
state: dict = {"name": "", "notes": "", "keys": [], "saved_count": 0, "subscribed": False, "selected": None,
|
|
43
50
|
"scroll_top": 0.0, "cells": {}, "right_clicks": 0, "double_clicks": 0, "drags": [],
|
|
@@ -227,6 +234,38 @@ def main(state_dir: Path) -> None:
|
|
|
227
234
|
root.mainloop()
|
|
228
235
|
|
|
229
236
|
|
|
237
|
+
def keep_on_top(root: tk.Tk) -> None:
|
|
238
|
+
"""Keep the fixture over the windows an app opens, which would take the probe's clicks: maximized and above other
|
|
239
|
+
windows rather than full screen, since xfwm4 keeps a window an app puts above over a full-screen one, and raised
|
|
240
|
+
again, giving the focus back to the widget that last had it, whenever another window covers some of it, at most once
|
|
241
|
+
each LIFT_GAP_S."""
|
|
242
|
+
root.attributes("-zoomed", True)
|
|
243
|
+
root.attributes("-topmost", True)
|
|
244
|
+
seen: dict = {"state": "VisibilityUnobscured", "lifted": 0.0, "pending": None}
|
|
245
|
+
|
|
246
|
+
def lift() -> None:
|
|
247
|
+
seen["pending"] = None
|
|
248
|
+
if seen["state"] == "VisibilityUnobscured":
|
|
249
|
+
return
|
|
250
|
+
seen["lifted"] = time.monotonic()
|
|
251
|
+
# Taking the layer above again restacks it on top, which a raise request alone doesn't get from xfwm4.
|
|
252
|
+
root.attributes("-topmost", False)
|
|
253
|
+
root.attributes("-topmost", True)
|
|
254
|
+
root.lift()
|
|
255
|
+
# The widget that last had the focus gets it back, so keys the probe types into a text box still reach it.
|
|
256
|
+
(root.focus_lastfor() or root).focus_force()
|
|
257
|
+
|
|
258
|
+
def visibility(event: tk.Event) -> None:
|
|
259
|
+
if event.widget is not root:
|
|
260
|
+
return
|
|
261
|
+
seen["state"] = event.state
|
|
262
|
+
if event.state != "VisibilityUnobscured" and seen["pending"] is None:
|
|
263
|
+
wait = max(0.0, seen["lifted"] + LIFT_GAP_S - time.monotonic())
|
|
264
|
+
seen["pending"] = root.after(round(wait * 1000), lift)
|
|
265
|
+
|
|
266
|
+
root.bind("<Visibility>", visibility, add="+")
|
|
267
|
+
|
|
268
|
+
|
|
230
269
|
def wheel_steps(delta: int) -> int:
|
|
231
270
|
"""The wheel steps a <MouseWheel> event's ``delta`` holds, up positive: whole notches of 120 where Tk scales them
|
|
232
271
|
so (Windows, and Tk 9 everywhere), else one a unit (Aqua's Tk 8.6)."""
|
|
@@ -138,6 +138,19 @@ async def test_an_app_with_only_paths_loads_exports_and_resets_them_as_installed
|
|
|
138
138
|
assert reset == {"Mail/inbox.txt": b"installed"}
|
|
139
139
|
|
|
140
140
|
|
|
141
|
+
@pytest.mark.asyncio
|
|
142
|
+
async def test_get_takes_paths_and_a_write_namespace_and_pauses_the_running_app_as_exported_apps_call_it(home,
|
|
143
|
+
desktop):
|
|
144
|
+
(home / "Mail").mkdir()
|
|
145
|
+
(home / "Mail/inbox.txt").write_text("kept")
|
|
146
|
+
await PathsMail()._computer_app.launch_app()
|
|
147
|
+
|
|
148
|
+
parts = await app_data.get(["Mail"], None)
|
|
149
|
+
|
|
150
|
+
assert [await part_bytes(part) for part in parts] == [b"kept"]
|
|
151
|
+
assert desktop == [("launch", 4242), ("pause", 4242), ("continue", 4242)]
|
|
152
|
+
|
|
153
|
+
|
|
141
154
|
@pytest.mark.asyncio
|
|
142
155
|
async def test_a_file_under_none_of_its_paths_or_through_a_link_out_of_them_is_refused_and_nothing_is_written(home):
|
|
143
156
|
(home / "Documents").mkdir()
|
|
@@ -323,6 +323,77 @@ def test_the_fixture_counts_a_scroll_tk_9_reports_in_pixels_by_the_lines_it_move
|
|
|
323
323
|
assert _fixture(monkeypatch).touchpad_steps(delta) == steps
|
|
324
324
|
|
|
325
325
|
|
|
326
|
+
class _Root:
|
|
327
|
+
"""A Tk root stood in for: the attributes set on it in order, its bindings, the calls made to it, and what
|
|
328
|
+
``after`` was given to run, with its delay."""
|
|
329
|
+
|
|
330
|
+
def __init__(self):
|
|
331
|
+
self.set, self.calls, self.bound, self.timers = [], [], {}, []
|
|
332
|
+
self.last = self
|
|
333
|
+
|
|
334
|
+
def focus_lastfor(self):
|
|
335
|
+
return self.last
|
|
336
|
+
|
|
337
|
+
def attributes(self, name, value):
|
|
338
|
+
self.set.append((name, value))
|
|
339
|
+
|
|
340
|
+
def bind(self, sequence, handler, add=None):
|
|
341
|
+
self.bound[sequence] = handler
|
|
342
|
+
|
|
343
|
+
def after(self, ms, callback):
|
|
344
|
+
self.timers.append((ms, callback))
|
|
345
|
+
return f"after#{len(self.timers)}"
|
|
346
|
+
|
|
347
|
+
def lift(self):
|
|
348
|
+
self.calls.append("lift")
|
|
349
|
+
|
|
350
|
+
def focus_force(self):
|
|
351
|
+
self.calls.append("focus_force")
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
def test_the_fixture_on_x11_stays_maximized_above_other_windows_and_takes_the_top_back_once_one_covers_it(monkeypatch):
|
|
355
|
+
"""A window an app keeps above, as Typora's licence dialog is for its first seconds, otherwise takes the clicks the
|
|
356
|
+
probe aims at the fixture."""
|
|
357
|
+
fixture = _fixture(monkeypatch)
|
|
358
|
+
now = [100.0]
|
|
359
|
+
monkeypatch.setattr(fixture.time, "monotonic", lambda: now[0])
|
|
360
|
+
root = _Root()
|
|
361
|
+
fixture.keep_on_top(root)
|
|
362
|
+
seen = root.bound["<Visibility>"]
|
|
363
|
+
|
|
364
|
+
seen(SimpleNamespace(widget="a child", state="VisibilityFullyObscured"))
|
|
365
|
+
for_child = list(root.timers)
|
|
366
|
+
seen(SimpleNamespace(widget=root, state="VisibilityPartiallyObscured"))
|
|
367
|
+
seen(SimpleNamespace(widget=root, state="VisibilityPartiallyObscured"))
|
|
368
|
+
(first, lift), = root.timers
|
|
369
|
+
lift()
|
|
370
|
+
lifted = (root.set[2:], list(root.calls))
|
|
371
|
+
now[0] += 0.1
|
|
372
|
+
seen(SimpleNamespace(widget=root, state="VisibilityFullyObscured"))
|
|
373
|
+
second, again = root.timers[1]
|
|
374
|
+
seen(SimpleNamespace(widget=root, state="VisibilityUnobscured"))
|
|
375
|
+
again()
|
|
376
|
+
|
|
377
|
+
assert root.set[:2] == [("-zoomed", True), ("-topmost", True)] and for_child == []
|
|
378
|
+
assert first == 0 and lifted == ([("-topmost", False), ("-topmost", True)], ["lift", "focus_force"])
|
|
379
|
+
assert second == round((fixture.LIFT_GAP_S - 0.1) * 1000) and root.calls == ["lift", "focus_force"]
|
|
380
|
+
|
|
381
|
+
|
|
382
|
+
def test_the_fixture_gives_the_focus_back_to_the_text_box_that_had_it_when_it_takes_the_top_back(monkeypatch):
|
|
383
|
+
"""A window an app opens during a typing check would otherwise leave the probe's keys with the fixture's root."""
|
|
384
|
+
fixture = _fixture(monkeypatch)
|
|
385
|
+
monkeypatch.setattr(fixture.time, "monotonic", lambda: 100.0)
|
|
386
|
+
root, name = _Root(), _Root()
|
|
387
|
+
root.last = name
|
|
388
|
+
fixture.keep_on_top(root)
|
|
389
|
+
|
|
390
|
+
root.bound["<Visibility>"](SimpleNamespace(widget=root, state="VisibilityPartiallyObscured"))
|
|
391
|
+
(_, lift), = root.timers
|
|
392
|
+
lift()
|
|
393
|
+
|
|
394
|
+
assert root.calls == ["lift"] and name.calls == ["focus_force"]
|
|
395
|
+
|
|
396
|
+
|
|
326
397
|
def _fixture(monkeypatch):
|
|
327
398
|
"""The fixture module, which runs in the computer, read with Tk stood in for, as this Python may have none."""
|
|
328
399
|
monkeypatch.setitem(sys.modules, "tkinter", ModuleType("tkinter"))
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/THIRD_PARTY_NOTICES.md
RENAMED
|
File without changes
|
{agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/examples/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/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
|
{agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/computer_fake.py
RENAMED
|
File without changes
|
{agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/probe_fake.py
RENAMED
|
File without changes
|
{agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/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.477 → agentenv_framework_protocol-0.1.479}/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.477 → agentenv_framework_protocol-0.1.479}/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
|
{agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_errors.py
RENAMED
|
File without changes
|
|
File without changes
|
{agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_intake.py
RENAMED
|
File without changes
|
{agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/tests/test_manifest.py
RENAMED
|
File without changes
|
{agentenv_framework_protocol-0.1.477 → agentenv_framework_protocol-0.1.479}/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
|