Skip to content

Releases: jojoman2024/dsh-memj

v0.1.5

Choose a tag to compare

@jojoman2024 jojoman2024 released this 20 Oct 07:35

本版重点

正文图片终于能显示了 🖼️

之前 100% 裂图:marked 只生成 <img src="x.png"> 不做地址解析,浏览器按页面地址解析相对路径 ⇒ 必然 404。
现在服务端按「条目 ref 所在目录」读图(白名单 + 不许越界),前端把相对 src 改写成 /asset?entry=…&path=…。

「就此提问」在每一段都能用

块引用 / 多行表格这类块以前永远匹配不到 DOM(实测 5816 块里 17.5%),
现在服务端把每块拆成「叶子行」逐行匹配;且块匹配不到时降级而不是把整个功能关掉。
按钮也移到了选区下方(上方会与浏览器自带的选择框重叠)。

外链改在右侧栏内置浏览器打开

点外链 → 右侧栏内置浏览器;开不了(如 Web 版没有 browser tab 类型)自动降级新标签页并说明原因。

面板内升级

头部基础信息右边出现「检测到有新版本」胶囊 → 弹窗 → 一键升级。
走国内镜像(npmmirror),支持桌面版(Electron 需 ELECTRON_RUN_AS_NODE=1 + dsh-desktop-host/lib/cli.js)。

入库自动刷新

新增 entry / 项目 / 主题后,面板列表自动更新(≤10 秒)。
用目录指纹判断变没变(81ms,而全量扫描 450–755ms);只在页面可见时轮询、正在编辑时不刷新、保住滚动位置。

窄屏断点 900 → 700

主流手机 CSS 视口宽度都在 360–430,平板竖屏 744–834。
旧断点把平板竖屏也判成窄屏;700 之后手机仍走窄屏、平板放开成两栏、右侧栏 iframe 不受影响。


安装 / 升级

dsh plugin --profile web add dsh-memj@0.1.5

⚠️ 装完需要重启 DSH 才生效。

0.1.4 —— DSH 0.2.1 兼容

Choose a tag to compare

@jojoman2024 jojoman2024 released this 19 Oct 03:29

DSH 0.2.1 兼容

修:context() 必须标 required: true

DSH 0.2.1 给 systemPrompt.context() 的注册项新增了 required?: boolean,
并引入 suppressRuntimeContext() / includeRuntimeContext:false ——
它们会把所有没标 required 的 context 一律摘掉(官方 README 原话:
"Contributions marked required remain visible")。

memj 有两条 context,两条都是操作型上下文:

context 内容 被摘掉的后果
memj:usage-guidance 全部使用指导(何时调哪个工具 / 挂靠判据 / 归档流程) 模型仍有 8 个工具,但不知道该在什么时候用、该填什么
memj:reading-doc 「文档内提问」注入的正文本身 模型手里没有正文,答非所问

⚠️ 两者都不报任何错 —— 只表现为「memj 忽然不好用了」。

记:headless 的能力边界(有意,附理由)

dsh-headless 明确不挂 HTTP server(其 patch 原话:"It mounts no Host,
HTTP server, Web Runtime, or browser plugin"
)⇒ 在 --profile headless 下
memj 的 inject 永不满足、整个回调不执行。

这是有意的边界:知识写入面与人侧界面是同一交付物,拆开没有意义。
代码里已写明不要把它改成可选及其理由(那样会加载出一个"工具能用、设置页全 404"的半插件)。

核查结论:零断裂

对照 0.2.0-rc.2 → 0.2.1-rc.2 逐包核查:

  • memj 真实 import 的 11 个符号:0 个断裂(同一位置);
  • 用到的 20 个 ctx 服务:除与本插件用法无关的三个外全部相同;
  • credentials 的四个方法(resolve/describe/set/unset):全在,形状未变;
  • 消息 source.kind = plugin:dsh-memj:两版都合法。

新增套件

scripts/test-dsh021-compat.mjs(14 项,含反向自证)—— 已进套件链,56 → 57。

⚠️ 它守的是一处完全静默的失效:required 字段 0.2.1 才有,
而本仓 devDep 是 0.1.5 的类型 ⇒ tsc 看不见它(删掉也不报错)。

0.1.3

Choose a tag to compare

@jojoman2024 jojoman2024 released this 15 Oct 18:18

自 v0.1.2 以来的内容(12 个提交,33 文件 / +8021 −100)。

🔴 修一个会造成数据损坏的严重缺陷:封面 tags 序列化

如果你在用 0.1.2 或更早的版本,建议尽快升级。

事故:一个项目的交接文档被撑到 128 MB / 单行 1.34 亿字符,把 DSH 拖崩;重启后每次读那份文档都奇慢。

根因是封面 tags 的读写不对称(两个缺陷叠加):

  • renderCover 把 tags 写成裸的逗号分隔串(tags: a,b)—— 在 YAML 里那是一个普通标量字符串,不是数组(theme 那行和条目 frontmatter 本来就是数组,只有封面这行漏了);
  • 于是读回时按逗号 split,切出来的片段不还原转义。

合起来是放大器:某标签需要加引号(以 @ - : # [ ] 等开头,或含 : )⇒ 写成 "@通知" ⇒ 读回时那对引号留在标签内容里 ⇒ 下一轮再写又判定不安全 ⇒ 再转义一层 ⇒ 反斜杠 1→3→7→15…(2ⁿ−1)。

⚠️ 而 mutateCover 每次只改一条封面、却会重写整份文档的全部封面 ⇒ 改任意一条都在加轮数 ⇒ 攒够约 27 轮就炸。这解释了「之前一直没事、突然就炸」——前 26 轮都看不出来。

修复:tags 改用 renderYamlArray(写成 [a, b],由解析器反转义);并补上「逗号在任何位置都不能裸写」(修上面那条时暴露的另一个独立缺陷:在流式数组里 , 就是分隔符,标签 x,y 会被静默劈成两半)。

新增功能

文档内提问(reading) —— 一条知识/一份交接文档读起来太长时,可以直接就着某一段向它提问,问答会落成一条 kind: chat 条目并与那一段绑定;支持段落标记、选中工具条、「去会话」跳转、轮末自动同步、以及从 chat 条目「返回源知识」。

面板界面状态跨会话共享 —— 右边栏是每个会话一份,此前切会话回来面板就「回到默认页」。现在界面状态跨会话共享(零内核改动)。

验证

  • pnpm run typecheck ✅
  • 全套件 56/56 通过(v0.1.2 时 53 个,本次新增 3 个 reading 相关套件)
  • check-pack 实测 tarball 31 文件 / 2402 KB,README 引用的 14 张截图都在包里
  • check-peer-range 通过(6 个真实 DSH 版本装得上,上界有效)
  • ⭐ 实测产物:npm pack 出 dsh-memj-0.1.3.tgz,解包后包内 version = 0.1.3、31 文件
  • ⭐ 修复专项:renderCover → coverFromYaml 往返 ×10,9 类标签全部长度恒定、往返还原(修复前:@ 开头那条 23 → 8211 膨胀;含 : 那条直接抛 YAML 错)

安装 / 升级

dsh plugin --profile web add dsh-memj@0.1.3

⚠️ 升级请带上版本号——否则锁文件会把你钉在旧版。

0.1.2

Choose a tag to compare

@jojoman2024 jojoman2024 released this 12 Oct 05:30
v0.1.2

0.1.2

0.1.1

Choose a tag to compare

@jojoman2024 jojoman2024 released this 10 Oct 05:16

修复

  • 桌面版点 memj 入口没反应:桌面壳的 window-open 策略只对 https: 外链调
    shell.openExternal,而本插件页面是 http://127.0.0.1:<port>/plugins/dsh-memj/
    (http + 同源)⇒ 改为走 DSH 官方的右侧栏页类型:点入口直接在右侧栏里打开
    memj 面板。浏览器版行为不变(仍开新标签),老 DSH 上整段不执行、零影响。

新增

  • 「发布 GitHub Release → 自动发 npm」的 CI(OIDC trusted publishing,无需 token)。