Repository navigation
Releases
Releases · PolinniZhong/dsh-apradar
v0.1.2
[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 · 三个视图改成右侧栏三个独立页签
[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
[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。