运行时事件
用户消息、工具参数、工具结果、错误、可见回复、用户纠正、session 生命周期。
当前维护链使用原生 systemPrompt.section() 保存稳定规则、systemPrompt.context() 生成易变快照;未来主动联想层才由关联引擎和 Injection Broker 把候选变成 MemoryPacket。
用户消息、工具参数、工具结果、错误、可见回复、用户纠正、session 生命周期。
按 sessionId 收集事件,切成语义片段,推进 contextVersion 和滑动窗口。
范围、时间、实体、关键词、embedding、关联图和置信度组成候选排序。
冷却、TTL、冲突、风险、预算、能力协商和 MemoryPacket 版本校验。
当前在原生 pre-step 边界合并 runtime-context snapshot;未来再合并经过校验的 MemoryPacket。
不要把“记忆类型”“持久范围”“运行时状态”和“注入策略”混成一个对象。每层都有自己的所有者、输入、输出和失败回退。
原生 Cordis 配置把跨会话共享的服务放在 Host composition,把单会话的 persona、工具和 prompt 贡献放在 Agent preset。主动记忆应沿用这个边界。
负责所有需要跨 session 复用或在 Agent 创建前就存在的能力。
负责某一个会话实际看到的工具、动态消息和工作状态。
当前 dsh-auto-memory 维护链使用 systemPrompt.section() 与 systemPrompt.context();DSH 在 assemble 后由 RuntimeContextProjection 按完整快照去重、替换或清除。dsh-agent-instructions 的 durable user/message inbox 是未来 MemoryPacket 的参考骨架,不是当前 runtime-context 的实现,也不应把两者复制成重复消息。
当前路径是 native runtime-context projection;下方的检索、Broker 和 MemoryPacket 是后续主动联想路径。Level 3 的流式中断续写不进入默认路径。
onAgentPreStep(agent):
claimed = agent.inbox.claim(target, turn)
assembly = await systemPrompt.assemble(agent)
sections = renderContextSections(assembly)
snapshot = agent.runtimeContext.project(joinContextSections(sections), sections)
decision = waterfall({ messages: claimed, turn, step }, () =>
enter(snapshot ? [...claimed, snapshot] : claimed))
return { decision, assembly }
// Future active path only:
onObservableEvent(event):
candidates = association.search(session.contextRing, version)
packet = broker.decide(candidates, session.runtimeState)
if (packet): session.pendingInbox.replace(packet)
// Current runtime snapshot and future packet are separate surfaces.理论类型参考 CoALA;持久范围和生命周期是工程维度。它们必须正交建模。
当前目标、上下文片段、未解决事项、最近工具结果和待注入 packet。容量有限,随任务变化淘汰。
带时间、来源、动作、结果和失败证据的事件。适合复盘和后续抽取,不直接当成稳定事实。
去重后的项目事实、决策、环境约束和稳定偏好。冲突双方保留,明确来源和确认状态。
经过多次独立成功和明确验收条件验证的流程、技能或检查清单。高风险动作仍需确认。
术语、缩写、别名、用户惯用表达。用于改善检索和实体对齐,不应自动等同于用户偏好。
现有 MEMORY.md、项目笔记、日志和反思继续作为用户可读、可编辑、可恢复的持久层。
结构化 sidecar 负责未来主动检索的运行时索引和状态;Markdown 负责可读投影。当前动态维护快照由原生 systemPrompt.context() 提供,任何异步结果都必须带版本,避免旧联想污染新上下文。
{
"sessionId": "session_x",
"contextVersion": 42,
"segments": [
{
"role": "user",
"kind": "request",
"text": "修复记忆注入逻辑"
},
{
"role": "tool",
"kind": "error",
"tool": "test",
"text": "测试失败:..."
},
{
"role": "assistant",
"kind": "visible_output",
"text": "正在检查 pre-step..."
}
]
}{
"id": "mem_001",
"type": "episodic",
"scope": "workspace",
"content": "某次测试失败后先验证 provider",
"source": "tool_result",
"provenance": ["turn_12", "tool:test"],
"confidence": 0.78,
"salience": 0.72,
"ttlMs": 604800000,
"status": "candidate",
"embeddingVersion": "v1",
"conflicts": [],
"revoked": false
}{
"source": "systemPrompt.context()",
"surface": "durable user-role snapshot",
"state": "retained-on-same-text | replaced-on-change | cleared",
"dedupe": "full snapshot text",
"note": "Current runtime context. This snapshot supersedes earlier runtime-context snapshots."
}{
"packetId": "packet_042",
"sessionId": "session_x",
"contextVersion": 42,
"reason": "当前工具错误与历史验证流程高度相关",
"mode": "soft",
"expiresAfterStep": 44,
"items": [{
"memoryId": "procedure_017",
"content": "先检查 provider 配置,再验证 wire 参数",
"similarity": 0.87,
"confidence": 0.91,
"source": "workspace-procedure"
}]
}语义相似度决定“什么记忆被想起”;认知负荷或运行时异常决定“以多强形式介入”。不能要求模型先表现出困难,记忆才允许出现。
当前上下文与某条记忆的关系:语义相似、实体重合、工作区匹配、近期性、显著性、成功复用和新颖性。
工具错误、重试、重复动作、目标漂移、未解决时长、用户纠正、锚定监控波段。它只调整介入强度。
缓存候选,等待下一次自然请求边界,避免打断。
下一步注入一行相关提示,提醒模型核验。
注入步骤摘要、验证点和已知失败条件。
相关性不够时不增加噪声,宁可等待新事件。
原生 DSH 只加载 JS 插件。Python 作为可选、长期运行、由 JS 管理的 sidecar,不能直接注册 DSH 工具或修改模型上下文。
apply(ctx)、tools、routes、systemPrompt、pre-step、session 隔离、MemoryPacket、超时、回退、审计和子进程清理。
embedding、向量检索、关联图、reranker、衰减、聚类和评测。只收发可序列化 JSON。
{
"requestId": "req_042",
"sessionId": "session_x",
"contextVersion": 42,
"segments": [{
"role": "tool",
"kind": "error",
"text": "测试失败:..."
}]
}
// Python response
{
"requestId": "req_042",
"contextVersion": 42,
"candidates": [{
"memoryId": "procedure_017",
"similarity": 0.87,
"confidence": 0.91
}]
}不按模型名称猜能力。每个 Provider / model / version 通过 adapter 声明能力;可见 reasoning 始终是低信任观察信号。
| 能力 | Opaque / 闭源 | Summary | Full-visible | 记忆系统的处理 |
|---|---|---|---|---|
| reasoningVisibility | none | summary | full | 只作为可选短期片段,不能单独证明事实或意图。 |
| 可观测事件 | 用户 / 工具 / 输出 | 同左 + 摘要 | 同左 + trace | 核心系统必须在没有 reasoning 时仍可工作。 |
| runtimeContext | preset-dependent | preset-dependent | preset-dependent | 原生 systemPrompt.context() 由 includeRuntimeContext 控制;相同完整快照不重复追加。 |
| packetPatch | future pre-step | future pre-step | future pre-step | 未来 MemoryPacket 才使用 Inbox / user-message;已发请求不能原地改写。 |
| abortAndResume | 默认 false | 默认 false | 实验 | 高阈值、冷却、副作用保护,默认关闭。 |
{
"reasoningVisibility": "none | summary | full | unknown",
"toolEvents": true,
"streamChunks": true,
"runtimeContext": "native | none",
"packetPatch": "pre-step | user-message | none",
"abortAndResume": false
}一次成功不是技能,三次重复也不是技能。技能必须拥有成功标准、工具证据、风险等级和回滚路径。
跨独立 session 的成功结果、测试结果或用户确认。
候选技能只能作为建议,不能自动调用危险工具。
技能变更保留旧版本、失败记录和撤销入口。
项目技能不能无条件升级为用户级行为。
每阶段都可独立关闭和回滚。先保证 session 边界,再让语义算法进入注入链路。
固定当前行为,验证 systemPrompt.section() / systemPrompt.context() projection、会话隔离和 prompt budget;MemoryPacket schema 仍只作未来设计基线。
Map<sessionId, runtime>,隔离 working、ring、队列、冷却。
统一接收用户、工具、可见输出和生命周期事件,推进版本。
关键词、实体、范围、时间衰减排序,暂不影响模型行为。
MemoryPacket、预算、TTL、冷却、重复抑制和审计。
复用 durable Inbox / pre-step merge,把经过版本、预算和安全门校验的高置信短提示送入下一步;当前维护快照不走此阶段。
embedding、向量检索、关联图;JS 保留超时和关键词回退。
自动抽取先进入 candidate,事实、偏好、术语分开。
Observed → Candidate → Validated → Active → Deprecated。
公开 trace 和锚定信号只作为低信任辅助;闭源模型正常退化。
只有在取消、重放和副作用保护可靠时评估,默认关闭。
Working Memory、packet 和上下文 ring 不跨 session。
注入内容是参考资料,不能覆盖 system、developer 或当前用户指令。
contextVersion 不匹配、TTL 超时、冲突或撤销后不能注入。
Python、embedding、图检索失败不影响 DSH 基础对话和关键词回退。
这些来源解决的是不同问题。它们是可借鉴的积木,不应被误写成已经实现了本项目的完整 Host 主动能力。
Working / episodic / semantic / procedural 的认知架构骨架。
Memory stream、relevance、recency、importance、reflection。
长期对话记忆、衰减、强化与巩固。
主上下文、core、recall、archival 与状态化运行时。
动态链接记忆节点、图关系和扩散式关联检索。
结果驱动的情景经验和经过环境验证的技能库。
独立于模型的 Memory OS 和多类型 Memory Manager。
长期交互记忆、时间推理、知识更新和长会话基准。
公开 reasoning 不是完整、忠实的内部状态。
Host composition、Minimal 双工具 preset、原生生命周期和工具注册。
结构化 fs touch、digest 去重、per-agent inbox、pre-step merge。
把原生动态注入骨架扩展为 Host 主动联想记忆中间件。