{"_id":"@buckeyestudio/toh-storage-json","name":"@buckeyestudio/toh-storage-json","dist-tags":{"next":"0.1.1-rc.2","latest":"0.1.1-rc.2"},"versions":{"0.1.1-rc.2":{"name":"@buckeyestudio/toh-storage-json","description":"JSON file KV storage backend for the TheOpen Harness storage hub","version":"0.1.1-rc.2","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/dustinwloring1988/theopen-harness.git","directory":"packages/storage/storage-json"},"type":"module","main":"lib/index.js","types":"lib/types/index.d.ts","exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./invariant":{"types":"./lib/types/invariant.d.ts","default":"./lib/invariant.js"},"./src/*":"./src/*","./package.json":"./package.json"},"license":"MIT","author":{"name":"buckeyestudio"},"peerDependencies":{"@buckeyestudio/toh-invariants":"^0.1.1-rc.2","@buckeyestudio/cordis":"^4.0.1","@buckeyestudio/toh-storage":"^0.1.1-rc.2"},"dependencies":{"@buckeyestudio/schemastery":"^3.18.1"},"devDependencies":{"@buckeyestudio/toh-invariants":"^0.1.1-rc.2","@buckeyestudio/toh-storage":"^0.1.1-rc.2","@buckeyestudio/cordis":"^4.0.1"},"_id":"@buckeyestudio/toh-storage-json@0.1.1-rc.2","bugs":{"url":"https://github.com/dustinwloring1988/theopen-harness/issues"},"homepage":"https://github.com/dustinwloring1988/theopen-harness#readme","_integrity":"sha512-wUWxxLW6fM6uJQb7HKGQ6tQbQHvYEvQOF+943ac7ygPHtai09eW594jaPgRsQE/8hgW4F6jPRbJjv8ov6WEhOg==","_resolved":"/home/runner/work/theopen-harness/theopen-harness/dist/npm/buckeyestudio-toh-storage-json-0.1.1-rc.2.tgz","_from":"file:/home/runner/work/theopen-harness/theopen-harness/dist/npm/buckeyestudio-toh-storage-json-0.1.1-rc.2.tgz","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-wUWxxLW6fM6uJQb7HKGQ6tQbQHvYEvQOF+943ac7ygPHtai09eW594jaPgRsQE/8hgW4F6jPRbJjv8ov6WEhOg==","shasum":"aac42685ab621f45303d76e02feff161d4633d6a","tarball":"https://registry.npmjs.org/@buckeyestudio/toh-storage-json/-/toh-storage-json-0.1.1-rc.2.tgz","fileCount":12,"unpackedSize":24081,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDKIELL3nIzY8LLhGFoFdNku1WKFemZkh8UAyy8WiwYFAIgPoMXBzBbnA22tH5vON+7bhqgPRx/gmd+fr2pP3UjMAM="}]},"_npmUser":{"name":"buckeyestudio","email":"dustinwloring1988@gmail.com"},"directories":{},"maintainers":[{"name":"buckeyestudio","email":"dustinwloring1988@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/toh-storage-json_0.1.1-rc.2_1787489710810_0.16917095437295382"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-23T12:55:10.661Z","0.1.1-rc.2":"2026-08-23T12:55:10.958Z","modified":"2026-08-23T12:55:11.144Z"},"maintainers":[{"name":"buckeyestudio","email":"dustinwloring1988@gmail.com"}],"description":"JSON file KV storage backend for the TheOpen Harness storage hub","homepage":"https://github.com/dustinwloring1988/theopen-harness#readme","repository":{"type":"git","url":"git+https://github.com/dustinwloring1988/theopen-harness.git","directory":"packages/storage/storage-json"},"author":{"name":"buckeyestudio"},"bugs":{"url":"https://github.com/dustinwloring1988/theopen-harness/issues"},"license":"MIT","readme":"# @buckeyestudio/toh-storage-json\n\n[English](README.md) | 中文\n\n[存储中心](../storage/README.zh.md)的 JSON 后端：配置根目录下每个单元使用一个人类可读的 `<unit>.json` 文件，注册为后端 `json`。设计见[领域 KV 存储 Agent Note](../../../.agents/notes/proposed/architecture/2026-07-24-domain-kv-storage-and-workspace.zh.md)。\n\n## 模型\n\n- 内存中的单元状态具有最终决定权；每个写入原语都会通过临时文件写入 + fsync + 原子 `rename()` 替换重新发布整个文件。单元文件始终是完整的当前状态：可读性是该后端存在的理由，规模问题则属于 SQLite 后端。\n- 缺失文件会作为空单元打开，并在第一次写入时物化。外来或无法解析的文件以 `malformed-medium` 拒绝；已存版本与描述符不同时以 `version-mismatch` 拒绝（预发布立场，不迁移）。\n- 跨调用的写入顺序属于调用方（领域层的写入链）；每次调用都具备原子性，并在完成时已达到持久状态。\n\n## 配置\n\n| Key | 类型 | 默认值 | 含义 |\n| --- | --- | --- | --- |\n| `root` | string | 必填，无默认值（cwd 回退会让文件散落各处） | 保存单元文件的目录；按需以 `0o700` 创建 |\n\n## 模型体验\n\n### 已存领域记录\n\n#### 模型看到的内容\n\n无。该后端不贡献提示词、工具或 schema；它在 `ctx.storage` 后面持久化非会话领域数据，只供宿主侧消费方使用。\n\n#### Token 影响\n\n实时请求 token 为零。\n\n#### KV Cache 影响\n\n无：该后端从不触碰实时请求前缀。\n\n## 已知限制与暂缓事项\n\n- Windows 持久性依赖 libuv 的 `rename()`（调用 `MoveFileExW` 并启用替换），没有显式 write-through 标志；追加日志分面落地时，计划把会话日志后端更严格的 Win32 write-through 发布辅助函数下移到此处（见 Agent Note 的迁移章节）。\n- 没有跨进程写锁：两个进程写入同一根目录时，可能交错执行整文件替换（最后写入者胜出）。当前消费方采用单一宿主进程部署；多进程方案按 Agent Note 的范围外事项表暂缓。\n","readmeFilename":"README.zh.md","_rev":"1-388189a1d4f7470dfbc24a1273daa9d4"}