Repository navigation
Releases: Oxmyxo/dsh-markji-bridge
Releases · Oxmyxo/dsh-markji-bridge
Release list
2.7.0:统一列表过滤与加密凭证
2.7.0
列表过滤
markji_cards的list与markji_decks的list/chapter_list统一使用filterJSON 条件树,所有过滤都由filter完成。filter条件为{ field, op, value, case_sensitive?, flags? },组合为{ all: [...] }/{ any: [...] }/{ not: {...} };支持eq、ne、contains、starts_with、ends_with、regex、in、not_in、gt、gte、lt、lte、exists。- 每个列表维护独立字段集;不属于该资源的字段或 op 返回
invalid_argument,不会跨资源匹配。字符串默认大小写不敏感,case_sensitive: true可关闭;正则默认i,可用flags覆盖。 scope支持all/deck/chapter/folder;不传时由deck/chapter/folder_id推断,显式冲突会报错。
凭证与插件页
- 插件详情页可直接填写 Markji OpenAPI Key 并选择
cache.db目录,保存前会调用只读接口测试。 - Key 只以 AES-256-GCM 密文写入
cache.db的secrets表;数据密钥由 DSH 凭据服务或仅当前用户可读的secret.key保存,页面只显示hasKey和尾 4 位,不回显明文。 - 切换缓存目录会复制现有
cache.db和secret.key,重启 DSH 后生效。 - 首次启动支持
apiKey引导配置和环境变量;插件会加密写入cache.db并从进程环境清除。
写入与同步
create/update在入队前自动校验每条正文的 Markji 语法,并默认批量查询Pic/Audio引用的文件 id;checkMediaOnWrite: false可跳过媒体查询。- 语法错误、文件缺失或媒体查询失败会让该条直接失败且不产生待推送卡,批量中的其他项继续;推送前执行同一套语法与媒体预检作为最后一道闸。
- 同步任务记录进度和结果,中断后可用
resume续跑;wait可阻塞到任务结束并支持超时。DSH 加载dsh-tool-jobs时,同步任务会登记为当前会话的后台任务并返回job_id。 - 冲突按卡片去重,支持
keep_local/keep_remote/use_content;批量解决单次最多 50 个,可混用策略。
安装
npm install dsh-markji-bridge@2.7.0DSH bundle 安装与完整配置见 README。
验证
- 单元 / 集成测试:155/155
- Mock E2E:13/13
- 入口冒烟:4 个工具
- 无明文密钥检查:通过
- 真实 DSH:核对列表过滤的 equality / contains / regex、跨资源字段拒绝、未知字段拒绝、插件设置区和缓存读取。
2.4.0:搜索合并为列表过滤,各 list 字段独立
2.4.0
本次包含 2.2.0、2.3.0、2.4.0 三次更新。核心变化:搜索成为列表过滤,且每个 list 只接受自己资源的字段。
列表过滤
- 移除独立的
searchaction /markji_search,统一走markji_cards的list、markji_decks的list/chapter_list。 query_mode支持substring(默认)、fuzzy、regex、predicate。scope支持全库 / 卡组 / 章节;不传时由deck/chapter/folder_id推断,显式冲突会报错。fields限定文本查询字段;predicate是 JSON 条件树,支持all/any/not、13 种 op 和点号路径,条件只读自有属性。- 每个 list 的字段集独立:
- 卡组:文本
name/description/id,谓词含description、updated_time、card_count、chapter_count等卡组字段。 - 章节:文本
name/id,谓词只含章节字段;没有description,也不支持deck_name,按父卡组筛选用scope: "deck"。 - 卡片:保留
text/content/cloud/status/ 时间字段等完整集合。
- 卡组:文本
- 给某个 list 传它不拥有的字段会报
invalid_argument,不会被静默忽略或跨资源匹配。
同步与批量
markji_sync({ action: "progress", task_id })只返回对应任务;不传时仍返回{ active, tasks }。- 批量能力保留:卡片
get(cards)、create(new_cards)、update(updates)、validate(contents/cards)、move/archive,以及章节新建 / 重命名 / 排序。
其他
- 2.2.0:卡片列表查询新增模糊匹配与正则,模糊结果带
score、matched_by,支持min_score和部分匹配回退。 - 2.3.0:精简列表、读取和同步返回值,去掉重复环境信息、空字段和逐项包装。
- 文档已同步:字段边界、独立 filter、2.2.0–2.4.0 变更与测试数量。
验证
- 单元 / 集成测试:114/114。
- mock HTTP E2E:13 checks / 0 failures。
- 入口冒烟:4 个工具。
- 已在真实 DSH 中重新加载 2.4.0 并验证列表字段边界、谓词、范围与
progress task_id。
安装
npm install dsh-markji-bridge@2.4.0或在 DSH 插件配置中使用本仓库的 cordis.patch.yml。Markji token 通过 MAIMEMO_MARKJI_OPENAPI_TOKEN 环境变量提供。
v2.1.0 — 同步任务接入 DSH 后台任务
重点更新
markji_sync({ action: "start" })现在会把同步任务登记为当前会话拥有的 DSH 后台任务,并返回job_id。- 任务会出现在 DSH 的「正在运行的后台任务」列表;进度实时更新,
job_output可读取结果,完成/失败/终止通知由 DSH 自动发送。 - 终止后台任务会在同步管线检查点取消任务;任务变为
interrupted,已排队的本地修改保留,可用markji_sync({ action: "start", resume: "<task_id>" })续跑。 - 多进程场景下不会为其他 DSH 进程持有的运行中任务创建无法结束的本地 job。
文档
设计文档随包发布:DESIGN.md
修复
- 修复 DSH job 结果必须是字符串的问题,避免
job_output末尾出现[object Object]。 - 取消后的任务提示改为明确说明“用户取消、可 resume”,不再误报为宿主异常退出。
安装 / 升级
npm install dsh-markji-bridge@2.1.0验证
- 单元/集成测试:104/104
- Mock E2E:13/13
- 入口冒烟:4 个工具
- 真实 DSH 联调:后台任务列表、进度、
job_output、完成通知、job_kill→interrupted→ resume 均已验证
v2.0.0 — 4 个 action 工具与章节操作
2.0.0
主要变化
- 工具从 19 个细粒度工具合并为 4 个 action 式工具:
markji_decks、markji_cards、markji_sync、markji_file markji_decks新增卡组详情、章节详情 / 新建 / 重命名 / 排序;Markji OpenAPI 不提供章节删除接口markji_cards统一卡片列表、搜索、读取、批量新建 / 修改、移动、归档、语法帮助与校验- 批量新建字段改为
new_cards;批量更新使用updates;旧的细粒度工具名不再注册,迁移表见 README - 工具描述同步精简,保留缓存、队列写入、冲突与 id 约束
验证
- 单元测试 98/98
- mock HTTP E2E 13/13
- 入口冒烟:4 个工具
npm pack --dry-run确认 2.0.0 包内容
安装 / 升级
npm install dsh-markji-bridge@2.0.0DSH bundle 安装与章节操作说明见 README。
dsh-markji-bridge 1.6.0
批量新建支持跨章节 / 卡组
markji_cards_create的顶层deck/chapter改为可选默认值。- 每个
cards项可设置自己的deck/chapter,一次调用可跨章节 / 卡组。 order相对于该项最终目标章节。- 旧的顶层传参方式保持兼容;未提供目标的项逐条报错,其他项继续创建。
- 未提供顶层默认值时,结果的
deck_id/chapter_id为null,每项结果包含实际目标。
验证
- 单元 97/97,E2E 13/13,入口烟测 19 个工具。
安装 / 升级:
npm install dsh-markji-bridge@1.6.0或 plugin_manager install_bundle target=dsh-markji-bridge@1.6.0。
dsh-markji-bridge 1.5.0
1.5.0 — 批量操作
- 新增
markji_cards_get:一次按 id 读取多张卡,保持请求顺序;未知 id 逐项报错,默认省略冗余的text。 markji_card_syntax支持contents(多段正文)和cards(多张已有卡)批量校验,cards使用排队中的最新正文。- 新增
markji_cards_create:在同一个卡组章节中批量新建卡片。 markji_card_update新增updates批量修改,支持部分成功。- 所有批量写操作逐项报告错误,坏项不会中断其他项;新增批量入口单次最多 50 项(归档 / 移动沿用原行为)。
- 文档与测试同步更新:96 个单元测试、13 项 mock E2E、19 个工具入口烟测。
安装 / 升级:npm install dsh-markji-bridge@1.5.0,或在 DSH 插件市场升级。
v1.4.2 — markji_card_syntax 支持语法帮助
新增
markji_card_syntax 现在支持 action=help,用于在写入前查询墨墨记忆卡的原始富文本语法。帮助内容是插件内置的静态文档,不读取、不校验、不重写卡片内容,也不访问网络。
// 列出全部格式
markji_card_syntax({ action: "help" })
// 只查一个格式
markji_card_syntax({ action: "help", format: "picture" })
// 校验内容(原有行为,默认 action)
markji_card_syntax({ content: "[E##x+y]" })可查询的内容
format省略或传all:全部语法、通用规则、嵌套矩阵和 9 个格式。format: "basic":通用规则 + 允许的嵌套关系。- 格式 id:
text-style、cloze、audio、card-ref、paragraph、choice、picture、formula、answer-line。 - 也接受标签名或中文别名,例如
T、F、Pic、Choice、文字样式、挖坑、图片。
其他改动
- 相邻的图片标签组成的图集现在通过语法校验,符合官方语法指南。
markji_sync仍会在推送前重新校验待写卡片,并批量检查Pic/Audio文件 id 是否存在。
验证
- 单元 / 集成测试:92/92
- mock HTTP 端到端:13/13
- 入口烟测:17 个工具
安装
- npm:
dsh-markji-bridge@1.4.2 - 源码:
git clone后通过plugin_manager install_bundle安装
完整文档见 README。
v1.0.0
dsh-markji-bridge 1.0.0 — 给 DeepSeek Harness agent 的墨墨记忆卡(Markji)插件:
- 16 个 markji_* 工具,纯 Node 内置模块,无第三方依赖
- 本地 SQLite 缓存 + 纯文本搜索(忽略格式/媒体/base64)
- 修改先排队,推送前拉取并三方合并,冲突逐卡恢复
- 后台同步任务,崩溃/重启后可 resume
- 卡片归档、远程删除检测、多进程写锁
安装:克隆仓库后 plugin_manager install_bundle target=<目录绝对路径>,token 通过环境变量 MAIMEMO_MARKJI_OPENAPI_TOKEN 提供。详见 README。