diff --git a/packages/geek-auto-start-chat-with-boss/index.mjs b/packages/geek-auto-start-chat-with-boss/index.mjs index 8aff93f..6e5fc2b 100644 --- a/packages/geek-auto-start-chat-with-boss/index.mjs +++ b/packages/geek-auto-start-chat-with-boss/index.mjs @@ -699,7 +699,7 @@ async function toRecommendPage (hooks) { hooks.pageLoaded?.call() let userInfoResponse = await userInfoPromise - await hooks.userInfoResponse?.promise(userInfoResponse) + await hooks.userInfoResponse?.promise({ userInfoResponse, browser }) if (userInfoResponse?.code !== 0) { autoStartChatEventBus.emit('LOGIN_STATUS_INVALID', { userInfoResponse @@ -1713,7 +1713,7 @@ export async function mainLoop (hooks) { //set cookies const bossCookies = readStorageFile('boss-cookies.json') const bossLocalStorage = readStorageFile('boss-local-storage.json') - await hooks.cookieWillSet?.promise(bossCookies) + await hooks.cookieWillSet?.promise({ cookies: bossCookies, browser }) for(let i = 0; i < bossCookies.length; i++){ if (Object.hasOwn(bossCookies[i], 'sameSite')) { bossCookies[i].sameSite = 'unspecified' diff --git a/packages/laodeng/index.js b/packages/laodeng/index.js index 575f8f5..48fe633 100644 --- a/packages/laodeng/index.js +++ b/packages/laodeng/index.js @@ -1,125 +1,134 @@ "use strict"; const { PuppeteerExtraPlugin } = require("puppeteer-extra-plugin"); -async function handle(p) { - await p.evaluateOnNewDocument(() => { - (() => { - "use strict"; - /* ------------------------------------------------------- - * 1. 保存原生 Function.prototype.toString - * ----------------------------------------------------- */ - const nativeFunctionToString = Function.prototype.toString; - /* ------------------------------------------------------- - * 2. WeakMap:函数 → 伪原生源码 - * ----------------------------------------------------- */ - const nativeSourceMap = new WeakMap(); +// 定义脚本内容,避免重复定义 +const stealthScript = () => { + "use strict"; + /* ------------------------------------------------------- + * 1. 保存原生 Function.prototype.toString + * ----------------------------------------------------- */ + const nativeFunctionToString = Function.prototype.toString; - /* ------------------------------------------------------- - * 3. 注册伪原生源码 - * ----------------------------------------------------- */ - const registerNativeSource = (fn, source) => { - try { - nativeSourceMap.set(fn, source); - } catch (_) {} - }; + /* ------------------------------------------------------- + * 2. WeakMap:函数 → 伪原生源码 + * ----------------------------------------------------- */ + const nativeSourceMap = new WeakMap(); - /* ------------------------------------------------------- - * 4. 劫持 Function.prototype.toString - * ----------------------------------------------------- */ - Object.defineProperty(Function.prototype, "toString", { - configurable: true, - writable: true, - value: function toString() { - if (nativeSourceMap.has(this)) { - return nativeSourceMap.get(this); - } - return nativeFunctionToString.call(this); - }, - }); + /* ------------------------------------------------------- + * 3. 注册伪原生源码 + * ----------------------------------------------------- */ + const registerNativeSource = (fn, source) => { + try { + nativeSourceMap.set(fn, source); + } catch (_) {} + }; - /* ------------------------------------------------------- - * 5. 伪装 Function.prototype.toString 自身 - * ----------------------------------------------------- */ - registerNativeSource( - Function.prototype.toString, - nativeFunctionToString.toString(), - ); - - /* ------------------------------------------------------- - * 6. stealthify:包装函数但保持“原生外观” - * ----------------------------------------------------- */ - const stealthify = (obj, prop, handler) => { - const original = obj[prop]; - if (typeof original !== "function") return; - - const wrapped = function (...args) { - return handler.call(this, original, args); - }; - const namePropertyDescriptor = Object.getOwnPropertyDescriptor( - wrapped, - "name", - ); - // 处理函数 name 属性 - Object.defineProperty(wrapped, "name", { - ...namePropertyDescriptor, - value: prop, - }); - // 保留 prototype(某些函数有) - try { - Object.setPrototypeOf(wrapped, Object.getPrototypeOf(original)); - } catch (_) {} - - // 注册伪原生源码(直接复用原函数的 native 表现) - registerNativeSource(wrapped, nativeFunctionToString.call(original)); - - // 用 defineProperty 保持 descriptor 接近原生 - const desc = Object.getOwnPropertyDescriptor(obj, prop); - Object.defineProperty(obj, prop, { - ...desc, - value: wrapped, - }); - }; - - /* ------------------------------------------------------- - * 7. 示例:stealth console.log / debug / info - * ----------------------------------------------------- */ - const filterConsoleArgs = (args) => - args.map((arg) => { - if (arg && typeof arg === "object") { - // 防止 getter / Proxy / 大对象触发 - return {}; - } - return arg; - }); - - [ - "log", - "debug", - "info", - "warn", - "error", - "dir", - "table", - "debug", - ].forEach((name) => { - stealthify(console, name, (original, args) => { - // ❗不传递原始对象,避免 DevTools / CDP 展开 - return original.apply(console, filterConsoleArgs(args)); - }); - }); - - /* ------------------------------------------------------- - * 8. 防御性补丁(可选但强烈建议) - * ----------------------------------------------------- */ - - // 防止检测 toString 被替换 - registerNativeSource( - registerNativeSource, - "function registerNativeSource() { [native code] }", - ); - })(); + /* ------------------------------------------------------- + * 4. 劫持 Function.prototype.toString + * ----------------------------------------------------- */ + Object.defineProperty(Function.prototype, "toString", { + configurable: true, + writable: true, + value: function toString() { + if (nativeSourceMap.has(this)) { + return nativeSourceMap.get(this); + } + return nativeFunctionToString.call(this); + }, }); + + /* ------------------------------------------------------- + * 5. 伪装 Function.prototype.toString 自身 + * ----------------------------------------------------- */ + registerNativeSource( + Function.prototype.toString, + nativeFunctionToString.toString(), + ); + + /* ------------------------------------------------------- + * 6. stealthify:包装函数但保持"原生外观" + * ----------------------------------------------------- */ + const stealthify = (obj, prop, handler) => { + const original = obj[prop]; + if (typeof original !== "function") return; + + const wrapped = function (...args) { + return handler.call(this, original, args); + }; + const namePropertyDescriptor = Object.getOwnPropertyDescriptor( + wrapped, + "name", + ); + // 处理函数 name 属性 + Object.defineProperty(wrapped, "name", { + ...namePropertyDescriptor, + value: prop, + }); + // 保留 prototype(某些函数有) + try { + Object.setPrototypeOf(wrapped, Object.getPrototypeOf(original)); + } catch (_) {} + + // 注册伪原生源码(直接复用原函数的 native 表现) + registerNativeSource(wrapped, nativeFunctionToString.call(original)); + + // 用 defineProperty 保持 descriptor 接近原生 + const desc = Object.getOwnPropertyDescriptor(obj, prop); + Object.defineProperty(obj, prop, { + ...desc, + value: wrapped, + }); + }; + + /* ------------------------------------------------------- + * 7. 示例:stealth console.log / debug / info + * ----------------------------------------------------- */ + const filterConsoleArgs = (args) => + args.map((arg) => { + if (arg && typeof arg === "object") { + // 防止 getter / Proxy / 大对象触发 + return {}; + } + return arg; + }); + + [ + "log", + "debug", + "info", + "warn", + "error", + "dir", + "table", + "debug", + ].forEach((name) => { + stealthify(console, name, (original, args) => { + // ❗不传递原始对象,避免 DevTools / CDP 展开 + return original.apply(console, filterConsoleArgs(args)); + }); + }); + + /* ------------------------------------------------------- + * 8. 防御性补丁(可选但强烈建议) + * ----------------------------------------------------- */ + + // 防止检测 toString 被替换 + registerNativeSource( + registerNativeSource, + "function registerNativeSource() { [native code] }", + ); +}; + +async function handle(p) { + // 1. 立即执行一次(针对当前已有的文档,防止错过) + try { + await p.evaluate(stealthScript); + } catch (e) { + // 如果当前页面还没准备好,忽略错误 + } + // 2. 注册为新文档脚本(针对未来的导航) + await p.evaluateOnNewDocument(stealthScript); } class Plugin extends PuppeteerExtraPlugin { diff --git a/packages/laodeng/package.json b/packages/laodeng/package.json index a996117..212dca8 100644 --- a/packages/laodeng/package.json +++ b/packages/laodeng/package.json @@ -1,6 +1,6 @@ { "name": "@geekgeekrun/puppeteer-extra-plugin-laodeng", - "version": "0.0.1", + "version": "0.0.2", "description": "laodeng", "main": "./index.js", "author": "geekgeekrun", diff --git a/packages/pm/daemon.js b/packages/pm/daemon.js index 8076929..d701f44 100644 --- a/packages/pm/daemon.js +++ b/packages/pm/daemon.js @@ -103,7 +103,7 @@ const server = net.createServer((socket) => { // 处理消息 function handleMessage(socket, message) { - console.log('收到消息:', message); + message.type !== 'get-status' && console.log('收到消息:', message); const _callbackUuid = message._callbackUuid if (message.type === 'ping') { sendResponse(socket, _callbackUuid, { @@ -143,6 +143,23 @@ function handleMessage(socket, message) { return } case 'worker-to-gui-message': { + // 将 prerequisite step 状态写入 worker 的 runtimeStorage + if ( + workerInfo && + message.data?.type === 'prerequisite-step-by-step-check' && + message.data?.step?.id + ) { + workerInfo.runtimeStorage = workerInfo.runtimeStorage || {} + workerInfo.runtimeStorage.stepStatusMapByStepId = + workerInfo.runtimeStorage.stepStatusMapByStepId || {} + workerInfo.runtimeStorage.stepStatusMapByStepId[ + message.data.step.id + ] = { + step: message.data.step, + runRecordId: message.data.runRecordId + } + } + // 转发工具进程消息到GUI客户端 broadcastToGUI({ type: 'worker-to-gui-message', @@ -329,6 +346,9 @@ function startWorker({ workerId, command, args, env }, restartCount = 0) { status: 'running', startTime: Date.now(), restartCount, // 使用传入的重启次数 + runtimeStorage: { + stepStatusMapByStepId: {} + }, // socket: null, // 工具进程的TCP连接,稍后由工具进程注册 // lastHeartbeat: null, command, @@ -390,6 +410,7 @@ function getWorkersStatus() { status: workerInfo.status, uptime: Date.now() - workerInfo.startTime, restartCount: workerInfo.restartCount || 0, + runtimeStorage: workerInfo.runtimeStorage || {}, // connected: workerInfo.socket !== null && !workerInfo.socket.destroyed, // lastHeartbeat: workerInfo.lastHeartbeat, command: workerInfo.command, diff --git a/packages/run-core-of-geek-auto-start-chat-with-boss/daemon-main.mjs b/packages/run-core-of-geek-auto-start-chat-with-boss/daemon-main.mjs index d2b2293..b2482a9 100644 --- a/packages/run-core-of-geek-auto-start-chat-with-boss/daemon-main.mjs +++ b/packages/run-core-of-geek-auto-start-chat-with-boss/daemon-main.mjs @@ -7,7 +7,7 @@ import { AUTO_CHAT_ERROR_EXIT_CODE } from './enums.mjs' const rerunInterval = (() => { let v = Number(process.env.MAIN_BOSSGEEKGO_RERUN_INTERVAL) if (isNaN(v)) { - v = 3000 + v = 5000 } return v diff --git a/packages/run-core-of-geek-auto-start-chat-with-boss/main.mjs b/packages/run-core-of-geek-auto-start-chat-with-boss/main.mjs index 6f19d1b..079e764 100644 --- a/packages/run-core-of-geek-auto-start-chat-with-boss/main.mjs +++ b/packages/run-core-of-geek-auto-start-chat-with-boss/main.mjs @@ -22,7 +22,7 @@ const { const rerunInterval = (() => { let v = Number(process.env.MAIN_BOSSGEEKGO_RERUN_INTERVAL) if (isNaN(v)) { - v = 3000 + v = 5000 } return v diff --git a/packages/sqlite-plugin/src/index.ts b/packages/sqlite-plugin/src/index.ts index e9bb038..94a8213 100644 --- a/packages/sqlite-plugin/src/index.ts +++ b/packages/sqlite-plugin/src/index.ts @@ -116,7 +116,7 @@ export default class SqlitePlugin { ) hooks.userInfoResponse.tapPromise( "SqlitePlugin", - async (userInfoResponse) => { + async ({ userInfoResponse } = {}) => { if (!userInfoResponse || userInfoResponse.code !== 0) { return; } diff --git a/packages/ui/electron.vite.config.ts b/packages/ui/electron.vite.config.ts index 2883f15..d555f4c 100644 --- a/packages/ui/electron.vite.config.ts +++ b/packages/ui/electron.vite.config.ts @@ -63,14 +63,16 @@ export default defineConfig({ rollupOptions: { external: [] }, - minify: process.env.NODE_ENV === 'development' ? undefined : 'terser' + minify: process.env.NODE_ENV === 'development' ? undefined : 'terser', + watch: process.env.NODE_ENV === 'development' ? {} : undefined }, plugins: mainPlugins }, preload: { plugins: preloadPlugins, build: { - minify: process.env.NODE_ENV === 'development' ? undefined : 'terser' + minify: process.env.NODE_ENV === 'development' ? undefined : 'terser', + watch: process.env.NODE_ENV === 'development' ? {} : undefined } }, renderer: { diff --git a/packages/ui/package.json b/packages/ui/package.json index 76555dd..5838b00 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "geekgeekrun-ui", - "version": "0.17.3", + "version": "0.17.4", "description": "BOSS 炸弹 - 自动开聊BOSS,助力每位打工人求职!", "main": "./out/main/index.js", "author": "geekgeekrun", diff --git a/packages/ui/src/common/build-info.json b/packages/ui/src/common/build-info.json index c2f2231..98a122d 100644 --- a/packages/ui/src/common/build-info.json +++ b/packages/ui/src/common/build-info.json @@ -1,7 +1,7 @@ { - "version": "0.17.3", - "buildVersion": 40, - "buildTime": 1775201731866, - "buildHash": "09a1b4b91804ebc8202c16d3e2976a91ab89d09d", + "version": "0.17.4", + "buildVersion": 41, + "buildTime": 1777732024939, + "buildHash": "9d3408d1f3fd5bba0e44736233408e2be2e48536", "name": "geekgeekrun-ui" } \ No newline at end of file diff --git a/packages/ui/src/main/features/cookie-invalid-handle-plugin.ts b/packages/ui/src/main/features/cookie-invalid-handle-plugin.ts index 529292b..cb91676 100644 --- a/packages/ui/src/main/features/cookie-invalid-handle-plugin.ts +++ b/packages/ui/src/main/features/cookie-invalid-handle-plugin.ts @@ -3,17 +3,37 @@ import minimist from 'minimist' import { loginWithCookieAssistant } from './login-with-cookie-assistant' import { checkCookieListFormat } from '../../common/utils/cookie' import { sleep } from '@geekgeekrun/utils/sleep.mjs' -import { readStorageFile } from '@geekgeekrun/geek-auto-start-chat-with-boss/runtime-file-utils.mjs' +import { + readStorageFile, + writeStorageFile +} from '@geekgeekrun/geek-auto-start-chat-with-boss/runtime-file-utils.mjs' const runRecordId = minimist(process.argv.slice(2))['run-record-id'] ?? null export class CookieInvalidHandlePlugin { apply(hooks) { - hooks.cookieWillSet.tapPromise('CookieInvalidHandlePlugin', async (cookies) => { + hooks.cookieWillSet.tapPromise('CookieInvalidHandlePlugin', async ({ cookies, browser } = {}) => { let isValid = checkCookieListFormat(cookies) while (!isValid) { + try { + browser && (await browser.close()) + } catch (err) { + console.log(`close browser failed`, err) + } try { // popup login dialog, then update login status - await loginWithCookieAssistant() + let app + try { + app = (await import('electron')).app + } catch { + // + } + // popup login dialog, then update login status + try { + await app?.dock?.show() + await loginWithCookieAssistant() + } finally { + await app?.dock?.hide() + } await sleep(2000) const newCookies = readStorageFile('boss-cookies.json') isValid = checkCookieListFormat(newCookies) @@ -27,8 +47,9 @@ export class CookieInvalidHandlePlugin { if (e?.message === 'USER_CANCELLED_LOGIN') { sendToDaemon({ type: 'worker-to-gui-message', + workerId: process.env.GEEKGEEKRUND_WORKER_ID, data: { - type: 'prerequisite-step-by-step-checkstep-by-step-check', + type: 'prerequisite-step-by-step-check', step: { id: 'basic-cookie-check', status: 'rejected' @@ -42,8 +63,9 @@ export class CookieInvalidHandlePlugin { } sendToDaemon({ type: 'worker-to-gui-message', + workerId: process.env.GEEKGEEKRUND_WORKER_ID, data: { - type: 'prerequisite-step-by-step-checkstep-by-step-check', + type: 'prerequisite-step-by-step-check', step: { id: 'basic-cookie-check', status: 'fulfilled' @@ -52,12 +74,13 @@ export class CookieInvalidHandlePlugin { } }) }) - hooks.userInfoResponse.tapPromise('CookieInvalidHandlePlugin', async (userInfoResponse) => { + hooks.userInfoResponse.tapPromise('CookieInvalidHandlePlugin', async ({ userInfoResponse, browser } = {}) => { if (userInfoResponse.code === 0) { sendToDaemon({ type: 'worker-to-gui-message', + workerId: process.env.GEEKGEEKRUND_WORKER_ID, data: { - type: 'prerequisite-step-by-step-checkstep-by-step-check', + type: 'prerequisite-step-by-step-check', step: { id: 'login-status-check', status: 'fulfilled' @@ -67,15 +90,34 @@ export class CookieInvalidHandlePlugin { }) return } + try { + browser && (await browser.close()) + } catch (err) { + console.log(`close browser failed`, err) + } + await writeStorageFile('boss-cookies.json', []) try { // popup login dialog, then update login status - await loginWithCookieAssistant() + let app + try { + app = (await import('electron')).app + } catch { + // + } + // popup login dialog, then update login status + try { + await app?.dock?.show() + await loginWithCookieAssistant() + } finally { + await app?.dock?.hide() + } } catch (e) { if (e?.message === 'USER_CANCELLED_LOGIN') { sendToDaemon({ type: 'worker-to-gui-message', + workerId: process.env.GEEKGEEKRUND_WORKER_ID, data: { - type: 'prerequisite-step-by-step-checkstep-by-step-check', + type: 'prerequisite-step-by-step-check', step: { id: 'login-status-check', status: 'rejected' diff --git a/packages/ui/src/main/flow/GEEK_AUTO_START_CHAT_WITH_BOSS_MAIN/index.ts b/packages/ui/src/main/flow/GEEK_AUTO_START_CHAT_WITH_BOSS_MAIN/index.ts index eb7259b..7dffce5 100644 --- a/packages/ui/src/main/flow/GEEK_AUTO_START_CHAT_WITH_BOSS_MAIN/index.ts +++ b/packages/ui/src/main/flow/GEEK_AUTO_START_CHAT_WITH_BOSS_MAIN/index.ts @@ -30,7 +30,7 @@ process.on('SIGTERM', () => { const rerunInterval = (() => { let v = Number(process.env.MAIN_BOSSGEEKGO_RERUN_INTERVAL) if (isNaN(v)) { - v = 3000 + v = 5000 } return v @@ -66,8 +66,9 @@ const runAutoChat = async () => { }) sendToDaemon({ type: 'worker-to-gui-message', + workerId: process.env.GEEKGEEKRUND_WORKER_ID, data: { - type: 'prerequisite-step-by-step-checkstep-by-step-check', + type: 'prerequisite-step-by-step-check', step: { id: 'puppeteer-executable-check', status: 'rejected' @@ -80,8 +81,9 @@ const runAutoChat = async () => { } sendToDaemon({ type: 'worker-to-gui-message', + workerId: process.env.GEEKGEEKRUND_WORKER_ID, data: { - type: 'prerequisite-step-by-step-checkstep-by-step-check', + type: 'prerequisite-step-by-step-check', step: { id: 'puppeteer-executable-check', status: 'fulfilled' @@ -183,8 +185,9 @@ export const waitForProcessHandShakeAndRunAutoChat = async () => { ) sendToDaemon({ type: 'worker-to-gui-message', + workerId: process.env.GEEKGEEKRUND_WORKER_ID, data: { - type: 'prerequisite-step-by-step-checkstep-by-step-check', + type: 'prerequisite-step-by-step-check', step: { id: 'worker-launch', status: 'fulfilled' diff --git a/packages/ui/src/main/flow/READ_NO_REPLY_AUTO_REMINDER_MAIN/index.ts b/packages/ui/src/main/flow/READ_NO_REPLY_AUTO_REMINDER_MAIN/index.ts index 0718b4f..236f98b 100644 --- a/packages/ui/src/main/flow/READ_NO_REPLY_AUTO_REMINDER_MAIN/index.ts +++ b/packages/ui/src/main/flow/READ_NO_REPLY_AUTO_REMINDER_MAIN/index.ts @@ -89,7 +89,9 @@ const onlyRemindBossWithoutBlockCompanyName = readConfigFile('boss.json').autoReminder?.onlyRemindBossWithoutBlockCompanyName ?? !!blockCompanyNameRegExp -const openContentSource = readConfigFile('boss.json').autoReminder?.openContentSource ?? OPEN_CONTENT_SOURCE.CONSTANT_CONTENT +const openContentSource = + readConfigFile('boss.json').autoReminder?.openContentSource ?? + OPEN_CONTENT_SOURCE.CONSTANT_CONTENT const constantOpenContent = (() => { let constantOpenContent = readConfigFile('boss.json').autoReminder?.constantOpenContent ?? '' if (constantOpenContent?.trim?.()) { @@ -303,7 +305,17 @@ const mainLoop = async () => { let cookieCheckResult = checkCookieListFormat(bossCookies) while (!cookieCheckResult) { try { - await loginWithCookieAssistant() + browser && (await browser.close()) + } catch (err) { + console.log(`close browser failed`, err) + } + try { + try { + await app.dock?.show() + await loginWithCookieAssistant() + } finally { + await app.dock?.hide() + } bossCookies = readStorageFile('boss-cookies.json') cookieCheckResult = checkCookieListFormat(bossCookies) } catch (err) { @@ -314,8 +326,9 @@ const mainLoop = async () => { }) sendToDaemon({ type: 'worker-to-gui-message', + workerId: process.env.GEEKGEEKRUND_WORKER_ID, data: { - type: 'prerequisite-step-by-step-checkstep-by-step-check', + type: 'prerequisite-step-by-step-check', step: { id: 'basic-cookie-check', status: 'rejected' @@ -328,8 +341,9 @@ const mainLoop = async () => { } sendToDaemon({ type: 'worker-to-gui-message', + workerId: process.env.GEEKGEEKRUND_WORKER_ID, data: { - type: 'prerequisite-step-by-step-checkstep-by-step-check', + type: 'prerequisite-step-by-step-check', step: { id: 'basic-cookie-check', status: 'fulfilled' @@ -356,8 +370,17 @@ const mainLoop = async () => { if (currentPageUrl.startsWith('https://www.zhipin.com/web/user/')) { writeStorageFile('boss-cookies.json', []) try { - // popup login dialog, then update login status - await loginWithCookieAssistant() + browser && (await browser.close()) + } catch (err) { + console.log(`close browser failed`, err) + } + try { + try { + await app.dock?.show() + await loginWithCookieAssistant() + } finally { + await app.dock?.hide() + } } catch (err) { await dialog.showMessageBox({ type: `error`, @@ -366,8 +389,9 @@ const mainLoop = async () => { }) sendToDaemon({ type: 'worker-to-gui-message', + workerId: process.env.GEEKGEEKRUND_WORKER_ID, data: { - type: 'prerequisite-step-by-step-checkstep-by-step-check', + type: 'prerequisite-step-by-step-check', step: { id: 'login-status-check', status: 'rejected' @@ -385,8 +409,9 @@ const mainLoop = async () => { ) { sendToDaemon({ type: 'worker-to-gui-message', + workerId: process.env.GEEKGEEKRUND_WORKER_ID, data: { - type: 'prerequisite-step-by-step-checkstep-by-step-check', + type: 'prerequisite-step-by-step-check', step: { id: 'login-status-check', status: 'rejected' @@ -418,8 +443,9 @@ const mainLoop = async () => { await storeStorage(pageMapByName.boss) sendToDaemon({ type: 'worker-to-gui-message', + workerId: process.env.GEEKGEEKRUND_WORKER_ID, data: { - type: 'prerequisite-step-by-step-checkstep-by-step-check', + type: 'prerequisite-step-by-step-check', step: { id: 'login-status-check', status: 'rejected' @@ -432,8 +458,9 @@ const mainLoop = async () => { } sendToDaemon({ type: 'worker-to-gui-message', + workerId: process.env.GEEKGEEKRUND_WORKER_ID, data: { - type: 'prerequisite-step-by-step-checkstep-by-step-check', + type: 'prerequisite-step-by-step-check', step: { id: 'login-status-check', status: 'fulfilled' @@ -656,7 +683,7 @@ const mainLoop = async () => { const rerunInterval = (() => { let v = Number(process.env.MAIN_BOSSGEEKGO_RERUN_INTERVAL) if (isNaN(v)) { - v = 3000 + v = 5000 } return v @@ -681,8 +708,9 @@ export async function runEntry() { ) sendToDaemon({ type: 'worker-to-gui-message', + workerId: process.env.GEEKGEEKRUND_WORKER_ID, data: { - type: 'prerequisite-step-by-step-checkstep-by-step-check', + type: 'prerequisite-step-by-step-check', step: { id: 'worker-launch', status: 'fulfilled' @@ -707,8 +735,9 @@ export async function runEntry() { }) sendToDaemon({ type: 'worker-to-gui-message', + workerId: process.env.GEEKGEEKRUND_WORKER_ID, data: { - type: 'prerequisite-step-by-step-checkstep-by-step-check', + type: 'prerequisite-step-by-step-check', step: { id: 'puppeteer-executable-check', status: 'rejected' @@ -720,8 +749,9 @@ export async function runEntry() { } sendToDaemon({ type: 'worker-to-gui-message', + workerId: process.env.GEEKGEEKRUND_WORKER_ID, data: { - type: 'prerequisite-step-by-step-checkstep-by-step-check', + type: 'prerequisite-step-by-step-check', step: { id: 'puppeteer-executable-check', status: 'fulfilled' diff --git a/packages/ui/src/renderer/src/features/RunningOverlay/index.vue b/packages/ui/src/renderer/src/features/RunningOverlay/index.vue index b923fab..ff00359 100644 --- a/packages/ui/src/renderer/src/features/RunningOverlay/index.vue +++ b/packages/ui/src/renderer/src/features/RunningOverlay/index.vue @@ -55,7 +55,7 @@