@summerscar/dsh-mnemon-sync 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -64
- package/client.js +4 -4
- package/locale/en.json +2 -2
- package/locale/zh.json +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,86 +1,43 @@
|
|
|
1
1
|
# dsh-mnemon-sync
|
|
2
2
|
|
|
3
|
-
为 [dsh-mnemon](https://github.com/omdsh-dev/dsh-mnemon)
|
|
3
|
+
为 [dsh-mnemon](https://github.com/omdsh-dev/dsh-mnemon) 提供备份与恢复:把记忆组件打包上传到 S3 兼容存储或 WebDAV,需要时挑一个包恢复回来。安装后在记忆系统里多一个「同步备份」标签页。
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
## 能备份什么
|
|
8
|
-
|
|
9
|
-
按 dsh-mnemon 自己的组件划分,任意组合,多选:
|
|
10
|
-
|
|
11
|
-
| 组件 | 内容 | 说明 |
|
|
12
|
-
|---|---|---|
|
|
13
|
-
| 记忆空间 | `<MNEMON_DATA_DIR>/data/` | 每个空间的 `mnemon.db` 与空间清单,数据库经 SQLite 在线备份 |
|
|
14
|
-
| 项目档案 | `<MNEMON_DATA_DIR>/documents/` | `index.json` 与全部 Markdown 文档 |
|
|
15
|
-
| 运行时记忆 | `<MNEMON_DATA_DIR>/runtime/` | `memories.json` 与两份投影文件 |
|
|
16
|
-
|
|
17
|
-
`MNEMON_DATA_DIR` 未设置时取 `~/.mnemon`。
|
|
18
|
-
|
|
19
|
-
## 为什么不用 litestream
|
|
20
|
-
|
|
21
|
-
litestream 是很好的工具,但和「目录级、多空间、可配置目标」这个需求是正交的:
|
|
5
|
+
## 安装
|
|
22
6
|
|
|
23
|
-
|
|
24
|
-
|
|
7
|
+
```sh
|
|
8
|
+
dsh plugin --profile web add @summerscar/dsh-mnemon-sync
|
|
9
|
+
```
|
|
25
10
|
|
|
26
|
-
|
|
27
|
-
if (existsSync(wal) && statSync(wal).size > 0)
|
|
28
|
-
throw new Error(`Memory Space ${id} is busy (mnemon.db-wal is not checkpointed)`)
|
|
29
|
-
```
|
|
11
|
+
装完重启 DSH 生效。没有 `dsh-mnemon` 时插件仍可运行,只是不显示标签页。
|
|
30
12
|
|
|
31
|
-
|
|
13
|
+
## 能备份什么
|
|
32
14
|
|
|
33
|
-
|
|
15
|
+
三个组件任意组合,默认全选:
|
|
34
16
|
|
|
35
|
-
|
|
17
|
+
| 组件 | 内容 |
|
|
18
|
+
|---|---|
|
|
19
|
+
| 记忆空间 | `<MNEMON_DATA_DIR>/data/`,每个空间的 `mnemon.db` 与空间清单 |
|
|
20
|
+
| 项目档案 | `<MNEMON_DATA_DIR>/documents/`,`index.json` 与全部 Markdown |
|
|
21
|
+
| 运行时记忆 | `<MNEMON_DATA_DIR>/runtime/`,`memories.json` 与两份投影 |
|
|
36
22
|
|
|
37
|
-
|
|
38
|
-
- **非数据库文件**:JSON 与 Markdown 由存储层原子写入,逐字节复制。
|
|
39
|
-
- **校验**:每个文件在打包前记录 SHA-256,manifest 与内容一起入包;上传前先自校验,恢复前再校验一次。
|
|
40
|
-
- **恢复顺序**:先下载 → 校验全部校验和 → 报告缺失组件 → 只写回确认的组件。不带 `apply` 时是纯预览,不碰磁盘。
|
|
41
|
-
- **覆盖数据库前**会先删除同名的 `-wal` / `-shm`:残留的 WAL 会让 SQLite 重放恢复文件里并不存在的事务。
|
|
23
|
+
`MNEMON_DATA_DIR` 未设置时取 `~/.mnemon`。
|
|
42
24
|
|
|
43
|
-
##
|
|
25
|
+
## 备份目标
|
|
44
26
|
|
|
45
|
-
- **S3
|
|
46
|
-
- **WebDAV
|
|
27
|
+
- **S3 兼容** — 手写 AWS Signature V4,适用于 Cloudflare R2、MinIO、Backblaze B2 等
|
|
28
|
+
- **WebDAV** — Basic 认证,自动创建远端目录
|
|
47
29
|
|
|
48
|
-
|
|
30
|
+
凭据存在 `<MNEMON_DATA_DIR>/state/mnemon-sync.json`,权限 `0600`,不写入 DSH 配置,也不进备份包。页面只回显掩码,回传掩码表示不修改。
|
|
49
31
|
|
|
50
32
|
## 自动备份
|
|
51
33
|
|
|
52
|
-
间隔与 dsh-mnemon 自己的 Git 备份保持一致,两项功能读起来一样:
|
|
53
|
-
|
|
54
34
|
关闭 · 每小时 · 每 3 / 6 / 12 小时 · 每天 · 每 3 天 · 每 7 天
|
|
55
35
|
|
|
56
|
-
|
|
36
|
+
## 恢复
|
|
57
37
|
|
|
58
|
-
|
|
38
|
+
从备份列表查看明细,选择要恢复的组件后执行;缺少的组件会明确提示。恢复默认只做预览,确认后才写盘。
|
|
59
39
|
|
|
60
|
-
|
|
61
|
-
git clone https://github.com/summerscar/dsh-mnemon-sync.git
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
在 DSH 里用插件管理器安装这个目录,或直接加入 profile 的依赖:
|
|
65
|
-
|
|
66
|
-
```sh
|
|
67
|
-
dsh plugin --profile web add /path/to/dsh-mnemon-sync
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
需要在 profile 里启用,并确保 `mnemon.sync` 这一层出现在 `memoryTopology.layers` 中。插件会注册一个最小 Source 来承载自己的页面 —— dsh-mnemon 只会为真实存在的 Source 渲染标签页,且标签高亮按 `sourceTypeId` 分组,借用别人的类型会导致两个标签同时点亮。
|
|
71
|
-
|
|
72
|
-
## 目录结构
|
|
73
|
-
|
|
74
|
-
```
|
|
75
|
-
index.js Host 入口:HTTP 接口、调度装配、Source 注册
|
|
76
|
-
source.js 承载页面身份的最小 Source(不存记忆)
|
|
77
|
-
snapshot.js 组件识别、数据库在线备份、manifest 与校验
|
|
78
|
-
scheduler.js 定时器与运行历史
|
|
79
|
-
store.js 设置存取(0600)与规范化
|
|
80
|
-
targets.js S3 SigV4 / WebDAV 的上传、下载、列目录、删除
|
|
81
|
-
zip.js 零依赖 ZIP 读写(node:zlib)
|
|
82
|
-
client.js 浏览器端页面与标签注册
|
|
83
|
-
```
|
|
40
|
+
数据库用 `node:sqlite` 的 `backup()` 在线备份,副本一致;写回前会删掉同名 `-wal` / `-shm`,避免 SQLite 重放不存在的事务。每个文件都有 SHA-256 校验。
|
|
84
41
|
|
|
85
42
|
## 许可
|
|
86
43
|
|
package/client.js
CHANGED
|
@@ -40,8 +40,8 @@ window.__ModuleLoader__.load({
|
|
|
40
40
|
|
|
41
41
|
const zh = {
|
|
42
42
|
tabLabel: '同步备份',
|
|
43
|
-
title: '
|
|
44
|
-
subtitle: '
|
|
43
|
+
title: '同步备份',
|
|
44
|
+
subtitle: '把选定的记忆组件打包备份到 S3 兼容存储或 WebDAV,并可随时查看备份列表与恢复。',
|
|
45
45
|
config: '备份配置',
|
|
46
46
|
configNote: '以下三项一起保存。',
|
|
47
47
|
scope: '备份范围',
|
|
@@ -144,8 +144,8 @@ window.__ModuleLoader__.load({
|
|
|
144
144
|
|
|
145
145
|
const en = {
|
|
146
146
|
tabLabel: 'Sync backup',
|
|
147
|
-
title: '
|
|
148
|
-
subtitle: '
|
|
147
|
+
title: 'Sync backup',
|
|
148
|
+
subtitle: 'Back up selected memory components to S3-compatible storage or WebDAV, with an archive list and restore.',
|
|
149
149
|
config: 'Backup settings',
|
|
150
150
|
configNote: 'All three sections below save together.',
|
|
151
151
|
scope: 'Backup scope',
|
package/locale/en.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"meta": {
|
|
3
|
-
"title": "
|
|
4
|
-
"description": "
|
|
3
|
+
"title": "Sync backup",
|
|
4
|
+
"description": "Back up and restore dsh-mnemon memory components (memory spaces, project documents, runtime memory — pick any subset) to S3-compatible storage or WebDAV, with scheduled backups, an archive list and selective restore."
|
|
5
5
|
}
|
|
6
6
|
}
|
package/locale/zh.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@summerscar/dsh-mnemon-sync",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Back up and restore dsh-mnemon memory components (memory spaces, project documents, runtime memory) to S3-compatible storage or WebDAV.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.js",
|