From 23ac80fb7d1a26f4e4fff796eb0d221e13756898 Mon Sep 17 00:00:00 2001 From: wardforce <3093340276@qq.com> Date: Tue, 6 Oct 2026 16:50:44 +0800 Subject: [PATCH 1/9] fix: harden Liepin chat composer detection --- .gitignore | 4 ++-- package.json | 2 +- src-tauri/Cargo.lock | 2 +- src-tauri/Cargo.toml | 2 +- src-tauri/tauri.conf.json | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 7db9668..8be2aed 100644 --- a/.gitignore +++ b/.gitignore @@ -44,6 +44,6 @@ designs/ .playwright-mcp # Claude Code 的 agent 工作区,由工具自行管理 .claude/worktrees/ - - +.omc\project-memory.json +.omc\sessions\92219f8a-08f3-41a6-a593-df6c3467bc40.json .pi \ No newline at end of file diff --git a/package.json b/package.json index 9916179..c600881 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "offer_flow", "private": true, - "version": "0.1.22", + "version": "0.1.23", "description": "Local-first desktop job search automation and analysis tool", "license": "Apache-2.0", "repository": "https://github.com/OpenFuckJob/FuckJob.git", diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 31b0c5e..cb0bc67 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -5805,7 +5805,7 @@ dependencies = [ [[package]] name = "offer_flow" -version = "0.1.22" +version = "0.1.23" dependencies = [ "anyhow", "base64 0.22.1", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 750f3bc..d7d8351 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "offer_flow" -version = "0.1.22" +version = "0.1.23" description = "Local-first desktop job search automation and analysis tool" authors = ["JWJW000"] license = "Apache-2.0" diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index e665557..e0ebb1f 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "OfferFlow", - "version": "0.1.22", + "version": "0.1.23", "identifier": "me.pgthinker.fj", "build": { "beforeDevCommand": "pnpm dev", From 8d4c380a365f0694343f2b2eca16c841292a05da Mon Sep 17 00:00:00 2001 From: wardforce <3093340276@qq.com> Date: Fri, 18 Sep 2026 19:48:51 +0800 Subject: [PATCH 2/9] Fix Liepin greeting flow and bump version --- package.json | 2 +- scripts/liepin-send-dom.node-test.mjs | 46 ++++++ src-tauri/Cargo.lock | 2 +- src-tauri/Cargo.toml | 2 +- .../rpa/liepin/handler/position_say_hello.rs | 131 +++++++++++------- src-tauri/src/rpa/liepin/send_text.js | 22 +-- src-tauri/tauri.conf.json | 2 +- 7 files changed, 142 insertions(+), 65 deletions(-) diff --git a/package.json b/package.json index c600881..bd53ccd 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "offer_flow", "private": true, - "version": "0.1.23", + "version": "0.1.24", "description": "Local-first desktop job search automation and analysis tool", "license": "Apache-2.0", "repository": "https://github.com/OpenFuckJob/FuckJob.git", diff --git a/scripts/liepin-send-dom.node-test.mjs b/scripts/liepin-send-dom.node-test.mjs index 546d624..36ab453 100644 --- a/scripts/liepin-send-dom.node-test.mjs +++ b/scripts/liepin-send-dom.node-test.mjs @@ -62,6 +62,52 @@ test("mark only the scoped chat input and clear its stale draft", () => { ); }); +test("wait for a chat drawer composer without treating its login history as a blocker", async () => { + const document = makeDocument(` + + `); + const requestRecords = []; + let loaded = false; + const result = await runLiepinSend(document, { + message: "你好", + requestRecords, + inputTimeoutMs: 300, + sleep: async () => { + if (loaded) return; + loaded = true; + const composer = document.createElement("div"); + composer.className = "im-ui-msg-list-content"; + composer.innerHTML = ''; + composer.querySelector("button").addEventListener("click", () => { + requestRecords.push({ + url: "https://api-c.liepin.com/api/com.liepin.im.c.chat.send-push", + status: 200, + }); + }); + document.querySelector(".chat-drawer").append(composer); + }, + }); + + assert.equal(result.blockedModal, false); + assert.equal(result.success, true); +}); + +test("report a composer timeout when no writable chat input loads", async () => { + const document = makeDocument('
历史会话
'); + const result = await runLiepinSend(document, { + message: "你好", + inputTimeoutMs: 300, + sleep: async () => {}, + }); + + assert.equal(result.success, false); + assert.equal(result.reason, "chat-composer-timeout"); +}); + test("do not mistake chat drawer history for a priority modal", async () => { const document = makeDocument(`