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

@aiwayds/dsh-self-improve

v0.2.0

Published

dsh-plugin: the self-improvement loop for dsh — session signals become lessons (auto-applied, low-risk) and skill drafts (human-approved before install); topics-memory's ledger is the input

Readme

dsh-self-improve

dsh 的自我改进回路插件(@aiwayds/dsh-self-improve):把会话信号变成教训(lessons)与技能草稿(skill drafts)——低风险教训自动生效,技能草稿必须人工审批才装机。

定位

  • 设计契约:wayfinder 图 ~/repo/wayfinder/self-improve/(spec 卷二,oldfox 双审 GO)
  • 数据上游:@aiwayds/dsh-topics-memory(optional peer,>=0.24.0)——经其 TopicsService.feedObservations 写缝投喂 + lesson 数据存其 bundle;本仓禁直写 bundle。触发引擎/快速通道另读 lessonsSync roster、写 saveTopic lesson 分支(0.25.0 成员;运行时 peer 更旧则结构探测降级——roster 视为空、快速通道记 seam-unavailable,其余 lane 不受影响)
  • 分级门控:本仓 improveLoop(off|shadow|on,默认 off)管回路;原仓 lessonInject 管注入——两仓各一闸

模块图(N1 地基波 + N3 审批/skills 波 + N2 触发波 + N4 jev 决策波)

settings 命名空间 dsh-self-improve(三键,全 volatile 热更)
  └─ improveLoop: off | shadow | on          ← 回路总闸
  └─ improveJevBackend: '' | zen             ← jev 增强层总闸(N4)
  └─ improveJevModel: ''(哨兵→jev-1.13-free)
src/
  config.ts       三键 schema(schemastery)+ 快照/归一化(非法值→off,只收窄不放宽)
  signals.ts      信号采集器:旁听 session firehose,turn/end 批量冲刷
  feed.ts         写缝接线:动态 import 可选 peer → BundleStore+TopicsService 直构
                  (同一 bundle root,$DSH_TOPICS_HOME → $DSH_HOME/topics → ~/.dsh/topics)
                  写缝方法① feedObservations + 方法② setLessonStatus + usage 聚合读
                  + established lesson roster 读(lessonsSync)+ lesson 数据面落库(saveTopic kind:lesson)
  triggers.ts     触发引擎(N2):tool-error 聚类(7 天窗 ≥3)→ BL-3 合取 → fire/不 fire 落账
                  + 打断对快速通道(占位 hint,每 session ≤3)
                  + 门① 触发聚类判定 / 门④ 90 天退役复审扫描(N4)
  skill-draft.ts  skills 草稿生成器:证据摘要(计数)→ LLM → 影子自验门 → 门③ jev 质量门 → 草稿区
                  (secret gate / 每日 ≤1 / source: auto-generated 机器钉)
                  + 审批证据 LLM 正反方摘要 + 摘要缓存(N4,蒸馏路由)
  review.ts       /improve-review 审批命令:队列 / show / approve / reject / draft / triggers
                  + 门② lesson 固化前矛盾检测(N4)+ 队列退役建议渲染 + reject 退役卸装
  ledger.ts       行动账 meta/improve-actions.jsonl(白名单 / 512KB 紧缩 / 写失败静默)
  jev-gate.ts     jev 决策层客户端(N4):@aiwayds/dsh-jev-core 封装 + 判定账
                  meta/improve-decisions.jsonl(fail-open / 15s 超时 / 键=keychain-first)
  index.ts        门控接线:off=零 firehose 监听器(命令仍注册);shadow=只落账+可起稿;on=全通

审批流(/improve-review,N3 + N2)

/improve-review                队列列表(skill 草稿 + lesson hint + jev 退役复审建议,如有)
/improve-review show <id>      全文 + 证据摘要(机器拼恒在;LLM 正反方一句正一句反,失败/无凭据回退机器拼,
                               摘要按 id+digest 缓存于 meta/improve-summaries.jsonl 防重复调用)
/improve-review approve <id>   skill → 装机 ~/.dsh/skills/<name>/;lesson → hint→established
                               (lesson 固化前过 jev 矛盾检测:adopt 静默放行,record/fallback 带警示行,人审优先不拦截)
/improve-review reject <id>    skill → 草稿归档 .archived/;lesson → removed(原仓归档后移出 roster);
                               若为已装机的 auto skill(无草稿)→ 退役卸装(归档备份,可回滚,手写永不碰)
/improve-review draft          手动起稿:行动账近 7 天信号 → SKILL.md 草稿(自验门后过 jev 质量门)
/improve-review triggers       触发引擎观察面:当前候选与判定依据(只读干跑,零落账)
  • 队列来源:skill 草稿 = ~/.dsh/skills-drafts/<name>/SKILL.md(source: auto-generated 才入队);lesson hint = peer bundle topics/*.md 的文件级直读(type: lesson ∧ confidence: hint,peer 只导出 established,hint 仅供审批展示,永不注入)。
  • 自动触发:cluster 草稿请求必须经触发引擎 BL-3 清关(cluster.cleared 只由 triggers.ts 钉入)——无清关的 cluster 请求一律拒绝(cluster-not-cleared),生成通道自身无自动起稿能力;手动 draft 不经触发引擎(人发起,门照过)。
  • 门控三态:off=命令注册但队列恒空、生成拒绝(落账)、处置拒绝;shadow=读面 + 草稿生成与影子自验可跑,生效动作(装机/lesson 状态变更)拒绝;on=全通。skill 装机恒人审,无自动路径(B4 决议 1)。
  • 手写保护(B3 决议 4):装机绝不覆盖已存在目录——同名冲突强制 -auto 后缀(frontmatter name 同步改写);-auto 也存在则拒绝并提示合并;缺 source: auto-generated 标记的草稿拒绝装机。装机=复制+草稿移入 .installed/<name>-<戳>/ 作写前备份(回滚指针落账)。
  • 影子自验门(B3 决议 2):frontmatter 可解析 / name 合法(宿主 kebab-case 语法)/ description·whenToUse·正文必填 / 证据指针存在——不过不进队列。
  • 红线:LLM 出网 body 全文扫描(本机 credentials refs + 通用 token 形状),命中即断不发送,响应再扫一道才落盘;证据=计数摘要(白名单特征字段),对话原文不出进程;source: auto-generated 由本插件机器钉,绝不采信模型输出。
  • 每日草稿 ≤1(B4 决议 2,常量):按行动账 draft-created 当日计数 + 草稿区扫描取大者,超限落账拒绝。
  • lessons 写缝(§6.2 方法②):setLessonStatus(slug, to, { actor: 'dsh-self-improve:<sessionId>' }),peer 落锁+git 提交,可 revert;peer 缺失时动作降级落账(§6.3)。

触发引擎(N2:什么时候学)

「重复痛点→skill 草稿」的升级判定(spec §4.1 + BL-3 修订,稀疏触发原则——单次坏体验永不触发):

行动账信号(7 天滑动窗)
  └─ tool-error 按 (toolName + errorCode) 聚类,errorName 兜底,≥3 = 同类失败候选
       └─ BL-3 合取:候选 ∧(无相关 established lesson ∨ established lesson 仍复发)
            ├─ 过 → fire:N3 草稿通道(cluster 输入引擎清关,每日 ≤1 沿用)
            └─ 不过 → no-fire;fire/no-fire 全落行动账 kind:'trigger'
  • 数据源(全文件级只读,沿 N1 直构读法):本仓行动账 meta/improve-actions.jsonl(信号条目 + review.approved object=lesson:<slug> 行作 lesson 批准时间戳)+ peer bundle 的 established lesson roster(lessonsSync,MJ-3 语义——hint 永不入册)+ 其 30 天 ilog hits/opens(仅作展示注记)。peer 缺失 → 空 roster → BL-3 盲区直通分支(§6.3:skills 回路不依赖原仓)。
  • 「无相关 lesson」判定:established lessons 的 triggers/title 与聚类键(toolName/code)做词面交集(ASCII 词 run + CJK run,≥2 字符);有交集即相关。
  • 「仍复发」判定:窗口内存在晚于该 lesson 账内批准时间的失败 → 仍复发(lesson 治不了才升级 skill);账内无批准记录(他 actor 批的/账前批的)按「批准早于窗口」处理 → 窗口内失败即复发。
  • 节奏:扫描挂 turn/end,每 session 每分钟 ≤1 次(节流);无候选的扫描零落账(不刷账本)。spec 的执行位写的是离线批处理(dsh-cron daily 保底),本波按任务契约落 turn/end 轻扫(每分钟至多一次账本读 + mtime 缓存 roster 读,非 LLM 热路径);cron 批处理留待后续波接入同一 scanTriggers。
  • 每日 fire ≤1:引擎先自查当日已 fire(trigger.fired 或 draft-created 当日行)→ 已花则候选行记 already-fired-today,不再进草稿通道(避免每分钟拒绝刷账)。
  • 影子档(would-fire 记录带):improveLoop=shadow 引擎照算,kind:'trigger' 行落 wouldFire:true, fired:false——不 fire、不产草稿、不调 LLM。
  • 观察面:/improve-review triggers 随时干跑同一判定(候选 ×N、BL-3 分支、相关 lesson 及其注入统计),只读不落账——用来看引擎在想什么。

打断对快速通道(B2 决议 3② + MJ-1)

interruption-pair 信号(用户打断助手后紧跟 steer)→ 立即产 hint 级 lesson 草稿,不等批量蒸馏:

  • 落库拍板:peer service.saveTopic 的 lesson 数据面分支(0.25.0 公开:kind:'lesson')经直构 handle 调用——spec 要求「立即」,不走 feedObservation+等蒸馏批量。confidence:'hint' ∧ scope:'workspace' ∧ lessonSource:'correction' 由 handle 钉死(调用方无法放宽);workspaceId 沿 0.24.0 语义由 peer 写入时按 cwd hash 自盖(MJ-2);走 peer store 锁 + git 提交,可 revert。
  • v1 最小实现 = 占位 hint(pending-refine 标记):打断对只有位置没有内容——condition=「用户在 turn N 打断了助手」,action=「待蒸馏批次补全」,原文不落任何账本(红线⑤);LLM 冷读提炼补全排 N4 后的集成波。
  • 上限:每 session ≤3 条(B4 决议 2 + MJ-3:挡的是「生成草稿」不是「生效」);hint 不参与注入(MJ-3),仅供 /improve-review 审批展示。peer 缺失/旧版(无 saveTopic lesson 分支)→ 降级落账 seam-unavailable,不影响其他 lane。
  • 行动账新增 kind:'hint' 行(created / cap-refused / seam-unavailable / seam-failed)。

门控语义(improveLoop,firehose 面)

| 档位 | 监听器 | 行动账 | 投喂 | |---|---|---|---| | off(默认) | 不注册(宿主行为逐字节不变,守卫测试钉死;改档需重载) | — | — | | shadow | 注册 | 每条信号一行 | 从不 | | on | 注册 | 每条信号一行 + 每次投喂的 accepted/duplicates/rejected 一行 | feedObservations(obs, { actor: 'dsh-self-improve' }),每 turn/end 一批(不逐事件) |

  • shadow↔on 热切换(volatile 引用逐事件重读);会话中途切到 off=监听器保留但全惰性。
  • peer 缺失降级(optional peer,spec §6.3):采集照跑、投喂跳过、feed-degraded 事件按 lane 节流落账、不补投。
  • fail-open 硬编码(无键):回路 lane 全异步+吞错,炸了不影响正常会话。
  • /improve-review 在所有档位注册(人发起面,不属回路 lane):它只在被调用时行动,off 档下队列恒空+生成拒绝(落账),不破坏 off 的零监听器守卫;审批动作只读 peer/写自己的目录,不碰注入。

键表

| 键 | 默认 | 语义 | |---|---|---| | improveLoop | off | 回路总闸,三态,volatile(spec §7 MJ-A) | | improveJevBackend | '' | jev 决策层后端:''=增强层关(纯码路径,N2/N3 行为逐字节不变);zen=opencode-zen。N1 落键,N4 接线 | | improveJevModel | '' | 钉死模型 id;''=哨兵,调用时解析后端默认(zen→jev-1.13-free)。N4 接线 |

jev 增强层(N4:四门 + 判定账 + 证据摘要)

依赖 @aiwayds/dsh-jev-core@^0.1.4(keychain-first、typed fail-open),后端钉 opencode-zen 免费档(endpoint https://opencode.ai/zen/v1/systemone,model jev-1.13-free)。improveJevBackend=''(默认)时四门整体跳过:零远程调用、零判定账行、纯码路径与 N2/N3 逐字节一致(守卫测试钉死)。

键/凭据:key 解析梯子 = JEV_ZEN_API_KEY env → macOS 钥匙串服务 opencode-zen-inference(jev-core 非抛查找;值只进 Authorization 头,绝不打印/落盘/落账)。超时 15s/次;任何失败(无 key/超时/http/坏响应)= 该次判定 band=fallback + 机器 outcome 码,绝不抛、绝不阻塞回路(红线②)。

判定账 meta/improve-decisions.jsonl(jev-log 纪律:白名单字面量 / 512KB 紧缩 / 写失败静默):

{ at, gate: trigger-cluster|lesson-contradiction|draft-quality|retire-review,
  ref: "tool/code|skill:<名>|lesson:<slug>",   ← 有界语法 id,绝不存判定原文(红线⑤)
  digest: sha256(state) 前 16 位,               ← 内容身份不存内容
  probability?: 0..1(仅 outcome=ok 时有),
  band: adopt|record|fallback,                  ← adopt ≥0.60 / record ≥0.10 / fallback 其余或调用失败
  outcome: ok|no-key|timeout|http|invalid-response|error, latencyMs? }

四门(全异步批 lane、全 fail-open、同一次判定带 24h 复查窗——不被每分钟扫描重复问询,veto 在窗内粘滞):

| 门 | 挂点 | 问什么 | adopt(≥0.60) | record(0.10–0.60) | fallback(<0.10 应答或调用失败) | |---|---|---|---|---|---| | ① 触发聚类判定 | N2 引擎 fire 前(gate=on 且今日未花)| 「这 N 次失败是同一个问题吗」(batch noul,state=聚类键/计数/窗口特征)| 放行 fire | 只记仍 fire | 不 fire 落账(防噪音优先;仅此门把调用失败也归入不 fire) | | ② 矛盾检测 | /improve-review approve lesson: 固化前 | 「与现有 established lessons 矛盾吗」(候选 title/description/conclusion + roster 前 8 条 title/triggers)| 静默放行 | 警示行 + 放行(人审优先) | 警示行 + 放行(应答为矛盾/调用不可用措辞分档) | | ③ 草稿质量门 | N3 影子自验门之后、入队之前 | 「质量够格进审批队列吗」(name/description/whenToUse/正文统计+头 400 字)| 进队列 | 进队列(判定留账) | 应答 <0.10 → 不进队列(归档 .archived/+落账 draft-quality-gate);调用失败 → 结构自验结果即终局(进队列,jev 不阻回路) | | ④ 90 天退役复审 | 周期槽(随 unused-injection 的每 session 一次位)| 对已装机 auto skill(frontmatter created ≥90 天,最老优先 ≤10 条/批,30 天注入 hits/opens 作特征)batch 问「仍有存在价值吗」 | 保留(留账) | 保留(留账) | 应答 <0.10 → 进 /improve-review 队列标注「退役复审建议」(不自动删);调用失败 → 不建议、留账 |

  • 人为裁决(门④):队列列出建议后由人处置——reject skill:<名>(无草稿时)= 退役卸装:装机目录整体移入 .archived/<名>-<戳>-uninstalled/(可回滚),仅限 source: auto-generated,手写技能永不碰;处置后建议自清(卸装/新 adopt 行任一即出队)。
  • 状态语义:门①只在 fire 将真发生时问(shadow 的 would-fire 行保持纯 N2、零调用);门②③④在 shadow 也照常工作(判定/留账均无生效动作);improveLoop=off 时四门随回路一起不存在(零监听器)。
  • 与原仓 jev 的关系:独立依赖 dsh-jev-core,不经 topics-memory 的 src/jev 五键(那套 default off 依旧沉睡);两套判定账本互不混写。

审批证据摘要(第五增强,蒸馏路由不占 jev):/improve-review show skill:<名> 在机器拼证据行之上追加 LLM 正反方各一句(bigmodel glm-5.3-flash,沿 N3 的 ZAI_CODING_CN_API_KEY 取证路径;15s 超时;pro/con 各截 200 字)。缓存 meta/improve-summaries.jsonl({at,id,digest,pro,con} 白名单行,id+正文 digest 键)防重复调用;任何失败回退机器拼原文(N3 输出逐字节不变)。

成本口径:zen 免费档(jev-1.13-free),每次判定 ~350 tok(实测 381in/21out);四门均有节流(①每日实质 ≤1 次 fire 问询 + 24h 复查窗,④每 skill 每日 ≤1 次,③随每日草稿 ≤1,②随人审批)。

信号(B1 v1 短清单,N1 活跃五条)

| # | 信号 | 缝 | 落盘特征(白名单,只特征不原文) | |---|---|---|---| | 1 | tool-error | firehose tool/call(callId→名)+ tool/result isError | toolName / errorName / errorCode / turn;error.reason 不落 | | 2 | turn-end-negative | firehose turn/end reason ∈ {error, max-tokens, aborted} | reason / errorCode(LlmFailure.code)/ cancelKind / turn;message 不落 | | 3 | repeat-call | 旁听宿主 dsh-repeat-tool-reminder 注入的 repeat-tool-reminder source 消息 | 从其有界 summary 元数据解析 toolName × count;解析不了只计一次 | | 4 | interruption-pair | aborted turn/end(或 assistant interrupted:true)+ 下一条人类消息 | 只记发生+turn 位置+触发标记 | | 5 | unused-injection | 周期型(每 session 至多一次,首 turn/end 触发;dsh-cron 友好) | peer 的 usageSignals 聚合(30 天窗)里 hits≥1 且 opens=0 的 slug 快照,按 hits 降序 ≤20 条 |

第 6 条 jev-calibration(spec §2.1)随 N4 决策层接线,本波不采。

红线(五条)

快道零远程 / fail-open 硬编码 / secret gate 硬性(沿 System One)+ 自动写资产必须可回滚可识别(source 标记+归档+卸载回收)+ 对话原文不出账本(字段白名单,只特征不正文——tool/call arguments、user/assistant 正文、error.reason、reminder content 一律不过进程外;守卫测试用含原文的 mock 事件钉死)。

行动账 meta/improve-actions.jsonl 恒随 improveLoop 开(无独立键),条目=信号行 / 投喂结果行 / 降级行 / 审批行(N3:kind: 'review',action 为封闭枚举——draft-created、各拒绝码、approved、rejected 及其拒绝/降级码;object=skill:<名>/lesson:<slug>;approve/reject 带回滚指针:装机路径+备份路径或写缝引用)/ 触发行(N2:kind: 'trigger',fired/wouldFire/聚类键/计数/判定码)/ 快速通道行(N2:kind: 'hint')。审批拒绝码即使 improveLoop=off 也落账(人发起的拒绝会计入,读面不计)。

状态(0.1.0)

N1 地基波 + N3 审批/skills 波 + N2 触发引擎波 + N4 jev 决策波已落地:配置三键 + 五信号采集 + 写缝投喂(①②)+ 行动账;/improve-review 审批命令(队列/show/approve/reject/draft/triggers)+ skills 草稿生成器(手动 + 引擎清关触发、影子自验门、secret gate、每日 ≤1、装机不覆盖手写/-auto 后缀);N2 触发引擎(tool-error 聚类 7 天 ≥3 ∧ BL-3 lesson 合取、turn/end 每分钟 ≤1 节流扫描、每日 fire ≤1、would-fire 影子带)+ 打断对快速通道(peer lesson 数据面直构落库、占位 hint pending-refine、每 session ≤3);N4 jev 增强层(四门:触发聚类判定/矛盾检测/草稿质量门/90 天退役复审,判定账 improve-decisions.jsonl,fail-open 全硬编码,off=零调用零账行纯码逐字节)+ 审批证据 LLM 正反方摘要(蒸馏路由+缓存)+ reject 退役卸装。off 守卫 / 三态门控 / 装机保护 / 红线⑤ / 四门三 band+fail-open 全有测试(110 绿),真宿主 boot-smoke 绿。后续波:占位 hint 冷读提炼(打断对升格)。

纯本地模式(不需要 GitHub)

回路的每一环都不依赖 GitHub——信号采集在本机 firehose、观察/教训/技能落在本地 bundle 与本地目录、判定账在本地 meta。GitHub 只出现在 topics-memory 的可选同步功能里,与回路无关;不配同步(或 onboard 选 local-only)就是彻底的纯本地。回归测试 test/pure-local.test.mjs 钉死:无 remote、无 sync 配置的 bundle 上「观察投喂→hint lesson 落库→established」三环全通。

另一台电脑的纯本地装机清单:

  1. profile 装 @aiwayds/dsh-topics-memory(≥0.24.0)+ @aiwayds/dsh-self-improve(均 npm latest);
  2. profile cordis.patch.yml 加挂载条目(improveLoop: 'on';improveJevBackend 可留空=纯码判定);
  3. topics-memory 配好蒸馏模型路由(教训提炼用);不配 GitHub 同步;
  4. zen 钥匙串凭据可选——没有则 jev 门自动 fail-open 退纯码,回路照跑。

注意:本机 bundle 若已配 GitHub 同步,回路产出会随包一起同步(私有仓)——要「这份不上去」,就把那台 bundle 用 /topics onboard 的 local-only 模式重置。