autoglm-gui 1.1.0__py3-none-any.whl → 1.2.1__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 (35) hide show
  1. AutoGLM_GUI/adb_plus/__init__.py +5 -1
  2. AutoGLM_GUI/adb_plus/serial.py +61 -2
  3. AutoGLM_GUI/adb_plus/version.py +81 -0
  4. AutoGLM_GUI/api/__init__.py +8 -1
  5. AutoGLM_GUI/api/agents.py +329 -94
  6. AutoGLM_GUI/api/devices.py +145 -164
  7. AutoGLM_GUI/api/workflows.py +70 -0
  8. AutoGLM_GUI/device_manager.py +760 -0
  9. AutoGLM_GUI/exceptions.py +18 -0
  10. AutoGLM_GUI/phone_agent_manager.py +549 -0
  11. AutoGLM_GUI/phone_agent_patches.py +146 -0
  12. AutoGLM_GUI/schemas.py +310 -2
  13. AutoGLM_GUI/state.py +21 -0
  14. AutoGLM_GUI/static/assets/{about-Crpy4Xue.js → about-BtBH1xKN.js} +1 -1
  15. AutoGLM_GUI/static/assets/chat-DPzFNNGu.js +124 -0
  16. AutoGLM_GUI/static/assets/dialog-Dwuk2Hgl.js +45 -0
  17. AutoGLM_GUI/static/assets/index-B_AaKuOT.js +1 -0
  18. AutoGLM_GUI/static/assets/index-BjYIY--m.css +1 -0
  19. AutoGLM_GUI/static/assets/index-CvQkCi2d.js +11 -0
  20. AutoGLM_GUI/static/assets/logo-Cyfm06Ym.png +0 -0
  21. AutoGLM_GUI/static/assets/workflows-xX_QH-wI.js +1 -0
  22. AutoGLM_GUI/static/favicon.ico +0 -0
  23. AutoGLM_GUI/static/index.html +9 -2
  24. AutoGLM_GUI/static/logo-192.png +0 -0
  25. AutoGLM_GUI/static/logo-512.png +0 -0
  26. AutoGLM_GUI/workflow_manager.py +181 -0
  27. {autoglm_gui-1.1.0.dist-info → autoglm_gui-1.2.1.dist-info}/METADATA +51 -6
  28. {autoglm_gui-1.1.0.dist-info → autoglm_gui-1.2.1.dist-info}/RECORD +31 -19
  29. AutoGLM_GUI/static/assets/chat-DGFuSj6_.js +0 -149
  30. AutoGLM_GUI/static/assets/index-C1k5Ch1V.js +0 -10
  31. AutoGLM_GUI/static/assets/index-COYnSjzf.js +0 -1
  32. AutoGLM_GUI/static/assets/index-QX6oy21q.css +0 -1
  33. {autoglm_gui-1.1.0.dist-info → autoglm_gui-1.2.1.dist-info}/WHEEL +0 -0
  34. {autoglm_gui-1.1.0.dist-info → autoglm_gui-1.2.1.dist-info}/entry_points.txt +0 -0
  35. {autoglm_gui-1.1.0.dist-info → autoglm_gui-1.2.1.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1 @@
1
+ import{c as D,u as S,r as t,l as b,j as e,B as r,d as W,a as F,b as T}from"./index-CvQkCi2d.js";import{P as E,L as f,C as L,a as P,b as z,c as H,T as I,D as q,d as B,e as M,f as _,g as j,I as O,h as R,i as A}from"./dialog-Dwuk2Hgl.js";const G=[["path",{d:"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7",key:"1m0v6g"}],["path",{d:"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z",key:"ohrbg2"}]],J=D("square-pen",G);function U(){const s=S(),[m,g]=t.useState([]),[p,x]=t.useState(!0),[k,o]=t.useState(!1),[c,h]=t.useState(null),[l,i]=t.useState({name:"",text:""}),[w,u]=t.useState(!1);t.useEffect(()=>{d()},[]);const d=async()=>{try{x(!0);const a=await b();g(a.workflows)}catch(a){console.error("Failed to load workflows:",a)}finally{x(!1)}},v=()=>{h(null),i({name:"",text:""}),o(!0)},N=a=>{h(a),i({name:a.name,text:a.text}),o(!0)},C=async()=>{try{u(!0),c?await F(c.uuid,l):await T(l),o(!1),d()}catch(a){console.error("Failed to save workflow:",a)}finally{u(!1)}},y=async a=>{if(window.confirm(s.workflows.deleteConfirm))try{await W(a),d()}catch(n){console.error("Failed to delete workflow:",n)}};return e.jsxs("div",{className:"container mx-auto p-6 max-w-7xl",children:[e.jsxs("div",{className:"flex justify-between items-center mb-6",children:[e.jsx("h1",{className:"text-3xl font-bold",children:s.workflows.title}),e.jsxs(r,{onClick:v,children:[e.jsx(E,{className:"w-4 h-4 mr-2"}),s.workflows.createNew]})]}),p?e.jsx("div",{className:"flex justify-center items-center h-64",children:e.jsx(f,{className:"w-8 h-8 animate-spin text-slate-400"})}):m.length===0?e.jsx("div",{className:"text-center py-12",children:e.jsx("p",{className:"text-slate-500 dark:text-slate-400",children:s.workflows.empty})}):e.jsx("div",{className:"grid gap-4 md:grid-cols-2 lg:grid-cols-3",children:m.map(a=>e.jsxs(L,{className:"hover:shadow-md transition-shadow",children:[e.jsx(P,{children:e.jsx(z,{className:"text-lg",children:a.name})}),e.jsxs(H,{children:[e.jsx("p",{className:"text-sm text-slate-600 dark:text-slate-400 mb-4 line-clamp-3",children:a.text}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(r,{variant:"outline",size:"sm",onClick:()=>N(a),children:[e.jsx(J,{className:"w-3 h-3 mr-1"}),s.common.edit]}),e.jsxs(r,{variant:"destructive",size:"sm",onClick:()=>y(a.uuid),children:[e.jsx(I,{className:"w-3 h-3 mr-1"}),s.common.delete]})]})]})]},a.uuid))}),e.jsx(q,{open:k,onOpenChange:o,children:e.jsxs(B,{className:"sm:max-w-[600px]",children:[e.jsx(M,{children:e.jsx(_,{children:c?s.workflows.edit:s.workflows.create})}),e.jsxs("div",{className:"space-y-4 py-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(j,{htmlFor:"name",children:s.workflows.name}),e.jsx(O,{id:"name",value:l.name,onChange:a=>i(n=>({...n,name:a.target.value})),placeholder:s.workflows.namePlaceholder})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(j,{htmlFor:"text",children:s.workflows.text}),e.jsx(R,{id:"text",value:l.text,onChange:a=>i(n=>({...n,text:a.target.value})),placeholder:s.workflows.textPlaceholder,rows:6,className:"resize-none !rounded-lg"})]})]}),e.jsxs(A,{children:[e.jsx(r,{variant:"outline",onClick:()=>o(!1),children:s.common.cancel}),e.jsx(r,{onClick:C,disabled:!l.name.trim()||!l.text.trim()||w,children:w?e.jsxs(e.Fragment,{children:[e.jsx(f,{className:"w-4 h-4 mr-2 animate-spin"}),s.common.loading]}):s.common.save})]})]})})]})}export{U as component};
Binary file
@@ -4,8 +4,15 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>AutoGLM GUI</title>
7
- <script type="module" crossorigin src="/assets/index-C1k5Ch1V.js"></script>
8
- <link rel="stylesheet" crossorigin href="/assets/index-QX6oy21q.css">
7
+
8
+ <!-- Favicons -->
9
+ <link rel="icon" type="image/x-icon" href="/favicon.ico" />
10
+ <link rel="apple-touch-icon" sizes="180x180" href="/logo-192.png" />
11
+ <link rel="icon" type="image/png" sizes="192x192" href="/logo-192.png" />
12
+ <link rel="icon" type="image/png" sizes="512x512" href="/logo-512.png" />
13
+ <meta name="theme-color" content="#f5f1e8" />
14
+ <script type="module" crossorigin src="/assets/index-CvQkCi2d.js"></script>
15
+ <link rel="stylesheet" crossorigin href="/assets/index-BjYIY--m.css">
9
16
  </head>
10
17
  <body>
11
18
  <div id="app"></div>
Binary file
Binary file
@@ -0,0 +1,181 @@
1
+ """Workflow 管理模块.
2
+
3
+ Features:
4
+ - 单例模式
5
+ - JSON 文件持久化
6
+ - 基于 mtime 的缓存机制
7
+ - 原子文件写入
8
+ - UUID 生成
9
+ """
10
+
11
+ import json
12
+ import uuid as uuid_lib
13
+ from pathlib import Path
14
+ from typing import Optional
15
+
16
+ from AutoGLM_GUI.logger import logger
17
+
18
+
19
+ class WorkflowManager:
20
+ """Workflow 管理器(单例模式)."""
21
+
22
+ _instance: Optional["WorkflowManager"] = None
23
+
24
+ def __new__(cls):
25
+ """单例模式:确保只有一个实例."""
26
+ if cls._instance is None:
27
+ cls._instance = super().__new__(cls)
28
+ return cls._instance
29
+
30
+ def __init__(self):
31
+ """初始化管理器."""
32
+ if hasattr(self, "_initialized"):
33
+ return
34
+ self._initialized = True
35
+ self._workflows_path = Path.home() / ".config" / "autoglm" / "workflows.json"
36
+ self._file_cache: Optional[list[dict]] = None
37
+ self._file_mtime: Optional[float] = None
38
+
39
+ def list_workflows(self) -> list[dict]:
40
+ """获取所有 workflows.
41
+
42
+ Returns:
43
+ list[dict]: Workflow 列表
44
+ """
45
+ return self._load_workflows()
46
+
47
+ def get_workflow(self, uuid: str) -> dict | None:
48
+ """根据 UUID 获取单个 workflow.
49
+
50
+ Args:
51
+ uuid: Workflow UUID
52
+
53
+ Returns:
54
+ dict | None: Workflow 数据,如果不存在则返回 None
55
+ """
56
+ workflows = self._load_workflows()
57
+ return next((wf for wf in workflows if wf["uuid"] == uuid), None)
58
+
59
+ def create_workflow(self, name: str, text: str) -> dict:
60
+ """创建新 workflow.
61
+
62
+ Args:
63
+ name: Workflow 名称
64
+ text: Workflow 任务内容
65
+
66
+ Returns:
67
+ dict: 新创建的 workflow
68
+ """
69
+ workflows = self._load_workflows()
70
+ new_workflow = {
71
+ "uuid": str(uuid_lib.uuid4()),
72
+ "name": name,
73
+ "text": text,
74
+ }
75
+ workflows.append(new_workflow)
76
+ self._save_workflows(workflows)
77
+ logger.info(f"Created workflow: {name} (uuid={new_workflow['uuid']})")
78
+ return new_workflow
79
+
80
+ def update_workflow(self, uuid: str, name: str, text: str) -> dict | None:
81
+ """更新 workflow.
82
+
83
+ Args:
84
+ uuid: Workflow UUID
85
+ name: 新名称
86
+ text: 新任务内容
87
+
88
+ Returns:
89
+ dict | None: 更新后的 workflow,如果不存在则返回 None
90
+ """
91
+ workflows = self._load_workflows()
92
+ for wf in workflows:
93
+ if wf["uuid"] == uuid:
94
+ wf["name"] = name
95
+ wf["text"] = text
96
+ self._save_workflows(workflows)
97
+ logger.info(f"Updated workflow: {name} (uuid={uuid})")
98
+ return wf
99
+ logger.warning(f"Workflow not found for update: uuid={uuid}")
100
+ return None
101
+
102
+ def delete_workflow(self, uuid: str) -> bool:
103
+ """删除 workflow.
104
+
105
+ Args:
106
+ uuid: Workflow UUID
107
+
108
+ Returns:
109
+ bool: 删除成功返回 True,不存在返回 False
110
+ """
111
+ workflows = self._load_workflows()
112
+ original_len = len(workflows)
113
+ workflows = [wf for wf in workflows if wf["uuid"] != uuid]
114
+ if len(workflows) < original_len:
115
+ self._save_workflows(workflows)
116
+ logger.info(f"Deleted workflow: uuid={uuid}")
117
+ return True
118
+ logger.warning(f"Workflow not found for deletion: uuid={uuid}")
119
+ return False
120
+
121
+ def _load_workflows(self) -> list[dict]:
122
+ """从文件加载(带 mtime 缓存).
123
+
124
+ Returns:
125
+ list[dict]: Workflow 列表
126
+ """
127
+ if not self._workflows_path.exists():
128
+ return []
129
+
130
+ # 检查缓存
131
+ current_mtime = self._workflows_path.stat().st_mtime
132
+ if self._file_mtime == current_mtime and self._file_cache is not None:
133
+ return self._file_cache.copy()
134
+
135
+ # 重新加载
136
+ try:
137
+ with open(self._workflows_path, "r", encoding="utf-8") as f:
138
+ data = json.load(f)
139
+ workflows = data.get("workflows", [])
140
+ self._file_cache = workflows
141
+ self._file_mtime = current_mtime
142
+ logger.debug(f"Loaded {len(workflows)} workflows from file")
143
+ return workflows.copy()
144
+ except (json.JSONDecodeError, FileNotFoundError) as e:
145
+ logger.warning(f"Failed to load workflows: {e}")
146
+ return []
147
+
148
+ def _save_workflows(self, workflows: list[dict]) -> bool:
149
+ """原子写入文件.
150
+
151
+ Args:
152
+ workflows: Workflow 列表
153
+
154
+ Returns:
155
+ bool: 保存成功返回 True
156
+ """
157
+ self._workflows_path.parent.mkdir(parents=True, exist_ok=True)
158
+
159
+ data = {"workflows": workflows}
160
+
161
+ # 原子写入:临时文件 + rename
162
+ temp_path = self._workflows_path.with_suffix(".tmp")
163
+ try:
164
+ with open(temp_path, "w", encoding="utf-8") as f:
165
+ json.dump(data, f, indent=2, ensure_ascii=False)
166
+ temp_path.replace(self._workflows_path)
167
+
168
+ # 更新缓存
169
+ self._file_cache = workflows.copy()
170
+ self._file_mtime = self._workflows_path.stat().st_mtime
171
+ logger.debug(f"Saved {len(workflows)} workflows to file")
172
+ return True
173
+ except Exception as e:
174
+ logger.error(f"Failed to save workflows: {e}")
175
+ if temp_path.exists():
176
+ temp_path.unlink()
177
+ return False
178
+
179
+
180
+ # 单例实例
181
+ workflow_manager = WorkflowManager()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: autoglm-gui
3
- Version: 1.1.0
3
+ Version: 1.2.1
4
4
  Summary: Web GUI for AutoGLM Phone Agent - AI-powered Android automation
5
5
  Project-URL: Homepage, https://github.com/suyiiyii/AutoGLM-GUI
6
6
  Project-URL: Repository, https://github.com/suyiiyii/AutoGLM-GUI
@@ -30,11 +30,15 @@ Requires-Dist: uvicorn[standard]>=0.38.0
30
30
  Requires-Dist: zeroconf>=0.148.0
31
31
  Description-Content-Type: text/markdown
32
32
 
33
+ <div align="center">
34
+
35
+ <img src="https://github.com/user-attachments/assets/bbdaeb1c-b7f2-4a4b-a11a-34db4de0ba12" alt="autoglm-gui" width="150">
36
+
33
37
  # AutoGLM-GUI
34
38
 
35
39
  AutoGLM 手机助手的现代化 Web 图形界面 - 让 AI 自动化操作 Android 设备变得简单
36
40
 
37
- **🎉 Android 11+ 设备现已支持完全无线连接,扫码即配对,无需数据线!**
41
+ **🎉 Android 11+ 设备现已支持完全无线连接,扫码即配对,无需数据线!🎉**
38
42
 
39
43
  ![Python](https://img.shields.io/badge/python-3.10+-blue.svg)
40
44
  ![License](https://img.shields.io/badge/license-Apache%202.0-green.svg)
@@ -43,11 +47,17 @@ AutoGLM 手机助手的现代化 Web 图形界面 - 让 AI 自动化操作 Andro
43
47
  <a href="https://qm.qq.com/q/J5eAs9tn0W" target="__blank">
44
48
  <strong>欢迎加入讨论交流群</strong>
45
49
  </a>
50
+
51
+ [English Documentation](README_EN.md)
52
+
53
+ </div>
54
+
46
55
  ## ✨ 特性
47
56
 
48
57
  - **完全无线配对** - 🆕 支持 Android 11+ 二维码扫码配对,无需数据线即可连接设备
49
58
  - **多设备并发控制** - 同时管理和控制多个 Android 设备,设备间状态完全隔离
50
59
  - **对话式任务管理** - 通过聊天界面控制 Android 设备
60
+ - **Workflow 工作流** - 🆕 预定义常用任务,一键快速执行,支持创建、编辑、删除和管理
51
61
  - **实时屏幕预览** - 基于 scrcpy 的低延迟视频流,随时查看设备正在执行的操作
52
62
  - **直接操控手机** - 在实时画面上直接点击、滑动操作,支持精准坐标转换和视觉反馈
53
63
  - **零配置部署** - 支持任何 OpenAI 兼容的 LLM API
@@ -62,9 +72,9 @@ AutoGLM 手机助手的现代化 Web 图形界面 - 让 AI 自动化操作 Andro
62
72
 
63
73
  | 操作系统 | 下载链接 | 说明 |
64
74
  |---------|---------|------|
65
- | 🪟 **Windows** (x64) | [📦 下载便携版 EXE](https://github.com/suyiiyii/AutoGLM-GUI/releases/download/v1.1.0/AutoGLM.GUI.1.1.0.exe) | 适用于 Windows 10/11,免安装 |
66
- | 🍎 **macOS** (Apple Silicon) | [📦 下载 DMG](https://github.com/suyiiyii/AutoGLM-GUI/releases/download/v1.1.0/AutoGLM.GUI-1.1.0-arm64.dmg) | 适用于 M 芯片 Mac |
67
- | 🐧 **Linux** (x64) | [📦 下载 AppImage](https://github.com/suyiiyii/AutoGLM-GUI/releases/download/v1.1.0/AutoGLM.GUI-1.1.0.AppImage) \| [deb](https://github.com/suyiiyii/AutoGLM-GUI/releases/download/v1.1.0/autoglm-gui_1.1.0_amd64.deb) \| [tar.gz](https://github.com/suyiiyii/AutoGLM-GUI/releases/download/v1.1.0/autoglm-gui-1.1.0.tar.gz) | 通用格式,支持主流发行版 |
75
+ | 🪟 **Windows** (x64) | [📦 下载便携版 EXE](https://github.com/suyiiyii/AutoGLM-GUI/releases/download/v1.2.1/AutoGLM.GUI.1.2.1.exe) | 适用于 Windows 10/11,免安装 |
76
+ | 🍎 **macOS** (Apple Silicon) | [📦 下载 DMG](https://github.com/suyiiyii/AutoGLM-GUI/releases/download/v1.2.1/AutoGLM.GUI-1.2.1-arm64.dmg) | 适用于 M 芯片 Mac |
77
+ | 🐧 **Linux** (x64) | [📦 下载 AppImage](https://github.com/suyiiyii/AutoGLM-GUI/releases/download/v1.2.1/AutoGLM.GUI-1.2.1.AppImage) \| [deb](https://github.com/suyiiyii/AutoGLM-GUI/releases/download/v1.2.1/autoglm-gui_1.2.1_amd64.deb) \| [tar.gz](https://github.com/suyiiyii/AutoGLM-GUI/releases/download/v1.2.1/autoglm-gui-1.2.1.tar.gz) | 通用格式,支持主流发行版 |
68
78
 
69
79
  </div>
70
80
 
@@ -258,6 +268,41 @@ AutoGLM-GUI 支持同时控制多个 Android 设备:
258
268
  5. **精准转换** - 自动处理屏幕缩放和坐标转换,确保操作位置准确
259
269
  6. **显示模式** - 支持自动、视频流、截图三种显示模式切换
260
270
 
271
+ ### Workflow 工作流管理
272
+
273
+ 将常用任务保存为 Workflow,实现一键快速执行:
274
+
275
+ #### 创建和管理 Workflow
276
+
277
+ 1. **进入管理页面** - 点击左侧导航栏的 Workflows 图标(📋)
278
+ 2. **新建 Workflow** - 点击右上角"新建 Workflow"按钮
279
+ 3. **填写信息**:
280
+ - **名称**:给 Workflow 起一个简短易记的名称(如:"订购霸王茶姬")
281
+ - **任务内容**:详细描述要执行的任务(如:"去美团点一杯霸王茶姬的伯牙绝弦,要去冰,加珍珠")
282
+ 4. **保存** - 点击保存按钮即可
283
+
284
+ **管理操作**:
285
+ - **编辑** - 点击 Workflow 卡片上的"编辑"按钮修改内容
286
+ - **删除** - 点击"删除"按钮移除不需要的 Workflow
287
+ - **预览** - Workflow 卡片显示任务内容的前几行预览
288
+
289
+ #### 快速执行 Workflow
290
+
291
+ 在 Chat 界面执行已保存的 Workflow:
292
+
293
+ 1. **选择设备** - 确保已选择并初始化目标设备
294
+ 2. **打开 Workflow 选择器** - 点击输入框旁边的 Workflow 按钮(📋 图标)
295
+ 3. **选择要执行的任务** - 从列表中点击你想执行的 Workflow
296
+ 4. **自动填充** - 任务内容会自动填入输入框
297
+ 5. **发送执行** - 点击发送按钮开始执行
298
+
299
+ **使用场景示例**:
300
+ - 📱 **日常任务**:订外卖、打车、查快递
301
+ - 🎮 **游戏操作**:每日签到、领取奖励
302
+ - 📧 **消息发送**:固定内容的消息群发
303
+ - 🔄 **重复操作**:定期执行的维护任务
304
+
305
+
261
306
 
262
307
  ## 🛠️ 开发指南
263
308
 
@@ -287,7 +332,7 @@ Apache License 2.0
287
332
 
288
333
  ### 许可证说明
289
334
 
290
- AutoGLM-GUI 使用 MIT 许可证。但是,它打包了 ADB Keyboard APK (`com.android.adbkeyboard`),该组件使用 GPL-2.0 许可证。ADB Keyboard 组件作为独立工具使用,不影响 AutoGLM-GUI 本身的 MIT 许可。
335
+ AutoGLM-GUI 打包了 ADB Keyboard APK (`com.android.adbkeyboard`),该组件使用 GPL-2.0 许可证。ADB Keyboard 组件作为独立工具使用,不影响 AutoGLM-GUI 本身的 MIT 许可。
291
336
 
292
337
  详见:`AutoGLM_GUI/resources/apks/ADBKeyBoard.LICENSE.txt`
293
338
 
@@ -2,17 +2,21 @@ AutoGLM_GUI/__init__.py,sha256=ic002QIj6sw9cyhh7e_60DFIb7omtPcF01-L6M4lllM,2176
2
2
  AutoGLM_GUI/__main__.py,sha256=ogFi2KO9kCn47ZvT5jqBzoBTnqG191TFKfEM9lcal1w,6390
3
3
  AutoGLM_GUI/config.py,sha256=SRBPcIKqR5HxrxiiwpOUAPxHvp-36igtFhDEptG_Zz4,619
4
4
  AutoGLM_GUI/config_manager.py,sha256=xbiwKbg6XuXps21pstVRPlGzRbVEzSx5p0-ElnEP8hg,17625
5
- AutoGLM_GUI/exceptions.py,sha256=DuNA0zlu3YW9kFstRFr9-FInO32tL7_TY86EPCpnpUM,165
5
+ AutoGLM_GUI/device_manager.py,sha256=dAHP29a63H6GY43f715dOlJdwOz1eWa2XnPf2_SbIiY,26923
6
+ AutoGLM_GUI/exceptions.py,sha256=YnN1qJdWgC8LholEGd3nman2G-ylXgcUdZJdilsHf8A,499
6
7
  AutoGLM_GUI/logger.py,sha256=wLzjbRqsHAsOtI9yB0bcUZFVzgGK6qM8330std6FjVw,2553
8
+ AutoGLM_GUI/phone_agent_manager.py,sha256=bun1DUqCRGwIKsTVeBKI6U09nHtWZRuSTYhCWlLfTnI,18104
9
+ AutoGLM_GUI/phone_agent_patches.py,sha256=-RfpL9RHxOI2GyC2v8L49S0gXiK8l1cldEX3Ysrpl5c,4887
7
10
  AutoGLM_GUI/platform_utils.py,sha256=bYlQGAYYpU1ZqOUD-F-fIzpEA5z53dMFfaErsFhAvYk,2357
8
- AutoGLM_GUI/schemas.py,sha256=lILQKZNWXL-ATfehfsfkQEZ-KPvsPFWbIl03QymxzOs,6291
11
+ AutoGLM_GUI/schemas.py,sha256=BPXf4XhzTfKqFKA8jZklQ2XFGQA7n4uJPx70omfxn8c,15432
9
12
  AutoGLM_GUI/scrcpy_protocol.py,sha256=h6AtAGq3zMM30FWM7EYiYKJz7BDikpNCOjcKtFcRx3s,997
10
13
  AutoGLM_GUI/scrcpy_stream.py,sha256=-tGyDNaML1TnZLzTNiVUgxMTv_7TQS0CKZ35G2RuPfg,16595
11
14
  AutoGLM_GUI/server.py,sha256=GGGz7llG5rflIpO61nil8Zde12PLkv6OIzghuxwSkoI,249
12
15
  AutoGLM_GUI/socketio_server.py,sha256=__fWLlqBYFFl1YXanm8Vls-_Wr8pQ68kU7N_3q4WZfY,3535
13
- AutoGLM_GUI/state.py,sha256=coO9ncx8kuFnp8bfFDzgGxD41uI9vcFP-NFgHxNd1dM,854
16
+ AutoGLM_GUI/state.py,sha256=ziw-t69JrojUOfzuNmVrZPc6J3-adBFpN4J3Xhq1sdU,1825
14
17
  AutoGLM_GUI/version.py,sha256=z0MPXu-k9UO7RXxVGcAwim2M3yklrRqLwgOq66zSdzo,178
15
- AutoGLM_GUI/adb_plus/__init__.py,sha256=HpTcaVe2uG7E_3pXplbiDpWmhYc24zBTVxNKsAAf1tU,773
18
+ AutoGLM_GUI/workflow_manager.py,sha256=AZ_zrhSeEvtlF1HTNMNS3f4qBwRuX-bzImdZEVZVXV8,5552
19
+ AutoGLM_GUI/adb_plus/__init__.py,sha256=4F4IIRejvrNArMi1xoyMmSLpsQcC3iy-frBEPXkNR5w,945
16
20
  AutoGLM_GUI/adb_plus/device.py,sha256=nCMDUd18LPfl5CsJeDjKd9HSt6FFOy2jS1muOSeLO08,1683
17
21
  AutoGLM_GUI/adb_plus/ip.py,sha256=dt6ffIjiW_jGoEqUKUDi9fRGbWN1W9LxfT8rWIqgS-0,2200
18
22
  AutoGLM_GUI/adb_plus/keyboard_installer.py,sha256=dsQqLgWd2kkTeljdTTT77mFwJpcM-IJecMcJJEutbHo,13541
@@ -20,21 +24,29 @@ AutoGLM_GUI/adb_plus/mdns.py,sha256=AwQ4MQsPKVW1tPjIUpOWvBQGlJxvVrO9eTvxoqsgPUo,
20
24
  AutoGLM_GUI/adb_plus/pair.py,sha256=3UElG0yjylhmZBtPpDER2BNMZs9CwDeavjuQOwOC4sw,1945
21
25
  AutoGLM_GUI/adb_plus/qr_pair.py,sha256=K0Jnn5FcuQVU7cM74BTi7WdKh3UF9H85qyua9YPwIEE,13574
22
26
  AutoGLM_GUI/adb_plus/screenshot.py,sha256=pr7BpmUcGZO9rthpDeMRn4D1oAGX9aEEVL3ZnTQzrIo,3211
23
- AutoGLM_GUI/adb_plus/serial.py,sha256=cdZuA47BYciX3POoAKl3E2xL0fIOZwgO5YmvxvYtNi4,1164
27
+ AutoGLM_GUI/adb_plus/serial.py,sha256=lDbBXTIoOJ5lbFj50K5X7PZnfpKt1vRpFiWVjolfEhQ,3142
24
28
  AutoGLM_GUI/adb_plus/touch.py,sha256=7cyMon9nOd6zQvZdHK7BHWoRLLWkdK-qWfTuSFfFzJA,2301
25
- AutoGLM_GUI/api/__init__.py,sha256=y4gmGqd2u4gap9j_sVzpChc-t_idFuydxO2n2irQnxU,2605
26
- AutoGLM_GUI/api/agents.py,sha256=JvZ4YBms-cC2vSfQIvLCVMA1F-36Pwjqc_PpOFBaVgs,11279
29
+ AutoGLM_GUI/adb_plus/version.py,sha256=u5u1N40izJceeORN9kFhyz0wq_hZtlwBXaiytfA3px8,2428
30
+ AutoGLM_GUI/api/__init__.py,sha256=q9cF2jHvAvJu-Sme1Edf8K3EP9CpYNCOSkaSCvevS5k,2844
31
+ AutoGLM_GUI/api/agents.py,sha256=co7Viu6iqg9-TXxMUCkxy-O0CrXnf0HmZiT-l3_Q6eo,21541
27
32
  AutoGLM_GUI/api/control.py,sha256=G-7hfdqTl5fq-UXOwE2CI_HMbfmRH1Vd589t2FTNZyY,3155
28
- AutoGLM_GUI/api/devices.py,sha256=cLpRTNHEWwOjs-hJPQdvUmNE3whxFWbkHm-WW-7kIaE,11584
33
+ AutoGLM_GUI/api/devices.py,sha256=AzHUwFGjaj5xaHMmDylyNy0CUGZQHwlCdE3t41azqQk,11186
29
34
  AutoGLM_GUI/api/media.py,sha256=Ioncwd68CNkYvqmeTJJ3P5I1rjWfw6PM4WPz5Ixx8vI,1631
30
35
  AutoGLM_GUI/api/version.py,sha256=ZN99iH2PA_qx5A1fnSEO-Yihh4K7Bc4r1jOnP6IcXZo,5861
31
- AutoGLM_GUI/static/index.html,sha256=o0mtpzeH47c5ALJ93IsjsEt7v8mIF9H2TZFwlksL-Yc,395
32
- AutoGLM_GUI/static/assets/about-Crpy4Xue.js,sha256=ybpFSCP2fDvUC4dVlm2SdUrdSxWq4wV0LKJYr2mwX4I,155
33
- AutoGLM_GUI/static/assets/chat-DGFuSj6_.js,sha256=UiaFAxOeTQmiy3k4-TYuUakrI84niMdmhSESGH95hNg,218867
34
- AutoGLM_GUI/static/assets/index-C1k5Ch1V.js,sha256=xfG_l8XBbuBuoR-oq55OIj4oMmF7NIw23oCh17_rVgk,377637
35
- AutoGLM_GUI/static/assets/index-COYnSjzf.js,sha256=tNlbpXSMQt8Y48Sc8uJUkjQOjhzFA_4tEDCJYe7fXzE,228
36
- AutoGLM_GUI/static/assets/index-QX6oy21q.css,sha256=FOy2ab04Q2RxfZt3E0a5sak9V1Rj2pajCWwPB8vZDcE,72624
36
+ AutoGLM_GUI/api/workflows.py,sha256=dis4k8b-xTYL99qlSYev-Qo5a7z9XdwA1xyC8fRJGLE,2360
37
+ AutoGLM_GUI/static/favicon.ico,sha256=uB4wrcENiFaF-K4V-FzNp51XLW8GC4-ujpBDHgISfGM,781
38
+ AutoGLM_GUI/static/index.html,sha256=G-YutPCEfDwibg_nqlpsOo0wAhciP1NcWk867XPPjFc,761
39
+ AutoGLM_GUI/static/logo-192.png,sha256=FOXgZxFrN0ZleO0VjlCnvD5cDkd1okJPkwPDZqsflNs,35243
40
+ AutoGLM_GUI/static/logo-512.png,sha256=HlwSg09dQ3_Jtb09Ght4l2VK3YNLZlP_941LCdpDkWk,251598
41
+ AutoGLM_GUI/static/assets/about-BtBH1xKN.js,sha256=MBfgBt5H-NGe8W3_M2lkv_lL5rCKIW1EdqsfgL-vdV0,155
42
+ AutoGLM_GUI/static/assets/chat-DPzFNNGu.js,sha256=hnXlEg1UU_a367Kfgj9tRjIRranXTaVetAJBBUsOlDY,270658
43
+ AutoGLM_GUI/static/assets/dialog-Dwuk2Hgl.js,sha256=s02rPAWUvpZsR7qeWwsfSho-Vv9uNstjf7FRl6_aVoA,27348
44
+ AutoGLM_GUI/static/assets/index-B_AaKuOT.js,sha256=Y2BcN31l7f24AY1p2MAJAwDpITWCjiDAsRVbG9vzywQ,229
45
+ AutoGLM_GUI/static/assets/index-BjYIY--m.css,sha256=VOiK2srNO8IUiVRALg1ew8UvkNQH7GvaR-pTltZlSDw,74549
46
+ AutoGLM_GUI/static/assets/index-CvQkCi2d.js,sha256=3P-Bg1VTjguxms5oVccNR8yalBjJJKjEciZLrA5ZAyQ,381471
47
+ AutoGLM_GUI/static/assets/logo-Cyfm06Ym.png,sha256=6GRUFH2KNmB4ZmnrmJ1wxpoIYEmOW-__XlmKImyAMKM,4955675
37
48
  AutoGLM_GUI/static/assets/worker-D6BRitjy.js,sha256=RL1NIRIks9dXdDhXOHK1cCg-OELT0uv9a6u_UEHfQ0Q,173494
49
+ AutoGLM_GUI/static/assets/workflows-xX_QH-wI.js,sha256=jJ1JPZZZXB_q69tDrMDdY9YNzmLIYV8JFmSX5KrAQq4,3459
38
50
  phone_agent/__init__.py,sha256=7sCmGiY-ePdb6L08MGG6DkOiu8goop6wq-v2SiM62tE,360
39
51
  phone_agent/agent.py,sha256=1SgHpv70_XbujG1ElYRZbvRO5-d4l7gBgiFRBz_FIH8,8157
40
52
  phone_agent/agent_ios.py,sha256=R7EBsoHVghEUBtI5TB7M0_btpFcb4NHquMNxktrqrJE,9338
@@ -69,8 +81,8 @@ phone_agent/xctest/device.py,sha256=sOAPMoliMIabcrtsmzuGDKnZXtitqlc0lo8RSjQta7A,
69
81
  phone_agent/xctest/input.py,sha256=aMp1YCRGBtGsRMKhA9rrjxuLkri0_k3n6hisi0EBJ2o,8164
70
82
  phone_agent/xctest/screenshot.py,sha256=H6dsQGgf38h8dvuSeigiR2Qr8NucPanIgTK8kjlV9hA,6027
71
83
  scrcpy-server-v3.3.3,sha256=fnAyO6fyWWSd1KzOl6xP77roECssbZHi575hP9U1S-A,90164
72
- autoglm_gui-1.1.0.dist-info/METADATA,sha256=h2I6Xg5pn38Ince-7AnyrvaatCLofWByauGY6zGXNa8,10719
73
- autoglm_gui-1.1.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
74
- autoglm_gui-1.1.0.dist-info/entry_points.txt,sha256=sz4rBO_kgrYmOiT0QnhCCv0b9QqBdWyCjugJgY8AEOI,58
75
- autoglm_gui-1.1.0.dist-info/licenses/LICENSE,sha256=0IkSHDewdtmXnmYzTNq4U47EJYjTuhjQNpT0bZKuqWc,11342
76
- autoglm_gui-1.1.0.dist-info/RECORD,,
84
+ autoglm_gui-1.2.1.dist-info/METADATA,sha256=UZJ6yT-m-qlDuO_dWX8DufuCATkVi-hZ7AosubRzrFY,12453
85
+ autoglm_gui-1.2.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
86
+ autoglm_gui-1.2.1.dist-info/entry_points.txt,sha256=sz4rBO_kgrYmOiT0QnhCCv0b9QqBdWyCjugJgY8AEOI,58
87
+ autoglm_gui-1.2.1.dist-info/licenses/LICENSE,sha256=0IkSHDewdtmXnmYzTNq4U47EJYjTuhjQNpT0bZKuqWc,11342
88
+ autoglm_gui-1.2.1.dist-info/RECORD,,