npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@uppercrusteve/dsh-converge

v0.1.0

Published

科研收敛驾驶舱 (developer preview): hard-gated research convergence loop for DSH agents - 7 conv_* tools + host session projection + turn-tail card (conversation.chat.turnTail) + cockpit strip (conversation.input.dock) + settings section. 零 npm 依赖 (node builtins

Readme

dsh-converge — 科研收敛驾驶舱 (developer preview)

npm 包名是 scoped 的 @uppercrusteve/dsh-converge;仓库在 github.com/uppercrusteve/dsh-converge。下文所有命令用全名。

给 DSH 智能体装一副「研究收敛仪表盘」:把一次研究/综述任务拆成研究树,随做随记证据与缺口, 收尾前必须过三道硬门(G1 引用可解析 / G2 每个已作答子问题有结论 / G3 收尾正文非空)且总分 ≥0.85 才放行;不达标时回合末最多注入两次带「缺口 + 最短补法」的提醒。全部控制面以私有会话 事件(converge/*)事件溯源落盘,不进模型可见历史;宿主侧纯函数投影把同一份状态同时供给 浏览器端三块 UI(回合尾卡 / 输入坞驾驶舱条 / 设置分节)与 convergeApi RPC。零 npm 依赖。

conv_plan  施氮梯度对旱地小麦产量的影响 → sq1/sq2/sq3(每问必填支持槽+反例槽)
conv_attach_evidence ×N → conv_score 0.62 …缺口点名 + 最短补法… → conv_conclude 1.00 放行

安装

# GitHub 仓库(推荐 developer preview 形态;本包无构建脚本,pnpm 不需要 allowBuilds 放行,已实测)
dsh plugin --profile web add github:uppercrusteve/dsh-converge
# 锁 tag(发布推荐写法,可复现;pnpm 会把 #v0.1.0 归一成 commit 写进 lockfile)
dsh plugin --profile web add github:uppercrusteve/dsh-converge#v0.1.0
# npm(当前只发 preview tag,必须显式带 tag;不带 tag 会解析不到)
dsh plugin --profile web add @uppercrusteve/dsh-converge@preview
# 本地调试(不安装,直接 patch 挂载;name 必须 file:/// URL,裸 D:\ 会被当协议炸掉整棵插件树)
node "<dsh bin>" --profile web --patch "examples/converge.dev-fileurl.patch.yml" --port 18794 --no-open

安装形态验证状态(做到哪写到哪):file: 真装 + scoped bundle 路由已实测——profile deps/bundles 出现 @uppercrusteve/dsh-converge,GET /plugins/@uppercrusteve/dsh-converge/client.js 返回 200 且与磁盘逐字节一致(sha256 0A96…166EEE),BOOT 四事件 outcome=ok(typesTotal=9); remove 后 dep/bundles 行/node_modules 三清除,cleanboot bundle 404、index 200、无树错误 (证据 tests/runs/RELEASE.audit.log,REL.add/REL.gate/REL.rm/REL.cb,13 路径零污染)。 github: 已实测(github:owner/repo 与 #v0.1.0 两形态,含 BOOT 四件套与 bundle 字节一致, 逐条判定见发布工作区 notes/RELEASE.md 的 G0–G2——工作区级文件,不在包内;包内 notes/ 只有 CORE-ISSUE.md 与 pack-dryrun-scoped.txt):deps/bundles/node_modules 三处出现 scoped 名, remove 后三清除、cleanboot bundle 404 / index 200 / 无树错误 (REL.gh / REL.ghtag / REL.cb-gh,13 路径零污染)。 一处 Windows 陷阱须知:git 安装走 git clone 检出,若客户端 core.autocrlf=true,仓库内 LF 的 lib/client.js 会以 CRLF 落进 node_modules(20501→20847 B);宿主 serve 出的字节与包内文件仍逐字节 一致(sha256 1908…22F6),且与 file:/npm 形态同一内容——CRLF→LF 归一化后 sha256 仍为 0A96…166EEE, 只是行尾差异,不影响语法与运行。要拿到与仓库 blob 逐字节一致的检出,本机设 git config --global core.autocrlf false(或input),或在本包加 .gitattributes 后由发布者定稿。 npm @preview 形态仍待发包后回测。

add 后 profile 的 dsh.profile.bundles 出现 @uppercrusteve/dsh-converge,宿主按 package.json 的 dsh.bundle.patch(= examples/converge.bundle.patch.yml,包名形态 insert 行)自动装载;包声明 dsh.client.platform=="web" + exports["./client"],浏览器 bundle 走 GET /plugins/@uppercrusteve/dsh-converge/client.js(P3b 实证契约:包名可解析 才发 bundle,file:/// 名 404;scoped 名的 @// 在宿主路由里按整段 pathname 匹配,已实测)。

四个工具面 · 七个 conv_* 工具

| 面 | 工具 | 一句话 | |---|---|---| | 立树 | conv_plan | 把研究问题拆成子问题树,每个子问题自带必填证据槽(支持+反例)。 | | 立树 | conv_add_subquestion | 中途追加子问题;抬 treeVersion,旧版本证据自动隔离不再计分。 | | 记证据 | conv_attach_evidence | 挂一条 doi/pmid/arXiv/url/zotero 引用到指定槽位,stance=counter 自动落反例槽;同 ref 重挂去重不虚增。 | | 记证据 | conv_mark_gap | 明示「这条补不动」的缺口(白名单 code),只认账不加分,可豁免引用待核验。 | | 打分 | conv_score | 实时四维分(覆盖 0.35/反例 0.25/引用完整 0.25/综述结论 0.15)+ 缺口点名 + 最短补法。 | | 打分 | conv_status | 查看当前树/槽位/证据/缺口全景。 | | 收尾 | conv_conclude | 申请收尾:三门一分全过才放行;补不动用 force+residualGaps 带缺口收尾(记 converged-with-gaps,不自称收敛)。 |

三块界面(P4 浏览器实点截图)

  • 首页 S1 宿主首页:插件装载无横幅(HARNESS Failed to load plugins 消失)。
  • 会话页 S2 真实聊天回合:回合尾卡(CONVERGE 100% tv1·e6·v3/3 + nextBestAction)与输入坞驾驶舱条(收敛 CONVERGE 100% 已收敛)同时渲染。
  • 设置页 S3 「收敛驾驶舱」分节:阈值/权重只读展示 + notify.enabled 开关(读写走 convergeApi RPC,落盘 converge/setting 会话事件)。
  • 开关翻转 S3b 勾选翻转后的同一分节(RPC 写入 + 事件落盘后回读)。

上面四个相对链接指向 docs/,与 src/、lib/、examples/、notes/ 同在 package.json 的 files[] 白名单里——npm pack 的 tarball 视角逐个可达(README 里出现的包内路径只有 docs/*、examples/*、notes/* 三类,tests/ 见文末说明)。

四张图已做脱敏裁切(发布前必查项):切掉左侧会话栏、顶部会话标题行与底部 token 统计条, 并把输入框右下角的模型名徽标用同区域背景覆掉;裁后尺寸 S1/S2 为 1058x590、S3/S3b 为 844x590(原图 1418x746,未裁原件留在仓库 notes/docs-uncropped/,不在 files[] 里)。 复核口径:会话标题、模型名、token 统计这三类信息在包内四图中均不可见。

宿主 ≥0.1.1-rc.2 把 conversation.chat.turnTail 声明为 chain 槽(注册必须带 options.select,第一个非 null 当选)——本包已按此注册,勿在旧 rc 上混用旧 bundle。

事件类型注册面契约(对 core 的依赖声明)

宿主持久化读侧用 KNOWN_SESSION_EVENT_TYPES 词表裁决会话可否装载:不在表内且无 ignorable 标记 → SessionFormatUnsupportedError(装载即拒)。本插件 apply 期把 9 个 类型 (converge/plan·evidence·gap·verdict·score·conclude·decision·setting·ping)运行时 .add() 进该活 Set:探径 argv1 → argvN → execPath → import.meta → 已知安装根;同实例探针 = Set 必须已含本 build 词表条目(探针类型 goal/change),否则视为第二份拷贝拒注。 失败降级语义:注册是纯增量——任何一步失败只 ctx.logger.warn,本会话功能无损,仅带 converge/* 的历史会话 resume 受限。日志事件名:event-types-register (outcome=ok|degraded,含 mode/resolvedFrom/missingBefore/missingAfter 证据链), 另有 projection-register / remote-mount / turn-tracker 三枚启动事件。

真装形态下探径日志的 import.meta candidates failures 属预期噪声(非告警),最终 outcome 为准: dsh plugin add 装进 profile node_modules 后,探径前两档(argv1/argvN)已能命中宿主 dsh-session,而末档 import.meta 兜底是在插件自身安装目录里找宿主包——真装形态下必然落空, 于是 candidates 数组里带一条 import.meta 的 failure 行。看的是 outcome=ok 与 typesTotal=9,不是 failures 数组是否为空。

给 core 的正式注册面 API 诉求见 notes/CORE-ISSUE.md(随包发布,npm 包内可直接打开; 仓库形态同名文件在 notes/CORE-ISSUE.md)。

已知限制

  • 灰色面对宿主包布局敏感:类型注册探径依赖 argv[1] 祖先链内能找到宿主 node_modules (headless/web 实测 ok;Electron/桌面形态未实测)——探针不符时自动降级而非误注册。
  • resume 前插件必须已装载:官方装载顺序满足(loader.await 之后才 resume);若手工编排 启动顺序,先载插件再 resume。
  • developer preview 版本敏感:宿主 rc 系列演进快(chain 槽 options.select 即 0.1.1-rc.2 引入),建议锁 commit 安装(github:uppercrusteve/dsh-converge#<sha>),升级宿主后先跑回归。
  • verified=true 仅代表引用格式校验通过,不等于内容已联网核实(事件里带 verifiedIsFormatOnly 诚实标记)。

验证方式

node tests/score.test.mjs      # 打分/门控纯函数 16 组
node tests/plugin-smoke.mjs    # 假 ctx 全链路冒烟 15 组(7 工具真执行)
node tests/register.test.mjs   # 事件类型注册面探径/探针/降级 13 组
node tests/projection.test.mjs # 宿主投影折叠与打分对拍 10 组

tests/ 不在发布仓库与 npm 包里(本仓库根即插件目录;包只发运行时产物 + 文档):这四条属 开发工作区——在工作区根跑(tests/*.mjs 以相对路径 ../plugin/src/converge.js 引源码, 即 tests/ 与本目录平级)。 tarball 里的 package.json files[] 五件(src/、lib/、examples/、docs/、notes/) 加 README.md 由 npm pack --dry-run 核对(scoped 实名证据见仓库 notes/pack-dryrun-scoped.txt:@uppercrusteve/[email protected],tarball 名 uppercrusteve-dsh-converge-0.1.0.tgz,LICENSE 由 npm 自动附带)。

MIT · 仓库 github.com/uppercrusteve/dsh-converge · npm @uppercrusteve/dsh-converge。