dsh-ecolink-adapter
Verified@zoria-lind/dsh-ecolink-adapter · v0.1.3 · MIT
dsh-ecolink DSH 适配层:直读本地记忆池、pre-step 注入(打分+预算+会话去重)、#记忆名 过滤,打通网页端记忆生态
Install
dsh plugin add @zoria-lind/dsh-ecolink-adapter Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Tags
Creators
Readme
dsh-ecolink-adapter
dsh-ecolink 的 DSH 适配层(v1):直读本地记忆池(~/.dsh-memory/memory.json,只读),
经 agent/pre-step 维持 DSM:memory_write 指令通道(E1),提供 /ecolink-push 显式写回(E4)
与记忆 skill 按需读取(E2),打通"网页端记住 → DSH 直接用;DSH 产出 → 网页端可用"。
v0.1.1 变更摘要(E0–E8):离线队列并发丢条目修复(E0,extension/core/queue.mjs); 指令/内容通道分离——指令每轮幂等注入(plugin 快照消息,不改写用户消息、不碰前缀缓存), 内容默认不注入、由 skill 按需 read,
contentInjectionEnabled为逃生舱(E1); 记忆 skillecolink-memory运行时注册(E2);服务端快照/hash/diff 三端点(E3);/ecolink-push写回(复用 /memory/sync,source:'dsh',service 唯一写者)(E4); 建议确认队列(sync 进队列、确认才入池;未确认条目不进 DSH 上下文)(E5); 网页端只读面板 + chrome.alarms badge(E6);静音 + 黑名单(E7);服务默认安全(E8)。v1.1(2026-09-14):service 自动拉起——探测到 17520 未监听就本机 spawn 拉起 (apply + pre-step 60s 节流;仅本地 URL;
serviceAutoStart默认开)。E5 设计纠正: 确认点改到 DSH 侧(待实现),随仓 config.json 设autoConfirm: true,网页收割直入池。
安装(link 挂载,与 token-optimizer 同款)
dsh plugin --profile web add D:/dsh/dsh-plugins/dsh-ecolink/adapter
机制
- 只读池文件:mtime 缓存(文件变化立即重读,TTL 5s 兜底);唯一写者是 ecolink-service
- 指令通道(E1,默认开):每轮 pre-step 末尾追加一条
source.kind='plugin'的[dsh-ecolink 指令]快照消息(照抄内核 dsh-time-context 形态:prepend 注册 + await next + createUserMessage;决策里的 messages 只喂本步请求、不写会话事件)。剥旧追加 → 每轮幂等不叠加 - 内容通道(E1,默认关):
contentInjectionEnabled: true恢复旧行为——改写用户消息注入 记忆块(2-gram 打分 + 时间衰减 + 预算 + 长提示词缩减 + singleInjection 会话去重) /ecolink-push(E4):斜杠命令,把指定要点 POST 到 service 的/memory/sync(source:'dsh');token 未配置时自动读同仓service/config.json;service 是唯一写者- 记忆 skill(E2):注册
ecolink-memory,指引模型用 read 按需读池原文(引用前必须核对) - service 自动拉起(v1.1):apply 时与每次 pre-step(60s 节流)探测
serviceUrl/memory/status; 任何 HTTP 响应(含 401)= 已活;网络错误 = 未运行 → spawn 同仓service/server.mjs(detached + 无窗口)。仅对 127.0.0.1/localhost/::1 生效;service 目录缺失(独立发布包)静默跳过。 与登录自启任务兼容:端口已监听就不会重复起 - fail-open:池不存在/读失败/任何异常 → 静默放行,绝不破坏请求
- 只处理
source.kind='user'的真实用户消息(DSH runtime-context 快照直接放行)
配置(cordis.patch.yml)
adapter:
enabled: true
poolPath: '~/.dsh-memory/memory.json'
poolTtlMs: 5000
injectEnabled: true # 总开关(false = 两个通道全关)
singleInjection: true # 内容通道专用(指令通道天然每轮幂等)
maxInjectionChars: 3000 # 内容通道注入预算
instructionEnabled: true # E1 指令通道
contentInjectionEnabled: false # E1 内容逃生舱
skillName: 'ecolink-memory' # E2 skill 注册名
serviceUrl: 'http://127.0.0.1:17520' # E4 写回目标
serviceToken: '' # E4;留空自动读同仓 service/config.json(E8 自动生成)
serviceAutoStart: true # v1.1;探测到服务未运行就自动拉起(仅本地 URL 生效)
测试
node adapter/test/smoke.mjs # 66 项,零 API
已知限制
- 会话过滤靠
#记忆名显式调用;DSH CLI 的--resume <session>只接受会话 id, "按命名会话自动绑定"待 DSH 提供--session能力后再做 - 与 token-optimizer / behavior-enhancer 的联动开关(两插件中
memory_bridge占位节) 待适配层稳定后启用 inject.js仍是经典脚本,INSTRUCTION_PROMPT/BLOCK_RE 等与 core/*.mjs 镜像维护 (注释锁死);彻底消除镜像需要构建期注入(P5/0D 结论)- adapter npm 发布口径未解决:
src/modules/memoryInject.js跨目录 importextension/core/*, npmfiles无法引用包根之外路径(E8#5 有据缓办;Junction 挂载不受影响)