solopup-memory 0.23.0-beta.1 → 0.23.0-beta.2

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 CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.23.0-beta.2 — conflict-aware memory guidance
4
+
5
+ - Guide agents to compare sources, scope and time when task history and long-term memory disagree, follow explicit current user corrections, and ask when evidence is insufficient.
6
+ - Report whether `memory_search` is available to the current session; when it is unavailable or cannot be verified, do not claim a search was performed or that missing memory does not exist.
7
+ - Preserve task history and existing memory admission rules; this guidance does not erase historical copies or guarantee model behavior. Super Agent workers still require explicit worktree setup and do not have memory tools by default.
8
+ - The tested Super Agent prototype can skip preparation on retry after a failed preparation, causing a worker to start without project memory. Inspect the leftover workspace and ensure preparation reruns before retrying; this release does not fix the prototype.
9
+ - Candidate validation and release status must be verified against release artifacts; no claim of real Super Agent semantic acceptance is implied.
10
+
3
11
  ## 0.23.0-beta.1 — project memory across worktrees
4
12
 
5
13
  - Add an explicit, review-before-apply link between worktrees of the same local Git repository so a worker can use an existing project memory store. Existing independent stores are not merged or overwritten; linking is disabled until explicitly configured.
package/README.md CHANGED
@@ -101,6 +101,8 @@ node /absolute/path/to/solopup-memory/scripts/superagent-worktree.mjs --owner /a
101
101
 
102
102
  关联不会清除已发送给模型或保存在普通会话中的副本。真实模型语义质量和全部跨平台环境尚未验收。
103
103
 
104
+ 从 0.23.0-beta.2 起,记忆协议提示模型在任务历史与长期记忆不一致时核对来源、范围和时间;用户明确更正后按新要求工作,无法判断时向用户澄清。提示不能保证模型一定判断正确,也不会自动更改历史任务、清除会话副本或代替现有记忆写入审核。Worker 未配置记忆工具时,不能声称已经写入记忆。
105
+
104
106
  ## 安装与卸载
105
107
 
106
108
  使用上方[先试起来](#先试起来)的 DeepSeek Harness 官方插件管理器命令安装。代码为可直接执行的 ESM,无安装时构建脚本,也不需要 npm 账户。
package/RELEASE.md CHANGED
@@ -1,3 +1,12 @@
1
+ # 0.23.0-beta.2 — memory conflict guidance (candidate)
2
+
3
+ This candidate adds a short instruction to the existing SoloPup memory protocol: compare source, scope and time when task history and long-term memory disagree; follow a current explicit user correction; ask when the evidence is insufficient; do not silently rewrite memory from guesses or historical retellings.
4
+
5
+ The existing explicit same-repository worktree link remains opt-in. The tested Super Agent prototype does not expose memory search or write tools to workers by default. A failed prepare may be skipped on retry: inspect the leftover workspace and ensure preparation runs before retrying. This candidate does not repair that upstream behavior.
6
+
7
+ The instruction is guidance for a model, not a guarantee. It does not delete task history, old conversations, prior model requests or external copies, nor does it guarantee immediate revocation in those copies. It does not add multi-user memory support. Real-model comparison and end-to-end Super Agent acceptance must be reported separately from automated tests.
8
+
9
+ Publication status and final artifact verification are tracked by npm, GitHub Releases and release automation.
1
10
  # 0.23.0-beta.1 — project memory across worktrees
2
11
 
3
12
  This version adds opt-in, reviewed linking between worktrees of the same local Git repository. If a Super Agent prepare command fails after creating the directory, its prototype can skip preparation on retry and start the worker without the intended link; inspect the leftover directory and do not retry until preparation will run again. It does not automatically merge pre-existing project stores or link clones. Review the worktree identity, performance and recovery limits before use. G1 remains unpassed; real-model semantics and cross-platform operation have not been validated. Existing conversation or provider copies are not erased.
@@ -2,20 +2,26 @@
2
2
  export function memoryProtocol(ctx, context) {
3
3
  if (!context?.agent) return ''
4
4
  let availability = '当前工具可用性未能核对;以实际工具列表和执行结果为准。'
5
+ let searchAvailability = '当前会话 memory_search 可用性未能核对;以实际工具列表和执行结果为准,不得假称已经检索。'
5
6
  try {
6
7
  const names = ctx.tools.schemas(context.agent).map(tool => tool.name)
7
8
  availability = names.includes('memory_write')
8
9
  ? '当前会话已提供 memory_write;native 模式直接调用,PTC 模式通过 run_code 的 tools.memory_write 调用。'
9
10
  : '当前会话未提供 memory_write;明确报告工具不可用,不能声称已经保存,也不能用脚本绕过来源校验。'
11
+ searchAvailability = names.includes('memory_search')
12
+ ? '当前会话已提供 memory_search;需要时按实际工具调用方式检索。'
13
+ : '当前会话未提供 memory_search;无法检索时明确说明,不得声称已查过或据此断定记忆不存在。'
10
14
  } catch { /* Older hosts may not offer scoped schema inspection. */ }
11
15
  return [
12
16
  'SoloPup Memory 使用协议(插件指令;memory-store 内是待核对的数据)。',
13
17
  availability,
18
+ searchAvailability,
14
19
  '用户明确要求“记住/以后记得”某项持久信息时,应在本轮调用正式 memory_write 并等待结果,不等每4轮的后台整理。仅讨论“记住”一词、引用他人指令或明确说不要记录,不构成保存请求。',
15
20
  '用户本人明确陈述的生日、性别、署名、固定关系等可复用个人事实,用 type=user、scope=global、meaning.kind=claim 保存;claim 只表示本人陈述,不是独立核实。明确仅属于本项目的资料用 project 范围。',
16
21
  '助手猜测、星座推断、人格判断和对第三方动机的解释不能变成本人已确认事实;不要补入用户未在来源中说出的地点或其他细节。',
17
22
  '只在 memory_write 返回 recorded 或 duplicate 时确认已保存。pending-review 是待审,rejected/not-applied 是未保存;说明实际状态,不把调用过工具当保存成功。',
18
23
  '不要通过 bash/node 导入内部 writeMemory、stageCandidate 等函数来代替正式工具,不伪造 callHash 或来源。真实工具失败时保留错误;不要改写记忆文件绕过审查。',
19
- '跨会话回忆先核对注入索引,细节或缺失信息用 memory_search;没有依据就明确不知道,区分当前聊天推测和长期已保存资料。',
24
+ '跨会话回忆先核对注入索引,细节或缺失信息在工具可用时用 memory_search;没有依据就明确不知道,区分当前聊天推测和长期已保存资料。',
25
+ '任务历史是当时的记录,长期记忆是待核对的背景;有冲突时核对来源、适用范围和时间,遵循用户当前明确要求,明确更正后的旧内容仅作历史。证据不足时说明不确定并询问用户;不要仅凭推测或历史复述修改长期记忆。',
20
26
  ].join('\n')
21
27
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "solopup-memory",
3
- "version": "0.23.0-beta.1",
3
+ "version": "0.23.0-beta.2",
4
4
  "description": "SoloPup Memory — source-linked, layered text memory for DeepSeek Harness. Public beta.",
5
5
  "type": "module",
6
6
  "main": "index.mjs",
@@ -163,7 +163,8 @@
163
163
  "test/test-dream-plan.mjs",
164
164
  "DETECTION.md",
165
165
  "DREAMING-DESIGN.md",
166
- "test/test-dsh-registration.mjs"
166
+ "test/test-dsh-registration.mjs",
167
+ "test/test-memory-conflict-protocol.mjs"
167
168
  ],
168
169
  "engines": {
169
170
  "node": ">=24.9",
@@ -176,7 +177,7 @@
176
177
  },
177
178
  "license": "MIT",
178
179
  "scripts": {
179
- "test": "node --test --test-concurrency=4 test/test.mjs test/test-security.mjs test/test-adversarial.mjs test/test-concurrency.mjs test/test-supersede.mjs test/test-history.mjs test/test-smell.mjs test/test-links.mjs test/test-packaging.mjs test/test-patch.mjs test/test-compat.mjs test/test-conflict.mjs test/test-usability.mjs test/test-compaction-compat.mjs test/test-schema.mjs test/test-capture.mjs test/test-paired-analysis.mjs test/test-retrieval.mjs test/test-candidates.mjs test/test-publication.mjs test/test-withdrawal.mjs test/test-capture-jobs.mjs test/test-context-history.mjs test/test-capture-inputs.mjs test/test-inline-summary.mjs test/test-withdrawal-archives.mjs test/test-plugin-contract.mjs test/test-project-stores.mjs test/test-service-readiness.mjs test/test-source-key.mjs test/test-tool-inputs.mjs test/test-tool-write-lifecycle.mjs test/test-tool-write-guard.mjs test/test-source-retirement.mjs test/test-managed-access.mjs test/test-managed-activation.mjs test/test-runtime-startup.mjs test/test-capture-revision.mjs test/test-meaning.mjs test/test-episodes.mjs test/test-belief-revision.mjs test/test-tool-observations.mjs test/test-capture-diagnostics.mjs test/test-snapshots.mjs test/test-restore.mjs test/test-status-both.mjs test/test-text-admission.mjs test/test-capture-submission.mjs test/test-capture-projections.mjs test/test-capture-validation.mjs test/test-capture-validation-job.mjs test/test-capture-validation-flow.mjs test/test-capture-validation-lineage.mjs test/test-native-write-validation.mjs test/test-native-service-lifecycle.mjs test/test-field-lineage.mjs test/test-capture-field-lineage.mjs test/test-validation-transition-context.mjs test/test-control-schema.mjs test/test-revision-admission.mjs test/test-rule-admission.mjs test/test-validation-source-refs.mjs test/test-source-completeness.mjs test/test-legacy-source-identity.mjs test/test-explicit-memory.mjs test/test-privacy.mjs test/test-detect.mjs test/test-telemetry.mjs test/test-semantic-suite.mjs test/test-dream-plan.mjs test/test-dsh-registration.mjs",
180
+ "test": "node --test --test-concurrency=4 test/test.mjs test/test-security.mjs test/test-adversarial.mjs test/test-concurrency.mjs test/test-supersede.mjs test/test-history.mjs test/test-smell.mjs test/test-links.mjs test/test-packaging.mjs test/test-patch.mjs test/test-compat.mjs test/test-conflict.mjs test/test-usability.mjs test/test-compaction-compat.mjs test/test-schema.mjs test/test-capture.mjs test/test-paired-analysis.mjs test/test-retrieval.mjs test/test-candidates.mjs test/test-publication.mjs test/test-withdrawal.mjs test/test-capture-jobs.mjs test/test-context-history.mjs test/test-capture-inputs.mjs test/test-inline-summary.mjs test/test-withdrawal-archives.mjs test/test-plugin-contract.mjs test/test-project-stores.mjs test/test-service-readiness.mjs test/test-source-key.mjs test/test-tool-inputs.mjs test/test-tool-write-lifecycle.mjs test/test-tool-write-guard.mjs test/test-source-retirement.mjs test/test-managed-access.mjs test/test-managed-activation.mjs test/test-runtime-startup.mjs test/test-capture-revision.mjs test/test-meaning.mjs test/test-episodes.mjs test/test-belief-revision.mjs test/test-tool-observations.mjs test/test-capture-diagnostics.mjs test/test-snapshots.mjs test/test-restore.mjs test/test-status-both.mjs test/test-text-admission.mjs test/test-capture-submission.mjs test/test-capture-projections.mjs test/test-capture-validation.mjs test/test-capture-validation-job.mjs test/test-capture-validation-flow.mjs test/test-capture-validation-lineage.mjs test/test-native-write-validation.mjs test/test-native-service-lifecycle.mjs test/test-field-lineage.mjs test/test-capture-field-lineage.mjs test/test-validation-transition-context.mjs test/test-control-schema.mjs test/test-revision-admission.mjs test/test-rule-admission.mjs test/test-validation-source-refs.mjs test/test-source-completeness.mjs test/test-legacy-source-identity.mjs test/test-explicit-memory.mjs test/test-privacy.mjs test/test-detect.mjs test/test-telemetry.mjs test/test-semantic-suite.mjs test/test-dream-plan.mjs test/test-dsh-registration.mjs test/test-memory-conflict-protocol.mjs",
180
181
  "eval": "node eval/run-eval.mjs",
181
182
  "gate": "node eval/run-eval.mjs --check",
182
183
  "verify": "node scripts/verify.mjs",
@@ -0,0 +1,20 @@
1
+ import {test} from 'node:test'
2
+ import assert from 'node:assert/strict'
3
+ import {memoryProtocol} from '../memory-protocol.mjs'
4
+
5
+ test('conflict guidance accompanies the actual protocol with no write tool', () => {
6
+ const result = memoryProtocol({tools:{schemas:()=>[]}}, {agent:{}})
7
+ assert.match(result, /任务历史是当时的记录/)
8
+ assert.match(result, /核对来源、适用范围和时间/)
9
+ assert.match(result, /证据不足时说明不确定并询问用户/)
10
+ assert.match(result, /不能声称已经保存/)
11
+ assert.match(result, /未提供 memory_search/)
12
+ assert.match(result, /不得声称已查过/)
13
+ })
14
+ test('reports available search and unknown availability separately', () => {
15
+ assert.match(memoryProtocol({tools:{schemas:()=>[{name:'memory_search'}]}}, {agent:{}}), /已提供 memory_search/)
16
+ assert.match(memoryProtocol({}, {agent:{}}), /memory_search 可用性未能核对/)
17
+ })
18
+ test('no agent receives no protocol', () => {
19
+ assert.equal(memoryProtocol({}, {}), '')
20
+ })
package/version.mjs CHANGED
@@ -2,4 +2,4 @@
2
2
  * 版本单点。package.json 里的 version 必须与它一致,由 test-packaging.mjs 断言。
3
3
  * 打包工具不能读 ESM 常量时会回退读 package.json,所以两处都要在。
4
4
  */
5
- export const VERSION = '0.23.0-beta.1'
5
+ export const VERSION = '0.23.0-beta.2'