Explorar o código

修改deveices 样式

yichael hai 2 semanas
pai
achega
9791316aa8
Modificáronse 49 ficheiros con 1146 adicións e 83 borrados
  1. 0 0
      nodejs/ef-compiler/Func/chat/chat-history.js
  2. 0 0
      nodejs/ef-compiler/Func/chat/ocr-chat.js
  3. 0 0
      nodejs/ef-compiler/Func/chat/read-last-message.js
  4. 0 0
      nodejs/ef-compiler/Func/chat/smart-chat-append.js
  5. 0 0
      nodejs/ef-compiler/Func/image-area-cropping.js
  6. 0 0
      nodejs/ef-compiler/Func/image-center-location.js
  7. 0 0
      nodejs/ef-compiler/Func/image-region-location.js
  8. 0 0
      nodejs/ef-compiler/Func/read-txt.js
  9. 0 0
      nodejs/ef-compiler/Func/save-txt.js
  10. 0 0
      nodejs/ef-compiler/Func/string-reg-location.js
  11. 0 0
      nodejs/ef-compiler/ef-compiler.js
  12. 16 0
      nodejs/run-process.js
  13. 13 11
      src/page/device/connect-item/connect-item.js
  14. 20 23
      src/page/device/connect-item/connect-item.jsx
  15. 24 24
      src/page/device/connect-item/connect-item.scss
  16. 12 1
      src/page/device/device.js
  17. 9 7
      src/page/device/device.jsx
  18. 5 1
      src/page/process/process-item/process-item.js
  19. 2 5
      src/page/process/process-item/process-item.scss
  20. 26 1
      src/page/public/style/style.scss
  21. BIN=BIN
      static/ADBKeyboard.apk
  22. 200 0
      static/process/RedNoteAIThumbsUp/bp.json
  23. 28 0
      static/process/RedNoteAIThumbsUp/process.json
  24. 0 0
      static/process/RedNoteAIThumbsUp/readme.md
  25. BIN=BIN
      static/process/RedNoteAIThumbsUp/resources/点赞按钮_已点赞.png
  26. BIN=BIN
      static/process/RedNoteAIThumbsUp/resources/点赞按钮_未点赞.png
  27. 200 0
      static/process/RedNoteBrowsingAndThumbsUp/bp.json
  28. 130 0
      static/process/RedNoteBrowsingAndThumbsUp/process.json
  29. 3 0
      static/process/RedNoteBrowsingAndThumbsUp/readme.md
  30. BIN=BIN
      static/process/RedNoteBrowsingAndThumbsUp/resources/点赞按钮_已点赞.png
  31. BIN=BIN
      static/process/RedNoteBrowsingAndThumbsUp/resources/点赞按钮_未点赞.png
  32. 27 0
      static/process/Test/process.json
  33. 3 0
      static/process/Test/readme.md
  34. 200 0
      static/process/WeChatAIChating/bp.json
  35. BIN=BIN
      static/process/WeChatAIChating/chatArea.png
  36. BIN=BIN
      static/process/WeChatAIChating/history/ScreenShot.jpg
  37. 1 0
      static/process/WeChatAIChating/history/bg.txt
  38. BIN=BIN
      static/process/WeChatAIChating/history/chat-area-cropped.png
  39. 0 0
      static/process/WeChatAIChating/history/chat-history.txt
  40. 4 0
      static/process/WeChatAIChating/log.txt
  41. 220 0
      static/process/WeChatAIChating/process.json
  42. 3 0
      static/process/WeChatAIChating/readme.md
  43. BIN=BIN
      static/process/WeChatAIChating/resources/ChatArea.png
  44. BIN=BIN
      static/process/WeChatAIChating/resources/ScreenShot.jpg
  45. BIN=BIN
      static/process/WeChatAIChating/resources/好友头像.png
  46. BIN=BIN
      static/process/WeChatAIChating/resources/微信聊天界面的发送按钮定位图.png
  47. BIN=BIN
      static/process/WeChatAIChating/resources/微信聊天界面的输入框定位图.png
  48. BIN=BIN
      static/process/WeChatAIChating/resources/我的头像.png
  49. 0 10
      static/process/WeChatChating/process.json

+ 0 - 0
src/page/process/ef-compiler/Func/chat/chat-history.js → nodejs/ef-compiler/Func/chat/chat-history.js


+ 0 - 0
src/page/process/ef-compiler/Func/chat/ocr-chat.js → nodejs/ef-compiler/Func/chat/ocr-chat.js


+ 0 - 0
src/page/process/ef-compiler/Func/chat/read-last-message.js → nodejs/ef-compiler/Func/chat/read-last-message.js


+ 0 - 0
src/page/process/ef-compiler/Func/chat/smart-chat-append.js → nodejs/ef-compiler/Func/chat/smart-chat-append.js


+ 0 - 0
src/page/process/ef-compiler/Func/image-area-cropping.js → nodejs/ef-compiler/Func/image-area-cropping.js


+ 0 - 0
src/page/process/ef-compiler/Func/image-center-location.js → nodejs/ef-compiler/Func/image-center-location.js


+ 0 - 0
src/page/process/ef-compiler/Func/image-region-location.js → nodejs/ef-compiler/Func/image-region-location.js


+ 0 - 0
src/page/process/ef-compiler/Func/read-txt.js → nodejs/ef-compiler/Func/read-txt.js


+ 0 - 0
src/page/process/ef-compiler/Func/save-txt.js → nodejs/ef-compiler/Func/save-txt.js


+ 0 - 0
src/page/process/ef-compiler/Func/string-reg-location.js → nodejs/ef-compiler/Func/string-reg-location.js


+ 0 - 0
src/page/process/ef-compiler/ef-compiler.js → nodejs/ef-compiler/ef-compiler.js


+ 16 - 0
nodejs/run-process.js

@@ -0,0 +1,16 @@
+const path = require('path')
+const fs = require('fs')
+import adbConnect from './adb/adb-connect.js'
+import efCompile from './ef-compile.js'
+
+let ipList = []
+
+for (let ip of ipList) {
+    let result = await adbConnect(ip, '5555')
+
+    if (result.exitCode === 0) {
+        console.log(`${ip} 连接成功`)
+    } else {
+        console.log(`${ip} 连接失败`)
+    }
+}

+ 13 - 11
src/page/device/connect-item/connect-item.js

@@ -2,22 +2,24 @@ class ConnectItemClass {
     constructor() {
     constructor() {
     }
     }
 
 
-    async init(ipAddress, isConnected, setIsConnected, isPreviewing, setIsPreviewing, onConnect, onPreview, onRemove, setIsSelected, isSelected) {
+    async init(ipAddress, isConnected, setConnectionStatus, isPreviewing, setIsPreviewing, onConnect, onPreview, onRemove) {
         this.ipAddress = ipAddress
         this.ipAddress = ipAddress
         this.is_connected = isConnected || false
         this.is_connected = isConnected || false
         this.is_previewing = isPreviewing || false
         this.is_previewing = isPreviewing || false
-        this.setIsConnected = setIsConnected
+        this._setConnectionStatus = setConnectionStatus  // 'grey' | 'red' | 'green'
         this.setIsPreviewing = setIsPreviewing
         this.setIsPreviewing = setIsPreviewing
         this.onRemoveCallback = onRemove
         this.onRemoveCallback = onRemove
         this.onConnectCallback = onConnect
         this.onConnectCallback = onConnect
         this.onPreviewCallback = onPreview
         this.onPreviewCallback = onPreview
-        this.setIsSelected = setIsSelected
-        this.isSelected = isSelected ?? false
+
+        // 默认灰色,不自动检测连接状态
     }
     }
 
 
-    // 单选框点击:切换选中/未选中(点击一下选中,再点击一下取消)
-    onSelect() {
-        this.setIsSelected(!this.isSelected)
+    /** 切换状态颜色 grey | red | green */
+    switchStatus(status) {
+        if (['grey', 'red', 'green'].includes(status)) {
+            this._setConnectionStatus(status)
+        }
     }
     }
 
 
     async onConnect() {
     async onConnect() {
@@ -29,11 +31,11 @@ class ConnectItemClass {
         
         
         const result = await this.connect()
         const result = await this.connect()
         if (!result) {
         if (!result) {
+            this.switchStatus('red')
             return
             return
         }
         }
-        
-        this.setIsConnected(true)
-        this.onConnectCallback(this.ipAddress)
+        this.switchStatus('green')
+        this.onConnectCallback?.(this.ipAddress)
     }
     }
 
 
     async onPreview() {
     async onPreview() {
@@ -71,7 +73,7 @@ class ConnectItemClass {
         await window.electronAPI.runNodejsScript('adb/adb-disconnect', this.ipAddress, '5555')
         await window.electronAPI.runNodejsScript('adb/adb-disconnect', this.ipAddress, '5555')
         this.stopConnectionCheck()
         this.stopConnectionCheck()
         this.is_connected = false
         this.is_connected = false
-        this.setIsConnected(false)
+        this.switchStatus('grey')
     }
     }
 
 
     // 停止连接检查定时器
     // 停止连接检查定时器

+ 20 - 23
src/page/device/connect-item/connect-item.jsx

@@ -2,26 +2,27 @@ import React, { useState, useRef, useEffect } from 'react'
 import './connect-item.scss'
 import './connect-item.scss'
 import { ConnectItemClass } from './connect-item.js'
 import { ConnectItemClass } from './connect-item.js'
 
 
-function ConnectItem({ ipAddress, isConnected=false, selected=false, onRemove, onConnect, onPreview }) {
+// 连接状态: grey 灰色(未连接) | red 红色(错误) | green 绿色(已连接)
+function ConnectItem({ ipAddress, isConnected=false, selected=false, onSelect, onRemove, onConnect, onPreview }) {
   const connectItemClassRef = useRef(null)
   const connectItemClassRef = useRef(null)
-  const [isConnectedState, setIsConnectedState] = useState(isConnected)
+  const [connectionStatus, setConnectionStatus] = useState('grey')  // 默认灰色,由 connect-item.js 切换
   const [isPreviewing, setIsPreviewing] = useState(false)
   const [isPreviewing, setIsPreviewing] = useState(false)
-  const [isSelected, setIsSelected] = useState(selected)
+
+  const setConnectionStatusRef = useRef(setConnectionStatus)
+  setConnectionStatusRef.current = setConnectionStatus
 
 
   useEffect(() => {
   useEffect(() => {
     if (!connectItemClassRef.current) {
     if (!connectItemClassRef.current) {
       connectItemClassRef.current = new ConnectItemClass()
       connectItemClassRef.current = new ConnectItemClass()
       connectItemClassRef.current.init(
       connectItemClassRef.current.init(
         ipAddress, 
         ipAddress, 
-        isConnectedState, 
-        setIsConnectedState,
+        connectionStatus === 'green', 
+        (status) => setConnectionStatusRef.current(status),
         isPreviewing,
         isPreviewing,
         setIsPreviewing,
         setIsPreviewing,
         onConnect,
         onConnect,
         onPreview,
         onPreview,
-        onRemove,
-        setIsSelected,
-        isSelected
+        onRemove
       )
       )
     }
     }
     return () => {
     return () => {
@@ -31,22 +32,15 @@ function ConnectItem({ ipAddress, isConnected=false, selected=false, onRemove, o
     }
     }
   }, [])
   }, [])
 
 
-  // 把最新的 isSelected 同步到 Class,这样 Class 里 this.isSelected 始终是当前值
-  useEffect(() => {
-    if (connectItemClassRef.current) {
-      connectItemClassRef.current.isSelected = isSelected
-    }
-  }, [isSelected])
-  
   return (
   return (
     <div className="connect-item-container">
     <div className="connect-item-container">
 
 
-      <div className={`select-btn ${isSelected ? 'select-btn--selected' : ''}`}
-          onClick={() => connectItemClassRef.current?.onSelect()}
-          role="radio"
-          aria-checked={isSelected}
+      <div className={`select-btn ${selected ? 'select-btn--selected' : ''}`}
+          onClick={() => onSelect?.(ipAddress)}
+          role="checkbox"
+          aria-checked={selected}
         >
         >
-          {isSelected ? (
+          {selected ? (
             <svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" width="100%" height="100%">
             <svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" width="100%" height="100%">
               <circle cx="12" cy="12" r="10" stroke="currentColor" strokeWidth="2" fill="none"/>
               <circle cx="12" cy="12" r="10" stroke="currentColor" strokeWidth="2" fill="none"/>
               <path d="M6 12l4 4 8-10" stroke="#00c853" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" fill="none"/>
               <path d="M6 12l4 4 8-10" stroke="#00c853" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" fill="none"/>
@@ -63,12 +57,15 @@ function ConnectItem({ ipAddress, isConnected=false, selected=false, onRemove, o
         <div className="ip-address">{ipAddress}</div>
         <div className="ip-address">{ipAddress}</div>
       
       
         <div className="btn-area-container">
         <div className="btn-area-container">
-          <div className="connect-btn" onClick={() => connectItemClassRef.current?.onConnect()}>
-            {isConnectedState ? '断开' : '连接'}
-          </div>
+          
           <div className="preview-btn" onClick={() => connectItemClassRef.current?.onPreview()}>
           <div className="preview-btn" onClick={() => connectItemClassRef.current?.onPreview()}>
             {isPreviewing ? '停止预览' : '预览'}
             {isPreviewing ? '停止预览' : '预览'}
           </div>
           </div>
+
+          <div
+            className={`status-indicator status-indicator--${connectionStatus}`}
+            title={connectionStatus === 'green' ? '已连接' : connectionStatus === 'red' ? '连接异常' : '未连接'}
+          />
         </div>
         </div>
       </div>
       </div>
 
 

+ 24 - 24
src/page/device/connect-item/connect-item.scss

@@ -57,7 +57,7 @@ $font-size-scale: 1.5;  // 字体缩放系数,调整此值可改变字体大
     width: 80%;
     width: 80%;
     height: 100%;
     height: 100%;
     display: flex;
     display: flex;
-    flex-direction: column;
+    flex-direction: row;
     align-items: center;
     align-items: center;
     justify-content: center;
     justify-content: center;
 
 
@@ -65,47 +65,47 @@ $font-size-scale: 1.5;  // 字体缩放系数,调整此值可改变字体大
     border: 1px solid #000000;
     border: 1px solid #000000;
 
 
     .ip-address {
     .ip-address {
-        width: 100%;
-        height: 30%;
+        width: 50%;
+        height: 100%;
     
     
         margin: 1%;
         margin: 1%;
         @include flex-center;
         @include flex-center;
     }
     }
 
 
     .btn-area-container {
     .btn-area-container {
-        width: 100%;
-        height: 70%;
-
+        width: 50%;
+        height: 50%;
         display: flex;
         display: flex;
         flex-direction: row;
         flex-direction: row;
         align-items: center;
         align-items: center;
         justify-content: space-around;
         justify-content: space-around;
 
 
-        .connect-btn {
-            width: 40%;
-            height: 80%;
-
-            margin: 1%;
-            @include flex-center;
-
-            color: #ffffff;
-            font-weight: bold;
-            border-radius: 10px;
-            @include highlight-btn(#004ef6);
-        }
-
         .preview-btn {
         .preview-btn {
-            width: 40%;
-            height: 80%;
-
-            margin: 1%;
+            width: 60%;
+            height: 100%;
             @include flex-center;
             @include flex-center;
 
 
             color: #000000;
             color: #000000;
             font-weight: bold;
             font-weight: bold;
             border-radius: 10px;
             border-radius: 10px;
             @include highlight-btn(#00fb43);
             @include highlight-btn(#00fb43);
-        }     
+        }    
+        
+        .status-indicator {
+            width: 20%;
+            aspect-ratio: 1;  /* 高度自适应宽度,保持圆形 */
+            border-radius: 50%;
+
+            &--grey {
+                @include highlight-glow(#9e9e9e);
+            }
+            &--red {
+                @include highlight-glow(#f44336);
+            }
+            &--green {
+                @include highlight-glow(#4caf50);
+            }
+        }
     }
     }
   }
   }
 
 

+ 12 - 1
src/page/device/device.js

@@ -2,6 +2,17 @@ import comfirmView from '../public/comfirm-view/comfirm-view.js'
 import hintView from '../public/hint-view/hint-view.js'
 import hintView from '../public/hint-view/hint-view.js'
 import alertView from '../public/alert-view/alert-view.js'
 import alertView from '../public/alert-view/alert-view.js'
 
 
+// 模块级 store,供 ProcessItemClass 等普通类读取
+let _selectedDevices = []
+export function getSelectedDevices() {
+  console.log('[store] getSelectedDevices', _selectedDevices.length, _selectedDevices)
+  return _selectedDevices
+}
+export function setSelectedDevicesStore(devices) {
+  console.log('[store] setSelectedDevicesStore', devices?.length, devices)
+  _selectedDevices = devices || []
+}
+
 // 设备管理类,所有方法都可以通过 this. 访问属性
 // 设备管理类,所有方法都可以通过 this. 访问属性
 class DeviceClass {
 class DeviceClass {
     constructor() {}
     constructor() {}
@@ -78,7 +89,7 @@ class DeviceClass {
         if (result.exitCode === 0) {
         if (result.exitCode === 0) {
             hintView.setContent('设备添加成功')
             hintView.setContent('设备添加成功')
             hintView.show()
             hintView.show()
-            this.setSelectedDevice(ip)
+            this.setSelectedDevice(prev => [...(prev || []), ip])
             await this.addDevice(ip, this.currentDeviceList || [])
             await this.addDevice(ip, this.currentDeviceList || [])
             this.setInputValue?.('192.168.')
             this.setInputValue?.('192.168.')
             return
             return

+ 9 - 7
src/page/device/device.jsx

@@ -3,15 +3,13 @@ import './device.scss'
 import UpdateBtn from './update-btn/update-btn.jsx'
 import UpdateBtn from './update-btn/update-btn.jsx'
 import ConnectItem from './connect-item/connect-item.jsx'
 import ConnectItem from './connect-item/connect-item.jsx'
 
 
-import { DeviceClass } from './device.js'
-
-import { alertView, hintView, comfirmView } from '../home.jsx'
+import { DeviceClass, setSelectedDevicesStore } from './device.js'
 
 
 function Device({ show }) {
 function Device({ show }) {
   const [deviceList, setDeviceList] = useState([])
   const [deviceList, setDeviceList] = useState([])
   const deviceClass = useRef(null)
   const deviceClass = useRef(null)
   const [inputValue, setInputValue] = useState('192.168.')
   const [inputValue, setInputValue] = useState('192.168.')
-  const [selectedDevice, setSelectedDevice] = useState(null)
+  const [selectedDevices, setSelectedDevices] = useState([])  // 数组,记录所有选中的 device IP
   if (!show) {
   if (!show) {
     return null
     return null
   }
   }
@@ -19,7 +17,7 @@ function Device({ show }) {
   useEffect(() => {
   useEffect(() => {
     if (!deviceClass.current) {
     if (!deviceClass.current) {
       deviceClass.current = new DeviceClass()
       deviceClass.current = new DeviceClass()
-      deviceClass.current.init(setDeviceList, inputValue, setSelectedDevice, setInputValue)
+      deviceClass.current.init(setDeviceList, inputValue, setSelectedDevices, setInputValue)
     }
     }
   }, [])
   }, [])
 
 
@@ -31,6 +29,10 @@ function Device({ show }) {
     if (deviceClass.current) deviceClass.current.currentDeviceList = deviceList
     if (deviceClass.current) deviceClass.current.currentDeviceList = deviceList
   }, [deviceList])
   }, [deviceList])
 
 
+  useEffect(() => {
+    setSelectedDevicesStore(selectedDevices)
+  }, [selectedDevices])
+
   return (
   return (
     <>
     <>
       <div className="device-container">
       <div className="device-container">
@@ -51,8 +53,8 @@ function Device({ show }) {
             <ConnectItem 
             <ConnectItem 
               key={index} 
               key={index} 
               ipAddress={deviceList[index]} 
               ipAddress={deviceList[index]} 
-              selected={selectedDevice === deviceList[index]}
-              onSelect={(ip) => setSelectedDevice(ip)}
+              selected={selectedDevices.includes(deviceList[index])}
+              onSelect={(ip) => setSelectedDevices(prev => prev.includes(ip) ? prev.filter(x => x !== ip) : [...prev, ip])}
               onRemove={(ip) => deviceClass.current?.onRemoveDevice(ip)}
               onRemove={(ip) => deviceClass.current?.onRemoveDevice(ip)}
             />
             />
           ))}
           ))}

+ 5 - 1
src/page/process/process-item/process-item.js

@@ -1,3 +1,5 @@
+import { getSelectedDevices } from '../../device/device.js'
+
 class ProcessItemClass {
 class ProcessItemClass {
   constructor() {
   constructor() {
   }
   }
@@ -7,8 +9,10 @@ class ProcessItemClass {
     this.setIsRunning = setIsRunning
     this.setIsRunning = setIsRunning
   }
   }
 
 
-  start() {
+  async start() {
     if (this.setIsRunning) this.setIsRunning(true)
     if (this.setIsRunning) this.setIsRunning(true)
+    const selectedDevices = getSelectedDevices()
+    console.log('选中的设备:', selectedDevices)
   }
   }
 
 
   stop() {
   stop() {

+ 2 - 5
src/page/process/process-item/process-item.scss

@@ -12,8 +12,6 @@ $font-size-scale: 1.5;  // 字体缩放系数,调整此值可改变字体大
 
 
     box-sizing: border-box;
     box-sizing: border-box;
     padding: 0;
     padding: 0;
-    // margin: 5%;
-
     border-radius: 10px;
     border-radius: 10px;
     /* 计算过程:
     /* 计算过程:
     应为process的宽高为20vw × 100vh 
     应为process的宽高为20vw × 100vh 
@@ -35,13 +33,12 @@ $font-size-scale: 1.5;  // 字体缩放系数,调整此值可改变字体大
         align-items: center;
         align-items: center;
         justify-content: center;
         justify-content: center;
 
 
-        // margin: 1%;
-
         .process-item-title {
         .process-item-title {
             @include flex-center;
             @include flex-center;
             width: 100%;
             width: 100%;
             height: 50%;
             height: 50%;
         
         
+            margin-left: 10%;
             font-size: 1.3em;
             font-size: 1.3em;
             font-weight: bold;
             font-weight: bold;
             word-break: break-word;
             word-break: break-word;
@@ -53,7 +50,7 @@ $font-size-scale: 1.5;  // 字体缩放系数,调整此值可改变字体大
 
 
             width: 100%;
             width: 100%;
             height: 50%;   
             height: 50%;   
-
+            
             font-size: 1.0em;
             font-size: 1.0em;
             word-break: break-word;
             word-break: break-word;
         }
         }

+ 26 - 1
src/page/public/style/style.scss

@@ -1,6 +1,31 @@
 @use "sass:color";
 @use "sass:color";
 
 
-// 按钮高亮
+// 按钮高光(无 hover/active 效果)
+@mixin highlight-glow($base-color) {
+    $light-color: color.adjust($base-color, $lightness: 8%);
+    $dark-color: color.adjust($base-color, $lightness: -10%);
+    
+    background: linear-gradient(135deg, $light-color 0%, $dark-color 100%);
+    box-shadow: 
+        inset 0 1px 2px rgba(255, 255, 255, 0.3),
+        inset 0 -1px 2px rgba(0, 0, 0, 0.3),
+        0 2px 4px rgba(0, 0, 0, 0.2);
+    position: relative;
+    overflow: hidden;
+    
+    &::before {
+        content: '';
+        position: absolute;
+        top: 0;
+        left: 0;
+        right: 0;
+        height: 50%;
+        background: linear-gradient(180deg, rgba(255, 255, 255, 0.2) 0%, transparent 100%);
+        pointer-events: none;
+    }
+}
+
+// 按钮高亮(含 hover/active)
 @mixin highlight-btn($base-color) {
 @mixin highlight-btn($base-color) {
     $light-color: color.adjust($base-color, $lightness: 8%);
     $light-color: color.adjust($base-color, $lightness: 8%);
     $dark-color: color.adjust($base-color, $lightness: -10%);
     $dark-color: color.adjust($base-color, $lightness: -10%);

BIN=BIN
static/ADBKeyboard.apk


+ 200 - 0
static/process/RedNoteAIThumbsUp/bp.json

@@ -0,0 +1,200 @@
+{
+	"nodePositions": {
+		"node_begin_1768681618551": {
+			"x": 150,
+			"y": 100
+		},
+		"node_0": {
+			"x": 150,
+			"y": 300
+		},
+		"node_1": {
+			"x": 470,
+			"y": 100
+		},
+		"node_2": {
+			"x": 470,
+			"y": 300
+		},
+		"node_3": {
+			"x": 470,
+			"y": 500
+		},
+		"node_4": {
+			"x": 470,
+			"y": 700
+		},
+		"node_5": {
+			"x": 470,
+			"y": 900
+		},
+		"node_6": {
+			"x": 470,
+			"y": 1100
+		},
+		"node_7": {
+			"x": 470,
+			"y": 1300
+		},
+		"node_8": {
+			"x": 470,
+			"y": 1500
+		},
+		"node_9": {
+			"x": 470,
+			"y": 1700
+		},
+		"node_10": {
+			"x": 150,
+			"y": 1900
+		},
+		"node_11": {
+			"x": 790,
+			"y": 100
+		},
+		"node_12": {
+			"x": 790,
+			"y": 300
+		},
+		"node_13": {
+			"x": 150,
+			"y": 2100
+		},
+		"node_14": {
+			"x": 150,
+			"y": 2300
+		},
+		"node_15": {
+			"x": 150,
+			"y": 2500
+		},
+		"node_16": {
+			"x": 150,
+			"y": 2700
+		},
+		"node_17": {
+			"x": 150,
+			"y": 2900
+		},
+		"node_18": {
+			"x": 150,
+			"y": 3100
+		},
+		"node_19": {
+			"x": 150,
+			"y": 3300
+		},
+		"node_20": {
+			"x": 150,
+			"y": 500
+		},
+		"node_21": {
+			"x": 150,
+			"y": 700
+		},
+		"node_22": {
+			"x": 150,
+			"y": 900
+		},
+		"node_23": {
+			"x": 1110,
+			"y": 100
+		},
+		"node_24": {
+			"x": 1110,
+			"y": 300
+		},
+		"node_25": {
+			"x": 1430,
+			"y": 100
+		},
+		"node_26": {
+			"x": 1430,
+			"y": 300
+		},
+		"node_27": {
+			"x": 790,
+			"y": 500
+		},
+		"node_28": {
+			"x": 790,
+			"y": 700
+		},
+		"node_29": {
+			"x": 790,
+			"y": 900
+		},
+		"node_30": {
+			"x": 150,
+			"y": 1100
+		},
+		"node_31": {
+			"x": 150,
+			"y": 1300
+		},
+		"node_32": {
+			"x": 150,
+			"y": 1500
+		},
+		"node_33": {
+			"x": 150,
+			"y": 1700
+		},
+		"var_turn_1768681618551": {
+			"x": 50,
+			"y": 200
+		},
+		"var_relationBg_1768681618551": {
+			"x": 50,
+			"y": 320
+		},
+		"var_chatArea_1768681618551": {
+			"x": 50,
+			"y": 440
+		},
+		"var_chatHistoryMessage_1768681618551": {
+			"x": 50,
+			"y": 560
+		},
+		"var_currentChatMessage_1768681618551": {
+			"x": 50,
+			"y": 680
+		},
+		"var_lastHistoryMessage_1768681618551": {
+			"x": 50,
+			"y": 800
+		},
+		"var_lastChatMessage_1768681618551": {
+			"x": 50,
+			"y": 920
+		},
+		"var_lastChatRole_1768681618551": {
+			"x": 50,
+			"y": 1040
+		},
+		"var_lastHistoryChatMessage_1768681618551": {
+			"x": 50,
+			"y": 1160
+		},
+		"var_lastHistoryChatRole_1768681618551": {
+			"x": 50,
+			"y": 1280
+		},
+		"var_aiReply_1768681618551": {
+			"x": 50,
+			"y": 1400
+		},
+		"var_aiCallBack_1768681618551": {
+			"x": 50,
+			"y": 1520
+		},
+		"var_sendBtnPos_1768681618551": {
+			"x": 50,
+			"y": 1640
+		},
+		"var_newChatMessage_1768681618551": {
+			"x": 50,
+			"y": 1760
+		}
+	}
+}

+ 28 - 0
static/process/RedNoteAIThumbsUp/process.json

@@ -0,0 +1,28 @@
+{
+	"name": "RedNoteAIThumbsUp",
+    	"description": "小红书自动点赞",
+	"variables": {
+		"sendBtnPos": ""
+	},
+	"execute": [
+		{
+			"type": "image-center-location",
+			"inVars": ["点赞按钮_未点赞.png"],
+			"outVars": ["{sendBtnPos}"]
+		},
+		{
+			"type": "while",
+			"condition": "{sendBtnPos}==\"\"",
+			"ture": 
+			[
+							
+			]
+		},
+		{
+			
+			"type": "adb",
+			"method": "click",
+			"inVars": ["{sendBtnPos}"]
+		}		
+	]
+}

+ 0 - 0
static/process/WeChatChating/readme.md → static/process/RedNoteAIThumbsUp/readme.md


BIN=BIN
static/process/RedNoteAIThumbsUp/resources/点赞按钮_已点赞.png


BIN=BIN
static/process/RedNoteAIThumbsUp/resources/点赞按钮_未点赞.png


+ 200 - 0
static/process/RedNoteBrowsingAndThumbsUp/bp.json

@@ -0,0 +1,200 @@
+{
+	"nodePositions": {
+		"node_begin_1768681618551": {
+			"x": 150,
+			"y": 100
+		},
+		"node_0": {
+			"x": 150,
+			"y": 300
+		},
+		"node_1": {
+			"x": 470,
+			"y": 100
+		},
+		"node_2": {
+			"x": 470,
+			"y": 300
+		},
+		"node_3": {
+			"x": 470,
+			"y": 500
+		},
+		"node_4": {
+			"x": 470,
+			"y": 700
+		},
+		"node_5": {
+			"x": 470,
+			"y": 900
+		},
+		"node_6": {
+			"x": 470,
+			"y": 1100
+		},
+		"node_7": {
+			"x": 470,
+			"y": 1300
+		},
+		"node_8": {
+			"x": 470,
+			"y": 1500
+		},
+		"node_9": {
+			"x": 470,
+			"y": 1700
+		},
+		"node_10": {
+			"x": 150,
+			"y": 1900
+		},
+		"node_11": {
+			"x": 790,
+			"y": 100
+		},
+		"node_12": {
+			"x": 790,
+			"y": 300
+		},
+		"node_13": {
+			"x": 150,
+			"y": 2100
+		},
+		"node_14": {
+			"x": 150,
+			"y": 2300
+		},
+		"node_15": {
+			"x": 150,
+			"y": 2500
+		},
+		"node_16": {
+			"x": 150,
+			"y": 2700
+		},
+		"node_17": {
+			"x": 150,
+			"y": 2900
+		},
+		"node_18": {
+			"x": 150,
+			"y": 3100
+		},
+		"node_19": {
+			"x": 150,
+			"y": 3300
+		},
+		"node_20": {
+			"x": 150,
+			"y": 500
+		},
+		"node_21": {
+			"x": 150,
+			"y": 700
+		},
+		"node_22": {
+			"x": 150,
+			"y": 900
+		},
+		"node_23": {
+			"x": 1110,
+			"y": 100
+		},
+		"node_24": {
+			"x": 1110,
+			"y": 300
+		},
+		"node_25": {
+			"x": 1430,
+			"y": 100
+		},
+		"node_26": {
+			"x": 1430,
+			"y": 300
+		},
+		"node_27": {
+			"x": 790,
+			"y": 500
+		},
+		"node_28": {
+			"x": 790,
+			"y": 700
+		},
+		"node_29": {
+			"x": 790,
+			"y": 900
+		},
+		"node_30": {
+			"x": 150,
+			"y": 1100
+		},
+		"node_31": {
+			"x": 150,
+			"y": 1300
+		},
+		"node_32": {
+			"x": 150,
+			"y": 1500
+		},
+		"node_33": {
+			"x": 150,
+			"y": 1700
+		},
+		"var_turn_1768681618551": {
+			"x": 50,
+			"y": 200
+		},
+		"var_relationBg_1768681618551": {
+			"x": 50,
+			"y": 320
+		},
+		"var_chatArea_1768681618551": {
+			"x": 50,
+			"y": 440
+		},
+		"var_chatHistoryMessage_1768681618551": {
+			"x": 50,
+			"y": 560
+		},
+		"var_currentChatMessage_1768681618551": {
+			"x": 50,
+			"y": 680
+		},
+		"var_lastHistoryMessage_1768681618551": {
+			"x": 50,
+			"y": 800
+		},
+		"var_lastChatMessage_1768681618551": {
+			"x": 50,
+			"y": 920
+		},
+		"var_lastChatRole_1768681618551": {
+			"x": 50,
+			"y": 1040
+		},
+		"var_lastHistoryChatMessage_1768681618551": {
+			"x": 50,
+			"y": 1160
+		},
+		"var_lastHistoryChatRole_1768681618551": {
+			"x": 50,
+			"y": 1280
+		},
+		"var_aiReply_1768681618551": {
+			"x": 50,
+			"y": 1400
+		},
+		"var_aiCallBack_1768681618551": {
+			"x": 50,
+			"y": 1520
+		},
+		"var_sendBtnPos_1768681618551": {
+			"x": 50,
+			"y": 1640
+		},
+		"var_newChatMessage_1768681618551": {
+			"x": 50,
+			"y": 1760
+		}
+	}
+}

+ 130 - 0
static/process/RedNoteBrowsingAndThumbsUp/process.json

@@ -0,0 +1,130 @@
+{
+	"name": "RedNoteBrowsingAndThumbsUp",
+        "description": "小红书随机浏览和点赞",
+	"variables": {
+		"page-index":0,
+		"up-or-down":0,
+		"swipe-count":0,
+		"click-x":0,
+		"click-y":0,
+		"random-click-pos":"",
+		"stay-duration":0,
+		"send-btn-pos": ""
+	},
+	"execute": [
+		{
+			"type": "schedule",
+			"condition": 
+			{
+				"interval": "1s",
+				"repeat": -1
+			},
+			"interval": 
+			[
+				{
+					"type": "random",
+					"inVars": ["1", "3"],
+					"outVars": ["{swipeCount}"]
+				},
+				{
+					"type": "schedule",
+					"condition": 
+					{
+						"interval": "1s",
+						"repeat": "{swipeCount}"
+					},
+					"interval": 
+					[
+						{
+					
+							"type": "adb",
+							"method": "swipe",
+							"inVars": ["down-up"],
+							"outVars": []
+						}
+					]
+				},
+				{
+					"type": "random",
+					"inVars": ["200", "880"],
+					"outVars": ["{clickX}"]
+				},
+				{
+					"type": "random",
+					"inVars": ["400", "2000"],
+					"outVars": ["{clickY}"]
+				},
+				{
+					"type": "set",
+					"variable": "{random-click-pos}",
+					"value": "{clickX},{clickY}"
+				},
+				{
+					
+					"type": "adb",
+					"method": "click",
+					"inVars": ["{random-click-pos}"]
+				},
+				{
+					"type": "random",
+					"inVars": [10, 2000],
+					"outVars": ["{stay-duration}"]
+				},
+				{
+					"type": "delay",
+					"value": "{{stay-duration}}m"
+				},
+				{
+					"type": "random",
+					"inVars": [0, 1],
+					"outVars": ["{b-like-click}"]
+				},
+				{
+					"type": "if",
+						"condition": "{b-like-click} == 1",
+						"ture": [
+							{
+								"type": "image-center-location",
+								"inVars": ["点赞按钮_未点赞.png"],
+								"outVars": ["{send-btn-pos}"]
+							},
+							{
+								"type": "while",
+								"condition": "{send-btn-pos}==\"\"",
+								"ture": 
+								[
+												
+								]
+							},
+							{
+								
+								"type": "adb",
+								"method": "click",
+								"inVars": ["{send-btn-pos}"]
+							}
+						],
+						"false": [
+							{
+
+							}
+						]
+				},
+				{
+					"type": "random",
+					"inVars": [5, 12],
+					"outVars": ["{back-duration}"]
+				},
+				{
+					"type": "delay",
+					"value": "{{back-duration}}s"
+				},
+				{
+					"type": "adb",
+					"method": "keyevent",
+					"inVars": ["4"],
+					"outVars": []
+				}
+			]
+		}		
+	]
+}

+ 3 - 0
static/process/RedNoteBrowsingAndThumbsUp/readme.md

@@ -0,0 +1,3 @@
+# WeChatChating
+
+用于微信聊天机器人

BIN=BIN
static/process/RedNoteBrowsingAndThumbsUp/resources/点赞按钮_已点赞.png


BIN=BIN
static/process/RedNoteBrowsingAndThumbsUp/resources/点赞按钮_未点赞.png


+ 27 - 0
static/process/Test/process.json

@@ -0,0 +1,27 @@
+{
+    "name": "Test",
+    "description": "测试",
+    "variables": [
+      
+    ],
+    "execute": 
+    [
+        {
+            "type": "schedule",
+			"condition": 
+			{
+				"interval": "1s",
+				"repeat": -1
+			},
+			"interval": 
+			[
+				{
+                    "type": "adb",
+                    "method": "swipe",
+                    "inVars": ["down-up"],
+                    "outVars": []
+                }
+            ]
+        }
+    ]
+}

+ 3 - 0
static/process/Test/readme.md

@@ -0,0 +1,3 @@
+# WeChatChating
+
+用于微信聊天机器人

+ 200 - 0
static/process/WeChatAIChating/bp.json

@@ -0,0 +1,200 @@
+{
+	"nodePositions": {
+		"node_begin_1768681618551": {
+			"x": 150,
+			"y": 100
+		},
+		"node_0": {
+			"x": 150,
+			"y": 300
+		},
+		"node_1": {
+			"x": 470,
+			"y": 100
+		},
+		"node_2": {
+			"x": 470,
+			"y": 300
+		},
+		"node_3": {
+			"x": 470,
+			"y": 500
+		},
+		"node_4": {
+			"x": 470,
+			"y": 700
+		},
+		"node_5": {
+			"x": 470,
+			"y": 900
+		},
+		"node_6": {
+			"x": 470,
+			"y": 1100
+		},
+		"node_7": {
+			"x": 470,
+			"y": 1300
+		},
+		"node_8": {
+			"x": 470,
+			"y": 1500
+		},
+		"node_9": {
+			"x": 470,
+			"y": 1700
+		},
+		"node_10": {
+			"x": 150,
+			"y": 1900
+		},
+		"node_11": {
+			"x": 790,
+			"y": 100
+		},
+		"node_12": {
+			"x": 790,
+			"y": 300
+		},
+		"node_13": {
+			"x": 150,
+			"y": 2100
+		},
+		"node_14": {
+			"x": 150,
+			"y": 2300
+		},
+		"node_15": {
+			"x": 150,
+			"y": 2500
+		},
+		"node_16": {
+			"x": 150,
+			"y": 2700
+		},
+		"node_17": {
+			"x": 150,
+			"y": 2900
+		},
+		"node_18": {
+			"x": 150,
+			"y": 3100
+		},
+		"node_19": {
+			"x": 150,
+			"y": 3300
+		},
+		"node_20": {
+			"x": 150,
+			"y": 500
+		},
+		"node_21": {
+			"x": 150,
+			"y": 700
+		},
+		"node_22": {
+			"x": 150,
+			"y": 900
+		},
+		"node_23": {
+			"x": 1110,
+			"y": 100
+		},
+		"node_24": {
+			"x": 1110,
+			"y": 300
+		},
+		"node_25": {
+			"x": 1430,
+			"y": 100
+		},
+		"node_26": {
+			"x": 1430,
+			"y": 300
+		},
+		"node_27": {
+			"x": 790,
+			"y": 500
+		},
+		"node_28": {
+			"x": 790,
+			"y": 700
+		},
+		"node_29": {
+			"x": 790,
+			"y": 900
+		},
+		"node_30": {
+			"x": 150,
+			"y": 1100
+		},
+		"node_31": {
+			"x": 150,
+			"y": 1300
+		},
+		"node_32": {
+			"x": 150,
+			"y": 1500
+		},
+		"node_33": {
+			"x": 150,
+			"y": 1700
+		},
+		"var_turn_1768681618551": {
+			"x": 50,
+			"y": 200
+		},
+		"var_relationBg_1768681618551": {
+			"x": 50,
+			"y": 320
+		},
+		"var_chatArea_1768681618551": {
+			"x": 50,
+			"y": 440
+		},
+		"var_chatHistoryMessage_1768681618551": {
+			"x": 50,
+			"y": 560
+		},
+		"var_currentChatMessage_1768681618551": {
+			"x": 50,
+			"y": 680
+		},
+		"var_lastHistoryMessage_1768681618551": {
+			"x": 50,
+			"y": 800
+		},
+		"var_lastChatMessage_1768681618551": {
+			"x": 50,
+			"y": 920
+		},
+		"var_lastChatRole_1768681618551": {
+			"x": 50,
+			"y": 1040
+		},
+		"var_lastHistoryChatMessage_1768681618551": {
+			"x": 50,
+			"y": 1160
+		},
+		"var_lastHistoryChatRole_1768681618551": {
+			"x": 50,
+			"y": 1280
+		},
+		"var_aiReply_1768681618551": {
+			"x": 50,
+			"y": 1400
+		},
+		"var_aiCallBack_1768681618551": {
+			"x": 50,
+			"y": 1520
+		},
+		"var_sendBtnPos_1768681618551": {
+			"x": 50,
+			"y": 1640
+		},
+		"var_newChatMessage_1768681618551": {
+			"x": 50,
+			"y": 1760
+		}
+	}
+}

BIN=BIN
static/process/WeChatAIChating/chatArea.png


BIN=BIN
static/process/WeChatAIChating/history/ScreenShot.jpg


+ 1 - 0
static/process/WeChatAIChating/history/bg.txt

@@ -0,0 +1 @@
+你和这位朋友是通过 Benny 介绍认识的,过去曾一起去过你的工作室,是熟人关系。

BIN=BIN
static/process/WeChatAIChating/history/chat-area-cropped.png


+ 0 - 0
static/process/WeChatAIChating/history/chat-history.txt


+ 4 - 0
static/process/WeChatAIChating/log.txt

@@ -0,0 +1,4 @@
+[2026-01-19 20:27:46.859] ========================
+[2026-01-19 20:27:46.865] ==第 1 轮== [系统时间: 2026/01/19 20:27:46]
+[2026-01-19 20:27:55.698] 坐标: {"topLeft":{"x":4,"y":188},"topRight":{"x":1080,"y":188},"bottomLeft":{"x":4,"y":1280},"bottomRight":{"x":1080,"y":1280}} [系统时间: 2026/01/19 20:27:55]
+[2026-01-19 20:28:39.251] ==第 2 轮== [系统时间: 2026/01/19 20:28:39]

+ 220 - 0
static/process/WeChatAIChating/process.json

@@ -0,0 +1,220 @@
+{
+	"name": "WeChatAIChating",
+    	"description": "微信AI陪聊",
+	"variables": {
+		"turn": 1,
+		"relationBg": "",
+		"chatArea": "",
+		"chatHistoryMessage": "",
+		"currentChatMessage": "",
+		"lastHistoryMessage": "",
+		"lastChatMessage": "",
+		"lastChatRole": "",
+		"lastHistoryChatMessage": "",
+		"lastHistoryChatRole": "",
+		"aiReply": "",
+		"aiCallBack":0,
+		"sendBtnPos": "",
+		"newChatMessage": ""
+	},
+	"execute": [
+		{
+			"type": "schedule",
+			"condition": 
+			{
+				"interval": "1s",
+				"repeat": 2
+			},
+			"interval": 
+			[
+				{
+					"type": "echo",
+					"value": "==第 {{turn}} 轮=="
+				},
+				{
+					"type": "set",
+					"variable": "{turn}",
+					"value": "{turn} + 1"
+				},
+				{
+					"type":"if",
+					"condition": "{chatArea}==\"\"",
+					"ture": 
+					[
+						{
+							"type": "image-region-location",
+							"inVars": ["ScreenShot.jpg","ChatArea.png"],
+							"outVars": ["{chatArea}"]
+						},
+						{
+							"type": "echo",
+							"value": "坐标: {{chatArea}}"
+						}
+					]
+				},
+				{
+					"type": "ocr-chat",
+					"inVars": ["(242,242,242)","(114,220,106)","{chatArea}"],
+					"outVars": ["{currentChatMessage}"]
+				},
+				{
+					"type": "log",
+					"value": "当前聊天内容:{{currentChatMessage}}"
+				},
+				{
+					"type": "read-txt",
+					"inVars": ["history/chat-history.txt"],
+					"outVars": ["{chatHistoryMessage}"]
+				},
+				{
+					"type": "read-txt",
+					"inVars": ["history/bg.txt"],
+					"outVars": ["{relationBg}"]
+				},
+				{
+					"type": "log",
+					"value": "背景内容:{{relationBg}}"
+				},
+				{
+					"type": "if",
+					"condition": "{relationBg}==\"\"",
+					"ture": 
+					[
+						
+						{
+							"type": "if",
+							"condition": "{chatHistoryMessage}==\"\"",
+							"ture": 
+							[
+								{
+									"type": "ai-generate",
+									"prompt": "根据聊天记录:{{currentChatMessage}},推理出我与聊天好友的关系背景,用一句话描述出来",
+									"inVars": [],
+									"outVars": ["{relationBg}","{aiCallBack}"]	
+								}
+							],
+							"false": 
+							[
+								{
+									"type": "ai-generate",
+									"prompt": "根据聊天记录:{{chatHistoryMessage}},推理出我与聊天好友的关系背景,用一句话描述出来",
+									"inVars": [],
+									"outVars": ["{relationBg}","{aiCallBack}"]	
+								}
+							]
+						},
+						{
+							"type": "while",
+							"condition": "1 == aiCallBack",
+							"ture": 
+							[
+								
+							]
+						},
+						{
+							"type": "set",
+							"variable": "{aiCallBack}",
+							"value": "0"
+						},
+						{
+							"type": "log",
+							"value": "==AI生成关系背景==:{{relationBg}}"
+						},
+						{
+							"type": "save-txt",
+							"inVars": ["{relationBg}","history/bg.txt"],
+							"outVars": []
+						}
+					]
+				},
+				{
+					"type": "read-last-message",
+					"inVars": ["{currentChatMessage}"],
+					"outVars": ["{lastChatMessage}","{lastChatRole}"]
+				},
+				{
+					"type": "log",
+					"value": "当前最后一条消息:{{lastChatMessage}}({{lastChatRole}})"
+				},
+				{
+					"type": "read-last-message",
+					"inVars": ["{chatHistoryMessage}"],
+					"outVars": ["{lastHistoryChatMessage}","{lastHistoryChatRole}"]
+				},
+				{
+					"type": "log",
+					"value": "==历史最后一条消息:{{lastHistoryChatMessage}}({{lastHistoryChatRole}})=="
+				},
+				{
+					"type": "if",
+					"condition": "{lastChatMessage} != {lastHistoryChatMessage}",
+					"ture": 
+					[
+						{
+							"type": "log",
+							"value":"AI自动回复流程开始=="
+						},
+						{
+							"type": "if",
+							"condition": "{lastChatRole} == \"friend\"",
+							"ture": 
+							[
+								{
+									"type": "ai-generate",
+									"prompt": "根据我们背景关系描述:{{relationBg}},以及我们的聊天记录:{{lastChatMessage}},帮我做出适合回复,不要给建议,直接给一条你认为最好的回复信息,回复信息字数要符合微信聊天习惯",
+									"inVars": [],
+									"outVars": ["{aiReply}","{aiCallBack}"]	
+								},
+								{
+									"type": "while",
+									"condition": "1 == aiCallBack",
+									"ture": 
+									[
+										
+									]
+								},
+								{
+									"type": "set",
+									"variable": "{aiCallBack}",
+									"value": "0"
+								},
+								{
+									"type": "adb",
+									"method": "input",
+									"inVars": ["{aiReply}"]
+								},
+								{
+									"type": "if",
+									"condition": "{sendBtnPos} == \"\"",
+									"ture": 
+									[
+										{
+											"type": "image-center-location",
+											"inVars": ["微信聊天界面的发送按钮定位图.png"],
+											"outVars": ["{sendBtnPos}"]
+										}
+									]
+								},
+								{
+									"type": "adb",
+									"method": "click",
+									"inVars": ["{sendBtnPos}"]
+								}		
+							]	
+						},
+						{
+							"type":"smart-chat-append",
+							"inVars": ["{chatHistoryMessage}","{currentChatMessage}"],
+							"outVars": ["{newChatMessage}"]
+						},
+						{
+							"type": "save-txt",
+							"inVars": ["{newChatMessage}","history/chat-history.txt"],
+							"outVars": []
+						}
+					]
+				}
+			]	
+		}		
+	]
+}

+ 3 - 0
static/process/WeChatAIChating/readme.md

@@ -0,0 +1,3 @@
+# WeChatChating
+
+用于微信聊天机器人

BIN=BIN
static/process/WeChatAIChating/resources/ChatArea.png


BIN=BIN
static/process/WeChatAIChating/resources/ScreenShot.jpg


BIN=BIN
static/process/WeChatAIChating/resources/好友头像.png


BIN=BIN
static/process/WeChatAIChating/resources/微信聊天界面的发送按钮定位图.png


BIN=BIN
static/process/WeChatAIChating/resources/微信聊天界面的输入框定位图.png


BIN=BIN
static/process/WeChatAIChating/resources/我的头像.png


+ 0 - 10
static/process/WeChatChating/process.json

@@ -1,10 +0,0 @@
-{
-    "name": "WeChatChating",
-    "description": "微信聊天机器人",
-    "variables": [
-      
-    ],
-    "excute": [
-       
-    ]
-}