dsh-ads架构全解析:Node端与浏览器端分离、cordis补丁与双入口注入的完整设计 【免费下载链接】dsh-ads把 DSH 变成 2005 年门户网站Parody ads, fake games, and popups for the DSH Web UI项目地址https://gitcode.com/gh_mirrors/ds/dsh-ads点击查看免费下载dsh-ads是把 DSHDeepSeek Harness变成 2005 年门户网站的 DSH 广告插件。它的架构精髓在于Node 端与浏览器端彻底分离一半跑在宿主服务器进程里、只负责发现与缓存另一半跑在浏览器里、只负责渲染广告两者之间只用两根 HTTP 路由传数据。看懂这套双入口 cordis 补丁的设计你就能明白一个 DSH 插件是如何被完整装进一个 profile 的。先看懂整体一个插件两个半身dsh-ads不是一坨代码而是两个能独立加载的入口各自只干自己擅长的事Node 端服务器半身运行在 DSH 的 Web 宿主进程里。它不画任何像素只向宿主的 HTTP 服务器注册两条路由并在后台搜索 GitHub 的dsh-plugintopic、做缓存与降级。浏览器端浏览器半身运行在用户的页面里。它注册三个 UI 插槽把浮动广告、推理中途门、对话内广告挂进会话并按语言热切换整套素材。两半之间的线只有一根——src/protocol.ts 里定义的两条路由和它们的数据结构。Node 端只干两件事注册两条路由 Node 端的入口是 src/index.ts构建产物是 lib/index.js。它对宿主只声明了一个能力注入export const inject [webServer]然后在apply()里通过ctx.webServer.register(...)把两条精确路由挂到宿主 Web 服务器上路由路径提供什么赞助清单/dsh-ads/registry.json带dsh-plugintopic 的社区插件列表已过滤、已截断星检测/dsh-ads/star-check.json宿主自己那个 GitHub 账号有没有 star 本插件它的几个设计点很值得学动态层才有 Node 端存在的意义。内置横幅是烤进浏览器包的根本不需要宿主只有给真实社区插件打广告这一层才需要宿主去搜 GitHub。多级降级链。清单发现走loadRegistry()先用认证过的ghCLI再用环境变量 token再退回 GitHub 匿名公共 API最后落到一份内置快照——保证离线、被限流、没凭据都不断广告。缓存 并发合并。清单默认缓存 30 分钟cacheMinutes同时用inflight把并发请求合并避免多个会话同时打开时各自 shell out 一次gh星检测则一旦看到 star 就进程内记住没看到不记方便先 star 再点重新检测。浏览器端三个插槽把广告挂进会话 浏览器端入口是 src/client/index.tsx产物 lib/client.js。它注入[slots, locale]在apply()里注册三种性质完全不同的挂载点插槽作用对应组件conversation.input.dock挂载浮动广告层 推理中途门零行内占位全部走 PortalAdDockEntrysettings.section设置面板里多一页广告非官方开关AdsSectionEntryconversation.chat.turnTail把广告插进对话正文而非浮在上面InlineAdEntry推理中途门流式回答时假装暂停 inference的彩蛋就挂在 dock 上广告开关则单独成页而不是藏在会消失的海报里一个关键细节这三个入口都从ctx.locale这个observable读语言所以切换 DSH「设置 → 语言」时当前页面立即换掉整套素材、文案和交互不用刷新。两者之间只走一根线protocol 路由与数据流 两半不共享任何运行内存唯一的契约是 src/protocol.tsREGISTRY_ROUTE /dsh-ads/registry.json、STAR_ROUTE /dsh-ads/star-check.jsonRegistryPayloadsource标记来自gh-cli / github-token / github-public / snapshot、StarCheckPayloadstarred / absent / unavailable浏览器端在 src/client/registry.ts 里每次页面加载只 fetch 一次模块级共享 Promise拿到清单后一份清单、两处投放侧栏 gutter 取轮播子集中文 8 个 / 英文 3 个对话内 feed 拿完整列表做公平轮转见 src/client/feed.ts最少被看到的先上。星检测同理浏览器先问 Node 路由unavailable就退回匿名翻页 stargazerssrc/client/star-check.ts。数据谁产生谁消费走哪条路由社区插件清单Node 端catalog.ts浏览器端registry.ts/dsh-ads/registry.json星状态Node 端star-host.ts浏览器端star-check.ts回退/dsh-ads/star-check.json降级是优雅且正确的浏览器端拿不到路由比如 TUI、ACP、headless 这种没有 Web 宿主的场景fetchPlugins()直接吞掉错误返回空列表——内置横幅照常只是少了动态那一层。cordis 补丁与双入口注入插件如何被装进 DSH 这部分是插件怎么被加载的关键答案在 package.json 与 cordis.patch.yml。1cordis 补丁bundle 级注入cordis.patch.yml 只有一小段作用是把本插件插入某个 profile 的layer 栈- insert: - id: dsh-ads name: nagi-ovo/dsh-ads它由package.json的dsh.bundle.patch指向。这就是cordis 补丁——在打包/装配阶段声明把dsh-ads这一层加进去。2双入口exports 级注入package.json的exports同时暴露了两个入口分别给两种运行环境入口指向跑在哪apply签名.lib/index.jsNode 宿主apply(ctx: HostContext, config?)./clientlib/client.js浏览器apply(ctx: ClientContext)3客户端额外注入dsh.clientdsh.client.platform: web标记这是 Web 客户端插件dsh.client.inject: [deepseek-ai/dsh-client-locale]再把语言包一起注入进浏览器端——这正是上面locale 热切换能用的前提。4构建怎么产出这两个入口tsdown.config.ts 定义了两个构建任务Node 半src/index.ts→lib/index.jsESM、platform: node、带.d.ts框架包cordis、schemastery保持neverBundle外部。浏览器半src/client/index.tsx→lib/client.jsCJS、platform: browser把平台模块表保持外部、其余含 base64 内联的素材全部打进单文件并用window.__ModuleLoader__.load({ id, factory })包一层供 DSH Web 壳的模块加载器在/plugins/id/client.js处执行。小结一张表看懂双半身 补丁 双入口维度Node 端浏览器端入口文件src/index.ts → lib/index.jssrc/client/index.tsx → lib/client.js导出格式ESMCJS__ModuleLoader__包装注入能力webServerslots、locale核心职责注册两条路由、发现与缓存三个插槽渲染广告、拉取路由缺失时降级无动态层内置广告照常无广告层TUI/ACP/headless 正确降级装配方式dsh.bundle.patch exports.dsh.client.* exports./client一句话记忆Node 端管从哪来发现 缓存浏览器端管长什么样渲染 热切换protocol.ts是它们之间唯一的线cordis.patch.yml负责把插件插进 profileexports的两个入口则分别交给服务器和浏览器去加载。想动手看代码建议从 src/protocol.ts 这条线入手再分头读两半的apply()最后对照 tsdown.config.ts 理解产物是怎么被分别生成的。赞分享【免费下载链接】dsh-ads把 DSH 变成 2005 年门户网站Parody ads, fake games, and popups for the DSH Web UI项目地址https://gitcode.com/gh_mirrors/ds/dsh-ads点击查看免费下载相关推荐深入解析 Firefox Send 前端应用层 app/双端入口、choo 路由与浏览器端加密架构深入解析 Firefox Send 前端应用层 app/双端入口、choo 路由与浏览器端加密架构 导读 本文以仓库 app/readme.md https:后端前端协程与Flow在MVVMLin中的应用响应式编程最佳实践协程与Flow在MVVMLin中的应用响应式编程最佳实践 MVVMLin是一个基于MVVM架构用KotlinRetrofit协程ViewbindingOCLP-Mod 补丁机制全解析OpenCore 设置、注入 Kext 与磁盘补丁的完整实现指南OCLP Mod 补丁机制全解析OpenCore 设置、注入 Kext 与磁盘补丁的完整实现指南 导读 本文以 OCLP Mod 仓库的官方补丁说明文档 d操作系统驱动开发固件上一篇awesome-macOS300 款 macOS 工具合集指南下一篇Fort Firewall 防火墙配置教程5分钟配出第一条拦截规则附排错清单创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考