stratagate-dsh 0.3.18 → 0.3.20
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/CHANGELOG.md +13 -0
- package/dist/client.js +6 -4
- package/dist/plugin.js +1315 -1256
- package/dist/plugin.js.map +1 -1
- package/docs/DSH.md +2 -2
- package/docs/DSH.zh-CN.md +1 -1
- package/docs/dreaming-agent.md +29 -5
- package/docs/event-extractor.md +1 -1
- package/package.json +1 -1
package/docs/DSH.md
CHANGED
|
@@ -117,8 +117,8 @@ two differences:
|
|
|
117
117
|
that thread — so no fabricated user message is ever created. Only when a session has no
|
|
118
118
|
ingested messages at all does a synthetic `agent-memory:` provenance Block get created.
|
|
119
119
|
- **Pre-write resolution.** Before writing, StrataGate searches existing memory (both pools)
|
|
120
|
-
for duplicates and conflicts.
|
|
121
|
-
|
|
120
|
+
for duplicates and conflicts. Only normalized text-identical active facts reinforce the existing card
|
|
121
|
+
without a model call. Other lexical overlap, including containment or reordered words, triggers synchronous model adjudication
|
|
122
122
|
reusing the external-memory decision contract: `ADD`, `MERGE`, `SUPERSEDE` (high confidence
|
|
123
123
|
only — low-confidence merge/supersede is downgraded to a non-destructive conflict mark),
|
|
124
124
|
`CONFLICT` (symmetric back-links), or `IGNORE`. The tool result reports `action`, `gate`,
|
package/docs/DSH.zh-CN.md
CHANGED
|
@@ -108,7 +108,7 @@ DSH_HOME/stratagate/memory.db
|
|
|
108
108
|
`memory_remember` 让 agent 主动记录值得记忆的事实:适用于特定情境的用户偏好、事实纠正、决定和持久的项目事实。记录会进入与对话派生记忆相同的长期 Event 管线,但有两点不同:
|
|
109
109
|
|
|
110
110
|
- **隔离存储。** agent 记录的 Event 存放在专属的 `agent_events` 隔离表中,数据模型与普通 Event 完全一致,但与被动对话表物理分离。其溯源直接引用**记录会话中的真实对话消息** —— 优先取 open tail 中的 user/assistant 消息,其次取该会话最新封存 Block 的消息 —— 绝不生成虚构的 user 消息。仅当会话中没有任何已摄取消息时,才会创建合成的 `agent-memory:` 溯源 Block。
|
|
111
|
-
- **写入前消解。** 写入前,StrataGate
|
|
111
|
+
- **写入前消解。** 写入前,StrataGate 会先在两个池中检索重复与冲突:只有规范化全文一致的当前有效事实直接强化既有卡片;其他词面重合(包括单向包含和词序变化)走同步模型仲裁,复用外部记忆导入的决策契约 —— `ADD`、`MERGE`、`SUPERSEDE`(仅高置信度;低置信度的合并/取代会降级为非破坏性的冲突标记)、`CONFLICT`(双向回链)或 `IGNORE`。没有仲裁器或调用失败时保留新增内容并标记冲突,不因相似度丢弃。仲裁后的并发重复检查同样只直接强化全文一致的当前有效事实。工具结果会回报 `action`、`gate` 与 `reason`。与既有记忆没有实质重叠的事实直接写入,不调用模型。
|
|
112
112
|
|
|
113
113
|
其余行为与普通 Event 一致:agent 记录会投影进 Knowledge Graph,跨会话持久保存,走同样的 turn 衰减与引用强化生命周期(`memory_assess` → `memory_record_use`),也可以通过该生命周期遗忘。检索为两个池各开一条独立的 top-k 通道 —— 被动池与 agent 池分别独立排序,再按加权 RRF 融合,任何一方都无法把另一方挤出结果窗口。agent 通道的占比由 `agentMemoryRetrievalWeight` 配置(默认 `1` = 平权;`0` = 记录保留但不再浮现;更大值提升 agent 记录的排序权重),卡片带 `source: 'agent-recorded'` 标记。记忆面板通过 `/api/stratagate/agent-memories`(查询参数 `session` 与 `includeArchived=true`)展示这些记录。可用 `agentMemoryEnabled: false` 整体关闭该功能,同时注销对应工具。
|
|
114
114
|
|
package/docs/dreaming-agent.md
CHANGED
|
@@ -11,11 +11,25 @@
|
|
|
11
11
|
| `memory_list_topics` / `memory_expand_topic` | 运行空间内目录导航与分页总览,独立 scoped 实现 |
|
|
12
12
|
| `dreaming_search` | 冻结有效 Event、其引用的原始消息及有效图谱检索 |
|
|
13
13
|
| `dreaming_read` | 完整 Event、来源 Block、图谱节点的只读分页 |
|
|
14
|
-
| `dreaming_directory` | 当前章节改名、小节改名/合并、当前批 Event
|
|
14
|
+
| `dreaming_directory` | 当前章节改名、小节改名/合并、当前批 Event 移动、带来源的总览/经验替换、追加或跨小节原子整理 |
|
|
15
15
|
| `dreaming_finish` | 确认当前批已检查;推进下一批,最终结束 |
|
|
16
16
|
|
|
17
17
|
Agent 只注册上述工具,拒绝继承的 shell、网络、文件和记忆写入工具。普通聊天工具的证据评估批次与使用反馈不复用。`dreaming_search` 使用底层检索;`dreaming_read` 使用 `renderBlock`,不调用会提升层级/改变衰减锚点的 `expandBlock`。Dreaming 系统提示词注入持久用户画像,仅作为相关偏好和长期要求的参考,不能替代目录来源证据;会话不重新摄入记忆,也不继承普通聊天的自动检索上下文。
|
|
18
18
|
|
|
19
|
+
### 概要整理操作
|
|
20
|
+
|
|
21
|
+
`set-overview {title,entries}` 只替换指定小节的全部概要,不替换整章。`append-overview` 仅用于真正新增的事实。`move-events` 只改变当前批 Event 的小节归属,不自动移动概要正文。
|
|
22
|
+
|
|
23
|
+
`rewrite-overview {titles,entries}` 原子替换所列多个已有小节的全部概要;每个 entry 必须显式指定这些小节之一作为 `title`。它支持把事实从错放的小节移到正确小节,也支持合并重复段落、更正旧表述。必须包含所列小节所有需要保留的独有内容,包括目标小节原有概要;未列出的小节保持原样。目标小节可由同一次提交前面的 `move-events` 创建。只有重排概要时也可单独调用,不要求改变 Event 归属。
|
|
24
|
+
|
|
25
|
+
例如把“旧分类”中的一段移到“新分类”,提交 `titles:["旧分类","新分类"]`,在 entries 中列出两节应保留的全部内容,把该段的 title 改为“新分类”,保留其正文和来源。移动后无需在“旧分类”留下重复正文或仅为通过校验而添加交叉索引。
|
|
26
|
+
|
|
27
|
+
替换前必须完整读取原有引用来源。Core 按所选小节新概要的来源并集检查,禁止丢失任何原有来源引用;不再要求同一个引用必须留在原小节。任一操作失败则整次提交回滚,其他步骤的改名、移动和重写也不保存。章节版本、认领和冻结来源校验保持有效。
|
|
28
|
+
|
|
29
|
+
新证据修正旧说法时,优先改写或合并旧段落,同时引用新旧来源并保留时间顺序、适用范围、仍有效的细节和不确定性;不让旧结论继续充当当前事实,再在末尾不断追加补丁。仅因材料较新不能自行裁定矛盾。单小节用 `set-overview`,跨小节用 `rewrite-overview`。这些规则在原生 Agent 与兼容的 detached 路径共用。
|
|
30
|
+
|
|
31
|
+
概要错误会附上具体 Event ID 和原因:`overview-source-not-retrieved` 表示需要完整读取,按 `nextOffset` 连续翻页;`overview-source-not-in-chapter` 表示来源属于别章,反复读取不会获得本章引用权限;`overview-source-unavailable` 表示未知、已变化或不在本轮冻结范围;`overview-source-reference-missing` 表示替换遗漏旧引用。未知小节、缺少条目 title、空来源和无效正文也分别报错。
|
|
32
|
+
|
|
19
33
|
## 持久化与并发
|
|
20
34
|
|
|
21
35
|
任务保存在既有 Topic 状态中,无新增数据库/schema 迁移。任务冻结来源版本,按章节拆成有限上下文页面。提交在 Core 现有事务内检查 run ID、owner、epoch、租约、章节版本、来源有效性和已读证据。大 Event 只有连续分页读完才进入证据集合;检查覆盖断点不依赖最近工具日志的长度。
|
|
@@ -24,19 +38,29 @@ Event 分页按递归稳定字段顺序序列化,页结果和持久断点绑
|
|
|
24
38
|
|
|
25
39
|
暂停等当前步骤到达安全边界,继续时换 epoch;终止立即取消当前请求并提升 epoch,使迟到结果无法写入。已完成写入保留。运行定期续租;崩溃后过期认领可人工继续。并发投影改变来源或章节会拒绝写入,由用户终止后重新规划。
|
|
26
40
|
|
|
41
|
+
最后一批完成后,Agent 可继续生成最终总结。此时同一 run、owner、epoch 的在途心跳只返回已完成状态,不更新时戳、不重建租约,也不取消总结;Runtime 收到完成状态后停止心跳。其他 owner、旧 epoch 和旧 run 仍被拒绝,已完成轮次仍不能写目录。
|
|
42
|
+
|
|
43
|
+
用户手动触发的 Dreaming 优先于同一记忆空间的自动目录投影。开始时立即持久化目录占用,阻止任何连接认领新的目录投影;已经认领且租约有效的投影先收尾,界面显示“等待当前后台目录整理完成”,等待期间不请求 Dreaming 模型。收尾完成、失败或租约过期后,再按最新目录冻结批次与来源,过期投影的迟到结果不能覆盖 Dreaming。其他记忆空间的目录任务照常调度。
|
|
44
|
+
|
|
45
|
+
首次目录尚未生成时,只要有有效投影正在执行,同样可以启动等待;投影收尾后重新规划。没有章节且没有有效在途投影时拒绝启动。在途投影失败或过期后若仍无章节,本轮以“暂无可整理的目录章节”完成并释放占用。等待轮询只读取最新状态;现有每 20 秒心跳续租,不按每次轮询写库。暂停、失效认领和投影结束时仍经过原事务处理状态变化。
|
|
46
|
+
|
|
47
|
+
暂停和宿主重启后保留目录占用,避免继续时目录已经被后台改写;整轮完成或用户终止后释放占用并唤醒后台任务。暂停轮次的状态会提示用户:后台目录整理等待本轮继续或终止。若其他写入仍改变冻结章节或来源,则立即暂停并标记需要重新开始;旧版本遗留的冲突轮次在继续前同样校验,不再让模型反复重读。界面隐藏该轮次的“继续”,提示终止后重新开始,已提交的修改保留。
|
|
48
|
+
|
|
27
49
|
小节身份不依赖当前标题;合并保留旧身份的别名,后续普通投影保留身份、别名和有效经验。空改动和回到近期旧状态的编辑被拒绝,不能用反复改名制造进展。
|
|
28
50
|
|
|
29
51
|
## 增长、结束与消耗
|
|
30
52
|
|
|
31
|
-
批次最多 24 个 Event,并按预计上下文容量进一步拆小;这是页面大小,不是整轮调用限额。目录页的进度按这些批次计算(例如 `1/14` 批约为 7
|
|
53
|
+
批次最多 24 个 Event,并按预计上下文容量进一步拆小;这是页面大小,不是整轮调用限额。目录页的进度按这些批次计算(例如 `1/14` 批约为 7%),不是简单按章节数计算;一个较大的章节可能拆成多个批次。Dreaming 使用原生 DSH Agent 会话,启动、恢复和切批时追加当前任务;同批后续步骤沿用对话和工具结果,不逐步替换历史,也不重复注入完整任务。相关旧总览完整提供,不设置插件自己的 4000/6000 Token 截断;历史保留和摘要压缩由宿主根据实际模型窗口管理。
|
|
54
|
+
|
|
55
|
+
流程为检查本批 Event、对照旧总览、只提交有价值的目录调整、完成本批并继续。已有覆盖时允许不修改就完成,不把同一事实的改写当成新内容追加。目录 sections/overview 页绑定内容摘要并持久记录覆盖;任务提供恢复时的已读范围,随后分页按工具返回的 nextOffset 前进。对话中的核对结论、用户方向、错误和成功结果交由宿主保留或摘要。失败写入提案另有持久化记录,不受最近 12 条诊断日志的窗口影响;恢复时提供完整提案,读取错误不再包装为失败写入。
|
|
32
56
|
|
|
33
57
|
`dreaming_finish` 表示批次已全部检查,允许无需修改;所有冻结批次完成后进入 completed。重复无效工具调用、连续无工具进展的模型步骤或失败时暂停。没有累计 token 限额,界面和控制接口不提供上限设置。内部计量保留实际模型输入结构的 token 估算和输出估算/供应商输出计数,仅用于诊断;目录页和模型任务上下文不展示消耗数字,不声称价格或账单精度。旧任务继续时在原子事务中清除历史 tokenLimit,保留任务、批次进度、证据断点与会话身份。
|
|
34
58
|
|
|
35
|
-
无进展计数在新增完整 Event
|
|
59
|
+
无进展计数在新增完整 Event 证据、推进连续有效来源页、读取经校验的目录新项或成功修改目录时重置。搜索关键词变化、空结果与重读已覆盖页均不重置;连续 12 次无进展工具调用后暂停,允许其间进行有限探索;一旦有上述有效进展,连续计数从零开始。空响应(含 `(empty)`)或普通文字回复结束但任务未完成时,在同一 Agent Loop 内提示继续;连续三次没有工具行动才暂停,不按整轮累计。复用持久化的 idleModelSteps,工具检查点或完成批次后重置;不使用后台定时重试。用户暂停、终止和真实请求错误优先于自动继续。切批消息明确上一批已完成、当前批待处理,完成全部批次后只生成总结,不再催促工具调用。
|
|
36
60
|
|
|
37
|
-
原生 Agent 在请求最终组装后的 `llm/stream`
|
|
61
|
+
原生 Agent 在请求最终组装后的 `llm/stream` 边界计量实际消息(含任务和系统提示)及 JSON 工具定义,自动继续也走相同入口,仅用于诊断。单次输出长度沿用宿主/模型配置,插件不强制 32768 Token 上限,也不按 8192 Token 的普通文本长度提前中断。模型请求错误先交给宿主原生策略处理,包括上下文溢出后的摘要压缩与恢复;宿主拒绝恢复或耗尽其恢复预算后才持久化暂停。宿主摘要请求不被计作 Dreaming 工作步骤,不干扰本批的无工具进展计数;摘要自身用量由宿主记录。没有整轮时长或累计调用次数硬限额;完成后的总结请求也计量,但不重新激活任务或租约。
|
|
38
62
|
|
|
39
|
-
目录写入使用带必需 kind 的明确参数结构,操作数组必须扁平;错误不视为成功提交,Agent 可以纠正并重新提交。暂停时不为说明原因额外调用模型,而是在原生会话写入插件通知,报告真实原因、检查批次与已保存修改。start 每次创建新 run/session;resume
|
|
63
|
+
目录写入使用带必需 kind 的明确参数结构,操作数组必须扁平;错误不视为成功提交,Agent 可以纠正并重新提交。暂停时不为说明原因额外调用模型,而是在原生会话写入插件通知,报告真实原因、检查批次与已保存修改。start 每次创建新 run/session;resume 保留本轮会话与宿主保留的历史,并追加最新任务;之前版本已经裁掉的中间结论不能凭空恢复。
|
|
40
64
|
|
|
41
65
|
每批每次继续最多允许 64 次成功目录提交,达到后在当前步骤检查点暂停并保留已写入内容。用户明确继续或进入下一批时重新计数;页数与整轮调用量不受此上限限制。无工具循环在请求发送前被拦截时,不计入模型调用次数或 Token 消耗。
|
|
42
66
|
|
package/docs/event-extractor.md
CHANGED
|
@@ -26,7 +26,7 @@ Extractor 结构化输出必须明确返回合法 scope。工具调用及文本
|
|
|
26
26
|
|
|
27
27
|
后台保留跨进程租约、调用前预留尝试、每对最多两次、60 秒退避和 30 秒外层超时。人工预览复用当前来源指纹对应的 AI 稿;无缓存时可请求草稿,失败后仍可直接填写完整稿,最终确认本身不调用模型。界面分为“需要你判断 / 等待 AI / 已处理”,支持完整标题/正文编辑、仅保留 A/B、保留两张、来源查看和手动接管。切换候选/队列会在当前页面保留最多 50 份编辑草稿;刷新不保存未提交的人工编辑。自动与人工合并均保存可恢复的逆操作;撤销会恢复原内容、历史状态及关系,有后续编辑、采用或相关投影变化时拒绝覆盖新数据。
|
|
28
28
|
|
|
29
|
-
界面逐组展示 A/B 卡片及发生日期、引语、参与者和来源。用户先选主卡,再选择“合并双方内容”或“只保留所选卡”,预览保留/归档对象、日期和证据去向后确认。日期或事实存在差异时可由用户核对完整稿后合并,不确定时保留两张。superseded 历史卡可在人工确认后补入当前有效卡:默认推荐当前卡作为主卡,完整标题和正文必须经 AI
|
|
29
|
+
界面逐组展示 A/B 卡片及发生日期、引语、参与者和来源。用户先选主卡,再选择“合并双方内容”或“只保留所选卡”,预览保留/归档对象、日期和证据去向后确认。日期或事实存在差异时可由用户核对完整稿后合并,不确定时保留两张。superseded 历史卡可在人工确认后补入当前有效卡:默认推荐当前卡作为主卡,完整标题和正文必须经 AI 起草或人工编辑后提交;旧卡归档且保留原文、来源及时间链,双方证据汇入当前卡,当前卡结构化日期和状态不变,外部关联不改写。旧卡即使指向第三个版本,也可在人工确认的完整稿中作为来源,原后继指针保留;将被归档的卡已置顶或已作为其他合并的原始证据时,拒绝并显示具体原因。用户仍可显式二选一(恢复历史卡前单独提示影响):所选卡设为 active,另一张归档,内容、采用权重、原始来源和历史引用均不混合、不改写;不额外排入模型投影任务。置顶副卡、已合并来源和过期指纹仍受保护。归档卡已有的 supersededBy 保留,只有原来没有后继时才指向所选卡;显式恢复被选历史卡时将其设为 active 并清除自身后继,这是用户选择恢复的状态转换,不改写第三张卡。中断恢复复用已持久化逆操作核对归档结果,不把后继指针当作人工选择的唯一凭据。人工选择独立记为 selected,不冒充 merged;归档 agent 卡可通过显式来源页面查看证据。撤销后回到“需要你判断”并定位刚恢复的候选,避免跳到无关卡片。
|
|
30
30
|
|
|
31
31
|
存储 schema 13 通过独立 event_merge_sources 表记录 mergedFromEventIds;普通卡继续采用单来源边界,合并卡的额外消息必须来自可追溯的归档原卡。schema 12 可只读查看并无损升级,旧插件会拒绝打开更高存储版本。撤销外部导入时,若其证据已参与合并则拒绝整批删除,避免破坏其他来源。narrative 是已退役的 Event 字段,现存正文在 summary;合并不生成或改写事实正文。
|
|
32
32
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "stratagate-dsh",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.20",
|
|
4
4
|
"description": "Recent conversations stay vivid. Older ones fade into summaries, not oblivion. StrataGate gives DeepSeek Harness six-layer, time-decaying memory, while lasting events and relationships settle into a knowledge graph. Bring your memories from other AIs with you—no need to start over.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|