dsh-liuhen 0.0.1 → 0.1.1
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 +81 -10
- package/client.js +571 -0
- package/lib/autoindex.js +76 -0
- package/lib/box.js +230 -0
- package/lib/config.js +123 -0
- package/lib/diary.js +71 -0
- package/lib/feelbox.js +121 -0
- package/lib/index.js +432 -5
- package/lib/inject.js +277 -0
- package/lib/lock.js +56 -0
- package/lib/notes.js +91 -0
- package/lib/paths.js +45 -0
- package/lib/redact.js +46 -0
- package/lib/retention.js +203 -0
- package/lib/rows.js +39 -0
- package/lib/store.js +376 -0
- package/lib/tools.js +446 -0
- package/lib/vault.js +405 -0
- package/package.json +11 -2
package/README.md
CHANGED
|
@@ -2,24 +2,95 @@
|
|
|
2
2
|
|
|
3
3
|
**可核对的 AI 记忆。** 它记得你说过什么,而且你能核对它记对了没有。
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
> 现在安装它:能装、能卸、不写任何文件、不发任何请求(空实现)。
|
|
7
|
-
> 正式版开发中,请先不要依赖它。
|
|
5
|
+
## 八块面板
|
|
8
6
|
|
|
9
|
-
|
|
7
|
+
面板每 30 秒自己刷新一次(页面在后台时不刷,切回来立刻补一次),不用关掉重开。
|
|
10
8
|
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
9
|
+
- **我是谁** — 你交代过的、希望它一直记得的事(装好后助手会自己写一次,见下)
|
|
10
|
+
- **我要写的日记** — 给主人的 / 给自己的,可选,默认关
|
|
11
|
+
- **今天的账本** — 只记今天,打开面板前先增量回填,不差 5 分钟
|
|
12
|
+
- **我亲手写的自省** — 由模型手写,没有自动生成、没有定时任务,只显示今天;有就写,没有就不写,空着不算欠账
|
|
13
|
+
- **我对主人的承诺** — 一份本机清单
|
|
14
|
+
- **仓库(完整原文)** — 按天点开,从新到旧;每条原话旁边挂着批注,话和批注在同一条上
|
|
15
|
+
- **索引保留** — 索引按保留期归档(换个地方躺着),不删。没有「遗忘」这个功能
|
|
16
|
+
- **装着我的小盒子** — 一键打包:索引、完整原文、自省、日记、承诺、设置(放最底下,搬家才用)
|
|
15
17
|
|
|
16
|
-
##
|
|
18
|
+
## 第一次见面:它自己写「我是谁」
|
|
19
|
+
|
|
20
|
+
装好之后,助手下一次开口时系统提示里会多一段 `[留痕 · 第一次见面]`:
|
|
21
|
+
「我是谁」还空着,缺名字和一段自我介绍——这块是你自己的,不该等用户来写。
|
|
22
|
+
它调一次 `trace_intro`(`name` + `text`)就写好了,**不用你先教它你是谁**。
|
|
23
|
+
|
|
24
|
+
- 不预置人设:名字由它自己取,插件只提示、不代填
|
|
25
|
+
- 已经有内容时不覆盖;要改带 `replace: true`,旧内容先备份成 `liuhen/identity.bak-<时间>`
|
|
26
|
+
- 写的是它自己,不是你的信息;你的那部分在「关于你」,由你自己填
|
|
27
|
+
- 填完提示就消失,不会每轮都念;这段不跟注入开关绑,它是一次性设置提示
|
|
28
|
+
|
|
29
|
+
## 注入分两档
|
|
30
|
+
|
|
31
|
+
- **简洁档(默认)**:身份 + 关于你 + 日记状态 + 最近 `briefRows` 条(默认 12)。实测约 2000 字。
|
|
32
|
+
- **完整档**:按 `days` 取当天/多天全量,不裁字。实测约 5100 字,且随当天对话继续变长。
|
|
33
|
+
|
|
34
|
+
选完整档要认一件事:注入块在系统提示一侧,越长越容易挤掉有效上下文。
|
|
35
|
+
`maxChars` / `maxLines` 是兜底闸,写成大于 0 才生效(0 = 不限)。
|
|
36
|
+
|
|
37
|
+
**注入时会剥掉我复述的原文**(`inject.stripQuoted`,默认开):我旧回复里的
|
|
38
|
+
代码块、`>` 引用行、超过 10 字的 `「」`/`“”`/`『』` 长引文都不进注入,
|
|
39
|
+
只留我自己的话;用户说的话原样不动。这一层是减面,不是清零——
|
|
40
|
+
对方把话写成普通段落、我又原样抄进正文时,认不出来。
|
|
41
|
+
|
|
42
|
+
**注入了没有,有凭据。** 每次真把内容附加到系统提示,插件会写一行
|
|
43
|
+
`$DSH_HOME/liuhen/inject-state.json`:时间、字数、行数、档位,**不含内容**。
|
|
44
|
+
面板「注入」那块会显示「上一轮 07:41:真注入了 1610 字 / 12 行(简洁档)」,
|
|
45
|
+
或者「没注入——开关关着」。生成失败也会记成 `reason: "error"`,不再静默跳过。
|
|
46
|
+
|
|
47
|
+
预览不算凭据:预览走 `dryRun`,**不看开关**,关着也能预览出内容。
|
|
48
|
+
|
|
49
|
+
## 仓库(vault):索引短,仓库全
|
|
50
|
+
|
|
51
|
+
- **索引**是摘要:每条只留 200 字,快、小,用来"翻"
|
|
52
|
+
- **仓库**是原文:`$DSH_HOME/vault/<日期>.jsonl`,一行一条,不折空白、不截断
|
|
53
|
+
- 写入只有一条路:回填时顺手落一份(不双写、不另起进程,避免"索引有、仓库没有"这种不报错的错)
|
|
54
|
+
- 读取给助手三个口子:`vault_read`(某天原文)、`vault_find`(全仓库搜词)、`vault_open`(session+seq 精确取)
|
|
55
|
+
- `trace_verify` 在会话文件被清之后会退到仓库——痕迹不依赖 `sessions/` 活着
|
|
56
|
+
- **面板上点得开**:设置里「仓库」那一块,列出有哪几天、多少条、几条批注;点某天就能翻原文,20 条一页,带「更早的」
|
|
57
|
+
- **话和批注绑在一起**:一句原话上可以挂四种痕迹,各自独立、同种只挂一次
|
|
58
|
+
- `trace_feel(say, feel)` = 感受(老的 `f`/`fs` 字段照样认)
|
|
59
|
+
- `trace_ink(say, kind, text)`:`kind` 取 `hes`(犹豫)/ `why`(当时的权衡)/ `unsaid`(没说出口的)/ `feel`(感受)
|
|
60
|
+
- 存在那条记录的 `b` 数组里(`{ k, x, t }`),和原话同一条,读仓库时一起出来;面板上按颜色分开显示
|
|
61
|
+
- 没有就不挂,空着也是记录;不补历史(当时没记的,后来补就是编的)
|
|
62
|
+
- 找原话的顺序:一模一样 → 以它开头 → 包含它的最短一条(防挂到"复述自己"的那条上)
|
|
63
|
+
- 小盒子会连仓库一起打包,并把 `pet-memory/`(名字、承诺、跨会话汇总、交接信)带上;箱子里有一张 `00-读我.txt` 说明三层关系
|
|
64
|
+
- **打的时候会脱敏**(B 方案):姓名保留,生日、学校、籍贯/住址在**包里那份副本**上换成 `[已隐去]`;磁盘原件一个字不改
|
|
65
|
+
- 按日期补打:`exportBox({ date: 'YYYY-MM-DD' })` 只装那天的原文,索引截到那天
|
|
66
|
+
- ⚠️ **这个包里有完整原文**(明文)。它会复制到手机的共享目录,别的 App 读得到;`pet-memory/` 里还有个人信息。存好,别随手转出去
|
|
67
|
+
|
|
68
|
+
## 隐私
|
|
69
|
+
|
|
70
|
+
- **零网络请求**:插件自身不发起任何请求
|
|
71
|
+
- **只写本机**:`$DSH_HOME/liuhen/`,文件 600、目录 700(建目录时显式 chmod,不靠 umask)
|
|
72
|
+
- **写接口只收本机面板**:POST 必须是 `application/json` 且同源,请求体上限 1MB
|
|
73
|
+
- **仓库去重**:读的时候按 `session:seq` 去重并合并批注;`scripts/dedupe-vault.js` 可以把文件里的重复物理收掉(加 `--write` 才写)
|
|
74
|
+
- **注入可关**:自动注入默认关闭;打开前可以预览将注入什么
|
|
75
|
+
- **不删**:`retention.keepDays` 到期只归档到 `archive/`,字节一个不少;没有遗忘接口
|
|
76
|
+
- **脱敏**:手机号、邮箱、身份证、密钥、长数字串在注入与展示前替换为占位
|
|
77
|
+
- **承诺清单只认一份**:有 `pet-memory/承诺清单.md` 就用它,没有才用插件自己的 `liuhen/promises.md`
|
|
78
|
+
- 诚实的边界:**脱敏挡不住自然语言里的隐私**,它只能降低风险,不能消除
|
|
79
|
+
|
|
80
|
+
## 安装
|
|
17
81
|
|
|
18
82
|
```bash
|
|
19
83
|
dsh plugin --profile web add dsh-liuhen
|
|
20
|
-
dsh plugin --profile web remove dsh-liuhen
|
|
21
84
|
```
|
|
22
85
|
|
|
86
|
+
## 0.1.1(小更新,不是第二版)
|
|
87
|
+
|
|
88
|
+
- 面板每 30 秒自动刷新,不用关掉重开
|
|
89
|
+
- 注入记账:`liuhen/inject-state.json` + 面板显示上一轮到底注入了没有
|
|
90
|
+
- 「我是谁」第一次见面由助手自己写(新工具 `trace_intro`),面板补了名字输入框,
|
|
91
|
+
正文不再只认以 `- ` 开头的行,写好了也能再「编辑」
|
|
92
|
+
- 自检脚本修掉两处写死日期的假失败
|
|
93
|
+
|
|
23
94
|
## 许可
|
|
24
95
|
|
|
25
96
|
MIT
|