feat: LLM intent router, direct chat execution, and Memory V2 light intervention
Wire chat intent routing with direct_chat on regular sessions, skill-selected short-circuit to Agent, memory light/heavy intervention tiers, and fix direct chat UI stuck streaming after completion. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -35,6 +35,9 @@ test('memory v2 admin config service loads defaults from env and masks secrets',
|
||||
env: {
|
||||
MEMORY_ENABLED: '1',
|
||||
MEMORY_BACKEND: 'pgvector',
|
||||
MEMIND_CHAT_LLM_ROUTER_ENABLED: '1',
|
||||
MEMIND_CHAT_ROUTER_MODEL_PROVIDER_KEY_ID: 'key-router',
|
||||
MEMIND_CHAT_ROUTER_MODEL: 'deepseek-chat',
|
||||
MEMORY_PGVECTOR_DATABASE_URL: 'postgresql://user:pass@127.0.0.1:5432/memory',
|
||||
MEMORY_QDRANT_API_KEY: 'secret-qdrant',
|
||||
},
|
||||
@@ -44,6 +47,9 @@ test('memory v2 admin config service loads defaults from env and masks secrets',
|
||||
|
||||
assert.equal(result.config.global.enabled, true);
|
||||
assert.equal(result.config.global.backend, 'pgvector');
|
||||
assert.equal(result.config.chatIntentRouter.enabled, true);
|
||||
assert.equal(result.config.chatIntentRouter.modelProviderKeyId, 'key-router');
|
||||
assert.equal(result.config.chatIntentRouter.model, 'deepseek-chat');
|
||||
assert.equal(result.config.pgvector.databaseUrlConfigured, true);
|
||||
assert.match(result.config.pgvector.databaseUrlMasked, /^post\*+/);
|
||||
assert.equal(result.config.qdrant.apiKeyConfigured, true);
|
||||
@@ -60,6 +66,16 @@ test('memory v2 admin config service persists non-secret and secret patches', as
|
||||
|
||||
const updated = await service.updateAdminConfig({
|
||||
global: { enabled: true, backend: 'qdrant' },
|
||||
chatIntentRouter: {
|
||||
enabled: true,
|
||||
modelProviderKeyId: 'key-router',
|
||||
model: 'deepseek-chat',
|
||||
minConfidence: '0.7',
|
||||
memoryResolveEnabled: true,
|
||||
memoryResolveLimit: '8',
|
||||
timeoutMs: '1500',
|
||||
fallbackRoute: 'agent_orchestration',
|
||||
},
|
||||
qdrant: {
|
||||
enabled: true,
|
||||
url: 'http://127.0.0.1:6333',
|
||||
@@ -69,6 +85,9 @@ test('memory v2 admin config service persists non-secret and secret patches', as
|
||||
|
||||
assert.equal(updated.config.global.enabled, true);
|
||||
assert.equal(updated.config.global.backend, 'qdrant');
|
||||
assert.equal(updated.config.chatIntentRouter.enabled, true);
|
||||
assert.equal(updated.config.chatIntentRouter.modelProviderKeyId, 'key-router');
|
||||
assert.equal(updated.config.chatIntentRouter.minConfidence, '0.7');
|
||||
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);
|
||||
@@ -77,6 +96,14 @@ test('memory v2 admin config service persists non-secret and secret patches', as
|
||||
const runtimeState = await service.getRuntimeState();
|
||||
assert.equal(runtimeState.overrides.MEMORY_ENABLED, '1');
|
||||
assert.equal(runtimeState.overrides.MEMORY_BACKEND, 'qdrant');
|
||||
assert.equal(runtimeState.overrides.MEMIND_CHAT_LLM_ROUTER_ENABLED, '1');
|
||||
assert.equal(runtimeState.overrides.MEMIND_CHAT_ROUTER_MODEL_PROVIDER_KEY_ID, 'key-router');
|
||||
assert.equal(runtimeState.overrides.MEMIND_CHAT_ROUTER_MODEL, 'deepseek-chat');
|
||||
assert.equal(runtimeState.overrides.MEMIND_CHAT_ROUTER_MIN_CONFIDENCE, '0.7');
|
||||
assert.equal(runtimeState.overrides.MEMIND_CHAT_ROUTER_MEMORY_ENABLED, '1');
|
||||
assert.equal(runtimeState.overrides.MEMIND_CHAT_ROUTER_MEMORY_LIMIT, '8');
|
||||
assert.equal(runtimeState.overrides.MEMIND_CHAT_ROUTER_TIMEOUT_MS, '1500');
|
||||
assert.equal(runtimeState.overrides.MEMIND_CHAT_ROUTER_FALLBACK_ROUTE, 'agent_orchestration');
|
||||
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');
|
||||
@@ -87,6 +114,13 @@ test('memory v2 admin config internals flatten booleans and numbers consistently
|
||||
{
|
||||
...memoryV2AdminConfigInternals.defaultConfigShape(),
|
||||
global: { enabled: true, backend: 'pgvector', vectorEnabled: true },
|
||||
chatIntentRouter: {
|
||||
enabled: true,
|
||||
minConfidence: '0.65',
|
||||
memoryResolveEnabled: true,
|
||||
memoryResolveLimit: '8',
|
||||
timeoutMs: '1500',
|
||||
},
|
||||
pgvector: { enabled: true, poolMax: '5', limit: '8' },
|
||||
},
|
||||
{
|
||||
@@ -97,6 +131,11 @@ test('memory v2 admin config internals flatten booleans and numbers consistently
|
||||
|
||||
assert.equal(env.MEMORY_ENABLED, '1');
|
||||
assert.equal(env.MEMORY_BACKEND, 'pgvector');
|
||||
assert.equal(env.MEMIND_CHAT_LLM_ROUTER_ENABLED, '1');
|
||||
assert.equal(env.MEMIND_CHAT_ROUTER_MIN_CONFIDENCE, '0.65');
|
||||
assert.equal(env.MEMIND_CHAT_ROUTER_MEMORY_ENABLED, '1');
|
||||
assert.equal(env.MEMIND_CHAT_ROUTER_MEMORY_LIMIT, '8');
|
||||
assert.equal(env.MEMIND_CHAT_ROUTER_TIMEOUT_MS, '1500');
|
||||
assert.equal(env.MEMORY_VECTOR_ENABLED, '1');
|
||||
assert.equal(env.MEMORY_PGVECTOR_ENABLED, '1');
|
||||
assert.equal(env.MEMORY_PGVECTOR_POOL_MAX, '5');
|
||||
|
||||
Reference in New Issue
Block a user