@blackms/aistack 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 (214) hide show
  1. package/README.md +244 -0
  2. package/dist/agents/definitions/analyst.d.ts +6 -0
  3. package/dist/agents/definitions/analyst.d.ts.map +1 -0
  4. package/dist/agents/definitions/analyst.js +53 -0
  5. package/dist/agents/definitions/analyst.js.map +1 -0
  6. package/dist/agents/definitions/architect.d.ts +6 -0
  7. package/dist/agents/definitions/architect.d.ts.map +1 -0
  8. package/dist/agents/definitions/architect.js +46 -0
  9. package/dist/agents/definitions/architect.js.map +1 -0
  10. package/dist/agents/definitions/coder.d.ts +6 -0
  11. package/dist/agents/definitions/coder.d.ts.map +1 -0
  12. package/dist/agents/definitions/coder.js +39 -0
  13. package/dist/agents/definitions/coder.js.map +1 -0
  14. package/dist/agents/definitions/coordinator.d.ts +6 -0
  15. package/dist/agents/definitions/coordinator.d.ts.map +1 -0
  16. package/dist/agents/definitions/coordinator.js +54 -0
  17. package/dist/agents/definitions/coordinator.js.map +1 -0
  18. package/dist/agents/definitions/index.d.ts +11 -0
  19. package/dist/agents/definitions/index.d.ts.map +1 -0
  20. package/dist/agents/definitions/index.js +11 -0
  21. package/dist/agents/definitions/index.js.map +1 -0
  22. package/dist/agents/definitions/researcher.d.ts +6 -0
  23. package/dist/agents/definitions/researcher.d.ts.map +1 -0
  24. package/dist/agents/definitions/researcher.js +39 -0
  25. package/dist/agents/definitions/researcher.js.map +1 -0
  26. package/dist/agents/definitions/reviewer.d.ts +6 -0
  27. package/dist/agents/definitions/reviewer.d.ts.map +1 -0
  28. package/dist/agents/definitions/reviewer.js +46 -0
  29. package/dist/agents/definitions/reviewer.js.map +1 -0
  30. package/dist/agents/definitions/tester.d.ts +6 -0
  31. package/dist/agents/definitions/tester.d.ts.map +1 -0
  32. package/dist/agents/definitions/tester.js +44 -0
  33. package/dist/agents/definitions/tester.js.map +1 -0
  34. package/dist/agents/index.d.ts +7 -0
  35. package/dist/agents/index.d.ts.map +1 -0
  36. package/dist/agents/index.js +7 -0
  37. package/dist/agents/index.js.map +1 -0
  38. package/dist/agents/registry.d.ts +41 -0
  39. package/dist/agents/registry.d.ts.map +1 -0
  40. package/dist/agents/registry.js +107 -0
  41. package/dist/agents/registry.js.map +1 -0
  42. package/dist/agents/spawner.d.ts +62 -0
  43. package/dist/agents/spawner.d.ts.map +1 -0
  44. package/dist/agents/spawner.js +169 -0
  45. package/dist/agents/spawner.js.map +1 -0
  46. package/dist/cli/commands/agent.d.ts +6 -0
  47. package/dist/cli/commands/agent.d.ts.map +1 -0
  48. package/dist/cli/commands/agent.js +144 -0
  49. package/dist/cli/commands/agent.js.map +1 -0
  50. package/dist/cli/commands/index.d.ts +10 -0
  51. package/dist/cli/commands/index.d.ts.map +1 -0
  52. package/dist/cli/commands/index.js +10 -0
  53. package/dist/cli/commands/index.js.map +1 -0
  54. package/dist/cli/commands/init.d.ts +6 -0
  55. package/dist/cli/commands/init.d.ts.map +1 -0
  56. package/dist/cli/commands/init.js +50 -0
  57. package/dist/cli/commands/init.js.map +1 -0
  58. package/dist/cli/commands/mcp.d.ts +6 -0
  59. package/dist/cli/commands/mcp.d.ts.map +1 -0
  60. package/dist/cli/commands/mcp.js +82 -0
  61. package/dist/cli/commands/mcp.js.map +1 -0
  62. package/dist/cli/commands/memory.d.ts +6 -0
  63. package/dist/cli/commands/memory.d.ts.map +1 -0
  64. package/dist/cli/commands/memory.js +157 -0
  65. package/dist/cli/commands/memory.js.map +1 -0
  66. package/dist/cli/commands/plugin.d.ts +6 -0
  67. package/dist/cli/commands/plugin.d.ts.map +1 -0
  68. package/dist/cli/commands/plugin.js +146 -0
  69. package/dist/cli/commands/plugin.js.map +1 -0
  70. package/dist/cli/commands/status.d.ts +6 -0
  71. package/dist/cli/commands/status.d.ts.map +1 -0
  72. package/dist/cli/commands/status.js +115 -0
  73. package/dist/cli/commands/status.js.map +1 -0
  74. package/dist/cli/index.d.ts +6 -0
  75. package/dist/cli/index.d.ts.map +1 -0
  76. package/dist/cli/index.js +41 -0
  77. package/dist/cli/index.js.map +1 -0
  78. package/dist/coordination/index.d.ts +7 -0
  79. package/dist/coordination/index.d.ts.map +1 -0
  80. package/dist/coordination/index.js +7 -0
  81. package/dist/coordination/index.js.map +1 -0
  82. package/dist/coordination/message-bus.d.ts +64 -0
  83. package/dist/coordination/message-bus.d.ts.map +1 -0
  84. package/dist/coordination/message-bus.js +148 -0
  85. package/dist/coordination/message-bus.js.map +1 -0
  86. package/dist/coordination/task-queue.d.ts +71 -0
  87. package/dist/coordination/task-queue.d.ts.map +1 -0
  88. package/dist/coordination/task-queue.js +140 -0
  89. package/dist/coordination/task-queue.js.map +1 -0
  90. package/dist/coordination/topology.d.ts +68 -0
  91. package/dist/coordination/topology.d.ts.map +1 -0
  92. package/dist/coordination/topology.js +195 -0
  93. package/dist/coordination/topology.js.map +1 -0
  94. package/dist/github/client.d.ts +56 -0
  95. package/dist/github/client.d.ts.map +1 -0
  96. package/dist/github/client.js +179 -0
  97. package/dist/github/client.js.map +1 -0
  98. package/dist/github/index.d.ts +5 -0
  99. package/dist/github/index.d.ts.map +1 -0
  100. package/dist/github/index.js +5 -0
  101. package/dist/github/index.js.map +1 -0
  102. package/dist/hooks/index.d.ts +29 -0
  103. package/dist/hooks/index.d.ts.map +1 -0
  104. package/dist/hooks/index.js +112 -0
  105. package/dist/hooks/index.js.map +1 -0
  106. package/dist/hooks/session.d.ts +16 -0
  107. package/dist/hooks/session.d.ts.map +1 -0
  108. package/dist/hooks/session.js +60 -0
  109. package/dist/hooks/session.js.map +1 -0
  110. package/dist/hooks/task.d.ts +16 -0
  111. package/dist/hooks/task.d.ts.map +1 -0
  112. package/dist/hooks/task.js +82 -0
  113. package/dist/hooks/task.js.map +1 -0
  114. package/dist/index.d.ts +16 -0
  115. package/dist/index.d.ts.map +1 -0
  116. package/dist/index.js +32 -0
  117. package/dist/index.js.map +1 -0
  118. package/dist/mcp/index.d.ts +6 -0
  119. package/dist/mcp/index.d.ts.map +1 -0
  120. package/dist/mcp/index.js +6 -0
  121. package/dist/mcp/index.js.map +1 -0
  122. package/dist/mcp/server.d.ts +22 -0
  123. package/dist/mcp/server.d.ts.map +1 -0
  124. package/dist/mcp/server.js +128 -0
  125. package/dist/mcp/server.js.map +1 -0
  126. package/dist/mcp/tools/agent-tools.d.ts +174 -0
  127. package/dist/mcp/tools/agent-tools.d.ts.map +1 -0
  128. package/dist/mcp/tools/agent-tools.js +214 -0
  129. package/dist/mcp/tools/agent-tools.js.map +1 -0
  130. package/dist/mcp/tools/github-tools.d.ts +229 -0
  131. package/dist/mcp/tools/github-tools.d.ts.map +1 -0
  132. package/dist/mcp/tools/github-tools.js +286 -0
  133. package/dist/mcp/tools/github-tools.js.map +1 -0
  134. package/dist/mcp/tools/index.d.ts +10 -0
  135. package/dist/mcp/tools/index.d.ts.map +1 -0
  136. package/dist/mcp/tools/index.js +10 -0
  137. package/dist/mcp/tools/index.js.map +1 -0
  138. package/dist/mcp/tools/memory-tools.d.ts +190 -0
  139. package/dist/mcp/tools/memory-tools.d.ts.map +1 -0
  140. package/dist/mcp/tools/memory-tools.js +207 -0
  141. package/dist/mcp/tools/memory-tools.js.map +1 -0
  142. package/dist/mcp/tools/session-tools.d.ts +116 -0
  143. package/dist/mcp/tools/session-tools.d.ts.map +1 -0
  144. package/dist/mcp/tools/session-tools.js +151 -0
  145. package/dist/mcp/tools/session-tools.js.map +1 -0
  146. package/dist/mcp/tools/system-tools.d.ts +98 -0
  147. package/dist/mcp/tools/system-tools.d.ts.map +1 -0
  148. package/dist/mcp/tools/system-tools.js +165 -0
  149. package/dist/mcp/tools/system-tools.js.map +1 -0
  150. package/dist/mcp/tools/task-tools.d.ts +170 -0
  151. package/dist/mcp/tools/task-tools.d.ts.map +1 -0
  152. package/dist/mcp/tools/task-tools.js +188 -0
  153. package/dist/mcp/tools/task-tools.js.map +1 -0
  154. package/dist/memory/fts-search.d.ts +46 -0
  155. package/dist/memory/fts-search.d.ts.map +1 -0
  156. package/dist/memory/fts-search.js +136 -0
  157. package/dist/memory/fts-search.js.map +1 -0
  158. package/dist/memory/index.d.ts +77 -0
  159. package/dist/memory/index.d.ts.map +1 -0
  160. package/dist/memory/index.js +203 -0
  161. package/dist/memory/index.js.map +1 -0
  162. package/dist/memory/sqlite-store.d.ts +36 -0
  163. package/dist/memory/sqlite-store.d.ts.map +1 -0
  164. package/dist/memory/sqlite-store.js +371 -0
  165. package/dist/memory/sqlite-store.js.map +1 -0
  166. package/dist/memory/vector-search.d.ts +43 -0
  167. package/dist/memory/vector-search.d.ts.map +1 -0
  168. package/dist/memory/vector-search.js +179 -0
  169. package/dist/memory/vector-search.js.map +1 -0
  170. package/dist/plugins/index.d.ts +7 -0
  171. package/dist/plugins/index.d.ts.map +1 -0
  172. package/dist/plugins/index.js +7 -0
  173. package/dist/plugins/index.js.map +1 -0
  174. package/dist/plugins/loader.d.ts +33 -0
  175. package/dist/plugins/loader.d.ts.map +1 -0
  176. package/dist/plugins/loader.js +147 -0
  177. package/dist/plugins/loader.js.map +1 -0
  178. package/dist/plugins/registry.d.ts +48 -0
  179. package/dist/plugins/registry.d.ts.map +1 -0
  180. package/dist/plugins/registry.js +72 -0
  181. package/dist/plugins/registry.js.map +1 -0
  182. package/dist/plugins/types.d.ts +5 -0
  183. package/dist/plugins/types.d.ts.map +1 -0
  184. package/dist/plugins/types.js +5 -0
  185. package/dist/plugins/types.js.map +1 -0
  186. package/dist/providers/index.d.ts +49 -0
  187. package/dist/providers/index.d.ts.map +1 -0
  188. package/dist/providers/index.js +254 -0
  189. package/dist/providers/index.js.map +1 -0
  190. package/dist/types.d.ts +189 -0
  191. package/dist/types.d.ts.map +1 -0
  192. package/dist/types.js +10 -0
  193. package/dist/types.js.map +1 -0
  194. package/dist/utils/config.d.ts +32 -0
  195. package/dist/utils/config.d.ts.map +1 -0
  196. package/dist/utils/config.js +194 -0
  197. package/dist/utils/config.js.map +1 -0
  198. package/dist/utils/embeddings.d.ts +23 -0
  199. package/dist/utils/embeddings.d.ts.map +1 -0
  200. package/dist/utils/embeddings.js +151 -0
  201. package/dist/utils/embeddings.js.map +1 -0
  202. package/dist/utils/index.d.ts +8 -0
  203. package/dist/utils/index.d.ts.map +1 -0
  204. package/dist/utils/index.js +8 -0
  205. package/dist/utils/index.js.map +1 -0
  206. package/dist/utils/logger.d.ts +24 -0
  207. package/dist/utils/logger.d.ts.map +1 -0
  208. package/dist/utils/logger.js +96 -0
  209. package/dist/utils/logger.js.map +1 -0
  210. package/dist/utils/validation.d.ts +264 -0
  211. package/dist/utils/validation.d.ts.map +1 -0
  212. package/dist/utils/validation.js +144 -0
  213. package/dist/utils/validation.js.map +1 -0
  214. package/package.json +84 -0
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Full-text search using SQLite FTS5
3
+ */
4
+ export class FTSSearch {
5
+ db;
6
+ constructor(db) {
7
+ this.db = db;
8
+ }
9
+ /**
10
+ * Search memory using FTS5 full-text search
11
+ */
12
+ search(query, options = {}) {
13
+ const { namespace, limit = 10, highlightStart = '<b>', highlightEnd = '</b>', } = options;
14
+ // Escape FTS5 special characters in query
15
+ const escapedQuery = this.escapeFTSQuery(query);
16
+ let sql = `
17
+ SELECT
18
+ m.id, m.key, m.namespace, m.content, m.embedding, m.metadata,
19
+ m.created_at, m.updated_at,
20
+ bm25(memory_fts) as rank,
21
+ snippet(memory_fts, 1, ?, ?, '...', 32) as snippet
22
+ FROM memory_fts fts
23
+ JOIN memory m ON m.rowid = fts.rowid
24
+ WHERE memory_fts MATCH ?
25
+ `;
26
+ const params = [highlightStart, highlightEnd, escapedQuery];
27
+ if (namespace) {
28
+ sql += ' AND m.namespace = ?';
29
+ params.push(namespace);
30
+ }
31
+ sql += ' ORDER BY rank LIMIT ?';
32
+ params.push(limit);
33
+ const rows = this.db.prepare(sql).all(...params);
34
+ return rows.map(row => ({
35
+ entry: this.rowToEntry(row),
36
+ score: this.normalizeScore(row.rank),
37
+ matchType: 'fts',
38
+ }));
39
+ }
40
+ /**
41
+ * Search with phrase matching (exact phrase)
42
+ */
43
+ phraseSearch(phrase, options = {}) {
44
+ // Wrap in quotes for exact phrase match
45
+ const query = `"${phrase.replace(/"/g, '""')}"`;
46
+ return this.search(query, options);
47
+ }
48
+ /**
49
+ * Search with prefix matching (autocomplete)
50
+ */
51
+ prefixSearch(prefix, options = {}) {
52
+ // Add * for prefix matching
53
+ const query = prefix
54
+ .split(/\s+/)
55
+ .filter(term => term.length > 0)
56
+ .map(term => `${term}*`)
57
+ .join(' ');
58
+ return this.search(query, options);
59
+ }
60
+ /**
61
+ * Check if a term exists in the index
62
+ */
63
+ termExists(term, namespace) {
64
+ let sql = `
65
+ SELECT 1 FROM memory_fts fts
66
+ JOIN memory m ON m.rowid = fts.rowid
67
+ WHERE memory_fts MATCH ?
68
+ `;
69
+ const params = [this.escapeFTSQuery(term)];
70
+ if (namespace) {
71
+ sql += ' AND m.namespace = ?';
72
+ params.push(namespace);
73
+ }
74
+ sql += ' LIMIT 1';
75
+ const result = this.db.prepare(sql).get(...params);
76
+ return result !== undefined;
77
+ }
78
+ /**
79
+ * Get suggestions based on existing content
80
+ */
81
+ suggest(partial, limit = 5) {
82
+ const results = this.prefixSearch(partial, { limit });
83
+ const suggestions = new Set();
84
+ for (const result of results) {
85
+ // Extract matching terms from content
86
+ const words = result.entry.content.toLowerCase().split(/\s+/);
87
+ for (const word of words) {
88
+ if (word.startsWith(partial.toLowerCase()) && word.length > partial.length) {
89
+ suggestions.add(word);
90
+ if (suggestions.size >= limit)
91
+ break;
92
+ }
93
+ }
94
+ if (suggestions.size >= limit)
95
+ break;
96
+ }
97
+ return Array.from(suggestions);
98
+ }
99
+ /**
100
+ * Escape special FTS5 characters in query
101
+ */
102
+ escapeFTSQuery(query) {
103
+ // FTS5 special characters: " - ^ * ( ) { } [ ] | : AND OR NOT NEAR
104
+ // We want to allow basic search, so we escape problematic characters
105
+ return query
106
+ .replace(/"/g, '""') // Escape double quotes
107
+ .replace(/[(){}[\]|:^]/g, ' ') // Replace special chars with spaces
108
+ .replace(/\s+/g, ' ') // Normalize whitespace
109
+ .trim();
110
+ }
111
+ /**
112
+ * Normalize BM25 score to 0-1 range
113
+ * BM25 returns negative values where more negative = better match
114
+ */
115
+ normalizeScore(bm25Score) {
116
+ // Convert BM25 to a positive score
117
+ // BM25 values typically range from -25 to 0 for good matches
118
+ const normalized = Math.min(1, Math.max(0, 1 + bm25Score / 25));
119
+ return Math.round(normalized * 1000) / 1000; // Round to 3 decimal places
120
+ }
121
+ rowToEntry(row) {
122
+ return {
123
+ id: row.id,
124
+ key: row.key,
125
+ namespace: row.namespace,
126
+ content: row.content,
127
+ embedding: row.embedding
128
+ ? new Float32Array(row.embedding.buffer)
129
+ : undefined,
130
+ metadata: row.metadata ? JSON.parse(row.metadata) : undefined,
131
+ createdAt: new Date(row.created_at),
132
+ updatedAt: new Date(row.updated_at),
133
+ };
134
+ }
135
+ }
136
+ //# sourceMappingURL=fts-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fts-search.js","sourceRoot":"","sources":["../../src/memory/fts-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Memory module - unified interface for storage and search
3
+ */
4
+ import type { MemoryEntry, MemorySearchResult, MemoryStoreOptions, MemorySearchOptions, AgentStackConfig, Session, Task } from '../types.js';
5
+ export declare class MemoryManager {
6
+ private sqliteStore;
7
+ private fts;
8
+ private vector;
9
+ private config;
10
+ constructor(config: AgentStackConfig);
11
+ /**
12
+ * Store a key-value pair in memory
13
+ */
14
+ store(key: string, content: string, options?: MemoryStoreOptions): Promise<MemoryEntry>;
15
+ /**
16
+ * Get a memory entry by key
17
+ */
18
+ get(key: string, namespace?: string): MemoryEntry | null;
19
+ /**
20
+ * Get a memory entry by ID
21
+ */
22
+ getById(id: string): MemoryEntry | null;
23
+ /**
24
+ * Delete a memory entry
25
+ */
26
+ delete(key: string, namespace?: string): boolean;
27
+ /**
28
+ * List memory entries
29
+ */
30
+ list(namespace?: string, limit?: number, offset?: number): MemoryEntry[];
31
+ /**
32
+ * Count memory entries
33
+ */
34
+ count(namespace?: string): number;
35
+ /**
36
+ * Search memory using FTS and optionally vector search
37
+ */
38
+ search(query: string, options?: MemorySearchOptions): Promise<MemorySearchResult[]>;
39
+ /**
40
+ * Merge and deduplicate search results from different sources
41
+ */
42
+ private mergeResults;
43
+ createSession(metadata?: Record<string, unknown>): Session;
44
+ getSession(id: string): Session | null;
45
+ endSession(id: string): boolean;
46
+ getActiveSession(): Session | null;
47
+ createTask(agentType: string, input?: string, sessionId?: string): Task;
48
+ getTask(id: string): Task | null;
49
+ updateTaskStatus(id: string, status: Task['status'], output?: string): boolean;
50
+ listTasks(sessionId?: string, status?: Task['status']): Task[];
51
+ /**
52
+ * Reindex all entries for vector search
53
+ */
54
+ reindex(namespace?: string): Promise<number>;
55
+ /**
56
+ * Get vector search statistics
57
+ */
58
+ getVectorStats(namespace?: string): {
59
+ total: number;
60
+ indexed: number;
61
+ coverage: number;
62
+ };
63
+ close(): void;
64
+ vacuum(): void;
65
+ }
66
+ export { SQLiteStore } from './sqlite-store.js';
67
+ export { FTSSearch } from './fts-search.js';
68
+ export { VectorSearch } from './vector-search.js';
69
+ /**
70
+ * Get or create the memory manager instance
71
+ */
72
+ export declare function getMemoryManager(config?: AgentStackConfig): MemoryManager;
73
+ /**
74
+ * Reset the memory manager instance
75
+ */
76
+ export declare function resetMemoryManager(): void;
77
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,OAAO,EACP,IAAI,EACL,MAAM,aAAa,CAAC;AAQrB,qBAAa,aAAa;IACxB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,GAAG,CAAY;IACvB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,MAAM,CAAmB;gBAErB,MAAM,EAAE,gBAAgB;IAepC;;OAEG;IACG,KAAK,CACT,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,WAAW,CAAC;IAavB;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAIxD;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAIvC;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO;IAIhD;;OAEG;IACH,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE;IAIxE;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM;IAIjC;;OAEG;IACG,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAqChC;;OAEG;IACH,OAAO,CAAC,YAAY;IA6BpB,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO;IAI1D,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAItC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI/B,gBAAgB,IAAI,OAAO,GAAG,IAAI;IAMlC,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAIvE,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIhC,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO;IAI9E,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,EAAE;IAM9D;;OAEG;IACG,OAAO,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUlD;;OAEG;IACH,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAMxF,KAAK,IAAI,IAAI;IAKb,MAAM,IAAI,IAAI;CAGf;AAGD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKlD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,aAAa,CAQzE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAKzC"}
@@ -0,0 +1,203 @@
1
+ /**
2
+ * Memory module - unified interface for storage and search
3
+ */
4
+ import { SQLiteStore } from './sqlite-store.js';
5
+ import { FTSSearch } from './fts-search.js';
6
+ import { VectorSearch } from './vector-search.js';
7
+ import { logger } from '../utils/logger.js';
8
+ const log = logger.child('memory');
9
+ export class MemoryManager {
10
+ sqliteStore;
11
+ fts;
12
+ vector;
13
+ config;
14
+ constructor(config) {
15
+ this.config = config;
16
+ this.sqliteStore = new SQLiteStore(config.memory.path);
17
+ // @ts-expect-error - accessing internal db for FTS
18
+ this.fts = new FTSSearch(this.sqliteStore.db);
19
+ this.vector = new VectorSearch(this.sqliteStore, config);
20
+ log.info('Memory manager initialized', {
21
+ path: config.memory.path,
22
+ vectorEnabled: this.vector.isEnabled(),
23
+ });
24
+ }
25
+ // ==================== Memory Operations ====================
26
+ /**
27
+ * Store a key-value pair in memory
28
+ */
29
+ async store(key, content, options = {}) {
30
+ const namespace = options.namespace ?? this.config.memory.defaultNamespace;
31
+ const entry = this.sqliteStore.store(key, content, { ...options, namespace });
32
+ // Index for vector search if enabled
33
+ if (options.generateEmbedding !== false && this.vector.isEnabled()) {
34
+ await this.vector.indexEntry(entry);
35
+ }
36
+ log.debug('Stored memory entry', { key, namespace });
37
+ return entry;
38
+ }
39
+ /**
40
+ * Get a memory entry by key
41
+ */
42
+ get(key, namespace) {
43
+ return this.sqliteStore.get(key, namespace ?? this.config.memory.defaultNamespace);
44
+ }
45
+ /**
46
+ * Get a memory entry by ID
47
+ */
48
+ getById(id) {
49
+ return this.sqliteStore.getById(id);
50
+ }
51
+ /**
52
+ * Delete a memory entry
53
+ */
54
+ delete(key, namespace) {
55
+ return this.sqliteStore.delete(key, namespace ?? this.config.memory.defaultNamespace);
56
+ }
57
+ /**
58
+ * List memory entries
59
+ */
60
+ list(namespace, limit, offset) {
61
+ return this.sqliteStore.list(namespace, limit, offset);
62
+ }
63
+ /**
64
+ * Count memory entries
65
+ */
66
+ count(namespace) {
67
+ return this.sqliteStore.count(namespace);
68
+ }
69
+ /**
70
+ * Search memory using FTS and optionally vector search
71
+ */
72
+ async search(query, options = {}) {
73
+ const { namespace, limit = 10, threshold = 0.7, useVector } = options;
74
+ // Decide whether to use vector search
75
+ const shouldUseVector = useVector ?? this.vector.isEnabled();
76
+ let results = [];
77
+ // Try vector search first if enabled
78
+ if (shouldUseVector && this.vector.isEnabled()) {
79
+ const vectorResults = await this.vector.search(query, {
80
+ namespace,
81
+ limit,
82
+ threshold,
83
+ });
84
+ results = vectorResults;
85
+ }
86
+ // If no vector results or vector disabled, use FTS
87
+ if (results.length === 0) {
88
+ results = this.fts.search(query, { namespace, limit });
89
+ }
90
+ // If we have both, merge and deduplicate
91
+ if (shouldUseVector && this.vector.isEnabled() && results.length > 0) {
92
+ const ftsResults = this.fts.search(query, { namespace, limit });
93
+ results = this.mergeResults(results, ftsResults, limit);
94
+ }
95
+ log.debug('Search completed', {
96
+ query: query.slice(0, 50),
97
+ results: results.length,
98
+ });
99
+ return results;
100
+ }
101
+ /**
102
+ * Merge and deduplicate search results from different sources
103
+ */
104
+ mergeResults(vectorResults, ftsResults, limit) {
105
+ const seen = new Set();
106
+ const merged = [];
107
+ // Add vector results first (higher quality)
108
+ for (const result of vectorResults) {
109
+ if (!seen.has(result.entry.id)) {
110
+ seen.add(result.entry.id);
111
+ merged.push(result);
112
+ }
113
+ }
114
+ // Add FTS results that weren't in vector results
115
+ for (const result of ftsResults) {
116
+ if (!seen.has(result.entry.id) && merged.length < limit) {
117
+ seen.add(result.entry.id);
118
+ merged.push(result);
119
+ }
120
+ }
121
+ return merged.slice(0, limit);
122
+ }
123
+ // ==================== Session Operations ====================
124
+ createSession(metadata) {
125
+ return this.sqliteStore.createSession(metadata);
126
+ }
127
+ getSession(id) {
128
+ return this.sqliteStore.getSession(id);
129
+ }
130
+ endSession(id) {
131
+ return this.sqliteStore.endSession(id);
132
+ }
133
+ getActiveSession() {
134
+ return this.sqliteStore.getActiveSession();
135
+ }
136
+ // ==================== Task Operations ====================
137
+ createTask(agentType, input, sessionId) {
138
+ return this.sqliteStore.createTask(agentType, input, sessionId);
139
+ }
140
+ getTask(id) {
141
+ return this.sqliteStore.getTask(id);
142
+ }
143
+ updateTaskStatus(id, status, output) {
144
+ return this.sqliteStore.updateTaskStatus(id, status, output);
145
+ }
146
+ listTasks(sessionId, status) {
147
+ return this.sqliteStore.listTasks(sessionId, status);
148
+ }
149
+ // ==================== Vector Search ====================
150
+ /**
151
+ * Reindex all entries for vector search
152
+ */
153
+ async reindex(namespace) {
154
+ if (!this.vector.isEnabled()) {
155
+ log.warn('Vector search not enabled');
156
+ return 0;
157
+ }
158
+ const entries = this.sqliteStore.list(namespace, 10000);
159
+ return this.vector.indexBatch(entries);
160
+ }
161
+ /**
162
+ * Get vector search statistics
163
+ */
164
+ getVectorStats(namespace) {
165
+ return this.vector.getStats(namespace);
166
+ }
167
+ // ==================== Cleanup ====================
168
+ close() {
169
+ this.sqliteStore.close();
170
+ log.info('Memory manager closed');
171
+ }
172
+ vacuum() {
173
+ this.sqliteStore.vacuum();
174
+ }
175
+ }
176
+ // Export components
177
+ export { SQLiteStore } from './sqlite-store.js';
178
+ export { FTSSearch } from './fts-search.js';
179
+ export { VectorSearch } from './vector-search.js';
180
+ // Singleton instance
181
+ let instance = null;
182
+ /**
183
+ * Get or create the memory manager instance
184
+ */
185
+ export function getMemoryManager(config) {
186
+ if (!instance) {
187
+ if (!config) {
188
+ throw new Error('Configuration required to initialize memory manager');
189
+ }
190
+ instance = new MemoryManager(config);
191
+ }
192
+ return instance;
193
+ }
194
+ /**
195
+ * Reset the memory manager instance
196
+ */
197
+ export function resetMemoryManager() {
198
+ if (instance) {
199
+ instance.close();
200
+ instance = null;
201
+ }
202
+ }
203
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * SQLite-based memory store with FTS5 full-text search
3
+ */
4
+ import type { MemoryEntry, MemoryStoreOptions, Session, Task } from '../types.js';
5
+ export declare class SQLiteStore {
6
+ private db;
7
+ private readonly dbPath;
8
+ constructor(dbPath: string);
9
+ private initSchema;
10
+ store(key: string, content: string, options?: MemoryStoreOptions): MemoryEntry;
11
+ get(key: string, namespace?: string): MemoryEntry | null;
12
+ getById(id: string): MemoryEntry | null;
13
+ delete(key: string, namespace?: string): boolean;
14
+ deleteById(id: string): boolean;
15
+ list(namespace?: string, limit?: number, offset?: number): MemoryEntry[];
16
+ count(namespace?: string): number;
17
+ storeEmbedding(id: string, embedding: number[]): void;
18
+ getEntriesWithEmbeddings(namespace?: string): Array<{
19
+ id: string;
20
+ embedding: number[];
21
+ }>;
22
+ private rowToEntry;
23
+ createSession(metadata?: Record<string, unknown>): Session;
24
+ getSession(id: string): Session | null;
25
+ endSession(id: string): boolean;
26
+ getActiveSession(): Session | null;
27
+ private rowToSession;
28
+ createTask(agentType: string, input?: string, sessionId?: string): Task;
29
+ getTask(id: string): Task | null;
30
+ updateTaskStatus(id: string, status: Task['status'], output?: string): boolean;
31
+ listTasks(sessionId?: string, status?: Task['status']): Task[];
32
+ private rowToTask;
33
+ close(): void;
34
+ vacuum(): void;
35
+ }
36
+ //# sourceMappingURL=sqlite-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-store.d.ts","sourceRoot":"","sources":["../../src/memory/sqlite-store.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAsFlF,qBAAa,WAAW;IACtB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,MAAM,EAAE,MAAM;IAiB1B,OAAO,CAAC,UAAU;IAMlB,KAAK,CACH,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,kBAAuB,GAC/B,WAAW;IA0Cd,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,GAAE,MAAkB,GAAG,WAAW,GAAG,IAAI;IAYnE,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAYvC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,GAAE,MAAkB,GAAG,OAAO;IAQ3D,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAQ/B,IAAI,CACF,SAAS,CAAC,EAAE,MAAM,EAClB,KAAK,GAAE,MAAY,EACnB,MAAM,GAAE,MAAU,GACjB,WAAW,EAAE;IAmBhB,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM;IAcjC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAQrD,wBAAwB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAqBxF,OAAO,CAAC,UAAU;IAiBlB,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO;IAoB1D,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAQtC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAY/B,gBAAgB,IAAI,OAAO,GAAG,IAAI;IAalC,OAAO,CAAC,YAAY;IAYpB,UAAU,CACR,SAAS,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI;IAqBP,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAQhC,gBAAgB,CACd,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,EACtB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO;IAcV,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,EAAE;IAoB9D,OAAO,CAAC,SAAS;IAejB,KAAK,IAAI,IAAI;IAKb,MAAM,IAAI,IAAI;CAIf"}