media-agent-mcp 2.6.6__py3-none-any.whl → 2.6.7__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.
@@ -152,62 +152,54 @@ class RestartOnErrorMiddleware:
152
152
  # 等待一段时间,确保日志输出
153
153
  await asyncio.sleep(1)
154
154
 
155
- # 先终止当前进程的服务器,释放端口
156
- logger.info("正在关闭当前服务器以释放端口...")
157
- # 发送SIGTERM信号给当前进程,但不立即退出
158
- # 这会触发uvicorn的关闭流程,释放端口
159
- os.kill(os.getpid(), signal.SIGUSR1)
155
+ # 启动新进程,使用不同的端口避免冲突
156
+ # 解析当前命令行参数以获取当前端口
157
+ temp_parser = argparse.ArgumentParser()
158
+ temp_parser.add_argument('--port', type=int, default=8000)
159
+ temp_parser.add_argument('--host', type=str, default='127.0.0.1')
160
+ temp_parser.add_argument('--transport', type=str, default='stdio')
161
+ # 添加其他可能的参数,避免解析错误
162
+ temp_parser.add_argument('--run-be', action='store_true')
163
+ temp_parser.add_argument('--be-host', type=str, default='0.0.0.0')
164
+ temp_parser.add_argument('--be-port', type=int, default=5000)
165
+ temp_parser.add_argument('--version', action='store_true')
160
166
 
161
- # 等待端口释放
162
- await asyncio.sleep(2)
167
+ # 忽略未知参数,避免解析错误
168
+ known_args, _ = temp_parser.parse_known_args(self.args)
163
169
 
164
- # 启动新进程
165
- logger.info(f"启动新进程: {self.script_path} {' '.join(self.args)}")
166
- subprocess.Popen([sys.executable, self.script_path] + self.args)
170
+ # 计算新端口,当前端口+1
171
+ new_port = known_args.port + 1
172
+ logger.info(f"将使用新端口 {new_port} 启动新进程")
167
173
 
168
- # 等待冷却时间
169
- logger.info(f"等待 {self.restart_cooldown} 秒后终止当前进程...")
170
- await asyncio.sleep(self.restart_cooldown)
174
+ # 准备新的命令行参数
175
+ new_args = self.args.copy()
171
176
 
172
- # 终止当前进程
173
- logger.info("终止当前进程")
174
- os.kill(os.getpid(), signal.SIGTERM)
175
- return
176
-
177
- # 重置超过窗口期的错误计数
178
- if current_time - self.last_error_time > self.error_window:
179
- self.error_count = 0
180
-
181
- self.last_error_time = current_time
182
- self.error_count += 1
177
+ # 如果命令行参数中有端口参数,则替换为新端口
178
+ if '--port' in new_args:
179
+ port_index = new_args.index('--port') + 1
180
+ if port_index < len(new_args):
181
+ new_args[port_index] = str(new_port)
182
+ else:
183
+ new_args.extend(['--port', str(new_port)])
184
+
185
+ logger.info(f"启动新进程: {self.script_path} {' '.join(new_args)}")
186
+ new_process = subprocess.Popen([sys.executable, self.script_path] + new_args)
183
187
 
184
- logger.warning(f"SSE client disconnected (ClosedResourceError). Error count: {self.error_count}/{self.max_errors}")
188
+ # 等待确认新进程已启动
189
+ logger.info(f"等待确认新进程已启动...")
190
+ await asyncio.sleep(3)
185
191
 
186
- # 如果错误次数超过阈值,重启应用
187
- if self.error_count >= self.max_errors:
188
- logger.error(f"Too many connection errors ({self.error_count}). Restarting application...")
189
-
190
- # 启动一个新进程来重启应用
191
- # 使用当前脚本的路径和参数
192
- args = sys.argv.copy()
193
-
194
- # 确保我们不会立即重启(可能导致无限循环)
195
- logger.info(f"Cooling down for {self.restart_cooldown} seconds before restart...")
192
+ # 检查新进程是否成功启动
193
+ if new_process.poll() is None: # None表示进程仍在运行
194
+ logger.info(f"新进程成功启动,将在 {self.restart_cooldown} 秒后终止当前进程...")
196
195
  await asyncio.sleep(self.restart_cooldown)
197
196
 
198
- # 使用subprocess启动新进程
199
- subprocess.Popen(args, env=os.environ.copy())
200
-
201
- # 发送SIGTERM信号给当前进程
202
- logger.info("Sending termination signal to current process...")
203
- os.kill(os.getpid(), signal.SIGTERM)
204
-
205
- # 等待进程终止
206
- await asyncio.sleep(1)
207
-
208
- # 如果进程还在运行,强制退出
197
+ # 终止当前进程
198
+ logger.info("终止当前进程")
209
199
  sys.exit(0)
210
-
200
+ else:
201
+ logger.error(f"新进程启动失败,退出码: {new_process.returncode},当前进程将继续运行")
202
+ return
211
203
  return
212
204
 
213
205
  # Initialize FastMCP server (will be configured in main function)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: media-agent-mcp
3
- Version: 2.6.6
3
+ Version: 2.6.7
4
4
  Summary: A Model Context Protocol server for media processing with AI tools
5
5
  Author-email: Media Agent Team <team@mediaagent.com>
6
6
  Keywords: mcp,ai,media,video,image,processing
@@ -1,5 +1,5 @@
1
1
  media_agent_mcp/__init__.py,sha256=4kV5u8kHrsdjpMHDNUhc8h4U6AwOyw1mNptFPd2snrQ,365
2
- media_agent_mcp/async_server.py,sha256=suhjcxjolzojUnLGEeKwsyf2OsT-O0xK6K4xqm1w5CA,25324
2
+ media_agent_mcp/async_server.py,sha256=3r_MIOFIWLiJWc068mTSy8SkzFKRdb2jlsqf0PketGU,25260
3
3
  media_agent_mcp/async_wrapper.py,sha256=hiiBhhz9WeVDfSBWVh6ovhf5jeP5ZbsieBbz9P-KPn0,15351
4
4
  media_agent_mcp/server.py,sha256=TAH88BDip7m3R0kNDz89RSuK6Vt8f-v8KeM5bgeSx1M,23104
5
5
  media_agent_mcp/ai_models/__init__.py,sha256=2kHzTYwjQw89U4QGDq0e2WqJScqDkDNlDaWHGak5JeY,553
@@ -44,8 +44,8 @@ media_agent_mcp/video/__init__.py,sha256=tfz22XEeFSeuKa3AggYCE0vCDt4IwXRCKW6avof
44
44
  media_agent_mcp/video/processor.py,sha256=twfqmN5DbVryjDawZUcqTUcnglcBJYpUbAnApqHgD0c,12787
45
45
  media_agent_mcp/video/stack.py,sha256=pyoJiJ9NhU1tjy2l3kARI9sWFoC00Fj97psxYOBi2NU,1736
46
46
  media_agent_mcp/video/subtitle.py,sha256=TlrWVhWJqYTUJpnVz7eccwMAn8ixfrRzRxS6ETMY-DM,16323
47
- media_agent_mcp-2.6.6.dist-info/METADATA,sha256=LVviMD07NXIxSmeG6yXohs0hoVSoVdKSO0f03fEZNVQ,11310
48
- media_agent_mcp-2.6.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
49
- media_agent_mcp-2.6.6.dist-info/entry_points.txt,sha256=qhOUwR-ORVf9GO7emhhl7Lgd6MISgqbZr8bEuSH_VdA,70
50
- media_agent_mcp-2.6.6.dist-info/top_level.txt,sha256=WEa0YfchpTxZgiKn8gdxYgs-dir5HepJaTOrxAGx9nY,16
51
- media_agent_mcp-2.6.6.dist-info/RECORD,,
47
+ media_agent_mcp-2.6.7.dist-info/METADATA,sha256=D_OFuqAyRjmp6cZSgCb-t1nrfLhbLID0ejXBsaJ7GS4,11310
48
+ media_agent_mcp-2.6.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
49
+ media_agent_mcp-2.6.7.dist-info/entry_points.txt,sha256=qhOUwR-ORVf9GO7emhhl7Lgd6MISgqbZr8bEuSH_VdA,70
50
+ media_agent_mcp-2.6.7.dist-info/top_level.txt,sha256=WEa0YfchpTxZgiKn8gdxYgs-dir5HepJaTOrxAGx9nY,16
51
+ media_agent_mcp-2.6.7.dist-info/RECORD,,