microsoft-agent 2.3.3__tar.gz → 2.3.5__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.
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/MANIFEST.in +0 -1
- {microsoft_agent-2.3.3/microsoft_agent.egg-info → microsoft_agent-2.3.5}/PKG-INFO +4 -6
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/README.md +1 -3
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/_version.py +1 -1
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/api/api_client_other.py +6 -1
- microsoft_agent-2.3.5/microsoft_agent/connector_sources.py +83 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/graph_file_service.py +17 -44
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/integration_tools.py +9 -3
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/ontology/certification.json +0 -3
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/ontology/microsoft.ttl +7 -11
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/power_platform.py +19 -2
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/prompts/collaboration_specialist.json +0 -2
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/universal_print.py +18 -47
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5/microsoft_agent.egg-info}/PKG-INFO +4 -6
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent.egg-info/SOURCES.txt +3 -5
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent.egg-info/entry_points.txt +3 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent.egg-info/requires.txt +2 -2
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/pyproject.toml +6 -2
- microsoft_agent-2.3.5/tests/test_default_content_surfaces.py +43 -0
- microsoft_agent-2.3.5/tests/test_sdk_centralization.py +95 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_transport_migration.py +10 -2
- microsoft_agent-2.3.3/.env.example +0 -100
- microsoft_agent-2.3.3/connector_manifest.yml +0 -180
- microsoft_agent-2.3.3/microsoft_agent/connectors/mcp_source_presets.json +0 -39
- microsoft_agent-2.3.3/microsoft_agent/connectors/tool_schema_fingerprints.json +0 -8
- microsoft_agent-2.3.3/mkdocs.yml +0 -90
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/LICENSE +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/deployment/control-plane/README.md +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/deployment/control-plane/control-plane.sample.json +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/deployment/control-plane/nginx/windows-control-plane.conf +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/deployment/control-plane/systemd/microsoft-windows-control-plane.env +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/deployment/control-plane/systemd/microsoft-windows-control-plane.service +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/deployment/entra/New-MicrosoftAgentApp.ps1 +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/deployment/entra/New-WindowsControlPlaneEntraResources.ps1 +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/deployment/entra/README.md +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/deployment/entra/permission-profiles.json +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/deployment/integrations.example.json +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/deployment/windows/Install-WindowsCompanion.ps1 +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/deployment/windows/README.md +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/deployment/windows/Run-WindowsCompanion.ps1 +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/deployment/windows/Test-WindowsCompanionDeployment.ps1 +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/deployment/windows/Uninstall-WindowsCompanion.ps1 +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/deployment/windows/windows-companion.sample.json +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/docs/authentication.md +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/docs/concepts.md +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/docs/configuration.md +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/docs/deployment.md +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/docs/enrollment-checklist.md +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/docs/index.md +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/docs/installation.md +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/docs/integrations.md +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/docs/office-addin.md +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/docs/overview.md +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/docs/usage.md +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/docs/windows-companion.md +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/__init__.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/__main__.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/api/__init__.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/api/_graph_models.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/api/api_client_admin.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/api/api_client_apps.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/api/api_client_base.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/api/api_client_calendar.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/api/api_client_directory.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/api/api_client_drive.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/api/api_client_mail.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/api/api_client_system.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/api_client.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/auth.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/config_cli.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/connectors/__init__.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/credential_adapter.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/document_service.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/integration_adapters.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/integration_auth.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/integration_config.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/intune_service.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/kg_ingest.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/__init__.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_admin.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_agreements.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_applications.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_audit.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_auth.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_calendar.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_chat.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_communications.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_connections.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_contacts.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_devices.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_directory.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_domains.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_education.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_employee_experience.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_files.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_groups.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_identity.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_mail.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_meta.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_notes.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_organization.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_places.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_policies.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_print.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_privacy.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_reports.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_search.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_security.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_sites.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_solutions.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_storage.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_subscriptions.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_tasks.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_teams.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp/mcp_user.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp_config.json +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/mcp_server.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/office_bridge.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/ontology/__init__.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/ontology/fixtures/records.json +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/ontology/mappings/source.yaml +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/ontology/migrations/manifest.json +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/ontology/shapes/connector.shacl.ttl +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/prompts/__init__.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/settings.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/skills/__init__.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/skills/microsoft-agent-operations/SKILL.md +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/skills/microsoft-agent-operations/agents/openai.yaml +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/skills/microsoft-agent-operations/references/catalog.md +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/skills/microsoft-calendar-scheduling/SKILL.md +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/skills/microsoft-mail-operations/SKILL.md +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/skills/microsoft-teams-messaging/SKILL.md +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/tool_policy.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/windows_companion.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/windows_companion_service.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/windows_control_plane.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/windows_control_plane_service.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent/windows_runtime.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent.egg-info/dependency_links.txt +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/microsoft_agent.egg-info/top_level.txt +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/office_addin/README.md +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/office_addin/manifest.xml +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/office_addin/package-lock.json +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/office_addin/package.json +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/office_addin/public/assets/icon.png.b64 +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/office_addin/public/assets/icon.svg +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/office_addin/public/config.json +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/office_addin/public/styles.css +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/office_addin/public/taskpane.html +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/office_addin/scripts/validate_manifest.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/office_addin/src/backend-client.ts +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/office_addin/src/office-bridge.ts +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/office_addin/src/office-operations.ts +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/office_addin/src/taskpane.ts +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/office_addin/src/validation.ts +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/office_addin/tests/backend-client.test.ts +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/office_addin/tests/office-bridge.test.ts +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/office_addin/tests/validation.test.ts +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/office_addin/tsconfig.json +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/office_addin/vitest.config.ts +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/office_addin/webpack.config.cjs +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/setup.cfg +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_api_client_extended.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_auth.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_auth_coverage.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_bug_cx_046_ctx_info_awaited.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_config_cli.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_credential_adapter.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_document_service.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_generate_code.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_graph_file_service.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_graph_reliability.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_graph_transport.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_init_dynamics.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_integration_adapters.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_integration_auth.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_integration_config_and_tools.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_intune_service.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_kg_ingest.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_main.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_mcp_comprehensive.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_mcp_server.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_office_bridge.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_office_manifest.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_onenote_sharepoint_print.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_placeholder.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_power_platform.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_settings_and_policy.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_startup.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_teams_reliability.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_transport_tls.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_verify_api_integration.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_windows_companion.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_windows_control_plane.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_windows_control_plane_service.py +0 -0
- {microsoft_agent-2.3.3 → microsoft_agent-2.3.5}/tests/test_windows_runtime.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: microsoft-agent
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.5
|
|
4
4
|
Summary: Governed Microsoft Graph agent and MCP server
|
|
5
5
|
Author-email: Project Maintainers <maintainers@users.noreply.github.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -11,7 +11,7 @@ Classifier: Programming Language :: Python :: 3
|
|
|
11
11
|
Requires-Python: >=3.12
|
|
12
12
|
Description-Content-Type: text/markdown
|
|
13
13
|
License-File: LICENSE
|
|
14
|
-
Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.
|
|
14
|
+
Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.1
|
|
15
15
|
Requires-Dist: azure-core>=1.41.0
|
|
16
16
|
Requires-Dist: httpx>=0.28.1
|
|
17
17
|
Requires-Dist: keyring>=25.7.0
|
|
@@ -19,7 +19,7 @@ Requires-Dist: msal>=1.39.0
|
|
|
19
19
|
Requires-Dist: msgraph-sdk>=1.64.0
|
|
20
20
|
Requires-Dist: pydantic>=2.14.1
|
|
21
21
|
Provides-Extra: mcp
|
|
22
|
-
Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.
|
|
22
|
+
Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.1; extra == "mcp"
|
|
23
23
|
Provides-Extra: documents
|
|
24
24
|
Requires-Dist: python-docx>=1.2.0; extra == "documents"
|
|
25
25
|
Requires-Dist: python-pptx>=1.0.2; extra == "documents"
|
|
@@ -71,7 +71,7 @@ Dynamic: license-file
|
|
|
71
71
|
agent. It uses Agent Connector SDK for MCP, identity propagation, intent delegation,
|
|
72
72
|
configuration, telemetry, and graph integration.
|
|
73
73
|
|
|
74
|
-
Current package version: **2.3.
|
|
74
|
+
Current package version: **2.3.5**
|
|
75
75
|
|
|
76
76
|
## Capabilities
|
|
77
77
|
|
|
@@ -890,8 +890,6 @@ _Auto-generated from the code-read env surface (`MCP_TOOL_MODE` + package vars)
|
|
|
890
890
|
|
|
891
891
|
The provider contributes:
|
|
892
892
|
|
|
893
|
-
- `microsoft_agent/connectors/mcp_source_presets.json`
|
|
894
|
-
- `connector_manifest.yml`
|
|
895
893
|
- `microsoft_agent/ontology/microsoft.ttl`
|
|
896
894
|
- SHACL, mapping, fixture, migration, schema-fingerprint, and certification assets
|
|
897
895
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
agent. It uses Agent Connector SDK for MCP, identity propagation, intent delegation,
|
|
4
4
|
configuration, telemetry, and graph integration.
|
|
5
5
|
|
|
6
|
-
Current package version: **2.3.
|
|
6
|
+
Current package version: **2.3.5**
|
|
7
7
|
|
|
8
8
|
## Capabilities
|
|
9
9
|
|
|
@@ -822,8 +822,6 @@ _Auto-generated from the code-read env surface (`MCP_TOOL_MODE` + package vars)
|
|
|
822
822
|
|
|
823
823
|
The provider contributes:
|
|
824
824
|
|
|
825
|
-
- `microsoft_agent/connectors/mcp_source_presets.json`
|
|
826
|
-
- `connector_manifest.yml`
|
|
827
825
|
- `microsoft_agent/ontology/microsoft.ttl`
|
|
828
826
|
- SHACL, mapping, fixture, migration, schema-fingerprint, and certification assets
|
|
829
827
|
|
|
@@ -2032,8 +2032,12 @@ class MicrosoftGraphApiOther(MicrosoftGraphApiBase):
|
|
|
2032
2032
|
upload_transport: AsyncHttpTransport | None = None,
|
|
2033
2033
|
) -> dict[str, Any]:
|
|
2034
2034
|
"""Create, upload, and start one print job without exposing its upload URL."""
|
|
2035
|
-
from microsoft_agent.power_platform import
|
|
2035
|
+
from microsoft_agent.power_platform import (
|
|
2036
|
+
HttpxAsyncHttpTransport,
|
|
2037
|
+
upload_retry_policy,
|
|
2038
|
+
)
|
|
2036
2039
|
from microsoft_agent.universal_print import (
|
|
2040
|
+
PRINT_UPLOAD_MAX_RETRIES,
|
|
2037
2041
|
PrintDocumentSubmission,
|
|
2038
2042
|
UniversalPrintUploader,
|
|
2039
2043
|
validate_print_upload_url,
|
|
@@ -2088,6 +2092,7 @@ class MicrosoftGraphApiOther(MicrosoftGraphApiBase):
|
|
|
2088
2092
|
service="microsoft_graph",
|
|
2089
2093
|
tls_profile=self.auth_manager.graph_tls_profile,
|
|
2090
2094
|
tls_profile_ref=self.auth_manager.graph_tls_profile_ref,
|
|
2095
|
+
retry=upload_retry_policy(PRINT_UPLOAD_MAX_RETRIES),
|
|
2091
2096
|
)
|
|
2092
2097
|
transport = owned_transport
|
|
2093
2098
|
uploader = UniversalPrintUploader(transport)
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"""Data sources of this connector, declared by tool name (generated by connector-ontology-map migrate).
|
|
2
|
+
|
|
3
|
+
Served live as ``connector://resources``. Regenerate by editing the declarations, not the tools.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
# ruff: noqa: E501
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from agent_connector_sdk.ingest.live_declaration import source_meta
|
|
10
|
+
from agent_connector_sdk.ingest.sources import IngestSourceDeclaration, IngestSourceSpec
|
|
11
|
+
|
|
12
|
+
CONNECTOR = "microsoft-mcp"
|
|
13
|
+
|
|
14
|
+
SOURCES = (
|
|
15
|
+
source_meta(
|
|
16
|
+
tool="list_microsoft_ingestion_projection",
|
|
17
|
+
source_id="microsoft-user-structure",
|
|
18
|
+
record_type="microsoft-person-reference",
|
|
19
|
+
id_field="id",
|
|
20
|
+
preset={
|
|
21
|
+
"doc_type": "microsoft-person-reference",
|
|
22
|
+
"params": {
|
|
23
|
+
"kind": "users",
|
|
24
|
+
"params_json": '{"$top":100}',
|
|
25
|
+
},
|
|
26
|
+
"params_style": "args",
|
|
27
|
+
},
|
|
28
|
+
records_path="records",
|
|
29
|
+
server="microsoft-mcp",
|
|
30
|
+
),
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
SCHEMA_MAPPINGS = {
|
|
34
|
+
"Event": {
|
|
35
|
+
"fields": {},
|
|
36
|
+
"ontology_class": "Event",
|
|
37
|
+
},
|
|
38
|
+
"File": {
|
|
39
|
+
"fields": {},
|
|
40
|
+
"ontology_class": "File",
|
|
41
|
+
},
|
|
42
|
+
"Message": {
|
|
43
|
+
"fields": {},
|
|
44
|
+
"ontology_class": None,
|
|
45
|
+
},
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
RESOURCES = (
|
|
49
|
+
{
|
|
50
|
+
"id_prefix": "event",
|
|
51
|
+
"label": "Opaque Microsoft event reference",
|
|
52
|
+
"name": "Event",
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"id_prefix": "file",
|
|
56
|
+
"label": "Opaque Microsoft file reference",
|
|
57
|
+
"name": "File",
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"id_prefix": "message",
|
|
61
|
+
"label": "Opaque Microsoft message reference",
|
|
62
|
+
"name": "Message",
|
|
63
|
+
},
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def declaration() -> IngestSourceDeclaration:
|
|
68
|
+
"""The declaration the server assembles from this module."""
|
|
69
|
+
specs = []
|
|
70
|
+
for item in SOURCES:
|
|
71
|
+
for entry in item["connector_sources"]:
|
|
72
|
+
body = {k: v for k, v in entry.items() if k not in ("tool", "mapping")}
|
|
73
|
+
specs.append(
|
|
74
|
+
IngestSourceSpec.model_validate({**body, "tools": (entry["tool"],)})
|
|
75
|
+
)
|
|
76
|
+
return IngestSourceDeclaration.model_validate(
|
|
77
|
+
{
|
|
78
|
+
"connector": CONNECTOR,
|
|
79
|
+
"sources": specs,
|
|
80
|
+
"schema_mappings": SCHEMA_MAPPINGS,
|
|
81
|
+
"resources": RESOURCES,
|
|
82
|
+
}
|
|
83
|
+
)
|
|
@@ -7,7 +7,6 @@ that are multiples of 320 KiB, as required by Graph.
|
|
|
7
7
|
|
|
8
8
|
from __future__ import annotations
|
|
9
9
|
|
|
10
|
-
import asyncio
|
|
11
10
|
import json
|
|
12
11
|
import re
|
|
13
12
|
from collections.abc import Mapping
|
|
@@ -261,32 +260,23 @@ class GraphFileService:
|
|
|
261
260
|
"Content-Range": f"bytes {start}-{end}/{total}",
|
|
262
261
|
}
|
|
263
262
|
# The preauthenticated upload URL must not receive the Graph bearer token.
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
response.status_code not in {429, 500, 502, 503, 504}
|
|
282
|
-
or attempt >= self.settings.max_retries
|
|
283
|
-
):
|
|
284
|
-
raise GraphFileServiceError(
|
|
285
|
-
"Microsoft Graph rejected an upload fragment.",
|
|
286
|
-
status_code=response.status_code,
|
|
287
|
-
)
|
|
288
|
-
await asyncio.sleep(_retry_delay(response, attempt))
|
|
289
|
-
raise GraphFileServiceError("Upload fragment retry limit was exceeded.")
|
|
263
|
+
# The transport's SDK retry policy owns backoff and Retry-After handling.
|
|
264
|
+
try:
|
|
265
|
+
response = await self._transport.request(
|
|
266
|
+
"PUT",
|
|
267
|
+
upload_url,
|
|
268
|
+
headers=headers,
|
|
269
|
+
body=fragment,
|
|
270
|
+
timeout=self.settings.timeout_seconds,
|
|
271
|
+
)
|
|
272
|
+
except (OSError, TimeoutError) as exc:
|
|
273
|
+
raise GraphFileServiceError("Upload transport failed.") from exc
|
|
274
|
+
if response.status_code in {200, 201, 202}:
|
|
275
|
+
return response
|
|
276
|
+
raise GraphFileServiceError(
|
|
277
|
+
"Microsoft Graph rejected an upload fragment.",
|
|
278
|
+
status_code=response.status_code,
|
|
279
|
+
)
|
|
290
280
|
|
|
291
281
|
async def _graph_request(
|
|
292
282
|
self,
|
|
@@ -397,20 +387,3 @@ def _range_start(value: Any) -> int:
|
|
|
397
387
|
if not isinstance(value, str) or not re.fullmatch(r"\d+-\d*", value):
|
|
398
388
|
raise GraphFileServiceError("Graph returned an invalid expected range.")
|
|
399
389
|
return int(value.partition("-")[0])
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
def _retry_delay(response: HttpResponse, attempt: int) -> float:
|
|
403
|
-
raw = next(
|
|
404
|
-
(
|
|
405
|
-
value
|
|
406
|
-
for key, value in response.headers.items()
|
|
407
|
-
if key.lower() == "retry-after"
|
|
408
|
-
),
|
|
409
|
-
None,
|
|
410
|
-
)
|
|
411
|
-
try:
|
|
412
|
-
return (
|
|
413
|
-
min(max(float(raw), 0.0), 30.0) if raw is not None else min(2**attempt, 8)
|
|
414
|
-
)
|
|
415
|
-
except ValueError:
|
|
416
|
-
return min(2**attempt, 8)
|
|
@@ -3,10 +3,11 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
from functools import lru_cache
|
|
6
|
-
from typing import Any, TypeVar
|
|
6
|
+
from typing import Any, TypeAlias, TypeVar
|
|
7
7
|
from urllib.parse import urlparse
|
|
8
8
|
from uuid import UUID
|
|
9
9
|
|
|
10
|
+
from agent_connector_sdk.http.retry import RetryPolicy
|
|
10
11
|
from fastmcp import FastMCP
|
|
11
12
|
from pydantic import Field
|
|
12
13
|
|
|
@@ -41,6 +42,7 @@ from microsoft_agent.power_platform import (
|
|
|
41
42
|
FlowState,
|
|
42
43
|
HttpxAsyncHttpTransport,
|
|
43
44
|
PowerPlatformClient,
|
|
45
|
+
upload_retry_policy,
|
|
44
46
|
)
|
|
45
47
|
from microsoft_agent.settings import get_settings
|
|
46
48
|
from microsoft_agent.windows_companion import (
|
|
@@ -52,7 +54,7 @@ from microsoft_agent.windows_companion import (
|
|
|
52
54
|
WindowsCompanionClient,
|
|
53
55
|
)
|
|
54
56
|
|
|
55
|
-
_ManagedTransport = HttpxAsyncHttpTransport | HttpxCompanionTransport
|
|
57
|
+
_ManagedTransport: TypeAlias = HttpxAsyncHttpTransport | HttpxCompanionTransport
|
|
56
58
|
_ManagedTransportT = TypeVar("_ManagedTransportT", bound=_ManagedTransport)
|
|
57
59
|
_managed_transports: list[_ManagedTransport] = []
|
|
58
60
|
|
|
@@ -95,6 +97,7 @@ def _http_transport(
|
|
|
95
97
|
tls_profile: str | None = None,
|
|
96
98
|
tls_profile_ref: str | None = None,
|
|
97
99
|
allowed_private_hosts: tuple[str, ...] = (),
|
|
100
|
+
retry: RetryPolicy | None = None,
|
|
98
101
|
) -> HttpxAsyncHttpTransport:
|
|
99
102
|
return _manage_transport(
|
|
100
103
|
HttpxAsyncHttpTransport(
|
|
@@ -102,6 +105,7 @@ def _http_transport(
|
|
|
102
105
|
tls_profile=tls_profile,
|
|
103
106
|
tls_profile_ref=tls_profile_ref,
|
|
104
107
|
allowed_private_hosts=allowed_private_hosts,
|
|
108
|
+
retry=retry,
|
|
105
109
|
)
|
|
106
110
|
)
|
|
107
111
|
|
|
@@ -125,13 +129,15 @@ def _companion_transport(
|
|
|
125
129
|
def _graph_file_service() -> GraphFileService:
|
|
126
130
|
settings = get_settings()
|
|
127
131
|
provider = MicrosoftAudienceTokenProvider([GRAPH_AUDIENCE])
|
|
132
|
+
file_settings = GraphFileSettings(graph_base_url=settings.graph_base_url)
|
|
128
133
|
return GraphFileService(
|
|
129
|
-
|
|
134
|
+
file_settings,
|
|
130
135
|
provider,
|
|
131
136
|
_http_transport(
|
|
132
137
|
service="microsoft_graph",
|
|
133
138
|
tls_profile=settings.graph_tls_profile,
|
|
134
139
|
tls_profile_ref=settings.graph_tls_profile_ref,
|
|
140
|
+
retry=upload_retry_policy(file_settings.max_retries),
|
|
135
141
|
),
|
|
136
142
|
)
|
|
137
143
|
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"api_version": "arbora.io/v1",
|
|
3
3
|
"artifacts": {
|
|
4
|
-
"connector_manifest.yml": "94e1b83cc0204930640440603a90a619a22c6bcc8651aa41967d5b820b535a3a",
|
|
5
|
-
"microsoft_agent/connectors/mcp_source_presets.json": "62d90f36250ff984665e62862566d0b2be2ffca69b35ebc394a1a5bce074cc32",
|
|
6
|
-
"microsoft_agent/connectors/tool_schema_fingerprints.json": "8e0f365e0b660836d7f331174b812d382ba30a9f3be65a621d07bf030086dd64",
|
|
7
4
|
"microsoft_agent/ontology/fixtures/records.json": "b29cde0f53b0625dc50c3941d745092f2712044bfd31b9565301c6a314f60adc",
|
|
8
5
|
"microsoft_agent/ontology/mappings/source.yaml": "c9834a4cec0b3d9eea10f40e26ea647d848b08174d9fd34ab2e468db52a90497",
|
|
9
6
|
"microsoft_agent/ontology/microsoft.ttl": "b2c0937318954ef2c5d2a01ad14c097581885cf5670e94de99e90c9143351b00",
|
|
@@ -6,17 +6,14 @@
|
|
|
6
6
|
# identifiers. Provider identifiers, names, addresses, content, filenames, URLs,
|
|
7
7
|
# timestamps, and attachment bytes are not properties in this ontology.
|
|
8
8
|
|
|
9
|
-
:Message a owl:Class
|
|
10
|
-
rdfs:label "Opaque Microsoft message reference" ;
|
|
11
|
-
rdfs:comment "A content-free keyed reference to an Outlook or Teams message." .
|
|
9
|
+
:Message a owl:Class .
|
|
12
10
|
|
|
13
|
-
:Event a owl:Class ;
|
|
14
|
-
rdfs:label "Opaque Microsoft event reference" ;
|
|
15
|
-
rdfs:comment "A content-free keyed reference to a calendar event or meeting." .
|
|
16
11
|
|
|
17
|
-
:
|
|
18
|
-
|
|
19
|
-
|
|
12
|
+
:Event a owl:Class .
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
:File a owl:Class .
|
|
16
|
+
|
|
20
17
|
|
|
21
18
|
:sentBy a owl:ObjectProperty ;
|
|
22
19
|
rdfs:label "sent by" ;
|
|
@@ -45,5 +42,4 @@
|
|
|
45
42
|
|
|
46
43
|
<http://knuckles.team/kg/microsoft> a owl:Ontology ;
|
|
47
44
|
rdfs:label "Microsoft Graph zero-PII structural ontology" ;
|
|
48
|
-
rdfs:comment "Keyed opaque message, event, file, and person relationships for governed Microsoft Graph ingestion."
|
|
49
|
-
owl:imports <http://knuckles.team/kg> .
|
|
45
|
+
rdfs:comment "Keyed opaque message, event, file, and person relationships for governed Microsoft Graph ingestion." .
|
|
@@ -30,7 +30,7 @@ from agent_connector_sdk.credentials.runtime_references import (
|
|
|
30
30
|
)
|
|
31
31
|
from agent_connector_sdk.http.client import create_http_client
|
|
32
32
|
from agent_connector_sdk.http.options import HttpClientOptions
|
|
33
|
-
from agent_connector_sdk.http.retry import RetryPolicy
|
|
33
|
+
from agent_connector_sdk.http.retry import RETRYABLE_STATUSES, RetryPolicy
|
|
34
34
|
from agent_connector_sdk.tls.profile import ResolvedTLSProfile
|
|
35
35
|
from agent_connector_sdk.tls.resolve import resolve_tls_profile
|
|
36
36
|
from pydantic import (
|
|
@@ -112,6 +112,22 @@ class AudienceTokenProvider(Protocol):
|
|
|
112
112
|
"""Return a bearer token whose ``aud`` claim matches ``audience``."""
|
|
113
113
|
|
|
114
114
|
|
|
115
|
+
#: Statuses an upload fragment retries; the SDK client applies them to PUT.
|
|
116
|
+
UPLOAD_RETRY_STATUSES = RETRYABLE_STATUSES | {500}
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def upload_retry_policy(max_retries: int) -> RetryPolicy:
|
|
120
|
+
"""SDK retry policy for resumable upload fragments (``max_retries`` retries)."""
|
|
121
|
+
|
|
122
|
+
return RetryPolicy(
|
|
123
|
+
max_attempts=max_retries + 1,
|
|
124
|
+
backoff_base=1.0,
|
|
125
|
+
max_backoff=8.0,
|
|
126
|
+
max_retry_after=30.0,
|
|
127
|
+
retry_statuses=UPLOAD_RETRY_STATUSES,
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
|
|
115
131
|
class HttpxAsyncHttpTransport:
|
|
116
132
|
"""Bounded async facade over the shared verified sync HTTP boundary."""
|
|
117
133
|
|
|
@@ -124,6 +140,7 @@ class HttpxAsyncHttpTransport:
|
|
|
124
140
|
allowed_private_hosts: tuple[str, ...] = (),
|
|
125
141
|
max_response_bytes: int = 16 * 1024 * 1024,
|
|
126
142
|
client: httpx.Client | None = None,
|
|
143
|
+
retry: RetryPolicy | None = None,
|
|
127
144
|
) -> None:
|
|
128
145
|
if not 1_024 <= max_response_bytes <= 64 * 1024 * 1024:
|
|
129
146
|
raise ValueError("HTTP response bound is invalid")
|
|
@@ -149,7 +166,7 @@ class HttpxAsyncHttpTransport:
|
|
|
149
166
|
# Requests carry absolute URLs; the base is never dialed.
|
|
150
167
|
base_url="https://pinned.invalid",
|
|
151
168
|
timeout=httpx.Timeout(30.0),
|
|
152
|
-
retry=RetryPolicy(max_attempts=1),
|
|
169
|
+
retry=retry or RetryPolicy(max_attempts=1),
|
|
153
170
|
tls=self._tls,
|
|
154
171
|
limits=httpx.Limits(
|
|
155
172
|
max_connections=32,
|
|
@@ -4,8 +4,6 @@
|
|
|
4
4
|
"task": "microsoft_collaboration_specialist",
|
|
5
5
|
"type": "prompt",
|
|
6
6
|
"source": "microsoft-agent",
|
|
7
|
-
"extends": "agent-connector-sdk:base",
|
|
8
|
-
"compose": "append",
|
|
9
7
|
"description": "Governed Microsoft Graph operations through the current Microsoft Agent MCP provider.",
|
|
10
8
|
"metadata": {
|
|
11
9
|
"topic": "Microsoft Graph operations",
|
|
@@ -8,7 +8,6 @@ Print upload origin and sends bounded sequential byte ranges.
|
|
|
8
8
|
|
|
9
9
|
from __future__ import annotations
|
|
10
10
|
|
|
11
|
-
import asyncio
|
|
12
11
|
import base64
|
|
13
12
|
import binascii
|
|
14
13
|
import json
|
|
@@ -96,6 +95,10 @@ class PrintDocumentSubmission(BaseModel):
|
|
|
96
95
|
return content
|
|
97
96
|
|
|
98
97
|
|
|
98
|
+
#: Retries the print upload transport applies to a failed range.
|
|
99
|
+
PRINT_UPLOAD_MAX_RETRIES = 3
|
|
100
|
+
|
|
101
|
+
|
|
99
102
|
class UniversalPrintUploadError(RuntimeError):
|
|
100
103
|
"""Safe upload failure that never contains the preauthenticated URL."""
|
|
101
104
|
|
|
@@ -113,7 +116,6 @@ class UniversalPrintUploader:
|
|
|
113
116
|
*,
|
|
114
117
|
timeout_seconds: float = 60,
|
|
115
118
|
chunk_bytes: int = PRINT_UPLOAD_CHUNK_BYTES,
|
|
116
|
-
max_retries: int = 3,
|
|
117
119
|
) -> None:
|
|
118
120
|
if not 0 < chunk_bytes < 10 * 1024 * 1024:
|
|
119
121
|
raise ValueError("Universal Print chunks must be smaller than 10 MiB")
|
|
@@ -121,12 +123,9 @@ class UniversalPrintUploader:
|
|
|
121
123
|
raise ValueError("Universal Print chunks must be multiples of 320 KiB")
|
|
122
124
|
if not 0 < timeout_seconds <= 600:
|
|
123
125
|
raise ValueError("timeout_seconds must be between 0 and 600")
|
|
124
|
-
if not 0 <= max_retries <= 8:
|
|
125
|
-
raise ValueError("max_retries must be between 0 and 8")
|
|
126
126
|
self._transport = transport
|
|
127
127
|
self.timeout_seconds = timeout_seconds
|
|
128
128
|
self.chunk_bytes = chunk_bytes
|
|
129
|
-
self.max_retries = max_retries
|
|
130
129
|
|
|
131
130
|
async def upload(self, upload_url: str, content: bytes) -> dict[str, Any]:
|
|
132
131
|
"""Upload sequential ranges and return final printDocument metadata."""
|
|
@@ -192,31 +191,19 @@ class UniversalPrintUploader:
|
|
|
192
191
|
"Content-Length": str(len(fragment)),
|
|
193
192
|
"Content-Range": f"bytes {start}-{end}/{total}",
|
|
194
193
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
) from exc
|
|
209
|
-
await asyncio.sleep(min(2**attempt, 8))
|
|
210
|
-
continue
|
|
211
|
-
if response.status_code in {201, 202}:
|
|
212
|
-
return response
|
|
213
|
-
if (
|
|
214
|
-
response.status_code not in {429, 500, 502, 503, 504}
|
|
215
|
-
or attempt >= self.max_retries
|
|
216
|
-
):
|
|
217
|
-
return response
|
|
218
|
-
await asyncio.sleep(_retry_delay(response, attempt))
|
|
219
|
-
raise UniversalPrintUploadError("Universal Print retry limit was exceeded.")
|
|
194
|
+
# The transport's SDK retry policy owns backoff and Retry-After handling.
|
|
195
|
+
try:
|
|
196
|
+
return await self._transport.request(
|
|
197
|
+
"PUT",
|
|
198
|
+
upload_url,
|
|
199
|
+
headers=headers,
|
|
200
|
+
body=fragment,
|
|
201
|
+
timeout=self.timeout_seconds,
|
|
202
|
+
)
|
|
203
|
+
except (OSError, TimeoutError) as exc:
|
|
204
|
+
raise UniversalPrintUploadError(
|
|
205
|
+
"Universal Print upload transport failed."
|
|
206
|
+
) from exc
|
|
220
207
|
|
|
221
208
|
|
|
222
209
|
def validate_print_upload_url(value: Any) -> str:
|
|
@@ -269,24 +256,8 @@ def _range_start(value: Any) -> int:
|
|
|
269
256
|
return int(value.partition("-")[0])
|
|
270
257
|
|
|
271
258
|
|
|
272
|
-
def _retry_delay(response: HttpResponse, attempt: int) -> float:
|
|
273
|
-
raw = next(
|
|
274
|
-
(
|
|
275
|
-
value
|
|
276
|
-
for key, value in response.headers.items()
|
|
277
|
-
if key.casefold() == "retry-after"
|
|
278
|
-
),
|
|
279
|
-
None,
|
|
280
|
-
)
|
|
281
|
-
try:
|
|
282
|
-
return (
|
|
283
|
-
min(max(float(raw), 0.0), 30.0) if raw is not None else min(2**attempt, 8)
|
|
284
|
-
)
|
|
285
|
-
except ValueError:
|
|
286
|
-
return min(2**attempt, 8)
|
|
287
|
-
|
|
288
|
-
|
|
289
259
|
__all__ = [
|
|
260
|
+
"PRINT_UPLOAD_MAX_RETRIES",
|
|
290
261
|
"MAX_PRINT_DOCUMENT_BYTES",
|
|
291
262
|
"PRINT_UPLOAD_CHUNK_BYTES",
|
|
292
263
|
"PRINT_UPLOAD_HOST",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: microsoft-agent
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.5
|
|
4
4
|
Summary: Governed Microsoft Graph agent and MCP server
|
|
5
5
|
Author-email: Project Maintainers <maintainers@users.noreply.github.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -11,7 +11,7 @@ Classifier: Programming Language :: Python :: 3
|
|
|
11
11
|
Requires-Python: >=3.12
|
|
12
12
|
Description-Content-Type: text/markdown
|
|
13
13
|
License-File: LICENSE
|
|
14
|
-
Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.
|
|
14
|
+
Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.1
|
|
15
15
|
Requires-Dist: azure-core>=1.41.0
|
|
16
16
|
Requires-Dist: httpx>=0.28.1
|
|
17
17
|
Requires-Dist: keyring>=25.7.0
|
|
@@ -19,7 +19,7 @@ Requires-Dist: msal>=1.39.0
|
|
|
19
19
|
Requires-Dist: msgraph-sdk>=1.64.0
|
|
20
20
|
Requires-Dist: pydantic>=2.14.1
|
|
21
21
|
Provides-Extra: mcp
|
|
22
|
-
Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.
|
|
22
|
+
Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.4.1; extra == "mcp"
|
|
23
23
|
Provides-Extra: documents
|
|
24
24
|
Requires-Dist: python-docx>=1.2.0; extra == "documents"
|
|
25
25
|
Requires-Dist: python-pptx>=1.0.2; extra == "documents"
|
|
@@ -71,7 +71,7 @@ Dynamic: license-file
|
|
|
71
71
|
agent. It uses Agent Connector SDK for MCP, identity propagation, intent delegation,
|
|
72
72
|
configuration, telemetry, and graph integration.
|
|
73
73
|
|
|
74
|
-
Current package version: **2.3.
|
|
74
|
+
Current package version: **2.3.5**
|
|
75
75
|
|
|
76
76
|
## Capabilities
|
|
77
77
|
|
|
@@ -890,8 +890,6 @@ _Auto-generated from the code-read env surface (`MCP_TOOL_MODE` + package vars)
|
|
|
890
890
|
|
|
891
891
|
The provider contributes:
|
|
892
892
|
|
|
893
|
-
- `microsoft_agent/connectors/mcp_source_presets.json`
|
|
894
|
-
- `connector_manifest.yml`
|
|
895
893
|
- `microsoft_agent/ontology/microsoft.ttl`
|
|
896
894
|
- SHACL, mapping, fixture, migration, schema-fingerprint, and certification assets
|
|
897
895
|
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
.env.example
|
|
2
1
|
LICENSE
|
|
3
2
|
MANIFEST.in
|
|
4
3
|
README.md
|
|
5
|
-
connector_manifest.yml
|
|
6
|
-
mkdocs.yml
|
|
7
4
|
pyproject.toml
|
|
8
5
|
deployment/integrations.example.json
|
|
9
6
|
deployment/control-plane/README.md
|
|
@@ -39,6 +36,7 @@ microsoft_agent/_version.py
|
|
|
39
36
|
microsoft_agent/api_client.py
|
|
40
37
|
microsoft_agent/auth.py
|
|
41
38
|
microsoft_agent/config_cli.py
|
|
39
|
+
microsoft_agent/connector_sources.py
|
|
42
40
|
microsoft_agent/credential_adapter.py
|
|
43
41
|
microsoft_agent/document_service.py
|
|
44
42
|
microsoft_agent/graph_file_service.py
|
|
@@ -78,8 +76,6 @@ microsoft_agent/api/api_client_mail.py
|
|
|
78
76
|
microsoft_agent/api/api_client_other.py
|
|
79
77
|
microsoft_agent/api/api_client_system.py
|
|
80
78
|
microsoft_agent/connectors/__init__.py
|
|
81
|
-
microsoft_agent/connectors/mcp_source_presets.json
|
|
82
|
-
microsoft_agent/connectors/tool_schema_fingerprints.json
|
|
83
79
|
microsoft_agent/mcp/__init__.py
|
|
84
80
|
microsoft_agent/mcp/mcp_admin.py
|
|
85
81
|
microsoft_agent/mcp/mcp_agreements.py
|
|
@@ -160,6 +156,7 @@ tests/test_auth_coverage.py
|
|
|
160
156
|
tests/test_bug_cx_046_ctx_info_awaited.py
|
|
161
157
|
tests/test_config_cli.py
|
|
162
158
|
tests/test_credential_adapter.py
|
|
159
|
+
tests/test_default_content_surfaces.py
|
|
163
160
|
tests/test_document_service.py
|
|
164
161
|
tests/test_generate_code.py
|
|
165
162
|
tests/test_graph_file_service.py
|
|
@@ -179,6 +176,7 @@ tests/test_office_manifest.py
|
|
|
179
176
|
tests/test_onenote_sharepoint_print.py
|
|
180
177
|
tests/test_placeholder.py
|
|
181
178
|
tests/test_power_platform.py
|
|
179
|
+
tests/test_sdk_centralization.py
|
|
182
180
|
tests/test_settings_and_policy.py
|
|
183
181
|
tests/test_startup.py
|
|
184
182
|
tests/test_teams_reliability.py
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
agent-connector-sdk[mcp]<1.0.0,>=0.
|
|
1
|
+
agent-connector-sdk[mcp]<1.0.0,>=0.4.1
|
|
2
2
|
azure-core>=1.41.0
|
|
3
3
|
httpx>=0.28.1
|
|
4
4
|
keyring>=25.7.0
|
|
@@ -40,7 +40,7 @@ python-docx>=1.2.0
|
|
|
40
40
|
python-pptx>=1.0.2
|
|
41
41
|
|
|
42
42
|
[mcp]
|
|
43
|
-
agent-connector-sdk[mcp]<1.0.0,>=0.
|
|
43
|
+
agent-connector-sdk[mcp]<1.0.0,>=0.4.1
|
|
44
44
|
|
|
45
45
|
[test]
|
|
46
46
|
cryptography>=50.0.2
|
|
@@ -14,7 +14,7 @@ classifiers = [
|
|
|
14
14
|
"Operating System :: OS Independent",
|
|
15
15
|
"Programming Language :: Python :: 3",
|
|
16
16
|
]
|
|
17
|
-
dependencies = [ "agent-connector-sdk[mcp]>=0.
|
|
17
|
+
dependencies = [ "agent-connector-sdk[mcp]>=0.4.1,<1.0.0", "azure-core>=1.41.0", "httpx>=0.28.1", "keyring>=25.7.0", "msal>=1.39.0", "msgraph-sdk>=1.64.0", "pydantic>=2.14.1",]
|
|
18
18
|
license = "MIT"
|
|
19
19
|
|
|
20
20
|
[[project.authors]]
|
|
@@ -22,7 +22,7 @@ name = "Project Maintainers"
|
|
|
22
22
|
email = "maintainers@users.noreply.github.com"
|
|
23
23
|
|
|
24
24
|
[project.optional-dependencies]
|
|
25
|
-
mcp = [ "agent-connector-sdk[mcp]>=0.
|
|
25
|
+
mcp = [ "agent-connector-sdk[mcp]>=0.4.1,<1.0.0",]
|
|
26
26
|
documents = ["python-docx>=1.2.0", "python-pptx>=1.0.2"]
|
|
27
27
|
cloud = ["azure-identity>=1.26.0", "httpx>=0.28.1"]
|
|
28
28
|
windows = [
|
|
@@ -96,6 +96,10 @@ dev = [
|
|
|
96
96
|
"ruff>=0.17.1,<1",
|
|
97
97
|
]
|
|
98
98
|
|
|
99
|
+
# The one declared connector identity: the fleet name (SDK-CONNECTOR-CONTROL-R071).
|
|
100
|
+
[project.entry-points."agent_connector_sdk.connector"]
|
|
101
|
+
microsoft-mcp = "microsoft_agent"
|
|
102
|
+
|
|
99
103
|
[tool.uv.workspace]
|
|
100
104
|
members = ["."]
|
|
101
105
|
|