microsoft-agents-hosting-core 0.6.0.dev17__py3-none-any.whl → 0.7.0__py3-none-any.whl

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.
Files changed (25) hide show
  1. microsoft_agents/hosting/core/__init__.py +24 -1
  2. microsoft_agents/hosting/core/app/agent_application.py +12 -24
  3. microsoft_agents/hosting/core/app/oauth/_sign_in_state.py +7 -15
  4. microsoft_agents/hosting/core/app/streaming/__init__.py +14 -0
  5. microsoft_agents/hosting/core/app/streaming/citation.py +22 -0
  6. microsoft_agents/hosting/core/app/streaming/citation_util.py +85 -0
  7. microsoft_agents/hosting/core/app/streaming/streaming_response.py +411 -0
  8. microsoft_agents/hosting/core/authorization/claims_identity.py +14 -0
  9. microsoft_agents/hosting/core/channel_service_adapter.py +28 -14
  10. microsoft_agents/hosting/core/connector/client/connector_client.py +0 -1
  11. microsoft_agents/hosting/core/connector/client/user_token_client.py +0 -1
  12. microsoft_agents/hosting/core/http/__init__.py +17 -0
  13. microsoft_agents/hosting/core/http/_channel_service_routes.py +202 -0
  14. microsoft_agents/hosting/core/http/_http_adapter_base.py +136 -0
  15. microsoft_agents/hosting/core/http/_http_request_protocol.py +36 -0
  16. microsoft_agents/hosting/core/http/_http_response.py +56 -0
  17. microsoft_agents/hosting/core/rest_channel_service_client_factory.py +2 -2
  18. microsoft_agents/hosting/core/storage/memory_storage.py +0 -1
  19. microsoft_agents/hosting/core/storage/storage.py +0 -1
  20. microsoft_agents/hosting/core/storage/transcript_logger.py +0 -1
  21. {microsoft_agents_hosting_core-0.6.0.dev17.dist-info → microsoft_agents_hosting_core-0.7.0.dist-info}/METADATA +21 -3
  22. {microsoft_agents_hosting_core-0.6.0.dev17.dist-info → microsoft_agents_hosting_core-0.7.0.dist-info}/RECORD +25 -16
  23. {microsoft_agents_hosting_core-0.6.0.dev17.dist-info → microsoft_agents_hosting_core-0.7.0.dist-info}/WHEEL +0 -0
  24. {microsoft_agents_hosting_core-0.6.0.dev17.dist-info → microsoft_agents_hosting_core-0.7.0.dist-info}/licenses/LICENSE +0 -0
  25. {microsoft_agents_hosting_core-0.6.0.dev17.dist-info → microsoft_agents_hosting_core-0.7.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,202 @@
1
+ # Copyright (c) Microsoft Corporation. All rights reserved.
2
+ # Licensed under the MIT License.
3
+
4
+ """Channel service route definitions (framework-agnostic logic)."""
5
+
6
+ from typing import Type, List, Union
7
+
8
+ from microsoft_agents.activity import (
9
+ AgentsModel,
10
+ Activity,
11
+ AttachmentData,
12
+ ConversationParameters,
13
+ Transcript,
14
+ )
15
+ from microsoft_agents.hosting.core import ChannelApiHandlerProtocol
16
+
17
+ from ._http_request_protocol import HttpRequestProtocol
18
+
19
+
20
+ class ChannelServiceRoutes:
21
+ """Defines the Channel Service API routes and their handlers.
22
+
23
+ This class provides framework-agnostic route logic that can be
24
+ adapted to different web frameworks (aiohttp, FastAPI, etc.).
25
+ """
26
+
27
+ def __init__(self, handler: ChannelApiHandlerProtocol, base_url: str = ""):
28
+ """Initialize channel service routes.
29
+
30
+ Args:
31
+ handler: The handler that implements the Channel API protocol.
32
+ base_url: Optional base URL prefix for all routes.
33
+ """
34
+ self.handler = handler
35
+ self.base_url = base_url
36
+
37
+ @staticmethod
38
+ async def deserialize_from_body(
39
+ request: HttpRequestProtocol, target_model: Type[AgentsModel]
40
+ ) -> AgentsModel:
41
+ """Deserialize request body to target model."""
42
+ content_type = request.headers.get("Content-Type", "")
43
+ if "application/json" not in content_type:
44
+ raise ValueError("Content-Type must be application/json")
45
+
46
+ body = await request.json()
47
+ return target_model.model_validate(body)
48
+
49
+ @staticmethod
50
+ def serialize_model(model_or_list: Union[AgentsModel, List[AgentsModel]]) -> dict:
51
+ """Serialize model or list of models to JSON-compatible dict."""
52
+ if isinstance(model_or_list, AgentsModel):
53
+ return model_or_list.model_dump(
54
+ mode="json", exclude_unset=True, by_alias=True
55
+ )
56
+ else:
57
+ return [
58
+ model.model_dump(mode="json", exclude_unset=True, by_alias=True)
59
+ for model in model_or_list
60
+ ]
61
+
62
+ # Route handler methods
63
+ async def send_to_conversation(self, request: HttpRequestProtocol) -> dict:
64
+ """Handle POST /v3/conversations/{conversation_id}/activities."""
65
+ activity = await self.deserialize_from_body(request, Activity)
66
+ conversation_id = request.get_path_param("conversation_id")
67
+ result = await self.handler.on_send_to_conversation(
68
+ request.get_claims_identity(),
69
+ conversation_id,
70
+ activity,
71
+ )
72
+ return self.serialize_model(result)
73
+
74
+ async def reply_to_activity(self, request: HttpRequestProtocol) -> dict:
75
+ """Handle POST /v3/conversations/{conversation_id}/activities/{activity_id}."""
76
+ activity = await self.deserialize_from_body(request, Activity)
77
+ conversation_id = request.get_path_param("conversation_id")
78
+ activity_id = request.get_path_param("activity_id")
79
+ result = await self.handler.on_reply_to_activity(
80
+ request.get_claims_identity(),
81
+ conversation_id,
82
+ activity_id,
83
+ activity,
84
+ )
85
+ return self.serialize_model(result)
86
+
87
+ async def update_activity(self, request: HttpRequestProtocol) -> dict:
88
+ """Handle PUT /v3/conversations/{conversation_id}/activities/{activity_id}."""
89
+ activity = await self.deserialize_from_body(request, Activity)
90
+ conversation_id = request.get_path_param("conversation_id")
91
+ activity_id = request.get_path_param("activity_id")
92
+ result = await self.handler.on_update_activity(
93
+ request.get_claims_identity(),
94
+ conversation_id,
95
+ activity_id,
96
+ activity,
97
+ )
98
+ return self.serialize_model(result)
99
+
100
+ async def delete_activity(self, request: HttpRequestProtocol) -> None:
101
+ """Handle DELETE /v3/conversations/{conversation_id}/activities/{activity_id}."""
102
+ conversation_id = request.get_path_param("conversation_id")
103
+ activity_id = request.get_path_param("activity_id")
104
+ await self.handler.on_delete_activity(
105
+ request.get_claims_identity(),
106
+ conversation_id,
107
+ activity_id,
108
+ )
109
+
110
+ async def get_activity_members(self, request: HttpRequestProtocol) -> dict:
111
+ """Handle GET /v3/conversations/{conversation_id}/activities/{activity_id}/members."""
112
+ conversation_id = request.get_path_param("conversation_id")
113
+ activity_id = request.get_path_param("activity_id")
114
+ result = await self.handler.on_get_activity_members(
115
+ request.get_claims_identity(),
116
+ conversation_id,
117
+ activity_id,
118
+ )
119
+ return self.serialize_model(result)
120
+
121
+ async def create_conversation(self, request: HttpRequestProtocol) -> dict:
122
+ """Handle POST /."""
123
+ conversation_parameters = await self.deserialize_from_body(
124
+ request, ConversationParameters
125
+ )
126
+ result = await self.handler.on_create_conversation(
127
+ request.get_claims_identity(), conversation_parameters
128
+ )
129
+ return self.serialize_model(result)
130
+
131
+ async def get_conversations(self, request: HttpRequestProtocol) -> dict:
132
+ """Handle GET /."""
133
+ # TODO: continuation token? conversation_id?
134
+ result = await self.handler.on_get_conversations(
135
+ request.get_claims_identity(), None
136
+ )
137
+ return self.serialize_model(result)
138
+
139
+ async def get_conversation_members(self, request: HttpRequestProtocol) -> dict:
140
+ """Handle GET /v3/conversations/{conversation_id}/members."""
141
+ conversation_id = request.get_path_param("conversation_id")
142
+ result = await self.handler.on_get_conversation_members(
143
+ request.get_claims_identity(),
144
+ conversation_id,
145
+ )
146
+ return self.serialize_model(result)
147
+
148
+ async def get_conversation_member(self, request: HttpRequestProtocol) -> dict:
149
+ """Handle GET /v3/conversations/{conversation_id}/members/{member_id}."""
150
+ conversation_id = request.get_path_param("conversation_id")
151
+ member_id = request.get_path_param("member_id")
152
+ result = await self.handler.on_get_conversation_member(
153
+ request.get_claims_identity(),
154
+ member_id,
155
+ conversation_id,
156
+ )
157
+ return self.serialize_model(result)
158
+
159
+ async def get_conversation_paged_members(
160
+ self, request: HttpRequestProtocol
161
+ ) -> dict:
162
+ """Handle GET /v3/conversations/{conversation_id}/pagedmembers."""
163
+ conversation_id = request.get_path_param("conversation_id")
164
+ # TODO: continuation token? page size?
165
+ result = await self.handler.on_get_conversation_paged_members(
166
+ request.get_claims_identity(),
167
+ conversation_id,
168
+ )
169
+ return self.serialize_model(result)
170
+
171
+ async def delete_conversation_member(self, request: HttpRequestProtocol) -> dict:
172
+ """Handle DELETE /v3/conversations/{conversation_id}/members/{member_id}."""
173
+ conversation_id = request.get_path_param("conversation_id")
174
+ member_id = request.get_path_param("member_id")
175
+ result = await self.handler.on_delete_conversation_member(
176
+ request.get_claims_identity(),
177
+ conversation_id,
178
+ member_id,
179
+ )
180
+ return self.serialize_model(result)
181
+
182
+ async def send_conversation_history(self, request: HttpRequestProtocol) -> dict:
183
+ """Handle POST /v3/conversations/{conversation_id}/activities/history."""
184
+ conversation_id = request.get_path_param("conversation_id")
185
+ transcript = await self.deserialize_from_body(request, Transcript)
186
+ result = await self.handler.on_send_conversation_history(
187
+ request.get_claims_identity(),
188
+ conversation_id,
189
+ transcript,
190
+ )
191
+ return self.serialize_model(result)
192
+
193
+ async def upload_attachment(self, request: HttpRequestProtocol) -> dict:
194
+ """Handle POST /v3/conversations/{conversation_id}/attachments."""
195
+ conversation_id = request.get_path_param("conversation_id")
196
+ attachment_data = await self.deserialize_from_body(request, AttachmentData)
197
+ result = await self.handler.on_upload_attachment(
198
+ request.get_claims_identity(),
199
+ conversation_id,
200
+ attachment_data,
201
+ )
202
+ return self.serialize_model(result)
@@ -0,0 +1,136 @@
1
+ # Copyright (c) Microsoft Corporation. All rights reserved.
2
+ # Licensed under the MIT License.
3
+
4
+ """Base HTTP adapter with shared processing logic."""
5
+
6
+ from abc import ABC
7
+ from traceback import format_exc
8
+
9
+ from microsoft_agents.activity import Activity, DeliveryModes
10
+ from microsoft_agents.hosting.core.authorization import ClaimsIdentity, Connections
11
+ from microsoft_agents.hosting.core import (
12
+ Agent,
13
+ ChannelServiceAdapter,
14
+ ChannelServiceClientFactoryBase,
15
+ MessageFactory,
16
+ RestChannelServiceClientFactory,
17
+ TurnContext,
18
+ )
19
+
20
+ from ._http_request_protocol import HttpRequestProtocol
21
+ from ._http_response import HttpResponse, HttpResponseFactory
22
+
23
+
24
+ class HttpAdapterBase(ChannelServiceAdapter, ABC):
25
+ """Base adapter for HTTP-based agent hosting with shared processing logic.
26
+
27
+ This class contains all the common logic for processing HTTP requests
28
+ and can be subclassed by framework-specific adapters (aiohttp, FastAPI, etc).
29
+ """
30
+
31
+ def __init__(
32
+ self,
33
+ *,
34
+ connection_manager: Connections = None,
35
+ channel_service_client_factory: ChannelServiceClientFactoryBase = None,
36
+ ):
37
+ """Initialize the HTTP adapter.
38
+
39
+ Args:
40
+ connection_manager: Optional connection manager for OAuth.
41
+ channel_service_client_factory: Factory for creating channel service clients.
42
+ """
43
+
44
+ async def on_turn_error(context: TurnContext, error: Exception):
45
+ error_message = f"Exception caught : {error}"
46
+ print(format_exc())
47
+
48
+ await context.send_activity(MessageFactory.text(error_message))
49
+
50
+ # Send a trace activity
51
+ await context.send_trace_activity(
52
+ "OnTurnError Trace",
53
+ error_message,
54
+ "https://www.botframework.com/schemas/error",
55
+ "TurnError",
56
+ )
57
+
58
+ self.on_turn_error = on_turn_error
59
+
60
+ channel_service_client_factory = (
61
+ channel_service_client_factory
62
+ or RestChannelServiceClientFactory(connection_manager)
63
+ )
64
+
65
+ super().__init__(channel_service_client_factory)
66
+
67
+ async def process_request(
68
+ self, request: HttpRequestProtocol, agent: Agent
69
+ ) -> HttpResponse:
70
+ """Process an incoming HTTP request.
71
+
72
+ Args:
73
+ request: The HTTP request to process.
74
+ agent: The agent to handle the request.
75
+
76
+ Returns:
77
+ HttpResponse with the result.
78
+
79
+ Raises:
80
+ TypeError: If request or agent is None.
81
+ """
82
+ if not request:
83
+ raise TypeError("HttpAdapterBase.process_request: request can't be None")
84
+ if not agent:
85
+ raise TypeError("HttpAdapterBase.process_request: agent can't be None")
86
+
87
+ if request.method != "POST":
88
+ return HttpResponseFactory.method_not_allowed()
89
+
90
+ # Deserialize the incoming Activity
91
+ content_type = request.headers.get("Content-Type", "")
92
+ if "application/json" not in content_type:
93
+ return HttpResponseFactory.unsupported_media_type()
94
+
95
+ try:
96
+ body = await request.json()
97
+ except Exception:
98
+ return HttpResponseFactory.bad_request("Invalid JSON")
99
+
100
+ activity: Activity = Activity.model_validate(body)
101
+
102
+ # Get claims identity (default to anonymous if not set by middleware)
103
+ claims_identity: ClaimsIdentity = (
104
+ request.get_claims_identity() or ClaimsIdentity({}, False)
105
+ )
106
+
107
+ # Validate required activity fields
108
+ if (
109
+ not activity.type
110
+ or not activity.conversation
111
+ or not activity.conversation.id
112
+ ):
113
+ return HttpResponseFactory.bad_request(
114
+ "Activity must have type and conversation.id"
115
+ )
116
+
117
+ try:
118
+ # Process the inbound activity with the agent
119
+ invoke_response = await self.process_activity(
120
+ claims_identity, activity, agent.on_turn
121
+ )
122
+
123
+ # Check if we need to return a synchronous response
124
+ if (
125
+ activity.type == "invoke"
126
+ or activity.delivery_mode == DeliveryModes.expect_replies
127
+ ):
128
+ # Invoke and ExpectReplies cannot be performed async
129
+ return HttpResponseFactory.json(
130
+ invoke_response.body, invoke_response.status
131
+ )
132
+
133
+ return HttpResponseFactory.accepted()
134
+
135
+ except PermissionError:
136
+ return HttpResponseFactory.unauthorized()
@@ -0,0 +1,36 @@
1
+ # Copyright (c) Microsoft Corporation. All rights reserved.
2
+ # Licensed under the MIT License.
3
+
4
+ """Protocol for abstracting HTTP request objects across frameworks."""
5
+
6
+ from typing import Protocol, Dict, Any, Optional
7
+
8
+
9
+ class HttpRequestProtocol(Protocol):
10
+ """Protocol for HTTP requests that adapters must implement.
11
+
12
+ This protocol defines the interface that framework-specific request
13
+ adapters must implement to work with the shared HTTP adapter logic.
14
+ """
15
+
16
+ @property
17
+ def method(self) -> str:
18
+ """HTTP method (GET, POST, etc.)."""
19
+ ...
20
+
21
+ @property
22
+ def headers(self) -> Dict[str, str]:
23
+ """Request headers."""
24
+ ...
25
+
26
+ async def json(self) -> Dict[str, Any]:
27
+ """Parse request body as JSON."""
28
+ ...
29
+
30
+ def get_claims_identity(self) -> Optional[Any]:
31
+ """Get claims identity attached by auth middleware."""
32
+ ...
33
+
34
+ def get_path_param(self, name: str) -> str:
35
+ """Get path parameter by name."""
36
+ ...
@@ -0,0 +1,56 @@
1
+ # Copyright (c) Microsoft Corporation. All rights reserved.
2
+ # Licensed under the MIT License.
3
+
4
+ """HTTP response abstraction."""
5
+
6
+ from typing import Any, Optional, Dict
7
+ from dataclasses import dataclass
8
+
9
+
10
+ @dataclass
11
+ class HttpResponse:
12
+ """Framework-agnostic HTTP response."""
13
+
14
+ status_code: int
15
+ body: Optional[Any] = None
16
+ headers: Optional[Dict[str, str]] = None
17
+ content_type: Optional[str] = "application/json"
18
+
19
+
20
+ class HttpResponseFactory:
21
+ """Factory for creating HTTP responses."""
22
+
23
+ @staticmethod
24
+ def ok(body: Any = None) -> HttpResponse:
25
+ """Create 200 OK response."""
26
+ return HttpResponse(status_code=200, body=body)
27
+
28
+ @staticmethod
29
+ def accepted() -> HttpResponse:
30
+ """Create 202 Accepted response."""
31
+ return HttpResponse(status_code=202)
32
+
33
+ @staticmethod
34
+ def json(body: Any, status_code: int = 200) -> HttpResponse:
35
+ """Create JSON response."""
36
+ return HttpResponse(status_code=status_code, body=body)
37
+
38
+ @staticmethod
39
+ def bad_request(message: str = "Bad Request") -> HttpResponse:
40
+ """Create 400 Bad Request response."""
41
+ return HttpResponse(status_code=400, body={"error": message})
42
+
43
+ @staticmethod
44
+ def unauthorized(message: str = "Unauthorized") -> HttpResponse:
45
+ """Create 401 Unauthorized response."""
46
+ return HttpResponse(status_code=401, body={"error": message})
47
+
48
+ @staticmethod
49
+ def method_not_allowed(message: str = "Method Not Allowed") -> HttpResponse:
50
+ """Create 405 Method Not Allowed response."""
51
+ return HttpResponse(status_code=405, body={"error": message})
52
+
53
+ @staticmethod
54
+ def unsupported_media_type(message: str = "Unsupported Media Type") -> HttpResponse:
55
+ """Create 415 Unsupported Media Type response."""
56
+ return HttpResponse(status_code=415, body={"error": message})
@@ -113,7 +113,7 @@ class RestChannelServiceClientFactory(ChannelServiceClientFactoryBase):
113
113
  )
114
114
 
115
115
  token = await token_provider.get_access_token(
116
- audience, scopes or [f"{audience}/.default"]
116
+ audience, scopes or claims_identity.get_token_scope()
117
117
  )
118
118
 
119
119
  return TeamsConnectorClient(
@@ -142,7 +142,7 @@ class RestChannelServiceClientFactory(ChannelServiceClientFactoryBase):
142
142
  if context.activity.is_agentic_request():
143
143
  token = await self._get_agentic_token(context, self._token_service_endpoint)
144
144
  else:
145
- scopes = [f"{self._token_service_audience}/.default"]
145
+ scopes = claims_identity.get_token_scope()
146
146
 
147
147
  token_provider = self._connection_manager.get_token_provider(
148
148
  claims_identity, self._token_service_endpoint
@@ -8,7 +8,6 @@ from ._type_aliases import JSON
8
8
  from .storage import Storage
9
9
  from .store_item import StoreItem
10
10
 
11
-
12
11
  StoreItemT = TypeVar("StoreItemT", bound=StoreItem)
13
12
 
14
13
 
@@ -8,7 +8,6 @@ from asyncio import gather
8
8
  from ._type_aliases import JSON
9
9
  from .store_item import StoreItem
10
10
 
11
-
12
11
  StoreItemT = TypeVar("StoreItemT", bound=StoreItem)
13
12
 
14
13
 
@@ -19,7 +19,6 @@ from microsoft_agents.activity.conversation_reference import ActivityEventNames
19
19
  from microsoft_agents.hosting.core.middleware_set import Middleware, TurnContext
20
20
  from typing import Generic, TypeVar
21
21
 
22
-
23
22
  T = TypeVar("T")
24
23
 
25
24
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: microsoft-agents-hosting-core
3
- Version: 0.6.0.dev17
3
+ Version: 0.7.0
4
4
  Summary: Core library for Microsoft Agents
5
5
  Author: Microsoft Corporation
6
6
  License-Expression: MIT
@@ -15,7 +15,7 @@ Classifier: Operating System :: OS Independent
15
15
  Requires-Python: >=3.10
16
16
  Description-Content-Type: text/markdown
17
17
  License-File: LICENSE
18
- Requires-Dist: microsoft-agents-activity==0.6.0.dev17
18
+ Requires-Dist: microsoft-agents-activity==0.7.0
19
19
  Requires-Dist: pyjwt>=2.10.1
20
20
  Requires-Dist: isodate>=0.6.1
21
21
  Requires-Dist: azure-core>=1.30.0
@@ -41,11 +41,29 @@ This library is part of the **Microsoft 365 Agents SDK for Python** - a comprehe
41
41
  <th style="width:20%">Date</th>
42
42
  <th style="width:60%">Release Notes</th>
43
43
  </tr>
44
+ <tr>
45
+ <td>0.6.1</td>
46
+ <td>2025-12-01</td>
47
+ <td>
48
+ <a href="https://github.com/microsoft/Agents-for-python/blob/main/changelog.md#microsoft-365-agents-sdk-for-python---release-notes-v061">
49
+ 0.6.1 Release Notes
50
+ </a>
51
+ </td>
52
+ </tr>
53
+ <tr>
54
+ <td>0.6.0</td>
55
+ <td>2025-11-18</td>
56
+ <td>
57
+ <a href="https://github.com/microsoft/Agents-for-python/blob/main/changelog.md#microsoft-365-agents-sdk-for-python---release-notes-v060">
58
+ 0.6.0 Release Notes
59
+ </a>
60
+ </td>
61
+ </tr>
44
62
  <tr>
45
63
  <td>0.5.0</td>
46
64
  <td>2025-10-22</td>
47
65
  <td>
48
- <a href="https://github.com/microsoft/Agents-for-python/blob/main/changelog.md">
66
+ <a href="https://github.com/microsoft/Agents-for-python/blob/main/changelog.md#microsoft-365-agents-sdk-for-python---release-notes-v050">
49
67
  0.5.0 Release Notes
50
68
  </a>
51
69
  </td>
@@ -1,14 +1,14 @@
1
- microsoft_agents/hosting/core/__init__.py,sha256=jZ0551xg2RnMtHpAMD1AtXyDh0oPUSDYPe_S9QNdbtA,5012
1
+ microsoft_agents/hosting/core/__init__.py,sha256=bpUnDxIdWHzcta50KQ0GVul9b7Y5-o4VxFJ20CQm4hQ,5458
2
2
  microsoft_agents/hosting/core/activity_handler.py,sha256=1hsSmVCnQLS44RK05v8j6mlmV38_JGmJTPR9LkogQuc,27779
3
3
  microsoft_agents/hosting/core/agent.py,sha256=K8v84y8ULP7rbcMKg8LxaM3haAq7f1oHFCLy3AAphQE,574
4
4
  microsoft_agents/hosting/core/card_factory.py,sha256=UDmPEpOk2SpEr9ShN9Q0CiaI_GTD3qjHgkDMOWinW9I,6926
5
5
  microsoft_agents/hosting/core/channel_adapter.py,sha256=MqES9gHGS0nrKBR7u8zLQCsuIksl-hScZy_jg4LTTHo,10669
6
6
  microsoft_agents/hosting/core/channel_api_handler_protocol.py,sha256=RO59hiOYx7flQVWhX6VGvfpFPoKVkdT_la-7WhUl8UM,4506
7
- microsoft_agents/hosting/core/channel_service_adapter.py,sha256=OTF1EFycfBv4sdX2Zt_jPzk80aRHjLhSv5DyU6CEc7Q,20919
7
+ microsoft_agents/hosting/core/channel_service_adapter.py,sha256=9wUrCGLO4WiHt_NLrSwUShHQAHxNsIefndOXZxKZu8M,21474
8
8
  microsoft_agents/hosting/core/channel_service_client_factory_base.py,sha256=9LcpxiWMXmWAdGQt6lRzvY9ybF_5mGc5Focd1Z7f9MY,1711
9
9
  microsoft_agents/hosting/core/message_factory.py,sha256=F9QJBF4yBupHXxOW984ZzZomVEG57t9IUnTHwub-lX0,7822
10
10
  microsoft_agents/hosting/core/middleware_set.py,sha256=TBsBs4KwAfKyHlQTlG4bl1y5UjkBzeMDs5w7LNB-Bi4,2585
11
- microsoft_agents/hosting/core/rest_channel_service_client_factory.py,sha256=NY9Pj9-jR2Oq-Crqm7as41FsVX3PLWsM-JEw3RTjyhE,6208
11
+ microsoft_agents/hosting/core/rest_channel_service_client_factory.py,sha256=1uNi1Voy0Llj-Z7EtKwBCmkY7KsULnGO4Ttxyqj253Y,6206
12
12
  microsoft_agents/hosting/core/turn_context.py,sha256=muA8S4R6Xxja5it7DiFqr5J5zmttwDN-Mj5_SDdxZ4A,14874
13
13
  microsoft_agents/hosting/core/_oauth/__init__.py,sha256=sU1HsIXbETRYwnudtFc6GrNbM6C3oYjmruqXc6kIAFw,405
14
14
  microsoft_agents/hosting/core/_oauth/_flow_state.py,sha256=BQbXn0a3Fw4aozS-WSjL0Y7vEdb4eua1ZitSr0qZ6bE,2207
@@ -16,7 +16,7 @@ microsoft_agents/hosting/core/_oauth/_flow_storage_client.py,sha256=1MLD8m_qw0jS
16
16
  microsoft_agents/hosting/core/_oauth/_oauth_flow.py,sha256=vgg_sQLYr83YA0F7aQ1K5j8vEATw7ZS151ODkpCGYAM,12211
17
17
  microsoft_agents/hosting/core/app/__init__.py,sha256=GZQdog7BBMA8uD9iaRMNeRJf12rJZB3bAKFAD8Y8dVo,1228
18
18
  microsoft_agents/hosting/core/app/_type_defs.py,sha256=b5VZFWnQ5ONUZMtFxw7Q-mbbxIUSJ7RXcCXjqdHwSQw,438
19
- microsoft_agents/hosting/core/app/agent_application.py,sha256=iqcsLM4k_BWY0KKI1Ia-W11geuIHF8TP3mRc3D1eVF0,33984
19
+ microsoft_agents/hosting/core/app/agent_application.py,sha256=24WjroVgiHavWdJTsfyOgQTjRR8H-jF98JVLfkwWcXo,33804
20
20
  microsoft_agents/hosting/core/app/app_error.py,sha256=JgYBgv2EKe9Q2TFi5FeG_RneulBEa5SyBpWSF-duBzE,301
21
21
  microsoft_agents/hosting/core/app/app_options.py,sha256=P3XTFFuQCnEcHixfdmr5RPG-Wli4c1VSmCMRKVBBLsw,2792
22
22
  microsoft_agents/hosting/core/app/input_file.py,sha256=AEzVAnAPO1V7MWDI_uoZfcYY8Oog3XgvEpAeO-tATeY,1546
@@ -28,7 +28,7 @@ microsoft_agents/hosting/core/app/_routes/_route_list.py,sha256=fe1-wmFaJJqYkWFc
28
28
  microsoft_agents/hosting/core/app/_routes/route_rank.py,sha256=-UwmLMCtgLT2cWnWvLfE2puV0RuQfI2m3WyEvkBkSBg,324
29
29
  microsoft_agents/hosting/core/app/oauth/__init__.py,sha256=eHx-vmW2Ew8HULSfvAmV8F9TBXXLcTPsBe3XP4JEDdY,556
30
30
  microsoft_agents/hosting/core/app/oauth/_sign_in_response.py,sha256=H5VBX69WiYXGALzCDVnF_-Y0brbafbJgfF4mS2wZSr0,851
31
- microsoft_agents/hosting/core/app/oauth/_sign_in_state.py,sha256=lC2otIFcQthAZ8kqkYxV3wLBPOqzW9MRVUbdqQPtEdM,1159
31
+ microsoft_agents/hosting/core/app/oauth/_sign_in_state.py,sha256=gtrLa_BgQq-yrTu8ItVwQ8fntfSKjlng2lCj6A8mCrc,897
32
32
  microsoft_agents/hosting/core/app/oauth/auth_handler.py,sha256=KyhEfpKtoVKcapOt4szpDdbgk_KSwXF46GGOeJrmsRI,3464
33
33
  microsoft_agents/hosting/core/app/oauth/authorization.py,sha256=_sdCZcZ7iciwTZqXTHFOK4vWWbCgSIDv3it30fzPI8w,18246
34
34
  microsoft_agents/hosting/core/app/oauth/_handlers/__init__.py,sha256=ZQuXF-IZrJv_hOgt-sdRFAUyIpRXaYqYBuyEJWJRcfU,376
@@ -40,13 +40,17 @@ microsoft_agents/hosting/core/app/state/conversation_state.py,sha256=LfcSwvhaU0J
40
40
  microsoft_agents/hosting/core/app/state/state.py,sha256=mbNrHuAc7d9vJep3PtExbLFtfKxZoAUX3Jr45GT3SuA,7373
41
41
  microsoft_agents/hosting/core/app/state/temp_state.py,sha256=Oh7K5-uYf50Z-lBXqttSMl2N1lRakktOmjLlIAKcEsM,3501
42
42
  microsoft_agents/hosting/core/app/state/turn_state.py,sha256=rEIRkwBsn3MPbrfKNjX8XqqbF-4THepMXU75KvDsBvM,9868
43
+ microsoft_agents/hosting/core/app/streaming/__init__.py,sha256=LtchDJTb25owxcbDd1sWr0BtGHK-PQboxCX4oNiN89c,329
44
+ microsoft_agents/hosting/core/app/streaming/citation.py,sha256=ZGaMUOWxxoMplwRrkFsjnK7Z12V6rT5odE7qZCu-mP8,498
45
+ microsoft_agents/hosting/core/app/streaming/citation_util.py,sha256=c95c3Y3genmFc0vSXppPaD1-ShFohAV1UABZnyJS_BQ,2478
46
+ microsoft_agents/hosting/core/app/streaming/streaming_response.py,sha256=uwNYaVJ8cghdjHS_Y8ZeOiYnpyeQGHt0rQQlay6a-C8,13799
43
47
  microsoft_agents/hosting/core/authorization/__init__.py,sha256=pOTmTJFS5CMPEcHRadBTgrbWUP5lOIxsPMgTreFq7mw,634
44
48
  microsoft_agents/hosting/core/authorization/access_token_provider_base.py,sha256=Z0nGkfOUSIBvJSFjGGNQEd1-upqZVjT6eSXsqsFa2Cc,1646
45
49
  microsoft_agents/hosting/core/authorization/agent_auth_configuration.py,sha256=meLUO0Mwb9SBr01dLvYS9q3xuZyndCsb_gIx0r7__Sk,2944
46
50
  microsoft_agents/hosting/core/authorization/anonymous_token_provider.py,sha256=44XKaSLJFZj4hCSAdWAtW1R31M5QCZVaFKJaxcwx5h4,1076
47
51
  microsoft_agents/hosting/core/authorization/auth_types.py,sha256=Fg_ywEItm3xL_DBUNzi0QsfDPVY5S3HlAiNw6I2SW64,374
48
52
  microsoft_agents/hosting/core/authorization/authentication_constants.py,sha256=ABEwosDCMYhubDiGrD8QULboTkACqDvNp_x_XBPt6dQ,4618
49
- microsoft_agents/hosting/core/authorization/claims_identity.py,sha256=z2Ql7CMPgioYOw970ynxfKWHyk5lqPwMgSrNh4bUfNo,2620
53
+ microsoft_agents/hosting/core/authorization/claims_identity.py,sha256=Nc2o12K1yUXch34_r83QTWdhydudCKGpvYs0NsRIh8Q,3003
50
54
  microsoft_agents/hosting/core/authorization/connections.py,sha256=f_NQpuJzhCBNZLk56SK4kvb_V_g2x2XMnFwWbYyDX_s,1247
51
55
  microsoft_agents/hosting/core/authorization/jwt_token_validator.py,sha256=b440T7y1tM7gPUQZ27EA3SgNiaEupxz56E6773gL5Zo,2025
52
56
  microsoft_agents/hosting/core/client/__init__.py,sha256=HMWtSUXu1akaX6qtDx412Lr8vLi5SEslc-DYrvZAPWs,1299
@@ -72,12 +76,17 @@ microsoft_agents/hosting/core/connector/get_product_info.py,sha256=SDxPqBCzzQLEU
72
76
  microsoft_agents/hosting/core/connector/user_token_base.py,sha256=h_l5D1SghN2RrUkFcKWQhCHlO9r7akMbzsm2x8MvomI,3639
73
77
  microsoft_agents/hosting/core/connector/user_token_client_base.py,sha256=dfUTUsBNOzWze9_JldAeLe73sydSDzlKyMKMvj48g2E,471
74
78
  microsoft_agents/hosting/core/connector/client/__init__.py,sha256=6JdKhmm7btmo0omxMBd8PJbtGFk0cnMwVUoStyW7Ft0,143
75
- microsoft_agents/hosting/core/connector/client/connector_client.py,sha256=9oF_x_LffOIKjTLMdPf3Biq3vvWn8r8e0NBJkHBn684,23866
76
- microsoft_agents/hosting/core/connector/client/user_token_client.py,sha256=qxYxvdUcvYinCzaR4YiIucEEAb8TjYYtPsmXKZRbxv4,10536
79
+ microsoft_agents/hosting/core/connector/client/connector_client.py,sha256=S0JzWkOCgsVKLUi0KGplXT0SCbQ0HEahhTe3ex2iO_E,23865
80
+ microsoft_agents/hosting/core/connector/client/user_token_client.py,sha256=rtQ5GivBhCOpDeUkAdI0_R5c0RE-FbLxzTttopxOH2o,10535
77
81
  microsoft_agents/hosting/core/connector/teams/__init__.py,sha256=3ZMPGYyZ15EwvfQzfJJQy1J58oIt4InSxibl3BN6R54,100
78
82
  microsoft_agents/hosting/core/connector/teams/teams_connector_client.py,sha256=XGQDTYHrA_I9n9JlxGST5eesjsFhz2dnSaMSuyoFnKU,12676
79
83
  microsoft_agents/hosting/core/errors/__init__.py,sha256=kcfwDGDaopWfLyvYsNXM6j4cYt2oGKysjCRDezcVY0A,500
80
84
  microsoft_agents/hosting/core/errors/error_resources.py,sha256=_nyvPQaX3gpi9kziajVdzGWCzMa6JcTntK__zQJlGMo,3922
85
+ microsoft_agents/hosting/core/http/__init__.py,sha256=Jh6lIivBN9YsNaLPzYvzvbhLAwJbeQTSRHtFupfSy-I,532
86
+ microsoft_agents/hosting/core/http/_channel_service_routes.py,sha256=80IWoUDKywUurXnh7vmG0QMxu3sk7W38zgHsw0eJ2DA,8436
87
+ microsoft_agents/hosting/core/http/_http_adapter_base.py,sha256=qRqAwMl1Wsq_A1J6asMMcS9jUGjlLD3HF-0Sioba5IM,4561
88
+ microsoft_agents/hosting/core/http/_http_request_protocol.py,sha256=YTfcp_K1IswAIWVQ5QFBTyX-ssuUo6BChdlPHEh-t4Q,1002
89
+ microsoft_agents/hosting/core/http/_http_response.py,sha256=e_bY0bJJXx--Zb_Yd-f9iDPFbK4bWkFi92a0nq1A6us,1862
81
90
  microsoft_agents/hosting/core/state/__init__.py,sha256=yckKi1wg_86ng-DL9Q3R49QiWKvNjPkVNk6HClWgVrY,208
82
91
  microsoft_agents/hosting/core/state/agent_state.py,sha256=uboptWaC3VrSGTnXIzaO38XUqOT-ITW6EhJxuGMtKWs,13724
83
92
  microsoft_agents/hosting/core/state/state_property_accessor.py,sha256=kpiNnzkZ6el-oRITRbRkk1Faa_CPFxpJQdvSGxIJP70,1392
@@ -85,16 +94,16 @@ microsoft_agents/hosting/core/state/user_state.py,sha256=zEigX-sroNAyoQAxQjG1Ogm
85
94
  microsoft_agents/hosting/core/storage/__init__.py,sha256=Df_clI0uMRgcr4Td-xkP83bU_mGae7_gRMhtVDPZDmE,729
86
95
  microsoft_agents/hosting/core/storage/_type_aliases.py,sha256=VCKtjiCBrhEsGSm3zVVSSccdoiY02GYhABvrLjhAcz8,72
87
96
  microsoft_agents/hosting/core/storage/error_handling.py,sha256=kTMQ68GxL4GgVKpo3SexzyRARLw6UbsVhHU723XxIck,1360
88
- microsoft_agents/hosting/core/storage/memory_storage.py,sha256=5AZ2QQ3TagVCHCKp0GEVAIuDswDGHgbgnUZgS9YbPAI,2448
89
- microsoft_agents/hosting/core/storage/storage.py,sha256=bt93jItMQKC9NJlcmxPtcE67MvnibolcFwvV1LFwliI,3322
97
+ microsoft_agents/hosting/core/storage/memory_storage.py,sha256=VUKFWc6aAfUzwfH_hiPvFsbESGY78qCCTkBnpoNZUe4,2447
98
+ microsoft_agents/hosting/core/storage/storage.py,sha256=zHnQNaLYgzjLP_XWfL3e-Dlw7eQbNgXUYbnT_26rYvM,3321
90
99
  microsoft_agents/hosting/core/storage/store_item.py,sha256=rjtzB5yufsKuY1O5PjCqWHjjmO6UiORwkzpwbsaxp_4,371
91
100
  microsoft_agents/hosting/core/storage/transcript_file_store.py,sha256=eJdcU6BgMbvFYunWul2CZURH762HmUr11iUN7NgvZek,10045
92
101
  microsoft_agents/hosting/core/storage/transcript_info.py,sha256=5VN32j99tshChAffvuZ6D3GH3ABCZsQGHC_bYDAwFOk,328
93
- microsoft_agents/hosting/core/storage/transcript_logger.py,sha256=_atDk3CJ05fIVMhlWGNa91IiM9bGLmOhasFko8Lxjhk,8237
102
+ microsoft_agents/hosting/core/storage/transcript_logger.py,sha256=rgFeghzyRd9M3IUtI9n5y_rdAOL9s6qgGVD4OTOjkEg,8236
94
103
  microsoft_agents/hosting/core/storage/transcript_memory_store.py,sha256=v1Ud9LSs8m5c9_Fa8i49SuAjw80dX1hDciqbRduDEOE,6444
95
104
  microsoft_agents/hosting/core/storage/transcript_store.py,sha256=ka74o0WvI5GhMZcFqSxVdamBhGzZcDZe6VNkG-sMy74,1944
96
- microsoft_agents_hosting_core-0.6.0.dev17.dist-info/licenses/LICENSE,sha256=ws_MuBL-SCEBqPBFl9_FqZkaaydIJmxHrJG2parhU4M,1141
97
- microsoft_agents_hosting_core-0.6.0.dev17.dist-info/METADATA,sha256=-icqUPeN60K-HvbDoTVT3ptHvkRHK4KqqKA704WjePY,9244
98
- microsoft_agents_hosting_core-0.6.0.dev17.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
99
- microsoft_agents_hosting_core-0.6.0.dev17.dist-info/top_level.txt,sha256=lWKcT4v6fTA_NgsuHdNvuMjSrkiBMXohn64ApY7Xi8A,17
100
- microsoft_agents_hosting_core-0.6.0.dev17.dist-info/RECORD,,
105
+ microsoft_agents_hosting_core-0.7.0.dist-info/licenses/LICENSE,sha256=ws_MuBL-SCEBqPBFl9_FqZkaaydIJmxHrJG2parhU4M,1141
106
+ microsoft_agents_hosting_core-0.7.0.dist-info/METADATA,sha256=UpC6quDud6QCw5ctSuP1-WGmAbPNflUmAuSPobqrIz0,9809
107
+ microsoft_agents_hosting_core-0.7.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
108
+ microsoft_agents_hosting_core-0.7.0.dist-info/top_level.txt,sha256=lWKcT4v6fTA_NgsuHdNvuMjSrkiBMXohn64ApY7Xi8A,17
109
+ microsoft_agents_hosting_core-0.7.0.dist-info/RECORD,,