@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.
- package/dist/brain/brain.d.ts +12 -3
- package/dist/brain/brain.d.ts.map +1 -1
- package/dist/brain/brain.js +87 -12
- package/dist/brain/brain.js.map +1 -1
- package/dist/cognee/client.d.ts +35 -0
- package/dist/cognee/client.d.ts.map +1 -0
- package/dist/cognee/client.js +289 -0
- package/dist/cognee/client.js.map +1 -0
- package/dist/cognee/types.d.ts +46 -0
- package/dist/cognee/types.d.ts.map +1 -0
- package/dist/cognee/types.js +3 -0
- package/dist/cognee/types.js.map +1 -0
- package/dist/facades/types.d.ts +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/brain.test.ts +222 -27
- package/src/__tests__/cognee-client.test.ts +524 -0
- package/src/brain/brain.ts +109 -12
- package/src/cognee/client.ts +350 -0
- package/src/cognee/types.ts +62 -0
- package/src/index.ts +11 -0
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cognee/types.ts"],"names":[],"mappings":"AAAA,sEAAsE"}
|
package/dist/facades/types.d.ts
CHANGED
|
@@ -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';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,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', {
|
|
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({
|
|
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
|
});
|