autoglm-gui 1.3.1__py3-none-any.whl → 1.4.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 (61) hide show
  1. AutoGLM_GUI/__main__.py +0 -4
  2. AutoGLM_GUI/adb_plus/qr_pair.py +8 -8
  3. AutoGLM_GUI/agents/__init__.py +20 -0
  4. AutoGLM_GUI/agents/factory.py +160 -0
  5. AutoGLM_GUI/agents/mai_adapter.py +627 -0
  6. AutoGLM_GUI/agents/protocols.py +23 -0
  7. AutoGLM_GUI/api/__init__.py +50 -7
  8. AutoGLM_GUI/api/agents.py +61 -19
  9. AutoGLM_GUI/api/devices.py +12 -18
  10. AutoGLM_GUI/api/dual_model.py +24 -17
  11. AutoGLM_GUI/api/health.py +13 -0
  12. AutoGLM_GUI/api/layered_agent.py +659 -0
  13. AutoGLM_GUI/api/mcp.py +11 -10
  14. AutoGLM_GUI/api/version.py +23 -10
  15. AutoGLM_GUI/api/workflows.py +2 -1
  16. AutoGLM_GUI/config_manager.py +56 -24
  17. AutoGLM_GUI/device_adapter.py +263 -0
  18. AutoGLM_GUI/device_protocol.py +266 -0
  19. AutoGLM_GUI/devices/__init__.py +49 -0
  20. AutoGLM_GUI/devices/adb_device.py +205 -0
  21. AutoGLM_GUI/devices/mock_device.py +183 -0
  22. AutoGLM_GUI/devices/remote_device.py +172 -0
  23. AutoGLM_GUI/dual_model/decision_model.py +4 -4
  24. AutoGLM_GUI/dual_model/protocols.py +3 -3
  25. AutoGLM_GUI/exceptions.py +3 -3
  26. AutoGLM_GUI/mai_ui_adapter/agent_wrapper.py +291 -0
  27. AutoGLM_GUI/metrics.py +13 -20
  28. AutoGLM_GUI/phone_agent_manager.py +219 -134
  29. AutoGLM_GUI/phone_agent_patches.py +2 -1
  30. AutoGLM_GUI/platform_utils.py +5 -2
  31. AutoGLM_GUI/prompts.py +6 -1
  32. AutoGLM_GUI/schemas.py +45 -14
  33. AutoGLM_GUI/scrcpy_stream.py +17 -13
  34. AutoGLM_GUI/server.py +3 -1
  35. AutoGLM_GUI/socketio_server.py +16 -4
  36. AutoGLM_GUI/state.py +10 -30
  37. AutoGLM_GUI/static/assets/{about-Cj6QXqMf.js → about-_XNhzQZX.js} +1 -1
  38. AutoGLM_GUI/static/assets/chat-DwJpiAWf.js +126 -0
  39. AutoGLM_GUI/static/assets/{dialog-CxJlnjzH.js → dialog-B3uW4T8V.js} +3 -3
  40. AutoGLM_GUI/static/assets/index-Cpv2gSF1.css +1 -0
  41. AutoGLM_GUI/static/assets/{index-C_B-Arvf.js → index-Cy8TmmHV.js} +1 -1
  42. AutoGLM_GUI/static/assets/{index-CxJQuE4y.js → index-UYYauTly.js} +6 -6
  43. AutoGLM_GUI/static/assets/{workflows-BTiGCNI0.js → workflows-Du_de-dt.js} +1 -1
  44. AutoGLM_GUI/static/index.html +2 -2
  45. AutoGLM_GUI/types.py +125 -0
  46. {autoglm_gui-1.3.1.dist-info → autoglm_gui-1.4.1.dist-info}/METADATA +147 -65
  47. {autoglm_gui-1.3.1.dist-info → autoglm_gui-1.4.1.dist-info}/RECORD +58 -39
  48. mai_agent/base.py +137 -0
  49. mai_agent/mai_grounding_agent.py +263 -0
  50. mai_agent/mai_naivigation_agent.py +526 -0
  51. mai_agent/prompt.py +148 -0
  52. mai_agent/unified_memory.py +67 -0
  53. mai_agent/utils.py +73 -0
  54. phone_agent/config/prompts.py +6 -1
  55. phone_agent/config/prompts_zh.py +6 -1
  56. AutoGLM_GUI/config.py +0 -23
  57. AutoGLM_GUI/static/assets/chat-BJeomZgh.js +0 -124
  58. AutoGLM_GUI/static/assets/index-Z0uYCPOO.css +0 -1
  59. {autoglm_gui-1.3.1.dist-info → autoglm_gui-1.4.1.dist-info}/WHEEL +0 -0
  60. {autoglm_gui-1.3.1.dist-info → autoglm_gui-1.4.1.dist-info}/entry_points.txt +0 -0
  61. {autoglm_gui-1.3.1.dist-info → autoglm_gui-1.4.1.dist-info}/licenses/LICENSE +0 -0
@@ -1 +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-CxJQuE4y.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-CxJlnjzH.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};
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-UYYauTly.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-B3uW4T8V.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};
@@ -11,8 +11,8 @@
11
11
  <link rel="icon" type="image/png" sizes="192x192" href="/logo-192.png" />
12
12
  <link rel="icon" type="image/png" sizes="512x512" href="/logo-512.png" />
13
13
  <meta name="theme-color" content="#f5f1e8" />
14
- <script type="module" crossorigin src="/assets/index-CxJQuE4y.js"></script>
15
- <link rel="stylesheet" crossorigin href="/assets/index-Z0uYCPOO.css">
14
+ <script type="module" crossorigin src="/assets/index-UYYauTly.js"></script>
15
+ <link rel="stylesheet" crossorigin href="/assets/index-Cpv2gSF1.css">
16
16
  </head>
17
17
  <body>
18
18
  <div id="app"></div>
AutoGLM_GUI/types.py ADDED
@@ -0,0 +1,125 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Literal
4
+
5
+ from typing_extensions import TypedDict
6
+
7
+ ActionMetadata = Literal["do", "finish", "takeover"]
8
+ PhoneActionType = Literal[
9
+ "Tap", "Swipe", "Type", "Launch", "Wait", "Back", "Home", "Long Press", "Double Tap"
10
+ ]
11
+ MAIActionType = Literal[
12
+ "click",
13
+ "swipe",
14
+ "type",
15
+ "terminate",
16
+ "answer",
17
+ "wait",
18
+ "long_press",
19
+ "double_click",
20
+ "open",
21
+ "system_button",
22
+ "drag",
23
+ ]
24
+ SwipeDirection = Literal["up", "down", "left", "right"]
25
+ SystemButton = Literal["back", "home", "enter"]
26
+ TerminateStatus = Literal["success", "failure"]
27
+ MessageRole = Literal["system", "user", "assistant"]
28
+ ContentType = Literal["text", "image_url"]
29
+
30
+
31
+ class PhoneAgentAction(TypedDict, total=False):
32
+ _metadata: ActionMetadata
33
+ action: PhoneActionType
34
+ element: list[int]
35
+ text: str
36
+ app: str
37
+ start: list[int]
38
+ end: list[int]
39
+ duration: str
40
+ message: str
41
+
42
+
43
+ class MAIAction(TypedDict, total=False):
44
+ action: MAIActionType
45
+ coordinate: list[float]
46
+ direction: SwipeDirection
47
+ text: str
48
+ button: SystemButton
49
+ status: TerminateStatus
50
+ start_coordinate: list[float]
51
+ end_coordinate: list[float]
52
+
53
+
54
+ class SSEThinkingChunkData(TypedDict):
55
+ type: str
56
+ role: str
57
+ chunk: str
58
+
59
+
60
+ class SSEStepData(TypedDict, total=False):
61
+ type: str
62
+ role: str
63
+ step: int
64
+ thinking: str
65
+ action: PhoneAgentAction | None
66
+ success: bool
67
+ finished: bool
68
+
69
+
70
+ class SSEDoneData(TypedDict, total=False):
71
+ type: str
72
+ role: str
73
+ message: str
74
+ steps: int
75
+ success: bool
76
+
77
+
78
+ class SSEErrorData(TypedDict):
79
+ type: str
80
+ role: str
81
+ message: str
82
+
83
+
84
+ SSEEventData = SSEThinkingChunkData | SSEStepData | SSEDoneData | SSEErrorData
85
+
86
+
87
+ class MAIAgentSpecificConfig(TypedDict, total=False):
88
+ history_n: int
89
+ max_pixels: int
90
+ min_pixels: int
91
+ tools: list[dict[str, str]]
92
+ use_mai_prompt: bool
93
+
94
+
95
+ class GLMAgentSpecificConfig(TypedDict, total=False):
96
+ pass
97
+
98
+
99
+ AgentSpecificConfig = MAIAgentSpecificConfig | GLMAgentSpecificConfig
100
+
101
+
102
+ class TextContent(TypedDict):
103
+ type: ContentType
104
+ text: str
105
+
106
+
107
+ class ImageURLContent(TypedDict):
108
+ type: ContentType
109
+ image_url: dict[str, str]
110
+
111
+
112
+ MessageContent = str | list[TextContent | ImageURLContent]
113
+
114
+
115
+ class ChatMessage(TypedDict, total=False):
116
+ role: MessageRole
117
+ content: MessageContent
118
+
119
+
120
+ ConversationContext = list[ChatMessage]
121
+
122
+
123
+ class Observation(TypedDict, total=False):
124
+ screenshot: object
125
+ accessibility_tree: dict[str, object] | None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: autoglm-gui
3
- Version: 1.3.1
3
+ Version: 1.4.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
@@ -23,11 +23,15 @@ Requires-Python: >=3.10
23
23
  Requires-Dist: fastapi>=0.124.0
24
24
  Requires-Dist: fastmcp>=2.0.0
25
25
  Requires-Dist: httpx[socks]>=0.28.1
26
+ Requires-Dist: jinja2>=3.1.0
26
27
  Requires-Dist: loguru>=0.7.3
28
+ Requires-Dist: numpy>=1.24.0
29
+ Requires-Dist: openai-agents>=0.6.4
27
30
  Requires-Dist: openai>=2.9.0
28
31
  Requires-Dist: pillow>=11.3.0
29
32
  Requires-Dist: prometheus-client>=0.21.0
30
33
  Requires-Dist: python-socketio>=5.11.0
34
+ Requires-Dist: pyyaml>=6.0.3
31
35
  Requires-Dist: uvicorn[standard]>=0.38.0
32
36
  Requires-Dist: zeroconf>=0.148.0
33
37
  Description-Content-Type: text/markdown
@@ -75,9 +79,9 @@ AutoGLM 手机助手的现代化 Web 图形界面 - 让 AI 自动化操作 Andro
75
79
 
76
80
  | 操作系统 | 下载链接 | 说明 |
77
81
  |---------|---------|------|
78
- | 🪟 **Windows** (x64) | [📦 下载便携版 EXE](https://github.com/suyiiyii/AutoGLM-GUI/releases/download/v1.3.1/AutoGLM.GUI.1.3.1.exe) | 适用于 Windows 10/11,免安装 |
79
- | 🍎 **macOS** (Apple Silicon) | [📦 下载 DMG](https://github.com/suyiiyii/AutoGLM-GUI/releases/download/v1.3.1/AutoGLM.GUI-1.3.1-arm64.dmg) | 适用于 M 芯片 Mac |
80
- | 🐧 **Linux** (x64) | [📦 下载 AppImage](https://github.com/suyiiyii/AutoGLM-GUI/releases/download/v1.3.1/AutoGLM.GUI-1.3.1.AppImage) \| [deb](https://github.com/suyiiyii/AutoGLM-GUI/releases/download/v1.3.1/autoglm-gui_1.3.1_amd64.deb) \| [tar.gz](https://github.com/suyiiyii/AutoGLM-GUI/releases/download/v1.3.1/autoglm-gui-1.3.1.tar.gz) | 通用格式,支持主流发行版 |
82
+ | 🪟 **Windows** (x64) | [📦 下载便携版 EXE](https://github.com/suyiiyii/AutoGLM-GUI/releases/download/v1.4.1/AutoGLM.GUI.1.4.1.exe) | 适用于 Windows 10/11,免安装 |
83
+ | 🍎 **macOS** (Apple Silicon) | [📦 下载 DMG](https://github.com/suyiiyii/AutoGLM-GUI/releases/download/v1.4.1/AutoGLM.GUI-1.4.1-arm64.dmg) | 适用于 M 芯片 Mac |
84
+ | 🐧 **Linux** (x64) | [📦 下载 AppImage](https://github.com/suyiiyii/AutoGLM-GUI/releases/download/v1.4.1/AutoGLM.GUI-1.4.1.AppImage) \| [deb](https://github.com/suyiiyii/AutoGLM-GUI/releases/download/v1.4.1/autoglm-gui_1.4.1_amd64.deb) \| [tar.gz](https://github.com/suyiiyii/AutoGLM-GUI/releases/download/v1.4.1/autoglm-gui-1.4.1.tar.gz) | 通用格式,支持主流发行版 |
81
85
 
82
86
  </div>
83
87
 
@@ -105,27 +109,27 @@ uvx autoglm-gui
105
109
 
106
110
  ## 📸 界面预览
107
111
 
112
+ 快速跳转: [普通模式](#mode-classic) · [双模型协作(增强)](#mode-dual) · [分层代理(增强)](#mode-layered)
113
+
108
114
  ### 双模型协作架构
109
115
 
110
- **决策大模型(GLM-4.7)+ 视觉小模型(AutoGLM-Phone)** 双模型协作系统,智能规划与精准执行分离,更好地处理复杂任务
116
+ **决策大模型(如 GLM-4.7)+ 视觉小模型(AutoGLM-Phone)**:大模型负责规划与纠错,小模型负责观察与执行,适合更复杂、更长流程的任务。
111
117
 
112
- **架构特点:**
113
- - 🧠 **决策大模型**:负责任务分析、计划制定、复杂决策和内容生成
114
- - 👁️ **视觉小模型**:负责屏幕识别、定位元素和执行具体操作
115
- - 🔄 **智能协作**:大模型规划任务,小模型批量执行,异常时自动重新规划
116
- - ⚡ **三种模式**:
117
- - **DEEP**:深度思考模式,适合复杂任务,每步都详细分析
118
- - **FAST**:快速响应模式,适合简单任务,简洁高效
119
- - **TURBO**:极速模式,一次性生成操作序列,性能最优
118
+ - 🧠 **决策层**:任务理解 / 步骤规划 / 异常纠错
119
+ - 👁️ **执行层**:识别界面元素并点击/滑动/输入完成操作
120
+ - 🔄 **运行方式**:规划 → 执行 → 反馈;必要时自动重规划
120
121
 
121
- **核心优势:**
122
- - 📈 更强智能:大模型提供更深入的任务理解和规划能力
123
- - 🛡️ 异常恢复:自动检测屏幕卡死、操作失败等异常,智能重试和重新规划
124
- - 💰 成本优化:TURBO 模式大幅减少大模型调用次数,降低 API 成本
125
- - 📊 实时可见:流式展示思考过程,透明化决策逻辑
122
+ **模式选择(Thinking Mode)**:TURBO(更省更快,推荐常规流程)/ DEEP(更稳,适合复杂任务)/ FAST(更快,适合轻量任务)。
126
123
 
127
124
  <img width="879" height="849" alt="双模型协作界面" src="https://github.com/user-attachments/assets/15e5cf51-5a19-403d-9af3-46f77c2068f5" />
128
125
 
126
+ ### 分层代理
127
+
128
+ **分层代理(Layered Agent)** 是更“严格”的两层结构:**规划层**专注任务拆解与多轮推理,**执行层**专注观察与操作。规划层会通过工具调用(可在界面中看到每次调用与结果)来驱动执行层完成一个个原子子任务,便于边执行边调整策略,适合需要多轮交互/推理的高级任务。
129
+
130
+ <img width="939" height="851" alt="图片" src="https://github.com/user-attachments/assets/c054d998-726d-48ed-99e7-bb33581b3745" />
131
+
132
+
129
133
  ### 任务开始
130
134
  ![任务开始](https://github.com/user-attachments/assets/b8cb6fbc-ca5b-452c-bcf4-7d5863d4577a)
131
135
 
@@ -281,66 +285,78 @@ AutoGLM-GUI 支持同时控制多个 Android 设备:
281
285
  4. **对话** - 描述你想要做什么(例如:"去美团点一杯霸王茶姬的伯牙绝弦")
282
286
  5. **观察** - Agent 会逐步执行操作,每一步的思考过程和动作都会实时显示
283
287
 
284
- ### 🧠 双模型协作模式
288
+ ### 🤖 选择 Agent 类型
289
+
290
+ 在初始化设备时,可以选择不同的 Agent 类型(默认:GLM Agent):
291
+
292
+ - **GLM Agent**:基于 GLM 模型优化,成熟稳定,适合大多数任务
293
+ - **MAI Agent**:阿里通义团队开发的 Mobile Agent,支持多张历史截图上下文,适合复杂任务
294
+
295
+ MAI Agent 可配置参数:
296
+ - `history_n`:历史截图数量(1-10,默认:3)
297
+
298
+ <a id="mode-classic"></a>
299
+ ### 🌿 普通模式(单模型 / Open AutoGLM)
300
+
301
+ 这是**开源 AutoGLM-Phone 的“原生形态”**:由一个视觉模型直接完成「理解任务 → 规划步骤 → 观察屏幕 → 执行动作」的完整闭环。
285
302
 
286
- 双模型模式通过**决策大模型**和**视觉小模型**的协作,实现更强大的任务执行能力:
303
+ - **优点**:配置最简单,上手最快
304
+ - **适用场景**:目标明确、步骤较少的任务(例如打开应用、简单导航)
287
305
 
288
- #### 工作模式选择
306
+ <a id="mode-dual"></a>
307
+ ### 🧠 双模型协作模式(增强)
289
308
 
290
- 在设备面板上,可以选择三种双模型工作模式��
309
+ 双模型模式通过**决策大模型(负责规划/纠错)** + **视觉小模型(负责观察/操作)**协作,提升复杂任务的稳定性与可控性。
291
310
 
292
- **1. 🚀 TURBO 模式(推荐,性能最优)**
293
- - **特点**:一次性生成完整操作序列,批量执行
294
- - **优势**:
295
- - 大模型调用次数最少,API 成本最低
296
- - 执行速度最快,适合可预测的常规任务
297
- - 自动异常检测和恢复,遇到问题自动重新规划
298
- - **适用场景**:订外卖、打车、应用内导航等流程明确的任务
299
- - **示例**:`"打开微信给张三发消息说我到了"`
311
+ #### 工作模式(Thinking Mode)
300
312
 
301
- **2. 🎯 DEEP 模式(深度思考)**
302
- - **特点**:每步都详细分析,决策最智能
303
- - **优势**:
304
- - 处理复杂任务能力强
305
- - 每步都有完整的思考过程
306
- - 异常处理更全面
307
- - **适用场景**:需要智能决策的复杂任务
308
- - **示例**:`"在小红书上找5个关于健身的帖子并评论"`
313
+ - **🚀 TURBO(推荐)**:大模型先生成“操作序列”,视觉模型批量执行;仅在异常时触发重规划(通常 1-2 次大模型调用)
314
+ - **🎯 DEEP**:每一步都调用大模型做决策与分析,最稳但成本/耗时更高
315
+ - **⚡ FAST**:同样逐步决策,但提示词更短、响应更快,适合轻量任务
309
316
 
310
- **3. ⚡ FAST 模式(快速响应)**
311
- - **特点**:简化提示词,快速决策
312
- - **优势**:
313
- - 响应速度快
314
- - 适合简单任务
315
- - **适用场景**:简单操作、明确指令
316
- - **示例**:`"打开美团"`
317
+ #### 配置要点
317
318
 
318
- #### 双模型配置
319
+ - **决策大模型**:建议使用推理/规划能力较强的模型(如 GLM-4.7、GPT-4、Claude 等)
320
+ - **视觉小模型**:建议使用具备 GUI 观察与操作能力的模型(如 AutoGLM-Phone-9B / `autoglm-phone`)
319
321
 
320
- **决策大模型配置**(需要较高智能的模型):
321
- - **推荐模型**:GLM-4.7、GPT-4、Claude
322
- - **智谱 BigModel**:
323
- - Base URL: `https://open.bigmodel.cn/api/paas/v4`
324
- - Model: `glm-4.7`
325
- - API Key: 你的智谱 API Key
322
+ <a id="mode-layered"></a>
323
+ ### 🧩 分层代理模式(Layered Agent,增强 / 实验性)
326
324
 
327
- **视觉小模型配置**(需要视觉能力的模型):
328
- - **推荐模型**:AutoGLM-Phone-9B
329
- - **智谱 BigModel**:
330
- - Base URL: `https://open.bigmodel.cn/api/paas/v4`
331
- - Model: `autoglm-phone`
332
- - API Key: 你的智谱 API Key
325
+ 分层代理模式是更“严格”的两层结构:**规划层**专注拆解与推理,**执行层**专注观察与操作,二者通过工具调用协作完成任务。
333
326
 
327
+ - **工作方式**:规划层(决策模型)会调用工具(如 `list_devices()` / `chat(device_id, message)`)去驱动执行层;你能在界面里看到每次工具调用与返回结果
328
+ - **执行粒度**:执行层每次只做一个“原子子任务”,并有步数上限(例如每次最多 5 步),便于规划层按反馈动态调整策略
329
+ - **适用场景**:需要多轮推理、需要“边看边问边改计划”的复杂任务(例如浏览/筛选/对比、多轮表单填写等)
330
+ - **重要限制**:执行层不负责“记笔记/保存中间信息/直接提取文本变量”;规划层需要信息时必须通过提问让执行层把屏幕内容“念出来”
334
331
 
335
- 假设一个任务需要 10 步操作:
332
+ ### 🎭 三种工作模式对比
336
333
 
337
- | 模式 | 大模型调用次数 | 说明 |
338
- |-----|--------------|------|
339
- | TURBO | 1-2 次 | 1次规划 + 异常时1次重新规划 |
340
- | DEEP | 10 次 | 每步都调用大模型决策 |
341
- | FAST | 10 次 | 每步都调用大模型(简化版) |
334
+ AutoGLM-GUI 提供了三种不同的代理工作模式,适用于不同的使用场景:
342
335
 
343
- **结论**:TURBO 模式可节省 **80-90%** 的大模型 API 成本
336
+ #### 1️⃣ 经典模式(Classic Mode)
337
+ - **架构**:单一 `autoglm-phone` 视觉模型直接处理(即普通 Open AutoGLM 的体验)
338
+ - **适用场景**:简单、明确的任务
339
+ - **特点**:配置简单,适合快速上手
340
+
341
+ #### 2️⃣ 双模型协作(Dual Model)
342
+ - **架构**:决策大模型(GLM-4.7/GPT-4)+ 视觉小模型(autoglm-phone)
343
+ - **适用场景**:需要智能规划的中高复杂度任务
344
+ - **特点**:支持 TURBO/DEEP/FAST 三种思考模式,在成本、速度与稳定性之间做权衡
345
+
346
+ #### 3️⃣ 分层代理(Layered Agent)🆕 实验性功能
347
+ - **架构**:基于 Agent SDK 的分层任务执行系统
348
+ - **规划层**:决策模型作为高级智能中枢,负责任务拆解和多轮推理
349
+ - **执行层**:autoglm-phone 作为执行者,只负责观察和操作
350
+ - **适用场景**:需要多轮交互和复杂推理的高级任务
351
+ - **特点**:规划层通过工具调用驱动执行层,过程更透明、更便于调试与迭代策略
352
+
353
+ **选择建议**:
354
+ - 🚀 **常规任务(订外卖、打车)**:双模型 TURBO 模式
355
+ - 🎯 **复杂任务(浏览并评论帖子)**:双模型 DEEP 模式
356
+ - 🏗️ **需要多轮推理的任务**:分层代理模式
357
+
358
+ > 💬 **我们需要你的反馈!**
359
+ > 不同的任务场景适合不同的模式,我们正在持续优化这些模式的性能和易用性。如果你在使用过程中有任何建议、遇到问题或发现某个模式特别好用/不好用,欢迎通过 [GitHub Issues](https://github.com/suyiiyii/AutoGLM-GUI/issues) 或 [QQ 交流群](https://qm.qq.com/q/J5eAs9tn0W) 告诉我们。你的反馈将帮助我们改进产品!
344
360
 
345
361
  ### 手动控制模式
346
362
 
@@ -399,6 +415,7 @@ uv run autoglm-gui --base-url http://localhost:8080/v1 --reload
399
415
 
400
416
  # 前端开发服务器(热重载)
401
417
  cd frontend && pnpm dev
418
+ ```
402
419
 
403
420
  ### 构建和打包
404
421
 
@@ -410,6 +427,71 @@ uv run python scripts/build.py
410
427
  uv run python scripts/build.py --pack
411
428
  ```
412
429
 
430
+ ## 🐳 Docker 部署
431
+
432
+ AutoGLM-GUI 支持 Docker 容器化部署,适合服务器端远程控制 Android 设备的场景。
433
+
434
+ ### 快速启动
435
+
436
+ ```bash
437
+ # 1. 克隆仓库
438
+ git clone https://github.com/suyiiyii/AutoGLM-GUI.git
439
+ cd AutoGLM-GUI
440
+
441
+ # 2. 创建环境变量文件
442
+ cat > .env << EOF
443
+ AUTOGLM_BASE_URL=https://open.bigmodel.cn/api/paas/v4
444
+ AUTOGLM_MODEL_NAME=autoglm-phone
445
+ AUTOGLM_API_KEY=sk-your-api-key
446
+ EOF
447
+
448
+ # 3. 启动容器
449
+ docker-compose up -d
450
+
451
+ # 4. 访问 http://localhost:8000
452
+ ```
453
+
454
+ ### 手动构建
455
+
456
+ ```bash
457
+ # 构建镜像
458
+ docker build -t autoglm-gui:latest .
459
+
460
+ # 运行容器 (Linux 推荐 host 网络)
461
+ docker run -d --network host \
462
+ -e AUTOGLM_BASE_URL=https://open.bigmodel.cn/api/paas/v4 \
463
+ -e AUTOGLM_MODEL_NAME=autoglm-phone \
464
+ -e AUTOGLM_API_KEY=sk-xxx \
465
+ -v autoglm_config:/root/.config/autoglm \
466
+ -v autoglm_logs:/app/logs \
467
+ autoglm-gui:latest
468
+ ```
469
+
470
+ ### 环境变量
471
+
472
+ | 变量 | 说明 | 默认值 |
473
+ |------|------|--------|
474
+ | `AUTOGLM_BASE_URL` | 模型 API 地址 | (必填) |
475
+ | `AUTOGLM_MODEL_NAME` | 模型名称 | `autoglm-phone` |
476
+ | `AUTOGLM_API_KEY` | API 密钥 | (必填) |
477
+
478
+ ### 连接远程设备
479
+
480
+ Docker 容器中连接 Android 设备推荐使用 **WiFi 调试**:
481
+
482
+ 1. 在 Android 设备上开启「开发者选项」→「无线调试」
483
+ 2. 记录设备的 IP 地址和端口号
484
+ 3. 在 Web 界面点击「添加无线设备」→ 输入 IP:端口 → 连接
485
+
486
+ > ⚠️ **注意**:二维码配对功能在 Docker bridge 网络中可能受限(依赖 mDNS 多播)。Linux 系统建议使用 `network_mode: host`。
487
+
488
+ ### 健康检查
489
+
490
+ ```bash
491
+ # 检查服务状态
492
+ curl http://localhost:8000/api/health
493
+ ```
494
+
413
495
  ## 📝 开源协议
414
496
 
415
497
  Apache License 2.0
@@ -1,21 +1,23 @@
1
1
  AutoGLM_GUI/__init__.py,sha256=ic002QIj6sw9cyhh7e_60DFIb7omtPcF01-L6M4lllM,2176
2
- AutoGLM_GUI/__main__.py,sha256=ogFi2KO9kCn47ZvT5jqBzoBTnqG191TFKfEM9lcal1w,6390
3
- AutoGLM_GUI/config.py,sha256=SRBPcIKqR5HxrxiiwpOUAPxHvp-36igtFhDEptG_Zz4,619
4
- AutoGLM_GUI/config_manager.py,sha256=L-E8scI4QeIdVcdhjGxWfPwYOXBbFRRSTzPiR3d6E9g,22033
2
+ AutoGLM_GUI/__main__.py,sha256=ygs0rleqyOdDOZBVc7eZoPOjrVmAwKptYjeWOwTtvMc,6251
3
+ AutoGLM_GUI/config_manager.py,sha256=Jy10Ka5A-c7Hq94zc3nPUXjV6uqgXW2Dqhip4TG7yz4,23603
4
+ AutoGLM_GUI/device_adapter.py,sha256=eA0bOlU-lzJig9cNCZrS0FqApEVbSOg7oke5P1iJ1rA,9011
5
5
  AutoGLM_GUI/device_manager.py,sha256=dAHP29a63H6GY43f715dOlJdwOz1eWa2XnPf2_SbIiY,26923
6
- AutoGLM_GUI/exceptions.py,sha256=dPKKuRPbsGMgUtPVZuxny8MNHswS78WzUepYtuZGZQc,3457
6
+ AutoGLM_GUI/device_protocol.py,sha256=PyjCckBz8dtU6XUSqLy2epYbIsREoA4xcfOLktYEFNo,6919
7
+ AutoGLM_GUI/exceptions.py,sha256=QXTQzxdbEHDUrtaD1G4zuKZydFJO5ymNvuo8ZvVjUdA,3487
7
8
  AutoGLM_GUI/logger.py,sha256=wLzjbRqsHAsOtI9yB0bcUZFVzgGK6qM8330std6FjVw,2553
8
- AutoGLM_GUI/metrics.py,sha256=l8KIGfiDlAccLOmk7nneacJMs3tlIdCFyXe3szodUE0,9442
9
- AutoGLM_GUI/phone_agent_manager.py,sha256=2ofFw9wdE1cs8SMo8OGbcs-J54ZGxDIOgVBYm-mT3oM,27532
10
- AutoGLM_GUI/phone_agent_patches.py,sha256=-RfpL9RHxOI2GyC2v8L49S0gXiK8l1cldEX3Ysrpl5c,4887
11
- AutoGLM_GUI/platform_utils.py,sha256=bYlQGAYYpU1ZqOUD-F-fIzpEA5z53dMFfaErsFhAvYk,2357
12
- AutoGLM_GUI/prompts.py,sha256=AoTEOIF_Ik3WtzluLIxE9sCjDnEa2bMJHmxf_q0Rpg8,4467
13
- AutoGLM_GUI/schemas.py,sha256=2ah_hfnripVTmpvSdDEeEcnDLS0pEqyY6iPeNGQQ31E,16417
9
+ AutoGLM_GUI/metrics.py,sha256=L72hzMNzw1eemQLz6Hoth5sRW6OQlI4Np5BIFSFwl1c,8994
10
+ AutoGLM_GUI/phone_agent_manager.py,sha256=6ySHfglvMqXv8lLPAKoTE59Mi_8NLWjlAJ63ejQx0Ms,32573
11
+ AutoGLM_GUI/phone_agent_patches.py,sha256=xbuD7rBVPyCQ7wMb4MNW-cvSDIdtup7pJT_KvB88foM,4948
12
+ AutoGLM_GUI/platform_utils.py,sha256=fAu_3rHYVlIpDxs09eCkJBUI5_qb2_cHu1si6FuuM1U,2448
13
+ AutoGLM_GUI/prompts.py,sha256=lC5UktW0KRpWKij6T0GG1OrNKV9gAfM6dUcp_tjX7mo,4814
14
+ AutoGLM_GUI/schemas.py,sha256=udgl1SY5c3EbklkSQKrLRu257Wf6w4IFC6S1MmN_mp0,17707
14
15
  AutoGLM_GUI/scrcpy_protocol.py,sha256=h6AtAGq3zMM30FWM7EYiYKJz7BDikpNCOjcKtFcRx3s,997
15
- AutoGLM_GUI/scrcpy_stream.py,sha256=-tGyDNaML1TnZLzTNiVUgxMTv_7TQS0CKZ35G2RuPfg,16595
16
- AutoGLM_GUI/server.py,sha256=GGGz7llG5rflIpO61nil8Zde12PLkv6OIzghuxwSkoI,249
17
- AutoGLM_GUI/socketio_server.py,sha256=__fWLlqBYFFl1YXanm8Vls-_Wr8pQ68kU7N_3q4WZfY,3535
18
- AutoGLM_GUI/state.py,sha256=ziw-t69JrojUOfzuNmVrZPc6J3-adBFpN4J3Xhq1sdU,1825
16
+ AutoGLM_GUI/scrcpy_stream.py,sha256=LScxoEXDQu-Vn3TeG5y0fJ4Z66kMVOUdCkrgYq_tTlc,16913
17
+ AutoGLM_GUI/server.py,sha256=Fo2Afl6CFT5B6MBggvR0n_savNxqxW22bFdN51NXRJs,299
18
+ AutoGLM_GUI/socketio_server.py,sha256=ekEyyuIR1CwREDhDyGhIu8wxJ9S42Cemrf4fOdRxNKs,3826
19
+ AutoGLM_GUI/state.py,sha256=qGnqZKdWFDpegVBLB4KHDbzfAVWc89C0AiCum_R9LSk,912
20
+ AutoGLM_GUI/types.py,sha256=LEheZvDfeBrR2Hh_bEwRx3x_8qNDlEV7t8-9ymzzjFE,2532
19
21
  AutoGLM_GUI/version.py,sha256=z0MPXu-k9UO7RXxVGcAwim2M3yklrRqLwgOq66zSdzo,178
20
22
  AutoGLM_GUI/workflow_manager.py,sha256=AZ_zrhSeEvtlF1HTNMNS3f4qBwRuX-bzImdZEVZVXV8,5552
21
23
  AutoGLM_GUI/adb_plus/__init__.py,sha256=YwYYbeMrsKv8BGPcD6dv0PB8-wW93Ik9pMHo02i8QoU,945
@@ -24,39 +26,50 @@ AutoGLM_GUI/adb_plus/ip.py,sha256=dt6ffIjiW_jGoEqUKUDi9fRGbWN1W9LxfT8rWIqgS-0,22
24
26
  AutoGLM_GUI/adb_plus/keyboard_installer.py,sha256=dsQqLgWd2kkTeljdTTT77mFwJpcM-IJecMcJJEutbHo,13541
25
27
  AutoGLM_GUI/adb_plus/mdns.py,sha256=AwQ4MQsPKVW1tPjIUpOWvBQGlJxvVrO9eTvxoqsgPUo,5862
26
28
  AutoGLM_GUI/adb_plus/pair.py,sha256=3UElG0yjylhmZBtPpDER2BNMZs9CwDeavjuQOwOC4sw,1945
27
- AutoGLM_GUI/adb_plus/qr_pair.py,sha256=K0Jnn5FcuQVU7cM74BTi7WdKh3UF9H85qyua9YPwIEE,13574
29
+ AutoGLM_GUI/adb_plus/qr_pair.py,sha256=WHvx76q2xfTnJPXf5y_qI9cNuiBC_KeWwqYpuROdPkw,13571
28
30
  AutoGLM_GUI/adb_plus/screenshot.py,sha256=pr7BpmUcGZO9rthpDeMRn4D1oAGX9aEEVL3ZnTQzrIo,3211
29
31
  AutoGLM_GUI/adb_plus/serial.py,sha256=lDbBXTIoOJ5lbFj50K5X7PZnfpKt1vRpFiWVjolfEhQ,3142
30
32
  AutoGLM_GUI/adb_plus/touch.py,sha256=7cyMon9nOd6zQvZdHK7BHWoRLLWkdK-qWfTuSFfFzJA,2301
31
33
  AutoGLM_GUI/adb_plus/version.py,sha256=u5u1N40izJceeORN9kFhyz0wq_hZtlwBXaiytfA3px8,2428
32
- AutoGLM_GUI/api/__init__.py,sha256=cfIrodErBhJja0DRjpsifVToZyAzuP9TULfbj4ZZsyk,3859
33
- AutoGLM_GUI/api/agents.py,sha256=xt1LJKSvwmyU5moqQVKx5hiYGHNhn_eCu3nlqaQ_5l8,19081
34
+ AutoGLM_GUI/agents/__init__.py,sha256=-LiMODXhqyXEcsMLOMGgnAhn8xIGokzWE4RyfZVcx_4,430
35
+ AutoGLM_GUI/agents/factory.py,sha256=3_hmikWufNBHn-eg1rLAWqe9mPBYpzTBeNDADPOMoIY,4969
36
+ AutoGLM_GUI/agents/mai_adapter.py,sha256=rUxw1LtHtKtfhLUDbQdbKWlsDMirNqAwBdpwH7wf2nY,21132
37
+ AutoGLM_GUI/agents/protocols.py,sha256=3x3xutUZpF4BFXj0kwp8ZbGA39IIMSU9ymTtDnuoBfs,559
38
+ AutoGLM_GUI/api/__init__.py,sha256=GtfuNa-G6SdeWD5_Zj99hvkXiKPYOZ3_YTysrtrGpSk,5420
39
+ AutoGLM_GUI/api/agents.py,sha256=GtAwiakLxI3fAOaFmNfYerNw-QsUFmiIVb1INAWrJS8,20661
34
40
  AutoGLM_GUI/api/control.py,sha256=G-7hfdqTl5fq-UXOwE2CI_HMbfmRH1Vd589t2FTNZyY,3155
35
- AutoGLM_GUI/api/devices.py,sha256=AzHUwFGjaj5xaHMmDylyNy0CUGZQHwlCdE3t41azqQk,11186
36
- AutoGLM_GUI/api/dual_model.py,sha256=50OFx8X-phl7XfArDLHsL4t_cfosp5tsN5JRrUjXOiU,10336
37
- AutoGLM_GUI/api/mcp.py,sha256=5zuG81kTGcU3niD6mmsQOjxVNN15ilsmxYpEHxyTv7M,4683
41
+ AutoGLM_GUI/api/devices.py,sha256=Z_DAPrsPo9DhZSZl29yFGF_ml6obZNQDI-p4Co9oXGI,11088
42
+ AutoGLM_GUI/api/dual_model.py,sha256=PYKM9pDcSWpRMwko0aBJ5M8ekkGd9c98YiMoPQ9Jg0k,10648
43
+ AutoGLM_GUI/api/health.py,sha256=ZedFUv-IHst_YUyeQ_MpL5JXOKuOhWVlHBVwAY3MM0I,266
44
+ AutoGLM_GUI/api/layered_agent.py,sha256=Ts8R5i11woTFHHHUlAOATb5xRVy3TY9MSwfte3iUsSI,26297
45
+ AutoGLM_GUI/api/mcp.py,sha256=ppqzBxiS_8tUeJ5P8AszH_4m6q0sNe0oT2SCU_uISks,4625
38
46
  AutoGLM_GUI/api/media.py,sha256=Ioncwd68CNkYvqmeTJJ3P5I1rjWfw6PM4WPz5Ixx8vI,1631
39
47
  AutoGLM_GUI/api/metrics.py,sha256=2h5MnUiMTRAshD6nvcarLVoSlOjtlyVAGg-LRXq03vQ,941
40
- AutoGLM_GUI/api/version.py,sha256=ZN99iH2PA_qx5A1fnSEO-Yihh4K7Bc4r1jOnP6IcXZo,5861
41
- AutoGLM_GUI/api/workflows.py,sha256=dis4k8b-xTYL99qlSYev-Qo5a7z9XdwA1xyC8fRJGLE,2360
48
+ AutoGLM_GUI/api/version.py,sha256=DYiSNNykJsxOXO1zvf3w5AcAtQJTs2c-qtA1HRVihx0,6085
49
+ AutoGLM_GUI/api/workflows.py,sha256=waYwlm2HxwkcfZwp7Bm2Z2l_bms6UmOy2xJEU9B_t0s,2431
50
+ AutoGLM_GUI/devices/__init__.py,sha256=3RHDxS3feJ1jGdWbDKeOHSFUogmexcEr9lpcXWhlnjg,1471
51
+ AutoGLM_GUI/devices/adb_device.py,sha256=9xOMQupSdtnr-wxJRcWhzfjisrwUNCrjxoi8LoMuweM,6406
52
+ AutoGLM_GUI/devices/mock_device.py,sha256=Fnf9q-tjdqUZ-jKRf2cGbguAWAQhWr3qwVcFC4E4FCo,5700
53
+ AutoGLM_GUI/devices/remote_device.py,sha256=x5MDsHwYj5YHR9KBPfjntJA8W8jpKoJwZ4vxslZFYUE,5566
42
54
  AutoGLM_GUI/dual_model/__init__.py,sha256=EQSMFAZ4NvZZywfnEJtDT9JrBJ4KuKWtGUHX4KcJIyY,1179
43
- AutoGLM_GUI/dual_model/decision_model.py,sha256=05_x2pTFdvlPU6s5RRyU44cvJFi58qtyrk6Bz-zIBto,21833
55
+ AutoGLM_GUI/dual_model/decision_model.py,sha256=4UPTFikplV1GDnKEJNxNTMEXfgB2wjnstYL-yGXaI2g,21925
44
56
  AutoGLM_GUI/dual_model/dual_agent.py,sha256=HIw6Z5Ae9UH5-JEk9IPI2ry4uodvN-qdUQSIYrU0ecc,31574
45
- AutoGLM_GUI/dual_model/protocols.py,sha256=8FaqjYWoreM0730nmwfO3M8AQkQvAhvAn0mNP_5DvY0,10604
57
+ AutoGLM_GUI/dual_model/protocols.py,sha256=CZEqXUgsCoBeq7u1Ne43R031BjojGHvsZgvZqVn7Dh0,10534
46
58
  AutoGLM_GUI/dual_model/vision_model.py,sha256=Vaj-BVWVZpedUbAVr-dl-eXUQ2IHaQpo0P1AIBuTvdg,14440
59
+ AutoGLM_GUI/mai_ui_adapter/agent_wrapper.py,sha256=6VZqsPlRHthjf0Q5tJzH7RqNc-zdrRryPnKPCyyJVkY,9322
47
60
  AutoGLM_GUI/static/favicon.ico,sha256=uB4wrcENiFaF-K4V-FzNp51XLW8GC4-ujpBDHgISfGM,781
48
- AutoGLM_GUI/static/index.html,sha256=OihSxUZbVuog-uKRlKJm7z-9ciIUzZZmD-LTOO-ylEU,761
61
+ AutoGLM_GUI/static/index.html,sha256=8GRBiZjc-NI6PxboyyZ8QmZrGtGIrb2Y41tbWR3w8TE,761
49
62
  AutoGLM_GUI/static/logo-192.png,sha256=FOXgZxFrN0ZleO0VjlCnvD5cDkd1okJPkwPDZqsflNs,35243
50
63
  AutoGLM_GUI/static/logo-512.png,sha256=HlwSg09dQ3_Jtb09Ght4l2VK3YNLZlP_941LCdpDkWk,251598
51
- AutoGLM_GUI/static/assets/about-Cj6QXqMf.js,sha256=QjkdIH7LRF252usF5VadH_7-Md7UIL_tV5tkiZsPk9g,155
52
- AutoGLM_GUI/static/assets/chat-BJeomZgh.js,sha256=oggeC1AB8J_9IGzqIsmnBYJViHItGiKxcKEWWE5xL7E,292263
53
- AutoGLM_GUI/static/assets/dialog-CxJlnjzH.js,sha256=LZyWNRMOb5-hES970WBDI84y1nLIiAeQMC9MJ2MWusE,27378
54
- AutoGLM_GUI/static/assets/index-C_B-Arvf.js,sha256=XOtu1RQ4Z8AkE1qgs0SsyHKUJFUPbUZUEZ4cxXzAnPg,229
55
- AutoGLM_GUI/static/assets/index-CxJQuE4y.js,sha256=g1vt8BZfyS7_g_MmpKnC_QpxISwX-wZanr8OFi0LBGI,385475
56
- AutoGLM_GUI/static/assets/index-Z0uYCPOO.css,sha256=VqlMaGxeOJCfsdpqbx26aK2y6mcrM6AbuKdlBFRCkT0,78175
64
+ AutoGLM_GUI/static/assets/about-_XNhzQZX.js,sha256=SmhdB_v2cKcfR7bxET7KdyIAIR7-zR2aAAPrQl-OZgo,155
65
+ AutoGLM_GUI/static/assets/chat-DwJpiAWf.js,sha256=YWM2KdefYkk3dvykyrhN1_kOt5p9aBPdDh2tL9Txs20,321638
66
+ AutoGLM_GUI/static/assets/dialog-B3uW4T8V.js,sha256=ZVyV1aFhZSgX4eNo7QXs1EgPY7zxjnzIY1jLCH491A4,27378
67
+ AutoGLM_GUI/static/assets/index-Cpv2gSF1.css,sha256=k7xMpqu3sXEnofUa3E6k2dI76d3lRRlBZbCBZml3Xos,80508
68
+ AutoGLM_GUI/static/assets/index-Cy8TmmHV.js,sha256=BOHPeP6BPgHKbLar3Q357uWM_mkYSpHXpZrOsGkXijg,229
69
+ AutoGLM_GUI/static/assets/index-UYYauTly.js,sha256=y0cmKh3RwdWH85mKmevbxyr9czFvIYGQLpdODbfOgwY,389521
57
70
  AutoGLM_GUI/static/assets/logo-Cyfm06Ym.png,sha256=6GRUFH2KNmB4ZmnrmJ1wxpoIYEmOW-__XlmKImyAMKM,4955675
58
71
  AutoGLM_GUI/static/assets/worker-D6BRitjy.js,sha256=RL1NIRIks9dXdDhXOHK1cCg-OELT0uv9a6u_UEHfQ0Q,173494
59
- AutoGLM_GUI/static/assets/workflows-BTiGCNI0.js,sha256=jfbJ5u-IRcPp6okVJjTcIOSauneXmtXTqFuHjl6TidE,3459
72
+ AutoGLM_GUI/static/assets/workflows-Du_de-dt.js,sha256=f9FeE4WAt69qNniqvi5i71iU-PbkVxzpoCrTwNYxrys,3459
60
73
  phone_agent/__init__.py,sha256=7sCmGiY-ePdb6L08MGG6DkOiu8goop6wq-v2SiM62tE,360
61
74
  phone_agent/agent.py,sha256=1SgHpv70_XbujG1ElYRZbvRO5-d4l7gBgiFRBz_FIH8,8157
62
75
  phone_agent/agent_ios.py,sha256=R7EBsoHVghEUBtI5TB7M0_btpFcb4NHquMNxktrqrJE,9338
@@ -74,9 +87,9 @@ phone_agent/config/apps.py,sha256=D9HcsGzqwJL3g1ZRS4_Iq4WjviijDDEtkBJlV4-TSjE,87
74
87
  phone_agent/config/apps_harmonyos.py,sha256=z2QN6O7NPe87ta4EAPs6s4PAC74SPPXlXXz6fTkAXhY,10606
75
88
  phone_agent/config/apps_ios.py,sha256=CrOEDnPyG7T2qF_lS3SDlXjhbJPwDKI61_yOrggernc,11481
76
89
  phone_agent/config/i18n.py,sha256=-x8yD5ywyK7xwjoI-pOYqPlSeId_W9KkVjmKayr36m0,2501
77
- phone_agent/config/prompts.py,sha256=547DMu849nKQKL_PO0TWMgvSaW7Qo_-DV8Hsx2fUWQ4,8091
90
+ phone_agent/config/prompts.py,sha256=0XKS_LrXthPB_bAXUT3ezsyr7UlwJNR2i4FLdEuticQ,8444
78
91
  phone_agent/config/prompts_en.py,sha256=t8C9YLailtg8kVlFtYvq3t9EdtMGE8HastTfDh5BAUM,2630
79
- phone_agent/config/prompts_zh.py,sha256=vSWo5_qlWwNHVYUxrePBiL2FmJFnQG0Jpb1NsVsVJos,8256
92
+ phone_agent/config/prompts_zh.py,sha256=oOd5wJz-_P9ZF3F8hIPPrwjXdgv0sIgH7aop94eOTKM,8603
80
93
  phone_agent/config/timing.py,sha256=bT-5HKGovzY_95wxRGIhmHyrIIPqhWivsXg-0LWc2pM,5793
81
94
  phone_agent/hdc/__init__.py,sha256=6Olk6ujXQovtzmRLXk5MIqbwffxleSQnoHYvCO4G1Ww,996
82
95
  phone_agent/hdc/connection.py,sha256=TweQ417wU2M35mgddK_Xt92zn5tZ0K7vtsaQjLn_e1o,11326
@@ -90,9 +103,15 @@ phone_agent/xctest/connection.py,sha256=m2lT9aNZgknDzItPoA7KOiFaDVOPqx4Imdhl6GcH
90
103
  phone_agent/xctest/device.py,sha256=sOAPMoliMIabcrtsmzuGDKnZXtitqlc0lo8RSjQta7A,13655
91
104
  phone_agent/xctest/input.py,sha256=aMp1YCRGBtGsRMKhA9rrjxuLkri0_k3n6hisi0EBJ2o,8164
92
105
  phone_agent/xctest/screenshot.py,sha256=H6dsQGgf38h8dvuSeigiR2Qr8NucPanIgTK8kjlV9hA,6027
106
+ mai_agent/base.py,sha256=hYjGQXe_qguYkGq2qVWVO_xzsLzNqayA-dox_usCCM0,4546
107
+ mai_agent/mai_grounding_agent.py,sha256=d1X6giinaFVnTtKwh7oFktGZCkDjUySLb22toItykxM,8664
108
+ mai_agent/mai_naivigation_agent.py,sha256=7oA_mjxHfUEYEz2-oLdCEIImNQvAK-V4ADIMCqPPM2s,18264
109
+ mai_agent/prompt.py,sha256=Zgnj5JmVhCGjgM0sB-q19q0G76OCcNdffLypmwxRdl8,7111
110
+ mai_agent/unified_memory.py,sha256=AqEux-0I2WUIQOaY_yCRi-MDuU1BuY6dEWgClQETnEk,2194
111
+ mai_agent/utils.py,sha256=oJ50FEOM13-NwPHY4ttQ0tH49GS-w2TEy1_1FMCaxLg,2304
93
112
  scrcpy-server-v3.3.3,sha256=fnAyO6fyWWSd1KzOl6xP77roECssbZHi575hP9U1S-A,90164
94
- autoglm_gui-1.3.1.dist-info/METADATA,sha256=Lm0SPs0tzKHhGvPwpO7uNNhQ9WS6Ax6VCPU76InFyf0,16109
95
- autoglm_gui-1.3.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
96
- autoglm_gui-1.3.1.dist-info/entry_points.txt,sha256=sz4rBO_kgrYmOiT0QnhCCv0b9QqBdWyCjugJgY8AEOI,58
97
- autoglm_gui-1.3.1.dist-info/licenses/LICENSE,sha256=0IkSHDewdtmXnmYzTNq4U47EJYjTuhjQNpT0bZKuqWc,11342
98
- autoglm_gui-1.3.1.dist-info/RECORD,,
113
+ autoglm_gui-1.4.1.dist-info/METADATA,sha256=OCTjbmz6oXyvTATdzv7nuSF87wxvZnD3WHUDJhDKkK0,20387
114
+ autoglm_gui-1.4.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
115
+ autoglm_gui-1.4.1.dist-info/entry_points.txt,sha256=sz4rBO_kgrYmOiT0QnhCCv0b9QqBdWyCjugJgY8AEOI,58
116
+ autoglm_gui-1.4.1.dist-info/licenses/LICENSE,sha256=0IkSHDewdtmXnmYzTNq4U47EJYjTuhjQNpT0bZKuqWc,11342
117
+ autoglm_gui-1.4.1.dist-info/RECORD,,