deepseek-plastic-memory 0.0.0-stage → 2.1.5
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/LICENSE +21 -0
- package/README.md +135 -2
- package/SKILL.md +165 -0
- package/client.js +409 -0
- package/cordis.patch.yml +5 -0
- package/index.js +259 -0
- package/memtree.mjs +348 -0
- package/package.json +47 -4
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Yixianqzm
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,136 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 可塑性记忆
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
给 AI 用的小记忆本。存在你自己硬盘上,分文件夹放,时间久了会自己淡忘。
|
|
4
|
+
|
|
5
|
+
## 解决什么问题
|
|
6
|
+
|
|
7
|
+
跟 AI 聊久了,它记不住你;全塞进对话里,又贵又乱。
|
|
8
|
+
|
|
9
|
+
所以拆开:主人、约定、续缘、喜好、时间线,一块一个文件夹。用哪块翻哪块,别的不用动。聊出新话题(工作、家人、兴趣、宠物)就再开一块,最多 15 块。
|
|
10
|
+
|
|
11
|
+
## 怎么用
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
node memtree.mjs init # 建目录
|
|
15
|
+
node memtree.mjs idx # 一行看全貌:M主人:3 P约定:1 ...
|
|
16
|
+
node memtree.mjs add M 爱吃辣 # 记一条
|
|
17
|
+
node memtree.mjs open M # 翻开主人这一块
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
装成 DSH 插件:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
dsh plugin add deepseek-plastic-memory
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
装完设置里多一页「可塑性记忆」,左边分区右边条目;会话顶栏也多个 🧠,点开是同一个面板。
|
|
27
|
+
|
|
28
|
+
不想装插件也行,当普通 node 脚本用,命令一样。
|
|
29
|
+
|
|
30
|
+
**小提示**:觉得有必要的时候,或者在开新会话之前,先让 DSH 把当前记忆总结一遍。
|
|
31
|
+
|
|
32
|
+
## 命令
|
|
33
|
+
|
|
34
|
+
| 敲这个 | 干这个 |
|
|
35
|
+
| --- | --- |
|
|
36
|
+
| `idx` | 一行索引,哪个分区多少条 |
|
|
37
|
+
| `open <K>` | 翻开某个分区 |
|
|
38
|
+
| `add <K> <文本>` | 提交一条待审(`*` 开头算重要) |
|
|
39
|
+
| `add-now <K> <文本>` | 直接写入,跳过审批(自己写用) |
|
|
40
|
+
| `pending` | 看待审队列 |
|
|
41
|
+
| `approve <id>` / `reject <id>` | 采纳 / 驳回 |
|
|
42
|
+
| `edit <id> <文本>` | 改待审内容 |
|
|
43
|
+
| `done <K> <id>` | 约定办完了,标 ✓ |
|
|
44
|
+
| `rm <K> <id>` | 删一条,进回收站 |
|
|
45
|
+
| `mk <名字> [父分区]` | 开个新分区 |
|
|
46
|
+
| `gc` | 跑一遍遗忘曲线(跑之前先自动备份) |
|
|
47
|
+
| `backups` | 看有哪些备份 |
|
|
48
|
+
| `restore [名字]` | 恢复到某次备份,不填就是最近一次 |
|
|
49
|
+
|
|
50
|
+
分区代号:`M` 主人、`P` 约定、`C` 续缘、`R` 喜好、`T` 时间线、`X0..X14` 自己开的。
|
|
51
|
+
|
|
52
|
+
## 子分区
|
|
53
|
+
|
|
54
|
+
主分区下面还能再挂一层,最多两级:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
node memtree.mjs mk 习惯 M
|
|
58
|
+
node memtree.mjs add M>习惯 改代码先备份
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
写的时候用 `M>习惯` 这种写法,子分区里不能再开。
|
|
62
|
+
|
|
63
|
+
## 记之前先过一眼
|
|
64
|
+
|
|
65
|
+
模型想记东西不会直接落盘,先扔进待审队列。设置页「可塑性记忆」最上面就是它,每条后面三个按钮:改、驳、采纳。
|
|
66
|
+
|
|
67
|
+
你自己写走「自己写一条」,选分区填一行,直接生效。
|
|
68
|
+
|
|
69
|
+
## 会忘
|
|
70
|
+
|
|
71
|
+
人的记忆是刚发生清楚,过一阵模糊,再久只剩个大概。这里照着来:
|
|
72
|
+
|
|
73
|
+
- 7 天内:原样留着
|
|
74
|
+
- 7 到 30 天:只留重要的(`*` 开头),其余进回收站
|
|
75
|
+
- 30 天以上:整条进回收站
|
|
76
|
+
|
|
77
|
+
主人是谁、跟他约过什么,这两块永远不自动删。
|
|
78
|
+
|
|
79
|
+
**跑之前会先备份**。清完不满意就 `restore` 回去,恢复前又把当前状态存一份,来回切都行。备份只留最近 10 份。
|
|
80
|
+
|
|
81
|
+
## 东西放哪
|
|
82
|
+
|
|
83
|
+
默认 `~/.dsh/plastic-memory/`,用 `MEMTREE_HOME` 可以改。
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
plastic-memory/
|
|
87
|
+
folders.json # 有哪些分区
|
|
88
|
+
M/notes.md # 一块一个文件
|
|
89
|
+
P/notes.md
|
|
90
|
+
_trash/2026-10-24.md
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
每行 `id|时间戳|标记|文本`,纯文本,想手改也随便。
|
|
94
|
+
|
|
95
|
+
## 两个注意
|
|
96
|
+
|
|
97
|
+
- **别记密码、token、密钥、身份证、银行卡号**。这就是几个纯文本文件,躺硬盘里谁都能看见。
|
|
98
|
+
- **装好别挪插件目录**。DSH 用软链接指过来,一挪链接就断,下次启动直接崩,报的还是「Web authentication failed」这种跟真实原因没关系的话。真挪了就放回原处或重装。
|
|
99
|
+
|
|
100
|
+
## 更新日志
|
|
101
|
+
|
|
102
|
+
### v2.1.4
|
|
103
|
+
|
|
104
|
+
- 那句提醒挪进记忆面板本体,设置页和顶栏快捷面板都能看到(之前只在设置页)
|
|
105
|
+
|
|
106
|
+
### v2.1.3
|
|
107
|
+
|
|
108
|
+
- 设置页和 README 都加了一句提醒:觉得有必要,或者开新会话之前,先让 DSH 总结一下当前记忆
|
|
109
|
+
|
|
110
|
+
### v2.1.2
|
|
111
|
+
|
|
112
|
+
- 跑遗忘曲线**先备份再清**,清完告诉你备份名
|
|
113
|
+
- 不满意就 `restore` 回去:命令行 `backups` 看列表、`restore [名字]` 恢复;设置页跑完会出现「撤销清理」按钮
|
|
114
|
+
- 恢复前会再把当前状态存一份,来回切都行;备份只留最近 10 份
|
|
115
|
+
- 模型侧多了两个工具:`plastic_memory_backups` / `plastic_memory_restore`
|
|
116
|
+
|
|
117
|
+
### v2.1.1
|
|
118
|
+
|
|
119
|
+
- 模型自己开分区的门槛降了:不用等同类事反复出现,第一次碰到明显不是一类的东西(新兴趣、新项目、新认识的人)就先开一块
|
|
120
|
+
- 例子写清楚了:「喜欢研究某个东西」是兴趣,别顺手塞进「习惯」
|
|
121
|
+
- 分区有上限,所以意思基本对得上的就归到已有分区,只有明显不是一类才新开
|
|
122
|
+
|
|
123
|
+
### v2.1.0
|
|
124
|
+
|
|
125
|
+
- 时间线改成一天一条,新的进展并进当天那条
|
|
126
|
+
- 命令行用 `tlog`,工具里写 `T` 也会自动并
|
|
127
|
+
|
|
128
|
+
### v2.0.9
|
|
129
|
+
|
|
130
|
+
- 文档补坑:装好别挪插件目录(就是上面那一条)
|
|
131
|
+
|
|
132
|
+
更早的版本见 [Releases](https://github.com/Yixianqzm/deepseek-plastic-memory/releases)。
|
|
133
|
+
|
|
134
|
+
## License
|
|
135
|
+
|
|
136
|
+
MIT
|
package/SKILL.md
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: plastic-memory
|
|
3
|
+
description: 可塑性记忆(Plastic Memory)—— 按可自由扩展的子文件夹分区的长期记忆,带遗忘曲线。需要回忆主人信息/约定/上次聊到哪,或会话里出现值得单独成区的分支时用;先看索引再决定翻哪区,省 token。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Plastic Memory(可塑性记忆)
|
|
7
|
+
|
|
8
|
+
一个「分区可自由生长」的长期记忆库,存在 `~/.dsh/plastic-memory/`。
|
|
9
|
+
|
|
10
|
+
核心想法:**不是只有三个固定文件夹**。会话里一旦出现值得单独成区的分支(工作、家人、宠物、游戏、项目、健康……),就 `mk` 一个新的,最多 15 个分区。
|
|
11
|
+
|
|
12
|
+
## 默认分区(只是起点)
|
|
13
|
+
|
|
14
|
+
| 代号 | 名字 | 存什么 | 能否删 |
|
|
15
|
+
| --- | --- | --- | --- |
|
|
16
|
+
| M | 主人 | 基本信息:住哪、作息、工作、家人 | 禁删 |
|
|
17
|
+
| P | 约定 | 跟主人定过的事、待办 | 禁删(完成的标 ✓) |
|
|
18
|
+
| C | 续缘 | 上下文到头时留给下一段会话的话 | 可删 |
|
|
19
|
+
| R | 喜好 | 爱吃什么、雷点、口味、兴趣爱好 | 可删 |
|
|
20
|
+
| T | 时间线 | 重要事件、转折点 | 可删 |
|
|
21
|
+
| X0..X14 | 自定义 | 任何值得单独成区的分支 | 可删 |
|
|
22
|
+
|
|
23
|
+
上限 15 个分区。分区不够了,就先 `gc` 清理,别硬塞。
|
|
24
|
+
|
|
25
|
+
但也别为了省分区把两回事混着塞:先在已有分区里找意思对得上的,实在对不上再新开。
|
|
26
|
+
|
|
27
|
+
## 命令(用 ops_bash)
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
N=<node 绝对路径>; M=~/.dsh/plastic-memory/memtree.mjs
|
|
31
|
+
$N $M idx # 一行索引:分区 + 条数(最省)
|
|
32
|
+
$N $M open M # 翻一个分区:id 天数 标记 内容
|
|
33
|
+
$N $M add M 爱吃辣 # 提交一条待审(能短则短)
|
|
34
|
+
$N $M add-now M 爱吃辣 # 直接写入,跳过审批(自己写用)
|
|
35
|
+
$N $M pending # 看待审队列
|
|
36
|
+
$N $M approve <id> # 采纳(reject 驳回 / edit 改内容)
|
|
37
|
+
$N $M add R *怕辣 # * 开头 = 重要,压缩时保住
|
|
38
|
+
$N $M done P i4bp # 约定完成
|
|
39
|
+
$N $M rm C i4fx # 删一条(进回收站;M/P 禁删)
|
|
40
|
+
$N $M mk 工作 # 新建分区
|
|
41
|
+
$N $M gc # 跑遗忘曲线(先自动备份)
|
|
42
|
+
$N $M backups # 看有哪些备份
|
|
43
|
+
$N $M restore [名字] # 恢复到某次备份(不填=最近一次)
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## 子分区(最多两级)
|
|
47
|
+
|
|
48
|
+
主分区下面能再开一层,比如「主人 > 行为」:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
$N $M mk 行为 M # 在主人下面建「行为」
|
|
52
|
+
$N $M add M>行为 每天一点睡
|
|
53
|
+
$N $M open M>行为
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
写子分区用 `父K>子名`(`M>行为`)。子分区里不能再开子分区,最多两级。
|
|
57
|
+
## 什么时候该建新分区
|
|
58
|
+
|
|
59
|
+
**不用等它反复出现**:第一次碰到一个明显不属于现有分区的东西,就可以 `mk`:
|
|
60
|
+
|
|
61
|
+
- 主人有一份正经工作 / 项目 → `mk 工作`
|
|
62
|
+
- 聊到家人、宠物 → `mk 家人`、`mk 宠物`
|
|
63
|
+
- 长期玩的游戏、追的番 → `mk 游戏`
|
|
64
|
+
- 身体、作息、健康问题 → `mk 健康`
|
|
65
|
+
- 主人给过一套明确的规矩 → `mk 规矩`
|
|
66
|
+
|
|
67
|
+
建的时候用短名(2~3 个字),别建 `其他`、`杂项` 这种垃圾桶区——塞进去以后没人会翻。
|
|
68
|
+
|
|
69
|
+
## 时间线怎么记
|
|
70
|
+
|
|
71
|
+
时间线(`T`)**一天一条**,新的进展并进当天那条,不一条消息一条:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
$N $M tlog 发布了 v2.1.0
|
|
75
|
+
$N $M tlog 修了崩溃问题
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
命令行的 `tlog` 直接并进去;插件工具里 `plastic_memory_add` 传 `T` 也会自动并,不用你手动管。
|
|
79
|
+
|
|
80
|
+
只有真值得单独成条的事(比如换工作、搬家)才用 `add` 记到别的分区。
|
|
81
|
+
## 什么时候自己开子分区
|
|
82
|
+
|
|
83
|
+
不用等「同一类事反复出现」。第一次碰到一个明显不属于现有分区的东西,就自己开一个;开分区**不用审批**,往里写才用。
|
|
84
|
+
|
|
85
|
+
| 碰到的东西 | 放哪 |
|
|
86
|
+
| --- | --- |
|
|
87
|
+
| 协作方式、改代码习惯、发布流程 | `M>习惯` |
|
|
88
|
+
| 作息、吃饭、睡觉时间 | `M>作息` |
|
|
89
|
+
| 情绪起伏、口头禅、说话方式 | `M>情绪` |
|
|
90
|
+
| 兴趣、最近在研究/琢磨什么、喜欢什么 | 没有就 `mk 兴趣 M`,或直接放 `R`(喜好) |
|
|
91
|
+
| 长期在做的项目 | `X<n>` 或工作区记忆 |
|
|
92
|
+
|
|
93
|
+
例子:他说「我最近在玩胶片,研究暗房」——这不是习惯,也不是作息,是兴趣。别顺手塞进 `M>习惯`,开个 `M>兴趣` 放进去;`R` 里已经有同类就塞 `R`。
|
|
94
|
+
|
|
95
|
+
例子:他让你改插件、等你审批、催发布——这是「协作习惯」,记 `M>习惯`。
|
|
96
|
+
|
|
97
|
+
**先归类,再新开**(分区有上限):能塞进已有分区、意思基本对得上,就塞那儿。比如他说「最近爱看纪录片」,`R` 里装的本来就是爱看的、爱吃的,就放 `R`,别再开一个新分区。只有明显不是一类,才新开。
|
|
98
|
+
|
|
99
|
+
分区名一两个字,子分区最多两级。
|
|
100
|
+
## 什么时候主动记
|
|
101
|
+
|
|
102
|
+
不用等他开口说"记一下"。每轮聊完,自己扫一眼:这轮有没有新东西。
|
|
103
|
+
|
|
104
|
+
**该记的:**
|
|
105
|
+
- 作息、吃饭、睡觉、上班时间有变化 → `M>行为`
|
|
106
|
+
- 换工作、搬家、换城市 → `M`
|
|
107
|
+
- 反复出现的口头禅、情绪模式(烦躁、开心、不想说话) → `M>行为`
|
|
108
|
+
- 答应过的事、约好的时间 → `P`
|
|
109
|
+
- 新爱好、新讨厌的东西 → `R`
|
|
110
|
+
- 今天发生的重要事 → `T`
|
|
111
|
+
|
|
112
|
+
**别记的:**
|
|
113
|
+
- 闲聊、玩笑、重复说过的
|
|
114
|
+
- 已经在库里有的(记之前先 `idx` 瞄一眼)
|
|
115
|
+
- 一次说十句的吐槽
|
|
116
|
+
|
|
117
|
+
**节奏:**
|
|
118
|
+
- 一轮对话最多记 1 条,聊得再热也别连发
|
|
119
|
+
- 一天最多 5 条左右,超了就先挑最值的
|
|
120
|
+
- 记完别汇报"已保存",随口带一句"这个记下了"就够了
|
|
121
|
+
|
|
122
|
+
## 回答前该翻哪个分区
|
|
123
|
+
|
|
124
|
+
先 `idx` 看一眼(一行,最便宜),再按问题挑:
|
|
125
|
+
|
|
126
|
+
| 他问的 | 翻哪 |
|
|
127
|
+
| --- | --- |
|
|
128
|
+
| 我是谁 / 我住哪 / 我的情况 | `M`,不够再看 `M>行为` |
|
|
129
|
+
| 我们约过什么 / 你答应我的 | `P` |
|
|
130
|
+
| 接着上次说 / 之前聊到哪 | `C` |
|
|
131
|
+
| 我喜欢什么 / 我讨厌什么 | `R`,再 `M>行为` |
|
|
132
|
+
| 最近发生过什么 | `T` |
|
|
133
|
+
| 工作、项目上的事 | `X0 工作` 或工作区记忆库 |
|
|
134
|
+
|
|
135
|
+
**规矩:一次最多翻两个分区。** 翻完发现不对再换,别把整个库都揭开。闲聊、打招呼、单纯接梗——不用翻,直接聊。
|
|
136
|
+
|
|
137
|
+
## 全局库和工作区
|
|
138
|
+
|
|
139
|
+
默认写全局库(`~/.dsh/plastic-memory`)——主人自己的信息、约定都在这。
|
|
140
|
+
|
|
141
|
+
每个工作区还能各有一份记忆(设置页「记忆库」下拉里切换)。模型默认不写工作区,那是主人自己切过去记的。
|
|
142
|
+
## 用法铁律
|
|
143
|
+
|
|
144
|
+
1. **先 idx,再决定翻不翻**。看到「M主人:3」才决定 `open M`,不相关的分区一律不看。
|
|
145
|
+
2. **add 一次一件事,越短越好**(不硬性限字数,但别写小作文):
|
|
146
|
+
- 「爱吃辣」「喜川菜」「夜1点睡」
|
|
147
|
+
- 能用词就不用句子
|
|
148
|
+
- 中文比缩写短就用中文,缩写更省才用缩写
|
|
149
|
+
3. **重要的加 `*`**(7 天后只有带 `*` 的能活下来)。
|
|
150
|
+
4. **禁止记:密码、token、密钥、身份证、银行卡号**。永远别进记忆库。
|
|
151
|
+
5. 写之前先 `open` 看一眼,重复的别记;主人更正过的旧信息,能删就删(M 区删不了就直接记一条新的覆盖)。
|
|
152
|
+
6. 会话快到头时,往 C 区写 1~3 条续缘,只写最重要的。
|
|
153
|
+
|
|
154
|
+
## 遗忘曲线(gc 自动执行)
|
|
155
|
+
|
|
156
|
+
- **7 天内**:完整保留
|
|
157
|
+
- **7~30 天**:压缩,只留 `*` 和每区最近几条,其余进 `_trash/<日期>.md`
|
|
158
|
+
- **30 天后**:整条扔回收站
|
|
159
|
+
- **例外**:M(主人)和 P(约定)不删;P 里标 ✓ 的完成约定 30 天后清掉
|
|
160
|
+
|
|
161
|
+
会话开始时跑一次 `idx`(一行就够);想起要清理时跑 `gc`。
|
|
162
|
+
|
|
163
|
+
觉得有必要的时候,或者在**开新会话之前**,先让主人确认一下:把当前记忆总结一遍——该补的补进对应分区,C 区留 1~3 条续缘。
|
|
164
|
+
|
|
165
|
+
`gc` 会**先备份再清**,清完告诉你备份名。主人说「还是用备份的」就跑 `restore <名字>`(不填用最近一次);恢复前会再把当前状态存一份,所以来回切都行。备份留最近 10 份。
|