crbro-memory 1.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.
Files changed (59) hide show
  1. package/README.md +122 -0
  2. package/bin/crbro.js +99 -0
  3. package/dist/engine/brain.d.ts +43 -0
  4. package/dist/engine/brain.d.ts.map +1 -0
  5. package/dist/engine/brain.js +179 -0
  6. package/dist/engine/brain.js.map +1 -0
  7. package/dist/engine/cortex.d.ts +70 -0
  8. package/dist/engine/cortex.d.ts.map +1 -0
  9. package/dist/engine/cortex.js +219 -0
  10. package/dist/engine/cortex.js.map +1 -0
  11. package/dist/engine/heat.d.ts +28 -0
  12. package/dist/engine/heat.d.ts.map +1 -0
  13. package/dist/engine/heat.js +112 -0
  14. package/dist/engine/heat.js.map +1 -0
  15. package/dist/engine/hippocampus.d.ts +26 -0
  16. package/dist/engine/hippocampus.d.ts.map +1 -0
  17. package/dist/engine/hippocampus.js +73 -0
  18. package/dist/engine/hippocampus.js.map +1 -0
  19. package/dist/engine/license.d.ts +29 -0
  20. package/dist/engine/license.d.ts.map +1 -0
  21. package/dist/engine/license.js +109 -0
  22. package/dist/engine/license.js.map +1 -0
  23. package/dist/engine/maintenance.d.ts +41 -0
  24. package/dist/engine/maintenance.d.ts.map +1 -0
  25. package/dist/engine/maintenance.js +156 -0
  26. package/dist/engine/maintenance.js.map +1 -0
  27. package/dist/engine/prefrontal.d.ts +31 -0
  28. package/dist/engine/prefrontal.d.ts.map +1 -0
  29. package/dist/engine/prefrontal.js +149 -0
  30. package/dist/engine/prefrontal.js.map +1 -0
  31. package/dist/engine/synapses.d.ts +39 -0
  32. package/dist/engine/synapses.d.ts.map +1 -0
  33. package/dist/engine/synapses.js +154 -0
  34. package/dist/engine/synapses.js.map +1 -0
  35. package/dist/index.d.ts +2 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +16 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/search/index.d.ts +31 -0
  40. package/dist/search/index.d.ts.map +1 -0
  41. package/dist/search/index.js +139 -0
  42. package/dist/search/index.js.map +1 -0
  43. package/dist/server.d.ts +3 -0
  44. package/dist/server.d.ts.map +1 -0
  45. package/dist/server.js +543 -0
  46. package/dist/server.js.map +1 -0
  47. package/dist/types/index.d.ts +121 -0
  48. package/dist/types/index.d.ts.map +1 -0
  49. package/dist/types/index.js +5 -0
  50. package/dist/types/index.js.map +1 -0
  51. package/dist/utils/fs.d.ts +35 -0
  52. package/dist/utils/fs.d.ts.map +1 -0
  53. package/dist/utils/fs.js +110 -0
  54. package/dist/utils/fs.js.map +1 -0
  55. package/dist/utils/ids.d.ts +32 -0
  56. package/dist/utils/ids.d.ts.map +1 -0
  57. package/dist/utils/ids.js +92 -0
  58. package/dist/utils/ids.js.map +1 -0
  59. package/package.json +52 -0
@@ -0,0 +1,31 @@
1
+ import type { Brain } from '../engine/brain.js';
2
+ import type { Neuron, SearchResult } from '../types/index.js';
3
+ export declare class SearchEngine {
4
+ private brain;
5
+ private db;
6
+ constructor(brain: Brain);
7
+ /**
8
+ * Initialize or restore the search index.
9
+ */
10
+ init(): Promise<void>;
11
+ /**
12
+ * Rebuild the entire search index from cortex files.
13
+ */
14
+ rebuild(): Promise<number>;
15
+ /**
16
+ * Index a single neuron (for real-time updates).
17
+ */
18
+ indexNeuron(neuron: Neuron): Promise<void>;
19
+ /**
20
+ * Search for neurons matching a query.
21
+ */
22
+ search(query: string, options?: {
23
+ domain?: string;
24
+ limit?: number;
25
+ }): Promise<SearchResult[]>;
26
+ /**
27
+ * Persist the search index to disk.
28
+ */
29
+ persist(): Promise<void>;
30
+ }
31
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/search/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAa9D,qBAAa,YAAY;IAGX,OAAO,CAAC,KAAK;IAFzB,OAAO,CAAC,EAAE,CAAyB;gBAEf,KAAK,EAAE,KAAK;IAEhC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAsB3B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IA2BhC;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBhD;;OAEG;IACG,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5C,OAAO,CAAC,YAAY,EAAE,CAAC;IA+B1B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAK/B"}
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ // ─── CRBRO Search Engine ─────────────────────────────────────────
3
+ // Hybrid search powered by Orama (text + BM25 + fuzzy)
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.SearchEngine = void 0;
6
+ const orama_1 = require("@orama/orama");
7
+ const fs_js_1 = require("../utils/fs.js");
8
+ // Orama schema for indexing neurons
9
+ const SCHEMA = {
10
+ id: 'string',
11
+ name: 'string',
12
+ summary: 'string',
13
+ facts: 'string',
14
+ domain: 'string',
15
+ tags: 'string',
16
+ heat: 'number',
17
+ };
18
+ class SearchEngine {
19
+ brain;
20
+ db = null;
21
+ constructor(brain) {
22
+ this.brain = brain;
23
+ }
24
+ /**
25
+ * Initialize or restore the search index.
26
+ */
27
+ async init() {
28
+ const indexPath = this.brain.paths.searchIndex();
29
+ const indexExists = await (0, fs_js_1.fileExists)(indexPath);
30
+ if (indexExists) {
31
+ try {
32
+ const savedData = await (0, fs_js_1.readJSON)(indexPath);
33
+ if (savedData) {
34
+ // Create a fresh db then load data into it
35
+ this.db = (0, orama_1.create)({ schema: SCHEMA });
36
+ (0, orama_1.load)(this.db, savedData);
37
+ return;
38
+ }
39
+ }
40
+ catch {
41
+ // Index corrupted — rebuild
42
+ }
43
+ }
44
+ // Create fresh index
45
+ await this.rebuild();
46
+ }
47
+ /**
48
+ * Rebuild the entire search index from cortex files.
49
+ */
50
+ async rebuild() {
51
+ this.db = (0, orama_1.create)({ schema: SCHEMA });
52
+ const ids = await (0, fs_js_1.listJSONFiles)(this.brain.paths.cortex);
53
+ let indexed = 0;
54
+ for (const id of ids) {
55
+ const neuron = await (0, fs_js_1.readJSON)(this.brain.paths.neuron(id));
56
+ if (!neuron)
57
+ continue;
58
+ await (0, orama_1.insert)(this.db, {
59
+ id: neuron.id,
60
+ name: neuron.name,
61
+ summary: neuron.summary,
62
+ facts: neuron.facts.map(f => f.text).join(' | '),
63
+ domain: neuron.domain,
64
+ tags: neuron.tags.join(' '),
65
+ heat: neuron.heat,
66
+ });
67
+ indexed++;
68
+ }
69
+ // Save index to disk
70
+ await this.persist();
71
+ return indexed;
72
+ }
73
+ /**
74
+ * Index a single neuron (for real-time updates).
75
+ */
76
+ async indexNeuron(neuron) {
77
+ if (!this.db)
78
+ await this.init();
79
+ if (!this.db)
80
+ return;
81
+ // Remove existing entry if present (ignore errors)
82
+ try {
83
+ await (0, orama_1.remove)(this.db, neuron.id);
84
+ }
85
+ catch {
86
+ // Not found — fine
87
+ }
88
+ await (0, orama_1.insert)(this.db, {
89
+ id: neuron.id,
90
+ name: neuron.name,
91
+ summary: neuron.summary,
92
+ facts: neuron.facts.map(f => f.text).join(' | '),
93
+ domain: neuron.domain,
94
+ tags: neuron.tags.join(' '),
95
+ heat: neuron.heat,
96
+ });
97
+ }
98
+ /**
99
+ * Search for neurons matching a query.
100
+ */
101
+ async search(query, options) {
102
+ if (!this.db)
103
+ await this.init();
104
+ if (!this.db)
105
+ return [];
106
+ const limit = options?.limit || 10;
107
+ const searchParams = {
108
+ term: query,
109
+ properties: ['name', 'summary', 'facts', 'tags'],
110
+ boost: { name: 3, summary: 2, facts: 1, tags: 1 },
111
+ limit,
112
+ tolerance: 2,
113
+ };
114
+ // Domain filter
115
+ if (options?.domain) {
116
+ searchParams.where = { domain: { eq: options.domain } };
117
+ }
118
+ const results = await (0, orama_1.search)(this.db, searchParams);
119
+ return results.hits.map((hit) => ({
120
+ neuron_id: hit.document.id,
121
+ name: hit.document.name,
122
+ domain: hit.document.domain,
123
+ relevance_score: Math.round(hit.score * 1000) / 1000,
124
+ matching_content: hit.document.summary || hit.document.facts?.substring(0, 200) || '',
125
+ heat: hit.document.heat || 0,
126
+ }));
127
+ }
128
+ /**
129
+ * Persist the search index to disk.
130
+ */
131
+ async persist() {
132
+ if (!this.db)
133
+ return;
134
+ const data = (0, orama_1.save)(this.db);
135
+ await (0, fs_js_1.writeJSON)(this.brain.paths.searchIndex(), data);
136
+ }
137
+ }
138
+ exports.SearchEngine = SearchEngine;
139
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/search/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function createServer(): McpServer;
3
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAapE,wBAAgB,YAAY,IAAI,SAAS,CA6mBxC"}