| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- """
- agent67.tools.app_controller — 应用控制器 (macOS)
- Lambda: λ action_json. app_op(action)
- """
- import json
- import platform
- import subprocess
- from .safety import ask_user_confirm
- def control_app(input_json: str) -> str:
- """
- 应用程序控制。
- 支持: launch / quit / list / focus / notify
- """
- try:
- data = json.loads(input_json)
- except json.JSONDecodeError:
- data = {"action": "launch", "app": input_json.strip()}
- action = data.get("action", "launch")
- app_name = data.get("app", "")
- if platform.system() != "Darwin":
- return "⚠️ 应用控制目前仅支持 macOS"
- try:
- if action == "launch":
- subprocess.run(["open", "-a", app_name], check=True, timeout=10)
- return f"🚀 已启动: {app_name}"
- elif action == "quit":
- if not ask_user_confirm(f"关闭应用: {app_name}"):
- return "❌ 用户取消"
- script = f'tell application "{app_name}" to quit'
- subprocess.run(["osascript", "-e", script], timeout=10)
- return f"✅ 已关闭: {app_name}"
- elif action == "list":
- script = ('tell application "System Events" to get name of '
- 'every process whose background only is false')
- result = subprocess.run(
- ["osascript", "-e", script],
- capture_output=True, text=True, timeout=10,
- )
- return f"🖥️ 运行中的应用:\n{result.stdout.strip()}"
- elif action == "focus":
- script = f'tell application "{app_name}" to activate'
- subprocess.run(["osascript", "-e", script], timeout=10)
- return f"✅ 已切换到: {app_name}"
- elif action == "notify":
- title = data.get("title", "lambda 通知 🐂")
- message = data.get("message", "")
- script = f'display notification "{message}" with title "{title}"'
- subprocess.run(["osascript", "-e", script], timeout=10)
- return f"🔔 通知已发送: {title}"
- else:
- return f"❌ 未知操作: {action}. 支持: launch/quit/list/focus/notify"
- except subprocess.CalledProcessError as e:
- return f"❌ 应用操作失败: {e}"
- except Exception as e:
- return f"❌ 错误: {e}"
|