@jjh32456/dsh-longlive 1.6.7 → 1.8.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 (289) hide show
  1. package/CHANGELOG.md +70 -1508
  2. package/LICENSE +1 -1
  3. package/QUICKSTART.md +34 -13
  4. package/README.en.md +18 -7
  5. package/README.md +34 -9
  6. package/SPEC.md +5 -5
  7. package/cordis.patch.yml +23 -9
  8. package/docs/ANSWER-GUARD.md +92 -0
  9. package/docs/ARCHITECTURE.md +4 -3
  10. package/docs/AUTO-RECALL-WIRING.md +1 -1
  11. package/docs/AUTO-RECALL.md +15 -9
  12. package/docs/CONFIG.md +168 -35
  13. package/docs/ERRORS.md +17 -5
  14. package/docs/FAQ.md +7 -7
  15. package/docs/FEATURES.md +96 -28
  16. package/docs/MIGRATION-1.6.0.md +2 -2
  17. package/docs/OPERATIONS.md +6 -6
  18. package/docs/PANEL-INTEGRATION.md +6 -0
  19. package/docs/PRIVACY.md +88 -0
  20. package/docs/QUICKSTART.md +5 -5
  21. package/docs/README.en.md +4 -2
  22. package/docs/RESIDENT-WATCHER.md +1 -1
  23. package/docs/SESSION-WATCH.md +6 -6
  24. package/docs/TROUBLESHOOTING.md +4 -4
  25. package/package.json +47 -117
  26. package/runbook.md +2 -2
  27. package/scripts/backfill-auto-cards.mjs +98 -0
  28. package/scripts/install-surgery-task.ps1 +5 -2
  29. package/scripts/lib/session-watch-fixture.mjs +1 -1
  30. package/scripts/longlive-doctor.mjs +6 -0
  31. package/scripts/migrate-180.mjs +163 -0
  32. package/scripts/recall-index-build.mjs +128 -0
  33. package/scripts/session-watch-drill.mjs +1 -1
  34. package/scripts/surgery-run.cmd +1 -1
  35. package/scripts/unattended-surgery.ps1 +5 -2
  36. package/scripts/verify-card-anchors.mjs +138 -0
  37. package/src/actions/audit.js +125 -0
  38. package/src/actions/evidence.js +122 -0
  39. package/src/actions/fs.js +162 -0
  40. package/src/activity/index.js +760 -0
  41. package/src/activity/model.js +351 -0
  42. package/src/activity/store.js +644 -0
  43. package/src/activity/thinking.js +176 -0
  44. package/src/adapters/constants.js +11 -0
  45. package/src/adapters/engram/data/aliases.json +51 -0
  46. package/src/adapters/engram/data/policy.json +8 -0
  47. package/src/adapters/engram/data/routing-rules.json +546 -0
  48. package/src/adapters/engram/index.js +235 -0
  49. package/src/adapters/registry.js +315 -0
  50. package/src/answer/audit.js +193 -0
  51. package/src/answer/evidence.js +30 -0
  52. package/src/answer/guard.js +1370 -0
  53. package/src/answer/index.js +1067 -0
  54. package/src/answer/query.js +111 -0
  55. package/src/answer/second-hop.mjs +101 -0
  56. package/src/auto-truncate.js +1 -1
  57. package/src/config.js +171 -47
  58. package/src/deps.js +6 -4
  59. package/src/features.js +182 -6
  60. package/src/heartbeat.js +156 -23
  61. package/src/identity/handover.js +52 -1
  62. package/src/identity/index.js +13 -5
  63. package/src/identity/inject-position.js +2 -2
  64. package/src/index.js +97 -7
  65. package/src/lifecycle/gap-clocks.js +328 -0
  66. package/src/lifecycle/index.js +269 -0
  67. package/src/live.js +22 -2
  68. package/src/memory/activity-capture.js +229 -0
  69. package/src/memory/anchors.js +194 -0
  70. package/src/memory/audit-records.js +222 -0
  71. package/src/memory/auto-cards.js +401 -0
  72. package/src/memory/capture.js +442 -0
  73. package/src/memory/card-anchors.js +203 -0
  74. package/src/memory/conflicts.js +106 -0
  75. package/src/memory/decay.js +311 -0
  76. package/src/memory/distill.js +471 -0
  77. package/src/memory/event-index.js +917 -0
  78. package/src/memory/evidence-chain.js +295 -0
  79. package/src/memory/evidence.js +145 -0
  80. package/src/memory/filter-runner.js +1 -1
  81. package/src/memory/filter.js +5 -1
  82. package/src/memory/forget-v2.js +410 -0
  83. package/src/memory/forget.js +71 -0
  84. package/src/memory/frames-activation.js +247 -0
  85. package/src/memory/fts-query.js +174 -0
  86. package/src/memory/governance.js +604 -0
  87. package/src/memory/index.js +1 -0
  88. package/src/memory/l2-gate.js +169 -0
  89. package/src/memory/lock.js +121 -0
  90. package/src/memory/migrate.js +139 -0
  91. package/src/memory/recall-v2.js +223 -0
  92. package/src/memory/recall.js +65 -2
  93. package/src/memory/records.js +425 -0
  94. package/src/memory/retention.js +128 -0
  95. package/src/memory/review.js +124 -0
  96. package/src/memory/trust.js +88 -0
  97. package/src/memory/version-chain.js +264 -0
  98. package/src/memory/wal.js +137 -0
  99. package/src/memory/working-frame.js +516 -0
  100. package/src/metrics/classify.mjs +5 -3
  101. package/src/metrics/index.mjs +21 -1
  102. package/src/metrics/prestep-latency.mjs +300 -0
  103. package/src/metrics/store.mjs +25 -0
  104. package/src/policy-profile.js +18 -3
  105. package/src/recall/anaphora.mjs +87 -0
  106. package/src/recall/cards.mjs +7 -0
  107. package/src/recall/embedding.mjs +8 -8
  108. package/src/recall/entities.mjs +112 -0
  109. package/src/recall/index.js +235 -19
  110. package/src/recall/inject-order.mjs +10 -8
  111. package/src/recall/privacy.mjs +105 -16
  112. package/src/recall/recall-core.mjs +116 -10
  113. package/src/recall/shared-visibility.js +302 -0
  114. package/src/recall/time-normalizer.mjs +196 -0
  115. package/src/role/activation.js +191 -0
  116. package/src/role/attention.js +318 -0
  117. package/src/role/base.js +36 -0
  118. package/src/role/channels.js +423 -0
  119. package/src/role/index.js +425 -0
  120. package/src/role/interfaces.js +115 -0
  121. package/src/role/personality.js +370 -0
  122. package/src/role/readers.js +151 -0
  123. package/src/role/relationships.js +477 -0
  124. package/src/role/store.js +202 -0
  125. package/src/role/writeprotect.js +373 -0
  126. package/src/router/aliases.json +176 -25
  127. package/src/router/background/agent-runner.mjs +1 -1
  128. package/src/router/background/anchor.mjs +1 -1
  129. package/src/router/background/audit.mjs +2 -2
  130. package/src/router/background/budget-ledger.mjs +2 -2
  131. package/src/router/background/host-sim.mjs +1 -1
  132. package/src/router/background/memory.mjs +4 -4
  133. package/src/router/background/queue.mjs +1 -1
  134. package/src/router/background/retry.mjs +1 -1
  135. package/src/router/background/router.mjs +1 -1
  136. package/src/router/background/stream.mjs +1 -1
  137. package/src/router/background/tool-policy.mjs +1 -1
  138. package/src/router/design-headings.json +5 -5
  139. package/src/router/face/config.mjs +1 -1
  140. package/src/router/face/identity.mjs +3 -3
  141. package/src/router/judge.mjs +8 -7
  142. package/src/router/policies/generic.json +21 -4
  143. package/src/router/route.js +109 -22
  144. package/src/router/router.mjs +10 -6
  145. package/src/router/routing-rules.json +260 -445
  146. package/src/router/run-sim.mjs +8 -8
  147. package/src/router/runtime.js +23 -12
  148. package/src/router/service/board.mjs +95 -15
  149. package/src/router/service/config.mjs +5 -5
  150. package/src/router/service/context.mjs +1 -1
  151. package/src/router/service/hint.mjs +14 -0
  152. package/src/router/service/queue.mjs +1 -1
  153. package/src/router/service/service.mjs +27 -11
  154. package/src/router/shadow.mjs +4 -3
  155. package/src/surgery-recovery.js +2 -2
  156. package/src/tool-output.js +2 -2
  157. package/src/tools.js +39 -7
  158. package/src/truncate-visible.js +2 -2
  159. package/src/ui/actions.js +1312 -0
  160. package/src/ui/panel-api.js +367 -0
  161. package/src/ui/panel-auth.js +251 -0
  162. package/src/ui/panel-integrity.js +243 -0
  163. package/src/ui/routes-readonly.js +695 -0
  164. package/src/ui/routes.js +3 -0
  165. package/docs/DEV.md +0 -279
  166. package/docs/PRESENCE-BUS-WIRING.md +0 -491
  167. package/docs/PRESENCE-BUS.md +0 -694
  168. package/docs/SURGERY.md +0 -186
  169. package/scripts/mark-core-cards.mjs +0 -289
  170. package/scripts/pack.mjs +0 -392
  171. package/scripts/router-proposals.mjs +0 -386
  172. package/src/router/fixtures/M1.json +0 -16
  173. package/src/router/fixtures/M2.json +0 -16
  174. package/src/router/fixtures/M3.json +0 -20
  175. package/src/router/fixtures/M4.json +0 -20
  176. package/src/router/fixtures/M5.json +0 -45
  177. package/src/router/fixtures/M6.json +0 -53
  178. package/src/router/fixtures/M7.json +0 -46
  179. package/src/router/fixtures/S1.json +0 -20
  180. package/src/router/fixtures/S2.json +0 -23
  181. package/src/router/fixtures/S3.json +0 -20
  182. package/src/router/fixtures/S4.json +0 -34
  183. package/src/router/fixtures/S5.json +0 -43
  184. package/src/router/fixtures/S6.json +0 -47
  185. package/src/router/fixtures/T1.json +0 -23
  186. package/src/router/fixtures/T2.json +0 -16
  187. package/src/router/fixtures/T3.json +0 -19
  188. package/src/router/fixtures/T4.json +0 -16
  189. package/src/router/fixtures/X1.json +0 -17
  190. package/src/router/fixtures/X2.json +0 -20
  191. package/src/router/gen-design-headings.mjs +0 -107
  192. package/src/router/policies/owner-rulings-2026-11-03.json +0 -62
  193. package/test/auto-recall.test.mjs +0 -474
  194. package/test/auto-truncate.test.mjs +0 -931
  195. package/test/autobind.test.mjs +0 -385
  196. package/test/bus.test.mjs +0 -1572
  197. package/test/cli-guard.test.mjs +0 -198
  198. package/test/conclusion.test.mjs +0 -408
  199. package/test/config-schema.test.mjs +0 -204
  200. package/test/d6-output.test.mjs +0 -194
  201. package/test/d6.test.mjs +0 -395
  202. package/test/deps.test.mjs +0 -342
  203. package/test/doctor-setup.test.mjs +0 -297
  204. package/test/embedding-recall.test.mjs +0 -347
  205. package/test/feature-flags.test.mjs +0 -568
  206. package/test/filter-shadow.test.mjs +0 -170
  207. package/test/fixtures/baseline-0.8.0-registration.json +0 -556
  208. package/test/fixtures/d6-header-tools.json +0 -1
  209. package/test/fixtures/lock-child.mjs +0 -67
  210. package/test/fixtures/pre-step-container.mjs +0 -100
  211. package/test/fixtures/privacy-memory/topics/pii-unmarked.md +0 -9
  212. package/test/fixtures/privacy-memory/topics/secret-local-only.md +0 -11
  213. package/test/fixtures/profile-session-longlive-config.json +0 -20
  214. package/test/fixtures/proposal-cas-child.mjs +0 -66
  215. package/test/host-engine-status.test.mjs +0 -307
  216. package/test/hot-truncate.test.mjs +0 -1349
  217. package/test/identity-card-marker.test.mjs +0 -307
  218. package/test/identity-router/run.mjs +0 -721
  219. package/test/integration-pre-step.test.mjs +0 -553
  220. package/test/live.test.mjs +0 -1020
  221. package/test/maintenance-schedule.test.mjs +0 -538
  222. package/test/memory.test.mjs +0 -2828
  223. package/test/metrics.test.mjs +0 -478
  224. package/test/orchestrator.test.mjs +0 -266
  225. package/test/p1_probe.mjs +0 -97
  226. package/test/packaging.test.mjs +0 -182
  227. package/test/portability.test.mjs +0 -343
  228. package/test/rc4-regressions.test.mjs +0 -562
  229. package/test/rc5-regressions.test.mjs +0 -197
  230. package/test/rc6-chinese.test.mjs +0 -394
  231. package/test/router-1100/apply-off.test.mjs +0 -175
  232. package/test/router-1100/budget-reconcile.test.mjs +0 -215
  233. package/test/router-1100/config-context.test.mjs +0 -211
  234. package/test/router-1100/helpers.mjs +0 -129
  235. package/test/router-1100/hint-envelope.test.mjs +0 -150
  236. package/test/router-1100/lock-crossproc.test.mjs +0 -206
  237. package/test/router-1100/proposal-cas-crossproc.test.mjs +0 -184
  238. package/test/router-1100/router-apply.test.mjs +0 -372
  239. package/test/router-1100/router-fixb.test.mjs +0 -602
  240. package/test/router-1100/router-proposals.test.mjs +0 -405
  241. package/test/router-1100/router-queue-lease-wal.test.mjs +0 -355
  242. package/test/router-1100/router-security-cr.test.mjs +0 -333
  243. package/test/router-1100/service-lifecycle.test.mjs +0 -220
  244. package/test/router-1100/tools-contract.test.mjs +0 -164
  245. package/test/router-1100/turn-reflect-tick.test.mjs +0 -89
  246. package/test/router-1100/v6-contract.test.mjs +0 -158
  247. package/test/router-1100/v6b-contract.test.mjs +0 -293
  248. package/test/router-1100/v6c-contract.test.mjs +0 -249
  249. package/test/router-1100/wal-rotation.test.mjs +0 -375
  250. package/test/router-1100/wp1-config.test.mjs +0 -170
  251. package/test/router-1100/wp1-default-off.test.mjs +0 -77
  252. package/test/router-1100/wp1-model-status.test.mjs +0 -90
  253. package/test/router-1100/wp1-status.test.mjs +0 -220
  254. package/test/router-1100/wp1-tools.test.mjs +0 -146
  255. package/test/router-1100/wp5-cli.test.mjs +0 -240
  256. package/test/router-1100/wp5-model-auto.test.mjs +0 -418
  257. package/test/router-1100/wp6-merge.test.mjs +0 -386
  258. package/test/router-1100/wp6-wake.test.mjs +0 -502
  259. package/test/router-background/audit.test.mjs +0 -37
  260. package/test/router-background/budget-ledger.test.mjs +0 -330
  261. package/test/router-background/cross-process.test.mjs +0 -222
  262. package/test/router-background/fixtures/cross-child.mjs +0 -85
  263. package/test/router-background/fixtures/real-shapes.mjs +0 -239
  264. package/test/router-background/router.test.mjs +0 -1044
  265. package/test/router-background/stream-retry.test.mjs +0 -358
  266. package/test/router-background/tool-agent.test.mjs +0 -384
  267. package/test/router-face/bridge.test.mjs +0 -169
  268. package/test/router-face/face.test.mjs +0 -316
  269. package/test/router-failclosed.test.mjs +0 -466
  270. package/test/router-identity.test.mjs +0 -384
  271. package/test/router-l1-l2.contract.test.mjs +0 -1075
  272. package/test/router-memory-tools.test.mjs +0 -262
  273. package/test/router-policy.test.mjs +0 -225
  274. package/test/router-runtime.test.mjs +0 -438
  275. package/test/router-shadow.test.mjs +0 -287
  276. package/test/router.test.mjs +0 -903
  277. package/test/run-rc.mjs +0 -299
  278. package/test/run.mjs +0 -2469
  279. package/test/safety-defaults.test.mjs +0 -179
  280. package/test/seeded-load.test.mjs +0 -436
  281. package/test/session-original.test.mjs +0 -338
  282. package/test/surgery-recovery.test.mjs +0 -936
  283. package/test/t7_drive.mjs +0 -151
  284. package/test/tool-output.test.mjs +0 -393
  285. package/test/tool-schema.test.mjs +0 -177
  286. package/test/tools_contract.test.mjs +0 -716
  287. package/test/truncate-visible.test.mjs +0 -1150
  288. package/test/ui-flags.test.mjs +0 -477
  289. package/test/v4-hardening.test.mjs +0 -427
package/src/tools.js CHANGED
@@ -36,7 +36,9 @@ import { memoryIndex } from './memory/index.js';
36
36
  import { memoryConsolidate } from './memory/consolidate.js';
37
37
  import { memoryReinforce } from './memory/reinforce.js';
38
38
  import { memoryForget } from './memory/forget.js';
39
+ import { forgetV2 } from './memory/forget-v2.js';
39
40
  import { memoryRecall } from './memory/recall.js';
41
+ import { recallV2 } from './memory/recall-v2.js';
40
42
  import { memoryProcedure, PROCEDURES_DIR, PROCEDURE_ACTIONS } from './memory/procedure.js';
41
43
  import {
42
44
  memoryError,
@@ -1643,9 +1645,9 @@ const WORKER_NO_SERVICE = 'unavailable: 本宿主未提供 subagents 服务';
1643
1645
  * byte-identical to 1.5.0 while taking the capability away by default.
1644
1646
  */
1645
1647
  export const WORKER_TOOL_NAMES = Object.freeze(['worker_spawn', 'worker_status', 'worker_kill']);
1646
- export const WORKERS_DEFAULTS = Object.freeze({ enabled: false });
1648
+ export const WORKERS_DEFAULTS = Object.freeze({ enabled: true });
1647
1649
  export const WORKERS_DISABLED_MESSAGE =
1648
- 'unavailable: worker_* 默认关闭(workers.enabled=false);需要派子会话时请在配置里显式设置 workers.enabled: true';
1650
+ 'unavailable: worker_* 已关闭(workers.enabled=false);需要派子会话时显式设置 workers.enabled: true';
1649
1651
 
1650
1652
  function workerUnavailable(message) {
1651
1653
  return { ok: false, status: 'unavailable', available: false, message };
@@ -2003,6 +2005,13 @@ function memoryTool(name, fn) {
2003
2005
  };
2004
2006
  }
2005
2007
 
2008
+ /** Product path must use forgetV2 so hostkey gate + tombstone enrichment cannot be bypassed. */
2009
+ function memoryForgetTool(args, config) {
2010
+ // Preserve the legacy invalid-confirm error (throws before any execution).
2011
+ if (args.confirm !== undefined && args.confirm !== 'FORGET') return memoryForget(args, config);
2012
+ return forgetV2({ ...args, mode: args.confirm === 'FORGET' ? 'execute' : 'propose' }, config);
2013
+ }
2014
+
2006
2015
  // --- D3: fetch the original text of one turn ------------------------------
2007
2016
  //
2008
2017
  // session_original is the deliberate escape hatch from the compressed view:
@@ -2638,7 +2647,7 @@ export const TOOLS = [
2638
2647
  confirm: { type: 'string', description: 'Default absent = dry-run. Pass "FORGET" to execute the proposals.' },
2639
2648
  },
2640
2649
  output: { schema: { type: 'object', additionalProperties: true }, render: (_a, value) => OUTPUT_TEXT(value) },
2641
- invoke: memoryTool('memory_forget', memoryForget),
2650
+ invoke: memoryTool('memory_forget', memoryForgetTool),
2642
2651
  },
2643
2652
  {
2644
2653
  name: 'memory_procedure',
@@ -2697,6 +2706,26 @@ export const TOOLS = [
2697
2706
  output: { schema: { type: 'object', additionalProperties: true }, render: (_a, value) => OUTPUT_TEXT(value) },
2698
2707
  invoke: memoryTool('memory_recall', memoryRecall),
2699
2708
  },
2709
+ {
2710
+ name: 'memory_recall_v2',
2711
+ description:
2712
+ 'Multi-route recall with an evidence gate and a deterministic fast-answer channel (read-only). Returns ' +
2713
+ '{query,confidence,hits:[{card,anchor,quote,score}],didYouMean,slowPath,fastAnswer,evidenceGate}. ' +
2714
+ 'Fail-safe: no hit => confidence "none" with E_NO_EVIDENCE and NO guess; multiple/ambiguous/non-live ' +
2715
+ 'anchors => slowPath true and fallback "model"; only a unique high-confidence hit whose quote matches the ' +
2716
+ 'asked value type (version/path/time/number) produces fastAnswer (quote + coordinate, no generation). ' +
2717
+ 'Params: query (required), topK 1..10, project?, since?, until?, includeForgotten (default false).',
2718
+ parameters: {
2719
+ query: { type: 'string', description: 'Required. Natural-language question or keywords.' },
2720
+ topK: { type: 'integer', description: 'How many hits to return (default 3, clamped 1..10).' },
2721
+ project: { type: 'string', description: 'Optional project filter (card frontmatter project when present).' },
2722
+ since: { type: 'string', description: 'Optional ISO date lower bound on card date.' },
2723
+ until: { type: 'string', description: 'Optional ISO date upper bound on card date.' },
2724
+ includeForgotten: { type: 'boolean', description: 'Default false; true also returns archived/forgotten cards (marked stale anchors).' },
2725
+ },
2726
+ output: { schema: { type: 'object', additionalProperties: true }, render: (_a, value) => OUTPUT_TEXT(value) },
2727
+ invoke: memoryTool('memory_recall_v2', recallV2),
2728
+ },
2700
2729
  {
2701
2730
  name: 'session_live_update',
2702
2731
  description:
@@ -2808,7 +2837,7 @@ export async function registerTools(ctx, config = {}) {
2808
2837
  // neither can be reconstructed from arguments.
2809
2838
  const bound = { ...config, host: () => ctx };
2810
2839
  // Fan-out tools are opt-in from 1.6.0 on; `undefined` means the safe default.
2811
- const workersEnabled = bound.workers?.enabled === true;
2840
+ const workersEnabled = bound.workers?.enabled !== false;
2812
2841
  // R1 runtime adapter. Absent (or `routerRuntime: 'off'`, which creates no
2813
2842
  // adapter) means the execute closure below is byte-identical to before.
2814
2843
  const routerRuntime = bound.routerRuntime && typeof bound.routerRuntime.intercept === 'function' ? bound.routerRuntime : null;
@@ -2823,8 +2852,11 @@ export async function registerTools(ctx, config = {}) {
2823
2852
  // feature is enabled; appending it after the normal set keeps the baseline
2824
2853
  // order byte-identical when D6 is off.
2825
2854
  const d6Tools = Array.isArray(bound.d6Tools) ? bound.d6Tools : [];
2826
- const allTools = routerTools.length > 0 || d6Tools.length > 0
2827
- ? [...TOOLS, ...routerTools, ...d6Tools]
2855
+ // 1.8.0 answer-guard: read-only answer_audit tool appended when enabled.
2856
+ const answerTools = Array.isArray(bound.answerTools) ? bound.answerTools : [];
2857
+ const extraTools = [...routerTools, ...d6Tools, ...answerTools];
2858
+ const allTools = extraTools.length > 0
2859
+ ? [...TOOLS, ...extraTools]
2828
2860
  : TOOLS;
2829
2861
  const ownNames = new Set(allTools.map((tool) => tool.name));
2830
2862
  for (const tool of allTools) {
@@ -2857,7 +2889,7 @@ export async function registerTools(ctx, config = {}) {
2857
2889
  },
2858
2890
  }));
2859
2891
  }
2860
- // `memory_save` belongs to the engram side, not to this plugin, so wrapping
2892
+ // The external memory tool belongs to its plugin, not to this plugin, so wrapping
2861
2893
  // cannot see it. The host's pre-execute guard is the only non-invasive hook
2862
2894
  // that can: in shadow it returns undefined (allow) and only records; in `on`
2863
2895
  // it may return a denial reason for a high-risk write. `ownNames` keeps the
@@ -25,6 +25,7 @@
25
25
  import fs from 'node:fs';
26
26
  import path from 'node:path';
27
27
  import crypto from 'node:crypto';
28
+ import { injectedMarkerPatterns } from './adapters/registry.js';
28
29
 
29
30
  import {
30
31
  compressFrame,
@@ -180,8 +181,7 @@ export const USER_TEXT_MARKERS = Object.freeze([
180
181
  /This is an automatically generated checkpoint/i,
181
182
  /Current runtime context/i,
182
183
  /<current_user_request\b/i,
183
- /<engram_profile\b/i,
184
- /<engram_memory_context\b/i,
184
+ ...injectedMarkerPatterns(),
185
185
  /<system-reminder\b/i,
186
186
  /\[Compressed conversation section\]/i,
187
187
  /background job[\s\S]{0,200}?\bfinished\b/i,