leadsradar-agent 1.0.3 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/leadsradar-agent.mjs +19 -7
- package/package.json +1 -1
- package/skills/leadsradar-helper/SKILL.md +15 -10
package/leadsradar-agent.mjs
CHANGED
|
@@ -50,12 +50,17 @@ const SKILLS_LATEST = {
|
|
|
50
50
|
insights: "2.2.0",
|
|
51
51
|
creator: "1.2.0",
|
|
52
52
|
closer: "1.3.0", // ⭐R78 栗子触达精准触发词查漏
|
|
53
|
-
helper: "1.3.
|
|
53
|
+
helper: "1.3.5", // ⭐R96 报到体验三改:①「适配器版本」→「探栗MCP版本」(用户可读面去开发黑话)+报到表格补「管家栗 ✅ 值守中」行(管家栗=宿主 AI 本体前台角色,用户问「管家栗不报道吗」)②菜单四行→三列表格(栗子/试一试/干什么)③头像 URL 本机 127.0.0.1→云端 CDN(jsdelivr npm 包 assets,手机端宿主够不到电脑本机端口实报裂图)(1.3.4=⭐R92 菜单行首 emoji 换真头像 markdown 图)
|
|
54
54
|
};
|
|
55
55
|
// ⭐R79b 插件商店最新版:插件发版时同步 bump(与 SKILLS_LATEST 同一维护纪律)——管家栗对照
|
|
56
56
|
// extension.extensionVersion 落后时提醒用户手动提速更新(商店自动更为主)
|
|
57
57
|
const PLUGIN_LATEST = "1.0.0";
|
|
58
|
-
const ADAPTER_VERSION = "1.2.
|
|
58
|
+
const ADAPTER_VERSION = "1.2.25"; /* ⭐R96 1.2.24→1.2.25:用户可读话术「适配器」→「探栗MCP」(portBlocked/占用 hint ×2+get_latest_skills description+serverInfo title)——插件(浏览器里干活的)与探栗MCP(宿主↔插件管道)是两个实体,「适配器」是开发黑话用户看不懂,随 helper 1.3.5 报到表格改名同批。
|
|
59
|
+
⭐R92b 1.2.23→1.2.24:EADDRINUSE 崩进程根修——R92 tryListen 重构成
|
|
60
|
+
ws({server:httpSrv}) 同端口复用时把 EADDRINUSE handler 误挂 httpSrv,而 ws 库会把底层 server 的 error 冒泡转发到
|
|
61
|
+
WebSocketServer 实例 emit(转发 listener 构造时先注册,wss 零 listener 同步 throw 崩进程,httpSrv 上后注册的 handler
|
|
62
|
+
执行不到)——任何 17373 被占场景新实例必崩(WorkBuddy 实报 MCP -32000 Connection closed),修=handler 挂回 wss +
|
|
63
|
+
httpSrv 留兜底日志。 ⭐R89 1.2.22→1.2.23:卫星模式等待插件话术补探测链(⭐2026-10-23 用户实报「刚开机测栗子在吗没自动连上」,WorkBuddy 卫星只泛泛说「去浏览器确认插件启用+开关打开」——根因=卫星分支 step=1 hint 是写死文案,没接主 Broker 分支同款 disconnectDiagnosis() || extensionLaunchHint() 探测链,说不出「插件装在 Chrome 的 Profile 1,开那个窗口 5 秒自动连」的精确指引;卫星经 device.extension.state 已同步主 Broker lastClose(诊断可用)、Profile 探测是无状态扫盘(卫星可跑),两条都安全) ⭐R79 1.2.21→1.2.22:①适配器自更新——启动后台异步查云端最新 mjs(npmmirror→unpkg 双源 fallback),提取其中 ADAPTER_VERSION 比对,更新则 tmp+rename 原子覆盖自己(本地文件型宿主覆盖下载目录 mjs、npx 型覆盖 _npx 缓存内的自己,下次进程启动即新版;失败静默保持旧版、只升不降、24h 节流);②connection_status 的 adapter.update 透出自更新三态(checking/up-to-date/updated-pending-restart)——升级挂「栗子在吗」常径不设专门触发词,宿主报到表格渲染「已自动升级,重启宿主生效」;③新工具 leadsradar_get_latest_skills(12→13 工具版判据):技能落后时宿主取最新 SKILL.md 全文递给用户粘贴(技能库装在宿主手里无法代写)。云端生效前提=npm 发版 leadsradar-agent(自更新与技能下载的同一源头) ⭐R76 1.2.20→1.2.21:①connection_status 附 skills_latest 五技能版本表(识别技能落后+指路更新——宿主技能版本不可自动更,Agent 对照自检指路);②R74/R75 期间加的工具(add_monitor/pair_login/get_daily_report,10→12)未 bump 版本号,复测无法分辨 mjs 新旧,一并 bump(v1.2.21=12 工具版判据) ⭐R56b 1.2.19→1.2.20:卫星登录态透传四处(中转宿主 loggedIn 恒 null 根修)+中转连接文案说人话(去宿主名硬编码黑话) ⭐msg11 1.2.18→1.2.19:AI 唤醒探栗 MCP——connection_status(「栗子在吗」探活指令)时 TL MCP 未运行则自动拉起(读 NM 注册表拿 exe 路径,detached spawn;只在交互信号点拉,不在 agent 启动时拉以尊重「托盘退出」;未装静默缓存跳过) ⭐B7b-P1 1.2.17→1.2.18:结果认领闭环(三原则 b 协议化——插件是结果的持有者与通知源,宿主是可断线重来的消费者):①extension.hello 附未领取结果摘要 pendingResults[{taskId,mode,keyword,url,createdAt}](connection_status 的 extension.pendingResults 透出,AI 开工前即知有存货);②新 MCP 工具 leadsradar_claim_pending_result(领取插件侧已完成但无人认领的任务结果——超时/宿主重启后回来领,不占采集限额;走普通任务通道 mode=claim_pending_result,卫星模式自动兼容);③device.extension.state 卫星透传摘要;④step=3 hint 有存货时提示「先领取再决定重发」(配合 1.2.17 的超时文案,AI 标准动作=超时→领取→查库→才重发,根除额度双耗);⭐1.2.16→1.2.17:HTTP 模式默认端口 17374→17375(撞车根修:17374 是本地服务 Rust IPC 的 NDJSON 端口,agent HTTP 监听同端口时扣子等 HTTP 宿主把请求头打到 Rust → service.log 刷 bad json;改 17375 后两端口各归其主,已按 17374 配 URL 的宿主需改指 17375,可用 LEADSRADAR_AGENT_HTTP_PORT 覆盖)+ B3 断开原因钩子(插件断开的 close frame code+reason 不再丢弃:disconnectDiagnosis() 区分「开关关/桥不可用/浏览器被杀或插件被禁」给精准指引——旧版一律报「start chrome」实测无效指引;插件侧 reason 真源 local-agent-connector.ts stop()="LF Agent disabled"/stopForAvailability()="…not publicly available",SW 被杀无告别帧=1006;卫星经 device.extension.state 同步诊断);⭐A2/B7/B9 1.2.15→1.2.16:撞墙自修三连——①任务中断秒失败(插件断开即中止全部等待任务 TASK_ABORTED,旧版傻等 300s 超时,2026-10-16 杀浏览器实测抓到);②撞墙文案自动探测插件所在浏览器+profile(扫 Chrome/Edge 各 profile 的 Preferences 找 unpacked 探栗 path,给出精确 start 命令——旧版「start chrome 开默认 profile、插件装在 Profile 1 → 桥永远不起」实测 bug);③extension.account.update 登录态保鲜(解绑/登出实时同步,旧版冻结在握手值「解绑了仍显示已登录」实测);⭐r96ze 1.2.14→1.2.15:卫星状态谎报根修(用户实报「未批准的 dsh 显示已连接可以开工」)——statusSnapshot 卫星分支旧逻辑借中转通道状态(主 Broker 与插件的连接)冒充自身就绪,未批准卫星恒报 step=3;新逻辑 selfPaired 标志(收到 purpose="session" 挑战=已配对、pairing=失效回退,SW 挑战类型即配对态真值),step 判定通道死→1/未配对→2/配对+通道→3,step=2 hint 明示「批准前任务会被拒绝别急着开工」(任务层本有 PAIRING_REQUIRED 门禁无越权,仅状态误导);⭐r96y 1.2.13→1.2.14:欢迎文案 v2(「探一下」品牌动词融入全部示例,示例即激活词教学;删「不用记命令」与能力清单黑话)+ 对外文案 9 处旧菜单名「智能体接管」→「智能体连接」(r96r-5 改名时适配器侧漏网:hint/错误 message/description/log,宿主 AI 按旧名指路用户找不到菜单);⭐r96t 1.2.12→1.2.13:HOST_LABELS 删 stepfun=「阶跃 AI」(渠道下线:用户拍板排除——自定义 MCP 入口未确认开放+用户量知名度低);⭐r96g 1.2.11→1.2.12:HOST_LABELS 补 cherry=「Cherry Studio」/stepfun=「阶跃 AI」(CLI·进阶档扩容:codex 回归+cherry+stepfun,dsh 并入该档);⭐r96e 1.2.10→1.2.11:HOST_LABELS 补 trae=「Trae」(Trae/编程 CLI 宿主:项目 .trae/mcp.json 配置拉起,本仓 dogfooding 实测);⭐r96 1.2.10:HOST_LABELS 补 qwen-office=「千问办公」;⭐r93 1.2.9:dsh=「DeepSeek」;⭐r90c 1.2.8:HTTP 模式;⭐r86c 1.2.7:kimi-work;⭐r85b 1.2.6:doubao/feishu 多客户端各自 HOST;⭐r85 1.2.5:Windows 动态端口自愈;⭐r82 1.2.4:initialize 注入呈现规范;⭐r81 1.2.3:登录态;⭐r77c 1.2.1:密钥迁用户目录;⭐r76 1.2.0:多宿主中转 */
|
|
59
64
|
const HOST_LABELS = {
|
|
60
65
|
"doubao-work": "豆包工作",
|
|
61
66
|
// ⭐r85 字节系多客户端实测(用户已验证豆包客户端支持 stdio 连接器,与豆包工作同源):
|
|
@@ -319,7 +324,13 @@ class AgentBroker {
|
|
|
319
324
|
};
|
|
320
325
|
const attach = (server, httpSrv) => {
|
|
321
326
|
server.on("connection", (ws) => this.handleConnection(ws));
|
|
322
|
-
|
|
327
|
+
/* ⭐R92b EADDRINUSE handler 必须挂 wss(server 实例):ws 库在 options.server 模式会把底层 httpSrv
|
|
328
|
+
的 error 冒泡转发到 WebSocketServer 实例 emit,且该转发 listener 在构造时注册(先于 attach)——
|
|
329
|
+
wss 上零 listener 即同步 throw 崩进程,后注册的 httpSrv handler 永远执行不到。
|
|
330
|
+
(R92 把 handler 从 wss 迁到 httpSrv 引发本 bug:任何 17373 被占的场景新实例必崩,
|
|
331
|
+
WorkBuddy 实报 MCP -32000 Connection closed、手动复跑实证栈
|
|
332
|
+
"Emitted 'error' event on WebSocketServer instance") */
|
|
333
|
+
server.on("error", (err) => {
|
|
323
334
|
if (err?.code === "EADDRINUSE") {
|
|
324
335
|
if (this.relay) return; // ⭐r76 已进入卫星中转模式,不再抢端口
|
|
325
336
|
if (listenAttempts > 20) {
|
|
@@ -350,6 +361,7 @@ class AgentBroker {
|
|
|
350
361
|
log(`[lf-agent] Broker error: ${err?.message}`);
|
|
351
362
|
}
|
|
352
363
|
});
|
|
364
|
+
httpSrv.on("error", (err) => log(`[lf-agent] httpSrv error 兜底: ${err?.message}`)); // ⭐R92b 防漏网
|
|
353
365
|
};
|
|
354
366
|
const tryListen = () => {
|
|
355
367
|
if (this.relay) return; // ⭐r76 卫星模式下不监听端口(主 Broker 负责插件连接)
|
|
@@ -1255,9 +1267,9 @@ class AgentBroker {
|
|
|
1255
1267
|
// 让宿主 AI 直接把根治命令转告用户,而不是一起懵在「连接器连接失败」
|
|
1256
1268
|
portBlocked: this.portBlocked === true,
|
|
1257
1269
|
hint: this.portBlocked
|
|
1258
|
-
?
|
|
1270
|
+
? `探栗MCP 端口 ${PORT} 被 Windows 动态端口保留(Hyper-V/WSL 排除段)挡住:bind 被拒但无进程占用,通常几十分钟内自动恢复,探栗MCP 在持续重试。请把这条根治命令转告用户(管理员 PowerShell 运行一次永久生效):net stop winnat ; netsh int ipv4 add excludedportrange protocol=tcp startport=${PORT} numberofports=1 ; net start winnat(运行完重启本会话即连上)。转告后每 30 秒复查一次。`
|
|
1259
1271
|
: !this.portBound
|
|
1260
|
-
?
|
|
1272
|
+
? `探栗MCP 的本机端口 ${PORT} 正在被占用且尚未完成中转协商(正在自动处理:同宿主孤儿会被接管,异宿主会自动转入中转共存)。请每 8 秒复查一次;若超过 1 分钟仍停留在此状态,请用户完全退出所有 AI 助手(含托盘)后重开。`
|
|
1261
1273
|
: step === 1
|
|
1262
1274
|
? `插件未连接:${(() => { const ok = autoLaunchExtensionHost(); return ok ? "已自动为你打开装插件的浏览器窗口——插件约 5 秒自动重连,稍等片刻喊「栗子在吗」复查即可" : (this.disconnectDiagnosis() || extensionLaunchHint() || "若你有终端权限可运行 start chrome(或 start msedge)打开浏览器,插件约 5 秒内自动重连"); })()};否则请用户在浏览器打开探栗插件 → 设置 → 智能体连接 → 打开顶部开关,然后每 8 秒复查一次。`
|
|
1263
1275
|
: step === 2
|
|
@@ -1476,7 +1488,7 @@ const TOOLS = [
|
|
|
1476
1488
|
{
|
|
1477
1489
|
name: "leadsradar_get_latest_skills",
|
|
1478
1490
|
description:
|
|
1479
|
-
"获取探栗五技能(情报栗 radar / 洞察栗 insights / 创作栗 creator / 成交栗 closer / 管家栗 helper)云端最新版 SKILL.md。何时用:connection_status 的 skills_latest 对照宿主技能文件 frontmatter version
|
|
1491
|
+
"获取探栗五技能(情报栗 radar / 洞察栗 insights / 创作栗 creator / 成交栗 closer / 管家栗 helper)云端最新版 SKILL.md。何时用:connection_status 的 skills_latest 对照宿主技能文件 frontmatter version 发现落后时——技能文件装在宿主技能库里(探栗MCP 够不着),本工具把最新 SKILL.md 全文递上来,宿主 AI 展示给用户整体复制、按宿主自己的技能安装方式覆盖旧文件即可完成技能升级。不传 name 返回五技能的云端最新版本表与更新指引;传 name 返回该技能 SKILL.md 全文(content 字段)与从 frontmatter 提取的 version。",
|
|
1480
1492
|
inputSchema: {
|
|
1481
1493
|
type: "object",
|
|
1482
1494
|
properties: {
|
|
@@ -1837,7 +1849,7 @@ async function dispatchRpc(req) {
|
|
|
1837
1849
|
result: {
|
|
1838
1850
|
protocolVersion: params.protocolVersion || MCP_PROTOCOL_VERSION,
|
|
1839
1851
|
capabilities: { tools: {} },
|
|
1840
|
-
serverInfo: { name: "leadsradar-agent-adapter", version: ADAPTER_VERSION, title: "探栗
|
|
1852
|
+
serverInfo: { name: "leadsradar-agent-adapter", version: ADAPTER_VERSION, title: "探栗MCP" },
|
|
1841
1853
|
instructions: MCP_INSTRUCTIONS, // ⭐r82 呈现规范随 initialize 注入宿主系统提示
|
|
1842
1854
|
},
|
|
1843
1855
|
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: leadsradar-helper
|
|
3
3
|
title: 探栗·管家栗
|
|
4
|
-
version: 1.3.
|
|
4
|
+
version: 1.3.5
|
|
5
5
|
status: available
|
|
6
6
|
description: 探栗(LeadsRadar 浏览器插件)管家栗:栗子前台——应答「栗子」「栗子在吗」「栗子们」并自动报告连接/登录/任务三件事,「栗子档案」总览本地核心资产(先大纲后细节),「栗子查」细看某一类,「栗子登录」帮用户完成插件登录连接,「今天的日报/获客日报」取昨日获客简讯全量渲染,介绍四大数字员工(情报栗/洞察栗/创作栗/成交栗)并引导派活,解答使用教程与设置问题。用户说「栗子」「栗子在吗」「栗子们」「栗子档案」「栗子查」,或问「怎么用/我登录了吗/教程/怎么装/怎么配置智能体/在哪改设置/日报」时即指本技能。「栗子+动作词」是精准触发词家族(栗子下载/栗子入库/栗子提取→创作栗;栗子对标→情报栗;栗子研究→洞察栗;栗子触达→成交栗),管家栗遇到直接指派对应栗、不要自己接
|
|
7
7
|
requires:
|
|
@@ -33,31 +33,36 @@ requires:
|
|
|
33
33
|
收到总唤醒**先调一次 `leadsradar_connection_status` 实查**(不凭记忆报状态),按表格报到,再报菜单:
|
|
34
34
|
|
|
35
35
|
```
|
|
36
|
-
|
|
36
|
+
在的,我是管家栗——先报个到:
|
|
37
37
|
|
|
38
38
|
| 检查项 | 状态 |
|
|
39
39
|
|---|---|
|
|
40
|
+
| 管家栗 | ✅ 值守中(就是正在回话的我) |
|
|
40
41
|
| 插件连接 | ✅ 已连接 |
|
|
41
|
-
|
|
|
42
|
+
| 探栗MCP版本 | v1.2.24(已自动升级 v1.2.25,重启宿主后生效) |
|
|
42
43
|
| 登录状态 | ✅ 已登录 · 个人版 · 积分 120 |
|
|
43
44
|
| 待领任务 | 无积压 |
|
|
44
45
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
四个专才栗随时接活(指令点一下/长按即可复制):
|
|
47
|
+
|
|
48
|
+
| 栗子 | 试一试 | 干什么 |
|
|
49
|
+
|---|---|---|
|
|
50
|
+
|  **情报栗** | `探一下 <作品/账号链接或关键词>` · `栗子对标 <账号链接>` | 评论区捞客户线索 · 账号速览 · 赛道机会 |
|
|
51
|
+
|  **洞察栗** | `栗子研究 <作品/账号/赛道>` · `复盘我的账号` | 拆解爆款 · 深度研究 · 查历史报告 |
|
|
52
|
+
|  **创作栗** | `栗子下载 <链接>` · `栗子入库 <链接>` · `栗子提取 <链接>` | 无水印素材 · 存选题 · 提文案仿写 |
|
|
53
|
+
|  **成交栗** | `栗子触达 <作品链接>` | 意向分级 → 跟进名单 → 能直接发的话术 |
|
|
49
54
|
|
|
50
55
|
现在想干哪件?没想好就把你在看的小红书/抖音链接发我。
|
|
51
56
|
```
|
|
52
57
|
|
|
53
58
|
报到纪律:
|
|
54
|
-
- **状态实查**:连接=extension.connected
|
|
59
|
+
- **状态实查**:连接=extension.connected;探栗MCP版本=adapter.version + adapter.update(**update.state=updated-pending-restart 时在版本行加「已自动升级 vX→vY,重启宿主后生效」**——探栗MCP 说「栗子在吗」时就自动升级了,用户只需重启宿主;up-to-date/checking/idle 不吭声;只有连续多天仍报旧版本才指路插件设置页重新下载);登录=extension.account(loggedIn + nickname/plan——未登录报「未登录」,别编);待领=extension.pendingResultCount
|
|
55
60
|
- **插件版本提速提醒**(⭐R79b):extension.extensionVersion < plugin_latest 时加一行「插件有新版 vX.Y.Z——浏览器扩展商店会自动更(通常几小时到几天),等不及可去 chrome://extensions(Edge 为 edge://extensions)点「更新」立刻升」;不落后不吭声
|
|
56
61
|
- **待领非空顺手领(⭐R76)**:pendingResultCount>0 → 补调 `leadsradar_claim_pending_result`(不传 taskId),一句话报「帮你领回了 N 条之前跑完的结果」(正常为空;非空说明上次有任务超时/断线,领回即是惊喜)
|
|
57
62
|
- **未连接不报菜单**:按 onboarding 指引转述(每 8 秒复查最多 12 次),连上了再报到+菜单
|
|
58
63
|
- **技能版本自检(⭐R76)**:connection_status 返回带 `skills_latest` 五技能版本表——与当前技能文件 frontmatter 的 version 对照,**落后就加一行提醒**:「⚠️ 技能有新版,按你的安装方式更新一下技能文件,我干活更顺」(Agent 只识别+指路,更新动作在用户手里)
|
|
59
64
|
|
|
60
|
-
- **栗子头像(⭐R92
|
|
65
|
+
- **栗子头像(⭐R92 建,⭐R96 换云端源)**:菜单表格行首 `` 图来自云端 npm 包(五栗映射:管家=4 / 情报=3 / 洞察=1 / 创作=6 / 成交=7)——手机端宿主够不到电脑本机端口(127.0.0.1 在手机上指向手机自己),云端源任何设备联网即渲染,**照抄别删**;纯文本宿主降级为 alt 文字不影响阅读
|
|
61
66
|
|
|
62
67
|
用户报了需求 → 按第五节路由表指路(宿主会自动进对应技能,指路话术一句带过即可,别抢活)。
|
|
63
68
|
|
|
@@ -66,7 +71,7 @@ requires:
|
|
|
66
71
|
1. **连接/登录**:`leadsradar_connection_status` →
|
|
67
72
|
- `extension.connected`(true=插件已连接可开工;false=按返回的 onboarding.hint 指引转述)
|
|
68
73
|
- `extension.account.loggedIn`(true=已登录 + nickname;false/null=未登录——先问一句要不要现在登录,用户点头就调 `leadsradar_pair_login`(见三点五),不愿开网页再指路插件个人中心;纯采集下载查询不登录也能用)
|
|
69
|
-
- `adapter.version` + `adapter.update`(update.state=updated-pending-restart
|
|
74
|
+
- `adapter.version` + `adapter.update`(update.state=updated-pending-restart 提示「已自动升级,重启宿主后生效」——探栗MCP 探活时自动升级,正常不需要手动操作;连续多天仍旧版才指路插件设置页重新下载)
|
|
70
75
|
2. **库存概览**:见第四节栗子档案——总览走大纲表,明细走「栗子查」
|
|
71
76
|
3. 查不到/未配置工具时如实说,指路安装配置(见第六节 FAQ),禁止编造状态
|
|
72
77
|
|