agentscope-runtime 1.0.2__py3-none-any.whl → 1.0.3__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. agentscope_runtime/cli/commands/deploy.py +12 -0
  2. agentscope_runtime/common/collections/redis_mapping.py +4 -1
  3. agentscope_runtime/engine/app/agent_app.py +48 -5
  4. agentscope_runtime/engine/deployers/adapter/a2a/__init__.py +56 -1
  5. agentscope_runtime/engine/deployers/adapter/a2a/a2a_protocol_adapter.py +449 -41
  6. agentscope_runtime/engine/deployers/adapter/a2a/a2a_registry.py +273 -0
  7. agentscope_runtime/engine/deployers/adapter/a2a/nacos_a2a_registry.py +640 -0
  8. agentscope_runtime/engine/deployers/kubernetes_deployer.py +3 -0
  9. agentscope_runtime/engine/deployers/utils/docker_image_utils/dockerfile_generator.py +8 -2
  10. agentscope_runtime/engine/deployers/utils/docker_image_utils/image_factory.py +5 -0
  11. agentscope_runtime/engine/deployers/utils/net_utils.py +65 -0
  12. agentscope_runtime/engine/runner.py +5 -3
  13. agentscope_runtime/engine/schemas/exception.py +24 -0
  14. agentscope_runtime/engine/services/agent_state/redis_state_service.py +61 -8
  15. agentscope_runtime/engine/services/agent_state/state_service_factory.py +2 -5
  16. agentscope_runtime/engine/services/memory/redis_memory_service.py +129 -25
  17. agentscope_runtime/engine/services/session_history/redis_session_history_service.py +160 -34
  18. agentscope_runtime/sandbox/build.py +50 -57
  19. agentscope_runtime/version.py +1 -1
  20. {agentscope_runtime-1.0.2.dist-info → agentscope_runtime-1.0.3.dist-info}/METADATA +9 -3
  21. {agentscope_runtime-1.0.2.dist-info → agentscope_runtime-1.0.3.dist-info}/RECORD +25 -22
  22. {agentscope_runtime-1.0.2.dist-info → agentscope_runtime-1.0.3.dist-info}/WHEEL +0 -0
  23. {agentscope_runtime-1.0.2.dist-info → agentscope_runtime-1.0.3.dist-info}/entry_points.txt +0 -0
  24. {agentscope_runtime-1.0.2.dist-info → agentscope_runtime-1.0.3.dist-info}/licenses/LICENSE +0 -0
  25. {agentscope_runtime-1.0.2.dist-info → agentscope_runtime-1.0.3.dist-info}/top_level.txt +0 -0
@@ -15,23 +15,73 @@ class RedisSessionHistoryService(SessionHistoryService):
15
15
  self,
16
16
  redis_url: str = "redis://localhost:6379/0",
17
17
  redis_client: Optional[aioredis.Redis] = None,
18
+ socket_timeout: Optional[float] = 5.0,
19
+ socket_connect_timeout: Optional[float] = 5.0,
20
+ max_connections: Optional[int] = 50,
21
+ retry_on_timeout: bool = True,
22
+ ttl_seconds: Optional[int] = 3600, # 1 hour in seconds
23
+ max_messages_per_session: Optional[int] = None,
24
+ health_check_interval: Optional[float] = 30.0,
25
+ socket_keepalive: bool = True,
18
26
  ):
27
+ """
28
+ Initialize RedisSessionHistoryService.
29
+
30
+ Args:
31
+ redis_url: Redis connection URL
32
+ redis_client: Optional pre-configured Redis client
33
+ socket_timeout: Socket timeout in seconds (default: 5.0)
34
+ socket_connect_timeout: Socket connect timeout in seconds
35
+ (default: 5.0)
36
+ max_connections: Maximum number of connections in the pool
37
+ (default: 50)
38
+ retry_on_timeout: Whether to retry on timeout (default: True)
39
+ ttl_seconds: Time-to-live in seconds for session data.
40
+ If None, data never expires (default: 3600, i.e., 1 hour)
41
+ max_messages_per_session: Maximum number of messages per session.
42
+ If None, no limit (default: None)
43
+ health_check_interval: Interval in seconds for health checks on
44
+ idle connections (default: 30.0).
45
+ Connections idle longer than this will be checked before reuse.
46
+ Set to 0 to disable.
47
+ socket_keepalive: Enable TCP keepalive to prevent
48
+ silent disconnections (default: True)
49
+ """
19
50
  self._redis_url = redis_url
20
51
  self._redis = redis_client
52
+ self._socket_timeout = socket_timeout
53
+ self._socket_connect_timeout = socket_connect_timeout
54
+ self._max_connections = max_connections
55
+ self._retry_on_timeout = retry_on_timeout
56
+ self._ttl_seconds = ttl_seconds
57
+ self._max_messages_per_session = max_messages_per_session
58
+ self._health_check_interval = health_check_interval
59
+ self._socket_keepalive = socket_keepalive
21
60
 
22
61
  async def start(self):
62
+ """Starts the Redis connection with proper timeout and connection
63
+ pool settings."""
23
64
  if self._redis is None:
24
65
  self._redis = aioredis.from_url(
25
66
  self._redis_url,
26
67
  decode_responses=True,
68
+ socket_timeout=self._socket_timeout,
69
+ socket_connect_timeout=self._socket_connect_timeout,
70
+ max_connections=self._max_connections,
71
+ retry_on_timeout=self._retry_on_timeout,
72
+ health_check_interval=self._health_check_interval,
73
+ socket_keepalive=self._socket_keepalive,
27
74
  )
28
75
 
29
76
  async def stop(self):
30
77
  if self._redis:
31
- await self._redis.close()
78
+ await self._redis.aclose()
32
79
  self._redis = None
33
80
 
34
81
  async def health(self) -> bool:
82
+ """Checks the health of the service."""
83
+ if not self._redis:
84
+ return False
35
85
  try:
36
86
  pong = await self._redis.ping()
37
87
  return pong is True or pong == "PONG"
@@ -41,8 +91,9 @@ class RedisSessionHistoryService(SessionHistoryService):
41
91
  def _session_key(self, user_id: str, session_id: str):
42
92
  return f"session:{user_id}:{session_id}"
43
93
 
44
- def _index_key(self, user_id: str):
45
- return f"session_index:{user_id}"
94
+ def _session_pattern(self, user_id: str):
95
+ """Generate the pattern for scanning session keys for a user."""
96
+ return f"session:{user_id}:*"
46
97
 
47
98
  def _session_to_json(self, session: Session) -> str:
48
99
  return session.model_dump_json()
@@ -55,6 +106,8 @@ class RedisSessionHistoryService(SessionHistoryService):
55
106
  user_id: str,
56
107
  session_id: Optional[str] = None,
57
108
  ) -> Session:
109
+ if not self._redis:
110
+ raise RuntimeError("Redis connection is not available")
58
111
  if session_id and session_id.strip():
59
112
  sid = session_id.strip()
60
113
  else:
@@ -64,7 +117,11 @@ class RedisSessionHistoryService(SessionHistoryService):
64
117
  key = self._session_key(user_id, sid)
65
118
 
66
119
  await self._redis.set(key, self._session_to_json(session))
67
- await self._redis.sadd(self._index_key(user_id), sid)
120
+
121
+ # Set TTL for the session key if configured
122
+ if self._ttl_seconds is not None:
123
+ await self._redis.expire(key, self._ttl_seconds)
124
+
68
125
  return session
69
126
 
70
127
  async def get_session(
@@ -72,31 +129,63 @@ class RedisSessionHistoryService(SessionHistoryService):
72
129
  user_id: str,
73
130
  session_id: str,
74
131
  ) -> Optional[Session]:
132
+ if not self._redis:
133
+ raise RuntimeError("Redis connection is not available")
75
134
  key = self._session_key(user_id, session_id)
76
135
  session_json = await self._redis.get(key)
77
136
  if session_json is None:
78
- session = Session(id=session_id, user_id=user_id)
79
- await self._redis.set(key, self._session_to_json(session))
80
- await self._redis.sadd(self._index_key(user_id), session_id)
81
- return session
82
- return self._session_from_json(session_json)
137
+ return None
138
+
139
+ try:
140
+ session = self._session_from_json(session_json)
141
+ except Exception:
142
+ # Return None for corrupted session data
143
+ return None
144
+
145
+ # Refresh TTL when accessing the session
146
+ if self._ttl_seconds is not None:
147
+ await self._redis.expire(key, self._ttl_seconds)
148
+
149
+ return session
83
150
 
84
151
  async def delete_session(self, user_id: str, session_id: str):
152
+ if not self._redis:
153
+ raise RuntimeError("Redis connection is not available")
85
154
  key = self._session_key(user_id, session_id)
86
155
  await self._redis.delete(key)
87
- await self._redis.srem(self._index_key(user_id), session_id)
88
156
 
89
157
  async def list_sessions(self, user_id: str) -> list[Session]:
90
- idx_key = self._index_key(user_id)
91
- session_ids = await self._redis.smembers(idx_key)
158
+ """List all sessions for a user by scanning session keys.
159
+
160
+ Uses SCAN to find all session:{user_id}:* keys. Expired sessions
161
+ naturally disappear as their keys expire, avoiding stale entries.
162
+ """
163
+ if not self._redis:
164
+ raise RuntimeError("Redis connection is not available")
165
+ pattern = self._session_pattern(user_id)
92
166
  sessions = []
93
- for sid in session_ids:
94
- key = self._session_key(user_id, sid)
95
- session_json = await self._redis.get(key)
96
- if session_json:
97
- session = self._session_from_json(session_json)
98
- session.messages = []
99
- sessions.append(session)
167
+ cursor = 0
168
+
169
+ while True:
170
+ cursor, keys = await self._redis.scan(
171
+ cursor,
172
+ match=pattern,
173
+ count=100,
174
+ )
175
+ for key in keys:
176
+ session_json = await self._redis.get(key)
177
+ if session_json:
178
+ try:
179
+ session = self._session_from_json(session_json)
180
+ session.messages = []
181
+ sessions.append(session)
182
+ except Exception:
183
+ # Skip corrupted session data
184
+ continue
185
+
186
+ if cursor == 0:
187
+ break
188
+
100
189
  return sessions
101
190
 
102
191
  async def append_message(
@@ -109,6 +198,8 @@ class RedisSessionHistoryService(SessionHistoryService):
109
198
  List[Dict[str, Any]],
110
199
  ],
111
200
  ):
201
+ if not self._redis:
202
+ raise RuntimeError("Redis connection is not available")
112
203
  if not isinstance(message, list):
113
204
  message = [message]
114
205
  norm_message = []
@@ -125,21 +216,50 @@ class RedisSessionHistoryService(SessionHistoryService):
125
216
  key = self._session_key(user_id, session_id)
126
217
 
127
218
  session_json = await self._redis.get(key)
128
- if session_json:
129
- stored_session = self._session_from_json(session_json)
130
- stored_session.messages.extend(norm_message)
131
- await self._redis.set(key, self._session_to_json(stored_session))
132
- await self._redis.sadd(self._index_key(user_id), session_id)
133
- else:
134
- print(
135
- f"Warning: Session {session.id} not found in storage for "
136
- f"append_message.",
219
+ if session_json is None:
220
+ # Session expired or not found, treat as a new session
221
+ # Create a new session with the current messages
222
+ stored_session = Session(
223
+ id=session_id,
224
+ user_id=user_id,
225
+ messages=norm_message.copy(),
137
226
  )
227
+ else:
228
+ try:
229
+ stored_session = self._session_from_json(session_json)
230
+ stored_session.messages.extend(norm_message)
231
+ except Exception:
232
+ # Session data corrupted, treat as a new session
233
+ stored_session = Session(
234
+ id=session_id,
235
+ user_id=user_id,
236
+ messages=norm_message.copy(),
237
+ )
238
+
239
+ # Limit the number of messages per session to prevent memory issues
240
+ if self._max_messages_per_session is not None:
241
+ if len(stored_session.messages) > self._max_messages_per_session:
242
+ # Keep only the most recent messages
243
+ stored_session.messages = stored_session.messages[
244
+ -self._max_messages_per_session :
245
+ ]
246
+ # Keep the in-memory session in sync with the stored session
247
+ session.messages = session.messages[
248
+ -self._max_messages_per_session :
249
+ ]
250
+
251
+ await self._redis.set(key, self._session_to_json(stored_session))
252
+
253
+ # Set TTL for the session key if configured
254
+ if self._ttl_seconds is not None:
255
+ await self._redis.expire(key, self._ttl_seconds)
138
256
 
139
257
  async def delete_user_sessions(self, user_id: str) -> None:
140
258
  """
141
259
  Deletes all session history data for a specific user.
142
260
 
261
+ Uses SCAN to find all session keys for the user and deletes them.
262
+
143
263
  Args:
144
264
  user_id (str): The ID of the user whose session history data should
145
265
  be deleted
@@ -147,11 +267,17 @@ class RedisSessionHistoryService(SessionHistoryService):
147
267
  if not self._redis:
148
268
  raise RuntimeError("Redis connection is not available")
149
269
 
150
- index_key = self._index_key(user_id)
151
- session_ids = await self._redis.smembers(index_key)
270
+ pattern = self._session_pattern(user_id)
271
+ cursor = 0
152
272
 
153
- for session_id in session_ids:
154
- key = self._session_key(user_id, session_id)
155
- await self._redis.delete(key)
273
+ while True:
274
+ cursor, keys = await self._redis.scan(
275
+ cursor,
276
+ match=pattern,
277
+ count=100,
278
+ )
279
+ if keys:
280
+ await self._redis.delete(*keys)
156
281
 
157
- await self._redis.delete(index_key)
282
+ if cursor == 0:
283
+ break
@@ -70,9 +70,7 @@ def build_image(
70
70
  f" {DOCKER_PLATFORMS}"
71
71
  )
72
72
 
73
- platform_tag = ""
74
- if platform_choice == "linux/arm64":
75
- platform_tag = "-arm64"
73
+ auto_build = os.getenv("AUTO_BUILD", "false").lower() == "true"
76
74
 
77
75
  buildx_enable = platform_choice != get_platform()
78
76
 
@@ -93,7 +91,7 @@ def build_image(
93
91
  secret_token = "secret_token123"
94
92
 
95
93
  # Add platform tag
96
- image_name = SandboxRegistry.get_image_by_type(build_type) + platform_tag
94
+ image_name = SandboxRegistry.get_image_by_type(build_type)
97
95
 
98
96
  logger.info(f"Building Docker image {image_name}...")
99
97
 
@@ -108,10 +106,13 @@ def build_image(
108
106
 
109
107
  # Check if the image already exists
110
108
  if image_name in images or f"{image_name}dev" in images:
111
- choice = input(
112
- f"Image {image_name}dev|{image_name} already exists. Do "
113
- f"you want to overwrite it? (y/N): ",
114
- )
109
+ if auto_build:
110
+ choice = "y"
111
+ else:
112
+ choice = input(
113
+ f"Image {image_name}dev|{image_name} already exists. Do "
114
+ f"you want to overwrite it? (y/N): ",
115
+ )
115
116
  if choice.lower() != "y":
116
117
  logger.info("Exiting without overwriting the existing image.")
117
118
  return
@@ -156,34 +157,25 @@ def build_image(
156
157
 
157
158
  logger.info(f"Docker image {image_name}dev built successfully.")
158
159
 
159
- logger.info(f"Start to build image {image_name}.")
160
-
161
- # Run the container with port mapping and environment variable
162
- free_port = find_free_port(8080, 8090)
163
-
164
- if not buildx_enable:
165
- result = subprocess.run(
166
- [
167
- "docker",
168
- "run",
169
- "-d",
170
- "-p",
171
- f"{free_port}:80",
172
- "-e",
173
- f"SECRET_TOKEN={secret_token}",
174
- f"{image_name}dev",
175
- ],
176
- capture_output=True,
177
- text=True,
178
- check=False,
160
+ if buildx_enable:
161
+ logger.warning(
162
+ "Cross-platform build detected; "
163
+ "skipping health checks and tagging the final image directly.",
179
164
  )
165
+ subprocess.run(
166
+ ["docker", "tag", f"{image_name}dev", image_name],
167
+ check=True,
168
+ )
169
+ logger.info(f"Docker image {image_name} tagged successfully.")
180
170
  else:
171
+ logger.info(f"Start to build image {image_name}.")
172
+
173
+ # Run the container with port mapping and environment variable
174
+ free_port = find_free_port(8080, 8090)
181
175
  result = subprocess.run(
182
176
  [
183
177
  "docker",
184
178
  "run",
185
- "--platform",
186
- platform_choice,
187
179
  "-d",
188
180
  "-p",
189
181
  f"{free_port}:80",
@@ -195,34 +187,35 @@ def build_image(
195
187
  text=True,
196
188
  check=False,
197
189
  )
198
-
199
- container_id = result.stdout.strip()
200
- logger.info(f"Running container {container_id} on port {free_port}")
201
-
202
- # Check health endpoints
203
- fastapi_health_url = f"http://localhost:{free_port}/fastapi/healthz"
204
-
205
- # Check health for FASTAPI
206
- fastapi_healthy = check_health(fastapi_health_url, secret_token)
207
-
208
- if fastapi_healthy:
209
- logger.info("Health checks passed.")
210
- subprocess.run(
211
- ["docker", "commit", container_id, f"{image_name}"],
212
- check=True,
213
- )
214
- logger.info(
215
- f"Docker image {image_name} committed successfully.",
216
- )
217
- subprocess.run(["docker", "stop", container_id], check=True)
218
- subprocess.run(["docker", "rm", container_id], check=True)
190
+ container_id = result.stdout.strip()
191
+ logger.info(f"Running container {container_id} on port {free_port}")
192
+
193
+ # Check health endpoints
194
+ fastapi_health_url = f"http://localhost:{free_port}/fastapi/healthz"
195
+ fastapi_healthy = check_health(fastapi_health_url, secret_token)
196
+
197
+ if fastapi_healthy:
198
+ logger.info("Health checks passed.")
199
+ subprocess.run(
200
+ ["docker", "commit", container_id, f"{image_name}"],
201
+ check=True,
202
+ )
203
+ logger.info(
204
+ f"Docker image {image_name} committed successfully.",
205
+ )
206
+ subprocess.run(["docker", "stop", container_id], check=True)
207
+ subprocess.run(["docker", "rm", container_id], check=True)
208
+ else:
209
+ logger.error("Health checks failed.")
210
+ subprocess.run(["docker", "stop", container_id], check=True)
211
+
212
+ if auto_build:
213
+ choice = "y"
219
214
  else:
220
- logger.error("Health checks failed.")
221
- subprocess.run(["docker", "stop", container_id], check=True)
222
-
223
- choice = input(
224
- f"Do you want to delete the dev image {image_name}dev? (" f"y/N): ",
225
- )
215
+ choice = input(
216
+ f"Do you want to delete the dev image {image_name}dev? ("
217
+ f"y/N): ",
218
+ )
226
219
  if choice.lower() == "y":
227
220
  subprocess.run(
228
221
  ["docker", "rmi", "-f", f"{image_name}dev"],
@@ -1,2 +1,2 @@
1
1
  # -*- coding: utf-8 -*-
2
- __version__ = "v1.0.2"
2
+ __version__ = "v1.0.3"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentscope-runtime
3
- Version: 1.0.2
3
+ Version: 1.0.3
4
4
  Summary: A production-ready runtime framework for agent applications, providing secure sandboxed execution environments and scalable deployment solutions with multi-framework support.
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -51,7 +51,7 @@ Requires-Dist: alibabacloud_tea_openapi>=0.4.0; extra == "ext"
51
51
  Requires-Dist: alibabacloud-fc20230330>=4.4.0; extra == "ext"
52
52
  Requires-Dist: tablestore-for-agent-memory>=1.1.0; extra == "ext"
53
53
  Requires-Dist: langchain-community>=0.3.27; extra == "ext"
54
- Requires-Dist: wuying-agentbay-sdk>=0.5.0; extra == "ext"
54
+ Requires-Dist: wuying-agentbay-sdk<0.13.0,>=0.5.0; extra == "ext"
55
55
  Requires-Dist: alipay-sdk-python; extra == "ext"
56
56
  Requires-Dist: cryptography; extra == "ext"
57
57
  Requires-Dist: gunicorn>=20.0.0; extra == "ext"
@@ -66,6 +66,7 @@ Requires-Dist: wheel; extra == "ext"
66
66
  Requires-Dist: alibabacloud-credentials; extra == "ext"
67
67
  Requires-Dist: PyYAML; extra == "ext"
68
68
  Requires-Dist: agno>=2.3.8; extra == "ext"
69
+ Requires-Dist: nacos-sdk-python>=3.0.0; extra == "ext"
69
70
  Dynamic: license-file
70
71
 
71
72
  <div align="center">
@@ -652,7 +653,7 @@ limitations under the License.
652
653
 
653
654
  ## Contributors ✨
654
655
  <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
655
- [![All Contributors](https://img.shields.io/badge/all_contributors-26-orange.svg?style=flat-square)](#contributors-)
656
+ [![All Contributors](https://img.shields.io/badge/all_contributors-29-orange.svg?style=flat-square)](#contributors-)
656
657
  <!-- ALL-CONTRIBUTORS-BADGE:END -->
657
658
 
658
659
  Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/emoji-key/)):
@@ -695,6 +696,11 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/e
695
696
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/k-farruh"><img src="https://avatars.githubusercontent.com/u/33511681?v=4?s=100" width="100px;" alt="Farruh Kushnazarov"/><br /><sub><b>Farruh Kushnazarov</b></sub></a><br /><a href="https://github.com/agentscope-ai/agentscope-runtime/commits?author=k-farruh" title="Documentation">📖</a></td>
696
697
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/fengxsong"><img src="https://avatars.githubusercontent.com/u/7008971?v=4?s=100" width="100px;" alt="fengxsong"/><br /><sub><b>fengxsong</b></sub></a><br /><a href="https://github.com/agentscope-ai/agentscope-runtime/issues?q=author%3Afengxsong" title="Bug reports">🐛</a></td>
697
698
  <td align="center" valign="top" width="14.28%"><a href="https://m4n5ter.github.io"><img src="https://avatars.githubusercontent.com/u/68144809?v=4?s=100" width="100px;" alt="Wang"/><br /><sub><b>Wang</b></sub></a><br /><a href="https://github.com/agentscope-ai/agentscope-runtime/commits?author=M4n5ter" title="Code">💻</a> <a href="https://github.com/agentscope-ai/agentscope-runtime/issues?q=author%3AM4n5ter" title="Bug reports">🐛</a></td>
699
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/qiacheng7"><img src="https://avatars.githubusercontent.com/u/223075252?v=4?s=100" width="100px;" alt="qiacheng7"/><br /><sub><b>qiacheng7</b></sub></a><br /><a href="https://github.com/agentscope-ai/agentscope-runtime/commits?author=qiacheng7" title="Code">💻</a> <a href="https://github.com/agentscope-ai/agentscope-runtime/commits?author=qiacheng7" title="Documentation">📖</a></td>
700
+ <td align="center" valign="top" width="14.28%"><a href="https://xieyxclack.github.io/"><img src="https://avatars.githubusercontent.com/u/31954383?v=4?s=100" width="100px;" alt="Yuexiang XIE"/><br /><sub><b>Yuexiang XIE</b></sub></a><br /><a href="https://github.com/agentscope-ai/agentscope-runtime/pulls?q=is%3Apr+reviewed-by%3Axieyxclack" title="Reviewed Pull Requests">👀</a></td>
701
+ </tr>
702
+ <tr>
703
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/RTsama"><img src="https://avatars.githubusercontent.com/u/100779257?v=4?s=100" width="100px;" alt="RTsama"/><br /><sub><b>RTsama</b></sub></a><br /><a href="https://github.com/agentscope-ai/agentscope-runtime/issues?q=author%3ARTsama" title="Bug reports">🐛</a> <a href="https://github.com/agentscope-ai/agentscope-runtime/commits?author=RTsama" title="Code">💻</a></td>
698
704
  </tr>
699
705
  </tbody>
700
706
  <tfoot>
@@ -1,5 +1,5 @@
1
1
  agentscope_runtime/__init__.py,sha256=LMAUeUpPo2qzqh3zyZ-JJwc8GrsiT9b-yNhQMxlKmfE,84
2
- agentscope_runtime/version.py,sha256=1WRwjmkMrY3KYF9w0Q4ng-38_Fa1JzKPFaY6gFkzDgY,47
2
+ agentscope_runtime/version.py,sha256=_YVKGzBagBZCp2pKuECYqArJfTFSbGBHotZbFzO0D0E,47
3
3
  agentscope_runtime/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  agentscope_runtime/adapters/agentscope/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  agentscope_runtime/adapters/agentscope/message.py,sha256=Bhb3V6TOv8s9uAhuZSl7uN728bFvnDzRYqejs0u_bNU,23057
@@ -26,7 +26,7 @@ agentscope_runtime/cli/__init__.py,sha256=aAc30JEk1UNLLmxcQeTiNMJXbFczjym4Oses4U
26
26
  agentscope_runtime/cli/cli.py,sha256=_STqVMgRSaOa0GhWQDSMYEDY3r3yAHmEXbfk1Zfjb6s,1431
27
27
  agentscope_runtime/cli/commands/__init__.py,sha256=MylJNzS3HeGgqekkD0pYg5MALiK_GK7pDArFXZDF9pk,59
28
28
  agentscope_runtime/cli/commands/chat.py,sha256=Ttm62VpgSEe_GMLWqfewGfnt33ZZNlZ0nITUn3IBWEE,29776
29
- agentscope_runtime/cli/commands/deploy.py,sha256=AIN7c1XKMiKRX4DR02W6kZcf1M4ccNMrYzfTzs-zvxs,32408
29
+ agentscope_runtime/cli/commands/deploy.py,sha256=AvcaI50-7NN0tRIlJ-pXWCbNAbYeua88AIvV4aEX2-E,32817
30
30
  agentscope_runtime/cli/commands/invoke.py,sha256=4AYswJ7ErPAlX-gWGhFRUBiwOXeuPl0fa_Dha6edqGY,1381
31
31
  agentscope_runtime/cli/commands/list_cmd.py,sha256=SZTx58e323u_agtZJJfbzgfD1srk_qW0R-uWKd4Ifiw,2581
32
32
  agentscope_runtime/cli/commands/run.py,sha256=L8F8Ph0RFA_QPcF7flrdEWHJK8nYuFoTtUDH4qdg5Xo,5139
@@ -48,7 +48,7 @@ agentscope_runtime/common/collections/base_set.py,sha256=RasZxcXDkvdu89KhZc8Z_4T
48
48
  agentscope_runtime/common/collections/in_memory_mapping.py,sha256=7qU-3C-CX5rPuDjWUH9lnH6yvKIwCfnRwMm2vXy1Olo,645
49
49
  agentscope_runtime/common/collections/in_memory_queue.py,sha256=wTbmT77DI0KLYAgFbmcMl7sr5aB6WjyW_USQXqF9gJ0,612
50
50
  agentscope_runtime/common/collections/in_memory_set.py,sha256=7qek5ZB3f_mdNJ4PUPoYv1yujHybdMjgpCYlFMosyMs,602
51
- agentscope_runtime/common/collections/redis_mapping.py,sha256=a608hRTfDWWTFq6nBPBlUNE0mHsjVJSP4yhfX99zA3E,1340
51
+ agentscope_runtime/common/collections/redis_mapping.py,sha256=bi2ku7SO9T6Z9jSUS4IOqJVVFZIG5fVPgmWKYcdi74g,1452
52
52
  agentscope_runtime/common/collections/redis_queue.py,sha256=4MCIDs7SgSfdngTvqxWWv2H-8XTpFQOmXG4-fxN20ew,792
53
53
  agentscope_runtime/common/collections/redis_set.py,sha256=eRCnMXc4hcDF2qyxFiNnrn2o4QjvtgDb6rEcblmV1o8,654
54
54
  agentscope_runtime/common/container_clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -61,24 +61,26 @@ agentscope_runtime/common/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm
61
61
  agentscope_runtime/common/utils/lazy_loader.py,sha256=YbhbKNJrm1d3adCZ6gM6ljZE0QCCcpt4yGDCjNWtkJ4,1937
62
62
  agentscope_runtime/engine/__init__.py,sha256=lJV0pGExSfUmyW43MNdTG06jOTNnMrLHSgBS2AhYvyQ,656
63
63
  agentscope_runtime/engine/constant.py,sha256=KOXujjNLky8Jcm8D_gPhQLsQdzPcU4RfrQzAvJUCrpU,128
64
- agentscope_runtime/engine/runner.py,sha256=94fNmQGl7m0s-Glc5iz9FA2gmUQCMoalOZB2SPeeDA4,9929
64
+ agentscope_runtime/engine/runner.py,sha256=kf682awGWCKhEXOq9-S4dxKiulsYPmg4UJkiSpuf5Jg,9967
65
65
  agentscope_runtime/engine/app/__init__.py,sha256=8asUQNRTjIEyoWjl955mn3gLkcYna8-CK4A810Eol0Y,87
66
- agentscope_runtime/engine/app/agent_app.py,sha256=gsVx5TzbgWV8M97HvgfOHN_S8Q-bT6f0ggYqQNVztMU,10715
66
+ agentscope_runtime/engine/app/agent_app.py,sha256=Gc28kxTFp8dF0PapJbBX4hGethiWO2vIPbS5WL3fjXc,12875
67
67
  agentscope_runtime/engine/app/base_app.py,sha256=ILLp4GUVslRtLxSjCTrpTX6f1E5QhM9oXefxy4sA28I,2290
68
68
  agentscope_runtime/engine/app/celery_mixin.py,sha256=fDPc4loHieUXvgJYRYWAv-3qOSssdbfKH9Fiu-ShrIs,2929
69
69
  agentscope_runtime/engine/deployers/__init__.py,sha256=goBDVczK_iEzSQ7H4comkFCr6vEwuTXCo87yktRj8Vg,555
70
70
  agentscope_runtime/engine/deployers/agentrun_deployer.py,sha256=hNYhTPIBkXvCDvvuKdMzFmESsAyVFtBsq_NPD-z-zMo,106117
71
71
  agentscope_runtime/engine/deployers/base.py,sha256=X4Vdu1x_ln0GK3aB_SSMaFoWDRYjh9nQT-mPOxWwkXY,1393
72
72
  agentscope_runtime/engine/deployers/cli_fc_deploy.py,sha256=OZ6vn6t3FEKQJgbxADvPM5S90WP7OJGdBEBc-te_GiE,6063
73
- agentscope_runtime/engine/deployers/kubernetes_deployer.py,sha256=dKAx5HuImlbI-0t7SJwOsQxcAnE3UelUOJQ1nEmRL78,13390
73
+ agentscope_runtime/engine/deployers/kubernetes_deployer.py,sha256=5sc2cMvB19zERTpphhyDKFohO9-YHtucNeGSlfbUICk,13548
74
74
  agentscope_runtime/engine/deployers/local_deployer.py,sha256=mmEk5kSRqQW5Z32Gm3PWNphCu2QXisAoejWmDI5XBVk,22485
75
75
  agentscope_runtime/engine/deployers/modelstudio_deployer.py,sha256=Pyb4XubHFUm78hm3NbUBC0FWm91-KWuzI4FlaqSJfiQ,34912
76
76
  agentscope_runtime/engine/deployers/adapter/__init__.py,sha256=11R2POJNbfH5WE3hntYvhUOm_bq-LB-EaUGfbPwCHuQ,66
77
77
  agentscope_runtime/engine/deployers/adapter/protocol_adapter.py,sha256=OpLfBWiFY_xC0uG53UYSeQuUnw7vZzvNnm5w6QFr9_w,737
78
- agentscope_runtime/engine/deployers/adapter/a2a/__init__.py,sha256=3D6TxH-seVfR7_SqYttNSkGkZv3o_TS9R5XqUkVxed4,83
78
+ agentscope_runtime/engine/deployers/adapter/a2a/__init__.py,sha256=KwY0UPs0VAoqjxWOr6NiwVtTfl-Vr5qtUYxeqQ0RdeU,1953
79
79
  agentscope_runtime/engine/deployers/adapter/a2a/a2a_adapter_utils.py,sha256=7nuyfkN7rR8PjpWPKh2acsd9VztbtcZOQdzSp4dWVUY,10956
80
80
  agentscope_runtime/engine/deployers/adapter/a2a/a2a_agent_adapter.py,sha256=h7wwl2CiKcGUxhKkrWN7DpaIpTltoRm-6ETS_fJHmEk,2147
81
- agentscope_runtime/engine/deployers/adapter/a2a/a2a_protocol_adapter.py,sha256=5lXFOJCH7gjLThNQBrXU7Q9BuByOURtmYI9LZhc-zNw,2525
81
+ agentscope_runtime/engine/deployers/adapter/a2a/a2a_protocol_adapter.py,sha256=aLBfigx4qe3eqSEQNqKbZAN6h3KAvVwp6JrNO6_BjEo,16307
82
+ agentscope_runtime/engine/deployers/adapter/a2a/a2a_registry.py,sha256=JfynAUw2FIAGDneMLZUKsCJLFAuNP_TFLv-oUCnSSDE,8763
83
+ agentscope_runtime/engine/deployers/adapter/a2a/nacos_a2a_registry.py,sha256=XDzs_4tOdJwFototk7cF_J7IGK_su0JUikMTupBYJUk,23848
82
84
  agentscope_runtime/engine/deployers/adapter/responses/__init__.py,sha256=0f1SVBagTz0Kex8kX9_QapqmBPJUHcRejnV4P39PaBc,93
83
85
  agentscope_runtime/engine/deployers/adapter/responses/response_api_adapter_utils.py,sha256=MmvLkHDbb1cQMS2kQKnS3FT_6DUOQRdL2vb_HMA6eFo,98448
84
86
  agentscope_runtime/engine/deployers/adapter/responses/response_api_agent_adapter.py,sha256=B3F1GOvu_HFFdH8gnKJtVlr8u34jjRV3iKMgVz1XHVY,1593
@@ -92,12 +94,13 @@ agentscope_runtime/engine/deployers/utils/build_cache.py,sha256=VNbUIZQ_-s9HZufn
92
94
  agentscope_runtime/engine/deployers/utils/deployment_modes.py,sha256=vr2UzA1bzAAzxjToj9bVGzRWm47Za6w6cDI0nF1NMD0,448
93
95
  agentscope_runtime/engine/deployers/utils/detached_app.py,sha256=-6wTiqMYssKYDGduRMHeehuqvHigz9qoUMj-pereVpU,18707
94
96
  agentscope_runtime/engine/deployers/utils/k8s_utils.py,sha256=lgVYTewDBhtSwigEJ3Fok39wwrXPTuPmonyaB6mmaOo,7381
97
+ agentscope_runtime/engine/deployers/utils/net_utils.py,sha256=X4zJw_BIhFPXqeoNKp7--V6gzjjR8InCue1vMU2SBQg,1721
95
98
  agentscope_runtime/engine/deployers/utils/package.py,sha256=L7W5j6iAyVFYLOsotCbagnA_otfktQ6Y9DF_xG7fwc4,22970
96
99
  agentscope_runtime/engine/deployers/utils/wheel_packager.py,sha256=GFMvLnLoQhs0joGfDz2x60Dy9WTMbpSNYP7XQgYP__E,14475
97
100
  agentscope_runtime/engine/deployers/utils/docker_image_utils/__init__.py,sha256=DQlspd1dFOTV7GO82Jel5APuUqYkbjmpT72K1vb5SVw,235
98
101
  agentscope_runtime/engine/deployers/utils/docker_image_utils/docker_image_builder.py,sha256=5hnjfauzlbQf3j7v8EaPXCn6HsxkTB4NmbkPIBruF3Q,14179
99
- agentscope_runtime/engine/deployers/utils/docker_image_utils/dockerfile_generator.py,sha256=at2kQDdZBqzChGnFLEHpyqyba3LxPQlz5A1Rd4Fu9pM,7742
100
- agentscope_runtime/engine/deployers/utils/docker_image_utils/image_factory.py,sha256=Ij-QZA6dIoHEgfsZU2x2Y6rVxXj6yYYjTIGnaQmpWD4,13568
102
+ agentscope_runtime/engine/deployers/utils/docker_image_utils/dockerfile_generator.py,sha256=f0uES7mM8n0qAM7-M4z-jFbQkWmHgBPsp9qo4CYgLC0,7946
103
+ agentscope_runtime/engine/deployers/utils/docker_image_utils/image_factory.py,sha256=LUwi3uxgr47C1DqYiWmslm08vD06vRoj3y11TSNUwkQ,13804
101
104
  agentscope_runtime/engine/deployers/utils/service_utils/__init__.py,sha256=qYPjEoNP_eJXPc3j-ClR0GnQKYDa0udJ-ymVGV-IsOs,169
102
105
  agentscope_runtime/engine/deployers/utils/service_utils/fastapi_factory.py,sha256=9e5qlsNbCuvHPrFvNSxL8XUh80p13MBvnrjvk2-J7NU,39030
103
106
  agentscope_runtime/engine/deployers/utils/service_utils/fastapi_templates.py,sha256=xsfoQWKidfT-S9sQWLygcNG_vGsppLQDlwXtBw1nziE,4784
@@ -111,7 +114,7 @@ agentscope_runtime/engine/misc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5
111
114
  agentscope_runtime/engine/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
112
115
  agentscope_runtime/engine/schemas/agent_schemas.py,sha256=wNUl5khvOX21PJkpd7g5BRvCMHODSylI5OCE8096g-I,27030
113
116
  agentscope_runtime/engine/schemas/embedding.py,sha256=yn6VaKPXkze0bvJuaLKzWIOus_AuT-8Z_XRABk4NH60,891
114
- agentscope_runtime/engine/schemas/exception.py,sha256=hozLtfAHo384Gx2-42Nwmh-wF9frCsHfPUYUiF5Idd8,15300
117
+ agentscope_runtime/engine/schemas/exception.py,sha256=eVZpZD77Dva5l_UsxRzCsgJ6bUOH1XQChP-iid5m37E,16003
115
118
  agentscope_runtime/engine/schemas/modelstudio_llm.py,sha256=mi_1IWjaPq1W4IaVtVtIy-kwfUSFMfWKM3kaPu2KLC4,9803
116
119
  agentscope_runtime/engine/schemas/oai_llm.py,sha256=U0lG4phFd5WYRoYomoprW87voaBm7Mm-N0uqfm5e-20,16645
117
120
  agentscope_runtime/engine/schemas/realtime.py,sha256=caTRKLfCF9v-tKbdurvqMZ1myM9-ft2UeCNuiUIUmEs,7144
@@ -121,14 +124,14 @@ agentscope_runtime/engine/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQe
121
124
  agentscope_runtime/engine/services/base.py,sha256=g2hTc3ivj2MPjnsu5_09m6_MZ3KDHBfiYKu4F2pLA1I,2096
122
125
  agentscope_runtime/engine/services/service_factory.py,sha256=LTLU6sxlaRL1GtBmXKvBxRD2E8eh2xla6XLVyFH_CFQ,3580
123
126
  agentscope_runtime/engine/services/agent_state/__init__.py,sha256=zASW6ZxMbaVQ3bz85riQ8HF2svk1b8SUxlrPUVL03ng,571
124
- agentscope_runtime/engine/services/agent_state/redis_state_service.py,sha256=mBB2paGiPyp99srmr4F8nCV1b1n3-Uca8H8OXNTvb98,3368
127
+ agentscope_runtime/engine/services/agent_state/redis_state_service.py,sha256=3NZDLoVK9tKcv40jC1JzD_6d5D52vubvUxOmDgNvnlE,5879
125
128
  agentscope_runtime/engine/services/agent_state/state_service.py,sha256=Z7vaZidnU963ldkqCEPTt5MiE5IJGJq0YnMMn5sehQc,5302
126
- agentscope_runtime/engine/services/agent_state/state_service_factory.py,sha256=8s2nLv7Vg-1-HmgLpFVXz4LRGgCxUghLnG0fOD4AArc,1752
129
+ agentscope_runtime/engine/services/agent_state/state_service_factory.py,sha256=Ze-smpoJXaQxZG4OuzCjQ9fPqfvoMM3xCT7-ZvYmU8I,1589
127
130
  agentscope_runtime/engine/services/memory/__init__.py,sha256=KZTLEqUE8CdD5JcY01ZpHAhS54N9bwYD0wwUIgSD4cA,1094
128
131
  agentscope_runtime/engine/services/memory/mem0_memory_service.py,sha256=jmiaFncOBAlx-plEcnz8ljck1Pwi0_czWBOSM7JIJnA,3694
129
132
  agentscope_runtime/engine/services/memory/memory_service.py,sha256=QNNvG3ccUiWznQfKNTtSbYqqcuoA2IJW_9xmNb1KMQI,8591
130
133
  agentscope_runtime/engine/services/memory/memory_service_factory.py,sha256=XLWriAldbRHHczcdzDK3tKaNfK5KrOYCNUUgeE5spbU,4031
131
- agentscope_runtime/engine/services/memory/redis_memory_service.py,sha256=AdLrvuYH-SsK35XKWJtAXrCPPy5FKeAH7K28XAeiA1U,5709
134
+ agentscope_runtime/engine/services/memory/redis_memory_service.py,sha256=XA2piOaxsw2mnOUDi0n5coC4d1gHUAeIDBfIlkg6x60,10699
132
135
  agentscope_runtime/engine/services/memory/reme_personal_memory_service.py,sha256=6wbCL5IRJG5GPQqFuy4yN-tARDG30CgKtJ--iKiUowQ,3007
133
136
  agentscope_runtime/engine/services/memory/reme_task_memory_service.py,sha256=dLIhWfqKZEeXB1r7f8EKPftL2lk4f60TdlCNdQNolNk,330
134
137
  agentscope_runtime/engine/services/memory/tablestore_memory_service.py,sha256=Pf1nyk5d5X7h8Iuy1e7ROCNlap9cmG--TFm7fZNUZ90,10335
@@ -136,7 +139,7 @@ agentscope_runtime/engine/services/sandbox/__init__.py,sha256=eaneUQzqUfWrfdtc8M
136
139
  agentscope_runtime/engine/services/sandbox/sandbox_service.py,sha256=KwJ0FRKxaiAMHKc1w4O6wmLigI_wBmZcgSyMu3L4X1k,6559
137
140
  agentscope_runtime/engine/services/sandbox/sandbox_service_factory.py,sha256=VMx-TeY4gghYU-CEY38M5Q9NoinfE05IfVq57Cu4X08,1595
138
141
  agentscope_runtime/engine/services/session_history/__init__.py,sha256=iTKbWEulLK9TtyQJHl9euam6xSlbY-8yKo2vgNAJ8Qc,929
139
- agentscope_runtime/engine/services/session_history/redis_session_history_service.py,sha256=rKQEGCWWcIYQ8eixGPf1dv4kMU_Yzp_G7ELuBcdSBJk,5117
142
+ agentscope_runtime/engine/services/session_history/redis_session_history_service.py,sha256=ufTyPydJl9OxMTR7mjsJvbuw-prmaqwuJ6DnxGSm5Eo,10138
140
143
  agentscope_runtime/engine/services/session_history/session_history_service.py,sha256=-UHa_OVC8TYPcZcATXE6-pTI0o5dtPwQoVpVi-OjwNE,8476
141
144
  agentscope_runtime/engine/services/session_history/session_history_service_factory.py,sha256=r8Ro_IdRSzAN6iSHo5MzHSld5UGr-GuHmfIhwQ1iQMM,2307
142
145
  agentscope_runtime/engine/services/session_history/tablestore_session_history_service.py,sha256=4PuUC7j7ZROD_cBTVMpmzgea410bnRy4oLu8H7cA2Xg,10160
@@ -151,7 +154,7 @@ agentscope_runtime/engine/tracing/tracing_metric.py,sha256=X1m6yjLx_hnbmozsCxiW9
151
154
  agentscope_runtime/engine/tracing/tracing_util.py,sha256=tzY-vp4k6BzfjHIIpQLrrgswsxQVMiCVMp6gQXFnzDY,3820
152
155
  agentscope_runtime/engine/tracing/wrapper.py,sha256=mgvkdBrIjOt-q7UMSX77gsO7TVzl2PyDdoFUEv8rr-o,31524
153
156
  agentscope_runtime/sandbox/__init__.py,sha256=Rjueu4FRl0ieis-XwHDbW81kopNVudhNRMIso9gAOSo,869
154
- agentscope_runtime/sandbox/build.py,sha256=RAZkV0rFp24BNmJBZiMYAQ4KafUAELO3V1Ys6Afodwc,8451
157
+ agentscope_runtime/sandbox/build.py,sha256=WS1nTvVmFwt5JIJiYb1qBcnSnTucC6_R4ps0wSivQX0,8509
155
158
  agentscope_runtime/sandbox/constant.py,sha256=NzpxJ1hBDkP9J_c45FsG3iDgBkfEkIlkSKjc4X78tiU,1011
156
159
  agentscope_runtime/sandbox/enums.py,sha256=8aAilIiP9Gw4SsPmhsDvGLo7D2ElZ2n0hRCU1TwmCio,1920
157
160
  agentscope_runtime/sandbox/mcp_server.py,sha256=UT3aRZqyeHqEhhm-wZ0Ilhew3eDMHzz9DCN6Qb-eKFk,6012
@@ -267,9 +270,9 @@ agentscope_runtime/tools/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5
267
270
  agentscope_runtime/tools/utils/api_key_util.py,sha256=xIIUsvWgSt4etgYP7lS0WnqVIhZ-REzrBLwzAT-TrVI,1210
268
271
  agentscope_runtime/tools/utils/crypto_utils.py,sha256=Wqq4cn3FHQge-2Q1zGSMUyKh4V4A2baiZm8ZNhMqhPo,3382
269
272
  agentscope_runtime/tools/utils/mcp_util.py,sha256=n3GGKBEQPJ-fiNXdYnBx_90GVKWvm9eaNbR2G0q2lOw,905
270
- agentscope_runtime-1.0.2.dist-info/licenses/LICENSE,sha256=3MckDTgiTJ0E6cxo8FeamFVEFiwz3XJWsriuTtRJzxY,11337
271
- agentscope_runtime-1.0.2.dist-info/METADATA,sha256=QqGmESmRD5aSZu3bKhHFBIH0iHQFGRtOQw0MVRDjzY0,40260
272
- agentscope_runtime-1.0.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
273
- agentscope_runtime-1.0.2.dist-info/entry_points.txt,sha256=Mpjpwe0A9lYNsFtWe_VeoGhtDVsKLIi6w9ZKzyhc17M,425
274
- agentscope_runtime-1.0.2.dist-info/top_level.txt,sha256=0YHketA7WcMmRmF-3lUzedeTOnP7iL77h-ekb-iG720,19
275
- agentscope_runtime-1.0.2.dist-info/RECORD,,
273
+ agentscope_runtime-1.0.3.dist-info/licenses/LICENSE,sha256=3MckDTgiTJ0E6cxo8FeamFVEFiwz3XJWsriuTtRJzxY,11337
274
+ agentscope_runtime-1.0.3.dist-info/METADATA,sha256=KoJsVx5T_5LBQwqALpH3i9syI4PqC1MrBfk533Sq3zQ,41660
275
+ agentscope_runtime-1.0.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
276
+ agentscope_runtime-1.0.3.dist-info/entry_points.txt,sha256=Mpjpwe0A9lYNsFtWe_VeoGhtDVsKLIi6w9ZKzyhc17M,425
277
+ agentscope_runtime-1.0.3.dist-info/top_level.txt,sha256=0YHketA7WcMmRmF-3lUzedeTOnP7iL77h-ekb-iG720,19
278
+ agentscope_runtime-1.0.3.dist-info/RECORD,,