Browse Source

refactor(background): 重构背景脚本并暂时注释掉部分功能

- 移除了 webext-bridge/background 的导入语句
- 注释掉了 tabs 相关的事件监听器
- 注释掉了部分消息发送和接收的逻辑
chd 1 month ago
parent
commit
8efa1e6936

+ 23 - 24
src/entrypoints/background/index.ts

@@ -1,4 +1,3 @@
-import { onMessage, sendMessage } from 'webext-bridge/background'
 import { navigator } from '@/utils/navigator.js'
 import { plan, messageList } from './plan'
 
@@ -217,29 +216,29 @@ export default defineBackground(() => {
       }
     }
   })
-  chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
-    if (changeInfo.status === 'complete' && tab.url) {
-      chrome.runtime.sendMessage({
-        type: 'TO_SIDE_PANEL_PAGE_CHANGE',
-        data: tab
-      })
-      currentTabId = tab.id
-    }
-  })
-  chrome.tabs.onActivated.addListener((activeInfo) => {
-    chrome.tabs.get(activeInfo.tabId, (tab) => {
-      if (chrome.runtime.lastError) {
-        console.error(chrome.runtime.lastError)
-        return
-      }
-      chrome.runtime.sendMessage({
-        type: 'TO_SIDE_PANEL_PAGE_CHANGE',
-        data: tab
-      })
-      console.log('用户切换到新 Tab,URL:', tab)
-      currentTabId = tab.id
-    })
-  })
+  // chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
+  //   if (changeInfo.status === 'complete' && tab.url) {
+  //     chrome.runtime.sendMessage({
+  //       type: 'TO_SIDE_PANEL_PAGE_CHANGE',
+  //       data: tab
+  //     })
+  //     currentTabId = tab.id
+  //   }
+  // })
+  // chrome.tabs.onActivated.addListener((activeInfo) => {
+  //   chrome.tabs.get(activeInfo.tabId, (tab) => {
+  //     if (chrome.runtime.lastError) {
+  //       console.error(chrome.runtime.lastError)
+  //       return
+  //     }
+  //     chrome.runtime.sendMessage({
+  //       type: 'TO_SIDE_PANEL_PAGE_CHANGE',
+  //       data: tab
+  //     })
+  //     console.log('用户切换到新 Tab,URL:', tab)
+  //     currentTabId = tab.id
+  //   })
+  // })
 
   // onMessage('FROM_PLAN',  async (message) => {
   //   messageList.push({

+ 49 - 49
src/entrypoints/content.js

@@ -19,40 +19,40 @@ import { onMessage } from 'webext-bridge/content-script'
 export default defineContentScript({
   matches: ['<all_urls>'],
   main(ctx) {
-    let page = document.getElementsByTagName('body')[0]
-    const src = chrome.runtime.getURL('images/begin.png')
-    window.pageAnalyzer = new PageAnalyzer()
+    // let page = document.getElementsByTagName('body')[0]
+    // const src = chrome.runtime.getURL('images/begin.png')
+    // window.pageAnalyzer = new PageAnalyzer()
     let iframe = null
     let iframeDoc = null
     let select = false
-    window.onload = () => {
-      iframe = document.querySelector('iframe')
-      iframeDoc = iframe?.contentWindow?.document
-      // chrome.runtime.sendMessage({
-      //   type: 'GET_SETTING_INFO',
-      //   data: {
-      //     url:location.href
-      //   }
-      // }, function (response) {
-      //   console.log(response,88896);
+    // window.onload = () => {
+    //   iframe = document.querySelector('iframe')
+    //   iframeDoc = iframe?.contentWindow?.document
+    //   // chrome.runtime.sendMessage({
+    //   //   type: 'GET_SETTING_INFO',
+    //   //   data: {
+    //   //     url:location.href
+    //   //   }
+    //   // }, function (response) {
+    //   //   console.log(response,88896);
 
-      // });
-      chrome.storage.local.get(['domainList', 'collect'], (result) => {
-        const urls = result.domainList && Object.values(result.domainList)
-        select = result.collect && !!urls?.find(_ => location.href.includes(_))
-        console.log(select)
+    //   // });
+    //   chrome.storage.local.get(['domainList', 'collect'], (result) => {
+    //     const urls = result.domainList && Object.values(result.domainList)
+    //     select = result.collect && !!urls?.find(_ => location.href.includes(_))
+    //     console.log(select)
 
-        if (select) {
-          document.addEventListener('click', handleClick)
-          document.addEventListener('mouseover', handleMouseover)
-        } else {
-          console.log(2222)
+    //     if (select) {
+    //       document.addEventListener('click', handleClick)
+    //       document.addEventListener('mouseover', handleMouseover)
+    //     } else {
+    //       console.log(2222)
 
-          document.removeEventListener('click', handleClick)
-          document.removeEventListener('mouseover', handleMouseover)
-        }
-      })
-    }
+    //       document.removeEventListener('click', handleClick)
+    //       document.removeEventListener('mouseover', handleMouseover)
+    //     }
+    //   })
+    // }
     let form = null
     let formChildren = []
     let excelDataA = {}
@@ -105,8 +105,8 @@ export default defineContentScript({
       })
     }
 
-    document.addEventListener('click', handleClick)
-    document.addEventListener('mouseover', handleMouseover)
+    // document.addEventListener('click', handleClick)
+    // document.addEventListener('mouseover', handleMouseover)
     chrome.runtime.onMessage.addListener(
       (message, sender, sendResponse) => {
         if (message.type === 'GET_PAGE_INFO') {
@@ -144,17 +144,17 @@ export default defineContentScript({
         if (message.type === 'SET_SELECT_TO_CENTENT') {
           console.log(2)
 
-          chrome.storage.local.get(['domainList', 'collect'], (result) => {
-            const urls = Object.values(result.domainList)
-            select = result.collect && !!urls.find(_ => location.href.includes(_))
-            if (select) {
-              document.addEventListener('click', handleClick)
-              document.addEventListener('mouseover', handleMouseover)
-            } else {
-              document.removeEventListener('click', handleClick)
-              document.removeEventListener('mouseover', handleMouseover)
-            }
-          })
+          // chrome.storage.local.get(['domainList', 'collect'], (result) => {
+          //   const urls = Object.values(result.domainList)
+          //   select = result.collect && !!urls.find(_ => location.href.includes(_))
+          //   if (select) {
+          //     document.addEventListener('click', handleClick)
+          //     document.addEventListener('mouseover', handleMouseover)
+          //   } else {
+          //     document.removeEventListener('click', handleClick)
+          //     document.removeEventListener('mouseover', handleMouseover)
+          //   }
+          // })
         }
         if (message.type === 'GET_PAGE_FORM') {
           const forms = document.querySelectorAll('form')
@@ -392,13 +392,13 @@ export default defineContentScript({
     }
 
     // 截图功能 消息接受/发送
-    onMessage('SCREENSHOT',  (message) => {
-      console.log(message)
-      domToCanvas().then(res => {
-        return sendResponse({ status: 'ok', data: res })
-      }).catch(err => {
-        return sendResponse({ status: 'error', message: err })
-      })
-    })
+    // onMessage('SCREENSHOT',  (message) => {
+    //   console.log(message)
+    //   domToCanvas().then(res => {
+    //     return sendResponse({ status: 'ok', data: res })
+    //   }).catch(err => {
+    //     return sendResponse({ status: 'error', message: err })
+    //   })
+    // })
   }
 })

+ 3 - 3
src/entrypoints/options/App.vue

@@ -31,9 +31,9 @@ async function openFile() {
 }
 
 onMounted(() => {
-  chrome.runtime.sendMessage({
-    type: 'GET_CONTENT_INFO'
-  })
+  // chrome.runtime.sendMessage({
+  //   type: 'GET_CONTENT_INFO'
+  // })
 })
 
 async function saveFile() {

+ 22 - 23
src/entrypoints/sidepanel/AdvancedMode.vue

@@ -1,12 +1,12 @@
 <!-- Chat.vue -->
 <template>
 
-  <div class="chat-container" style="padding-top: 3rem;">
-    <!-- <div v-if="!messages.length && !msgLoading" class="message-list">
+  <div class="chat-container items-center" >
+    <div v-if="!messages.length && !msgLoading" class="message-list">
       <pageMask />
-    </div> -->
+    </div>
     <!-- 消息列表 -->
-    <div class="message-list">
+    <div class="message-list w-full">
       <el-scrollbar ref="scrollbar" @scroll="handleScroll" v-loading="msgLoading">
         <!-- 加载更多指示器 -->
         <div v-if="isLoadingMore" class="loading-more-indicator">
@@ -20,13 +20,13 @@
             <div class="message-content">
               <div class="content" v-if="message.role ==='system'"
                 :class="{ 'loading-content': message.content === '' }">
-                <StepsDisplay 
+                <!-- <StepsDisplay 
                 v-if="message.type === 'plan'"
                  :content="message.rawContent" 
                  :initialStep="initialSteps"
                  @step-change="handleStepChange" @complete="handleComplete"
-                 />
-                <span v-else v-html="message.content"></span>
+                 /> -->
+                <span  v-html="message.content"></span>
                 <span class="loading-indicator" v-if="sendLoading && index === messages.length - 1">
                   <span class="dot"></span>
                   <span class="dot"></span>
@@ -53,13 +53,10 @@
       <ScrollToBottom :target="scrollbar" ref="scrollToBottomRef" />
     </div>
 
-    <!-- <Tools v-if="selectModal" :disHistory="sendLoading" :upload="type === FunctionList.File_Operation || !!formInfo" @read-click="readClick" @upload-file="(file) => createFileObj(file)" @handle-capture="handleCapture" @his-records="hisRecords"
-      @add-new-dialogue="addNewDialogue" @handle-current-change="handleCurrentChange"
-      @handel-intelligent-filling-click="handelIntelligentFillingClick" /> -->
-
-    <div>
+      <Tools />
+    <div class="w-full max-w-[720px] p-[0_12px_12px]">
       <!-- 输入区域 -->
-      <div class="input-area">
+      <div class="input-area w-full">
         <el-icon class="closeShow" :style="{ display: isShowPage ? 'block' : 'none'}" size="16px" color="#909399"
                  @click="closePageInfo">
           <CircleClose />
@@ -128,6 +125,7 @@ import {
   controllerList
 } from '@/entrypoints/sidepanel/utils/ai-service.js'
 import { storeToRefs } from 'pinia'
+import Tools from '@/entrypoints/sidepanel/component/tools.vue'
 import { useMsg } from '@/entrypoints/sidepanel/hook/useMsg.ts'
 import document from '@/entrypoints/sidepanel/component/document.vue'
 import ScrollToBottom from '@/entrypoints/sidepanel/component/ScrollToBottom.vue'
@@ -139,6 +137,7 @@ import { useAutoResizeTextarea } from '@/entrypoints/sidepanel/hook/useAutoResiz
 import { useMsgStore } from '@/store/modules/msg.ts'
 import { useUserStore } from '@/store/modules/user'
 import { debounce } from 'lodash'
+import pageMask from '@/entrypoints/sidepanel/component/pageMask.vue'
 
 const userStore = useUserStore()
 // 在其他状态变量附近添加
@@ -196,7 +195,6 @@ const messagesContainer = ref(null)
 let innerText = ''
 // 处理滚动到顶部的事件
 const handleScrollToTop = debounce(async function() {
-  console.log('滚动到顶部,可以加载更多历史消息')
   if (!sendLoading.value && !isLoadingMore.value) {
     isLoadingMore.value = true
     try {
@@ -316,7 +314,7 @@ async function handleAsk(value) {
   // await putChat(msg)
   createWS(msg)
 }
-
+const { conversationId} = storeToRefs(useMsgStore())
 /**
  *
  * @param msg 用户消息对象,调用askQues时需要
@@ -349,12 +347,13 @@ async function createWS(msg) {
       sendLoading.value = false
       obj.type = 'plan'
       console.log(res, 5558)
-      obj.rawContent = res.data.plan
-      // sendMessage('FROM_PLAN', {
-      //   params,
-      //   payload: { ...res.data.plan }
-      // }, 'background')
+      obj.rawContent = '1'
+      chrome.runtime.sendMessage({
+        type: "FROM_PLAN",
+        payload: {params,...res.data.plan},});
     }).catch(res => {
+      console.log(res);
+      
       obj.rawContent = '接口出错,请重试。'
       obj.content = '接口出错,请重试。'
     })
@@ -364,12 +363,12 @@ async function createWS(msg) {
 
 // 组件挂载时滚动到底部
 onBeforeMount(async () => {
-  await msgStore.initMsg()
-  await msgStore.initModal()
+  // await msgStore.initMsg()
+  // await msgStore.initModal()
 })
 onMounted(async () => {
   // msgStore.updateAIModel(options[0].options[0])
-  useAutoResizeTextarea(tareRef, inputMessage)
+  // useAutoResizeTextarea(tareRef, inputMessage)
   chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
     if (message.type === 'TO_SIDE_PANEL_PAGE_INFO') {
       pageInfo.value = message.data

+ 3 - 3
src/entrypoints/sidepanel/App.vue

@@ -39,9 +39,9 @@ onMounted(async () => {
     }
   })
   // 初始化数据库连接(不包含任何Store)
-  chrome.runtime.sendMessage({
-    type: 'GET_CONTENT_INFO'
-  })
+  // chrome.runtime.sendMessage({
+  //   type: 'GET_CONTENT_INFO'
+  // })
 })
 </script>
 

+ 9 - 2
src/entrypoints/sidepanel/component/StepsDisplay.vue

@@ -104,10 +104,15 @@
 </template>
 
 <script lang="ts" setup>
-chrome.runtime.onMessage.addListener(async (request, sender, sendResponse) => {
+chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
+  console.log(request,258);
+  
   if (request.type == 'FROM_STEP') {
-    initialSteps.value = request.payload
+    initialSteps.value = request.payloa
+  console.log(request,123);
+  
   }
+  return true
 })
 import { ref, computed, onMounted, watch, onBeforeUnmount } from 'vue'
 import { ChatDotRound, Check, Loading, ArrowDown, ArrowUp } from '@element-plus/icons-vue'
@@ -176,6 +181,8 @@ const handleExecute = async () => {
 }
 // 解析内容
 const parsedContent = computed(() => {
+  console.log(props.content);
+  
   try {
     if (typeof props.content === 'string') {
       const obj = JSON.parse(props.content)

+ 11 - 11
src/store/modules/user.ts

@@ -92,10 +92,10 @@ export const useUserStore = defineStore('user', {
         this.domainList.find(_ => location.href.includes(_))
         if (typeof chrome !== 'undefined' && chrome.storage) {
           await chrome.storage.local.set({ collect: this.collect, domainList: this.domainList })
-          chrome.runtime.sendMessage({
-            type: 'SET_SELECT',
-          }, function (response) {
-          });
+          // chrome.runtime.sendMessage({
+          //   type: 'SET_SELECT',
+          // }, function (response) {
+          // });
         } else {
           // localStorage.setItem('token', token)
         }
@@ -110,13 +110,13 @@ export const useUserStore = defineStore('user', {
       this.token = token
       if (typeof chrome !== 'undefined' && chrome.storage) {
         await chrome.storage.local.set({ token })
-        chrome.runtime.sendMessage({
-          type: 'SET_TOKEN',
-          data: {
-            token
-          }
-        }, function (response) {
-        });
+        // chrome.runtime.sendMessage({
+        //   type: 'SET_TOKEN',
+        //   data: {
+        //     token
+        //   }
+        // }, function (response) {
+        // });
       } else {
         localStorage.setItem('token', token)
       }

+ 76 - 70
src/utils/navigator.js

@@ -4,12 +4,12 @@ import {
     ExtensionTransport,
 } from 'puppeteer-core/lib/cjs/puppeteer/puppeteer-core-browser.js';
 import { getexecute } from '@/api/agentapi.js'
-export const navigator=()=> {
+export const navigator = () => {
     let browser = null;
     async function browsercomm() {
         const tabitem = await getActiveTabId();
         console.log(tabitem)
-        let tabId=tabitem.id
+        let tabId = tabitem.id
         console.log(tabId)
         const connectOptions = {
             transport: await ExtensionTransport.connectTab(tabId), // 替换为实际标签ID
@@ -24,7 +24,7 @@ export const navigator=()=> {
             browser = await connect(connectOptions);
             const [page] = await browser.pages();
             await chrome.scripting.executeScript({
-                target: {tabId: tabId},
+                target: { tabId: tabId },
                 files: ['buildDomTree1.js'], // 注入外部文件
                 world: "MAIN"
             });
@@ -64,22 +64,22 @@ export const navigator=()=> {
                     .map(n => findDomByXpath(n.xpath))
                     .filter(x => !!x)
                     .map((item, index) => `[${index}] ${item.outerHTML}`)
-                    .map((item)=>{
-                        const attrs = ['name', 'href','src','class','id','target',]
+                    .map((item) => {
+                        const attrs = ['name', 'href', 'src', 'class', 'id', 'target',]
                         return cleanHtmlTags(item, attrs);
                     })
                     .join("\n")
                 console.log(domList)
-                return {buildDomTree:buildDomTree,domList:domList}
+                return { buildDomTree: buildDomTree, domList: domList }
             });
-            return {domState:domState, page:page,tabitem:tabitem};
+            return { domState: domState, page: page, tabitem: tabitem };
         } finally {
             // if (browser) await browser.disconnect();
 
         }
     }
-    async function browserautomate(domState,page,type,targetIndex,text) {
-console.log(domState,page,type,targetIndex,browser)
+    async function browserautomate(domState, page, type, targetIndex, text) {
+        console.log(domState, page, type, targetIndex, browser)
         // 查找目标元素
         const targetElement = findElementByIndex(domState.map, targetIndex);
         if (!targetElement) throw new Error('Element not found');
@@ -89,22 +89,22 @@ console.log(domState,page,type,targetIndex,browser)
         console.log(domState, targetElement, selector)
         // const [page] = await browser.pages()
         try {
-            await page.waitForSelector(selector, {visible: true, timeout: 10000});
+            await page.waitForSelector(selector, { visible: true, timeout: 10000 });
             switch (type) {
                 case 'click':
-                    await page.click(selector, {delay: 100});
+                    await page.click(selector, { delay: 100 });
                     break;
                 case 'key_enter':
-                    await page.click(selector, {delay: 100});
+                    await page.click(selector, { delay: 100 });
                     break;
                 case 'navigate':
-                    await page.goto('https://example.com', {waitUntil: 'networkidle2'});
+                    await page.goto('https://example.com', { waitUntil: 'networkidle2' });
                     break;
                 case 'getcontent':
                     console.log(await page.content());
                     break;
                 case 'input_text':
-                    await page.type(selector, text, {delay: 600});
+                    await page.type(selector, text, { delay: 600 });
                     break;
                 // 添加更多命令支持,如:
                 case 'form':
@@ -115,12 +115,12 @@ console.log(domState,page,type,targetIndex,browser)
                         question2: 'option2', // 假设有一个单选题,选项为 option2
                         question3: '我非常满意这次体验', // 假设有一个文本框,答案为 “我非常满意这次体验”
                     }];
-                    await page.type(selector, 'your-username', {delay: 600});
-                    await page.type(selector, 'your-password', {delay: 600});
+                    await page.type(selector, 'your-username', { delay: 600 });
+                    await page.type(selector, 'your-password', { delay: 600 });
                     await page.click(selector); // 或者其他登录按钮
                     break;
                 case '':
-                    page.type(selector, 'World', {delay: 600})
+                    page.type(selector, 'World', { delay: 600 })
                     break
                 default:
                     console.log('未知指令。');
@@ -145,7 +145,7 @@ console.log(domState,page,type,targetIndex,browser)
                 document.getElementById('playwright-highlight-container')?.remove();
             });
             if (browser) await browser.disconnect();
-        }finally {
+        } finally {
             console.log(123456789)
             await page.evaluate(() => {
                 document.getElementById('playwright-highlight-container')?.remove();
@@ -153,8 +153,8 @@ console.log(domState,page,type,targetIndex,browser)
             if (browser) await browser.disconnect();
         }
     }
-    function allTabs(){
-        return new Promise( (resolve, reject) => {
+    function allTabs() {
+        return new Promise((resolve, reject) => {
             chrome.tabs.query({}, (tabs) => {
                 console.log('tabs', tabs)
                 resolve(tabs);
@@ -165,21 +165,21 @@ console.log(domState,page,type,targetIndex,browser)
     function getActiveTabId() {
         return new Promise((resolve) => {
             setTimeout(() => {
-                chrome.tabs.query({active: true}, (tabs) => {
+                chrome.tabs.query({ active: true }, (tabs) => {
                     console.log('tabs', tabs)
                     resolve(tabs[0]);
                 });
-            },500)
+            }, 500)
         });
     }
-// 辅助函数:通过索引查找元素
+    // 辅助函数:通过索引查找元素
     function findElementByIndex(domMap, targetIndex) {
         return Object.values(domMap).find(
             node => node.highlightIndex === targetIndex
         );
     }
 
-// 辅助函数:生成 CSS 选择器
+    // 辅助函数:生成 CSS 选择器
     function generateSelector(element) {
         const attrs = Object.entries(element.attributes)
             .map(([k, v]) => `[${k}="${v.replace(/"/g, '\\"')}"]`)
@@ -188,7 +188,7 @@ console.log(domState,page,type,targetIndex,browser)
     }
 
     function gfe() {
-        chrome.tabs.query({active: true, currentWindow: true}, async (tabs) => {
+        chrome.tabs.query({ active: true, currentWindow: true }, async (tabs) => {
             const tabId = tabs[0].id;
             await smartClick(tabId, 1, {
                 type: 'click',
@@ -197,21 +197,21 @@ console.log(domState,page,type,targetIndex,browser)
         })
     }
 
-// 背景脚本
+    // 背景脚本
     function switchTabOrOpenNew(url) {
         return new Promise(resolve => {
             // 查询是否存在指定的标签页
             // chrome.tabs.query({windowId: chrome.windows.WINDOW_ID_CURRENT}, async (tabs) => {
-                chrome.tabs.query({}, async (tabs) => {
+            chrome.tabs.query({}, async (tabs) => {
                 let tabId = tabs.find(tabs => tabs.url.replace(/\/$/, '') === url);
-                console.log(tabs, tabId,url)
+                console.log(tabs, tabId, url)
                 if (tabId) {
                     // 如果存在,则激活该标签页
-                    await chrome.tabs.update(tabId.id, {active: true});
+                    await chrome.tabs.update(tabId.id, { active: true });
                     resolve()
                 } else {
                     // 如果不存在,则新打开一个标签页
-                    await chrome.tabs.create({url: url});
+                    await chrome.tabs.create({ url: url });
                     resolve()
                 }
             });
@@ -219,16 +219,16 @@ console.log(domState,page,type,targetIndex,browser)
     }
 
     function getexecuteapi(params) {
-       return  getexecute(params).then((res)=>{
-           return res;
+        return getexecute(params).then((res) => {
+            return res;
         })
     }
 
     async function agent(payload) {
 
-        for(let item of payload.steps){
+        for (let item of payload.steps) {
             console.log(item)
-            if(item.stepIndex === 0){
+            if (item.stepIndex === 0) {
                 let params = {
                     conversationId: payload.conversationId,
                     messageId: payload.messageId,
@@ -240,7 +240,7 @@ console.log(domState,page,type,targetIndex,browser)
                         osVersion: "137.0.7151.69(正式版本)",
                         osArch: "arm64",
                         url: "",
-                        title:"",
+                        title: "",
                         tabs: [],
                         interactiveElements: ""
                     },
@@ -251,56 +251,62 @@ console.log(domState,page,type,targetIndex,browser)
                 let add = await getexecuteapi(params)
                 console.log(add)
 
-                let toolExecution=JSON.parse(add.data.plan.steps[0].toolExecution)[0].toolParameters
+                let toolExecution = JSON.parse(add.data.plan.steps[0].toolExecution)[0].toolParameters
                 console.log(JSON.parse(toolExecution).action)
                 if (JSON.parse(toolExecution).action == 'navigate') {
                     await switchTabOrOpenNew(JSON.parse(toolExecution).url)
                 }
-            }else {
-                    let browdata=  await  browsercomm()
-        console.log(browdata)
-               const tabs = await allTabs()
-        let params = {
-            conversationId: payload.conversationId,
-            messageId: payload.messageId,
-            messageContent: payload.messageContent,
-            planId: payload.id,
-            currentPlanStepId: item.id,
-            envData: {
-                osName: "Google Chrome",
-                osVersion: "137.0.7151.69(正式版本)",
-                osArch: "arm64",
-                url: browdata.tabitem.url,
-                title: browdata.tabitem.title,
-                tabs: tabs,
-                interactiveElements: browdata.domState.domList
-                // interactiveElements: "[0] <a>新闻</a>\n        [1] <a>hao123</a>\n        [2] <a>地图</a>\n        [3] <a>贴吧</a>\n        [4] <a>视频</a>\n        [5] <a>图片</a>\n        [6] <a>网盘</a>\n        [7] <a>文库</a>\n        [8] <a id=\"csaitab\"></a>\n        [9] <a name=\"tj_briicon\">更多</a>\n        [10] <a></a>\n        [11] <a name=\"tj_login\" id=\"s-top-loginbtn\">登录</a>\n        [12] <input placeholder=\"梁靖崑称优势是有王楚钦\" name=\"wd\" id=\"kw\" value=\"\"></input>\n        [13] <input type=\"submit\" id=\"su\" value=\"百度一下\"></input>\n        [14] <a>AI搜索已支持DeepSeek R1最新版立即体验</a>\n        [16] <a id=\"hotsearch-refresh-btn\">换一换</a>\n        [17] <a>0让“干坡坡”变“金窝窝”</a>\n        [18] <a>5福建一楼房发生爆炸 有人员"
-            },
-            resultSummary: null,
-            needSummary: true,
-            success: false
-        }
-        let add = await getexecuteapi(params)
+            } else {
+                let browdata = await browsercomm()
+                console.log(browdata)
+                const tabs = await allTabs()
+                let params = {
+                    conversationId: payload.conversationId,
+                    messageId: payload.messageId,
+                    messageContent: payload.messageContent,
+                    planId: payload.id,
+                    currentPlanStepId: item.id,
+                    envData: {
+                        osName: "Google Chrome",
+                        osVersion: "137.0.7151.69(正式版本)",
+                        osArch: "arm64",
+                        url: browdata.tabitem.url,
+                        title: browdata.tabitem.title,
+                        tabs: tabs,
+                        interactiveElements: browdata.domState.domList
+                        // interactiveElements: "[0] <a>新闻</a>\n        [1] <a>hao123</a>\n        [2] <a>地图</a>\n        [3] <a>贴吧</a>\n        [4] <a>视频</a>\n        [5] <a>图片</a>\n        [6] <a>网盘</a>\n        [7] <a>文库</a>\n        [8] <a id=\"csaitab\"></a>\n        [9] <a name=\"tj_briicon\">更多</a>\n        [10] <a></a>\n        [11] <a name=\"tj_login\" id=\"s-top-loginbtn\">登录</a>\n        [12] <input placeholder=\"梁靖崑称优势是有王楚钦\" name=\"wd\" id=\"kw\" value=\"\"></input>\n        [13] <input type=\"submit\" id=\"su\" value=\"百度一下\"></input>\n        [14] <a>AI搜索已支持DeepSeek R1最新版立即体验</a>\n        [16] <a id=\"hotsearch-refresh-btn\">换一换</a>\n        [17] <a>0让“干坡坡”变“金窝窝”</a>\n        [18] <a>5福建一楼房发生爆炸 有人员"
+                    },
+                    resultSummary: null,
+                    needSummary: true,
+                    success: false
+                }
+                let add = await getexecuteapi(params)
                 console.log(add)
-                let toolExecution=add.data.plan.steps[item.stepIndex].toolExecution
-                if(toolExecution) {
-                    let toolExecution=JSON.parse(add.data.plan.steps[item.stepIndex].toolExecution)[0].toolParameters
-                    await browserautomate(browdata.domState.buildDomTree, browdata.page, JSON.parse(toolExecution).action, JSON.parse(toolExecution).index,JSON.parse(toolExecution).text)
+                let toolExecution = add.data.plan.steps[item.stepIndex].toolExecution
+                if (toolExecution) {
+                    let toolExecution = JSON.parse(add.data.plan.steps[item.stepIndex].toolExecution)[0].toolParameters
+                    await browserautomate(browdata.domState.buildDomTree, browdata.page, JSON.parse(toolExecution).action, JSON.parse(toolExecution).index, JSON.parse(toolExecution).text)
 
-                }else {
+                } else {
                     return
                 }
             }
             chrome.runtime.sendMessage({
                 type: "FROM_STEP",
-                payload: item.stepIndex});
+                payload: item.stepIndex
+            });
         }
     }
-
-    chrome.runtime.onMessage.addListener(async (request, sender, sendResponse) => {
+    chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
         console.log(request, sender, sendResponse);
         if (request.type == 'FROM_PLAN') {
-            agent(request.payload)
+            // agent(request.payload)
+            chrome.runtime.sendMessage({
+                type: "FROM_STEP",
+                payload: 111
+            });
+            console.log(7575);
+            
         }
     })
 }