@istarry/dsh-assistant-profile 0.5.1 → 0.7.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 +42 -4
- package/cordis.patch.yml +2 -2
- package/lib/client.js +652 -39
- package/lib/client.js.map +1 -1
- package/lib/index.js +465 -53
- package/package.json +10 -8
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Agent助理 · dsh-assistant-profile
|
|
2
2
|
|
|
3
|
-
给 DeepSeek Harness
|
|
3
|
+
给 DeepSeek Harness 一份**全局人格**和**一份长期记忆**:名称、语言、人格提示词三段,装一次,之后每个新会话的系统提示最前面都从它开始;记忆紧跟在人格后面,聊天里点一下就能把选中的对话提炼进去。侧栏「新会话」上方会显示这份档案的助理名。
|
|
4
4
|
|
|
5
5
|
一个档案,四个模式通用(标准 / PTC / 极简 / 创造)。不需要复制预设,也不需要改模式选择器。
|
|
6
6
|
|
|
@@ -24,6 +24,43 @@ Reply in 简体中文 throughout.
|
|
|
24
24
|
- 四段全空时回落到预设原文,等于原生行为。
|
|
25
25
|
- **子智能体不注入**:委派出去的孩子保留它自己的人格。
|
|
26
26
|
|
|
27
|
+
## 助理记忆
|
|
28
|
+
|
|
29
|
+
单档案所以单记忆:一份 markdown(一行一条 `- [YYYY-MM-DD HH:mm] 内容`),随档案存在 profile 的同一份配置里,所有会话共享。
|
|
30
|
+
|
|
31
|
+
**注入位置**:`memory:assistant` 段,order 500 —— 排在人格(0)之后、工具目录(1000)之前。记忆描述的是「用户和我是什么关系」,工具说明会引用这些前提。
|
|
32
|
+
|
|
33
|
+
**三个入口**:
|
|
34
|
+
|
|
35
|
+
- **聊天里的「记住」按钮**:每条助手消息的动作行上(官方的点赞/点踩旁边)多一个 ✨。点开是一个勾选弹窗,列出这个会话里可提炼的用户/助手消息;勾选后提交,宿主用**该会话自己的模型**跑一次独立请求,把选中的对话压成几条稳定事实,逐条追加(同义条目只刷新时间戳,不重复堆积)。
|
|
36
|
+
- **设置 → Agent记忆**:两个开关(启用记忆 / 自动记忆)+ 一个编辑框。手工写、改、删都在这儿,保存即落盘。
|
|
37
|
+
- **`memory_add` 工具**:只在「启用记忆 + 自动记忆」都打开时注册,模型可以在对话中自己决定记什么。
|
|
38
|
+
|
|
39
|
+
**提炼是 fail-closed 的**:会话不在线、取不到这个会话的模型配置、模型没吐出一条可用条目,都不会写任何东西,只把原因回显在弹窗里。
|
|
40
|
+
|
|
41
|
+
### 三个实现上的坑(改这个功能前先看)
|
|
42
|
+
|
|
43
|
+
1. **宿主不能直接写自己的配置**。`Volatile` 只暴露 `get()`,写入必须经设置服务(`settings.update(ns, patch)`),它才会落进 profile 的 patch 并由加载器提交回运行时引用。
|
|
44
|
+
2. **写回要挪出 HMR 事务**。设置写入本身跑在 `hmr.runExclusive` 里,而写回结果又要经设置服务再开一个事务——直接调用会抛 `HMR transactions cannot be nested`。所以所有触发点都过一层 `setTimeout(0)`。
|
|
45
|
+
3. **设置写入不会触发 `loader/volatile-update`**(实测;值会提交进引用,但没有那次事件)。信箱因此靠 700ms 轮询:每次只读一个字符串字段,没有新请求时就是一次 JSON 判定。
|
|
46
|
+
|
|
47
|
+
因为插件目录里解析不到 `@deepseek-ai/dsh-tools` / `dsh-llm` / `dsh-session`(只有 `cordis` 由宿主提供),工具定义与提炼用的消息都按官方线上形状**手搭**,不 import 这几个包。
|
|
48
|
+
|
|
49
|
+
## 删除会话
|
|
50
|
+
|
|
51
|
+
侧栏任意会话行的「…」菜单里多一行**删除**(红色,带分隔线,排在「复制 Session ID」之后)。确认后删的是这个会话本身:
|
|
52
|
+
|
|
53
|
+
- **磁盘**:`<DSH_HOME>/sessions/<项目>/<会话 id>/` 整个目录(日志、分代文件一起),
|
|
54
|
+
- **索引**:会话查询里那一行(下次搜索不会再出现),
|
|
55
|
+
- **登记**:工作区里对这个会话的记账,
|
|
56
|
+
- **界面**:宿主发 `api-session/removed`,官方 session-controller 收到后把行从侧栏移除。
|
|
57
|
+
|
|
58
|
+
正在运行的会话会被拒绝(先停止),空闲但还开着的会话会先被摘下再删。
|
|
59
|
+
|
|
60
|
+
### 为什么不是调一个 `remove()` 就完事
|
|
61
|
+
|
|
62
|
+
这一版 harness 的 `sessionPersistence` **没有**删除方法,`locate` / `listArtifacts` 的第一个参数又是 options(里面装 `signal`)——把会话 id 传进去会走进 `signal?.throwIfAborted()`,直接把宿主带崩(实测 `fatal load failure`)。所以删除按目录布局自己做,只认 `<root>/<项目>/<会话 id>` 这一种形状;命中不到就返回「找不到」,宁可不动手。
|
|
63
|
+
|
|
27
64
|
## 改人格不会重算历史
|
|
28
65
|
|
|
29
66
|
DeepSeek 的上下文缓存是前缀缓存:系统提示在最前面,直接改写开头那条会让后面全部失效。
|
|
@@ -40,7 +77,7 @@ DeepSeek 的上下文缓存是前缀缓存:系统提示在最前面,直接
|
|
|
40
77
|
|
|
41
78
|
## 界面
|
|
42
79
|
|
|
43
|
-
-
|
|
80
|
+
- 侧栏「插件」下面多一行**Agent助理**(行序 5,夹在插件与自动化任务之间)。
|
|
44
81
|
- 点开是主区的一个页面:名称、语言、人格提示词,右下角实时字数(超过 2000 字转成提醒色)。
|
|
45
82
|
- 「保存」行左侧是人格预设:**默认一 / 默认二 / 默认三**(点击只把三段文本填进表单,落盘仍按「保存」)加「另存」出来的自定义(名字取自「名称」,胶囊右侧带小删除钮);装好默认用**默认三**,放不下横向滚动。
|
|
46
83
|
- 「新会话」按钮上方一行小字 + 首字方块显示助理名;侧栏收成 56px 图标栏时自动隐藏;改完名称保存后立刻变。
|
|
@@ -96,7 +133,8 @@ node build.mjs --check # 构建 + 依赖契约校验,不写 dist/
|
|
|
96
133
|
|
|
97
134
|
## 已知边界
|
|
98
135
|
|
|
99
|
-
-
|
|
136
|
+
- 只注入**顶层会话**,子代理不注入(记忆段是全局的,子代理读得到)。
|
|
137
|
+
- **没有远程调用**:记忆、信箱、归档全都走设置通道与配置字段,所以不需要 typert 生成物。
|
|
100
138
|
- 读不到预设定义时(注册表异常)降级为普通注入,不镜像 `complete`,也不报错。
|
|
101
139
|
- 三栏全部清空再保存 = 什么都不注入(回到原生身份句);装好时默认是默认三的内容。
|
|
102
140
|
- 侧栏名plate 是插在「新会话」按钮前的 DOM 节点(外壳没给这个位置留 slot),React 重渲染把它冲掉时会自动补回。
|
package/cordis.patch.yml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Agent助理插件:一行。
|
|
2
2
|
# 宿主半端只做一件事——每个对话 agent 创建时,在它自己的作用域里遮蔽人格那一行
|
|
3
3
|
# (`deployment:persona-prefix`),文本来自本插件的配置;四个模式自动全覆盖,
|
|
4
|
-
#
|
|
4
|
+
# 不需要复制预设、不需要动模式选择器。浏览器半端提供「Agent助理」入口、编辑页,
|
|
5
5
|
# 以及「新会话」按钮上方的助理名。
|
|
6
6
|
- insert:
|
|
7
7
|
- id: assistant-profile
|