feat(memory-v2): restore personal shadow pipeline and candidate store
Recover WIP modules from stash so admin can persist capability config, observe chat writes in shadow mode, and review persisted candidates. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -81,6 +81,36 @@ test('memory v2 admin config service persists non-secret and secret patches', as
|
||||
url: 'http://127.0.0.1:6333',
|
||||
apiKey: 'secret-qdrant',
|
||||
},
|
||||
candidateMemory: {
|
||||
enabled: true,
|
||||
mode: 'shadow',
|
||||
minImportance: '0.75',
|
||||
minConfidence: '0.85',
|
||||
maxPending: '500',
|
||||
persistenceEnabled: true,
|
||||
},
|
||||
policy: {
|
||||
enabled: true,
|
||||
saveExplicit: true,
|
||||
rejectSensitive: true,
|
||||
requireEvidence: true,
|
||||
retentionDays: '365',
|
||||
},
|
||||
retriever: {
|
||||
enabled: true,
|
||||
episodicEnabled: true,
|
||||
semanticEnabled: true,
|
||||
preferenceEnabled: true,
|
||||
goalEnabled: true,
|
||||
limit: '12',
|
||||
tokenBudget: '1800',
|
||||
timeoutMs: '1200',
|
||||
},
|
||||
lifecycle: { enabled: true, dedupeEnabled: true, conflictReview: true },
|
||||
persona: { enabled: true, provider: 'ai-mind', shadowMode: true },
|
||||
graph: { enabled: true, provider: 'postgres', maxDepth: '2' },
|
||||
userMemory: { enabled: true, reviewEnabled: true, forgetEnabled: true, deletePropagation: true },
|
||||
pluginHealth: { enabled: true, intervalSeconds: '60', timeoutMs: '1500', failureThreshold: '3', autoFallback: true },
|
||||
}, { updatedBy: 'admin-1' });
|
||||
|
||||
assert.equal(updated.config.global.enabled, true);
|
||||
@@ -91,6 +121,15 @@ test('memory v2 admin config service persists non-secret and secret patches', as
|
||||
assert.equal(updated.config.qdrant.enabled, true);
|
||||
assert.equal(updated.config.qdrant.url, 'http://127.0.0.1:6333');
|
||||
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.policy.requireEvidence, true);
|
||||
assert.equal(updated.config.retriever.tokenBudget, '1800');
|
||||
assert.equal(updated.config.lifecycle.dedupeEnabled, true);
|
||||
assert.equal(updated.config.persona.provider, 'ai-mind');
|
||||
assert.equal(updated.config.graph.provider, 'postgres');
|
||||
assert.equal(updated.config.userMemory.deletePropagation, true);
|
||||
assert.equal(updated.config.pluginHealth.autoFallback, true);
|
||||
assert.equal(updated.updatedBy, 'admin-1');
|
||||
|
||||
const runtimeState = await service.getRuntimeState();
|
||||
@@ -107,6 +146,16 @@ test('memory v2 admin config service persists non-secret and secret patches', as
|
||||
assert.equal(runtimeState.overrides.MEMORY_QDRANT_ENABLED, '1');
|
||||
assert.equal(runtimeState.overrides.MEMORY_QDRANT_URL, 'http://127.0.0.1:6333');
|
||||
assert.equal(runtimeState.overrides.MEMORY_QDRANT_API_KEY, 'secret-qdrant');
|
||||
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_POLICY_REQUIRE_EVIDENCE, '1');
|
||||
assert.equal(runtimeState.overrides.MEMORY_RETRIEVER_TOKEN_BUDGET, '1800');
|
||||
assert.equal(runtimeState.overrides.MEMORY_LIFECYCLE_DEDUPE_ENABLED, '1');
|
||||
assert.equal(runtimeState.overrides.MEMORY_PERSONA_PROVIDER, 'ai-mind');
|
||||
assert.equal(runtimeState.overrides.MEMORY_GRAPH_PROVIDER, 'postgres');
|
||||
assert.equal(runtimeState.overrides.MEMORY_USER_DELETE_PROPAGATION, '1');
|
||||
assert.equal(runtimeState.overrides.MEMORY_PLUGIN_HEALTH_AUTO_FALLBACK, '1');
|
||||
});
|
||||
|
||||
test('memory v2 admin config internals flatten booleans and numbers consistently', () => {
|
||||
|
||||
Reference in New Issue
Block a user