sdlc-agent-4-enterprise-server 1.7.1 → 1.8.1

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 (114) hide show
  1. package/dist/modules/memory/MemoryModule.d.ts +1 -0
  2. package/dist/modules/memory/MemoryModule.js +15 -0
  3. package/dist/modules/memory/MemoryModule.js.map +1 -1
  4. package/dist/modules/memory/__tests__/ClassifyService.test.d.ts +1 -0
  5. package/dist/modules/memory/__tests__/ClassifyService.test.js +111 -0
  6. package/dist/modules/memory/__tests__/ClassifyService.test.js.map +1 -0
  7. package/dist/modules/memory/__tests__/SmartIngest.test.d.ts +1 -0
  8. package/dist/modules/memory/__tests__/SmartIngest.test.js +230 -0
  9. package/dist/modules/memory/__tests__/SmartIngest.test.js.map +1 -0
  10. package/dist/modules/memory/definitions/evolution.d.ts +101 -0
  11. package/dist/modules/memory/definitions/evolution.js +61 -0
  12. package/dist/modules/memory/definitions/evolution.js.map +1 -0
  13. package/dist/modules/memory/definitions/index.d.ts +131 -0
  14. package/dist/modules/memory/definitions/index.js +5 -1
  15. package/dist/modules/memory/definitions/index.js.map +1 -1
  16. package/dist/modules/memory/definitions/smart-ingest.d.ts +38 -0
  17. package/dist/modules/memory/definitions/smart-ingest.js +38 -0
  18. package/dist/modules/memory/definitions/smart-ingest.js.map +1 -0
  19. package/dist/modules/memory/dispatchers/crud.js +8 -0
  20. package/dist/modules/memory/dispatchers/crud.js.map +1 -1
  21. package/dist/modules/memory/dispatchers/dispatcher.d.ts +3 -0
  22. package/dist/modules/memory/dispatchers/dispatcher.js +11 -0
  23. package/dist/modules/memory/dispatchers/dispatcher.js.map +1 -1
  24. package/dist/modules/memory/dispatchers/evolution.d.ts +9 -0
  25. package/dist/modules/memory/dispatchers/evolution.js +154 -0
  26. package/dist/modules/memory/dispatchers/evolution.js.map +1 -0
  27. package/dist/modules/memory/dispatchers/smart-ingest.d.ts +25 -0
  28. package/dist/modules/memory/dispatchers/smart-ingest.js +147 -0
  29. package/dist/modules/memory/dispatchers/smart-ingest.js.map +1 -0
  30. package/dist/modules/memory/dispatchers/supersession.d.ts +21 -0
  31. package/dist/modules/memory/dispatchers/supersession.js +54 -0
  32. package/dist/modules/memory/dispatchers/supersession.js.map +1 -0
  33. package/dist/modules/memory/engine/core.d.ts +3 -0
  34. package/dist/modules/memory/engine/core.js +39 -4
  35. package/dist/modules/memory/engine/core.js.map +1 -1
  36. package/dist/modules/memory/evolution/CompositeScorer.d.ts +16 -0
  37. package/dist/modules/memory/evolution/CompositeScorer.js +65 -0
  38. package/dist/modules/memory/evolution/CompositeScorer.js.map +1 -0
  39. package/dist/modules/memory/evolution/DecayService.d.ts +38 -0
  40. package/dist/modules/memory/evolution/DecayService.js +130 -0
  41. package/dist/modules/memory/evolution/DecayService.js.map +1 -0
  42. package/dist/modules/memory/evolution/EpochService.d.ts +30 -0
  43. package/dist/modules/memory/evolution/EpochService.js +93 -0
  44. package/dist/modules/memory/evolution/EpochService.js.map +1 -0
  45. package/dist/modules/memory/evolution/OutcomeService.d.ts +27 -0
  46. package/dist/modules/memory/evolution/OutcomeService.js +63 -0
  47. package/dist/modules/memory/evolution/OutcomeService.js.map +1 -0
  48. package/dist/modules/memory/evolution/Scheduler.d.ts +12 -0
  49. package/dist/modules/memory/evolution/Scheduler.js +60 -0
  50. package/dist/modules/memory/evolution/Scheduler.js.map +1 -0
  51. package/dist/modules/memory/evolution/StagnationDetector.d.ts +26 -0
  52. package/dist/modules/memory/evolution/StagnationDetector.js +67 -0
  53. package/dist/modules/memory/evolution/StagnationDetector.js.map +1 -0
  54. package/dist/modules/memory/evolution/index.d.ts +20 -0
  55. package/dist/modules/memory/evolution/index.js +16 -0
  56. package/dist/modules/memory/evolution/index.js.map +1 -0
  57. package/dist/modules/memory/evolution/models.d.ts +38 -0
  58. package/dist/modules/memory/evolution/models.js +16 -0
  59. package/dist/modules/memory/evolution/models.js.map +1 -0
  60. package/dist/modules/memory/evolution/strategies/ConfidenceStrategy.d.ts +9 -0
  61. package/dist/modules/memory/evolution/strategies/ConfidenceStrategy.js +11 -0
  62. package/dist/modules/memory/evolution/strategies/ConfidenceStrategy.js.map +1 -0
  63. package/dist/modules/memory/evolution/strategies/OutcomeStrategy.d.ts +13 -0
  64. package/dist/modules/memory/evolution/strategies/OutcomeStrategy.js +16 -0
  65. package/dist/modules/memory/evolution/strategies/OutcomeStrategy.js.map +1 -0
  66. package/dist/modules/memory/evolution/strategies/PredictiveStrategy.d.ts +17 -0
  67. package/dist/modules/memory/evolution/strategies/PredictiveStrategy.js +48 -0
  68. package/dist/modules/memory/evolution/strategies/PredictiveStrategy.js.map +1 -0
  69. package/dist/modules/memory/evolution/strategies/SupersededStrategy.d.ts +9 -0
  70. package/dist/modules/memory/evolution/strategies/SupersededStrategy.js +13 -0
  71. package/dist/modules/memory/evolution/strategies/SupersededStrategy.js.map +1 -0
  72. package/dist/modules/memory/evolution/strategies/TemporalStrategy.d.ts +11 -0
  73. package/dist/modules/memory/evolution/strategies/TemporalStrategy.js +28 -0
  74. package/dist/modules/memory/evolution/strategies/TemporalStrategy.js.map +1 -0
  75. package/dist/modules/memory/llm/classify-service.d.ts +23 -0
  76. package/dist/modules/memory/llm/classify-service.js +54 -0
  77. package/dist/modules/memory/llm/classify-service.js.map +1 -0
  78. package/dist/modules/memory/migrations/002-add-evolution-columns.d.ts +7 -0
  79. package/dist/modules/memory/migrations/002-add-evolution-columns.js +45 -0
  80. package/dist/modules/memory/migrations/002-add-evolution-columns.js.map +1 -0
  81. package/dist/modules/memory/models.d.ts +3 -0
  82. package/dist/modules/memory/models.js.map +1 -1
  83. package/package.json +2 -2
  84. package/src/modules/memory/MemoryModule.ts +18 -0
  85. package/src/modules/memory/__tests__/ClassifyService.test.ts +138 -0
  86. package/src/modules/memory/__tests__/SmartIngest.test.ts +286 -0
  87. package/src/modules/memory/definitions/evolution.ts +61 -0
  88. package/src/modules/memory/definitions/index.ts +5 -1
  89. package/src/modules/memory/definitions/smart-ingest.ts +38 -0
  90. package/src/modules/memory/dispatchers/crud.ts +9 -0
  91. package/src/modules/memory/dispatchers/dispatcher.ts +13 -0
  92. package/src/modules/memory/dispatchers/evolution.ts +163 -0
  93. package/src/modules/memory/dispatchers/smart-ingest.ts +217 -0
  94. package/src/modules/memory/dispatchers/supersession.ts +84 -0
  95. package/src/modules/memory/engine/core.ts +46 -4
  96. package/src/modules/memory/evolution/CompositeScorer.ts +94 -0
  97. package/src/modules/memory/evolution/DecayService.ts +169 -0
  98. package/src/modules/memory/evolution/EpochService.ts +133 -0
  99. package/src/modules/memory/evolution/OutcomeService.ts +107 -0
  100. package/src/modules/memory/evolution/Scheduler.ts +71 -0
  101. package/src/modules/memory/evolution/StagnationDetector.ts +102 -0
  102. package/src/modules/memory/evolution/index.ts +28 -0
  103. package/src/modules/memory/evolution/models.ts +58 -0
  104. package/src/modules/memory/evolution/strategies/ConfidenceStrategy.ts +19 -0
  105. package/src/modules/memory/evolution/strategies/OutcomeStrategy.ts +26 -0
  106. package/src/modules/memory/evolution/strategies/PredictiveStrategy.ts +68 -0
  107. package/src/modules/memory/evolution/strategies/SupersededStrategy.ts +26 -0
  108. package/src/modules/memory/evolution/strategies/TemporalStrategy.ts +39 -0
  109. package/src/modules/memory/llm/classify-service.ts +69 -0
  110. package/src/modules/memory/migrations/002-add-evolution-columns.ts +58 -0
  111. package/src/modules/memory/models.ts +3 -0
  112. package/tests/e2e/setup/env-setup.ts +8 -0
  113. package/vitest.config.ts +1 -1
  114. package/vitest.e2e.config.ts +20 -0
@@ -17,6 +17,7 @@ export declare class MemoryModule implements IModule {
17
17
  private dispatcher;
18
18
  private promotionInterval;
19
19
  private readonly sessionName;
20
+ private schedulerHandles;
20
21
  private readonly registry?;
21
22
  constructor(logger: Logger, sessionName?: string, registry?: ModuleRegistry);
22
23
  get status(): ModuleStatus;
@@ -12,9 +12,12 @@ import { MEMORY_TOOL_DEFINITIONS } from './definitions/index.js';
12
12
  import { loadConfig } from '../../engine/config.js';
13
13
  import { QueryLayer } from '../../engine/query/query-layer.js';
14
14
  import { migrate001AddScopeColumns } from './migrations/001-add-scope-columns.js';
15
+ import { migrate002AddEvolutionColumns } from './migrations/002-add-evolution-columns.js';
15
16
  import { ScopePromotionService } from './promotion/index.js';
17
+ import { startScheduler, stopScheduler } from './evolution/Scheduler.js';
16
18
  import { TagAnalyzerService } from './llm/analyzer.js';
17
19
  import { LLMService } from './llm/LLMService.js';
20
+ import { ClassifyService } from './llm/classify-service.js';
18
21
  export class MemoryModule {
19
22
  name = 'memory';
20
23
  _status = 'initializing';
@@ -24,6 +27,7 @@ export class MemoryModule {
24
27
  dispatcher;
25
28
  promotionInterval = null;
26
29
  sessionName;
30
+ schedulerHandles = null;
27
31
  registry;
28
32
  constructor(logger, sessionName, registry) {
29
33
  this.logger = logger.child({ module: this.name });
@@ -41,6 +45,7 @@ export class MemoryModule {
41
45
  this.dbManager.initialize();
42
46
  // Run migrations for existing DBs
43
47
  migrate001AddScopeColumns(this.dbManager.getDb());
48
+ migrate002AddEvolutionColumns(this.dbManager.getDb());
44
49
  this.engine = new MemoryEngine(this.dbManager.getDb());
45
50
  // Start session with configurable name (unique per instance)
46
51
  this.engine.startSession(this.sessionName);
@@ -81,12 +86,18 @@ export class MemoryModule {
81
86
  const tagAnalyzer = new TagAnalyzerService(llmService, this.logger);
82
87
  this.dispatcher.setTagAnalyzer(tagAnalyzer);
83
88
  this.logger.info({ provider: llmConfig.provider, model: llmConfig.model, baseUrl: llmConfig.baseUrl }, 'TagAnalyzerService initialized — LLM auto-tagging enabled');
89
+ // Wire ClassifyService for smart ingest (SA4E-38)
90
+ const classifyService = new ClassifyService(llmService);
91
+ this.dispatcher.setClassifyService(classifyService);
92
+ this.logger.info('ClassifyService initialized — Smart KB Ingest enabled');
84
93
  }
85
94
  }
86
95
  catch (err) {
87
96
  this.logger.error({ err }, 'TagAnalyzer LLM unavailable — using keyword fallback only');
88
97
  }
89
98
  // Start periodic promotion scan (every 1 hour)
99
+ // Start evolution scheduler (decay + stagnation detection)
100
+ this.schedulerHandles = startScheduler(this.dbManager.getDb(), this.logger);
90
101
  const SCAN_INTERVAL_MS = 60 * 60 * 1000; // 1 hour
91
102
  this.promotionInterval = setInterval(() => {
92
103
  try {
@@ -108,6 +119,10 @@ export class MemoryModule {
108
119
  }
109
120
  async shutdown() {
110
121
  this.logger.info('Shutting down memory module');
122
+ if (this.schedulerHandles) {
123
+ stopScheduler(this.schedulerHandles);
124
+ this.schedulerHandles = null;
125
+ }
111
126
  if (this.promotionInterval) {
112
127
  clearInterval(this.promotionInterval);
113
128
  this.promotionInterval = null;
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryModule.js","sourceRoot":"","sources":["../../../src/modules/memory/MemoryModule.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MemoryModule.js","sourceRoot":"","sources":["../../../src/modules/memory/MemoryModule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Unit Tests — ClassifyService (SA4E-38)
3
+ * Covers: buildPrompt, parseResponse, classify, isAvailable.
4
+ */
5
+ import { describe, it, expect, vi } from 'vitest';
6
+ import { ClassifyService } from '../llm/classify-service.js';
7
+ function createMockLLMService(response, available = true) {
8
+ return {
9
+ complete: vi.fn().mockResolvedValue({ content: response, model: 'test', provider: 'ollama' }),
10
+ isAvailable: vi.fn().mockResolvedValue(available),
11
+ getConfig: vi.fn(),
12
+ ask: vi.fn(),
13
+ nameCluster: vi.fn(),
14
+ };
15
+ }
16
+ describe('ClassifyService', () => {
17
+ describe('buildPrompt', () => {
18
+ it('returns system + user messages', () => {
19
+ const llm = createMockLLMService('{}');
20
+ const svc = new ClassifyService(llm);
21
+ const messages = svc.buildPrompt('test message');
22
+ expect(messages).toHaveLength(2);
23
+ expect(messages[0].role).toBe('system');
24
+ expect(messages[1].role).toBe('user');
25
+ expect(messages[1].content).toBe('test message');
26
+ });
27
+ it('system prompt contains evaluation instructions', () => {
28
+ const llm = createMockLLMService('{}');
29
+ const svc = new ClassifyService(llm);
30
+ const messages = svc.buildPrompt('hello');
31
+ expect(messages[0].content).toContain('knowledge-base evaluator');
32
+ expect(messages[0].content).toContain('verdict');
33
+ });
34
+ });
35
+ describe('parseResponse', () => {
36
+ it('parses valid ingest response', () => {
37
+ const llm = createMockLLMService('{}');
38
+ const svc = new ClassifyService(llm);
39
+ const result = svc.parseResponse('{"verdict":"ingest","summary":"Architecture decision"}');
40
+ expect(result.verdict).toBe('ingest');
41
+ expect(result.summary).toBe('Architecture decision');
42
+ });
43
+ it('parses valid skip response', () => {
44
+ const llm = createMockLLMService('{}');
45
+ const svc = new ClassifyService(llm);
46
+ const result = svc.parseResponse('{"verdict":"skip"}');
47
+ expect(result.verdict).toBe('skip');
48
+ expect(result.summary).toBeUndefined();
49
+ });
50
+ it('extracts JSON from markdown wrapper', () => {
51
+ const llm = createMockLLMService('{}');
52
+ const svc = new ClassifyService(llm);
53
+ const result = svc.parseResponse('```json\n{"verdict":"ingest","summary":"test"}\n```');
54
+ expect(result.verdict).toBe('ingest');
55
+ expect(result.summary).toBe('test');
56
+ });
57
+ it('truncates summary to 200 chars', () => {
58
+ const llm = createMockLLMService('{}');
59
+ const svc = new ClassifyService(llm);
60
+ const longSummary = 'A'.repeat(300);
61
+ const result = svc.parseResponse(`{"verdict":"ingest","summary":"${longSummary}"}`);
62
+ expect(result.summary.length).toBe(200);
63
+ });
64
+ it('treats unknown verdict as skip', () => {
65
+ const llm = createMockLLMService('{}');
66
+ const svc = new ClassifyService(llm);
67
+ const result = svc.parseResponse('{"verdict":"unknown"}');
68
+ expect(result.verdict).toBe('skip');
69
+ });
70
+ it('returns skip when no JSON found (no braces)', () => {
71
+ const llm = createMockLLMService('{}');
72
+ const svc = new ClassifyService(llm);
73
+ const result = svc.parseResponse('I cannot help with that');
74
+ expect(result.verdict).toBe('skip');
75
+ });
76
+ it('throws on malformed JSON with braces', () => {
77
+ const llm = createMockLLMService('{}');
78
+ const svc = new ClassifyService(llm);
79
+ expect(() => svc.parseResponse('{invalid json content}'))
80
+ .toThrow('llm_parse_error');
81
+ });
82
+ });
83
+ describe('classify', () => {
84
+ it('calls LLM and returns parsed result', async () => {
85
+ const llm = createMockLLMService('{"verdict":"ingest","summary":"Important decision"}');
86
+ const svc = new ClassifyService(llm);
87
+ const result = await svc.classify('We decided to use Strategy pattern');
88
+ expect(llm.complete).toHaveBeenCalledTimes(1);
89
+ expect(result.verdict).toBe('ingest');
90
+ expect(result.summary).toBe('Important decision');
91
+ });
92
+ it('propagates parse errors', async () => {
93
+ const llm = createMockLLMService('{invalid json content}');
94
+ const svc = new ClassifyService(llm);
95
+ await expect(svc.classify('test')).rejects.toThrow('llm_parse_error');
96
+ });
97
+ });
98
+ describe('isAvailable', () => {
99
+ it('returns true when LLM is available', async () => {
100
+ const llm = createMockLLMService('{}', true);
101
+ const svc = new ClassifyService(llm);
102
+ expect(await svc.isAvailable()).toBe(true);
103
+ });
104
+ it('returns false when LLM is unavailable', async () => {
105
+ const llm = createMockLLMService('{}', false);
106
+ const svc = new ClassifyService(llm);
107
+ expect(await svc.isAvailable()).toBe(false);
108
+ });
109
+ });
110
+ });
111
+ //# sourceMappingURL=ClassifyService.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClassifyService.test.js","sourceRoot":"","sources":["../../../../src/modules/memory/__tests__/ClassifyService.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,230 @@
1
+ /**
2
+ * Unit Tests — Smart Ingest Handler (SA4E-38)
3
+ * Covers: handleSmartIngest, handleSmartIngestCleanup.
4
+ */
5
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
6
+ import Database from 'better-sqlite3';
7
+ import { MemoryEngine } from '../engine/index.js';
8
+ import { MEMORY_SCHEMA } from '../schema/index.js';
9
+ import { handleSmartIngest, handleSmartIngestCleanup } from '../dispatchers/smart-ingest.js';
10
+ function createTestDb() {
11
+ const db = new Database(':memory:');
12
+ db.pragma('journal_mode = WAL');
13
+ db.pragma('foreign_keys = ON');
14
+ db.exec(MEMORY_SCHEMA);
15
+ return db;
16
+ }
17
+ function createMockClassify(verdict, summary, available = true) {
18
+ return {
19
+ classify: vi.fn().mockResolvedValue({ verdict, summary }),
20
+ isAvailable: vi.fn().mockResolvedValue(available),
21
+ buildPrompt: vi.fn(),
22
+ parseResponse: vi.fn(),
23
+ };
24
+ }
25
+ function createUnavailableClassify() {
26
+ return {
27
+ classify: vi.fn(),
28
+ isAvailable: vi.fn().mockResolvedValue(false),
29
+ buildPrompt: vi.fn(),
30
+ parseResponse: vi.fn(),
31
+ };
32
+ }
33
+ describe('handleSmartIngest', () => {
34
+ let db;
35
+ let engine;
36
+ beforeEach(() => {
37
+ db = createTestDb();
38
+ engine = new MemoryEngine(db);
39
+ engine.startSession('test');
40
+ });
41
+ it('skips empty message', async () => {
42
+ const svc = createMockClassify('ingest', 'test');
43
+ const result = JSON.parse(await handleSmartIngest(engine, undefined, svc, { message: '' }));
44
+ expect(result.action).toBe('skip');
45
+ expect(result.reason).toBe('empty_message');
46
+ });
47
+ it('skips null message', async () => {
48
+ const svc = createMockClassify('ingest', 'test');
49
+ const result = JSON.parse(await handleSmartIngest(engine, undefined, svc, {}));
50
+ expect(result.action).toBe('skip');
51
+ expect(result.reason).toBe('empty_message');
52
+ });
53
+ it('falls back to unfiltered when LLM unavailable', async () => {
54
+ const svc = createUnavailableClassify();
55
+ const result = JSON.parse(await handleSmartIngest(engine, undefined, svc, { message: 'test content' }));
56
+ expect(result.action).toBe('ingest_unfiltered');
57
+ expect(result.reason).toBe('llm_unavailable');
58
+ });
59
+ it('falls back to unfiltered when classifyService is undefined', async () => {
60
+ const result = JSON.parse(await handleSmartIngest(engine, undefined, undefined, { message: 'test content' }));
61
+ expect(result.action).toBe('ingest_unfiltered');
62
+ expect(result.reason).toBe('llm_unavailable');
63
+ });
64
+ it('ingests when LLM says ingest', async () => {
65
+ const svc = createMockClassify('ingest', 'Architecture decision: use Strategy pattern');
66
+ const result = JSON.parse(await handleSmartIngest(engine, undefined, svc, { message: 'We decided to use Strategy' }));
67
+ expect(result.action).toBe('ingest');
68
+ expect(result.summary).toBe('Architecture decision: use Strategy pattern');
69
+ });
70
+ it('skips when LLM says skip', async () => {
71
+ const svc = createMockClassify('skip');
72
+ const result = JSON.parse(await handleSmartIngest(engine, undefined, svc, { message: 'hello there' }));
73
+ expect(result.action).toBe('skip');
74
+ expect(result.reason).toBe('no business/technical value');
75
+ });
76
+ it('skips duplicate content', async () => {
77
+ const summary = 'Architecture decision';
78
+ // Pre-insert matching entry
79
+ engine.insert({
80
+ content: summary,
81
+ summary,
82
+ type: 'CONTEXT',
83
+ source: '/chat-prompt',
84
+ tags: 'smart-ingest',
85
+ });
86
+ const svc = createMockClassify('ingest', summary);
87
+ const result = JSON.parse(await handleSmartIngest(engine, undefined, svc, { message: 'test' }));
88
+ expect(result.action).toBe('skip');
89
+ expect(result.reason).toBe('duplicate');
90
+ });
91
+ it('truncates message to 10000 chars', async () => {
92
+ const longMessage = 'A'.repeat(15000);
93
+ const svc = createMockClassify('ingest', 'summary');
94
+ await handleSmartIngest(engine, undefined, svc, { message: longMessage });
95
+ expect(svc.classify).toHaveBeenCalledWith('A'.repeat(10000));
96
+ });
97
+ it('falls back on parse error', async () => {
98
+ const svc = {
99
+ classify: vi.fn().mockRejectedValue(new Error('llm_parse_error')),
100
+ isAvailable: vi.fn().mockResolvedValue(true),
101
+ buildPrompt: vi.fn(),
102
+ parseResponse: vi.fn(),
103
+ };
104
+ const result = JSON.parse(await handleSmartIngest(engine, undefined, svc, { message: 'test content' }));
105
+ expect(result.action).toBe('ingest_unfiltered');
106
+ expect(result.reason).toBe('llm_parse_error');
107
+ });
108
+ it('stores entry with correct tags on ingest', async () => {
109
+ const svc = createMockClassify('ingest', 'Important knowledge');
110
+ await handleSmartIngest(engine, { userId: 'user-1' }, svc, { message: 'test' });
111
+ const entries = db.prepare("SELECT * FROM knowledge_entries WHERE tags LIKE '%smart-ingest%'").all();
112
+ expect(entries.length).toBe(1);
113
+ expect(entries[0].tags).toContain('smart-ingest');
114
+ expect(entries[0].source).toBe('/chat-prompt');
115
+ expect(entries[0].user_id).toBe('user-1');
116
+ });
117
+ it('stores unfiltered entry with unfiltered tag', async () => {
118
+ const svc = createUnavailableClassify();
119
+ await handleSmartIngest(engine, { userId: 'user-1' }, svc, { message: 'some content' });
120
+ const entries = db.prepare("SELECT * FROM knowledge_entries WHERE tags LIKE '%unfiltered%'").all();
121
+ expect(entries.length).toBe(1);
122
+ expect(entries[0].tags).toContain('unfiltered');
123
+ });
124
+ it('never throws — returns error JSON on unexpected failure', async () => {
125
+ // Force an error by making engine.insert throw
126
+ const badEngine = { ...engine, insert: () => { throw new Error('DB error'); } };
127
+ badEngine.getDb = () => db;
128
+ const svc = createMockClassify('ingest', 'test');
129
+ const result = JSON.parse(await handleSmartIngest(badEngine, undefined, svc, { message: 'test' }));
130
+ expect(result.action).toBe('error');
131
+ expect(result.reason).toBe('ingest_failed');
132
+ });
133
+ });
134
+ describe('handleSmartIngestCleanup', () => {
135
+ let db;
136
+ let engine;
137
+ beforeEach(() => {
138
+ db = createTestDb();
139
+ engine = new MemoryEngine(db);
140
+ engine.startSession('test');
141
+ });
142
+ function seedUnfiltered(content) {
143
+ return engine.insert({
144
+ content,
145
+ summary: content.slice(0, 120),
146
+ type: 'CONTEXT',
147
+ source: '/chat-prompt',
148
+ tags: 'chat,stream,user,unfiltered',
149
+ });
150
+ }
151
+ it('returns unavailable when LLM is down', async () => {
152
+ const svc = createUnavailableClassify();
153
+ const result = JSON.parse(await handleSmartIngestCleanup(engine, undefined, svc, {}));
154
+ expect(result.processed).toBe(0);
155
+ expect(result.reason).toBe('llm_unavailable');
156
+ });
157
+ it('processes unfiltered entries — ingest verdict', async () => {
158
+ seedUnfiltered('Architecture decision about transport layer');
159
+ const svc = createMockClassify('ingest', 'Transport layer decision');
160
+ const result = JSON.parse(await handleSmartIngestCleanup(engine, undefined, svc, {}));
161
+ expect(result.processed).toBe(1);
162
+ expect(result.ingested).toBe(1);
163
+ expect(result.deleted).toBe(0);
164
+ });
165
+ it('processes unfiltered entries — skip verdict deletes', async () => {
166
+ seedUnfiltered('hello there');
167
+ const svc = createMockClassify('skip');
168
+ const result = JSON.parse(await handleSmartIngestCleanup(engine, undefined, svc, {}));
169
+ expect(result.processed).toBe(1);
170
+ expect(result.ingested).toBe(0);
171
+ expect(result.deleted).toBe(1);
172
+ });
173
+ it('respects batch_size parameter', async () => {
174
+ seedUnfiltered('entry 1');
175
+ seedUnfiltered('entry 2');
176
+ seedUnfiltered('entry 3');
177
+ const svc = createMockClassify('ingest', 'test');
178
+ const result = JSON.parse(await handleSmartIngestCleanup(engine, undefined, svc, { batch_size: 2 }));
179
+ expect(result.processed).toBe(2);
180
+ });
181
+ it('clamps batch_size to 1-100 range', async () => {
182
+ seedUnfiltered('entry 1');
183
+ const svc = createMockClassify('ingest', 'test');
184
+ // batch_size > 100 → clamped to 100
185
+ await handleSmartIngestCleanup(engine, undefined, svc, { batch_size: 200 });
186
+ // batch_size < 1 → clamped to 1
187
+ await handleSmartIngestCleanup(engine, undefined, svc, { batch_size: 0 });
188
+ // No error — function handles gracefully
189
+ });
190
+ it('dry_run does not modify entries', async () => {
191
+ const id = seedUnfiltered('test entry');
192
+ const svc = createMockClassify('skip');
193
+ const result = JSON.parse(await handleSmartIngestCleanup(engine, undefined, svc, { dry_run: true }));
194
+ expect(result.processed).toBe(1);
195
+ expect(result.deleted).toBe(1);
196
+ expect(result.dry_run).toBe(true);
197
+ // Entry should still exist
198
+ const entry = engine.findById(id);
199
+ expect(entry).toBeDefined();
200
+ });
201
+ it('stops on mid-batch LLM failure', async () => {
202
+ seedUnfiltered('entry 1');
203
+ seedUnfiltered('entry 2');
204
+ let callCount = 0;
205
+ const svc = {
206
+ classify: vi.fn().mockImplementation(() => {
207
+ callCount++;
208
+ if (callCount === 2)
209
+ throw new Error('LLM timeout');
210
+ return Promise.resolve({ verdict: 'ingest', summary: 'test' });
211
+ }),
212
+ isAvailable: vi.fn().mockResolvedValue(true),
213
+ buildPrompt: vi.fn(),
214
+ parseResponse: vi.fn(),
215
+ };
216
+ const result = JSON.parse(await handleSmartIngestCleanup(engine, undefined, svc, {}));
217
+ expect(result.processed).toBe(1);
218
+ expect(result.reason).toBe('llm_unavailable_mid_batch');
219
+ });
220
+ it('reports correct remaining count', async () => {
221
+ seedUnfiltered('entry 1');
222
+ seedUnfiltered('entry 2');
223
+ seedUnfiltered('entry 3');
224
+ const svc = createMockClassify('skip');
225
+ const result = JSON.parse(await handleSmartIngestCleanup(engine, undefined, svc, { batch_size: 2 }));
226
+ expect(result.processed).toBe(2);
227
+ expect(result.remaining).toBe(1);
228
+ });
229
+ });
230
+ //# sourceMappingURL=SmartIngest.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SmartIngest.test.js","sourceRoot":"","sources":["../../../../src/modules/memory/__tests__/SmartIngest.test.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAG7F,SAAS,YAAY;IACnB,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC;IACpC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAC/B,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACvB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,kBAAkB,CAAC,OAA0B,EAAE,OAAgB,EAAE,SAAS,GAAG,IAAI;IACxF,OAAO;QACL,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;QACzD,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;QACjD,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE;QACpB,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE;KACO,CAAC;AAClC,CAAC;AAED,SAAS,yBAAyB;IAChC,OAAO;QACL,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE;QACjB,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC;QAC7C,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE;QACpB,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE;KACO,CAAC;AAClC,CAAC;AAED,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAI,EAAqB,CAAC;IAC1B,IAAI,MAAoB,CAAC;IAEzB,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,GAAG,YAAY,EAAE,CAAC;QACpB,MAAM,GAAG,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC;QAC9B,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;QACnC,MAAM,GAAG,GAAG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAE5F,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,GAAG,GAAG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAE/E,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,GAAG,GAAG,yBAAyB,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;QAExG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;QAE9G,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,GAAG,GAAG,kBAAkB,CAAC,QAAQ,EAAE,6CAA6C,CAAC,CAAC;QACxF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC,CAAC,CAAC;QAEtH,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,GAAG,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;QAEvG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;QACvC,MAAM,OAAO,GAAG,uBAAuB,CAAC;QACxC,4BAA4B;QAC5B,MAAM,CAAC,MAAM,CAAC;YACZ,OAAO,EAAE,OAAO;YAChB,OAAO;YACP,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,cAAc;YACtB,IAAI,EAAE,cAAc;SACrB,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAEhG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACpD,MAAM,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QAE1E,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,GAAG,GAAG;YACV,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACjE,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC;YAC5C,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE;YACpB,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE;SACO,CAAC;QAEhC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;QAExG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,GAAG,GAAG,kBAAkB,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;QAChE,MAAM,iBAAiB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAEhF,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,kEAAkE,CAAC,CAAC,GAAG,EAAW,CAAC;QAC9G,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAClD,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC/C,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,GAAG,GAAG,yBAAyB,EAAE,CAAC;QACxC,MAAM,iBAAiB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;QAExF,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,gEAAgE,CAAC,CAAC,GAAG,EAAW,CAAC;QAC5G,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,+CAA+C;QAC/C,MAAM,SAAS,GAAG,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAS,CAAC;QACvF,SAAS,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QACnG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,IAAI,EAAqB,CAAC;IAC1B,IAAI,MAAoB,CAAC;IAEzB,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,GAAG,YAAY,EAAE,CAAC;QACpB,MAAM,GAAG,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC;QAC9B,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,SAAS,cAAc,CAAC,OAAe;QACrC,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,OAAO;YACP,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YAC9B,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,cAAc;YACtB,IAAI,EAAE,6BAA6B;SACpC,CAAC,CAAC;IACL,CAAC;IAED,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,GAAG,GAAG,yBAAyB,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAEtF,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,cAAc,CAAC,6CAA6C,CAAC,CAAC;QAC9D,MAAM,GAAG,GAAG,kBAAkB,CAAC,QAAQ,EAAE,0BAA0B,CAAC,CAAC;QAErE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAEtF,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,cAAc,CAAC,aAAa,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAEvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAEtF,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,cAAc,CAAC,SAAS,CAAC,CAAC;QAC1B,cAAc,CAAC,SAAS,CAAC,CAAC;QAC1B,cAAc,CAAC,SAAS,CAAC,CAAC;QAC1B,MAAM,GAAG,GAAG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAErG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,cAAc,CAAC,SAAS,CAAC,CAAC;QAC1B,MAAM,GAAG,GAAG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEjD,oCAAoC;QACpC,MAAM,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5E,gCAAgC;QAChC,MAAM,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1E,yCAAyC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,EAAE,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAEvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAErG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,2BAA2B;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAC9C,cAAc,CAAC,SAAS,CAAC,CAAC;QAC1B,cAAc,CAAC,SAAS,CAAC,CAAC;QAE1B,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,MAAM,GAAG,GAAG;YACV,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE;gBACxC,SAAS,EAAE,CAAC;gBACZ,IAAI,SAAS,KAAK,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;gBACpD,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,QAAiB,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YAC1E,CAAC,CAAC;YACF,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC;YAC5C,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE;YACpB,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE;SACO,CAAC;QAEhC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAEtF,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,cAAc,CAAC,SAAS,CAAC,CAAC;QAC1B,cAAc,CAAC,SAAS,CAAC,CAAC;QAC1B,cAAc,CAAC,SAAS,CAAC,CAAC;QAC1B,MAAM,GAAG,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAEvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAErG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Evolution tool definitions — MCP schemas for mem_outcome, mem_verify, mem_configure_decay.
3
+ * P1: mem_outcome functional. mem_verify and mem_configure_decay registered but handled in P2.
4
+ */
5
+ export declare const EVOLUTION_TOOLS: ({
6
+ name: string;
7
+ description: string;
8
+ inputSchema: {
9
+ type: string;
10
+ properties: {
11
+ entry_id: {
12
+ type: string;
13
+ description: string;
14
+ };
15
+ outcome: {
16
+ type: string;
17
+ enum: string[];
18
+ description: string;
19
+ };
20
+ context: {
21
+ type: string;
22
+ description: string;
23
+ };
24
+ agent_name: {
25
+ type: string;
26
+ description: string;
27
+ };
28
+ action?: undefined;
29
+ comment?: undefined;
30
+ half_life_days?: undefined;
31
+ decay_rate?: undefined;
32
+ confidence_floor?: undefined;
33
+ enable_predictive?: undefined;
34
+ };
35
+ required: string[];
36
+ };
37
+ } | {
38
+ name: string;
39
+ description: string;
40
+ inputSchema: {
41
+ type: string;
42
+ properties: {
43
+ entry_id: {
44
+ type: string;
45
+ description: string;
46
+ };
47
+ action: {
48
+ type: string;
49
+ enum: string[];
50
+ description: string;
51
+ };
52
+ comment: {
53
+ type: string;
54
+ description: string;
55
+ };
56
+ outcome?: undefined;
57
+ context?: undefined;
58
+ agent_name?: undefined;
59
+ half_life_days?: undefined;
60
+ decay_rate?: undefined;
61
+ confidence_floor?: undefined;
62
+ enable_predictive?: undefined;
63
+ };
64
+ required: string[];
65
+ };
66
+ } | {
67
+ name: string;
68
+ description: string;
69
+ inputSchema: {
70
+ type: string;
71
+ properties: {
72
+ action: {
73
+ type: string;
74
+ enum: string[];
75
+ description: string;
76
+ };
77
+ half_life_days: {
78
+ type: string;
79
+ description: string;
80
+ };
81
+ decay_rate: {
82
+ type: string;
83
+ description: string;
84
+ };
85
+ confidence_floor: {
86
+ type: string;
87
+ description: string;
88
+ };
89
+ enable_predictive: {
90
+ type: string;
91
+ description: string;
92
+ };
93
+ entry_id?: undefined;
94
+ outcome?: undefined;
95
+ context?: undefined;
96
+ agent_name?: undefined;
97
+ comment?: undefined;
98
+ };
99
+ required: string[];
100
+ };
101
+ })[];
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Evolution tool definitions — MCP schemas for mem_outcome, mem_verify, mem_configure_decay.
3
+ * P1: mem_outcome functional. mem_verify and mem_configure_decay registered but handled in P2.
4
+ */
5
+ export const EVOLUTION_TOOLS = [
6
+ {
7
+ name: 'mem_outcome',
8
+ description: 'Record outcome feedback for a knowledge entry (success/fail/partial). Improves future relevance scoring via Bayesian factor.',
9
+ inputSchema: {
10
+ type: 'object',
11
+ properties: {
12
+ entry_id: { type: 'number', description: 'ID of the knowledge entry' },
13
+ outcome: {
14
+ type: 'string',
15
+ enum: ['success', 'fail', 'partial'],
16
+ description: 'Outcome of using this entry',
17
+ },
18
+ context: { type: 'string', description: 'Optional context about how the entry was used' },
19
+ agent_name: { type: 'string', description: 'Name of the agent recording the outcome' },
20
+ },
21
+ required: ['entry_id', 'outcome'],
22
+ },
23
+ },
24
+ {
25
+ name: 'mem_verify',
26
+ description: 'Verify or reject a knowledge entry flagged by an epoch event. Clears needs_verification flag.',
27
+ inputSchema: {
28
+ type: 'object',
29
+ properties: {
30
+ entry_id: { type: 'number', description: 'ID of the entry to verify' },
31
+ action: {
32
+ type: 'string',
33
+ enum: ['verify', 'reject'],
34
+ description: 'Verify (keep) or reject (archive) the entry',
35
+ },
36
+ comment: { type: 'string', description: 'Optional review comment' },
37
+ },
38
+ required: ['entry_id', 'action'],
39
+ },
40
+ },
41
+ {
42
+ name: 'mem_configure_decay',
43
+ description: 'View or update decay configuration (half-life, decay rate, confidence floor, predictive scoring).',
44
+ inputSchema: {
45
+ type: 'object',
46
+ properties: {
47
+ action: {
48
+ type: 'string',
49
+ enum: ['get', 'set'],
50
+ description: 'Get current config or set new values',
51
+ },
52
+ half_life_days: { type: 'number', description: 'Days for temporal weight to reach 50%' },
53
+ decay_rate: { type: 'number', description: 'Confidence reduction per cycle (0-1)' },
54
+ confidence_floor: { type: 'number', description: 'Minimum confidence value (0-1)' },
55
+ enable_predictive: { type: 'boolean', description: 'Enable predictive scoring' },
56
+ },
57
+ required: ['action'],
58
+ },
59
+ },
60
+ ];
61
+ //# sourceMappingURL=evolution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evolution.js","sourceRoot":"","sources":["../../../../src/modules/memory/definitions/evolution.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,8HAA8H;QAC3I,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE;gBACtE,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC;oBACpC,WAAW,EAAE,6BAA6B;iBAC3C;gBACD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+CAA+C,EAAE;gBACzF,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yCAAyC,EAAE;aACvF;YACD,QAAQ,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;SAClC;KACF;IACD;QACE,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,+FAA+F;QAC5G,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE;gBACtE,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;oBAC1B,WAAW,EAAE,6CAA6C;iBAC3D;gBACD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yBAAyB,EAAE;aACpE;YACD,QAAQ,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;SACjC;KACF;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,mGAAmG;QAChH,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;oBACpB,WAAW,EAAE,sCAAsC;iBACpD;gBACD,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uCAAuC,EAAE;gBACxF,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sCAAsC,EAAE;gBACnF,gBAAgB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gCAAgC,EAAE;gBACnF,iBAAiB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,2BAA2B,EAAE;aACjF;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;KACF;CACF,CAAC"}