Skip to content

Releases

v0.1.2

Choose a tag to compare

@PolinniZhong PolinniZhong released this 10 Oct 09:22

[0.1.2] - 2026-10-10

把 0.1.1 拆出去的三个右栏页签合回一个「AI 产品雷达」页签,三个视图在页内用分段控件切换。
这是 0.1.0 的形状,0.1.1 那次拆分被撤销了。

为什么撤:Knit 在右栏只有一个入口,用户在右栏看到这个插件占了三个位置,会以为它被拆成了三块
(实测「开始」引导页上并排出现 AI 产品雷达 · 变化 / · 关注源 / · 机会池 三张卡片)。
用户确认要的是 Knit 那个形状。

变更

入口与界面

  • 右侧栏回到一个「AI 产品雷达」页签(dsh-apradar:main):变化 / 关注源 / 机会池在页内用分段控件切换。
  • 新建页签的引导页回到一张卡片。会话头部入口按钮不变,打开的就是这个页签。

跨视图跳转

  • 变化详情的「打开机会详情 ›」回到在同一个页签里切到机会池视图并定位到那条机会;
    反方向同理。
  • 「返回」回到来路上那一条详情(来路栈),不再有「页签之间没有来路栈」这个限制 ——
    0.1.1 说明里那条在本版不适用。

工程

  • 335 项离线测试全通过(0.1.1 是 336 项)。撤回 0.1.1 新增的「三个页签各自注册」与
    openTab() 断言,改回「一个页签 + 三视图分段切换」的断言。
  • 实现方式是 git revert 6328d78(即 0.1.1 那一次提交),版本号另起;lib/ 重新构建。

说明

  • 本版已在真实宿主上实跑过:右栏我们的页签数量 = 1、页内分段控件 3 个(都是 button)、
    三个视图都切得动、机会详情 →「打开变化详情」→「返回」回到机会详情(来路栈生效)、
    面板宽 647px 与强制 320px 下横向溢出都是 0、pageErrors 为空。
    命令与原始数字见 TECH-SPIKE.md §6.14.6。
  • 若从 0.1.1 降级回本版:改的是客户端,必须重新 npm run build 再 npm pack。

v0.1.1 · 三个视图改成右侧栏三个独立页签

Choose a tag to compare

@PolinniZhong PolinniZhong released this 10 Oct 08:42

[0.1.1] - 2026-10-10

把三个视图从「一个页签 + 页内分段控件」改成三个独立的右侧栏页签。功能一个没少,
改的是入口的形状 —— 之前跨视图跳转会把你正在看的那一页换掉,现在不会了。

变更

入口与界面

  • 右侧栏由一个「AI 产品雷达」页签改为三个页签:变化(apradar:inbox)、
    关注源(apradar:sources)、机会池(apradar:opps)。三者可分别打开、关闭、并排。
  • 页内的分段控件(收件箱 / 关注源 / 机会池)已移除:一个页签 = 一个视图,正文直接是内容区。
  • 新建页签的引导页给出三张卡片(变化 / 关注源 / 机会池),点哪张开哪个。
  • 会话头部入口按钮保留,打开的是「变化」页签。

跨视图跳转

  • 变化详情里的「打开机会详情 ›」现在是打开机会池页签并带上那条机会的真实 id,
    而不是把当前页签的内容替换掉:「变化」页签里的搜索词、筛选、分页与滚动位置都原地保留。
  • 反方向同理:机会详情里的「打开变化详情 ›」打开「变化」页签并定位到那条变化。
  • 右栏页签之间没有来路栈:在跳过去的那个页签里点「返回」,回到的是该页签自己的列表 ——
    这是页签形态的固有语义,不是缺陷(原来那个视图就在旁边那个页签里等着)。

工程

  • 336 项离线测试(0.1.0 是 335 项)。新增的一条钉住「三个页签各自注册」:
    id / kind 互不相同、各带一张引导卡片、正文与标题席位的 key 用该页签自己的 id。
  • test/detail.test.mjs 里原本"点页内分段控件切视图"的步骤改为直接挂载目标页签的正文;
    跨视图跳转的断言从"内容被替换"改为断言 openTab(kind, {params:{detailId}, revealIfOpened:true})。

说明

  • 本版尚未在真实宿主上实跑过(0.1.0 的三路径 CDP 实测记录的仍是单页签形态)。
    离线测试证明的是注册形状、请求路径、状态机与滚动恢复;真实宿主上的页签并排、窄面板下的
    页签条换行等属于布局事实,test/client-harness.mjs 没有 CSS 引擎,证明不了。
  • 若从 0.1.0 升级:改的是客户端,必须重新 npm run build 再 npm pack;安装方式从
    link: 换成 tarball 时还必须重启宿主(宿主启动时缓存客户端产物路径)。
  • 其余边界与 0.1.0 相同,见下方 0.1.0 节与 TECH-SPIKE.md §7。

v0.1.0

Choose a tag to compare

@PolinniZhong PolinniZhong released this 10 Oct 02:31

[0.1.0] - 2026-10-10

第一个可发布的版本。这是一个能真实抓取、真实比较、真实留下证据的工具 ——
界面上不会出现模拟数据、假刷新、假的「已保存」。

新增

入口与界面

  • 官方右侧栏新增「AI 产品雷达」页签,只在右侧边栏渲染,不新增额外的 DSH 侧栏页签。
  • 三个视图:变化收件箱 / 关注源管理 / 产品机会池。
  • 列表与详情都在页面内部切换;从列表进详情后返回,搜索词、筛选、排序、分页与滚动位置都会恢复。
  • 统一空态 / 加载态 / 失败态 / 保存态;窄侧栏与宽屏都不出现横向溢出;浅深色跟随 DSH 主题变量。

抓取与解析

  • 5 类适配器:github_releases(api 优先双端点)、github_repo、npm_package、rss_atom、html_static。
  • 9 条预置模板;「试抓一次」可以立刻看到真实结果,而不是一句「已完成」。
  • 所有对外请求走 DSH 已核验的 ctx.web.fetch(),不绕过其 URL 校验、SSRF 公有地址白名单、超时与响应体上限。

变化与证据

  • 规范化 → 指纹去重 → 差异检测,幂等:内容没变时不产生假变化。
  • 快照保留最近 20 份,区分「全文」与「摘录」;差异建立在摘录快照上时会明确说明。
  • 官方发布时间拿不到时显示「未能获取」,不编造时间。
  • 明确区分三种情况:抓取失败 / 抓取成功但没有变化 / 这个来源还没有快照 —— 三者不会互相冒充。
  • 来源详情显示上次抓取状态与真实错误原因、连续失败次数、自动停用状态及原因。

机会池

  • 可以从任意一条变化一键加入机会池,也可以手工创建(手工创建的会明示「没有关联任何一次抓取记录」)。
  • 关联关系只按真实 ID 判定;关联对象被清理后如实标注,不按标题相同推断关联。
  • 记录产品判断、待验证问题与下一步;保存失败时保留已输入的内容,只有服务端确认写入后才显示「已保存」。
  • 跨对象跳转返回时回到来路(从变化跳到机会,返回到那条变化)。
  • 导出 Markdown:事实 / 推测分区 + 证据链,来自公网的内容按不可信处理并转义。

存储与调度

  • 四个域的声明式存储,跨重启持久化。
  • 定时刷新 15 分钟 – 24 小时;连续 3 次失败自动停用并说明原因。

工程

  • 零运行时依赖。
  • 客户端无转译(window.__ModuleLoader__.load({...}),禁止 JSX、禁止打包器、只 require('react'));
    npm run build 把 src/host/** 逐字节复制进 lib/ 并组装 lib/client.js。
  • 335 项离线测试(Node 内建 node --test,不引测试框架)。测试绝不真出网 —— 走内存替身网关。

说明

  • 卸载不会清理 $DSH_HOME/storages/ai_product_radar_*。这是刻意的保守选择:
    宁可留下数据,也不要在卸载时误删用户的研究记录。要彻底清除请手动删除。
  • 采集、去重、差异计算与导出全部不调用任何模型。
  • 本插件不读取项目代码、不访问登录态页面、不自动修改任何项目;导出的 Markdown 由浏览器保存,不经过任何后端写文件。
  • 已知边界与未验证项见 TECH-SPIKE.md(§6.14 真实宿主三路径实跑、§7 已知边界),
    DSH 版本与 API 依据见 COMPATIBILITY.md。