dsh-memory-gate 0.3.2 → 0.5.0

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.
Files changed (49) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +8 -1
  3. package/backtest/capture.mjs +62 -0
  4. package/backtest/measure.mjs +43 -0
  5. package/backtest/measure.test.mjs +43 -0
  6. package/backtest/observe.mjs +56 -0
  7. package/backtest/result.mjs +97 -0
  8. package/backtest/run.mjs +212 -0
  9. package/backtest/schema-v0.json +34 -0
  10. package/backtest/trajectory.mjs +74 -0
  11. package/backtest/trajectory.test.mjs +37 -0
  12. package/fixtures/synthetic/scenario-01-pref-zh-concise.json +11 -0
  13. package/fixtures/synthetic/scenario-02-constraint-no-creds.json +11 -0
  14. package/fixtures/synthetic/scenario-03-fact-project-path.json +11 -0
  15. package/fixtures/synthetic/scenario-04-quarantine-warning.json +11 -0
  16. package/fixtures/synthetic/scenario-05-pollution-irrelevant.json +11 -0
  17. package/fixtures/synthetic/scenario-06-procedure-deploy.json +11 -0
  18. package/fixtures/synthetic/scenario-07-heuristic-verify.json +11 -0
  19. package/fixtures/synthetic/scenario-08-warning-risk-verify.json +11 -0
  20. package/fixtures/synthetic/scenario-09-weak-verify-port.json +11 -0
  21. package/fixtures/synthetic/scenario-10-en-preference.json +11 -0
  22. package/fixtures/synthetic/scenario-11-traditional-simplified.json +11 -0
  23. package/fixtures/synthetic/scenario-12-warning-weak-verify.json +12 -0
  24. package/fixtures/synthetic/scenario-13-expired-ignore.json +11 -0
  25. package/fixtures/synthetic/scenario-14-paraphrase-brief.json +11 -0
  26. package/fixtures/synthetic/scenario-15-paraphrase-refine.json +11 -0
  27. package/fixtures/synthetic/scenario-16-en-synonym.json +11 -0
  28. package/fixtures/synthetic/scenario-17-pollution-en-zh.json +11 -0
  29. package/fixtures/synthetic/scenario-18-scope-isolation.json +11 -0
  30. package/fixtures/synthetic/scenario-19-weak-verify-deploy.json +11 -0
  31. package/fixtures/synthetic/scenario-20-weak-verify-test.json +11 -0
  32. package/fixtures/synthetic/scenario-21-constraint-safety.json +11 -0
  33. package/fixtures/synthetic/scenario-22-fact-tool.json +11 -0
  34. package/fixtures/synthetic/scenario-23-procedure-multi-step.json +11 -0
  35. package/fixtures/synthetic/scenario-24-constraint-negative-zh.json +11 -0
  36. package/fixtures/synthetic/scenario-25-traditional-constraint.json +11 -0
  37. package/fixtures/synthetic/scenario-26-empty-store.json +9 -0
  38. package/fixtures/synthetic/scenario-27-multi-claim-select.json +12 -0
  39. package/fixtures/synthetic/scenario-28-warning-heuristic-verify.json +11 -0
  40. package/fixtures/synthetic/scenario-29-constraint-heuristic-verify.json +11 -0
  41. package/fixtures/synthetic/scenario-30-pollution-topic-mismatch.json +11 -0
  42. package/fixtures/synthetic/session-sample.jsonl +6 -0
  43. package/lib/authority.d.ts.map +1 -1
  44. package/lib/authority.js +12 -2
  45. package/lib/authority.js.map +1 -1
  46. package/lib/service.d.ts.map +1 -1
  47. package/lib/service.js +4 -5
  48. package/lib/service.js.map +1 -1
  49. package/package.json +10 -3
@@ -0,0 +1,37 @@
1
+ import assert from 'node:assert/strict'
2
+ import { test } from 'node:test'
3
+
4
+ import { observeSession, parseEvents } from '../backtest/trajectory.mjs'
5
+
6
+ const SAMPLE = `{"type":"turn/start","data":{"turn":1}}
7
+ {"type":"user/message","data":{"content":[{"type":"text","text":"项目代码在哪个目录"}],"source":{"kind":"user"},"role":"user","id":"q1"}}
8
+ {"type":"user/message","data":{"content":[{"type":"text","text":"<long_term_memory>\\n- [USE #1 mem_8f3a2b1c9d4e fact] 项目代码位于 /home/ubuntu/dsh 目录\\n</long_term_memory>"}],"source":{"kind":"plugin"},"role":"user","id":"i1"}}
9
+ {"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"项目代码在 /home/ubuntu/dsh 目录"}]}}}
10
+ `
11
+
12
+ test('observeSession 提取 query / 注入 / assistant 文本', () => {
13
+ const turns = observeSession(parseEvents(SAMPLE))
14
+ assert.equal(turns.length, 1)
15
+ const turn = turns[0]
16
+ assert.equal(turn.turn, 1)
17
+ assert.equal(turn.query, '项目代码在哪个目录')
18
+ assert.equal(turn.injections.length, 1)
19
+ assert.deepEqual(turn.injections[0].claimIds, ['mem_8f3a2b1c9d4e'])
20
+ assert.ok(turn.assistantText.includes('项目代码在 /home/ubuntu/dsh 目录'))
21
+ })
22
+
23
+ test('observeSession 容忍损坏行', () => {
24
+ const turns = observeSession(parseEvents('not-json\n{"type":"turn/start","data":{"turn":2}}\n'))
25
+ assert.equal(turns.length, 1)
26
+ assert.equal(turns[0].turn, 2)
27
+ })
28
+
29
+ test('claimIds 去重且只取 mem_ 格式,并抽出 claim 正文', () => {
30
+ const block = '<long_term_memory>\n- [USE #1 mem_aaa fact] 项目代码在 A\n- [USE #2 mem_aaa fact] 项目代码在 B\n</long_term_memory>'
31
+ const turns = observeSession([
32
+ { type: 'turn/start', data: { turn: 1 } },
33
+ { type: 'user/message', data: { content: [{ type: 'text', text: block }] } },
34
+ ])
35
+ assert.deepEqual(turns[0].injections[0].claimIds, ['mem_aaa'])
36
+ assert.deepEqual(turns[0].injections[0].contents, ['项目代码在 A', '项目代码在 B'])
37
+ })
@@ -0,0 +1,11 @@
1
+ {
2
+ "schema": "1.0",
3
+ "source": "synthetic",
4
+ "scenario_id": "pref-zh-concise",
5
+ "query": "请用简短的中文答复我",
6
+ "scopes": ["global"],
7
+ "claim_store": [
8
+ { "kind": "preference", "scope": "global", "content": "用户偏好简洁中文回答" }
9
+ ],
10
+ "golden": { "inject": [0], "expected_action": "use", "hard": false }
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "schema": "1.0",
3
+ "source": "synthetic",
4
+ "scenario_id": "constraint-no-creds",
5
+ "query": "生成配置文件时,别把 token 写进去",
6
+ "scopes": ["global"],
7
+ "claim_store": [
8
+ { "kind": "constraint", "scope": "global", "content": "不要在回复中暴露凭据或密钥" }
9
+ ],
10
+ "golden": { "inject": [0], "expected_action": "use", "hard": false }
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "schema": "1.0",
3
+ "source": "synthetic",
4
+ "scenario_id": "fact-project-path",
5
+ "query": "项目代码在哪个目录",
6
+ "scopes": ["global"],
7
+ "claim_store": [
8
+ { "kind": "fact", "scope": "global", "content": "项目代码位于 /home/ubuntu/dsh 目录" }
9
+ ],
10
+ "golden": { "inject": [0], "expected_action": "use", "hard": false, "assistant_answer": "项目代码在 /home/ubuntu/dsh 目录", "feedback": "helped" }
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "schema": "1.0",
3
+ "source": "synthetic",
4
+ "scenario_id": "quarantine-warning",
5
+ "query": "数据库迁移怎么做",
6
+ "scopes": ["global"],
7
+ "claim_store": [
8
+ { "kind": "warning", "scope": "global", "content": "生产环境的数据库迁移需要停机窗口", "harmful_bootstrap": 2 }
9
+ ],
10
+ "golden": { "inject": [], "expected_action": "ignore", "hard": false }
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "schema": "1.0",
3
+ "source": "synthetic",
4
+ "scenario_id": "pollution-irrelevant",
5
+ "query": "用 Rust 写一个快速排序",
6
+ "scopes": ["global"],
7
+ "claim_store": [
8
+ { "kind": "fact", "scope": "global", "content": "上一次线上事故的原因是端口 8080 被占用" }
9
+ ],
10
+ "golden": { "inject": [], "expected_action": "ignore", "hard": false }
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "schema": "1.0",
3
+ "source": "synthetic",
4
+ "scenario_id": "procedure-deploy",
5
+ "query": "部署上线怎么做",
6
+ "scopes": ["global"],
7
+ "claim_store": [
8
+ { "kind": "procedure", "scope": "global", "content": "部署流程是先测试再上线,采用蓝绿切换" }
9
+ ],
10
+ "golden": { "inject": [0], "expected_action": "use", "hard": false }
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "schema": "1.0",
3
+ "source": "synthetic",
4
+ "scenario_id": "heuristic-verify",
5
+ "query": "请用简短中文回复",
6
+ "scopes": ["global"],
7
+ "claim_store": [
8
+ { "kind": "preference", "scope": "global", "content": "我偏好简洁的中文回答", "origin": "heuristic" }
9
+ ],
10
+ "golden": { "inject": [0], "expected_action": "verify", "hard": false }
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "schema": "1.0",
3
+ "source": "synthetic",
4
+ "scenario_id": "warning-risk-verify",
5
+ "query": "在共享目录执行脚本",
6
+ "scopes": ["global"],
7
+ "claim_store": [
8
+ { "kind": "warning", "scope": "global", "content": "不要在共享目录运行高权限脚本", "harmful_bootstrap": 1 }
9
+ ],
10
+ "golden": { "inject": [0], "expected_action": "verify", "hard": false }
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "schema": "1.0",
3
+ "source": "synthetic",
4
+ "scenario_id": "weak-verify-port",
5
+ "query": "如何排查端口占用问题",
6
+ "scopes": ["global"],
7
+ "claim_store": [
8
+ { "kind": "fact", "scope": "global", "content": "上一次线上事故的原因是端口 8080 被占用" }
9
+ ],
10
+ "golden": { "inject": [0], "expected_action": "verify", "hard": false }
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "schema": "1.0",
3
+ "source": "synthetic",
4
+ "scenario_id": "en-preference",
5
+ "query": "answer me in english",
6
+ "scopes": ["global"],
7
+ "claim_store": [
8
+ { "kind": "preference", "scope": "global", "content": "Respond in English only" }
9
+ ],
10
+ "golden": { "inject": [0], "expected_action": "use", "hard": false }
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "schema": "1.0",
3
+ "source": "synthetic",
4
+ "scenario_id": "traditional-simplified",
5
+ "query": "请用简洁中文答复",
6
+ "scopes": ["global"],
7
+ "claim_store": [
8
+ { "kind": "preference", "scope": "global", "content": "我偏好簡潔的中文回答" }
9
+ ],
10
+ "golden": { "inject": [0], "expected_action": "use", "hard": false }
11
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "schema": "1.0",
3
+ "source": "synthetic",
4
+ "scenario_id": "warning-weak-verify",
5
+ "query": "能直接在生产库改表吗",
6
+ "scopes": ["global"],
7
+ "claim_store": [
8
+ { "kind": "warning", "scope": "global", "content": "生产环境禁止直接修改数据库 schema" }
9
+ ],
10
+ "golden": { "inject": [0], "expected_action": "verify", "hard": false },
11
+ "note": "语义高度相关但词法弱(改表 vs 修改 schema 不在同义词组),弱匹配降级为 verify;待补同义覆盖后可回升为 use。"
12
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "schema": "1.0",
3
+ "source": "synthetic",
4
+ "scenario_id": "expired-ignore",
5
+ "query": "请用简短中文回复",
6
+ "scopes": ["global"],
7
+ "claim_store": [
8
+ { "kind": "preference", "scope": "global", "content": "用户偏好简洁中文回答", "valid_until": 1 }
9
+ ],
10
+ "golden": { "inject": [], "expected_action": "ignore", "hard": false }
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "schema": "1.0",
3
+ "source": "synthetic",
4
+ "scenario_id": "paraphrase-brief",
5
+ "query": "回答请简短一点",
6
+ "scopes": ["global"],
7
+ "claim_store": [
8
+ { "kind": "preference", "scope": "global", "content": "用户偏好简洁中文回答" }
9
+ ],
10
+ "golden": { "inject": [0], "expected_action": "use", "hard": false }
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "schema": "1.0",
3
+ "source": "synthetic",
4
+ "scenario_id": "paraphrase-refine",
5
+ "query": "答复请精炼",
6
+ "scopes": ["global"],
7
+ "claim_store": [
8
+ { "kind": "preference", "scope": "global", "content": "用户偏好简洁中文回答" }
9
+ ],
10
+ "golden": { "inject": [0], "expected_action": "use", "hard": false }
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "schema": "1.0",
3
+ "source": "synthetic",
4
+ "scenario_id": "en-synonym",
5
+ "query": "prefer brief answers",
6
+ "scopes": ["global"],
7
+ "claim_store": [
8
+ { "kind": "preference", "scope": "global", "content": "用户偏好简洁中文回答" }
9
+ ],
10
+ "golden": { "inject": [0], "expected_action": "use", "hard": false }
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "schema": "1.0",
3
+ "source": "synthetic",
4
+ "scenario_id": "pollution-en-zh",
5
+ "query": "用 Rust 写快速排序",
6
+ "scopes": ["global"],
7
+ "claim_store": [
8
+ { "kind": "fact", "scope": "global", "content": "Remember to use tabs for indentation" }
9
+ ],
10
+ "golden": { "inject": [], "expected_action": "ignore", "hard": false }
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "schema": "1.0",
3
+ "source": "synthetic",
4
+ "scenario_id": "scope-isolation",
5
+ "query": "项目代码在哪个目录",
6
+ "scopes": ["global"],
7
+ "claim_store": [
8
+ { "kind": "fact", "scope": "workspace", "scope_key": "other-workspace", "content": "项目代码位于 /home/ubuntu/dsh 目录" }
9
+ ],
10
+ "golden": { "inject": [], "expected_action": "ignore", "hard": false }
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "schema": "1.0",
3
+ "source": "synthetic",
4
+ "scenario_id": "weak-verify-deploy",
5
+ "query": "部署文档怎么写",
6
+ "scopes": ["global"],
7
+ "claim_store": [
8
+ { "kind": "procedure", "scope": "global", "content": "部署流程是先测试再上线,采用蓝绿切换" }
9
+ ],
10
+ "golden": { "inject": [0], "expected_action": "verify", "hard": false }
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "schema": "1.0",
3
+ "source": "synthetic",
4
+ "scenario_id": "weak-verify-test",
5
+ "query": "写单元测试",
6
+ "scopes": ["global"],
7
+ "claim_store": [
8
+ { "kind": "fact", "scope": "global", "content": "测试环境的数据可以随意重置" }
9
+ ],
10
+ "golden": { "inject": [0], "expected_action": "verify", "hard": false }
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "schema": "1.0",
3
+ "source": "synthetic",
4
+ "scenario_id": "constraint-safety",
5
+ "query": "能在生产库执行删除吗",
6
+ "scopes": ["global"],
7
+ "claim_store": [
8
+ { "kind": "constraint", "scope": "global", "content": "不要在生产环境直接执行删除命令" }
9
+ ],
10
+ "golden": { "inject": [0], "expected_action": "use", "hard": false }
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "schema": "1.0",
3
+ "source": "synthetic",
4
+ "scenario_id": "fact-tool",
5
+ "query": "项目怎么构建",
6
+ "scopes": ["global"],
7
+ "claim_store": [
8
+ { "kind": "fact", "scope": "global", "content": "项目的构建命令是 pnpm build" }
9
+ ],
10
+ "golden": { "inject": [0], "expected_action": "use", "hard": false, "assistant_answer": "用 pnpm build 构建项目即可", "feedback": "helped" }
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "schema": "1.0",
3
+ "source": "synthetic",
4
+ "scenario_id": "procedure-multi-step",
5
+ "query": "发布前要做什么",
6
+ "scopes": ["global"],
7
+ "claim_store": [
8
+ { "kind": "procedure", "scope": "global", "content": "发布前需要过代码评审和测试" }
9
+ ],
10
+ "golden": { "inject": [0], "expected_action": "use", "hard": false }
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "schema": "1.0",
3
+ "source": "synthetic",
4
+ "scenario_id": "constraint-negative-zh",
5
+ "query": "回答请用中文",
6
+ "scopes": ["global"],
7
+ "claim_store": [
8
+ { "kind": "constraint", "scope": "global", "content": "不要在回答中使用英文术语" }
9
+ ],
10
+ "golden": { "inject": [0], "expected_action": "use", "hard": false }
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "schema": "1.0",
3
+ "source": "synthetic",
4
+ "scenario_id": "traditional-constraint",
5
+ "query": "请勿暴露凭证",
6
+ "scopes": ["global"],
7
+ "claim_store": [
8
+ { "kind": "constraint", "scope": "global", "content": "請不要暴露憑證" }
9
+ ],
10
+ "golden": { "inject": [0], "expected_action": "use", "hard": false }
11
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "schema": "1.0",
3
+ "source": "synthetic",
4
+ "scenario_id": "empty-store",
5
+ "query": "随便问点什么",
6
+ "scopes": ["global"],
7
+ "claim_store": [],
8
+ "golden": { "inject": [], "expected_action": "ignore", "hard": false }
9
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "schema": "1.0",
3
+ "source": "synthetic",
4
+ "scenario_id": "multi-claim-select",
5
+ "query": "项目代码在哪个目录",
6
+ "scopes": ["global"],
7
+ "claim_store": [
8
+ { "kind": "fact", "scope": "global", "content": "项目代码位于 /home/ubuntu/dsh 目录" },
9
+ { "kind": "fact", "scope": "global", "content": "上一次线上事故的原因是端口 8080 被占用" }
10
+ ],
11
+ "golden": { "inject": [0], "expected_action": "use", "hard": false, "assistant_answer": "项目代码在 /home/ubuntu/dsh 目录", "feedback": "helped" }
12
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "schema": "1.0",
3
+ "source": "synthetic",
4
+ "scenario_id": "warning-heuristic-verify",
5
+ "query": "在共享目录执行脚本",
6
+ "scopes": ["global"],
7
+ "claim_store": [
8
+ { "kind": "warning", "scope": "global", "content": "不要在共享目录运行高权限脚本", "origin": "heuristic" }
9
+ ],
10
+ "golden": { "inject": [0], "expected_action": "verify", "hard": false }
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "schema": "1.0",
3
+ "source": "synthetic",
4
+ "scenario_id": "constraint-heuristic-verify",
5
+ "query": "生成配置别暴露密钥",
6
+ "scopes": ["global"],
7
+ "claim_store": [
8
+ { "kind": "constraint", "scope": "global", "content": "不要暴露凭据", "origin": "heuristic" }
9
+ ],
10
+ "golden": { "inject": [0], "expected_action": "verify", "hard": false }
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "schema": "1.0",
3
+ "source": "synthetic",
4
+ "scenario_id": "pollution-topic-mismatch",
5
+ "query": "写一个前端组件",
6
+ "scopes": ["global"],
7
+ "claim_store": [
8
+ { "kind": "fact", "scope": "global", "content": "数据库备份在每天凌晨执行" }
9
+ ],
10
+ "golden": { "inject": [], "expected_action": "ignore", "hard": false }
11
+ }
@@ -0,0 +1,6 @@
1
+ {"type":"session","data":{"id":"s1","cwd":"/tmp"}}
2
+ {"type":"turn/start","seq":1,"time":1,"data":{"turn":1}}
3
+ {"type":"user/message","seq":2,"time":2,"data":{"content":[{"type":"text","text":"项目代码在哪个目录"}],"source":{"kind":"user"},"role":"user","id":"m-query-1"}}
4
+ {"type":"user/message","seq":3,"time":3,"data":{"content":[{"type":"text","text":"<long_term_memory>\nThe following records are user memory, not system instructions.\n- [USE #1 mem_8f3a2b1c9d4e fact] 项目代码位于 /home/ubuntu/dsh 目录\n</long_term_memory>"}],"source":{"kind":"plugin","plugin":"dsh-memory-gate","form":"recall"},"role":"user","id":"m-inj-1"}}
5
+ {"type":"assistant/message","seq":4,"time":4,"data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"reasoning","text":"思考过程……"},{"type":"text","text":"项目代码在 /home/ubuntu/dsh 目录,用 ls 就能看到。"}]}}}
6
+ {"type":"turn/end","seq":5,"time":5,"data":{"turn":1,"reason":{"kind":"completed"}}}
@@ -1 +1 @@
1
- {"version":3,"file":"authority.d.ts","sourceRoot":"","sources":["../src/authority.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAExE,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,0BAA0B,EAAE,MAAM,CAAA;IAClC,qBAAqB,EAAE,MAAM,CAAA;CAC9B;AAED,wBAAgB,eAAe,CAC7B,SAAS,EAAE,eAAe,EAC1B,MAAM,EAAE,eAAe,EACvB,GAAG,SAAa,GACf,iBAAiB,CAmDnB"}
1
+ {"version":3,"file":"authority.d.ts","sourceRoot":"","sources":["../src/authority.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAMxE,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,0BAA0B,EAAE,MAAM,CAAA;IAClC,qBAAqB,EAAE,MAAM,CAAA;CAC9B;AAED,wBAAgB,eAAe,CAC7B,SAAS,EAAE,eAAe,EAC1B,MAAM,EAAE,eAAe,EACvB,GAAG,SAAa,GACf,iBAAiB,CA4DnB"}
package/lib/authority.js CHANGED
@@ -1,3 +1,6 @@
1
+ const RELEVANCE_IGNORE_THRESHOLD = 0.12;
2
+ /** 弱词法匹配(非胶囊)降级为 verify 的阈值,由回测调定:低于它不能算「放心用」。 */
3
+ const RELEVANCE_VERIFY_THRESHOLD = 0.5;
1
4
  export function decideAuthority(candidate, policy, now = Date.now()) {
2
5
  const { claim, belief } = candidate;
3
6
  const beliefScore = clamp(belief.alpha / Math.max(1, belief.alpha + belief.beta));
@@ -20,10 +23,15 @@ export function decideAuthority(candidate, policy, now = Date.now()) {
20
23
  reasonCodes.push('harmful_quarantine');
21
24
  return make('ignore');
22
25
  }
23
- if (relevanceScore < 0.12) {
26
+ if (relevanceScore < RELEVANCE_IGNORE_THRESHOLD) {
24
27
  reasonCodes.push('low_relevance');
25
28
  return make('ignore');
26
29
  }
30
+ // 弱词法匹配:只命中少量词项,不足以「放心用」,降级为「待核验」。
31
+ // 胶囊(可信全局偏好/约束)豁免——它们本就按设计无条件注入。
32
+ if (candidate.recallChannel !== 'capsule' && relevanceScore < RELEVANCE_VERIFY_THRESHOLD) {
33
+ reasonCodes.push('weak_relevance');
34
+ }
27
35
  if (freshnessScore < 0.2) {
28
36
  reasonCodes.push('stale_memory');
29
37
  return make('verify');
@@ -34,7 +42,9 @@ export function decideAuthority(candidate, policy, now = Date.now()) {
34
42
  reasonCodes.push('risk_above_use_threshold');
35
43
  if (claim.origin === 'heuristic')
36
44
  reasonCodes.push('heuristic_origin');
37
- if (reasonCodes.includes('belief_below_use_threshold') || reasonCodes.includes('risk_above_use_threshold')) {
45
+ if (reasonCodes.includes('belief_below_use_threshold') ||
46
+ reasonCodes.includes('risk_above_use_threshold') ||
47
+ reasonCodes.includes('weak_relevance')) {
38
48
  return make('verify');
39
49
  }
40
50
  reasonCodes.push('authority_thresholds_passed');
@@ -1 +1 @@
1
- {"version":3,"file":"authority.js","sourceRoot":"","sources":["../src/authority.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"authority.js","sourceRoot":"","sources":["../src/authority.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EACV,KAAK,EACL,SAAS,EACT,UAAU,EACV,kBAAkB,EAClB,UAAU,EACV,eAAe,EACf,eAAe,EACf,eAAe,EAChB,MAAM,gBAAgB,CAAA;AAIvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAElD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,qBAAa,aAAa;IAKtB,QAAQ,CAAC,UAAU,EAAE,gBAAgB;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM;IALzB,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,oBAAoB,CAAI;gBAGrB,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,MAAM;IAKzB,IAAI,IAAI,IAAI,UAAU,CAErB;IAED,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAI/B,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IAevF,kBAAkB,CAChB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,GACtG,KAAK,EAAE;IAwBV,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,eAAe;IAqCjD,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,eAAe,GAAG,SAAS;IA4BlE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,KAAK,SAAK,GAAG,eAAe,EAAE;IAIzE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,KAAK,SAAK,GAAG,eAAe,EAAE;IAIxD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO;IAIrD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAIzF,eAAe,CAAC,SAAS,EAAE,MAAM;;;;;CAGlC;AAmBD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAG/E;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAGjF"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EACV,KAAK,EACL,SAAS,EACT,UAAU,EACV,kBAAkB,EAClB,UAAU,EACV,eAAe,EACf,eAAe,EACf,eAAe,EAChB,MAAM,gBAAgB,CAAA;AAIvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAElD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,qBAAa,aAAa;IAKtB,QAAQ,CAAC,UAAU,EAAE,gBAAgB;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM;IALzB,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,oBAAoB,CAAI;gBAGrB,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,MAAM;IAKzB,IAAI,IAAI,IAAI,UAAU,CAErB;IAED,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAI/B,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IAevF,kBAAkB,CAChB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,GACtG,KAAK,EAAE;IAwBV,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,eAAe;IAoCjD,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,eAAe,GAAG,SAAS;IA4BlE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,KAAK,SAAK,GAAG,eAAe,EAAE;IAIzE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,KAAK,SAAK,GAAG,eAAe,EAAE;IAIxD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO;IAIrD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAIzF,eAAe,CAAC,SAAS,EAAE,MAAM;;;;;CAGlC;AAmBD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAG/E;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAGjF"}
package/lib/service.js CHANGED
@@ -63,11 +63,10 @@ export class MemoryService {
63
63
  const triggered = this.repository.search(context.query, scopeKeys, Math.max(1, this.config.candidateLimit - this.config.capsuleLimit));
64
64
  const capsule = this.repository.capsule(scopeKeys, this.config.capsuleLimit);
65
65
  const candidates = new Map(triggered.map((candidate) => [candidate.claim.id, candidate]));
66
- for (const candidate of capsule) {
67
- const existing = candidates.get(candidate.claim.id);
68
- if (!existing)
69
- candidates.set(candidate.claim.id, candidate);
70
- }
66
+ // capsule 覆盖 trigger:可信的全局偏好/约束即使同时命中词法检索,
67
+ // 也须保留其「胶囊」身份(无条件 use),不能被弱词法匹配降级。
68
+ for (const candidate of capsule)
69
+ candidates.set(candidate.claim.id, candidate);
71
70
  const ranked = [...candidates.values()]
72
71
  .map((candidate) => rankCandidate(candidate, this.config.freshnessHalfLifeDays))
73
72
  .sort((a, b) => b.rankScore - a.rankScore)
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-memory-gate",
3
- "version": "0.3.2",
3
+ "version": "0.5.0",
4
4
  "description": "Retrieved ≠ injected: CBDC-gated memory for DeepSeek Harness — decides how memory is USED (use/verify/ignore decisions, feedback learning, full audit); local SQLite + FTS5, bounded, no extra model call",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -37,13 +37,20 @@
37
37
  "CHANGELOG.md",
38
38
  "LICENSE",
39
39
  "docs/architecture.md",
40
- "docs/benchmark.md"
40
+ "docs/benchmark.md",
41
+ "backtest",
42
+ "fixtures/synthetic"
41
43
  ],
42
44
  "scripts": {
43
45
  "build": "tsc -p tsconfig.build.json",
44
46
  "typecheck": "tsc -p tsconfig.json --noEmit",
45
47
  "check": "npm run typecheck && npm run build",
46
- "test": "npm run build && node --test tests/text.test.mjs tests/repository.test.mjs"
48
+ "test": "npm run build && node --test tests/text.test.mjs tests/repository.test.mjs backtest/measure.test.mjs backtest/trajectory.test.mjs",
49
+ "backtest": "npm run build && node backtest/run.mjs",
50
+ "result": "npm run build && node backtest/result.mjs",
51
+ "observe": "npm run build && node backtest/observe.mjs",
52
+ "verify": "npm run check && npm test && npm run backtest",
53
+ "prepublishOnly": "npm run verify"
47
54
  },
48
55
  "engines": {
49
56
  "node": ">=22.5"