@soleri/core 1.0.0 → 2.0.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/cognee/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ export interface CogneeConfig {
2
+ /** Base URL of the Cognee API (default: http://localhost:8000) */
3
+ baseUrl: string;
4
+ /** Dataset name for this agent's vault entries */
5
+ dataset: string;
6
+ /** Bearer token for Cognee API authentication (auto-acquired if not set) */
7
+ apiToken?: string;
8
+ /** Service account email for auto-login (default: soleri-agent@cognee.dev) */
9
+ serviceEmail?: string;
10
+ /** Service account password for auto-login */
11
+ servicePassword?: string;
12
+ /** Default request timeout in milliseconds (default: 30000) */
13
+ timeoutMs: number;
14
+ /** Search timeout in milliseconds — Ollama cold start can take 90s (default: 120000) */
15
+ searchTimeoutMs: number;
16
+ /** Health check timeout in milliseconds (default: 5000) */
17
+ healthTimeoutMs: number;
18
+ /** Health check cache TTL in milliseconds (default: 60000) */
19
+ healthCacheTtlMs: number;
20
+ /** Cognify debounce window in milliseconds (default: 30000) */
21
+ cognifyDebounceMs: number;
22
+ }
23
+ export interface CogneeSearchResult {
24
+ /** Vault entry ID (cross-reference key) */
25
+ id: string;
26
+ /** Relevance score (0–1). Position-based when Cognee omits scores. */
27
+ score: number;
28
+ /** Text content from Cognee */
29
+ text: string;
30
+ /** Cognee search type that produced this result */
31
+ searchType: CogneeSearchType;
32
+ }
33
+ export type CogneeSearchType = 'SUMMARIES' | 'CHUNKS' | 'RAG_COMPLETION' | 'TRIPLET_COMPLETION' | 'GRAPH_COMPLETION' | 'GRAPH_SUMMARY_COMPLETION' | 'NATURAL_LANGUAGE' | 'GRAPH_COMPLETION_COT' | 'FEELING_LUCKY' | 'CHUNKS_LEXICAL';
34
+ export interface CogneeStatus {
35
+ available: boolean;
36
+ url: string;
37
+ latencyMs: number;
38
+ error?: string;
39
+ }
40
+ export interface CogneeAddResult {
41
+ added: number;
42
+ }
43
+ export interface CogneeCognifyResult {
44
+ status: string;
45
+ }
46
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cognee/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB,wFAAwF;IACxF,eAAe,EAAE,MAAM,CAAC;IACxB,2DAA2D;IAC3D,eAAe,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,gBAAgB,EAAE,MAAM,CAAC;IACzB,+DAA+D;IAC/D,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,2CAA2C;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,UAAU,EAAE,gBAAgB,CAAC;CAC9B;AAED,MAAM,MAAM,gBAAgB,GACxB,WAAW,GACX,QAAQ,GACR,gBAAgB,GAChB,oBAAoB,GACpB,kBAAkB,GAClB,0BAA0B,GAC1B,kBAAkB,GAClB,sBAAsB,GACtB,eAAe,GACf,gBAAgB,CAAC;AAErB,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,3 @@
1
+ // ─── Cognee Integration Types ──────────────────────────────────────
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cognee/types.ts"],"names":[],"mappings":"AAAA,sEAAsE"}
@@ -32,8 +32,8 @@ export declare const facadeInputSchema: z.ZodObject<{
32
32
  op: z.ZodString;
33
33
  params: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
34
34
  }, "strip", z.ZodTypeAny, {
35
- params: Record<string, unknown>;
36
35
  op: string;
36
+ params: Record<string, unknown>;
37
37
  }, {
38
38
  op: string;
39
39
  params?: Record<string, unknown> | undefined;
package/dist/index.d.ts CHANGED
@@ -4,6 +4,8 @@ export { Vault } from './vault/vault.js';
4
4
  export type { SearchResult, VaultStats, ProjectInfo, Memory, MemoryStats } from './vault/vault.js';
5
5
  export { Brain } from './brain/brain.js';
6
6
  export type { ScoringWeights, ScoreBreakdown, RankedResult, SearchOptions, CaptureResult, BrainStats, QueryContext, } from './brain/brain.js';
7
+ export { CogneeClient } from './cognee/client.js';
8
+ export type { CogneeConfig, CogneeSearchResult, CogneeSearchType, CogneeStatus, CogneeAddResult, CogneeCognifyResult, } from './cognee/types.js';
7
9
  export { Planner } from './planning/planner.js';
8
10
  export type { PlanStatus, TaskStatus, PlanTask, Plan, PlanStore } from './planning/planner.js';
9
11
  export { SecretString, LLMError } from './llm/types.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGhE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGnG,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,YAAY,EACV,cAAc,EACd,cAAc,EACd,YAAY,EACZ,aAAa,EACb,aAAa,EACb,UAAU,EACV,YAAY,GACb,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAG/F,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACxD,YAAY,EACV,cAAc,EACd,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,sBAAsB,EACtB,aAAa,EACb,SAAS,EACT,UAAU,EACV,aAAa,EACb,aAAa,EACb,WAAW,GACZ,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,KAAK,EACL,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,YAAY,EACV,SAAS,EACT,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,WAAW,GACZ,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGhE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGnG,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,YAAY,EACV,cAAc,EACd,cAAc,EACd,YAAY,EACZ,aAAa,EACb,aAAa,EACb,UAAU,EACV,YAAY,GACb,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EACV,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAG/F,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACxD,YAAY,EACV,cAAc,EACd,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,sBAAsB,EACtB,aAAa,EACb,SAAS,EACT,UAAU,EACV,aAAa,EACb,aAAa,EACb,WAAW,GACZ,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,KAAK,EACL,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,YAAY,EACV,SAAS,EACT,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,WAAW,GACZ,MAAM,oBAAoB,CAAC"}
package/dist/index.js CHANGED
@@ -3,6 +3,8 @@ export { loadIntelligenceData } from './intelligence/loader.js';
3
3
  export { Vault } from './vault/vault.js';
4
4
  // ─── Brain ───────────────────────────────────────────────────────────
5
5
  export { Brain } from './brain/brain.js';
6
+ // ─── Cognee ─────────────────────────────────────────────────────────
7
+ export { CogneeClient } from './cognee/client.js';
6
8
  // ─── Planning ────────────────────────────────────────────────────────
7
9
  export { Planner } from './planning/planner.js';
8
10
  // ─── LLM Types ───────────────────────────────────────────────────────
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,wEAAwE;AACxE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAGzC,wEAAwE;AACxE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAWzC,wEAAwE;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAGhD,wEAAwE;AACxE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAexD,wEAAwE;AACxE,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,KAAK,EACL,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAExB,uEAAuE;AACvE,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAG/D,wEAAwE;AACxE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,wEAAwE;AACxE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAGzC,wEAAwE;AACxE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAWzC,uEAAuE;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAUlD,wEAAwE;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAGhD,wEAAwE;AACxE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAexD,wEAAwE;AACxE,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,KAAK,EACL,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAExB,uEAAuE;AACvE,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAG/D,wEAAwE;AACxE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@soleri/core",
3
- "version": "1.0.0",
3
+ "version": "2.0.0",
4
4
  "description": "Shared engine for Soleri agents — vault, brain, planner, LLM utilities, and facade infrastructure.",
5
5
  "keywords": [
6
6
  "agent",
@@ -1,7 +1,9 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
2
  import { Vault } from '../vault/vault.js';
3
3
  import { Brain } from '../brain/brain.js';
4
4
  import type { IntelligenceEntry } from '../intelligence/types.js';
5
+ import type { CogneeClient } from '../cognee/client.js';
6
+ import type { CogneeSearchResult, CogneeStatus } from '../cognee/types.js';
5
7
 
6
8
  function makeEntry(overrides: Partial<IntelligenceEntry> = {}): IntelligenceEntry {
7
9
  return {
@@ -15,6 +17,36 @@ function makeEntry(overrides: Partial<IntelligenceEntry> = {}): IntelligenceEntr
15
17
  };
16
18
  }
17
19
 
20
+ function makeMockCognee(
21
+ overrides: {
22
+ available?: boolean;
23
+ searchResults?: CogneeSearchResult[];
24
+ searchError?: boolean;
25
+ } = {},
26
+ ): CogneeClient {
27
+ const available = overrides.available ?? true;
28
+ return {
29
+ get isAvailable() {
30
+ return available;
31
+ },
32
+ search: overrides.searchError
33
+ ? vi.fn().mockRejectedValue(new Error('timeout'))
34
+ : vi.fn().mockResolvedValue(overrides.searchResults ?? []),
35
+ addEntries: vi.fn().mockResolvedValue({ added: 0 }),
36
+ cognify: vi.fn().mockResolvedValue({ status: 'ok' }),
37
+ healthCheck: vi
38
+ .fn()
39
+ .mockResolvedValue({ available, url: 'http://localhost:8000', latencyMs: 1 } as CogneeStatus),
40
+ getConfig: vi.fn().mockReturnValue({
41
+ baseUrl: 'http://localhost:8000',
42
+ dataset: 'vault',
43
+ timeoutMs: 5000,
44
+ healthCacheTtlMs: 60000,
45
+ }),
46
+ getStatus: vi.fn().mockReturnValue(null),
47
+ } as unknown as CogneeClient;
48
+ }
49
+
18
50
  describe('Brain', () => {
19
51
  let vault: Vault;
20
52
  let brain: Brain;
@@ -53,6 +85,12 @@ describe('Brain', () => {
53
85
  const brain2 = new Brain(vault);
54
86
  expect(brain2.getVocabularySize()).toBeGreaterThan(0);
55
87
  });
88
+
89
+ it('should accept optional CogneeClient', () => {
90
+ const cognee = makeMockCognee();
91
+ const brain2 = new Brain(vault, cognee);
92
+ expect(brain2.getVocabularySize()).toBe(0);
93
+ });
56
94
  });
57
95
 
58
96
  // ─── Intelligent Search ──────────────────────────────────────
@@ -89,49 +127,52 @@ describe('Brain', () => {
89
127
  brain = new Brain(vault);
90
128
  });
91
129
 
92
- it('should return ranked results', () => {
93
- const results = brain.intelligentSearch('validation input');
130
+ it('should return ranked results', async () => {
131
+ const results = await brain.intelligentSearch('validation input');
94
132
  expect(results.length).toBeGreaterThan(0);
95
133
  expect(results[0].entry.id).toBe('is-1');
96
134
  });
97
135
 
98
- it('should include score breakdown', () => {
99
- const results = brain.intelligentSearch('validation');
136
+ it('should include score breakdown with vector field', async () => {
137
+ const results = await brain.intelligentSearch('validation');
100
138
  expect(results.length).toBeGreaterThan(0);
101
139
  const breakdown = results[0].breakdown;
102
140
  expect(breakdown).toHaveProperty('semantic');
141
+ expect(breakdown).toHaveProperty('vector');
103
142
  expect(breakdown).toHaveProperty('severity');
104
143
  expect(breakdown).toHaveProperty('recency');
105
144
  expect(breakdown).toHaveProperty('tagOverlap');
106
145
  expect(breakdown).toHaveProperty('domainMatch');
107
146
  expect(breakdown).toHaveProperty('total');
108
147
  expect(breakdown.total).toBe(results[0].score);
148
+ // Without cognee, vector should be 0
149
+ expect(breakdown.vector).toBe(0);
109
150
  });
110
151
 
111
- it('should return empty array for no matches', () => {
112
- const results = brain.intelligentSearch('xyznonexistent');
152
+ it('should return empty array for no matches', async () => {
153
+ const results = await brain.intelligentSearch('xyznonexistent');
113
154
  expect(results).toEqual([]);
114
155
  });
115
156
 
116
- it('should respect limit', () => {
117
- const results = brain.intelligentSearch('pattern', { limit: 1 });
157
+ it('should respect limit', async () => {
158
+ const results = await brain.intelligentSearch('pattern', { limit: 1 });
118
159
  expect(results.length).toBeLessThanOrEqual(1);
119
160
  });
120
161
 
121
- it('should filter by domain', () => {
122
- const results = brain.intelligentSearch('pattern', { domain: 'security' });
162
+ it('should filter by domain', async () => {
163
+ const results = await brain.intelligentSearch('pattern', { domain: 'security' });
123
164
  expect(results.every((r) => r.entry.domain === 'security')).toBe(true);
124
165
  });
125
166
 
126
- it('should boost domain matches when domain is specified', () => {
127
- const withDomain = brain.intelligentSearch('pattern', { domain: 'security' });
167
+ it('should boost domain matches when domain is specified', async () => {
168
+ const withDomain = await brain.intelligentSearch('pattern', { domain: 'security' });
128
169
  if (withDomain.length > 0) {
129
170
  expect(withDomain[0].breakdown.domainMatch).toBe(1.0);
130
171
  }
131
172
  });
132
173
 
133
- it('should boost severity in scoring', () => {
134
- const results = brain.intelligentSearch('pattern');
174
+ it('should boost severity in scoring', async () => {
175
+ const results = await brain.intelligentSearch('pattern');
135
176
  if (results.length >= 2) {
136
177
  const critical = results.find((r) => r.entry.severity === 'critical');
137
178
  const suggestion = results.find((r) => r.entry.severity === 'suggestion');
@@ -141,8 +182,10 @@ describe('Brain', () => {
141
182
  }
142
183
  });
143
184
 
144
- it('should boost tag overlap when tags provided', () => {
145
- const results = brain.intelligentSearch('pattern', { tags: ['validation', 'security'] });
185
+ it('should boost tag overlap when tags provided', async () => {
186
+ const results = await brain.intelligentSearch('pattern', {
187
+ tags: ['validation', 'security'],
188
+ });
146
189
  if (results.length > 0) {
147
190
  const secEntry = results.find((r) => r.entry.id === 'is-1');
148
191
  if (secEntry) {
@@ -151,15 +194,142 @@ describe('Brain', () => {
151
194
  }
152
195
  });
153
196
 
154
- it('should handle search on empty vault gracefully', () => {
197
+ it('should handle search on empty vault gracefully', async () => {
155
198
  const emptyVault = new Vault(':memory:');
156
199
  const emptyBrain = new Brain(emptyVault);
157
- const results = emptyBrain.intelligentSearch('anything');
200
+ const results = await emptyBrain.intelligentSearch('anything');
158
201
  expect(results).toEqual([]);
159
202
  emptyVault.close();
160
203
  });
161
204
  });
162
205
 
206
+ // ─── Hybrid Search (with Cognee) ──────────────────────────────
207
+
208
+ describe('hybrid search with Cognee', () => {
209
+ beforeEach(() => {
210
+ vault.seed([
211
+ makeEntry({
212
+ id: 'hs-1',
213
+ title: 'Authentication flow',
214
+ description: 'JWT-based authentication for API endpoints.',
215
+ domain: 'security',
216
+ severity: 'critical',
217
+ tags: ['auth', 'jwt'],
218
+ }),
219
+ makeEntry({
220
+ id: 'hs-2',
221
+ title: 'Logging best practices',
222
+ description: 'Structured logging with correlation IDs for debugging.',
223
+ domain: 'observability',
224
+ severity: 'warning',
225
+ tags: ['logging', 'debugging'],
226
+ }),
227
+ ]);
228
+ });
229
+
230
+ it('should include vector scores from Cognee in breakdown', async () => {
231
+ const cognee = makeMockCognee({
232
+ searchResults: [{ id: 'hs-1', score: 0.92, text: 'Auth flow', searchType: 'INSIGHTS' }],
233
+ });
234
+ const hybridBrain = new Brain(vault, cognee);
235
+ const results = await hybridBrain.intelligentSearch('authentication');
236
+ expect(results.length).toBeGreaterThan(0);
237
+ const authResult = results.find((r) => r.entry.id === 'hs-1');
238
+ expect(authResult).toBeDefined();
239
+ expect(authResult!.breakdown.vector).toBe(0.92);
240
+ });
241
+
242
+ it('should use cognee-aware weights when vector results are present', async () => {
243
+ const cognee = makeMockCognee({
244
+ searchResults: [{ id: 'hs-1', score: 0.9, text: 'Auth', searchType: 'INSIGHTS' }],
245
+ });
246
+ const hybridBrain = new Brain(vault, cognee);
247
+ const results = await hybridBrain.intelligentSearch('authentication');
248
+ // With cognee weights, vector contributes significantly
249
+ const authResult = results.find((r) => r.entry.id === 'hs-1');
250
+ expect(authResult).toBeDefined();
251
+ // vector=0.9 * weight=0.35 = 0.315 contribution
252
+ expect(authResult!.breakdown.vector).toBe(0.9);
253
+ });
254
+
255
+ it('should merge cognee-only entries into results', async () => {
256
+ // hs-2 may not match FTS5 for "authentication" but Cognee finds it via semantic similarity
257
+ const cognee = makeMockCognee({
258
+ searchResults: [
259
+ { id: 'hs-1', score: 0.95, text: 'Auth', searchType: 'INSIGHTS' },
260
+ { id: 'hs-2', score: 0.6, text: 'Logging', searchType: 'INSIGHTS' },
261
+ ],
262
+ });
263
+ const hybridBrain = new Brain(vault, cognee);
264
+ const results = await hybridBrain.intelligentSearch('authentication');
265
+ // Both entries should be in results (hs-2 merged from Cognee even if not in FTS5)
266
+ const ids = results.map((r) => r.entry.id);
267
+ expect(ids).toContain('hs-1');
268
+ expect(ids).toContain('hs-2');
269
+ const loggingResult = results.find((r) => r.entry.id === 'hs-2');
270
+ expect(loggingResult).toBeDefined();
271
+ expect(loggingResult!.breakdown.vector).toBe(0.6);
272
+ });
273
+
274
+ it('should fall back to FTS5-only on Cognee search error', async () => {
275
+ const cognee = makeMockCognee({ searchError: true });
276
+ const hybridBrain = new Brain(vault, cognee);
277
+ const results = await hybridBrain.intelligentSearch('authentication');
278
+ // Should still work, just without vector scores
279
+ for (const r of results) {
280
+ expect(r.breakdown.vector).toBe(0);
281
+ }
282
+ });
283
+
284
+ it('should work without Cognee (backward compatible)', async () => {
285
+ const noCogneeBrain = new Brain(vault);
286
+ const results = await noCogneeBrain.intelligentSearch('authentication');
287
+ for (const r of results) {
288
+ expect(r.breakdown.vector).toBe(0);
289
+ }
290
+ });
291
+
292
+ it('should handle unavailable Cognee gracefully', async () => {
293
+ const cognee = makeMockCognee({ available: false });
294
+ const hybridBrain = new Brain(vault, cognee);
295
+ const results = await hybridBrain.intelligentSearch('authentication');
296
+ for (const r of results) {
297
+ expect(r.breakdown.vector).toBe(0);
298
+ }
299
+ // search should not have been called
300
+ expect(cognee.search).not.toHaveBeenCalled();
301
+ });
302
+ });
303
+
304
+ // ─── syncToCognee ──────────────────────────────────────────────
305
+
306
+ describe('syncToCognee', () => {
307
+ it('should return 0 when Cognee not available', async () => {
308
+ const result = await brain.syncToCognee();
309
+ expect(result).toEqual({ synced: 0, cognified: false });
310
+ });
311
+
312
+ it('should sync all entries and cognify', async () => {
313
+ vault.seed([makeEntry({ id: 'sync-1' }), makeEntry({ id: 'sync-2' })]);
314
+ const cognee = makeMockCognee();
315
+ (cognee.addEntries as ReturnType<typeof vi.fn>).mockResolvedValue({ added: 2 });
316
+ const hybridBrain = new Brain(vault, cognee);
317
+ const result = await hybridBrain.syncToCognee();
318
+ expect(result.synced).toBe(2);
319
+ expect(result.cognified).toBe(true);
320
+ expect(cognee.addEntries).toHaveBeenCalledTimes(1);
321
+ expect(cognee.cognify).toHaveBeenCalledTimes(1);
322
+ });
323
+
324
+ it('should skip cognify when no entries added', async () => {
325
+ const cognee = makeMockCognee();
326
+ const hybridBrain = new Brain(vault, cognee);
327
+ const result = await hybridBrain.syncToCognee();
328
+ expect(result.synced).toBe(0);
329
+ expect(result.cognified).toBe(false);
330
+ });
331
+ });
332
+
163
333
  // ─── Enrich and Capture ─────────────────────────────────────
164
334
 
165
335
  describe('enrichAndCapture', () => {
@@ -243,6 +413,21 @@ describe('Brain', () => {
243
413
  const entry = vault.get('cap-5');
244
414
  expect(entry!.tags.length).toBeGreaterThan(0);
245
415
  });
416
+
417
+ it('should fire-and-forget sync to Cognee on capture', () => {
418
+ const cognee = makeMockCognee();
419
+ const hybridBrain = new Brain(vault, cognee);
420
+ hybridBrain.enrichAndCapture({
421
+ id: 'cap-cognee-1',
422
+ type: 'pattern',
423
+ domain: 'testing',
424
+ title: 'Cognee sync test',
425
+ severity: 'warning',
426
+ description: 'Testing fire-and-forget Cognee sync.',
427
+ tags: [],
428
+ });
429
+ expect(cognee.addEntries).toHaveBeenCalledTimes(1);
430
+ });
246
431
  });
247
432
 
248
433
  // ─── Duplicate Detection ────────────────────────────────────
@@ -354,6 +539,7 @@ describe('Brain', () => {
354
539
  const stats = brain.getStats();
355
540
  const sum =
356
541
  stats.weights.semantic +
542
+ stats.weights.vector +
357
543
  stats.weights.severity +
358
544
  stats.weights.recency +
359
545
  stats.weights.tagOverlap +
@@ -371,6 +557,11 @@ describe('Brain', () => {
371
557
  const stats = brain.getStats();
372
558
  expect(stats.weights.semantic).toBeCloseTo(0.4, 1);
373
559
  });
560
+
561
+ it('should keep vector weight at 0 in base weights', () => {
562
+ const stats = brain.getStats();
563
+ expect(stats.weights.vector).toBe(0);
564
+ });
374
565
  });
375
566
 
376
567
  // ─── Vocabulary ─────────────────────────────────────────────
@@ -442,6 +633,7 @@ describe('Brain', () => {
442
633
  expect(stats.vocabularySize).toBe(0);
443
634
  expect(stats.feedbackCount).toBe(0);
444
635
  expect(stats.weights.semantic).toBeCloseTo(0.4, 2);
636
+ expect(stats.weights.vector).toBe(0);
445
637
  });
446
638
 
447
639
  it('should return correct vocabulary size after seeding', () => {
@@ -475,7 +667,7 @@ describe('Brain', () => {
475
667
  // ─── Get Relevant Patterns ──────────────────────────────────
476
668
 
477
669
  describe('getRelevantPatterns', () => {
478
- it('should return ranked results for query context', () => {
670
+ it('should return ranked results for query context', async () => {
479
671
  vault.seed([
480
672
  makeEntry({
481
673
  id: 'rel-1',
@@ -493,12 +685,15 @@ describe('Brain', () => {
493
685
  }),
494
686
  ]);
495
687
  brain = new Brain(vault);
496
- const results = brain.getRelevantPatterns({ query: 'authentication', domain: 'security' });
688
+ const results = await brain.getRelevantPatterns({
689
+ query: 'authentication',
690
+ domain: 'security',
691
+ });
497
692
  expect(results.length).toBeGreaterThan(0);
498
693
  });
499
694
 
500
- it('should return empty for no context matches', () => {
501
- const results = brain.getRelevantPatterns({ query: 'nonexistent' });
695
+ it('should return empty for no context matches', async () => {
696
+ const results = await brain.getRelevantPatterns({ query: 'nonexistent' });
502
697
  expect(results).toEqual([]);
503
698
  });
504
699
  });
@@ -506,13 +701,13 @@ describe('Brain', () => {
506
701
  // ─── Graceful Degradation ───────────────────────────────────
507
702
 
508
703
  describe('graceful degradation', () => {
509
- it('should work without vocabulary (empty vault)', () => {
704
+ it('should work without vocabulary (empty vault)', async () => {
510
705
  expect(brain.getVocabularySize()).toBe(0);
511
- const results = brain.intelligentSearch('anything');
706
+ const results = await brain.intelligentSearch('anything');
512
707
  expect(results).toEqual([]);
513
708
  });
514
709
 
515
- it('should fall back to severity + recency scoring when vocabulary is empty', () => {
710
+ it('should fall back to severity + recency scoring when vocabulary is empty', async () => {
516
711
  vault.seed([
517
712
  makeEntry({
518
713
  id: 'gd-1',
@@ -523,7 +718,7 @@ describe('Brain', () => {
523
718
  }),
524
719
  ]);
525
720
  brain = new Brain(vault);
526
- const results = brain.intelligentSearch('fallback test');
721
+ const results = await brain.intelligentSearch('fallback test');
527
722
  expect(results.length).toBeGreaterThan(0);
528
723
  expect(results[0].score).toBeGreaterThan(0);
529
724
  });