autoglm-gui 1.5.5__py3-none-any.whl → 1.5.6__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.
- AutoGLM_GUI/api/agents.py +118 -93
- AutoGLM_GUI/api/devices.py +177 -0
- AutoGLM_GUI/api/scheduled_tasks.py +7 -2
- AutoGLM_GUI/device_group_manager.py +354 -0
- AutoGLM_GUI/models/__init__.py +8 -0
- AutoGLM_GUI/models/device_group.py +63 -0
- AutoGLM_GUI/models/scheduled_task.py +47 -4
- AutoGLM_GUI/scheduler_manager.py +255 -80
- AutoGLM_GUI/schemas.py +148 -3
- AutoGLM_GUI/static/assets/{about-BwLRPh96.js → about-DVviVdH2.js} +1 -1
- AutoGLM_GUI/static/assets/{alert-dialog-BvDNaR9v.js → alert-dialog-IHmO2JCQ.js} +1 -1
- AutoGLM_GUI/static/assets/chat-C_3D0Ao7.js +134 -0
- AutoGLM_GUI/static/assets/{dialog-IM0Ds7Lf.js → dialog-DOpd71Lu.js} +3 -3
- AutoGLM_GUI/static/assets/{eye-BWBwz8sy.js → eye-CZP5ZJ_Y.js} +1 -1
- AutoGLM_GUI/static/assets/folder-open-_KlT8ZW7.js +1 -0
- AutoGLM_GUI/static/assets/{history-BkQlPjpV.js → history-BXMlCwUV.js} +1 -1
- AutoGLM_GUI/static/assets/index-84TrNz7w.css +1 -0
- AutoGLM_GUI/static/assets/index-Bh2f556h.js +1 -0
- AutoGLM_GUI/static/assets/index-DUNWZsFq.js +11 -0
- AutoGLM_GUI/static/assets/{label-CmQFo_IT.js → label-CRZhpiYG.js} +1 -1
- AutoGLM_GUI/static/assets/logs-DEN9nDRS.js +1 -0
- AutoGLM_GUI/static/assets/popover-DitUZhUk.js +1 -0
- AutoGLM_GUI/static/assets/scheduled-tasks-boxDKe87.js +1 -0
- AutoGLM_GUI/static/assets/{textarea-BlKvI11g.js → textarea-CvRHzjfV.js} +1 -1
- AutoGLM_GUI/static/assets/{workflows-CRq1fJf5.js → workflows-Bg3qN-6j.js} +1 -1
- AutoGLM_GUI/static/index.html +2 -2
- {autoglm_gui-1.5.5.dist-info → autoglm_gui-1.5.6.dist-info}/METADATA +355 -6
- {autoglm_gui-1.5.5.dist-info → autoglm_gui-1.5.6.dist-info}/RECORD +31 -29
- AutoGLM_GUI/static/assets/chat-DAmrsouh.js +0 -129
- AutoGLM_GUI/static/assets/circle-alert-C8768IhH.js +0 -1
- AutoGLM_GUI/static/assets/index-B0fISVXF.js +0 -1
- AutoGLM_GUI/static/assets/index-CH4jPveL.js +0 -11
- AutoGLM_GUI/static/assets/index-DSIMVL8V.css +0 -1
- AutoGLM_GUI/static/assets/logs-ChcSA2r_.js +0 -1
- AutoGLM_GUI/static/assets/popover-BnpBfSOh.js +0 -1
- AutoGLM_GUI/static/assets/scheduled-tasks-BwgoPEdP.js +0 -1
- {autoglm_gui-1.5.5.dist-info → autoglm_gui-1.5.6.dist-info}/WHEEL +0 -0
- {autoglm_gui-1.5.5.dist-info → autoglm_gui-1.5.6.dist-info}/entry_points.txt +0 -0
- {autoglm_gui-1.5.5.dist-info → autoglm_gui-1.5.6.dist-info}/licenses/LICENSE +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{b as i,j as r,e as o,r as s,aw as d}from"./index-DUNWZsFq.js";const u=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]],x=i("plus",u);const c=[["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"}]],g=i("square-pen",c);function v({className:a,type:t,...e}){return r.jsx("input",{type:t,"data-slot":"input",className:o("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",a),...e})}var p="Label",n=s.forwardRef((a,t)=>r.jsx(d.label,{...a,ref:t,onMouseDown:e=>{e.target.closest("button, input, select, textarea")||(a.onMouseDown?.(e),!e.defaultPrevented&&e.detail>1&&e.preventDefault())}}));n.displayName=p;var l=n;const f=s.forwardRef(({className:a,...t},e)=>r.jsx(l,{ref:e,className:o("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70 text-slate-900 dark:text-slate-100",a),...t}));f.displayName=l.displayName;export{v as I,f as L,x as P,g as S};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{b as S,u as I,r as l,j as e,B as i,F as u}from"./index-DUNWZsFq.js";import{C as d,F as A}from"./folder-open-_KlT8ZW7.js";const E=[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]],M=S("refresh-cw",E);function B(){const r=I(),[x,j]=l.useState([]),[o,v]=l.useState(null),[N,p]=l.useState(""),[m,h]=l.useState(!1),[w,g]=l.useState(!1),[f,a]=l.useState(""),[b,F]=l.useState(!1),n=l.useCallback(async()=>{try{h(!0),a("");const s=window.electronAPI;if(!s?.logs)return;const t=await s.logs.listFiles();j(t)}catch(s){const t=s instanceof Error?s.message:String(s);a(r.logs.loadFailed.replace("{error}",t))}finally{h(!1)}},[r.logs.loadFailed]);l.useEffect(()=>{window.electronAPI?.logs&&(F(!0),n())},[n]);const k=async s=>{g(!0),a("");try{const t=window.electronAPI;if(!t?.logs)return;const c=await t.logs.readFile(s);v(s),p(c)}catch(t){const c=t instanceof Error?t.message:String(t);a(r.logs.readFailed.replace("{error}",c))}finally{g(!1)}},L=async()=>{try{const s=window.electronAPI;if(!s?.logs)return;const t=await s.logs.openFolder();t.success||a(r.logs.openFolderFailed.replace("{error}",t.error||""))}catch(s){const t=s instanceof Error?s.message:String(s);a(r.logs.openFolderFailed.replace("{error}",t))}},y=s=>s<1024?s+" B":s<1024*1024?(s/1024).toFixed(1)+" KB":(s/(1024*1024)).toFixed(1)+" MB",C=s=>new Date(s).toLocaleString("zh-CN");return b?e.jsxs("div",{className:"h-full flex",children:[e.jsxs("div",{className:"w-80 border-r border-slate-200 dark:border-slate-800 flex flex-col",children:[e.jsxs("div",{className:"p-4 border-b border-slate-200 dark:border-slate-800",children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("h2",{className:"text-lg font-semibold",children:r.logs.title}),e.jsx(i,{variant:"ghost",size:"icon",onClick:n,disabled:m,title:r.logs.refresh,children:e.jsx(M,{className:`w-4 h-4 ${m?"animate-spin":""}`})})]}),e.jsxs(i,{variant:"outline",className:"w-full",onClick:L,children:[e.jsx(A,{className:"w-4 h-4 mr-2"}),r.logs.openFolder]})]}),e.jsx("div",{className:"flex-1 overflow-y-auto",children:x.length===0?e.jsx("div",{className:"p-4 text-center text-slate-500 text-sm",children:r.logs.noLogs}):e.jsx("div",{className:"divide-y divide-slate-200 dark:divide-slate-800",children:x.map(s=>e.jsxs("div",{className:`p-4 hover:bg-slate-50 dark:hover:bg-slate-900 cursor-pointer transition-colors ${o===s.name?"bg-slate-50 dark:bg-slate-900":""}`,onClick:()=>!s.isCompressed&&k(s.name),children:[e.jsxs("div",{className:"flex items-start gap-3",children:[s.isError?e.jsx(d,{className:"w-5 h-5 text-red-500 flex-shrink-0 mt-0.5"}):e.jsx(u,{className:"w-5 h-5 text-slate-400 flex-shrink-0 mt-0.5"}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("div",{className:"font-medium text-sm truncate",children:s.name}),e.jsxs("div",{className:"text-xs text-slate-500 mt-1",children:[y(s.size)," •"," ",C(s.modified)]})]})]}),s.isCompressed&&e.jsx("div",{className:"text-xs text-slate-400 mt-2 ml-8",children:r.logs.compressedFileNote})]},s.name))})})]}),e.jsx("div",{className:"flex-1 flex flex-col",children:o?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"p-4 border-b border-slate-200 dark:border-slate-800",children:e.jsx("h3",{className:"font-semibold",children:o})}),e.jsx("div",{className:"flex-1 overflow-auto p-4 bg-slate-50 dark:bg-slate-950",children:w?e.jsx("div",{className:"flex items-center justify-center h-full",children:e.jsx("div",{className:"text-slate-500",children:r.logs.loading})}):e.jsx("pre",{className:"text-xs font-mono whitespace-pre-wrap break-all",children:N})})]}):e.jsx("div",{className:"flex-1 flex items-center justify-center text-slate-500",children:e.jsxs("div",{className:"text-center",children:[e.jsx(u,{className:"w-12 h-12 mx-auto mb-4 text-slate-300"}),e.jsx("p",{children:r.logs.selectLog})]})})}),f&&e.jsx("div",{className:"fixed bottom-4 right-4 max-w-md bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-lg p-4 shadow-lg",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx(d,{className:"w-5 h-5 text-red-500 flex-shrink-0 mt-0.5"}),e.jsx("div",{className:"flex-1 text-sm text-red-600 dark:text-red-400",children:f}),e.jsx(i,{variant:"ghost",size:"icon",className:"h-6 w-6 text-red-400 hover:text-red-600",onClick:()=>a(""),children:"✕"})]})})]}):e.jsx("div",{className:"flex items-center justify-center h-full",children:e.jsxs("div",{className:"text-center",children:[e.jsx(d,{className:"w-12 h-12 mx-auto mb-4 text-slate-400"}),e.jsx("p",{className:"text-slate-600",dangerouslySetInnerHTML:{__html:r.logs.webVersionNotice}})]})})}export{B as component};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{b as R,r as i,J as _,H as z,j as s,K as L,z as $,E as G,A as O,P as b,G as P,L as w,M as j,N as H,D as K,Q as q,S as U,U as B,e as J}from"./index-DUNWZsFq.js";import{i as Q,R as V,u as W,F as X}from"./dialog-DOpd71Lu.js";const Z=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],he=R("chevron-down",Z);const Y=[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]],Ce=R("circle-check-big",Y);const ee=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]],me=R("circle-x",ee);var m="Popover",[y]=$(m,[_]),g=_(),[oe,l]=y(m),E=e=>{const{__scopePopover:n,children:o,open:a,defaultOpen:t,onOpenChange:r,modal:c=!1}=e,p=g(n),f=i.useRef(null),[v,h]=i.useState(!1),[C,d]=z({prop:a,defaultProp:t??!1,onChange:r,caller:m});return s.jsx(L,{...p,children:s.jsx(oe,{scope:n,contentId:G(),triggerRef:f,open:C,onOpenChange:d,onOpenToggle:i.useCallback(()=>d(x=>!x),[d]),hasCustomAnchor:v,onCustomAnchorAdd:i.useCallback(()=>h(!0),[]),onCustomAnchorRemove:i.useCallback(()=>h(!1),[]),modal:c,children:o})})};E.displayName=m;var N="PopoverAnchor",te=i.forwardRef((e,n)=>{const{__scopePopover:o,...a}=e,t=l(N,o),r=g(o),{onCustomAnchorAdd:c,onCustomAnchorRemove:p}=t;return i.useEffect(()=>(c(),()=>p()),[c,p]),s.jsx(w,{...r,...a,ref:n})});te.displayName=N;var k="PopoverTrigger",F=i.forwardRef((e,n)=>{const{__scopePopover:o,...a}=e,t=l(k,o),r=g(o),c=O(n,t.triggerRef),p=s.jsx(b.button,{type:"button","aria-haspopup":"dialog","aria-expanded":t.open,"aria-controls":t.contentId,"data-state":T(t.open),...a,ref:c,onClick:P(e.onClick,t.onOpenToggle)});return t.hasCustomAnchor?p:s.jsx(w,{asChild:!0,...r,children:p})});F.displayName=k;var A="PopoverPortal",[re,ne]=y(A,{forceMount:void 0}),S=e=>{const{__scopePopover:n,forceMount:o,children:a,container:t}=e,r=l(A,n);return s.jsx(re,{scope:n,forceMount:o,children:s.jsx(j,{present:o||r.open,children:s.jsx(H,{asChild:!0,container:t,children:a})})})};S.displayName=A;var u="PopoverContent",D=i.forwardRef((e,n)=>{const o=ne(u,e.__scopePopover),{forceMount:a=o.forceMount,...t}=e,r=l(u,e.__scopePopover);return s.jsx(j,{present:a||r.open,children:r.modal?s.jsx(se,{...t,ref:n}):s.jsx(ce,{...t,ref:n})})});D.displayName=u;var ae=K("PopoverContent.RemoveScroll"),se=i.forwardRef((e,n)=>{const o=l(u,e.__scopePopover),a=i.useRef(null),t=O(n,a),r=i.useRef(!1);return i.useEffect(()=>{const c=a.current;if(c)return Q(c)},[]),s.jsx(V,{as:ae,allowPinchZoom:!0,children:s.jsx(M,{...e,ref:t,trapFocus:o.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:P(e.onCloseAutoFocus,c=>{c.preventDefault(),r.current||o.triggerRef.current?.focus()}),onPointerDownOutside:P(e.onPointerDownOutside,c=>{const p=c.detail.originalEvent,f=p.button===0&&p.ctrlKey===!0,v=p.button===2||f;r.current=v},{checkForDefaultPrevented:!1}),onFocusOutside:P(e.onFocusOutside,c=>c.preventDefault(),{checkForDefaultPrevented:!1})})})}),ce=i.forwardRef((e,n)=>{const o=l(u,e.__scopePopover),a=i.useRef(!1),t=i.useRef(!1);return s.jsx(M,{...e,ref:n,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:r=>{e.onCloseAutoFocus?.(r),r.defaultPrevented||(a.current||o.triggerRef.current?.focus(),r.preventDefault()),a.current=!1,t.current=!1},onInteractOutside:r=>{e.onInteractOutside?.(r),r.defaultPrevented||(a.current=!0,r.detail.originalEvent.type==="pointerdown"&&(t.current=!0));const c=r.target;o.triggerRef.current?.contains(c)&&r.preventDefault(),r.detail.originalEvent.type==="focusin"&&t.current&&r.preventDefault()}})}),M=i.forwardRef((e,n)=>{const{__scopePopover:o,trapFocus:a,onOpenAutoFocus:t,onCloseAutoFocus:r,disableOutsidePointerEvents:c,onEscapeKeyDown:p,onPointerDownOutside:f,onFocusOutside:v,onInteractOutside:h,...C}=e,d=l(u,o),x=g(o);return W(),s.jsx(X,{asChild:!0,loop:!0,trapped:a,onMountAutoFocus:t,onUnmountAutoFocus:r,children:s.jsx(q,{asChild:!0,disableOutsidePointerEvents:c,onInteractOutside:h,onEscapeKeyDown:p,onPointerDownOutside:f,onFocusOutside:v,onDismiss:()=>d.onOpenChange(!1),children:s.jsx(U,{"data-state":T(d.open),role:"dialog",id:d.contentId,...x,...C,ref:n,style:{...C.style,"--radix-popover-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-popover-content-available-width":"var(--radix-popper-available-width)","--radix-popover-content-available-height":"var(--radix-popper-available-height)","--radix-popover-trigger-width":"var(--radix-popper-anchor-width)","--radix-popover-trigger-height":"var(--radix-popper-anchor-height)"}})})})}),I="PopoverClose",ie=i.forwardRef((e,n)=>{const{__scopePopover:o,...a}=e,t=l(I,o);return s.jsx(b.button,{type:"button",...a,ref:n,onClick:P(e.onClick,()=>t.onOpenChange(!1))})});ie.displayName=I;var pe="PopoverArrow",le=i.forwardRef((e,n)=>{const{__scopePopover:o,...a}=e,t=g(o);return s.jsx(B,{...t,...a,ref:n})});le.displayName=pe;function T(e){return e?"open":"closed"}var de=E,ue=F,fe=S,ve=D;function xe({...e}){return s.jsx(de,{"data-slot":"popover",...e})}function Re({...e}){return s.jsx(ue,{"data-slot":"popover-trigger",...e})}function Ae({className:e,align:n="center",sideOffset:o=4,...a}){return s.jsx(fe,{children:s.jsx(ve,{"data-slot":"popover-content",align:n,sideOffset:o,className:J("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden",e),...a})})}export{Ce as C,xe as P,me as a,he as b,Re as c,Ae as d};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{b as ne,r as t,j as e,e as P,u as te,f as re,l as ce,g as ie,h as de,B as i,i as oe,C as ue,k as me,m as he,n as xe,o as pe,p as ge}from"./index-DUNWZsFq.js";import{P as ve,S as je,L as g,I as G}from"./label-CRZhpiYG.js";import{L as H,C as fe,a as _e,b as ke,c as we,T as Ne,D as be,d as Te,e as ye,f as De,g as Ce}from"./dialog-DOpd71Lu.js";import{S as M,a as O,b as R,c as W,d as $,A as Se,e as Fe,f as Ae,g as Le,h as ze,i as Ee,j as Pe,k as Ge}from"./alert-dialog-IHmO2JCQ.js";import{C as He,a as Me}from"./popover-DitUZhUk.js";const Oe=[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]],Re=ne("triangle-alert",Oe),B=t.forwardRef(({className:a,checked:d=!1,onCheckedChange:_,disabled:m,...k},h)=>e.jsx("button",{ref:h,role:"switch",type:"button","aria-checked":d,disabled:m,className:P("peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-950 focus-visible:ring-offset-2 focus-visible:ring-offset-white disabled:cursor-not-allowed disabled:opacity-50",d?"bg-slate-900 dark:bg-slate-50":"bg-slate-200 dark:bg-slate-800",a),onClick:()=>_?.(!d),...k,children:e.jsx("span",{className:P("pointer-events-none block h-5 w-5 rounded-full bg-white shadow-lg ring-0 transition-transform dark:bg-slate-950",d?"translate-x-5":"translate-x-0")})}));B.displayName="Switch";const We=[{key:"everyHour",cron:"0 * * * *"},{key:"daily8am",cron:"0 8 * * *"},{key:"daily12pm",cron:"0 12 * * *"},{key:"daily6pm",cron:"0 18 * * *"},{key:"weeklyMonday",cron:"0 9 * * 1"}];function Xe(){const a=te(),[d,_]=t.useState([]),[m,k]=t.useState([]),[h,V]=t.useState([]),[v,q]=t.useState([]),[I,y]=t.useState(!0),[X,x]=t.useState(!1),[w,D]=t.useState(null),[n,c]=t.useState({name:"",workflow_uuid:"",device_serialnos:[],device_group_id:null,cron_expression:"",enabled:!0}),[o,j]=t.useState("devices"),[C,S]=t.useState(!1),[J,N]=t.useState(!1),[F,A]=t.useState(null);t.useEffect(()=>{f()},[]);const f=async()=>{try{y(!0);const[s,l,r,u]=await Promise.all([re(),ce(),ie(),de()]);_(s.tasks),k(l.workflows),V(r),q(u.groups)}catch(s){console.error("Failed to load data:",s)}finally{y(!1)}},K=()=>{D(null),c({name:"",workflow_uuid:"",device_serialnos:[],device_group_id:null,cron_expression:"",enabled:!0}),j("devices"),x(!0)},Q=s=>{D(s),c({name:s.name,workflow_uuid:s.workflow_uuid,device_serialnos:s.device_serialnos,device_group_id:s.device_group_id||null,cron_expression:s.cron_expression,enabled:s.enabled}),j(s.device_group_id?"group":"devices"),x(!0)},U=async()=>{try{S(!0);const s={name:n.name,workflow_uuid:n.workflow_uuid,cron_expression:n.cron_expression,enabled:n.enabled,device_serialnos:o==="devices"?n.device_serialnos:null,device_group_id:o==="group"?n.device_group_id:null};w?await xe(w.id,s):await pe(s),x(!1),f()}catch(s){console.error("Failed to save task:",s)}finally{S(!1)}},Y=async()=>{if(F){try{await ge(F),f()}catch(s){console.error("Failed to delete task:",s)}N(!1),A(null)}},Z=async s=>{try{s.enabled?await me(s.id):await he(s.id),f()}catch(l){console.error("Failed to toggle task:",l)}},ee=s=>m.find(r=>r.uuid===s)?.name||s,b=s=>h.find(r=>r.serial===s)?.model||s,L=s=>v.find(r=>r.id===s)?.name||s,se=(s,l)=>{if(l){const p=v.find(le=>le.id===l);return p?`${p.name} (${p.device_count} ${a.scheduledTasks.groupDevices||"devices"})`:L(l)}if(s.length===0)return"-";if(s.length===1)return b(s[0]);const r=s.map(p=>b(p)),u=r[0],T=r.length-1;return`${u} (+${T})`},z=s=>s?new Date(s).toLocaleString("zh-CN",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):a.scheduledTasks.never,E=s=>s.last_run_status?s.last_run_status:s.last_run_success===!0?"success":s.last_run_success===!1?"failure":null,ae=n.name.trim()&&n.workflow_uuid&&(o==="devices"&&n.device_serialnos.length>0||o==="group"&&n.device_group_id)&&n.cron_expression.trim();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:a.scheduledTasks.title}),e.jsxs(i,{onClick:K,children:[e.jsx(ve,{className:"w-4 h-4 mr-2"}),a.scheduledTasks.create]})]}),I?e.jsx("div",{className:"flex justify-center items-center h-64",children:e.jsx(H,{className:"w-8 h-8 animate-spin text-slate-400"})}):d.length===0?e.jsxs("div",{className:"text-center py-12",children:[e.jsx("p",{className:"text-slate-500 dark:text-slate-400",children:a.scheduledTasks.noTasks}),e.jsx("p",{className:"text-sm text-slate-400 dark:text-slate-500 mt-2",children:a.scheduledTasks.noTasksDesc})]}):e.jsx("div",{className:"grid gap-4 md:grid-cols-2 lg:grid-cols-3",children:d.map(s=>e.jsxs(fe,{className:"hover:shadow-md transition-shadow",children:[e.jsx(_e,{className:"pb-2",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(ke,{className:"text-lg truncate flex-1 mr-2",children:s.name}),e.jsx(B,{checked:s.enabled,onCheckedChange:()=>Z(s)})]})}),e.jsx(we,{children:e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"text-sm",children:[e.jsxs("span",{className:"text-slate-500 dark:text-slate-400",children:[a.scheduledTasks.workflow,":"," "]}),e.jsx("span",{className:"font-medium",children:ee(s.workflow_uuid)})]}),e.jsxs("div",{className:"text-sm",children:[e.jsxs("span",{className:"text-slate-500 dark:text-slate-400",children:[a.scheduledTasks.device,":"," "]}),e.jsx("span",{className:"font-medium",title:s.device_group_id?L(s.device_group_id):s.device_serialnos.map(l=>b(l)).join(", "),children:se(s.device_serialnos,s.device_group_id)})]}),e.jsx("div",{className:"text-sm",children:e.jsxs(oe,{variant:"outline",className:"font-mono",children:[e.jsx(ue,{className:"w-3 h-3 mr-1"}),s.cron_expression]})}),e.jsxs("div",{className:"text-sm flex items-center gap-2",children:[e.jsxs("span",{className:"text-slate-500 dark:text-slate-400",children:[a.scheduledTasks.lastRun,":"]}),s.last_run_time?e.jsxs(e.Fragment,{children:[E(s)==="success"?e.jsx(He,{className:"w-4 h-4 text-green-500"}):E(s)==="partial"?e.jsx(Re,{className:"w-4 h-4 text-amber-500"}):e.jsx(Me,{className:"w-4 h-4 text-red-500"}),e.jsx("span",{title:s.last_run_message||void 0,children:z(s.last_run_time)}),typeof s.last_run_success_count=="number"&&typeof s.last_run_total_count=="number"&&s.last_run_total_count>1&&e.jsxs("span",{className:"text-xs text-slate-500",children:["(",s.last_run_success_count,"/",s.last_run_total_count,")"]})]}):e.jsx("span",{className:"text-slate-400",children:a.scheduledTasks.never})]}),e.jsxs("div",{className:"text-sm",children:[e.jsxs("span",{className:"text-slate-500 dark:text-slate-400",children:[a.scheduledTasks.nextRun,":"," "]}),e.jsx("span",{children:z(s.next_run_time)})]}),e.jsxs("div",{className:"flex gap-2 pt-2",children:[e.jsxs(i,{variant:"outline",size:"sm",onClick:()=>Q(s),children:[e.jsx(je,{className:"w-3 h-3 mr-1"}),a.common.edit]}),e.jsxs(i,{variant:"destructive",size:"sm",onClick:()=>{A(s.id),N(!0)},children:[e.jsx(Ne,{className:"w-3 h-3 mr-1"}),a.common.delete]})]})]})})]},s.id))}),e.jsx(be,{open:X,onOpenChange:x,children:e.jsxs(Te,{className:"sm:max-w-[500px]",children:[e.jsx(ye,{children:e.jsx(De,{children:w?a.scheduledTasks.edit:a.scheduledTasks.create})}),e.jsxs("div",{className:"space-y-4 py-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(g,{htmlFor:"name",children:a.scheduledTasks.taskName}),e.jsx(G,{id:"name",value:n.name,onChange:s=>c(l=>({...l,name:s.target.value})),placeholder:a.scheduledTasks.taskNamePlaceholder})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(g,{children:a.scheduledTasks.workflow}),m.length===0?e.jsx("p",{className:"text-sm text-amber-600 dark:text-amber-400",children:a.scheduledTasks.noWorkflows}):e.jsxs(M,{value:n.workflow_uuid,onValueChange:s=>c(l=>({...l,workflow_uuid:s})),children:[e.jsx(O,{children:e.jsx(R,{placeholder:a.scheduledTasks.selectWorkflow})}),e.jsx(W,{children:m.map(s=>e.jsx($,{value:s.uuid,children:s.name},s.uuid))})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(g,{children:a.scheduledTasks.device}),e.jsxs("div",{className:"flex gap-2 mb-2",children:[e.jsx(i,{type:"button",variant:o==="devices"?"default":"outline",size:"sm",onClick:()=>{j("devices"),c(s=>({...s,device_group_id:null}))},children:a.scheduledTasks.selectDevice||"选择设备"}),e.jsx(i,{type:"button",variant:o==="group"?"default":"outline",size:"sm",onClick:()=>{j("group"),c(s=>({...s,device_serialnos:[]}))},children:a.scheduledTasks.selectGroup||"选择分组"})]}),o==="devices"?h.length===0?e.jsx("p",{className:"text-sm text-amber-600 dark:text-amber-400",children:a.scheduledTasks.noDevicesOnline}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"border rounded-md p-2 space-y-1 max-h-40 overflow-y-auto",children:h.map(s=>e.jsxs("label",{className:"flex items-center gap-2 p-2 hover:bg-slate-100 dark:hover:bg-slate-800 rounded cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:n.device_serialnos.includes(s.serial),onChange:l=>{const r=l.target.checked;c(u=>({...u,device_serialnos:r?[...u.device_serialnos,s.serial]:u.device_serialnos.filter(T=>T!==s.serial)}))},className:"rounded border-gray-300"}),e.jsx("span",{className:"text-sm",children:s.model||s.serial}),s.state==="online"&&e.jsx("span",{className:"ml-auto w-2 h-2 bg-green-500 rounded-full"})]},s.serial))}),n.device_serialnos.length>0&&e.jsxs("p",{className:"text-xs text-slate-500",children:[n.device_serialnos.length," ",a.scheduledTasks.devicesSelected||"devices selected"]})]}):v.length===0?e.jsx("p",{className:"text-sm text-amber-600 dark:text-amber-400",children:"暂无分组"}):e.jsxs(M,{value:n.device_group_id||"",onValueChange:s=>c(l=>({...l,device_group_id:s||null})),children:[e.jsx(O,{children:e.jsx(R,{placeholder:a.scheduledTasks.selectGroup||"选择分组"})}),e.jsx(W,{children:v.map(s=>e.jsxs($,{value:s.id,children:[s.name," (",s.device_count," ",a.deviceGroups?.deviceCount||"台设备",")"]},s.id))})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(g,{htmlFor:"cron",children:a.scheduledTasks.cronExpression}),e.jsx(G,{id:"cron",value:n.cron_expression,onChange:s=>c(l=>({...l,cron_expression:s.target.value})),placeholder:a.scheduledTasks.cronPlaceholder,className:"font-mono"}),e.jsx("p",{className:"text-xs text-slate-500 dark:text-slate-400",children:a.scheduledTasks.cronHelp})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(g,{children:a.scheduledTasks.presets}),e.jsx("div",{className:"flex flex-wrap gap-2",children:We.map(s=>e.jsx(i,{variant:"outline",size:"sm",onClick:()=>c(l=>({...l,cron_expression:s.cron})),children:a.scheduledTasks.preset[s.key]},s.key))})]})]}),e.jsxs(Ce,{children:[e.jsx(i,{variant:"outline",onClick:()=>x(!1),children:a.common.cancel}),e.jsx(i,{onClick:U,disabled:!ae||C,children:C?e.jsxs(e.Fragment,{children:[e.jsx(H,{className:"w-4 h-4 mr-2 animate-spin"}),a.common.loading]}):a.common.save})]})]})}),e.jsx(Se,{open:J,onOpenChange:N,children:e.jsxs(Fe,{children:[e.jsxs(Ae,{children:[e.jsx(Le,{children:a.common.delete}),e.jsx(ze,{children:a.scheduledTasks.deleteConfirm})]}),e.jsxs(Ee,{children:[e.jsx(Pe,{children:a.common.cancel}),e.jsx(Ge,{onClick:Y,children:a.common.confirm})]})]})})]})}export{Xe as component};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as s,j as a,
|
|
1
|
+
import{r as s,j as a,e as i}from"./index-DUNWZsFq.js";const l=s.forwardRef(({className:e,...r},t)=>a.jsx("textarea",{className:i("flex min-h-[40px] w-full rounded-full border border-slate-200 bg-white px-3 py-2 text-sm ring-offset-white file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-slate-500 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[#1d9bf0] focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:border-slate-800 dark:bg-slate-950 dark:text-slate-100 dark:ring-offset-slate-950 dark:placeholder:text-slate-400 dark:focus-visible:ring-[#1d9bf0] resize-none",e),ref:t,...r}));l.displayName="Textarea";export{l as T};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as D,r as t,l as S,j as e,B as n,d as W,a as F,c as b}from"./index-
|
|
1
|
+
import{u as D,r as t,l as S,j as e,B as n,d as W,a as F,c as b}from"./index-DUNWZsFq.js";import{P as T,S as E,L as u,I as L}from"./label-CRZhpiYG.js";import{T as P}from"./textarea-CvRHzjfV.js";import{L as j,C as z,a as B,b as H,c as I,T as q,D as O,d as R,e as A,f as G,g as J}from"./dialog-DOpd71Lu.js";function V(){const a=D(),[m,p]=t.useState([]),[g,x]=t.useState(!0),[k,o]=t.useState(!1),[c,h]=t.useState(null),[l,i]=t.useState({name:"",text:""}),[w,f]=t.useState(!1);t.useEffect(()=>{d()},[]);const d=async()=>{try{x(!0);const s=await S();p(s.workflows)}catch(s){console.error("Failed to load workflows:",s)}finally{x(!1)}},v=()=>{h(null),i({name:"",text:""}),o(!0)},N=s=>{h(s),i({name:s.name,text:s.text}),o(!0)},C=async()=>{try{f(!0),c?await F(c.uuid,l):await b(l),o(!1),d()}catch(s){console.error("Failed to save workflow:",s)}finally{f(!1)}},y=async s=>{if(window.confirm(a.workflows.deleteConfirm))try{await W(s),d()}catch(r){console.error("Failed to delete workflow:",r)}};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:a.workflows.title}),e.jsxs(n,{onClick:v,children:[e.jsx(T,{className:"w-4 h-4 mr-2"}),a.workflows.createNew]})]}),g?e.jsx("div",{className:"flex justify-center items-center h-64",children:e.jsx(j,{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:a.workflows.empty})}):e.jsx("div",{className:"grid gap-4 md:grid-cols-2 lg:grid-cols-3",children:m.map(s=>e.jsxs(z,{className:"hover:shadow-md transition-shadow",children:[e.jsx(B,{children:e.jsx(H,{className:"text-lg",children:s.name})}),e.jsxs(I,{children:[e.jsx("p",{className:"text-sm text-slate-600 dark:text-slate-400 mb-4 line-clamp-3",children:s.text}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(n,{variant:"outline",size:"sm",onClick:()=>N(s),children:[e.jsx(E,{className:"w-3 h-3 mr-1"}),a.common.edit]}),e.jsxs(n,{variant:"destructive",size:"sm",onClick:()=>y(s.uuid),children:[e.jsx(q,{className:"w-3 h-3 mr-1"}),a.common.delete]})]})]})]},s.uuid))}),e.jsx(O,{open:k,onOpenChange:o,children:e.jsxs(R,{className:"sm:max-w-[600px]",children:[e.jsx(A,{children:e.jsx(G,{children:c?a.workflows.edit:a.workflows.create})}),e.jsxs("div",{className:"space-y-4 py-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{htmlFor:"name",children:a.workflows.name}),e.jsx(L,{id:"name",value:l.name,onChange:s=>i(r=>({...r,name:s.target.value})),placeholder:a.workflows.namePlaceholder})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(u,{htmlFor:"text",children:a.workflows.text}),e.jsx(P,{id:"text",value:l.text,onChange:s=>i(r=>({...r,text:s.target.value})),placeholder:a.workflows.textPlaceholder,rows:6,className:"resize-none !rounded-lg"})]})]}),e.jsxs(J,{children:[e.jsx(n,{variant:"outline",onClick:()=>o(!1),children:a.common.cancel}),e.jsx(n,{onClick:C,disabled:!l.name.trim()||!l.text.trim()||w,children:w?e.jsxs(e.Fragment,{children:[e.jsx(j,{className:"w-4 h-4 mr-2 animate-spin"}),a.common.loading]}):a.common.save})]})]})})]})}export{V as component};
|
AutoGLM_GUI/static/index.html
CHANGED
|
@@ -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-
|
|
15
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
14
|
+
<script type="module" crossorigin src="/assets/index-DUNWZsFq.js"></script>
|
|
15
|
+
<link rel="stylesheet" crossorigin href="/assets/index-84TrNz7w.css">
|
|
16
16
|
</head>
|
|
17
17
|
<body>
|
|
18
18
|
<div id="app"></div>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: autoglm-gui
|
|
3
|
-
Version: 1.5.
|
|
3
|
+
Version: 1.5.6
|
|
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
|
|
@@ -43,13 +43,37 @@ Description-Content-Type: text/markdown
|
|
|
43
43
|
|
|
44
44
|
# AutoGLM-GUI
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
**AI 驱动的 Android 自动化生产力工具** - 支持定时任务、远程部署,让 AI 7x24 小时为你工作
|
|
47
|
+
|
|
48
|
+
从个人助手到自动化中枢:支持 **定时执行**、**Docker 部署**、**对话历史**,打造你的 AI 自动化助手
|
|
47
49
|
|
|
48
|
-
**🆕 分层代理模式**:基于决策模型和视觉模型的双层协作架构,支持复杂任务规划与精准执行分离,适合需要多轮推理的高级任务。
|
|
49
50
|
|
|
50
51
|

|
|
51
52
|

|
|
52
53
|
[](https://pypi.org/project/autoglm-gui/)
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
### 🎉 v1.5 重大更新:生产力工具升级
|
|
58
|
+
|
|
59
|
+
从个人助手到自动化中枢,AutoGLM-GUI 现已支持:
|
|
60
|
+
|
|
61
|
+
<table>
|
|
62
|
+
<tr>
|
|
63
|
+
<td width="20%" align="center">⏰<br/><b>定时任务</b><br/>Cron 调度系统</td>
|
|
64
|
+
<td width="20%" align="center">🐳<br/><b>Docker 部署</b><br/>7x24 运行</td>
|
|
65
|
+
<td width="20%" align="center">📚<br/><b>对话历史</b><br/>自动保存追溯</td>
|
|
66
|
+
<td width="20%" align="center">⚡<br/><b>立即打断</b><br/><1秒响应</td>
|
|
67
|
+
<td width="20%" align="center">📱<br/><b>多设备管理</b><br/>支持模拟器</td>
|
|
68
|
+
</tr>
|
|
69
|
+
</table>
|
|
70
|
+
|
|
71
|
+
**核心场景**:部署到服务器 + 定时任务 = AI 自动化助手 7x24 小时为你工作
|
|
72
|
+
|
|
73
|
+
📖 [查看完整更新日志](./RELEASE_NOTES_v1.4.1_to_v1.5.5.md) · [生产力场景示例](#-生产力场景示例)
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
53
77
|
<br/>
|
|
54
78
|
<a href="https://qm.qq.com/q/J5eAs9tn0W" target="__blank">
|
|
55
79
|
<strong>欢迎加入讨论交流群</strong>
|
|
@@ -59,16 +83,30 @@ AutoGLM 手机助手的现代化 Web 图形界面 - 让 AI 自动化操作 Andro
|
|
|
59
83
|
|
|
60
84
|
</div>
|
|
61
85
|
|
|
62
|
-
## ✨
|
|
86
|
+
## ✨ 核心特性
|
|
87
|
+
|
|
88
|
+
### 🚀 生产力增强(v1.5 新增)
|
|
89
|
+
|
|
90
|
+
- **⏰ 定时任务调度** - Cron 风格的任务调度系统,自动执行重复操作(签到、检查、周期性任务)
|
|
91
|
+
- **📚 对话历史管理** - 自动保存所有对话记录,支持查看历史、追溯执行过程
|
|
92
|
+
- **⚡ 立即打断执行** - <1秒中断正在执行的任务,精准控制 AI 行为
|
|
93
|
+
- **🐳 Docker 一键部署** - 支持多架构(x64/ARM64),部署到服务器 7x24 小时运行
|
|
94
|
+
- **📱 模拟器零配置** - 自动检测本地 Android 模拟器,一键连接无需配对
|
|
95
|
+
|
|
96
|
+
### 🤖 AI 自动化能力
|
|
63
97
|
|
|
64
98
|
- **分层代理模式** - 🆕 决策模型 + 视觉模型双层协作架构,支持复杂任务规划与精准执行分离
|
|
65
99
|
- **完全无线配对** - 🆕 支持 Android 11+ 二维码扫码配对,无需数据线即可连接设备
|
|
66
100
|
- **多设备并发控制** - 同时管理和控制多个 Android 设备,设备间状态完全隔离
|
|
67
101
|
- **对话式任务管理** - 通过聊天界面控制 Android 设备
|
|
68
102
|
- **Workflow 工作流** - 🆕 预定义常用任务,一键快速执行,支持创建、编辑、删除和管理
|
|
103
|
+
|
|
104
|
+
### 💻 技术特性
|
|
105
|
+
|
|
69
106
|
- **实时屏幕预览** - 基于 scrcpy 的低延迟视频流,随时查看设备正在执行的操作
|
|
70
107
|
- **直接操控手机** - 在实时画面上直接点击、滑动操作,支持精准坐标转换和视觉反馈
|
|
71
108
|
- **零配置部署** - 支持任何 OpenAI 兼容的 LLM API
|
|
109
|
+
- **MCP 协议支持** - 🆕 内置 MCP 服务器,可集成到 Claude Desktop、Cursor 等 AI 应用中
|
|
72
110
|
- **ADB 深度集成** - 通过 Android Debug Bridge 直接控制设备(支持 USB 和 WiFi)
|
|
73
111
|
- **模块化界面** - 清晰的侧边栏 + 设备面板设计,功能分离明确
|
|
74
112
|
|
|
@@ -164,9 +202,15 @@ autoglm-gui --base-url http://localhost:8080/v1
|
|
|
164
202
|
uvx autoglm-gui --base-url http://localhost:8080/v1
|
|
165
203
|
```
|
|
166
204
|
|
|
167
|
-
### 方式二:Docker
|
|
205
|
+
### 方式二:Docker 部署(推荐生产力场景)
|
|
206
|
+
|
|
207
|
+
AutoGLM-GUI 提供预构建的 Docker 镜像,支持 `linux/amd64` 和 `linux/arm64` 架构,**适合部署到服务器 7x24 小时运行**,配合定时任务功能实现自动化中枢。
|
|
168
208
|
|
|
169
|
-
|
|
209
|
+
**核心优势**:
|
|
210
|
+
- 🚀 **一键部署**:无需配置 Python 环境和依赖
|
|
211
|
+
- ⏰ **定时执行**:配合内置定时任务系统,自动化执行周期性操作
|
|
212
|
+
- 🌐 **远程控制**:通过 Web 界面随时随地管理设备
|
|
213
|
+
- 📊 **稳定运行**:容器化隔离,适合长期运行
|
|
170
214
|
|
|
171
215
|
**使用 docker-compose(推荐):**
|
|
172
216
|
|
|
@@ -382,6 +426,35 @@ AutoGLM-GUI 提供了两种不同的代理工作模式,适用于不同的使
|
|
|
382
426
|
5. **精准转换** - 自动处理屏幕缩放和坐标转换,确保操作位置准确
|
|
383
427
|
6. **显示模式** - 支持自动、视频流、截图三种显示模式切换
|
|
384
428
|
|
|
429
|
+
### ⏰ 定时任务调度(生产力核心功能)
|
|
430
|
+
|
|
431
|
+
AutoGLM-GUI 内置定时任务系统,让 AI 按照你的计划自动执行操作,打造 7x24 小时的自动化助手。
|
|
432
|
+
|
|
433
|
+
**典型应用场景**:
|
|
434
|
+
- 📅 **每日签到**:自动在指定时间完成 App 签到领取积分
|
|
435
|
+
- 🔔 **定时检查**:定期检查订单状态、物流信息、库存变化
|
|
436
|
+
- 📧 **消息提醒**:定时发送消息、提醒事项
|
|
437
|
+
- 🎮 **游戏任务**:自动完成每日任务、领取奖励
|
|
438
|
+
- 💰 **价格监控**:定期检查商品价格变化,自动下单
|
|
439
|
+
|
|
440
|
+
**如何使用**:
|
|
441
|
+
1. **创建定时任务** - 在 Web 界面的"定时任务"页面创建新任务
|
|
442
|
+
2. **设置 Cron 表达式** - 使用 Cron 语法指定执行时间(例如:`0 8 * * *` 表示每天早上 8 点)
|
|
443
|
+
3. **选择执行设备** - 指定要控制的 Android 设备
|
|
444
|
+
4. **定义任务内容** - 描述要执行的操作(支持使用已保存的 Workflow)
|
|
445
|
+
5. **启用任务** - 开启任务后,系统会在指定时间自动执行
|
|
446
|
+
|
|
447
|
+
**Docker 部署推荐**:
|
|
448
|
+
- 将 AutoGLM-GUI 部署到服务器上(VPS、NAS、闲置电脑)
|
|
449
|
+
- 通过 WiFi 连接 Android 设备
|
|
450
|
+
- 服务器 7x24 小时运行,确保定时任务按时执行
|
|
451
|
+
- 通过 Web 界面随时查看执行历史和日志
|
|
452
|
+
|
|
453
|
+
**对话历史支持**:
|
|
454
|
+
- 所有定时任务的执行记录自动保存
|
|
455
|
+
- 支持查看历史执行详情、追溯问题
|
|
456
|
+
- 失败任务自动记录错误信息
|
|
457
|
+
|
|
385
458
|
### Workflow 工作流管理
|
|
386
459
|
|
|
387
460
|
将常用任务保存为 Workflow,实现一键快速执行:
|
|
@@ -416,7 +489,103 @@ AutoGLM-GUI 提供了两种不同的代理工作模式,适用于不同的使
|
|
|
416
489
|
- 📧 **消息发送**:固定内容的消息群发
|
|
417
490
|
- 🔄 **重复操作**:定期执行的维护任务
|
|
418
491
|
|
|
492
|
+
### 📚 对话历史管理(v1.5.0 新增)
|
|
493
|
+
|
|
494
|
+
所有对话和执行记录自动保存到本地数据库,支持随时查看和追溯:
|
|
495
|
+
|
|
496
|
+
**核心功能**:
|
|
497
|
+
- 💾 **自动保存**:所有对话内容、AI 思考过程、执行步骤完整记录
|
|
498
|
+
- 🔍 **历史查看**:在 Web 界面查看所有历史对话
|
|
499
|
+
- 📊 **执行追溯**:详细查看每次任务的执行过程,包括截图、操作、结果
|
|
500
|
+
- ⏰ **定时任务日志**:定时任务的执行记录自动关联到对话历史
|
|
501
|
+
- 🐛 **问题诊断**:失败任务可查看完整日志,快速定位问题
|
|
502
|
+
|
|
503
|
+
**使用场景**:
|
|
504
|
+
- 回顾 AI 的决策过程,优化 Prompt 和任务描述
|
|
505
|
+
- 追溯定时任务的执行情况,确认是否按时完成
|
|
506
|
+
- 查找历史操作记录,复用成功的执行策略
|
|
507
|
+
- 问题排查时查看详细日志和截图
|
|
508
|
+
|
|
509
|
+
**数据存储**:
|
|
510
|
+
- 默认存储位置:`~/.config/autoglm/history.db`(SQLite 数据库)
|
|
511
|
+
- Docker 部署:挂载 volume 确保数据持久化
|
|
512
|
+
- 支持导出和备份
|
|
513
|
+
|
|
514
|
+
## 🎯 生产力场景示例
|
|
515
|
+
|
|
516
|
+
AutoGLM-GUI v1.5 已从单纯的"手机助手"升级为"AI 自动化中枢",以下是典型的生产力应用场景:
|
|
419
517
|
|
|
518
|
+
### 场景 1:服务器定时自动化
|
|
519
|
+
|
|
520
|
+
**配置**:
|
|
521
|
+
```bash
|
|
522
|
+
# 在 VPS/NAS 上部署 Docker
|
|
523
|
+
docker-compose up -d
|
|
524
|
+
|
|
525
|
+
# 通过 WiFi 连接 Android 设备
|
|
526
|
+
# 在 Web 界面配置定时任务
|
|
527
|
+
```
|
|
528
|
+
|
|
529
|
+
**典型任务**:
|
|
530
|
+
- ⏰ 每天早上 8:00 自动签到领积分
|
|
531
|
+
- ⏰ 每晚 22:00 检查订单状态并发送通知
|
|
532
|
+
- ⏰ 每小时检查特定商品价格变化
|
|
533
|
+
- ⏰ 每天中午 12:00 自动点外卖
|
|
534
|
+
|
|
535
|
+
**价值**:AI 助手 7x24 小时运行在服务器上,无需人工干预
|
|
536
|
+
|
|
537
|
+
### 场景 2:多设备批量管理
|
|
538
|
+
|
|
539
|
+
**配置**:
|
|
540
|
+
- 连接 3-5 台 Android 设备(USB 或 WiFi)
|
|
541
|
+
- 每台设备执行不同的自动化任务
|
|
542
|
+
|
|
543
|
+
**典型任务**:
|
|
544
|
+
- 设备 A:电商平台价格监控 + 自动比价
|
|
545
|
+
- 设备 B:社交媒体内容定时发布
|
|
546
|
+
- 设备 C:游戏挂机 + 每日任务
|
|
547
|
+
- 设备 D:物流信息监控 + 状态推送
|
|
548
|
+
|
|
549
|
+
**价值**:一个控制台管理多台设备,规模化自动化
|
|
550
|
+
|
|
551
|
+
### 场景 3:开发调试 + CI/CD
|
|
552
|
+
|
|
553
|
+
**配置**:
|
|
554
|
+
```bash
|
|
555
|
+
# 使用模拟器进行自动化测试
|
|
556
|
+
# 模拟器零配置,自动检测连接
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
**典型任务**:
|
|
560
|
+
- 🧪 自动化 UI 测试(回归测试)
|
|
561
|
+
- 📱 App 安装/卸载/升级测试
|
|
562
|
+
- 🔄 多版本兼容性验证
|
|
563
|
+
- 📊 性能测试数据采集
|
|
564
|
+
|
|
565
|
+
**价值**:结合 CI/CD 流程,实现移动端自动化测试
|
|
566
|
+
|
|
567
|
+
### 场景 4:个人效率提升
|
|
568
|
+
|
|
569
|
+
**配置**:
|
|
570
|
+
- 本地运行桌面版或 Python 包
|
|
571
|
+
- 定义常用 Workflow
|
|
572
|
+
|
|
573
|
+
**典型任务**:
|
|
574
|
+
- 📝 早会前自动整理昨日工作记录
|
|
575
|
+
- 💰 自动记录每日支出到记账 App
|
|
576
|
+
- 📧 定时发送固定格式的周报邮件
|
|
577
|
+
- 🏃 健身 App 自动打卡记录
|
|
578
|
+
|
|
579
|
+
**价值**:减少重复性工作,专注创造性任务
|
|
580
|
+
|
|
581
|
+
### 关键技术组合
|
|
582
|
+
|
|
583
|
+
| 功能组合 | 适用场景 |
|
|
584
|
+
|---------|---------|
|
|
585
|
+
| 定时任务 + Docker + WiFi 连接 | 服务器端 7x24 自动化 |
|
|
586
|
+
| 多设备 + Workflow + 对话历史 | 批量设备管理 + 操作追溯 |
|
|
587
|
+
| 分层代理 + 立即打断 + 实时预览 | 复杂任务调试与优化 |
|
|
588
|
+
| 模拟器直连 + CI/CD 集成 | 自动化测试流程 |
|
|
420
589
|
|
|
421
590
|
## 🛠️ 开发指南
|
|
422
591
|
|
|
@@ -459,6 +628,186 @@ uv run python scripts/build.py
|
|
|
459
628
|
uv run python scripts/build.py --pack
|
|
460
629
|
```
|
|
461
630
|
|
|
631
|
+
## 🔌 MCP (Model Context Protocol) 集成
|
|
632
|
+
|
|
633
|
+
AutoGLM-GUI 内置了 MCP 服务器,可以作为一个工具集成为其他 AI 应用(如 Claude Desktop、Cline、Cursor 等)提供 Android 设备自动化能力。
|
|
634
|
+
|
|
635
|
+
### 什么是 MCP?
|
|
636
|
+
|
|
637
|
+
MCP (Model Context Protocol) 是一个开放协议,允许 AI 应用连接到外部数据源和工具。通过 MCP,你可以让 Claude、Cursor 等 AI 直接操作你的 Android 设备。
|
|
638
|
+
|
|
639
|
+
### MCP Tools
|
|
640
|
+
|
|
641
|
+
AutoGLM-GUI 提供了两个 MCP 工具:
|
|
642
|
+
|
|
643
|
+
#### 1. `chat(device_id, message)` - 执行手机任务
|
|
644
|
+
|
|
645
|
+
向指定设备发送自动化任务,AI 会控制手机完成操作。
|
|
646
|
+
|
|
647
|
+
**参数**:
|
|
648
|
+
- `device_id`:设备标识符(如 "192.168.1.100:5555" 或设备序列号)
|
|
649
|
+
- `message`:自然语言任务描述(如 "打开微信"、"发送消息")
|
|
650
|
+
|
|
651
|
+
**特点**:
|
|
652
|
+
- ✅ 自动初始化设备(使用全局配置)
|
|
653
|
+
- ✅ **Fail-Fast 策略**:找不到元素立即报错,不猜测坐标
|
|
654
|
+
- ✅ **5 步限制**:适合原子操作,避免无限循环
|
|
655
|
+
- ✅ **专用 Prompt**:优化为快速执行模式
|
|
656
|
+
|
|
657
|
+
#### 2. `list_devices()` - 列出已连接设备
|
|
658
|
+
|
|
659
|
+
获取所有已连接的 ADB 设备列表及其状态。
|
|
660
|
+
|
|
661
|
+
**返回信息**:
|
|
662
|
+
- 设备 ID、型号
|
|
663
|
+
- 连接类型(USB/WiFi)
|
|
664
|
+
- 在线状态
|
|
665
|
+
- Agent 初始化状态
|
|
666
|
+
|
|
667
|
+
### 使用场景
|
|
668
|
+
|
|
669
|
+
**典型应用**:
|
|
670
|
+
- 🤝 **Claude Desktop**:让 Claude 直接操作你的 Android 设备
|
|
671
|
+
- 💻 **IDE 集成**:在 Cursor、VS Code (Cline) 中调用手机自动化
|
|
672
|
+
- 🔄 **工作流集成**:作为 AI Agent 工具链的一环
|
|
673
|
+
- 🧪 **自动化测试**:结合 AI 进行移动端 UI 测试
|
|
674
|
+
|
|
675
|
+
**示例**:
|
|
676
|
+
```
|
|
677
|
+
用户:帮我在手机上打开微信,给张三发消息"下午三点开会"
|
|
678
|
+
|
|
679
|
+
AI:
|
|
680
|
+
1. 调用 list_devices() 找到设备
|
|
681
|
+
2. 调用 chat(device_id, "打开微信")
|
|
682
|
+
3. 调用 chat(device_id, "搜索联系人张三")
|
|
683
|
+
4. 调用 chat(device_id, "发送消息:下午三点开会")
|
|
684
|
+
```
|
|
685
|
+
|
|
686
|
+
### 配置 MCP 客户端
|
|
687
|
+
|
|
688
|
+
#### Claude Desktop 配置
|
|
689
|
+
|
|
690
|
+
1. **启动 AutoGLM-GUI**(确保 MCP 端点可访问):
|
|
691
|
+
|
|
692
|
+
```bash
|
|
693
|
+
# 使用默认 MCP 端点(挂载在 /mcp)
|
|
694
|
+
autoglm-gui --base-url http://localhost:8080/v1
|
|
695
|
+
```
|
|
696
|
+
|
|
697
|
+
2. **编辑 Claude Desktop 配置文件**:
|
|
698
|
+
|
|
699
|
+
**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
700
|
+
**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
701
|
+
|
|
702
|
+
添加以下配置:
|
|
703
|
+
|
|
704
|
+
```json
|
|
705
|
+
{
|
|
706
|
+
"mcpServers": {
|
|
707
|
+
"autoglm-gui": {
|
|
708
|
+
"transport": {
|
|
709
|
+
"type": "http",
|
|
710
|
+
"url": "http://localhost:8000/mcp"
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
```
|
|
716
|
+
|
|
717
|
+
3. **重启 Claude Desktop**,即可在对话中使用 AutoGLM-GUI 工具。
|
|
718
|
+
|
|
719
|
+
#### Cline (VS Code) 配置
|
|
720
|
+
|
|
721
|
+
在 VS Code 设置中搜索 "cline",添加 MCP 服务器配置:
|
|
722
|
+
|
|
723
|
+
```json
|
|
724
|
+
{
|
|
725
|
+
"cline.mcpServers": {
|
|
726
|
+
"autoglm-gui": {
|
|
727
|
+
"transport": {
|
|
728
|
+
"type": "http",
|
|
729
|
+
"url": "http://localhost:8000/mcp"
|
|
730
|
+
}
|
|
731
|
+
}
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
```
|
|
735
|
+
|
|
736
|
+
#### Cursor 配置
|
|
737
|
+
|
|
738
|
+
在 Cursor 设置中添加 MCP 服务器(设置 → MCP Servers):
|
|
739
|
+
|
|
740
|
+
```json
|
|
741
|
+
{
|
|
742
|
+
"mcpServers": {
|
|
743
|
+
"autoglm-gui": "http://localhost:8000/mcp"
|
|
744
|
+
}
|
|
745
|
+
}
|
|
746
|
+
```
|
|
747
|
+
|
|
748
|
+
### MCP 端点说明
|
|
749
|
+
|
|
750
|
+
AutoGLM-GUI 的 MCP 服务器通过 HTTP 端点暴露:
|
|
751
|
+
|
|
752
|
+
- **Base URL**:`http://localhost:8000/mcp`
|
|
753
|
+
- **传输协议**:HTTP + SSE (Server-Sent Events)
|
|
754
|
+
- **端口**:跟随主服务端口(默认 8000)
|
|
755
|
+
|
|
756
|
+
**端点路径**:
|
|
757
|
+
- `/mcp/sse` - SSE 传输端点
|
|
758
|
+
- `/mcp/messages` - 消息端点
|
|
759
|
+
|
|
760
|
+
### 技术架构
|
|
761
|
+
|
|
762
|
+
**实现方式**:
|
|
763
|
+
- 基于 **FastMCP** 库构建
|
|
764
|
+
- MCP HTTP App 挂载到 FastAPI 的根路径 `/`
|
|
765
|
+
- 使用 ASGI 应用集成,与 FastAPI 生命周期合并
|
|
766
|
+
- 设备锁管理:使用 `PhoneAgentManager.use_agent` 上下文管理器
|
|
767
|
+
|
|
768
|
+
**专用 Prompt 特性**:
|
|
769
|
+
- **Fail-Fast**:找不到元素立即报错,禁止猜测坐标
|
|
770
|
+
- **Step Limit**:5 步未完成自动中断
|
|
771
|
+
- **目标验证**:执行前必须确认元素在屏幕上可见
|
|
772
|
+
- **错误规范**:使用 `ELEMENT_NOT_FOUND` 和 `STEP_LIMIT_EXCEEDED` 标准化错误
|
|
773
|
+
|
|
774
|
+
### 最佳实践
|
|
775
|
+
|
|
776
|
+
1. **原子任务**:MCP 的 `chat` 工具设计用于执行原子操作(5 步内完成),复杂任务应拆分为多个子任务
|
|
777
|
+
2. **设备管理**:使用 `list_devices()` 先确认设备在线,再执行操作
|
|
778
|
+
3. **错误处理**:AI 应捕获 `ELEMENT_NOT_FOUND` 错误,调整策略后重试
|
|
779
|
+
4. **性能优化**:MCP 调用优先使用本地 API(如 vLLM/SGLang),减少网络延迟
|
|
780
|
+
|
|
781
|
+
### 示例对话
|
|
782
|
+
|
|
783
|
+
**在 Claude Desktop 中**:
|
|
784
|
+
|
|
785
|
+
```
|
|
786
|
+
用户:帮我查一下手机上有几台设备连接了
|
|
787
|
+
|
|
788
|
+
Claude:我调用 list_devices() 工具查看一下...
|
|
789
|
+
|
|
790
|
+
[MCP 工具调用] list_devices()
|
|
791
|
+
|
|
792
|
+
结果:发现 1 台设备
|
|
793
|
+
- 设备 ID: emulator-5554
|
|
794
|
+
- 型号: sdk_gphone64_x86_64
|
|
795
|
+
- 状态: 在线
|
|
796
|
+
|
|
797
|
+
用户:在模拟器上打开设置应用
|
|
798
|
+
|
|
799
|
+
Claude:我调用 chat 工具来操作设备...
|
|
800
|
+
|
|
801
|
+
[MCP 工具调用] chat("emulator-5554", "打开设置应用")
|
|
802
|
+
|
|
803
|
+
执行结果:✅ 已完成
|
|
804
|
+
步骤 1: Launch(app="设置")
|
|
805
|
+
步骤 2: 等待应用加载
|
|
806
|
+
步骤 3: 完成
|
|
807
|
+
|
|
808
|
+
设置应用已成功打开。
|
|
809
|
+
```
|
|
810
|
+
|
|
462
811
|
## 🐳 Docker 部署详细说明
|
|
463
812
|
|
|
464
813
|
> 💡 **提示**:Docker 部署已整合到 [快速开始](#-快速开始) 部分,推荐直接查看上方的"方式二:Docker 部署"说明。
|
|
@@ -2,6 +2,7 @@ AutoGLM_GUI/__init__.py,sha256=ZAaFdGp9Xaep9FvBe_j4YkJWs7-QmIMsaqX_RQ0XTEo,2418
|
|
|
2
2
|
AutoGLM_GUI/__main__.py,sha256=mmE66hKFvAOcOwqyjISQ7WsW-4HS0PaQ9oN2q-3F6Gs,8168
|
|
3
3
|
AutoGLM_GUI/config.py,sha256=OrjhbjcaZWBRLiLTzmknm6pONglDXjfoZngQd8jU9bk,2286
|
|
4
4
|
AutoGLM_GUI/config_manager.py,sha256=Pg2vRqlZzuRbWkROLzZm0AxgSyrGSpBkm9OeG6Ct9ns,25878
|
|
5
|
+
AutoGLM_GUI/device_group_manager.py,sha256=3wD0tMu2v03osA_xGc404MRrMTvO_xyLWKBRXXjxQj4,11558
|
|
5
6
|
AutoGLM_GUI/device_manager.py,sha256=DNXkFV9zN1q1PAkww40PMrq5g-KOelS5K1PumYCu4h4,36380
|
|
6
7
|
AutoGLM_GUI/device_metadata_manager.py,sha256=vKblcuIhsQ5KGTcP3Rh8oxp5QsFHZe2BKU0v-d-SaGs,6137
|
|
7
8
|
AutoGLM_GUI/device_protocol.py,sha256=T3JctpggGekkYDeNXiPj_PoINPg8yFqalTx8Lk9w-9A,6944
|
|
@@ -14,8 +15,8 @@ AutoGLM_GUI/phone_agent_manager.py,sha256=Ong3wh-WWh7Bcrif3JUa2pfu2o5SUsavn-cY8U
|
|
|
14
15
|
AutoGLM_GUI/platform_utils.py,sha256=tsZ-H6Lsgz3aceWQ3GVBmO4lgKBEyD5l-fYyXU7nPU4,3356
|
|
15
16
|
AutoGLM_GUI/prompt_config.py,sha256=3eNEDdlrk8rvuqakQTiVrGEmFFH5X-UdV-9yUibCSsI,336
|
|
16
17
|
AutoGLM_GUI/prompts.py,sha256=lC5UktW0KRpWKij6T0GG1OrNKV9gAfM6dUcp_tjX7mo,4814
|
|
17
|
-
AutoGLM_GUI/scheduler_manager.py,sha256=
|
|
18
|
-
AutoGLM_GUI/schemas.py,sha256=
|
|
18
|
+
AutoGLM_GUI/scheduler_manager.py,sha256=Iw-XGB7wlWoQUF57S4MfGR8bOqCVdJD4imC2aDBYb4U,18237
|
|
19
|
+
AutoGLM_GUI/schemas.py,sha256=oWx4OMt9BIDVkXRUhHmWJUiTuLC2cT5jU_-W6YDq6Po,27549
|
|
19
20
|
AutoGLM_GUI/scrcpy_protocol.py,sha256=h6AtAGq3zMM30FWM7EYiYKJz7BDikpNCOjcKtFcRx3s,997
|
|
20
21
|
AutoGLM_GUI/scrcpy_stream.py,sha256=fOlWMW9U3L6J_pbH0bNaf06HMzuQXwA5e5ZRHhgZHYw,21459
|
|
21
22
|
AutoGLM_GUI/server.py,sha256=Fo2Afl6CFT5B6MBggvR0n_savNxqxW22bFdN51NXRJs,299
|
|
@@ -63,16 +64,16 @@ AutoGLM_GUI/agents/mai/parser.py,sha256=0VoxBiW3gEaU759tw1iD0qoOOFgUcaq-CyiWQJ1u
|
|
|
63
64
|
AutoGLM_GUI/agents/mai/prompts.py,sha256=X3dvVLAP01_OcpUYiwJxBNhETU3lbY-EUK0gJURtkec,4392
|
|
64
65
|
AutoGLM_GUI/agents/mai/traj_memory.py,sha256=2oEpwgz4YGT3KgW0BojFYEcsZL8WKlkaBJao0QcLHcY,2965
|
|
65
66
|
AutoGLM_GUI/api/__init__.py,sha256=Kz3BIrpQm7WeLdz11nD8BC5zKj7pNvKX-i1-OZzPoKE,6984
|
|
66
|
-
AutoGLM_GUI/api/agents.py,sha256=
|
|
67
|
+
AutoGLM_GUI/api/agents.py,sha256=OA0M-DKXV5IoiR9a3m3FgGTgVVyrlN5hCcHDl3-dlEQ,21370
|
|
67
68
|
AutoGLM_GUI/api/control.py,sha256=mxklJ7o4Eb_nc-lZKKG86zMk2s5DHv3WGPatnyzQB44,3374
|
|
68
|
-
AutoGLM_GUI/api/devices.py,sha256=
|
|
69
|
+
AutoGLM_GUI/api/devices.py,sha256=nMKhAw0rlRP9Z5TBWzGepGQmvtKeNBzu1G_MKqfkAPI,22176
|
|
69
70
|
AutoGLM_GUI/api/health.py,sha256=ZedFUv-IHst_YUyeQ_MpL5JXOKuOhWVlHBVwAY3MM0I,266
|
|
70
71
|
AutoGLM_GUI/api/history.py,sha256=GFJ3kphNAkQFATiWAzLVsCJPrjrJ6_LMGYwfUwTHy4c,3582
|
|
71
72
|
AutoGLM_GUI/api/layered_agent.py,sha256=T2O6oKX3BWGSe-OdzSNkrspibLx84lKxrJBYPO_tgck,28563
|
|
72
73
|
AutoGLM_GUI/api/mcp.py,sha256=BG-FKS9E7nZZMtJeKFht3Wy2Qx2fkdlf_Z4gBH204pc,4738
|
|
73
74
|
AutoGLM_GUI/api/media.py,sha256=Cwtk2cikZSBK8gV-igpdtx7bsGYyb2letOe4ZEj0-k4,3806
|
|
74
75
|
AutoGLM_GUI/api/metrics.py,sha256=2h5MnUiMTRAshD6nvcarLVoSlOjtlyVAGg-LRXq03vQ,941
|
|
75
|
-
AutoGLM_GUI/api/scheduled_tasks.py,sha256=
|
|
76
|
+
AutoGLM_GUI/api/scheduled_tasks.py,sha256=DU7Q2C4mjd_YI4QDhes0dY9aLBN1rBKssRLUA0nxfFY,3883
|
|
76
77
|
AutoGLM_GUI/api/version.py,sha256=DYiSNNykJsxOXO1zvf3w5AcAtQJTs2c-qtA1HRVihx0,6085
|
|
77
78
|
AutoGLM_GUI/api/workflows.py,sha256=waYwlm2HxwkcfZwp7Bm2Z2l_bms6UmOy2xJEU9B_t0s,2431
|
|
78
79
|
AutoGLM_GUI/devices/__init__.py,sha256=3RHDxS3feJ1jGdWbDKeOHSFUogmexcEr9lpcXWhlnjg,1471
|
|
@@ -82,38 +83,39 @@ AutoGLM_GUI/devices/remote_device.py,sha256=PXc2uoczKcDi7ovcIZoWcDA8U9CrIXDamyPA
|
|
|
82
83
|
AutoGLM_GUI/model/__init__.py,sha256=eBat20fq5PyTUL_uRW33eQQzj6m3JQkG5rVgmDOgh3c,120
|
|
83
84
|
AutoGLM_GUI/model/message_builder.py,sha256=wUX3iFiR8kj2lBEpI9gJXVISzsW1AgvRVeIG4DaHmEQ,2148
|
|
84
85
|
AutoGLM_GUI/model/types.py,sha256=Lk96Nmn9U69RaT9OZbUgop2HvZK0Dx4ticCqpGgTsM8,750
|
|
85
|
-
AutoGLM_GUI/models/__init__.py,sha256=
|
|
86
|
+
AutoGLM_GUI/models/__init__.py,sha256=9Cdnjj0_46LiJ6cBamu_be5HBBFkhJZg1eF_lOYlXAo,432
|
|
87
|
+
AutoGLM_GUI/models/device_group.py,sha256=2VaZUQrQbtIh_H0MMGdt4vND8b2jMTpp4O7TLy54JR8,1820
|
|
86
88
|
AutoGLM_GUI/models/history.py,sha256=v6_-VA-QQgwnh3SicsRaoDOIpPaB7Z1-AxionFp2OGI,4600
|
|
87
|
-
AutoGLM_GUI/models/scheduled_task.py,sha256=
|
|
89
|
+
AutoGLM_GUI/models/scheduled_task.py,sha256=05LaC-nDm44tRBMkrbialPhwpuhq3udExHHxarNXL3M,4311
|
|
88
90
|
AutoGLM_GUI/parsers/__init__.py,sha256=pa5GK6zVJH0vxofZkkMf4UJmoqAUo29cxI9ujkBeI0E,693
|
|
89
91
|
AutoGLM_GUI/parsers/base.py,sha256=3HGsMAhIv5oQU9GjLGPzMDtDmhScpFQKYK1kaRhNm8w,1565
|
|
90
92
|
AutoGLM_GUI/parsers/phone_parser.py,sha256=JEgfZfpolmGM_j9F1gNZC1nxBNWXlo4h1k_JIyNuLCE,2053
|
|
91
93
|
AutoGLM_GUI/prompts/__init__.py,sha256=GtS7Ek3ds5G8orJj4R-2odjm1Hchje3cF1-1YaxZD38,1069
|
|
92
94
|
AutoGLM_GUI/static/favicon.ico,sha256=uB4wrcENiFaF-K4V-FzNp51XLW8GC4-ujpBDHgISfGM,781
|
|
93
|
-
AutoGLM_GUI/static/index.html,sha256=
|
|
95
|
+
AutoGLM_GUI/static/index.html,sha256=9lrqeoklClQkVnzO7At8CF9RI0sotCceFvmyhc5p9Q4,761
|
|
94
96
|
AutoGLM_GUI/static/logo-192.png,sha256=FOXgZxFrN0ZleO0VjlCnvD5cDkd1okJPkwPDZqsflNs,35243
|
|
95
97
|
AutoGLM_GUI/static/logo-512.png,sha256=HlwSg09dQ3_Jtb09Ght4l2VK3YNLZlP_941LCdpDkWk,251598
|
|
96
|
-
AutoGLM_GUI/static/assets/about-
|
|
97
|
-
AutoGLM_GUI/static/assets/alert-dialog-
|
|
98
|
-
AutoGLM_GUI/static/assets/chat-
|
|
99
|
-
AutoGLM_GUI/static/assets/
|
|
100
|
-
AutoGLM_GUI/static/assets/
|
|
101
|
-
AutoGLM_GUI/static/assets/
|
|
102
|
-
AutoGLM_GUI/static/assets/history-
|
|
103
|
-
AutoGLM_GUI/static/assets/index-
|
|
104
|
-
AutoGLM_GUI/static/assets/index-
|
|
105
|
-
AutoGLM_GUI/static/assets/index-
|
|
106
|
-
AutoGLM_GUI/static/assets/label-
|
|
98
|
+
AutoGLM_GUI/static/assets/about-DVviVdH2.js,sha256=NVVTMlqlSm6n6_SVrCDN4wsvzP5_QpRojbzwzUXXadA,155
|
|
99
|
+
AutoGLM_GUI/static/assets/alert-dialog-IHmO2JCQ.js,sha256=a5ioLUzhO8ca3z36QeXTHDEIwD4amxw68K3_AKkAK1M,3140
|
|
100
|
+
AutoGLM_GUI/static/assets/chat-C_3D0Ao7.js,sha256=pnvSZOSfziZEh2DmZCrX7rYhUVFOSF9NBnV5XzA2CEY,338373
|
|
101
|
+
AutoGLM_GUI/static/assets/dialog-DOpd71Lu.js,sha256=_s5xJZ8174E8e5U_vm-FtUDtvDzVo_LhlAp4ipJBHho,25379
|
|
102
|
+
AutoGLM_GUI/static/assets/eye-CZP5ZJ_Y.js,sha256=-KNuNG2859DLGXORpJonVSCASLfJAaUuY7QbyWaxnYs,339
|
|
103
|
+
AutoGLM_GUI/static/assets/folder-open-_KlT8ZW7.js,sha256=cFb5DE9LNiTZuTY8WmuLCjQOObuP-LZ75AsBRB_tjVU,495
|
|
104
|
+
AutoGLM_GUI/static/assets/history-BXMlCwUV.js,sha256=NMVG64CiIP4oV-NbuhOfhKbMkpdOWm5xRRs3ohgvTqk,10787
|
|
105
|
+
AutoGLM_GUI/static/assets/index-84TrNz7w.css,sha256=A3Emm3UzHtWI05YYsiX9VozvtHI6nRk6i4_sr_OJ6rw,88104
|
|
106
|
+
AutoGLM_GUI/static/assets/index-Bh2f556h.js,sha256=EpXoHE00BrZrRoGJGx6CNbG5apIDAp5EIVNQErkLEhA,229
|
|
107
|
+
AutoGLM_GUI/static/assets/index-DUNWZsFq.js,sha256=j1fZQhEd54fOIZJgjsmJpodxv0GSmIWZQz83NUEAZYc,401456
|
|
108
|
+
AutoGLM_GUI/static/assets/label-CRZhpiYG.js,sha256=KMQm-o07ehQb5EEhhxqWTkx6MJhTYv1xWU1QYR5jOtQ,1679
|
|
107
109
|
AutoGLM_GUI/static/assets/logo-Cyfm06Ym.png,sha256=6GRUFH2KNmB4ZmnrmJ1wxpoIYEmOW-__XlmKImyAMKM,4955675
|
|
108
|
-
AutoGLM_GUI/static/assets/logs-
|
|
109
|
-
AutoGLM_GUI/static/assets/popover-
|
|
110
|
-
AutoGLM_GUI/static/assets/scheduled-tasks-
|
|
111
|
-
AutoGLM_GUI/static/assets/textarea-
|
|
110
|
+
AutoGLM_GUI/static/assets/logs-DEN9nDRS.js,sha256=mC3oEtRdiDpNfedxgjPuOCFk82r9PSvc5o6l4pUWzWg,4817
|
|
111
|
+
AutoGLM_GUI/static/assets/popover-DitUZhUk.js,sha256=tXBBI7rT3A459-tnBrXDWqpuuMhF27s8S9z3jZqaXVE,5775
|
|
112
|
+
AutoGLM_GUI/static/assets/scheduled-tasks-boxDKe87.js,sha256=8ycOmncqhwuPaQuBvFEX6vQ38pZgD89-_3Bc7enFHJk,11395
|
|
113
|
+
AutoGLM_GUI/static/assets/textarea-CvRHzjfV.js,sha256=RbkkYv1g_ak05H6zKWFAztt4CRGgCKN1HSAMr-jF19E,705
|
|
112
114
|
AutoGLM_GUI/static/assets/worker-D6BRitjy.js,sha256=RL1NIRIks9dXdDhXOHK1cCg-OELT0uv9a6u_UEHfQ0Q,173494
|
|
113
|
-
AutoGLM_GUI/static/assets/workflows-
|
|
115
|
+
AutoGLM_GUI/static/assets/workflows-Bg3qN-6j.js,sha256=hu6tnM8rPwP_3k84AQjLfJTOR5N88kTc417tafUReiE,3263
|
|
114
116
|
scrcpy-server-v3.3.3,sha256=fnAyO6fyWWSd1KzOl6xP77roECssbZHi575hP9U1S-A,90164
|
|
115
|
-
autoglm_gui-1.5.
|
|
116
|
-
autoglm_gui-1.5.
|
|
117
|
-
autoglm_gui-1.5.
|
|
118
|
-
autoglm_gui-1.5.
|
|
119
|
-
autoglm_gui-1.5.
|
|
117
|
+
autoglm_gui-1.5.6.dist-info/METADATA,sha256=8uIhl2_yzZL3_23yogG0cWie9KNwRaHSUabEMQEq9C0,33767
|
|
118
|
+
autoglm_gui-1.5.6.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
119
|
+
autoglm_gui-1.5.6.dist-info/entry_points.txt,sha256=sz4rBO_kgrYmOiT0QnhCCv0b9QqBdWyCjugJgY8AEOI,58
|
|
120
|
+
autoglm_gui-1.5.6.dist-info/licenses/LICENSE,sha256=0IkSHDewdtmXnmYzTNq4U47EJYjTuhjQNpT0bZKuqWc,11342
|
|
121
|
+
autoglm_gui-1.5.6.dist-info/RECORD,,
|