DSH Plugins Marketplace

DSH Plugins

Plugins

/

dsh-vehicle-watch

j

dsh-vehicle-watch

Discovered

DSH 插件:监控西安四款车型(小米SU7/理想i6/问界M7/极氪001)的瓜子二手车新上架与降价,推送到企业微信/飞书并生成 Excel。

Machine translated

dsh-vehicle-watch

CI License: MIT DSH

GitHub: https://github.com/judyding1121-web/dsh-vehicle-watch

DeepSeek Harness(DSH)Host 插件 / Cordis bundle:监控西安 小米SU7 / 理想i6 / 问界M7 / 极氪001 的闲鱼二手车,新上架或降价时推送到企业微信、飞书,并生成 Excel 报表 + 单文件 HTML 看板。

  • 每 2 小时按关键词搜索闲鱼(按发布时间倒序,第 1 页 30 条/关键词,可配多页);
  • 只保留西安、二手车类目、匹配关键词的车源,过滤配件/用品/租车/事故残值车;
  • 与已见 listing_id 对比:新上架、已跟踪车源降价;
  • 每轮新上架和降价聚合成一张通知;企业微信 Webhook 保留 text_notice 模板卡,首次启动只发一条基线摘要;
  • 生成 二手车监控-最新.xlsx(6 个 sheet)、CSV,以及包含动态 / 全部车源 / 监控三视图的单文件 HTML 看板;
  • 可选企业微信「智能机器人」双向指令:单张按钮卡、原卡更新、同会话异步扫描结果,以及真实监控启停。

卖家报价 ≠ 成交价;闲鱼是 C2C 平台,同一台车可能重复挂牌或由车商发布;样本 = 每次搜索前 N 页过滤后的结果。仅个人低频自用,不商用、不公开分发数据。


环境要求

项要求说明
DSH Desktop0.2.1-rc.2peerDependencies 钉死此版本;其他版本需版本豁免(见下)
Node.js≥ 24DSH 自带,无需另装
Python 3 + openpyxl可选仅生成 Excel 需要;不装可设 report.enabled: false,仍输出 CSV
企业微信群机器人 webhook可选不填则只落库/出表,不推送
飞书群机器人 webhook可选同上
企业微信智能机器人 botId/secret可选只有要双向指令时才需要
闲鱼登录 Cookie可选匿名也能搜索;触发风控(RGV587)时填上更稳

安装

方式 A:从 GitHub 安装(推荐,另一台电脑最省事)

插件管理器直接把 GitHub 仓库当 npm spec 安装,依赖(ws)会自动装好。

  1. DSH → Web 侧栏 → 插件 → 添加插件 → 安装第三方插件;
  2. 输入仓库 spec,二选一:
    • github:judyding1121-web/dsh-vehicle-watch
    • https://github.com/judyding1121-web/dsh-vehicle-watch
  3. 安装完成后确认状态是 applied(若提示 restart-required,重启 DSH);
  4. 按下面「配置」填写 webhook / 车型;
  5. 30 秒后自动首扫,或让 Agent 调用 vehicle_usedcar_scan。

也可以让 Agent 调用 plugin_manager:action: install_bundle、target: 'github:judyding1121-web/dsh-vehicle-watch'。该工具需要 danger-full-access 或本次调用审批。

私有仓库:需要本机 Git 凭据(SSH key 或 credential helper/token)。安装前管理器会用 git ls-remote 探活,认证失败会继续交给 pnpm,能凭据就绪即可。

方式 B:clone 后按本地目录安装

适合改代码 / 离线:

git clone https://github.com/judyding1121-web/dsh-vehicle-watch.git
cd dsh-vehicle-watch
pnpm install        # 本地 link 安装不会替你装 ws,必须手动执行一次

然后:插件 → 添加插件 → 安装第三方插件 → 选这个目录的绝对路径。

方式 C:离线 tarball

pnpm pack           # 生成 dsh-vehicle-watch-0.7.0.tgz

把 .tgz 拷到另一台电脑,安装时填 tarball 的绝对路径(同样支持)。

⚠️ Desktop 的 profile 由 Electron 独占管理:不要手改 ~/.dsh/profiles/desktop/package.json / cordis.yml,也不要用 dsh plugin CLI 改 desktop profile。只改 cordis.patch.yml。


配置

安装后编辑 ~/.dsh/profiles/desktop/cordis.patch.yml,在 - id: vehicle-watch 下填配置(可复制本仓库 cordis.patch.yml 的 config 再改)。

- id: vehicle-watch
  config:
    city: 西安
    province: 陕西
    minPriceYuan: 30000          # 低于此价视为配件/租车/残值车
    carCategoryId: '127302001'   # 闲鱼「二手车」类目 id(一般不用改)
    scanIntervalHours: 2
    startupDelaySec: 30
    maxPushPerRun: 8
    notifyOnFirstRun: true
    priceDropAbs: 1000
    excludeKeywords: [租车, 日租, 床垫, 车模, 配件, 订单, 返现, 定金, 事故, 水淹, 残值, 批发]
    targets:
      - id: xiaomi-su7
        name: 小米SU7
        keyword: 小米SU7
        referenceOfficialLow: 219900
        referenceOfficialHigh: 303900
        enabled: true
      # 其余车型照抄 cordis.patch.yml
    dashboard:
      enabled: true              # 内置带访问令牌的 HTTP 看板与监控管理 API
      public: true               # 用 cloudflared 快速隧道映射成公网地址(户外手机可看)
      publicUrl: ''              # 固定公网地址(命名隧道 / Tailscale 时填写;见下文)
      tunnelToken: ''            # Cloudflare 命名隧道 token(填了地址可固定)
      tunnelCommand: ''          # cloudflared 路径;空 = 自动查找
      port: 47800
      host: ''                   # 空 = 0.0.0.0;只在本机看可填 127.0.0.1
    xianyu:
      cookie: ''                 # 可选:填闲鱼网页登录 Cookie(document.cookie 整串)
      pages: 1                   # 每个关键词翻几页(每页 30 条)
      minGapMs: 3000             # 请求间隔,太低容易触发风控
      timeoutMs: 20000
    notify:
      wecomWebhook: 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=...'
      feishuWebhook: 'https://open.feishu.cn/open-apis/bot/v2/hook/...'
      feishuSecret: ''
      timeoutMs: 10000
    aibot:                       # 双向指令才需要;不需要就整段留空/删掉
      enabled: false
      botId: ''
      secret: ''
    report:
      enabled: true
      html: true                 # 每次扫描后生成单文件 HTML 看板
      dir: ''                    # 空 = ~/.dsh/storages/vehicle-watch/reports
      pythonPath: python3        # 换机器一般不用改;Windows 填 python
      keepDays: 30

注意:config 是整体替换,不是深合并。 覆盖时必须重述 targets、notify、report 等所有字段(可整段复制仓库里的 cordis.patch.yml 再改)。webhook / bot secret / 闲鱼 Cookie 都是凭证,cordis.patch.yml 权限建议 600,不要提交到仓库、不要贴进对话。

常用字段:

字段默认说明
city / province西安 / 陕西闲鱼搜索结果的城市过滤(division)
minPriceYuan30000价格下限,过滤配件/租车/残值车
carCategoryId127302001闲鱼二手车类目 id;先按类目过滤再匹配关键词
excludeKeywords见上标题命中即剔除的非车/事故词
scanIntervalHours2扫描间隔(小时)
startupDelaySec30启动后首扫延迟,避免抢启动
maxPushPerRun8每轮唯一汇总卡最多列几条重点变化,完整变化进入看板
priceDropAbs1000降价超过多少元才推
notifyOnFirstRuntrue首次只建基线,不逐条推
xianyu.pages1每个关键词翻页数(每页 30 条)
xianyu.cookie''可选登录 Cookie;触发风控时可提高稳定性
report.htmltrue每次扫描后生成 二手车监控-最新.html 看板(不依赖 Python;关掉也不影响推送/Excel)
dashboard.enabledtrue内置看板与监控管理 API;页面、数据和管理接口都校验访问令牌
dashboard.publictrue启动 Cloudflare quick tunnel(需本机有 cloudflared),户外手机可看;失败自动退回局域网
dashboard.publicUrl''固定公网地址:命名隧道/反向代理/Tailscale 时填这里,插件不再使用随机 quick tunnel
dashboard.tunnelToken''Cloudflare 命名隧道 token;与 publicUrl 一起用可让链接永久固定
dashboard.tunnelCommand''cloudflared 路径;空 = 自动查找(~/.npm-global/bin、Homebrew 等)
dashboard.port47800端口;被占用时自动 +1 重试
dashboard.host''空 = 0.0.0.0(局域网可访问);只在本机看填 127.0.0.1
report.dir''空 = ~/.dsh/storages/vehicle-watch/reports;可指向工作区
report.pythonPathpython3换机器一般不用改

闲鱼 Cookie 怎么填(可选)

  1. 浏览器登录 https://www.goofish.com/;
  2. 打开开发者工具 → Console,执行 document.cookie,复制整串;
  3. 填到 xianyu.cookie: '...',重启插件生效。

Cookie 会过期,失效后插件会自动退回匿名搜索;若频繁被风控,重新取一次即可。


数据与状态

内容位置
已见车源 / 去重状态~/.dsh/storages/vehicle-watch/used-car-state.json
报表与明细report.dir(默认 ~/.dsh/storages/vehicle-watch/reports)
产物二手车监控-最新.xlsx、二手车监控-最新.html、latest.json、latest.csv、listings-latest.csv、scan-log.jsonl
动态监控与默认车型停用状态~/.dsh/storages/vehicle-watch/watchlist.json(旧清单会自动兼容,新增 disabledIds)
看板访问令牌~/.dsh/storages/vehicle-watch/dashboard-token(本地随机生成,权限 600,不进入仓库)

HTML 看板(动态 / 全部车源 / 监控)

每次扫描后自动重写 二手车监控-最新.html,手机页面通过同源 API 获取最新数据和真实监控清单。

  • 动态:本轮新上架/降价汇总,支持全部/新上/降价和 24 小时/7 天筛选;latest.json 的 changes 最多保留 7 天、500 条;
  • 全部车源:按车型、最高价格、最高里程筛选,支持价格升降序和里程排序;
  • 监控:开关立即保存;默认配置车型暂停后可通过开关或企微按钮恢复,动态新增车型删除后可重新添加;
  • 同一关键词查询 5 分钟内复用结果并合并并发,企微“刷新”按钮会强制重新查询;查询失败页可重试或转闲鱼搜索。

看板链接为什么会变?怎么固定?

默认使用 Cloudflare quick tunnel:免账号、开箱即用,但地址是随机临时域名,重启/隧道重建后会变,适合“每次在机器人里发「看板」拿当前链接”,不适合长期收藏。

要固定链接,二选一(都已支持):

方案适合配置说明
Cloudflare 命名隧道有域名接入 Cloudflare,想公网随时可看dashboard.publicUrl: https://cars.example.com
dashboard.tunnelToken: <token>
Cloudflare Zero Trust → Tunnels → 新建隧道,Public hostname 指向 http://localhost:47800,复制 token;重启插件生效,地址永久固定
Tailscale(不公开到公网)只想自己手机看,不想暴露公网dashboard.publicUrl: http://<Mac的Tailscale IP>:47800
dashboard.public: false
Mac 与手机都装 Tailscale;户外有网即可访问,链接固定且只有自己设备能连

只填 publicUrl(不填 token)时,插件认为你已有自己的反向代理/私有网络,不再启动临时隧道。

手机查看(户外也行):插件启动本地看板服务(默认 47800),并尝试用 Cloudflare quick tunnel 映射成公网 HTTPS 地址(需要本机有 cloudflared,无需 Cloudflare 账号)。

  • 企微机器人发 看板 → 返回带 token 查询参数的当前地址,户外手机直接打开;
  • 公网隧道不可用时,自动退回局域网地址 http://<局域网IP>:47800/?token=...(需同一 Wi-Fi);
  • 页面、latest.json、查询和监控管理 API 都校验同一令牌;无令牌或令牌错误返回 401,不要把完整链接转发给无关的人;
  • 每轮扫描后页面数据自动更新,也可点“刷新数据”;
  • 看板车源卡打开闲鱼商品页;在企微 WebView 中可按提示切系统浏览器,再尝试唤起闲鱼 App。

令牌与 Cloudflare tunnelToken 是两种不同凭证:前者由插件本地生成并随看板链接下发,后者只用于命名隧道配置。macOS 首次可能弹「允许传入连接」,允许即可。

也可手动重生成(用现有 latest.json):

node scripts/make_html.mjs <latest.json> [out.html] [intervalHours]

状态与报表都不在仓库里,换电脑互不影响;首次运行会重新建立基线。从瓜子版升级时,第一次闲鱼扫描会自动按“基线”处理,不会把全量当新上架刷屏。


工具

工具用途
vehicle_usedcar_scan立即搜索一次闲鱼(可指定 targetId);返回新增/降价/消息/报表与看板路径
vehicle_usedcar_status上次扫描、各车型样本数/中位价/已见数、闲鱼关键词与搜索链接、看板路径
vehicle_usedcar_bot_status企微智能机器人连接状态、收发计数
vehicle_usedcar_report用最近一次结果重新生成 Excel + HTML 看板

企业微信双向指令

在群里 @机器人 发送:

指令回复
查 / 行情 / 状态单张汇总卡:各车型样本数、中位价
小米SU7 / 理想i6 / 问界M7 / 极氪001单张行情卡,进入看板看全部车源
最新 / 新上架单张变化卡,同时统计新上架和降价
扫描 / 刷新原会话先回复“正在扫描”,完成后主动推送结果;不重复发固定 Webhook
找宋L / 找理想L9单张查询卡;点“加入监控”后原卡更新,首次扫描结果回原会话
监控 / 监控管理查看清单并暂停/恢复车型;完整新增和启停也可在看板操作
看板返回带访问令牌的当前局域网或公网链接
取消 / 帮助取消待确认操作 / 指令列表

智能机器人使用 button_interaction 按钮卡、aibot_respond_update_msg 更新原卡和 aibot_send_msg 主动推送。群 Webhook 仍使用企微支持的 text_notice,不会发送无法回调的伪按钮。


换电脑 / 升级 DSH 后

  • DSH 版本不同:安装可能报 incompatible-version(peer 依赖钉 0.2.1-rc.2)。处理:插件页 → 版本豁免(或让 Agent 用 plugin_manager 的 set_version_exemption,需 acceptRisk: true),只对该 包@版本 + DSH 版本 组合生效。
  • 升级插件:可 HMR 的改动即时生效;替换已装包通常提示 restart-required,重启即可。
  • 卸载:插件页移除;状态文件保留在 ~/.dsh/storages/vehicle-watch/,需要彻底清理时手动删。

稳定性设计(针对已知不稳定因素)

风险处理
闲鱼风控/令牌过期请求串行化(扫描与机器人查询不会并发轰接口)+ 风控退避 + 刷新 _m_h5_tk 重试
单轮全部车型失败(网络/风控)保留上一份看板/latest.json 不覆盖,发一条运维告警;随后 10 分钟、30 分钟各自动补扫一次;scan-log 记录每个车型的失败原因
部分车型失败成功车型照常出数据/推送,失败车型在最新数据里标 failed
看板文件正在写时被手机读到半截HTML/JSON/CSV 全部原子写(临时文件 + rename)
公网隧道挂掉自动回退局域网地址,并在后台最多重试 3 次(5–10s 间隔)
端口被占用看板服务自动 +1 找空闲端口
Mac 时区不是东八区看板时间固定按 Asia/Shanghai 显示
DSH 未运行插件不跑;需要 7×24 时加 launchd/常驻兜底(未实现)

常见问题

现象处理
安装后工具不出现看是否 applied;restart-required 就重启;日志找 vehicle-watch mounted
报 Cannot find package 'ws'本地目录安装没跑 pnpm install;执行一次后重启
扫描报 RGV587 / “被挤爆啦”触发闲鱼风控:调大 xianyu.minGapMs、减少 pages、稍后重试;长期需要可在 xianyu.cookie 填登录 Cookie
样本数为 0关键词无整车结果/被风控/类目或价格过滤太严;看日志与 scan-log.jsonl
首轮没推送首次只建基线;或 webhook 为空(日志 notify skipped)
报表失败 No module named openpyxlpython3 -m pip install --user openpyxl,或 report.enabled: false(CSV 与 HTML 看板照常生成)
看板怎么打开电脑:双击/浏览器打开 report.dir/二手车监控-最新.html;手机:与 Mac 同一 Wi-Fi,发「看板」拿 http://<局域网IP>:47800/ 链接
手机打不开看板优先用「看板」返回的 https://*.trycloudflare.com 公网地址(户外可用);若退回局域网,检查同一 Wi-Fi/防火墙/端口;日志搜 dashboard ready / public tunnel
公网隧道没启动确认本机装了 cloudflared(cloudflared --version),或 dashboard.tunnelCommand 指向路径;隧道是临时地址、不保证长期可用
DSH 关闭后不跑本插件随 DSH Host 生命周期;要 7×24 需另加 launchd / 常驻服务

开发

pnpm install                  # 只装 ws;@deepseek-ai/* 由 DSH 运行时提供
pnpm run check                # 所有入口语法检查
pnpm test                     # 46 项离线自测:命令 23 + 服务 9 + 企微交互 8 + 看板专项 6

离线测试覆盖:闲鱼解析/过滤/聚合/决策、AI 意图与单卡路由、按钮原卡更新和事件排重、群聊/单聊异步推送、手动扫描防重复通知、监控取消与恢复、5 分钟查询缓存及并发合并、7 天变化历史、单车型扫描数据保留、看板三视图及内嵌 JS 语法、API 鉴权与新增/启停/删除、全部/部分失败、请求队列和隧道 URL。真实企业微信凭证、实际收发与公网隧道不属于离线测试范围。

CI(GitHub Actions,.github/workflows/ci.yml)在每次 push / PR 时执行: pnpm install --frozen-lockfile → pnpm run check → pnpm test → pnpm pack 冒烟。


发布到 GitHub(维护者)

本目录就是仓库根:package.json 在根、声明了 dsh.bundle.patch,插件管理器才能把它当 bundle 安装。不要把整个 workspace 当仓库发(bundle 在子目录,安装时无法指向子目录)。

cd plugins/dsh-vehicle-watch
git init -b main
git add .
git commit -m "feat: dsh-vehicle-watch v0.7.0"

# 有 gh CLI:
gh repo create dsh-vehicle-watch --public --source=. --push
# 或网页建空仓库后:
git remote add origin https://github.com/judyding1121-web/dsh-vehicle-watch.git
git push -u origin main

发布前检查:

  1. pnpm run check、pnpm test 通过;
  2. 仓库里没有 webhook、bot secret、闲鱼 Cookie、node_modules/、data/、*.xlsx、*.csv、scan-log.jsonl(.gitignore 已覆盖,仍建议 git status 过一眼);
  3. cordis.patch.yml 里没有绝对路径;
  4. 只发布代码,不发布抓取到的车源数据。

合规

  • 闲鱼卖家报价 ≠ 成交价;样本 = 搜索结果过滤后的车源,不承诺全量。
  • 默认 2 小时 × 4 关键词 × 1 页 ≈ 48 请求/天;请保持低频,遵守目标站点条款,不商用、不公开分发数据。
  • 闲鱼有登录/风控限制,本插件只做个人低频查询,不破解验证码、不绕过登录。
  • 插件运行在 DSH Host 进程内、拥有宿主权限;安装第三方插件前先读代码。

License

MIT

Comments

Loading…

Similar plugins

dsh-subagent-status

by zzy2210

DeepSeek Harness 常驻插件:在会话标题栏显示主代理与每个子代理实际使用的模型和思考档位 | Persistent DSH web plugin: shows the model & reasoning effort actually used by every subagent, right in the conversation header

Manifest valid

★ 0

JavaScript

Oct 8, 2026

dsh plugin --profile web add y1n-agent-roster

by xinmo114514

DSH(DeepSeek Harness)Web 插件:设置页 Token 消耗仪表盘 —— 指标卡、近 7 天/逐时趋势图、按模型/会话分布,数据全部来自本机会话日志,零外部请求。

Manifest valid

★ 0

Unlicense

TypeScript

Aug 15, 2026

dsh plugin --profile web add dsh-usage-dashboard

by csiroqa

DeepSeek Harness(DSH)定时任务 + 状态监控插件:按 cron 时间表自动触发 Agent 执行任务,/status 与设置页仪表盘查看系统与 harness 综合状态。Scheduled tasks (cron) + status monitoring plugin for DeepSeek Harness.

Development & InfrastructureManifest valid

★ 3

MIT

TypeScript

Aug 23, 2026

dsh plugin --profile web add @dsh-external/dsh-schedule

by cglyvip

DeepSeek Harness 插件:模型请求失败导致本轮停止时,先在原模型重试数次,再沿兜底链循环切换并注入「继续」,免手动干预。

Terminal & ClientsManifest valid

★ 0

MIT

JavaScript

Oct 21, 2026

dsh plugin --profile web add dsh-auto-continue

by ZhangBo-cmd

DeepSeek Harness 插件:常驻显示高驰手表型号与运动天数,点击展开一句话点评与建议

UI & ExperienceManifest valid

★ 0

MIT

JavaScript

Sep 25, 2026

dsh plugin --profile web add dsh-coros-badge

by MutaLucem

DeepSeek Harness (DSH) 插件整合中心:动态发现、打标分类、重叠/兼容检测、一键启停与失效检测

Development & InfrastructureManifest valid

★ 10

MIT

JavaScript

Aug 16, 2026

dsh plugin --profile web add dsh-plugin-integration