microsoft-agent 2.3.2__tar.gz → 2.3.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {microsoft_agent-2.3.2/microsoft_agent.egg-info → microsoft_agent-2.3.3}/PKG-INFO +2 -2
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/README.md +1 -1
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/_version.py +1 -1
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/windows_companion_service.py +9 -8
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/windows_control_plane.py +6 -9
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/windows_runtime.py +33 -6
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3/microsoft_agent.egg-info}/PKG-INFO +2 -2
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent.egg-info/SOURCES.txt +1 -0
- microsoft_agent-2.3.3/tests/test_transport_tls.py +104 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/.env.example +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/LICENSE +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/MANIFEST.in +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/connector_manifest.yml +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/control-plane/README.md +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/control-plane/control-plane.sample.json +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/control-plane/nginx/windows-control-plane.conf +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/control-plane/systemd/microsoft-windows-control-plane.env +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/control-plane/systemd/microsoft-windows-control-plane.service +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/entra/New-MicrosoftAgentApp.ps1 +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/entra/New-WindowsControlPlaneEntraResources.ps1 +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/entra/README.md +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/entra/permission-profiles.json +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/integrations.example.json +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/windows/Install-WindowsCompanion.ps1 +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/windows/README.md +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/windows/Run-WindowsCompanion.ps1 +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/windows/Test-WindowsCompanionDeployment.ps1 +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/windows/Uninstall-WindowsCompanion.ps1 +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/windows/windows-companion.sample.json +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/docs/authentication.md +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/docs/concepts.md +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/docs/configuration.md +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/docs/deployment.md +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/docs/enrollment-checklist.md +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/docs/index.md +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/docs/installation.md +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/docs/integrations.md +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/docs/office-addin.md +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/docs/overview.md +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/docs/usage.md +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/docs/windows-companion.md +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/__init__.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/__main__.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/api/__init__.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/api/_graph_models.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/api/api_client_admin.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/api/api_client_apps.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/api/api_client_base.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/api/api_client_calendar.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/api/api_client_directory.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/api/api_client_drive.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/api/api_client_mail.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/api/api_client_other.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/api/api_client_system.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/api_client.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/auth.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/config_cli.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/connectors/__init__.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/connectors/mcp_source_presets.json +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/connectors/tool_schema_fingerprints.json +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/credential_adapter.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/document_service.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/graph_file_service.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/integration_adapters.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/integration_auth.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/integration_config.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/integration_tools.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/intune_service.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/kg_ingest.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/__init__.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_admin.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_agreements.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_applications.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_audit.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_auth.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_calendar.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_chat.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_communications.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_connections.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_contacts.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_devices.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_directory.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_domains.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_education.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_employee_experience.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_files.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_groups.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_identity.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_mail.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_meta.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_notes.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_organization.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_places.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_policies.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_print.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_privacy.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_reports.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_search.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_security.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_sites.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_solutions.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_storage.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_subscriptions.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_tasks.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_teams.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_user.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp_config.json +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp_server.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/office_bridge.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/ontology/__init__.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/ontology/certification.json +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/ontology/fixtures/records.json +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/ontology/mappings/source.yaml +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/ontology/microsoft.ttl +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/ontology/migrations/manifest.json +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/ontology/shapes/connector.shacl.ttl +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/power_platform.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/prompts/__init__.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/prompts/collaboration_specialist.json +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/settings.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/skills/__init__.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/skills/microsoft-agent-operations/SKILL.md +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/skills/microsoft-agent-operations/agents/openai.yaml +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/skills/microsoft-agent-operations/references/catalog.md +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/skills/microsoft-calendar-scheduling/SKILL.md +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/skills/microsoft-mail-operations/SKILL.md +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/skills/microsoft-teams-messaging/SKILL.md +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/tool_policy.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/universal_print.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/windows_companion.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/windows_control_plane_service.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent.egg-info/dependency_links.txt +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent.egg-info/entry_points.txt +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent.egg-info/requires.txt +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent.egg-info/top_level.txt +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/mkdocs.yml +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/README.md +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/manifest.xml +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/package-lock.json +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/package.json +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/public/assets/icon.png.b64 +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/public/assets/icon.svg +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/public/config.json +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/public/styles.css +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/public/taskpane.html +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/scripts/validate_manifest.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/src/backend-client.ts +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/src/office-bridge.ts +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/src/office-operations.ts +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/src/taskpane.ts +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/src/validation.ts +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/tests/backend-client.test.ts +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/tests/office-bridge.test.ts +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/tests/validation.test.ts +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/tsconfig.json +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/vitest.config.ts +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/office_addin/webpack.config.cjs +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/pyproject.toml +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/setup.cfg +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_api_client_extended.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_auth.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_auth_coverage.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_bug_cx_046_ctx_info_awaited.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_config_cli.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_credential_adapter.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_document_service.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_generate_code.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_graph_file_service.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_graph_reliability.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_graph_transport.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_init_dynamics.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_integration_adapters.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_integration_auth.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_integration_config_and_tools.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_intune_service.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_kg_ingest.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_main.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_mcp_comprehensive.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_mcp_server.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_office_bridge.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_office_manifest.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_onenote_sharepoint_print.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_placeholder.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_power_platform.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_settings_and_policy.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_startup.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_teams_reliability.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_transport_migration.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_verify_api_integration.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_windows_companion.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_windows_control_plane.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/tests/test_windows_control_plane_service.py +0 -0
- {microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/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.3
|
|
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
|
|
@@ -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.3**
|
|
75
75
|
|
|
76
76
|
## Capabilities
|
|
77
77
|
|
{microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/windows_companion_service.py
RENAMED
|
@@ -60,6 +60,7 @@ from microsoft_agent.windows_runtime import (
|
|
|
60
60
|
WindowsRuntimeLimits,
|
|
61
61
|
WindowsServiceManager,
|
|
62
62
|
WindowsToastNotificationAdapter,
|
|
63
|
+
build_client_tls_context,
|
|
63
64
|
)
|
|
64
65
|
|
|
65
66
|
try: # Core authentication dependency, guarded for library-only installs.
|
|
@@ -241,18 +242,18 @@ def validate_local_service_config(config: WindowsCompanionServiceConfig) -> None
|
|
|
241
242
|
certificate_der = ssl.PEM_cert_to_DER_cert(certificate_pem)
|
|
242
243
|
except ValueError as exc:
|
|
243
244
|
raise ValueError("Client certificate is not valid PEM") from exc
|
|
244
|
-
actual_thumbprint =
|
|
245
|
+
actual_thumbprint = (
|
|
246
|
+
hashlib.sha1(certificate_der, usedforsecurity=False).hexdigest().upper()
|
|
247
|
+
)
|
|
245
248
|
if not hmac.compare_digest(actual_thumbprint, certificate.thumbprint):
|
|
246
249
|
raise ValueError("Client certificate fingerprint does not match configuration")
|
|
247
250
|
password = _private_key_password(certificate)
|
|
248
|
-
context = ssl.create_default_context(
|
|
249
|
-
cafile=str(certificate.ca_bundle_path) if certificate.ca_bundle_path else None
|
|
250
|
-
)
|
|
251
251
|
try:
|
|
252
|
-
|
|
253
|
-
certificate.
|
|
254
|
-
certificate.
|
|
255
|
-
|
|
252
|
+
build_client_tls_context(
|
|
253
|
+
ca_bundle_path=certificate.ca_bundle_path,
|
|
254
|
+
client_certificate_path=certificate.client_certificate_path,
|
|
255
|
+
client_private_key_path=certificate.client_private_key_path,
|
|
256
|
+
private_key_password=password,
|
|
256
257
|
)
|
|
257
258
|
except (OSError, ssl.SSLError) as exc:
|
|
258
259
|
raise ValueError(
|
|
@@ -21,7 +21,6 @@ import json
|
|
|
21
21
|
import ntpath
|
|
22
22
|
import os
|
|
23
23
|
import sqlite3
|
|
24
|
-
import ssl
|
|
25
24
|
from collections.abc import Mapping
|
|
26
25
|
from datetime import UTC, datetime, timedelta
|
|
27
26
|
from pathlib import Path
|
|
@@ -69,6 +68,7 @@ from microsoft_agent.windows_runtime import (
|
|
|
69
68
|
RelayActionDelivery,
|
|
70
69
|
RelayPollBatch,
|
|
71
70
|
WindowsRuntimeError,
|
|
71
|
+
build_client_tls_context,
|
|
72
72
|
)
|
|
73
73
|
|
|
74
74
|
try: # FastAPI is supplied by the MCP/agent runtime extras.
|
|
@@ -1235,15 +1235,12 @@ class HttpOutboundRelayTransport(OutboundRelayTransport):
|
|
|
1235
1235
|
if not 1024 <= maximum_response_bytes <= 268_435_456:
|
|
1236
1236
|
raise ValueError("maximum_response_bytes is outside the safe range")
|
|
1237
1237
|
self._maximum_response_bytes = maximum_response_bytes
|
|
1238
|
-
context =
|
|
1239
|
-
|
|
1238
|
+
context = build_client_tls_context(
|
|
1239
|
+
ca_bundle_path=ca_bundle_path,
|
|
1240
|
+
client_certificate_path=client_certificate_path,
|
|
1241
|
+
client_private_key_path=client_private_key_path,
|
|
1242
|
+
private_key_password=private_key_password,
|
|
1240
1243
|
)
|
|
1241
|
-
if client_certificate_path and client_private_key_path:
|
|
1242
|
-
context.load_cert_chain(
|
|
1243
|
-
certfile=str(client_certificate_path),
|
|
1244
|
-
keyfile=str(client_private_key_path),
|
|
1245
|
-
password=private_key_password,
|
|
1246
|
-
)
|
|
1247
1244
|
self._opener = build_opener(_NoRedirect(), HTTPSHandler(context=context))
|
|
1248
1245
|
|
|
1249
1246
|
async def poll(
|
|
@@ -16,12 +16,14 @@ from __future__ import annotations
|
|
|
16
16
|
|
|
17
17
|
import asyncio
|
|
18
18
|
import base64
|
|
19
|
+
import contextlib
|
|
19
20
|
import hashlib
|
|
20
21
|
import json
|
|
21
22
|
import ntpath
|
|
22
23
|
import os
|
|
23
24
|
import platform
|
|
24
25
|
import socket
|
|
26
|
+
import ssl
|
|
25
27
|
import stat
|
|
26
28
|
import sys
|
|
27
29
|
from collections import OrderedDict
|
|
@@ -30,6 +32,7 @@ from datetime import UTC, datetime
|
|
|
30
32
|
from pathlib import Path, PureWindowsPath
|
|
31
33
|
from typing import Any, Protocol, TypeVar, runtime_checkable
|
|
32
34
|
|
|
35
|
+
from agent_connector_sdk.tls.resolve import resolve_tls_profile
|
|
33
36
|
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
|
34
37
|
|
|
35
38
|
from microsoft_agent.windows_companion import (
|
|
@@ -227,15 +230,11 @@ class PyWin32OfficeAutomation:
|
|
|
227
230
|
return {"application": application, "exported": True}
|
|
228
231
|
finally:
|
|
229
232
|
if document is not None:
|
|
230
|
-
|
|
233
|
+
with contextlib.suppress(Exception): # defensive COM cleanup
|
|
231
234
|
document.Close(False)
|
|
232
|
-
except Exception: # pragma: no cover - defensive COM cleanup
|
|
233
|
-
pass
|
|
234
235
|
if app is not None:
|
|
235
|
-
|
|
236
|
+
with contextlib.suppress(Exception): # defensive COM cleanup
|
|
236
237
|
app.Quit()
|
|
237
|
-
except Exception: # pragma: no cover - defensive COM cleanup
|
|
238
|
-
pass
|
|
239
238
|
self._pythoncom.CoUninitialize()
|
|
240
239
|
|
|
241
240
|
|
|
@@ -1303,7 +1302,35 @@ def _installed_windows_software() -> list[dict[str, str]]:
|
|
|
1303
1302
|
return sorted(found.values(), key=lambda item: item["name"].casefold())[:500]
|
|
1304
1303
|
|
|
1305
1304
|
|
|
1305
|
+
def build_client_tls_context(
|
|
1306
|
+
*,
|
|
1307
|
+
ca_bundle_path: str | os.PathLike[str] | None = None,
|
|
1308
|
+
client_certificate_path: str | os.PathLike[str] | None = None,
|
|
1309
|
+
client_private_key_path: str | os.PathLike[str] | None = None,
|
|
1310
|
+
private_key_password: str | None = None,
|
|
1311
|
+
) -> ssl.SSLContext:
|
|
1312
|
+
"""Return the verified client context for the control-plane connection.
|
|
1313
|
+
|
|
1314
|
+
Trust comes from the SDK TLS profile (``resolve_tls_profile``): a per-instance
|
|
1315
|
+
CA bundle is passed through the profile, otherwise the deployment's
|
|
1316
|
+
``MICROSOFT_*`` trust profile applies. The client certificate is loaded onto
|
|
1317
|
+
that context here because the key password is a runtime value that a profile
|
|
1318
|
+
document may not carry.
|
|
1319
|
+
"""
|
|
1320
|
+
|
|
1321
|
+
profile = {"ca_bundle_path": str(ca_bundle_path)} if ca_bundle_path else None
|
|
1322
|
+
context = resolve_tls_profile("microsoft", profile=profile).ssl_context
|
|
1323
|
+
if client_certificate_path and client_private_key_path:
|
|
1324
|
+
context.load_cert_chain(
|
|
1325
|
+
certfile=str(client_certificate_path),
|
|
1326
|
+
keyfile=str(client_private_key_path),
|
|
1327
|
+
password=private_key_password,
|
|
1328
|
+
)
|
|
1329
|
+
return context
|
|
1330
|
+
|
|
1331
|
+
|
|
1306
1332
|
__all__ = [
|
|
1333
|
+
"build_client_tls_context",
|
|
1307
1334
|
"ClipboardAdapter",
|
|
1308
1335
|
"DesktopFlowExecutor",
|
|
1309
1336
|
"NotificationAdapter",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: microsoft-agent
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.3
|
|
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
|
|
@@ -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.3**
|
|
75
75
|
|
|
76
76
|
## Capabilities
|
|
77
77
|
|
|
@@ -183,6 +183,7 @@ tests/test_settings_and_policy.py
|
|
|
183
183
|
tests/test_startup.py
|
|
184
184
|
tests/test_teams_reliability.py
|
|
185
185
|
tests/test_transport_migration.py
|
|
186
|
+
tests/test_transport_tls.py
|
|
186
187
|
tests/test_verify_api_integration.py
|
|
187
188
|
tests/test_windows_companion.py
|
|
188
189
|
tests/test_windows_control_plane.py
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"""The control-plane client TLS context comes from the SDK TLS profile."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import ast
|
|
6
|
+
import ssl
|
|
7
|
+
from datetime import UTC, datetime, timedelta
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
|
|
10
|
+
import pytest
|
|
11
|
+
from agent_connector_sdk.tls.errors import TransportSecurityError
|
|
12
|
+
from cryptography import x509
|
|
13
|
+
from cryptography.hazmat.primitives import hashes, serialization
|
|
14
|
+
from cryptography.hazmat.primitives.asymmetric import ec
|
|
15
|
+
from cryptography.x509.oid import NameOID
|
|
16
|
+
|
|
17
|
+
from microsoft_agent import windows_runtime
|
|
18
|
+
from microsoft_agent.windows_runtime import build_client_tls_context
|
|
19
|
+
|
|
20
|
+
ROOT = Path(__file__).resolve().parents[1]
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _identity(directory: Path) -> tuple[Path, Path]:
|
|
24
|
+
key = ec.generate_private_key(ec.SECP256R1())
|
|
25
|
+
name = x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, "companion")])
|
|
26
|
+
now = datetime.now(UTC)
|
|
27
|
+
cert = (
|
|
28
|
+
x509.CertificateBuilder()
|
|
29
|
+
.subject_name(name)
|
|
30
|
+
.issuer_name(name)
|
|
31
|
+
.public_key(key.public_key())
|
|
32
|
+
.serial_number(x509.random_serial_number())
|
|
33
|
+
.not_valid_before(now - timedelta(minutes=1))
|
|
34
|
+
.not_valid_after(now + timedelta(days=1))
|
|
35
|
+
.add_extension(x509.BasicConstraints(ca=True, path_length=None), critical=True)
|
|
36
|
+
.sign(key, hashes.SHA256())
|
|
37
|
+
)
|
|
38
|
+
cert_path, key_path = directory / "cert.pem", directory / "key.pem"
|
|
39
|
+
cert_path.write_bytes(cert.public_bytes(serialization.Encoding.PEM))
|
|
40
|
+
key_path.write_bytes(
|
|
41
|
+
key.private_bytes(
|
|
42
|
+
serialization.Encoding.PEM,
|
|
43
|
+
serialization.PrivateFormat.PKCS8,
|
|
44
|
+
serialization.NoEncryption(),
|
|
45
|
+
)
|
|
46
|
+
)
|
|
47
|
+
return cert_path, key_path
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def test_client_context_verifies_peer_and_uses_instance_ca(tmp_path: Path) -> None:
|
|
51
|
+
"""CONN-MICROSOFT-AGENT-TRANSPORT-TLS-R001: profile-built verified context."""
|
|
52
|
+
cert, key = _identity(tmp_path)
|
|
53
|
+
context = build_client_tls_context(
|
|
54
|
+
ca_bundle_path=cert,
|
|
55
|
+
client_certificate_path=cert,
|
|
56
|
+
client_private_key_path=key,
|
|
57
|
+
)
|
|
58
|
+
assert context.verify_mode == ssl.CERT_REQUIRED
|
|
59
|
+
assert context.check_hostname is True
|
|
60
|
+
assert context.minimum_version >= ssl.TLSVersion.TLSv1_2
|
|
61
|
+
subjects = [entry.get("subject") for entry in context.get_ca_certs()]
|
|
62
|
+
assert ((("commonName", "companion"),),) in subjects
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def test_client_context_uses_the_sdk_profile(monkeypatch: pytest.MonkeyPatch) -> None:
|
|
66
|
+
"""CONN-MICROSOFT-AGENT-TRANSPORT-TLS-R001: resolution goes through the SDK."""
|
|
67
|
+
seen: dict[str, object] = {}
|
|
68
|
+
real = windows_runtime.resolve_tls_profile
|
|
69
|
+
|
|
70
|
+
def spy(service: str, **kwargs: object):
|
|
71
|
+
seen.update(service=service, **kwargs)
|
|
72
|
+
return real(service, **kwargs)
|
|
73
|
+
|
|
74
|
+
monkeypatch.setattr(windows_runtime, "resolve_tls_profile", spy)
|
|
75
|
+
build_client_tls_context()
|
|
76
|
+
assert seen["service"] == "microsoft"
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def test_missing_ca_bundle_fails_closed(tmp_path: Path) -> None:
|
|
80
|
+
"""CONN-MICROSOFT-AGENT-TRANSPORT-TLS-R001: no silent fallback to default trust."""
|
|
81
|
+
with pytest.raises(TransportSecurityError):
|
|
82
|
+
build_client_tls_context(ca_bundle_path=tmp_path / "absent.pem")
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def test_no_hand_built_tls_context_in_package() -> None:
|
|
86
|
+
"""CONN-MICROSOFT-AGENT-TRANSPORT-TLS-R002: only the SDK builds SSL contexts."""
|
|
87
|
+
offenders: list[str] = []
|
|
88
|
+
for path in (ROOT / "microsoft_agent").rglob("*.py"):
|
|
89
|
+
for node in ast.walk(ast.parse(path.read_text(encoding="utf-8"))):
|
|
90
|
+
if (
|
|
91
|
+
isinstance(node, ast.Call)
|
|
92
|
+
and isinstance(node.func, ast.Attribute)
|
|
93
|
+
and node.func.attr
|
|
94
|
+
in {
|
|
95
|
+
"create_default_context",
|
|
96
|
+
"SSLContext",
|
|
97
|
+
"_create_unverified_context",
|
|
98
|
+
}
|
|
99
|
+
):
|
|
100
|
+
offenders.append(f"{path.relative_to(ROOT)}:{node.lineno}")
|
|
101
|
+
if isinstance(node, ast.keyword) and node.arg == "verify":
|
|
102
|
+
if isinstance(node.value, ast.Constant) and node.value.value is False:
|
|
103
|
+
offenders.append(f"{path.relative_to(ROOT)}:{node.value.lineno}")
|
|
104
|
+
assert not offenders
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/control-plane/control-plane.sample.json
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
|
{microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/windows/Install-WindowsCompanion.ps1
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/windows/Uninstall-WindowsCompanion.ps1
RENAMED
|
File without changes
|
{microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/deployment/windows/windows-companion.sample.json
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
|
{microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/connectors/mcp_source_presets.json
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
|
{microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/mcp/mcp_employee_experience.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
|
{microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/ontology/fixtures/records.json
RENAMED
|
File without changes
|
{microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/ontology/mappings/source.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/ontology/migrations/manifest.json
RENAMED
|
File without changes
|
{microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/ontology/shapes/connector.shacl.ttl
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
|
{microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent/windows_control_plane_service.py
RENAMED
|
File without changes
|
{microsoft_agent-2.3.2 → microsoft_agent-2.3.3}/microsoft_agent.egg-info/dependency_links.txt
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
|