Releases: setube/stackprism
Releases · setube/stackprism
StackPrism v1.3.70
新增
- 多路径技术版本号识别 + popup 渲染:
- globals 命中后从
window.<lib>.VERSION/ 自定义 path 抽(jQuery 走jQuery.fn.jquery、lit-html 走litHtmlVersions数组、core-js 走__core-js_shared__.versions[].version) - selectors 命中后从 DOM 元素属性抽(styled-components 走
<style data-styled-version>) - bundle license 注释:15 个主流库手写
versionPatterncapture group,其余 bundle-license 规则自动从 rule.name 推 token 走通用启发(<Name>\s+v?X.Y.Z/<npm>@X.Y.Z) - 资源 URL 命中:cdnjs / unpkg / 自托管命名(
@scope/lib@X.Y.Z、/lib/X.Y.Z/、/lib-X.Y.Z.min.js) - 响应头
Server: nginx/1.29.8、X-Powered-By: PHP/8.2.10抽首段版本号
- globals 命中后从
- TechChip 图标四档 fallback:本地
skills→cdn.simpleicons.org→ 官网/favicon.ico→ 官网 HTML 解析link[rel="icon"]→link[rel="apple-touch-icon"];同 origin 进程级 Promise 缓存,只 fetch 一次 HTML - 新规则:
- Reka UI(Vue 版 Radix 后继),靠
useGraceArea-/useForwardExpose-/useTypeahead-/useFocusGuards-等 Reka 独家 hook chunk 命名识别 - shadcn-vue,组合判定(
minPatternMatches: 5),要求 5+ 个 shadcn 标志组件 SFC chunk 同时出现才命中 - Open Graph(
meta[property^="og:"])、Priority Hints([fetchpriority]) alt-svc响应头通告 HTTP/3(中置信度,跟performance.getEntries()实际协商出来的 HTTP/3 合并显示)- AWS 总品牌(响应头特征覆盖 CloudFront / S3 / API Gateway / ELB),手写
__hints避开预筛
- Reka UI(Vue 版 Radix 后继),靠
- 新规则 schema 字段:
versionPattern/versionFrom/versionFromAttribute/minPatternMatches/__hints显式声明
修复
- popup 收不到版本号:
popup-cache三处清洗函数(cleanTechnologyRecords/mergeDisplayTechnologyRecords/cleanPopupTechnology)都按白名单挑字段,version一路被剥掉,现已贯穿 Server: nginx, IIS/10.0这种伪造串把 IIS 的10.0错挂给 Nginx:attachServerVersion改成只看split(',')[0]首段- 版本号比较从字典序改 semver 数字段(
extractGlobalVersion数组排序、merge.ts/popup-cache.ts合并选具体版本),3.10.0不再被3.9.0反超 header规则的url字段被tech-links.json同名 key 覆盖:applyHeaderRuleList/applyHeaderValueRuleList/ page-detectordetectJsonRuleList现在透传rule.url到 tech 对象- AWS 规则
__hints自动算出来全是边缘字段(remapped-x-amzn-requestid等),命中率高的cloudfront/x-amz-cf-等被预筛挡掉:手写__hints覆盖
收紧误识别
- Teleport 不再被 Vue 内置
<Teleport>组件 SFC chunk 误命中,patterns 改成必须有goteleport.com/*.teleport.sh/Teleport Cluster/teleport-icon这类强证据 - Reka UI 弱信号 chunk 只保留 Reka 独家 hook 命名,剔除
PopperContent-/FocusScope-/RovingFocusGroup-等跨 Radix 生态的通用 chunk 名 - React DOM 合并到 React 规则(Web 上 React 必带 React DOM,单列没多余信息)
图标补丁
- 新增 turbo / amazoncloudfront / alibabacloud / priorityhints 内置 SVG
- AWS 系列(CloudFront、S3、Bedrock、Amplify、Textract、Rekognition、Global Accelerator)走
BRAND_FIRST_WORD_ALIASES,首词AWS → Amazon Web Services统一主 logo - Alibaba 系列(Cloud CDN、Cloud OSS、ARMS、Aplus、Alimama、DashScope、SMS、Captcha)同上,首词
Alibaba → Alibaba Cloud - 显式
ICON_NAME_ALIASES补:Hotwire Turbo → Turbo、shadcn-vue → shadcn-ui、Tencent EdgeOne → EdgeOne - LINUX DO 登录改名(原 linux.do 登录,小写不出品牌 logo)
StackPrism v1.3.60
新增
- 77 条海外 OAuth 第三方登录规则:linux.do、Instagram、Reddit、TikTok、Yahoo、Amazon LWA、PayPal、Stripe Connect、Steam、Twitch、Spotify、Salesforce、HubSpot、Atlassian、Notion、Figma、Clerk、WorkOS、Supabase 等海外主流登录,以及亚 / 欧 / 俄 / 法 / 东南亚 / 非 / 北美 / 南美 / 大洋洲的政府国民身份 SSO
- VS Code for Web 识别(vscode.dev / github.dev / Codespaces),与底层 Monaco Editor 并列出现
- bundle 扫描提取包体内嵌 OAuth URL:对 SPA 把 OAuth 回调写在 bundle 里的场景(如 linux.do / GitHub / Google 登录在 new-api 这类站),从 JS body 用正则提取 OAuth
/authorize形态的 URL 走第三方登录规则匹配 - 原始线索面板加下载按钮,空 context 下载完整 raw、选了 source 下载 scoped JSON,文件名带 host / tech / source / 时间戳
- 补齐 379 条 tech-links 链接(云存储 / OCR / 邮件验证 / IP 地理 / AI API / PDF / Vector DB / Web3 / CMS / Online IDE / 中文支付聚合等)+ build-scripts/check-tech-links.mjs 对账脚本接到
pnpm run check:links
修复
- 收紧前端框架 / UI / 扩展库 / 构建工具的过宽 keyword:Ionic、Preact、Polymer、Mithril、Svelte 改为资源路径锚定;Knockout、Ext JS、Ractive、CanJS、Rollup、esbuild、Moment、Video.js、daisyUI 同样收紧;daisyUI 只保留独家主题词不再匹配通用 light/dark
- WP 主题与 Confluence 强制路径锚定:Astra / GeneratePress / OceanWP / Blocksy 要求
/wp-content/themes/<name>/资源路径,Confluence 改用 generator meta 与真实 Confluence 路径特征 - Adobe Analytics 去掉
window.s误识 global,改成真正独有的AppMeasurement/s_account - 兜底前端库跨类目去重:
merge.ts的suppressFrontendFallbackDuplicates扩展到所有类目(避免 filestack 等 SaaS 被兜底重复识别);genericNames 加入 search / sdk / analytics / ms.* / tas-client / ethicalads - 动态 feed 检测排除 oembed,不再把 stackblitz / jsbin 的 oembed 端点误识别为 JSON Feed
性能与可靠性
- per-tab 写锁串行化 detection / dynamic-snapshot / bundle-license / webRequest / message-router 的 read-modify-write 段,修 popup 检测数 7→13→3→7 来回闪烁的回落问题
popup-cache.mergePageDetectionRecord:同一 URL 下 page detection 重跑时合并历史检测,不让数量临时回落- bundle 扫描 budget 调优(2MB→4MB)+ 3 并发批次 + fetch
priority: 'low'+SCAN_DELAY_MS1400→600ms,配合 content-observer 的SEND_DELAY、dynamic-snapshot 的DYNAMIC_SNAPSHOT_PROCESS_DELAY同步降到 400ms,端到端从页面加载到 popup 完整识别从 ~8s 压到 ~2.4s
StackPrism v1.3.50
新增
- HTTP/2、HTTP/3 协议识别(先用注入脚本读 nextHopProtocol,后改走
webRequest.statusLine,跨域资源也能拿到准确版本号) - 响应头识别 Joomla(
x-content-encoded-by/x-powered-cms)与 Varnish(x-varnish:\s*\d,要求 XID 数字格式) - 反向代理与代理网关响应头匹配规则
- 赞助清单 SPONSORS.md + GitHub Sponsors 入口
.github/FUNDING.yml
修复
- 收紧前端框架 keyword:Ionic、Preact、Polymer、Mithril、Svelte 等从裸单词改为资源路径锚定或 scoped 包路径,避免在 codesandbox / jsbin / replit / vscode.dev 等非命中站点误识别
- 搜索 worker 兜底:
search.<hash>.min.js等 mkdocs / docusaurus / vitepress 文档站自带文件不再被误识别为「疑似前端库: search」 - Server / X-Powered-By 字段被反代叠加或伪造时(如
openresty, Microsoft-IIS/10.0),evidence 只显示匹配命中的首段 - 一批响应头与规则误判修正:CSP / Permissions-Policy / Report-To / NEL 等允许列表头从扫描中剔除、Framework7 去掉裸
f7-类名、Play Framework 收紧到真特征、Telegram CDN 新增、Telegram / Twitter / X 等域名自指抑制 - scoped 原始线索面板统一带响应头,spoof 场景排查时方便交叉对照
- tech-links 去重 41 个重复键
工程
- 协议名简化为 CC BY-NC-SA 4.0
StackPrism v1.3.40
修复
- 收紧响应头身份字段识别:CSP / Permissions-Policy / Report-To / NEL 等允许列表性质的响应头从头部 blob 扫描中剔除,避免 CSP 列表里的 googleusercontent.com / cloudflare 等域名被反向推断成站点真的在用对应 CDN。
- 收紧伪造响应头降级范围:检测到 ≥4 种主体身份字段(server / x-aspnet-* / x-drupal-* / x-powered-cms / x-varnish 等)同时出现,或 server 拼了多个产品时,只对涉及的派生类目降级,不再连带打掉合法识别。
- 收紧 Plex 与 Powered-by 兜底:Plex 必须命中 plex.tv / /plex/ / plex-media-server 才识别;Nuxt / Next.js / Gatsby / SvelteKit 等 powered-by 兜底归到「前端框架」类目而不是泛 SaaS。
- 收紧 D3.js 匹配:原
d3(?:\.v\d+)?(?:\.min)?\.js不带路径锚定,会被index-3ff0a055461094d3.js这类带 d3 后缀的内容哈希误命中;改为(?:^|/)d3...强制路径开头或路径分隔。 - 拆分 GitHub 资源识别:原「GitHub Pages」「GitHub Assets」把 github.io / githubusercontent / githubassets 三种完全不同的资源混在一起,导致 github.com/owner/repo 普通仓库页被误标 GitHub Pages。拆成「GitHub Pages」「GitHub Assets」「GitHub Raw Content」三条独立规则。
新增
- 自指抑制名单:身在 github.com / x.com / npmmirror.com / npm / PyPI / Stack Overflow / Twitter / Facebook / YouTube / Bilibili / 知乎 / 百度 等 50+ 主流站点时,自动不再把同名服务列为「使用的技术」,避免 URL 栏已经显示的内容再次出现在识别结果里。
- 自指抑制改走数据:按项目「规则即数据」约定,从代码常量挪到 public/rules/self-host-suppress.json 并接入 rules/index.json 统一加载链路。新增条目改 JSON 即可,不用碰代码。
- 完善 HTTPS / Content Security Policy 在 tech-links.json 中的官网映射,识别结果可点击跳官方文档。
规则补充
- 弹窗通知、浏览器开发工具相关本地资源匹配规则。
- 新增规则继续限定明确包目录、专属资源路径与发行文件名,减少页面文本与短词带来的误判。
StackPrism v1.3.30
规则补充
- 输入组件:文本框、富文本输入、自动完成、文本域等控件的本地资源识别
- 无障碍组件:可访问性焦点环、键盘陷阱、屏幕阅读器辅助等组件的发行文件名匹配
- 图标库:主流图标字体、SVG sprite、单文件 SVG 包路径与 scoped 包路径识别
- 日期组件:日期、时间、日历、区间选择组件的专属资源识别
- 表格组件:数据表、可编辑表格、虚拟滚动表格的本地资源与包目录识别
- 交互组件:抽屉、弹层、Tooltip、上下文菜单等通用交互组件
- 地图组件 / 地图与全景库:Leaflet、Maplibre、Cesium、Pannellum 等地理与全景渲染
- 轮播组件:Swiper、Splide、Glide 等轮播相关发行文件
- 接口文档库:Swagger UI、Redoc、Stoplight 等接口文档站匹配
写法约定
- 新增规则继续限定明确包目录、专属资源路径、scoped 包路径与发行文件名,避免单词、通用 CSS 类名等过宽匹配带来的页面正文误判。
StackPrism v1.3.20
规则补充
- 前端框架与 UI 框架:补足主流框架的本地资源识别覆盖
- 数据与状态管理库:Redux、Zustand、Pinia、Jotai、Recoil 等发行文件与 scoped 包识别
- 框架与组件库:多个组件库的资源与 monorepo 包路径
- 媒体与表单库:视频、音频、文件上传、表单校验、富文本编辑相关库
- 交互与动效库 / 交互基础库:动画、滚动、手势、拖拽相关库的本地资源识别
- 编辑器与国际化库:代码编辑器、富文本编辑器、Markdown 编辑器与 i18n 工具链
- 文档与编码库:文档生成、PDF / Office 文档处理、文本编码相关库
- 实时通信库:WebSocket、SSE、WebRTC 客户端的发行文件识别
- 安全编码库:加密、签名、编码相关 JavaScript 库
写法约定
- 新增规则优先使用明确包目录、专属发行文件名与作用域包路径,减少短词与页面文本带来的误判风险。
StackPrism v1.3.10
修复
- 通过 CSS 变量前缀区分 UnoCSS 与 Tailwind CSS:先扫 :root / body 的 --un- 与 --tw- 前缀,再扫同源 stylesheet 的 cssRules 文本兜底,命中 --un- 高置信判 UnoCSS、--tw- 高置信判 Tailwind,都没有再回退到 atomic 类名风格中置信 Tailwind,解决 imba97.com 等 UnoCSS 站点被误报为 Tailwind 的 issue #4。
规则
- 大幅扩充本地前端库资源匹配,覆盖表单、图表、媒体、编辑器、地图、上传、国际化、状态管理、React / Vue 生态、动画、图标、加密与实用工具库。
- 补充部分监控埋点、前端路由状态、支付程序和资源链接映射。
- 新增规则继续限定明确包名、目录名、作用域包或专属发行文件,减少短词和泛文件名误判。
其他
- 新增 sass-embedded 依赖,全部 vue 文件 style 块切到 lang="scss"。
- Popup / Settings / Help / Select / RippleButton 的样式从平铺 CSS 改写为 SCSS 嵌套形式(父-子用 & 引用、状态变体下嵌、行注释 // 替代 /* */),视觉与行为完全一致。
StackPrism v1.3.0
新增
- Input / Textarea 组件:hover 框线变 accent,有内容自动显示 X 清除按钮,X mousedown.prevent 触发清空并保持焦点;search input 隐藏浏览器原生 X 改用统一外观。Popup 搜索框 + Settings 全部 input / textarea(4 input + 5 textarea)替换为组件。
- Checkbox 组件:SVG path 加 stroke-dasharray 24 → 0 的 0.24s cubic-bezier 手绘勾画动画,从左中经过下方拐点画到右上。支持 boolean v-model 与 array v-model + :value 两种模式。Settings 2 处 + Popup 3 处共 5 个原生 checkbox 全部替换。
- Select 组件加 X 清除按钮:clearable prop 默认 true,与下拉箭头紧贴。
- 资源 / 响应头面板:popup summary 区域三个数字块改用 RippleButton,资源、响应头可点击展开列表;点击"技术"切回重点视图。buildHeaderRecord 输出 allHeaders(经 sanitize 处理 set-cookie),响应头面板列出完整 KV。
修复
- popup 分类过滤 X 无反应:categoryFilterValue setter 之前过滤掉空字符串,改成空值回到 FOCUS_CATEGORY。
- Select 选项后下拉立刻重新打开:sp-fade leave 期间 mouseup 落到下方 trigger 误触发,加 250ms 抑制窗口堵死。
- Select 清除按钮位置错位:sp-select-value flex 撑满,X 紧贴 chevron 不再被推到中间。
- Select creatable 模式下点 chevron 被 onClickOutside 误判为外部点击立即关闭,改用整层 selectRef 容器判断。
- 刷新后 loading 图标永久存在:scheduleCachedResultRefresh 的 setTimeout 回调入口立即把 cacheRefreshTimer 清零,attempt 用完不再 schedule 时 spinner 真正消失。
- 识别纠正按钮:跳转 GitHub issue 前把完整原始线索复制到剪贴板,issue body 引导用户 Ctrl+V 粘贴。
- 无 URL 的技术不再显示成可点击链接样式:buildPopupResult 改 async 通过 attachTechnologyLinks 给每个 tech 预填 URL,空 URL 显示纯文本。
- CDN 规则:server: TencentEdgeOne 不再被 Tencent Cloud CDN 裸 tencent 模式误命中;UCloud CDN 加 hostname 边界;已识别具体 CDN 时 popup display 抑制"自定义 / 未知 CDN"低置信兜底。
UX
- 弹窗 status 改为与 settings 一致的悬浮 msg 浮动卡片,3 秒自动消失;复制 / 刷新 / 加载完成给 ok 提示,失败给 error 提示。
- 顶部"响应头"指标后跟随转圈 Loader2 图标表示后台检测进行中。
- 源代码搜索 / 原始线索展开时加遮罩动画,点击遮罩关闭面板。
StackPrism v1.2.90
修复
- 切断"动态快照 → 全量识别 → content-observer 重启 → 新动态快照"自反馈死循环,每次循环让主线程被同步阻塞 1.5-2 秒、page-detector 被反复注入造成持续卡顿。
- 全量识别入口加 30 秒节流,SPA 反复 fire loading/complete 序列时只跑一次。
- 借助 webNavigation.onCommitted 区分真 navigation 与 SPA 假切换:F5 刷新、点击链接、地址栏输入清节流立即重检;SPA 内部 history.pushState/replaceState 保留节流不重跑。
- detectPageTechnologies 改 async 分片,5 个检测块之间 await setTimeout(0) 让出主线程,避免单次 1.5+ 秒同步阻塞导致刷新后滚动条卡死、内容掉帧。
- 修复 page-detector 因 PHP 运行时派生 const 位于函数 return 之后触发 TDZ、导致页面识别只剩响应头一条命中的回归。
- 修复跨站点切换残留旧域名动态快照污染新页面结果。
- 修复响应头回退合并、兜底识别去重、前端库别名归并多处逻辑漏洞。
性能
- 动态监控热路径:跳过容器匹配合并为单条正则;移除批处理队列 O(N²) 祖先检查;待处理节点超 200 立即进入冷却;burst 阈值 300→150;弃用 requestIdleCallback(高负载页拖到 1 秒 timeout 反而造更大长任务)改回 200ms setTimeout。
- MutationObserver 冷却时真正 disconnect、启动 30 秒后强制 disconnect 不再重连,浏览器底层停止跨 isolated world 派发 mutation records。
- 监听目标缩到 body 去掉 head 子树噪音,SPA 路由切换补一次 body 扫描保留 markers 识别能力。
- 弹窗首屏渲染:预计算缓存结果、拆分轻量缓存。
新增
- 动态监控可选性能埋点:localStorage 开启 sp_observer_debug 后每 3 秒在页面 console 输出 mutation-callback / flush / perf-observer / send-snapshot 的 count/avg/max,page-detector 注入耗时与命中数同时输出,便于线上诊断。
- 新增 webNavigation 权限,只用于监听 main frame 真 navigation,不读取历史、不监听子 frame。
规则
- 收紧规则匹配条件并补充识别兜底,新增后端框架与前端库识别。
- 扩展 PHP 运行时派生:检测到 ThinkPHP、Discuz!、Laravel、Symfony 等三十余个 PHP 系网站程序或后端框架时自动推断 PHP 后端运行时。
其他
- 简化插件展示名称。
StackPrism v1.2.80
修复
- 修复 page-detector 注入脚本因 PHP 运行时派生规则的 const 声明位于函数 return 之后触发 TDZ 报错,导致页面识别只剩响应头一条命中的回归。
- 修复跨站点切换时残留的旧域名动态快照污染新页面识别结果。
- 修正响应头回退合并、兜底识别去重、前端库别名归并的多处逻辑漏洞。
性能
- 削减 content-observer 动态监控热路径:合并跳过容器匹配为单条正则;移除批处理队列的 O(N²) 祖先检查;待处理节点超 200 立即进入冷却;burst 阈值 300→150;放弃 requestIdleCallback(高负载页拖到 1 秒 timeout 反而造成更大长任务),改回 200ms setTimeout 小步快跑。
- 缩减 SUBTREE_SELECTOR 命中面,去掉过宽的 [id], [class] 选择器。
- 弹窗首屏渲染:预计算缓存结果、拆分轻量缓存。
- 动态监控后台处理改批量化,减少向 service worker 的频繁通信。
新增
- 动态监控加入可选性能埋点:在控制台
localStorage.setItem('__sp_observer_debug__','1')后刷新页面即可启用,通过performance.getEntriesByName('sp:mutation-flush')/sp:mutation-callback/sp:perf-observer/sp:send-snapshot可量化各热点耗时,默认关闭无运行成本。
规则
- 收紧规则匹配条件并补充识别兜底,新增后端框架与前端库识别。
- 扩展 PHP 运行时派生:当检测到 ThinkPHP、Discuz!、Laravel、Symfony 等三十余个 PHP 系网站程序或后端框架时,自动推断 PHP 后端运行时。
其他
- 简化插件展示名称。