Skip to content

作为 deepseek-harness(dsh)的 storage backend 插件(napi 桥 + KvFacet 映射) #9

Description

@miaobyte

背景

deepseek-harness(dsh,array2d/byteseek 的 reference)底层是 Cordis 插件框架。ctx.storage 是「非会话存储 hub」这一可换实现 seam,已有 storage-jsonstorage-sqlite 两个 backend。一个 backend 要实现三接口:

  • StorageBackend { kv?: KvFacet; close() }
  • KvFacet { open(descriptor): Promise<KvUnit> }
  • KvUnit { loadAll / putRecord / deleteRecord / setGlobal / close }

方案

把 kvspace-durable 做成 dsh 的 storage backend 插件 @deepseek-ai/dsh-storage-kvspace:实现 StorageBackendkv facet,靠 DSN 白拿 redis/fs/s3 三种持久化后端,覆盖 json/sqlite 做不到的多进程共享 + 远程持久化。

KvUnit ↔ kvspace* ABI 映射

KvUnit 接口 kvspace ABI key 布局
open(descriptor) kvspaceConnect(dsn) 单元名 → 前缀 /dsh//
loadAll() kvspaceList + kvspaceGetBatch 前缀扫描 + 批量读
putRecord(t,k,v) kvspaceSet /dsh///,value 存 JSON 串
deleteRecord(t,k) kvspaceDel 同上
setGlobal(v) kvspaceSet /dsh//__global
close() kvspaceClose

挑战

  1. FFI 桥:dsh 是 Node/TS,kvspace-durable 是 Rust cdylib。用 napi-rs(编译进 .node)或 koffi(运行时 dlopen)包装 25 个 kvspace* 符号。
  2. JSON 序列化:putRecord 前 stringify、loadAll 里 parse;大 value/NUL 走 kvspaceSet 显式长度路径。
  3. 快照一致性:loadAll 是多 key 读,kvspace 无跨 key 事务,只能单 key 原子(KvUnit 契约允许,写排序归调用方)。

参考

  • dsh docs/capability-seams.md
  • dsh packages/storage/storage/src/backend.ts(backend 契约)
  • dsh packages/storage/storage-json/src/index.ts(backend 实现范例)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions