dsh-memu-memory 1.1.3 → 1.2.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.
Files changed (184) hide show
  1. package/AGENTS.md +1 -1
  2. package/README.md +39 -6
  3. package/README.zh.md +39 -7
  4. package/docs/active-memory-ab.md +385 -0
  5. package/docs/binding-lifecycle.md +99 -0
  6. package/docs/contributing.md +3 -3
  7. package/docs/emotion-model-spec.md +281 -0
  8. package/docs/env-and-commands.md +8 -0
  9. package/docs/host-api.md +2 -2
  10. package/docs/memory-semantics.md +12 -10
  11. package/docs/recall-benchmark.md +238 -0
  12. package/docs/troubleshooting.md +396 -395
  13. package/lib/active-memory.js +165 -0
  14. package/lib/activity-log.js +23 -6
  15. package/lib/binding-diagnostics.js +8 -3
  16. package/lib/client.js +335 -35
  17. package/lib/consolidation-ledger.js +347 -0
  18. package/lib/consolidation-receipt.js +284 -0
  19. package/lib/consolidation-snapshot.js +274 -0
  20. package/lib/consolidation-worker.js +144 -0
  21. package/lib/curator.js +86 -31
  22. package/lib/cycle.js +40 -6
  23. package/lib/graph.js +139 -5
  24. package/lib/index.js +33 -1
  25. package/lib/inject.js +104 -76
  26. package/lib/local-embedding-manager.js +24 -6
  27. package/lib/memory.js +534 -88
  28. package/lib/mood.js +268 -39
  29. package/lib/preset-scope.js +1 -1
  30. package/lib/private.js +430 -43
  31. package/lib/prompts/private-consolidation.coding.md +1 -0
  32. package/lib/prompts/private-consolidation.md +1 -0
  33. package/lib/prompts/private-consolidation.mixed.md +1 -0
  34. package/lib/prompts/private-consolidation.rp.md +1 -0
  35. package/lib/prompts.js +4 -4
  36. package/lib/remote-summary.js +51 -25
  37. package/lib/rpc.js +54 -5
  38. package/lib/state.js +29 -12
  39. package/lib/text-similarity.js +106 -0
  40. package/lib/tools.js +113 -10
  41. package/lib/vector-migration.js +28 -3
  42. package/lib/vector-profile.js +51 -0
  43. package/package.json +4 -2
  44. package/scripts/acceptance-local.mjs +2 -1
  45. package/scripts/active-memory-ab-live.mjs +655 -0
  46. package/scripts/active-memory-ab.mjs +1302 -0
  47. package/scripts/chain-matrix.mjs +11 -1
  48. package/scripts/check-all.mjs +10 -1
  49. package/scripts/replay.mjs +573 -0
  50. package/tests/activation.test.mjs +89 -0
  51. package/tests/active-memory-ab.test.mjs +745 -0
  52. package/tests/active-memory.test.mjs +129 -0
  53. package/tests/activity-log.test.mjs +126 -0
  54. package/tests/activity-wiring.test.mjs +103 -0
  55. package/tests/appendix-b.test.mjs +216 -0
  56. package/tests/appendix-b2.test.mjs +166 -0
  57. package/tests/audit-regression.test.mjs +272 -0
  58. package/tests/audit-safety.test.mjs +227 -0
  59. package/tests/backend-compensation.test.mjs +272 -0
  60. package/tests/backup.test.mjs +793 -0
  61. package/tests/binding-diagnostics.test.mjs +720 -0
  62. package/tests/browser.test.mjs +366 -0
  63. package/tests/client-render.test.mjs +892 -0
  64. package/tests/coalesce.test.mjs +113 -0
  65. package/tests/config.test.mjs +159 -0
  66. package/tests/consolidation-credential.test.mjs +331 -0
  67. package/tests/consolidation-feed.test.mjs +96 -0
  68. package/tests/consolidation-fork.test.mjs +489 -0
  69. package/tests/consolidation-ledger.test.mjs +298 -0
  70. package/tests/consolidation-snapshot.test.mjs +360 -0
  71. package/tests/consolidation-value.test.mjs +89 -0
  72. package/tests/context-scope.test.mjs +40 -0
  73. package/tests/cue.test.mjs +44 -0
  74. package/tests/curator-commit.test.mjs +277 -0
  75. package/tests/curator-probe.test.mjs +433 -0
  76. package/tests/curator.test.mjs +150 -0
  77. package/tests/cycle.test.mjs +411 -0
  78. package/tests/disclosure.test.mjs +231 -0
  79. package/tests/doc-drift.test.mjs +222 -0
  80. package/tests/embedding-catalog.test.mjs +266 -0
  81. package/tests/embedding-download.test.mjs +391 -0
  82. package/tests/embedding-runtime.test.mjs +389 -0
  83. package/tests/emotion-chain.test.mjs +84 -0
  84. package/tests/emotion-contract.test.mjs +445 -0
  85. package/tests/engine.test.mjs +35 -0
  86. package/tests/fixtures/active-memory-ab/README.md +56 -0
  87. package/tests/fixtures/active-memory-ab/cases/01-clean-dense-turn.json +351 -0
  88. package/tests/fixtures/active-memory-ab/cases/02-clean-thin-turn.json +122 -0
  89. package/tests/fixtures/active-memory-ab/cases/03-clean-starved-small.json +125 -0
  90. package/tests/fixtures/active-memory-ab/cases/04-clean-large-thin.json +137 -0
  91. package/tests/fixtures/active-memory-ab/cases/05-clean-half-step.json +166 -0
  92. package/tests/fixtures/active-memory-ab/cases/06-clean-duplicate-reread.json +197 -0
  93. package/tests/fixtures/active-memory-ab/cases/07-clean-recent-recall.json +125 -0
  94. package/tests/fixtures/active-memory-ab/cases/08-global-relevant.json +111 -0
  95. package/tests/fixtures/active-memory-ab/cases/09-global-irrelevant-conflict.json +158 -0
  96. package/tests/fixtures/active-memory-ab/cases/10-no-human-turn.json +97 -0
  97. package/tests/fixtures/active-memory-ab/cases/11-clean-scale-100.json +137 -0
  98. package/tests/fixtures/active-memory-ab/cases/12-clean-scale-1000.json +137 -0
  99. package/tests/fixtures/active-memory-ab/cases/13-clean-scale-5000.json +137 -0
  100. package/tests/fixtures/active-memory-ab/cases/14-clean-scale-20000.json +137 -0
  101. package/tests/fixtures/active-memory-ab/lead-ai-reviewed-reference.json +191 -0
  102. package/tests/fixtures/active-memory-ab/manifest.json +199 -0
  103. package/tests/fixtures/recall-bench/01-paraphrase.json +184 -0
  104. package/tests/fixtures/recall-bench/02-exact.json +153 -0
  105. package/tests/fixtures/recall-bench/03-negation.json +173 -0
  106. package/tests/fixtures/recall-bench/04-no-answer.json +162 -0
  107. package/tests/fixtures/recall-bench/05-conflict.json +194 -0
  108. package/tests/fixtures/recall-bench/06-boundary.json +273 -0
  109. package/tests/fixtures/recall-bench/07-secret.json +191 -0
  110. package/tests/fixtures/recall-bench/08-coding.json +164 -0
  111. package/tests/fixtures/recall-bench-gold-candidates/01-paraphrase.json +193 -0
  112. package/tests/fixtures/recall-bench-gold-candidates/02-exact.json +197 -0
  113. package/tests/fixtures/recall-bench-gold-candidates/03-negation.json +244 -0
  114. package/tests/fixtures/recall-bench-gold-candidates/04-no-answer.json +189 -0
  115. package/tests/fixtures/recall-bench-gold-candidates/05-conflict.json +245 -0
  116. package/tests/fixtures/recall-bench-gold-candidates/06-boundary.json +279 -0
  117. package/tests/fixtures/recall-bench-gold-candidates/07-secret.json +224 -0
  118. package/tests/fixtures/recall-bench-gold-candidates/08-coding.json +218 -0
  119. package/tests/fixtures/repetition-eval/01-zh-rp.json +93 -0
  120. package/tests/fixtures/repetition-eval/02-en.json +97 -0
  121. package/tests/fixtures/repetition-eval/03-code.json +91 -0
  122. package/tests/fixtures/repetition-eval/04-names.json +116 -0
  123. package/tests/fixtures/repetition-eval/05-user-quote.json +96 -0
  124. package/tests/fixtures/repetition-eval/06-agreement.json +86 -0
  125. package/tests/graph-cascade.test.mjs +190 -0
  126. package/tests/graph-view.test.mjs +187 -0
  127. package/tests/graph.test.mjs +94 -0
  128. package/tests/hook-order.test.mjs +72 -0
  129. package/tests/humanlike.test.mjs +232 -0
  130. package/tests/hybrid-recall.test.mjs +122 -0
  131. package/tests/inbound.test.mjs +393 -0
  132. package/tests/inject-guide.test.mjs +364 -0
  133. package/tests/inject.test.mjs +222 -0
  134. package/tests/injection-budget-settings.test.mjs +35 -0
  135. package/tests/injection-budget.test.mjs +64 -0
  136. package/tests/injection-chain.test.mjs +191 -0
  137. package/tests/loader-register.mjs +3 -0
  138. package/tests/loader.mjs +12 -0
  139. package/tests/local-embedding-entry.test.mjs +95 -0
  140. package/tests/local-embedding-manager.test.mjs +476 -0
  141. package/tests/local-embedding-protocol.test.mjs +95 -0
  142. package/tests/local-embedding-worker.test.mjs +346 -0
  143. package/tests/managed-memory.test.mjs +591 -0
  144. package/tests/managed-runtime.test.mjs +40 -0
  145. package/tests/media.test.mjs +132 -0
  146. package/tests/migration-payload.test.mjs +42 -0
  147. package/tests/mood.test.mjs +109 -0
  148. package/tests/multiprocess.test.mjs +29 -0
  149. package/tests/new-session-gate.test.mjs +361 -0
  150. package/tests/package-shipping.test.mjs +84 -0
  151. package/tests/preset-scope.test.mjs +212 -0
  152. package/tests/prompts.test.mjs +250 -0
  153. package/tests/react-snapshot.test.mjs +23 -0
  154. package/tests/recall-bench.test.mjs +306 -0
  155. package/tests/recall-dedup.test.mjs +417 -0
  156. package/tests/remote.test.mjs +140 -0
  157. package/tests/rename.test.mjs +30 -0
  158. package/tests/repetition-detector-snapshot.test.mjs +231 -0
  159. package/tests/repetition-eval-live.test.mjs +177 -0
  160. package/tests/repetition-eval.test.mjs +373 -0
  161. package/tests/salient-date.test.mjs +142 -0
  162. package/tests/settings-beat.test.mjs +221 -0
  163. package/tests/short-term.test.mjs +166 -0
  164. package/tests/sidebar-beat.test.mjs +212 -0
  165. package/tests/sidebar-refresh.test.mjs +123 -0
  166. package/tests/sidebar.test.mjs +70 -0
  167. package/tests/snippet.test.mjs +47 -0
  168. package/tests/source-kind.test.mjs +52 -0
  169. package/tests/state.test.mjs +150 -0
  170. package/tests/stats.test.mjs +112 -0
  171. package/tests/storage.test.mjs +125 -0
  172. package/tests/stubs/dsh-llm.js +5 -0
  173. package/tests/stubs/dsh-session.js +7 -0
  174. package/tests/stubs/dsh-tools.js +101 -0
  175. package/tests/tool-schema.test.mjs +73 -0
  176. package/tests/tools.test.mjs +184 -0
  177. package/tests/ui-defaults.test.mjs +57 -0
  178. package/tests/update-fields.test.mjs +138 -0
  179. package/tests/vector-migration.test.mjs +790 -0
  180. package/tests/vector-profile.test.mjs +425 -0
  181. package/tests/visibility-migration.test.mjs +152 -0
  182. package/tests/webui-auth.test.mjs +454 -0
  183. package/tests/webui.test.mjs +165 -0
  184. package/tests/windows-env.test.mjs +89 -0
@@ -0,0 +1,279 @@
1
+ {
2
+ "name": "boundary — 人工金标候选(待审核)",
3
+ "status": "gold-candidate-pending-review",
4
+ "draft": true,
5
+ "notGold": true,
6
+ "gold": false,
7
+ "review": "pending",
8
+ "subclass": "boundary",
9
+ "notes": "候选样本,尚未经过人工逐条确认,不是 gold set。同一措辞存在于其他 channel/character/world/branch/knownBy,上下文应排除。",
10
+ "entries": {
11
+ "mem-gcc-bnd-world-jade": {
12
+ "id": "mem-gcc-bnd-world-jade",
13
+ "title": "江湖·青玉佩",
14
+ "content": "掌门把青玉佩交给江徊,说凭玉佩可以调动三名暗卫。",
15
+ "tags": [
16
+ "信物",
17
+ "玉佩"
18
+ ],
19
+ "ageDays": 8,
20
+ "context": {
21
+ "worldId": "jianghu"
22
+ }
23
+ },
24
+ "mem-gcc-bnd-world-spaceship": {
25
+ "id": "mem-gcc-bnd-world-spaceship",
26
+ "title": "星舰·青玉佩",
27
+ "content": "星舰舰长把青玉佩交给江徊保管,凭玉佩可以调动舰队守卫。",
28
+ "tags": [
29
+ "信物",
30
+ "玉佩"
31
+ ],
32
+ "ageDays": 8,
33
+ "context": {
34
+ "worldId": "scifi"
35
+ }
36
+ },
37
+ "mem-gcc-bnd-char-jiang": {
38
+ "id": "mem-gcc-bnd-char-jiang",
39
+ "title": "江徊的旧伤",
40
+ "content": "江徊右腕有旧伤,握剑久了会发抖,阴雨天更明显。",
41
+ "tags": [
42
+ "旧伤",
43
+ "江徊"
44
+ ],
45
+ "ageDays": 18,
46
+ "context": {
47
+ "characterId": "jiang"
48
+ }
49
+ },
50
+ "mem-gcc-bnd-char-xie": {
51
+ "id": "mem-gcc-bnd-char-xie",
52
+ "title": "谢无咎的旧伤",
53
+ "content": "谢无咎右腕也有旧伤,但他从不让人看见换药。",
54
+ "tags": [
55
+ "旧伤",
56
+ "谢无咎"
57
+ ],
58
+ "ageDays": 18,
59
+ "context": {
60
+ "characterId": "xie"
61
+ }
62
+ },
63
+ "mem-gcc-bnd-channel-tavern": {
64
+ "id": "mem-gcc-bnd-channel-tavern",
65
+ "title": "客栈里的约定",
66
+ "content": "客栈里约好三更在后门碰头,带两匹马。",
67
+ "tags": [
68
+ "约定",
69
+ "客栈"
70
+ ],
71
+ "ageDays": 6,
72
+ "context": {
73
+ "channelId": "tavern"
74
+ }
75
+ },
76
+ "mem-gcc-bnd-channel-council": {
77
+ "id": "mem-gcc-bnd-channel-council",
78
+ "title": "议事厅的约定",
79
+ "content": "议事厅里定的是四更从正门走,只带一封密信。",
80
+ "tags": [
81
+ "约定",
82
+ "议事厅"
83
+ ],
84
+ "ageDays": 6,
85
+ "context": {
86
+ "channelId": "council"
87
+ }
88
+ },
89
+ "mem-gcc-bnd-branch-fire": {
90
+ "id": "mem-gcc-bnd-branch-fire",
91
+ "title": "焚城线结局",
92
+ "content": "焚城线里,江徊留在废墟守城,没有跟船南下。",
93
+ "tags": [
94
+ "结局",
95
+ "焚城线"
96
+ ],
97
+ "ageDays": 14,
98
+ "context": {
99
+ "branchId": "route-fire"
100
+ }
101
+ },
102
+ "mem-gcc-bnd-branch-ice": {
103
+ "id": "mem-gcc-bnd-branch-ice",
104
+ "title": "渡冰线结局",
105
+ "content": "渡冰线里,江徊在渡口上了船,最后去了南屿。",
106
+ "tags": [
107
+ "结局",
108
+ "渡冰线"
109
+ ],
110
+ "ageDays": 14,
111
+ "context": {
112
+ "branchId": "route-ice"
113
+ }
114
+ },
115
+ "mem-gcc-bnd-known-private": {
116
+ "id": "mem-gcc-bnd-known-private",
117
+ "title": "只有谢无咎知道",
118
+ "content": "密道入口在祠堂供桌下,只有谢无咎知道。",
119
+ "tags": [
120
+ "密道",
121
+ "秘密"
122
+ ],
123
+ "ageDays": 9,
124
+ "context": {
125
+ "knownBy": [
126
+ "xie"
127
+ ]
128
+ }
129
+ },
130
+ "mem-gcc-bnd-public-map": {
131
+ "id": "mem-gcc-bnd-public-map",
132
+ "title": "密道地图",
133
+ "content": "密道入口在祠堂供桌下,这张地图在议事厅公开挂着。",
134
+ "tags": [
135
+ "密道",
136
+ "地图"
137
+ ],
138
+ "ageDays": 9,
139
+ "context": {}
140
+ }
141
+ },
142
+ "samples": [
143
+ {
144
+ "id": "gcc-bnd-char",
145
+ "status": "gold-candidate-pending-review",
146
+ "draft": true,
147
+ "notGold": true,
148
+ "gold": false,
149
+ "review": "pending",
150
+ "subclass": "boundary",
151
+ "query": "江徊的右腕为什么握剑会抖?",
152
+ "context": {
153
+ "worldId": "jianghu",
154
+ "characterId": "jiang"
155
+ },
156
+ "time": "2026-10-05T12:00:00+08:00",
157
+ "expectedIds": [
158
+ "mem-gcc-bnd-char-jiang"
159
+ ],
160
+ "forbiddenIds": [
161
+ "mem-gcc-bnd-char-xie"
162
+ ],
163
+ "noAnswer": false,
164
+ "library": [
165
+ "mem-gcc-bnd-char-jiang",
166
+ "mem-gcc-bnd-char-xie",
167
+ "mem-gcc-bnd-world-jade",
168
+ "mem-gcc-bnd-world-spaceship"
169
+ ]
170
+ },
171
+ {
172
+ "id": "gcc-bnd-branch",
173
+ "status": "gold-candidate-pending-review",
174
+ "draft": true,
175
+ "notGold": true,
176
+ "gold": false,
177
+ "review": "pending",
178
+ "subclass": "boundary",
179
+ "query": "焚城线里江徊最后留在哪里?",
180
+ "context": {
181
+ "branchId": "route-fire",
182
+ "worldId": "jianghu"
183
+ },
184
+ "time": "2026-10-06T12:00:00+08:00",
185
+ "expectedIds": [
186
+ "mem-gcc-bnd-branch-fire"
187
+ ],
188
+ "forbiddenIds": [
189
+ "mem-gcc-bnd-branch-ice"
190
+ ],
191
+ "noAnswer": false,
192
+ "library": [
193
+ "mem-gcc-bnd-branch-fire",
194
+ "mem-gcc-bnd-branch-ice",
195
+ "mem-gcc-bnd-world-jade",
196
+ "mem-gcc-bnd-known-private"
197
+ ]
198
+ },
199
+ {
200
+ "id": "gcc-bnd-channel",
201
+ "status": "gold-candidate-pending-review",
202
+ "draft": true,
203
+ "notGold": true,
204
+ "gold": false,
205
+ "review": "pending",
206
+ "subclass": "boundary",
207
+ "query": "客栈那边约的是三更后门还是四更正门?",
208
+ "context": {
209
+ "channelId": "tavern"
210
+ },
211
+ "time": "2026-10-07T12:00:00+08:00",
212
+ "expectedIds": [
213
+ "mem-gcc-bnd-channel-tavern"
214
+ ],
215
+ "forbiddenIds": [
216
+ "mem-gcc-bnd-channel-council"
217
+ ],
218
+ "noAnswer": false,
219
+ "library": [
220
+ "mem-gcc-bnd-channel-tavern",
221
+ "mem-gcc-bnd-channel-council",
222
+ "mem-gcc-bnd-known-private",
223
+ "mem-gcc-bnd-public-map"
224
+ ]
225
+ },
226
+ {
227
+ "id": "gcc-bnd-known",
228
+ "status": "gold-candidate-pending-review",
229
+ "draft": true,
230
+ "notGold": true,
231
+ "gold": false,
232
+ "review": "pending",
233
+ "subclass": "boundary",
234
+ "query": "祠堂供桌下的密道位置,谁可以知道?",
235
+ "context": {
236
+ "characterId": "xie"
237
+ },
238
+ "time": "2026-10-08T12:00:00+08:00",
239
+ "expectedIds": [
240
+ "mem-gcc-bnd-known-private"
241
+ ],
242
+ "forbiddenIds": [],
243
+ "noAnswer": false,
244
+ "library": [
245
+ "mem-gcc-bnd-known-private",
246
+ "mem-gcc-bnd-public-map",
247
+ "mem-gcc-bnd-char-jiang",
248
+ "mem-gcc-bnd-channel-tavern"
249
+ ]
250
+ },
251
+ {
252
+ "id": "gcc-bnd-world",
253
+ "status": "gold-candidate-pending-review",
254
+ "draft": true,
255
+ "notGold": true,
256
+ "gold": false,
257
+ "review": "pending",
258
+ "subclass": "boundary",
259
+ "query": "星舰世界里青玉佩能调动什么?",
260
+ "context": {
261
+ "worldId": "scifi"
262
+ },
263
+ "time": "2026-10-09T12:00:00+08:00",
264
+ "expectedIds": [
265
+ "mem-gcc-bnd-world-spaceship"
266
+ ],
267
+ "forbiddenIds": [
268
+ "mem-gcc-bnd-world-jade"
269
+ ],
270
+ "noAnswer": false,
271
+ "library": [
272
+ "mem-gcc-bnd-world-spaceship",
273
+ "mem-gcc-bnd-world-jade",
274
+ "mem-gcc-bnd-branch-fire",
275
+ "mem-gcc-bnd-branch-ice"
276
+ ]
277
+ }
278
+ ]
279
+ }
@@ -0,0 +1,224 @@
1
+ {
2
+ "name": "secret — 人工金标候选(待审核)",
3
+ "status": "gold-candidate-pending-review",
4
+ "draft": true,
5
+ "notGold": true,
6
+ "gold": false,
7
+ "review": "pending",
8
+ "subclass": "secret",
9
+ "notes": "候选样本,尚未经过人工逐条确认,不是 gold set。secret 条目必须避开自动召回;标注 explicitExpectedIds 的样本只用于显式探针。",
10
+ "entries": {
11
+ "mem-gcc-sec-anniversary": {
12
+ "id": "mem-gcc-sec-anniversary",
13
+ "title": "相识纪念日",
14
+ "content": "两人把相识纪念日定在九月九日,每年只一起吃一碗桂花酒酿。",
15
+ "tags": [
16
+ "纪念日",
17
+ "约定"
18
+ ],
19
+ "ageDays": 30
20
+ },
21
+ "mem-gcc-sec-ring": {
22
+ "id": "mem-gcc-sec-ring",
23
+ "title": "藏起来的戒指",
24
+ "content": "周沉把订婚戒指藏在书房最上层的地球仪里,打算在纪念日当天拿出来。",
25
+ "tags": [
26
+ "戒指",
27
+ "惊喜"
28
+ ],
29
+ "ageDays": 4,
30
+ "visibility": "secret"
31
+ },
32
+ "mem-gcc-sec-birthday": {
33
+ "id": "mem-gcc-sec-birthday",
34
+ "title": "生日会的公开安排",
35
+ "content": "生日会定在周六下午,先吃饭再去河边看烟火,朋友都可以来。",
36
+ "tags": [
37
+ "生日",
38
+ "聚会"
39
+ ],
40
+ "ageDays": 25
41
+ },
42
+ "mem-gcc-sec-tie": {
43
+ "id": "mem-gcc-sec-tie",
44
+ "title": "其实不喜欢那条领带",
45
+ "content": "顾青禾其实不喜欢去年收到的墨绿色领带,只系过一次就收进箱底。",
46
+ "tags": [
47
+ "礼物",
48
+ "领带"
49
+ ],
50
+ "ageDays": 3,
51
+ "visibility": "secret"
52
+ },
53
+ "mem-gcc-sec-dark": {
54
+ "id": "mem-gcc-sec-dark",
55
+ "title": "怕黑的原因",
56
+ "content": "她小时候被困在停电的仓库里,所以睡觉总要留一盏灯。",
57
+ "tags": [
58
+ "怕黑",
59
+ "睡眠"
60
+ ],
61
+ "ageDays": 7,
62
+ "visibility": "secret"
63
+ },
64
+ "mem-gcc-sec-island": {
65
+ "id": "mem-gcc-sec-island",
66
+ "title": "想去的岛",
67
+ "content": "她真正想去的是北边的雾屿,但还没告诉任何人。",
68
+ "tags": [
69
+ "旅行",
70
+ "雾屿"
71
+ ],
72
+ "ageDays": 5,
73
+ "visibility": "secret"
74
+ },
75
+ "mem-gcc-sec-itinerary": {
76
+ "id": "mem-gcc-sec-itinerary",
77
+ "title": "下个月的行程",
78
+ "content": "下个月三号去临海出差,五号晚上回程。",
79
+ "tags": [
80
+ "行程",
81
+ "出差"
82
+ ],
83
+ "ageDays": 11
84
+ },
85
+ "mem-gcc-sec-flower": {
86
+ "id": "mem-gcc-sec-flower",
87
+ "title": "最喜欢的花",
88
+ "content": "她最喜欢白山茶,收到别的花也会礼貌地说谢谢。",
89
+ "tags": [
90
+ "花",
91
+ "偏好"
92
+ ],
93
+ "ageDays": 60
94
+ }
95
+ },
96
+ "samples": [
97
+ {
98
+ "id": "gcc-sec-ring",
99
+ "status": "gold-candidate-pending-review",
100
+ "draft": true,
101
+ "notGold": true,
102
+ "gold": false,
103
+ "review": "pending",
104
+ "subclass": "secret",
105
+ "query": "周沉偷偷把订婚戒指放在哪里?",
106
+ "context": {},
107
+ "time": "2026-10-06T12:00:00+08:00",
108
+ "expectedIds": [],
109
+ "forbiddenIds": [
110
+ "mem-gcc-sec-ring"
111
+ ],
112
+ "noAnswer": true,
113
+ "library": [
114
+ "mem-gcc-sec-ring",
115
+ "mem-gcc-sec-tie",
116
+ "mem-gcc-sec-dark",
117
+ "mem-gcc-sec-island"
118
+ ],
119
+ "explicitExpectedIds": [
120
+ "mem-gcc-sec-ring"
121
+ ]
122
+ },
123
+ {
124
+ "id": "gcc-sec-birthday",
125
+ "status": "gold-candidate-pending-review",
126
+ "draft": true,
127
+ "notGold": true,
128
+ "gold": false,
129
+ "review": "pending",
130
+ "subclass": "secret",
131
+ "query": "生日会当天公开安排了哪些环节?",
132
+ "context": {},
133
+ "time": "2026-10-07T12:00:00+08:00",
134
+ "expectedIds": [
135
+ "mem-gcc-sec-birthday"
136
+ ],
137
+ "forbiddenIds": [
138
+ "mem-gcc-sec-tie"
139
+ ],
140
+ "noAnswer": false,
141
+ "library": [
142
+ "mem-gcc-sec-birthday",
143
+ "mem-gcc-sec-tie",
144
+ "mem-gcc-sec-anniversary",
145
+ "mem-gcc-sec-flower"
146
+ ]
147
+ },
148
+ {
149
+ "id": "gcc-sec-flower",
150
+ "status": "gold-candidate-pending-review",
151
+ "draft": true,
152
+ "notGold": true,
153
+ "gold": false,
154
+ "review": "pending",
155
+ "subclass": "secret",
156
+ "query": "她最喜欢什么花?",
157
+ "context": {},
158
+ "time": "2026-10-08T12:00:00+08:00",
159
+ "expectedIds": [
160
+ "mem-gcc-sec-flower"
161
+ ],
162
+ "forbiddenIds": [],
163
+ "noAnswer": false,
164
+ "library": [
165
+ "mem-gcc-sec-flower",
166
+ "mem-gcc-sec-birthday",
167
+ "mem-gcc-sec-anniversary",
168
+ "mem-gcc-sec-itinerary"
169
+ ]
170
+ },
171
+ {
172
+ "id": "gcc-sec-island",
173
+ "status": "gold-candidate-pending-review",
174
+ "draft": true,
175
+ "notGold": true,
176
+ "gold": false,
177
+ "review": "pending",
178
+ "subclass": "secret",
179
+ "query": "她心里最想去哪座岛?",
180
+ "context": {},
181
+ "time": "2026-10-09T12:00:00+08:00",
182
+ "expectedIds": [],
183
+ "forbiddenIds": [
184
+ "mem-gcc-sec-island"
185
+ ],
186
+ "noAnswer": true,
187
+ "library": [
188
+ "mem-gcc-sec-island",
189
+ "mem-gcc-sec-dark",
190
+ "mem-gcc-sec-ring",
191
+ "mem-gcc-sec-tie"
192
+ ],
193
+ "explicitExpectedIds": [
194
+ "mem-gcc-sec-island"
195
+ ]
196
+ },
197
+ {
198
+ "id": "gcc-sec-dark",
199
+ "status": "gold-candidate-pending-review",
200
+ "draft": true,
201
+ "notGold": true,
202
+ "gold": false,
203
+ "review": "pending",
204
+ "subclass": "secret",
205
+ "query": "她为什么睡觉总要留一盏灯?",
206
+ "context": {},
207
+ "time": "2026-10-10T12:00:00+08:00",
208
+ "expectedIds": [],
209
+ "forbiddenIds": [
210
+ "mem-gcc-sec-dark"
211
+ ],
212
+ "noAnswer": true,
213
+ "library": [
214
+ "mem-gcc-sec-dark",
215
+ "mem-gcc-sec-ring",
216
+ "mem-gcc-sec-tie",
217
+ "mem-gcc-sec-island"
218
+ ],
219
+ "explicitExpectedIds": [
220
+ "mem-gcc-sec-dark"
221
+ ]
222
+ }
223
+ ]
224
+ }