feat: add proactive memory extraction and daily logs

This commit is contained in:
William Valentin
2026-02-18 10:10:47 -08:00
parent 9cbd66cdcc
commit f38fc063d2
8 changed files with 250 additions and 5 deletions
+28
View File
@@ -1277,6 +1277,11 @@ describe('configSchema — memory injection strategy', () => {
const result = configSchema.parse(minimalConfig);
expect(result.memory.injection_strategy).toBe('all');
expect(result.memory.max_injection_tokens).toBe(2000);
expect(result.memory.proactive_extract.enabled).toBe(false);
expect(result.memory.proactive_extract.min_tool_calls).toBe(1);
expect(result.memory.proactive_extract.namespace).toBe('global');
expect(result.memory.daily_log.enabled).toBe(false);
expect(result.memory.daily_log.namespace_prefix).toBe('daily');
expect(result.memory.qmd.enabled).toBe(false);
expect(result.memory.qmd.top_k).toBe(8);
expect(result.memory.qmd.min_score).toBe(0.15);
@@ -1309,6 +1314,29 @@ describe('configSchema — memory injection strategy', () => {
expect(result.memory.qmd.top_k).toBe(12);
expect(result.memory.qmd.min_score).toBe(0.2);
});
it('accepts proactive extraction and daily log settings', () => {
const result = configSchema.parse({
...minimalConfig,
memory: {
proactive_extract: {
enabled: true,
min_tool_calls: 3,
namespace: 'global/facts',
},
daily_log: {
enabled: true,
namespace_prefix: 'memory',
},
},
});
expect(result.memory.proactive_extract.enabled).toBe(true);
expect(result.memory.proactive_extract.min_tool_calls).toBe(3);
expect(result.memory.proactive_extract.namespace).toBe('global/facts');
expect(result.memory.daily_log.enabled).toBe(true);
expect(result.memory.daily_log.namespace_prefix).toBe('memory');
});
});
describe('configSchema — compaction importance threshold', () => {
+9
View File
@@ -516,6 +516,15 @@ const memorySchema = z.object({
enabled: z.boolean().default(true),
dir: z.string().optional(), // Default: ~/.local/share/flynn/memory
auto_extract: z.boolean().default(true),
proactive_extract: z.object({
enabled: z.boolean().default(false),
min_tool_calls: z.number().min(0).max(50).default(1),
namespace: z.string().default('global'),
}).default({}),
daily_log: z.object({
enabled: z.boolean().default(false),
namespace_prefix: z.string().default('daily'),
}).default({}),
injection_strategy: z.enum(['all', 'recent', 'adaptive']).default('all'),
max_injection_tokens: z.number().min(100).max(10000).default(2000),
max_context_tokens: z.number().min(100).max(10000).default(2000),