feat(memory): add gated agent recall and lifecycle controls

This commit is contained in:
john
2026-07-16 21:05:27 +08:00
parent c1012da120
commit 6e460336f7
13 changed files with 655 additions and 3 deletions
+20
View File
@@ -89,6 +89,16 @@ test('memory v2 admin config service persists non-secret and secret patches', as
maxPending: '500',
persistenceEnabled: true,
},
runtimeControl: {
agentResolveEnabled: true,
agentInjectionMode: 'shadow',
agentCanaryUserIds: 'user-1,user-2',
agentResolveLimit: '3',
agentResolveTimeoutMs: '1200',
promotionEnabled: false,
compactionV2Enabled: false,
reflectionEnabled: false,
},
policy: {
enabled: true,
saveExplicit: true,
@@ -123,6 +133,10 @@ test('memory v2 admin config service persists non-secret and secret patches', as
assert.equal(updated.config.qdrant.apiKeyConfigured, true);
assert.equal(updated.config.candidateMemory.mode, 'shadow');
assert.equal(updated.config.candidateMemory.persistenceEnabled, true);
assert.equal(updated.config.runtimeControl.agentResolveEnabled, true);
assert.equal(updated.config.runtimeControl.agentInjectionMode, 'shadow');
assert.equal(updated.config.runtimeControl.agentCanaryUserIds, 'user-1,user-2');
assert.equal(updated.config.runtimeControl.agentResolveLimit, '3');
assert.equal(updated.config.policy.requireEvidence, true);
assert.equal(updated.config.retriever.tokenBudget, '1800');
assert.equal(updated.config.lifecycle.dedupeEnabled, true);
@@ -149,6 +163,12 @@ test('memory v2 admin config service persists non-secret and secret patches', as
assert.equal(runtimeState.overrides.MEMORY_CANDIDATE_ENABLED, '1');
assert.equal(runtimeState.overrides.MEMORY_CANDIDATE_MODE, 'shadow');
assert.equal(runtimeState.overrides.MEMORY_CANDIDATE_PERSISTENCE_ENABLED, '1');
assert.equal(runtimeState.overrides.MEMORY_AGENT_RESOLVE_ENABLED, '1');
assert.equal(runtimeState.overrides.MEMORY_AGENT_INJECTION_MODE, 'shadow');
assert.equal(runtimeState.overrides.MEMORY_AGENT_CANARY_USER_IDS, 'user-1,user-2');
assert.equal(runtimeState.overrides.MEMORY_AGENT_RESOLVE_LIMIT, '3');
assert.equal(runtimeState.overrides.MEMORY_AGENT_RESOLVE_TIMEOUT_MS, '1200');
assert.equal(runtimeState.overrides.MEMORY_PROMOTION_ENABLED, '0');
assert.equal(runtimeState.overrides.MEMORY_POLICY_REQUIRE_EVIDENCE, '1');
assert.equal(runtimeState.overrides.MEMORY_RETRIEVER_TOKEN_BUDGET, '1800');
assert.equal(runtimeState.overrides.MEMORY_LIFECYCLE_DEDUPE_ENABLED, '1');