@mtkn/mega-agent 0.1.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 (295) hide show
  1. package/dist/artifact/artifact.repository.d.ts +17 -0
  2. package/dist/artifact/artifact.repository.d.ts.map +1 -0
  3. package/dist/artifact/artifact.repository.js +66 -0
  4. package/dist/artifact/artifact.repository.js.map +1 -0
  5. package/dist/artifact/artifact.service.d.ts +22 -0
  6. package/dist/artifact/artifact.service.d.ts.map +1 -0
  7. package/dist/artifact/artifact.service.js +87 -0
  8. package/dist/artifact/artifact.service.js.map +1 -0
  9. package/dist/artifact/artifact.types.d.ts +41 -0
  10. package/dist/artifact/artifact.types.d.ts.map +1 -0
  11. package/dist/artifact/artifact.types.js +6 -0
  12. package/dist/artifact/artifact.types.js.map +1 -0
  13. package/dist/artifact/index.d.ts +6 -0
  14. package/dist/artifact/index.d.ts.map +1 -0
  15. package/dist/artifact/index.js +4 -0
  16. package/dist/artifact/index.js.map +1 -0
  17. package/dist/chat/chat-memory.integration.d.ts +59 -0
  18. package/dist/chat/chat-memory.integration.d.ts.map +1 -0
  19. package/dist/chat/chat-memory.integration.js +148 -0
  20. package/dist/chat/chat-memory.integration.js.map +1 -0
  21. package/dist/chat/chat.repository.d.ts +58 -0
  22. package/dist/chat/chat.repository.d.ts.map +1 -0
  23. package/dist/chat/chat.repository.js +128 -0
  24. package/dist/chat/chat.repository.js.map +1 -0
  25. package/dist/chat/chat.service.d.ts +28 -0
  26. package/dist/chat/chat.service.d.ts.map +1 -0
  27. package/dist/chat/chat.service.js +217 -0
  28. package/dist/chat/chat.service.js.map +1 -0
  29. package/dist/chat/chat.types.d.ts +198 -0
  30. package/dist/chat/chat.types.d.ts.map +1 -0
  31. package/dist/chat/chat.types.js +8 -0
  32. package/dist/chat/chat.types.js.map +1 -0
  33. package/dist/chat/index.d.ts +17 -0
  34. package/dist/chat/index.d.ts.map +1 -0
  35. package/dist/chat/index.js +16 -0
  36. package/dist/chat/index.js.map +1 -0
  37. package/dist/chat/memory-detector.d.ts +53 -0
  38. package/dist/chat/memory-detector.d.ts.map +1 -0
  39. package/dist/chat/memory-detector.js +172 -0
  40. package/dist/chat/memory-detector.js.map +1 -0
  41. package/dist/chat/prompts/index.d.ts +6 -0
  42. package/dist/chat/prompts/index.d.ts.map +1 -0
  43. package/dist/chat/prompts/index.js +6 -0
  44. package/dist/chat/prompts/index.js.map +1 -0
  45. package/dist/chat/prompts/system.prompts.d.ts +23 -0
  46. package/dist/chat/prompts/system.prompts.d.ts.map +1 -0
  47. package/dist/chat/prompts/system.prompts.js +102 -0
  48. package/dist/chat/prompts/system.prompts.js.map +1 -0
  49. package/dist/chat/response-parser.d.ts +24 -0
  50. package/dist/chat/response-parser.d.ts.map +1 -0
  51. package/dist/chat/response-parser.js +198 -0
  52. package/dist/chat/response-parser.js.map +1 -0
  53. package/dist/chat/response.types.d.ts +90 -0
  54. package/dist/chat/response.types.d.ts.map +1 -0
  55. package/dist/chat/response.types.js +6 -0
  56. package/dist/chat/response.types.js.map +1 -0
  57. package/dist/common/errors.d.ts +60 -0
  58. package/dist/common/errors.d.ts.map +1 -0
  59. package/dist/common/errors.js +105 -0
  60. package/dist/common/errors.js.map +1 -0
  61. package/dist/common/index.d.ts +3 -0
  62. package/dist/common/index.d.ts.map +1 -0
  63. package/dist/common/index.js +3 -0
  64. package/dist/common/index.js.map +1 -0
  65. package/dist/common/retry.d.ts +23 -0
  66. package/dist/common/retry.d.ts.map +1 -0
  67. package/dist/common/retry.js +57 -0
  68. package/dist/common/retry.js.map +1 -0
  69. package/dist/create-mega-agent.d.ts +100 -0
  70. package/dist/create-mega-agent.d.ts.map +1 -0
  71. package/dist/create-mega-agent.js +153 -0
  72. package/dist/create-mega-agent.js.map +1 -0
  73. package/dist/embedding/embedding.service.d.ts +34 -0
  74. package/dist/embedding/embedding.service.d.ts.map +1 -0
  75. package/dist/embedding/embedding.service.js +68 -0
  76. package/dist/embedding/embedding.service.js.map +1 -0
  77. package/dist/embedding/embedding.types.d.ts +38 -0
  78. package/dist/embedding/embedding.types.d.ts.map +1 -0
  79. package/dist/embedding/embedding.types.js +6 -0
  80. package/dist/embedding/embedding.types.js.map +1 -0
  81. package/dist/embedding/index.d.ts +9 -0
  82. package/dist/embedding/index.d.ts.map +1 -0
  83. package/dist/embedding/index.js +9 -0
  84. package/dist/embedding/index.js.map +1 -0
  85. package/dist/embedding/providers/base.provider.d.ts +29 -0
  86. package/dist/embedding/providers/base.provider.d.ts.map +1 -0
  87. package/dist/embedding/providers/base.provider.js +19 -0
  88. package/dist/embedding/providers/base.provider.js.map +1 -0
  89. package/dist/embedding/providers/index.d.ts +7 -0
  90. package/dist/embedding/providers/index.d.ts.map +1 -0
  91. package/dist/embedding/providers/index.js +7 -0
  92. package/dist/embedding/providers/index.js.map +1 -0
  93. package/dist/embedding/providers/openai.provider.d.ts +17 -0
  94. package/dist/embedding/providers/openai.provider.d.ts.map +1 -0
  95. package/dist/embedding/providers/openai.provider.js +73 -0
  96. package/dist/embedding/providers/openai.provider.js.map +1 -0
  97. package/dist/http/chat.controller.d.ts +30 -0
  98. package/dist/http/chat.controller.d.ts.map +1 -0
  99. package/dist/http/chat.controller.js +163 -0
  100. package/dist/http/chat.controller.js.map +1 -0
  101. package/dist/http/chat.routes.d.ts +5 -0
  102. package/dist/http/chat.routes.d.ts.map +1 -0
  103. package/dist/http/chat.routes.js +38 -0
  104. package/dist/http/chat.routes.js.map +1 -0
  105. package/dist/http/chat.validation.d.ts +70 -0
  106. package/dist/http/chat.validation.d.ts.map +1 -0
  107. package/dist/http/chat.validation.js +28 -0
  108. package/dist/http/chat.validation.js.map +1 -0
  109. package/dist/incident/incident.correlator.d.ts +39 -0
  110. package/dist/incident/incident.correlator.d.ts.map +1 -0
  111. package/dist/incident/incident.correlator.js +129 -0
  112. package/dist/incident/incident.correlator.js.map +1 -0
  113. package/dist/incident/incident.detector.d.ts +62 -0
  114. package/dist/incident/incident.detector.d.ts.map +1 -0
  115. package/dist/incident/incident.detector.js +192 -0
  116. package/dist/incident/incident.detector.js.map +1 -0
  117. package/dist/incident/incident.repository.d.ts +79 -0
  118. package/dist/incident/incident.repository.d.ts.map +1 -0
  119. package/dist/incident/incident.repository.js +216 -0
  120. package/dist/incident/incident.repository.js.map +1 -0
  121. package/dist/incident/incident.service.d.ts +71 -0
  122. package/dist/incident/incident.service.d.ts.map +1 -0
  123. package/dist/incident/incident.service.js +217 -0
  124. package/dist/incident/incident.service.js.map +1 -0
  125. package/dist/incident/incident.types.d.ts +115 -0
  126. package/dist/incident/incident.types.d.ts.map +1 -0
  127. package/dist/incident/incident.types.js +6 -0
  128. package/dist/incident/incident.types.js.map +1 -0
  129. package/dist/incident/index.d.ts +13 -0
  130. package/dist/incident/index.d.ts.map +1 -0
  131. package/dist/incident/index.js +13 -0
  132. package/dist/incident/index.js.map +1 -0
  133. package/dist/index.d.ts +26 -0
  134. package/dist/index.d.ts.map +1 -0
  135. package/dist/index.js +26 -0
  136. package/dist/index.js.map +1 -0
  137. package/dist/llm/index.d.ts +8 -0
  138. package/dist/llm/index.d.ts.map +1 -0
  139. package/dist/llm/index.js +9 -0
  140. package/dist/llm/index.js.map +1 -0
  141. package/dist/llm/llm.service.d.ts +52 -0
  142. package/dist/llm/llm.service.d.ts.map +1 -0
  143. package/dist/llm/llm.service.js +141 -0
  144. package/dist/llm/llm.service.js.map +1 -0
  145. package/dist/llm/llm.types.d.ts +77 -0
  146. package/dist/llm/llm.types.d.ts.map +1 -0
  147. package/dist/llm/llm.types.js +5 -0
  148. package/dist/llm/llm.types.js.map +1 -0
  149. package/dist/llm/providers/anthropic.provider.d.ts +16 -0
  150. package/dist/llm/providers/anthropic.provider.d.ts.map +1 -0
  151. package/dist/llm/providers/anthropic.provider.js +118 -0
  152. package/dist/llm/providers/anthropic.provider.js.map +1 -0
  153. package/dist/llm/providers/base.provider.d.ts +17 -0
  154. package/dist/llm/providers/base.provider.d.ts.map +1 -0
  155. package/dist/llm/providers/base.provider.js +18 -0
  156. package/dist/llm/providers/base.provider.js.map +1 -0
  157. package/dist/llm/providers/custom.provider.d.ts +15 -0
  158. package/dist/llm/providers/custom.provider.d.ts.map +1 -0
  159. package/dist/llm/providers/custom.provider.js +110 -0
  160. package/dist/llm/providers/custom.provider.js.map +1 -0
  161. package/dist/llm/providers/gemini.provider.d.ts +19 -0
  162. package/dist/llm/providers/gemini.provider.d.ts.map +1 -0
  163. package/dist/llm/providers/gemini.provider.js +98 -0
  164. package/dist/llm/providers/gemini.provider.js.map +1 -0
  165. package/dist/llm/providers/index.d.ts +10 -0
  166. package/dist/llm/providers/index.d.ts.map +1 -0
  167. package/dist/llm/providers/index.js +10 -0
  168. package/dist/llm/providers/index.js.map +1 -0
  169. package/dist/llm/providers/openai.provider.d.ts +15 -0
  170. package/dist/llm/providers/openai.provider.d.ts.map +1 -0
  171. package/dist/llm/providers/openai.provider.js +57 -0
  172. package/dist/llm/providers/openai.provider.js.map +1 -0
  173. package/dist/mcp/index.d.ts +13 -0
  174. package/dist/mcp/index.d.ts.map +1 -0
  175. package/dist/mcp/index.js +17 -0
  176. package/dist/mcp/index.js.map +1 -0
  177. package/dist/mcp/mcp.client.d.ts +57 -0
  178. package/dist/mcp/mcp.client.d.ts.map +1 -0
  179. package/dist/mcp/mcp.client.js +150 -0
  180. package/dist/mcp/mcp.client.js.map +1 -0
  181. package/dist/mcp/mcp.service.d.ts +64 -0
  182. package/dist/mcp/mcp.service.d.ts.map +1 -0
  183. package/dist/mcp/mcp.service.js +207 -0
  184. package/dist/mcp/mcp.service.js.map +1 -0
  185. package/dist/mcp/mcp.types.d.ts +142 -0
  186. package/dist/mcp/mcp.types.d.ts.map +1 -0
  187. package/dist/mcp/mcp.types.js +6 -0
  188. package/dist/mcp/mcp.types.js.map +1 -0
  189. package/dist/mcp/presets/common-sources.d.ts +28 -0
  190. package/dist/mcp/presets/common-sources.d.ts.map +1 -0
  191. package/dist/mcp/presets/common-sources.js +114 -0
  192. package/dist/mcp/presets/common-sources.js.map +1 -0
  193. package/dist/mcp/presets/index.d.ts +5 -0
  194. package/dist/mcp/presets/index.d.ts.map +1 -0
  195. package/dist/mcp/presets/index.js +5 -0
  196. package/dist/mcp/presets/index.js.map +1 -0
  197. package/dist/mcp/source.repository.d.ts +68 -0
  198. package/dist/mcp/source.repository.d.ts.map +1 -0
  199. package/dist/mcp/source.repository.js +114 -0
  200. package/dist/mcp/source.repository.js.map +1 -0
  201. package/dist/mcp/source.service.d.ts +74 -0
  202. package/dist/mcp/source.service.d.ts.map +1 -0
  203. package/dist/mcp/source.service.js +181 -0
  204. package/dist/mcp/source.service.js.map +1 -0
  205. package/dist/mcp/transports/http.transport.d.ts +45 -0
  206. package/dist/mcp/transports/http.transport.d.ts.map +1 -0
  207. package/dist/mcp/transports/http.transport.js +64 -0
  208. package/dist/mcp/transports/http.transport.js.map +1 -0
  209. package/dist/mcp/transports/index.d.ts +7 -0
  210. package/dist/mcp/transports/index.d.ts.map +1 -0
  211. package/dist/mcp/transports/index.js +7 -0
  212. package/dist/mcp/transports/index.js.map +1 -0
  213. package/dist/mcp/transports/stdio.transport.d.ts +21 -0
  214. package/dist/mcp/transports/stdio.transport.d.ts.map +1 -0
  215. package/dist/mcp/transports/stdio.transport.js +29 -0
  216. package/dist/mcp/transports/stdio.transport.js.map +1 -0
  217. package/dist/memory/index.d.ts +10 -0
  218. package/dist/memory/index.d.ts.map +1 -0
  219. package/dist/memory/index.js +10 -0
  220. package/dist/memory/index.js.map +1 -0
  221. package/dist/memory/memory.repository.d.ts +62 -0
  222. package/dist/memory/memory.repository.d.ts.map +1 -0
  223. package/dist/memory/memory.repository.js +148 -0
  224. package/dist/memory/memory.repository.js.map +1 -0
  225. package/dist/memory/memory.service.d.ts +63 -0
  226. package/dist/memory/memory.service.d.ts.map +1 -0
  227. package/dist/memory/memory.service.js +263 -0
  228. package/dist/memory/memory.service.js.map +1 -0
  229. package/dist/memory/memory.types.d.ts +104 -0
  230. package/dist/memory/memory.types.d.ts.map +1 -0
  231. package/dist/memory/memory.types.js +8 -0
  232. package/dist/memory/memory.types.js.map +1 -0
  233. package/dist/qdrant/index.d.ts +8 -0
  234. package/dist/qdrant/index.d.ts.map +1 -0
  235. package/dist/qdrant/index.js +6 -0
  236. package/dist/qdrant/index.js.map +1 -0
  237. package/dist/qdrant/qdrant.service.d.ts +63 -0
  238. package/dist/qdrant/qdrant.service.d.ts.map +1 -0
  239. package/dist/qdrant/qdrant.service.js +201 -0
  240. package/dist/qdrant/qdrant.service.js.map +1 -0
  241. package/dist/qdrant/qdrant.types.d.ts +55 -0
  242. package/dist/qdrant/qdrant.types.d.ts.map +1 -0
  243. package/dist/qdrant/qdrant.types.js +6 -0
  244. package/dist/qdrant/qdrant.types.js.map +1 -0
  245. package/dist/tools/core-tools.d.ts +7 -0
  246. package/dist/tools/core-tools.d.ts.map +1 -0
  247. package/dist/tools/core-tools.js +52 -0
  248. package/dist/tools/core-tools.js.map +1 -0
  249. package/dist/tools/index.d.ts +4 -0
  250. package/dist/tools/index.d.ts.map +1 -0
  251. package/dist/tools/index.js +3 -0
  252. package/dist/tools/index.js.map +1 -0
  253. package/dist/tools/tool-registry.d.ts +51 -0
  254. package/dist/tools/tool-registry.d.ts.map +1 -0
  255. package/dist/tools/tool-registry.js +50 -0
  256. package/dist/tools/tool-registry.js.map +1 -0
  257. package/dist/workflow/actions/base.action.d.ts +50 -0
  258. package/dist/workflow/actions/base.action.d.ts.map +1 -0
  259. package/dist/workflow/actions/base.action.js +59 -0
  260. package/dist/workflow/actions/base.action.js.map +1 -0
  261. package/dist/workflow/actions/incident.action.d.ts +13 -0
  262. package/dist/workflow/actions/incident.action.d.ts.map +1 -0
  263. package/dist/workflow/actions/incident.action.js +70 -0
  264. package/dist/workflow/actions/incident.action.js.map +1 -0
  265. package/dist/workflow/actions/index.d.ts +9 -0
  266. package/dist/workflow/actions/index.d.ts.map +1 -0
  267. package/dist/workflow/actions/index.js +11 -0
  268. package/dist/workflow/actions/index.js.map +1 -0
  269. package/dist/workflow/actions/notify.action.d.ts +18 -0
  270. package/dist/workflow/actions/notify.action.d.ts.map +1 -0
  271. package/dist/workflow/actions/notify.action.js +106 -0
  272. package/dist/workflow/actions/notify.action.js.map +1 -0
  273. package/dist/workflow/actions/report.action.d.ts +13 -0
  274. package/dist/workflow/actions/report.action.d.ts.map +1 -0
  275. package/dist/workflow/actions/report.action.js +64 -0
  276. package/dist/workflow/actions/report.action.js.map +1 -0
  277. package/dist/workflow/index.d.ts +10 -0
  278. package/dist/workflow/index.d.ts.map +1 -0
  279. package/dist/workflow/index.js +11 -0
  280. package/dist/workflow/index.js.map +1 -0
  281. package/dist/workflow/workflow.repository.d.ts +90 -0
  282. package/dist/workflow/workflow.repository.d.ts.map +1 -0
  283. package/dist/workflow/workflow.repository.js +238 -0
  284. package/dist/workflow/workflow.repository.js.map +1 -0
  285. package/dist/workflow/workflow.service.d.ts +98 -0
  286. package/dist/workflow/workflow.service.d.ts.map +1 -0
  287. package/dist/workflow/workflow.service.js +374 -0
  288. package/dist/workflow/workflow.service.js.map +1 -0
  289. package/dist/workflow/workflow.types.d.ts +146 -0
  290. package/dist/workflow/workflow.types.d.ts.map +1 -0
  291. package/dist/workflow/workflow.types.js +8 -0
  292. package/dist/workflow/workflow.types.js.map +1 -0
  293. package/package.json +67 -0
  294. package/prisma/schema.prisma +551 -0
  295. package/scripts/prisma-sync.mjs +187 -0
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Memory Module Index
3
+ * Export all Memory service components
4
+ */
5
+ export type { CreateMemoryDto, UpdateMemoryDto, MemorySearchRequest, MemorySearchResult, MemorySuggestionDto, MemoryStats, MemoryServiceDependencies, EmbeddingServiceLike, QdrantServiceLike, } from './memory.types.js';
6
+ export type { LoggerLike as MemoryLoggerLike } from './memory.types.js';
7
+ export { MemoryType, MemoryStatus, MemorySourceType } from './memory.types.js';
8
+ export { MemoryRepository, initMemoryRepository, getMemoryRepositoryDeps } from './memory.repository.js';
9
+ export { MemoryService, initMemoryService, getMemoryServiceDeps } from './memory.service.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EACV,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAG3B,YAAY,EAAE,UAAU,IAAI,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAExE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAG/E,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Memory Module Index
3
+ * Export all Memory service components
4
+ */
5
+ export { MemoryType, MemoryStatus, MemorySourceType } from './memory.types.js';
6
+ // Repository
7
+ export { MemoryRepository, initMemoryRepository, getMemoryRepositoryDeps } from './memory.repository.js';
8
+ // Service
9
+ export { MemoryService, initMemoryService, getMemoryServiceDeps } from './memory.service.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkBH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE/E,aAAa;AACb,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,wBAAwB,CAAC;AAEhC,UAAU;AACV,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Memory Repository
3
+ * Database operations for AiMemory entity
4
+ */
5
+ import type { AiMemory, MemoryType, MemoryStatus } from '@prisma/client';
6
+ import type { CreateMemoryDto, UpdateMemoryDto, MemoryServiceDependencies } from './memory.types.js';
7
+ /**
8
+ * Initialize the Memory Repository with dependencies
9
+ */
10
+ export declare function initMemoryRepository(deps: MemoryServiceDependencies): void;
11
+ /**
12
+ * Get the current repository dependencies
13
+ */
14
+ export declare function getMemoryRepositoryDeps(): MemoryServiceDependencies | null;
15
+ export declare class MemoryRepository {
16
+ private get prisma();
17
+ private get logger();
18
+ /**
19
+ * Create a new memory
20
+ */
21
+ create(data: CreateMemoryDto & {
22
+ qdrantId: string;
23
+ }): Promise<AiMemory>;
24
+ /**
25
+ * Find memory by ID
26
+ */
27
+ findById(id: string): Promise<AiMemory | null>;
28
+ /**
29
+ * Find memories by IDs
30
+ */
31
+ findByIds(ids: string[]): Promise<AiMemory[]>;
32
+ /**
33
+ * Find memories by user with optional filters
34
+ */
35
+ findByUser(userId: number, options?: {
36
+ types?: MemoryType[];
37
+ status?: MemoryStatus;
38
+ limit?: number;
39
+ offset?: number;
40
+ }): Promise<AiMemory[]>;
41
+ /**
42
+ * Update a memory
43
+ */
44
+ update(id: string, data: UpdateMemoryDto): Promise<AiMemory>;
45
+ /**
46
+ * Delete a memory
47
+ */
48
+ delete(id: string): Promise<void>;
49
+ /**
50
+ * Record memory access (update lastAccessedAt and increment accessCount)
51
+ */
52
+ recordAccess(id: string): Promise<void>;
53
+ /**
54
+ * Get memory statistics for a user
55
+ */
56
+ getStats(userId: number): Promise<{
57
+ totalCount: number;
58
+ byType: Record<string, number>;
59
+ byStatus: Record<string, number>;
60
+ }>;
61
+ }
62
+ //# sourceMappingURL=memory.repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.repository.d.ts","sourceRoot":"","sources":["../../src/memory/memory.repository.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAU,MAAM,gBAAgB,CAAC;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAIrG;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,yBAAyB,GAAG,IAAI,CAE1E;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,yBAAyB,GAAG,IAAI,CAE1E;AAED,qBAAa,gBAAgB;IAC3B,OAAO,KAAK,MAAM,GAGjB;IAED,OAAO,KAAK,MAAM,GAGjB;IAED;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,eAAe,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;IAwB7E;;OAEG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAIpD;;OAEG;IACG,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAMnD;;OAEG;IACG,UAAU,CACd,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;QACrB,MAAM,CAAC,EAAE,YAAY,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GACA,OAAO,CAAC,QAAQ,EAAE,CAAC;IAatB;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC;IAsBlE;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvC;;OAEG;IACG,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU7C;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QACtC,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAClC,CAAC;CAqBH"}
@@ -0,0 +1,148 @@
1
+ /**
2
+ * Memory Repository
3
+ * Database operations for AiMemory entity
4
+ */
5
+ let _deps = null;
6
+ /**
7
+ * Initialize the Memory Repository with dependencies
8
+ */
9
+ export function initMemoryRepository(deps) {
10
+ _deps = deps;
11
+ }
12
+ /**
13
+ * Get the current repository dependencies
14
+ */
15
+ export function getMemoryRepositoryDeps() {
16
+ return _deps;
17
+ }
18
+ export class MemoryRepository {
19
+ get prisma() {
20
+ if (!_deps)
21
+ throw new Error('[MemoryRepository] Not initialized');
22
+ return _deps.prisma;
23
+ }
24
+ get logger() {
25
+ if (!_deps)
26
+ throw new Error('[MemoryRepository] Not initialized');
27
+ return _deps.logger;
28
+ }
29
+ /**
30
+ * Create a new memory
31
+ */
32
+ async create(data) {
33
+ const memory = await this.prisma.aiMemory.create({
34
+ data: {
35
+ userId: data.userId,
36
+ type: data.type,
37
+ status: 'ACTIVE',
38
+ title: data.title,
39
+ content: data.content,
40
+ summary: data.summary,
41
+ sourceType: data.sourceType,
42
+ sourceId: data.sourceId,
43
+ confidence: data.confidence ?? 1.0,
44
+ importance: data.importance ?? 5,
45
+ qdrantId: data.qdrantId,
46
+ tags: data.tags ?? [],
47
+ metadata: (data.metadata ?? {}),
48
+ expiresAt: data.expiresAt,
49
+ },
50
+ });
51
+ this.logger.debug('Memory created', { id: memory.id, type: memory.type });
52
+ return memory;
53
+ }
54
+ /**
55
+ * Find memory by ID
56
+ */
57
+ async findById(id) {
58
+ return this.prisma.aiMemory.findUnique({ where: { id } });
59
+ }
60
+ /**
61
+ * Find memories by IDs
62
+ */
63
+ async findByIds(ids) {
64
+ return this.prisma.aiMemory.findMany({
65
+ where: { id: { in: ids } },
66
+ });
67
+ }
68
+ /**
69
+ * Find memories by user with optional filters
70
+ */
71
+ async findByUser(userId, options) {
72
+ return this.prisma.aiMemory.findMany({
73
+ where: {
74
+ userId,
75
+ ...(options?.types && { type: { in: options.types } }),
76
+ ...(options?.status && { status: options.status }),
77
+ },
78
+ orderBy: { createdAt: 'desc' },
79
+ take: options?.limit,
80
+ skip: options?.offset,
81
+ });
82
+ }
83
+ /**
84
+ * Update a memory
85
+ */
86
+ async update(id, data) {
87
+ const updateData = {
88
+ title: data.title,
89
+ content: data.content,
90
+ summary: data.summary,
91
+ status: data.status,
92
+ confidence: data.confidence,
93
+ importance: data.importance,
94
+ tags: data.tags,
95
+ expiresAt: data.expiresAt,
96
+ };
97
+ if (data.metadata !== undefined) {
98
+ updateData.metadata = data.metadata;
99
+ }
100
+ return this.prisma.aiMemory.update({
101
+ where: { id },
102
+ data: updateData,
103
+ });
104
+ }
105
+ /**
106
+ * Delete a memory
107
+ */
108
+ async delete(id) {
109
+ await this.prisma.aiMemory.delete({ where: { id } });
110
+ this.logger.debug('Memory deleted', { id });
111
+ }
112
+ /**
113
+ * Record memory access (update lastAccessedAt and increment accessCount)
114
+ */
115
+ async recordAccess(id) {
116
+ await this.prisma.aiMemory.update({
117
+ where: { id },
118
+ data: {
119
+ lastAccessedAt: new Date(),
120
+ accessCount: { increment: 1 },
121
+ },
122
+ });
123
+ }
124
+ /**
125
+ * Get memory statistics for a user
126
+ */
127
+ async getStats(userId) {
128
+ const [total, byType, byStatus] = await Promise.all([
129
+ this.prisma.aiMemory.count({ where: { userId } }),
130
+ this.prisma.aiMemory.groupBy({
131
+ by: ['type'],
132
+ where: { userId },
133
+ _count: true,
134
+ }),
135
+ this.prisma.aiMemory.groupBy({
136
+ by: ['status'],
137
+ where: { userId },
138
+ _count: true,
139
+ }),
140
+ ]);
141
+ return {
142
+ totalCount: total,
143
+ byType: Object.fromEntries(byType.map(t => [t.type, t._count])),
144
+ byStatus: Object.fromEntries(byStatus.map(s => [s.status, s._count])),
145
+ };
146
+ }
147
+ }
148
+ //# sourceMappingURL=memory.repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.repository.js","sourceRoot":"","sources":["../../src/memory/memory.repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Memory Service
3
+ * Core service for memory management operations
4
+ */
5
+ import type { AiMemory } from '@prisma/client';
6
+ import type { CreateMemoryDto, UpdateMemoryDto, MemorySearchRequest, MemorySearchResult, MemorySuggestionDto, MemoryStats, MemoryServiceDependencies } from './memory.types.js';
7
+ /**
8
+ * Initialize the Memory service with dependencies
9
+ */
10
+ export declare function initMemoryService(deps: MemoryServiceDependencies): void;
11
+ /**
12
+ * Get the current service dependencies
13
+ */
14
+ export declare function getMemoryServiceDeps(): MemoryServiceDependencies | null;
15
+ export declare class MemoryService {
16
+ private repository;
17
+ static readonly COLLECTION = "mega_agent_memories";
18
+ constructor();
19
+ private get logger();
20
+ private get embeddingService();
21
+ private get qdrantService();
22
+ /**
23
+ * Create a new memory with embedding
24
+ */
25
+ createMemory(data: CreateMemoryDto): Promise<AiMemory>;
26
+ /**
27
+ * Semantic search for memories
28
+ */
29
+ searchMemories(request: MemorySearchRequest): Promise<MemorySearchResult[]>;
30
+ /**
31
+ * Get memories for LLM context injection
32
+ */
33
+ getRelevantMemoriesForContext(userId: number, query: string, maxMemories?: number): Promise<AiMemory[]>;
34
+ /**
35
+ * Update a memory (re-embeds if content changed)
36
+ */
37
+ updateMemory(id: string, data: UpdateMemoryDto): Promise<AiMemory>;
38
+ /**
39
+ * Delete a memory
40
+ */
41
+ deleteMemory(id: string): Promise<void>;
42
+ /**
43
+ * Get memory by ID
44
+ */
45
+ getMemory(id: string): Promise<AiMemory | null>;
46
+ /**
47
+ * Get user memory stats
48
+ */
49
+ getStats(userId: number): Promise<MemoryStats>;
50
+ /**
51
+ * Create a memory suggestion (Human-in-the-Loop)
52
+ */
53
+ suggestMemory(data: MemorySuggestionDto): Promise<void>;
54
+ /**
55
+ * Accept a memory suggestion
56
+ */
57
+ acceptSuggestion(suggestionId: string): Promise<AiMemory>;
58
+ /**
59
+ * Reject a memory suggestion
60
+ */
61
+ rejectSuggestion(suggestionId: string): Promise<void>;
62
+ }
63
+ //# sourceMappingURL=memory.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.service.d.ts","sourceRoot":"","sources":["../../src/memory/memory.service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,yBAAyB,EAC1B,MAAM,mBAAmB,CAAC;AAK3B;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,yBAAyB,GAAG,IAAI,CAGvE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,yBAAyB,GAAG,IAAI,CAEvE;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAmB;IAGrC,MAAM,CAAC,QAAQ,CAAC,UAAU,yBAAyB;;IAWnD,OAAO,KAAK,MAAM,GAEjB;IAED,OAAO,KAAK,gBAAgB,GAE3B;IAED,OAAO,KAAK,aAAa,GAExB;IAED;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC;IAuC5D;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAmEjF;;OAEG;IACG,6BAA6B,CACjC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,WAAW,GAAE,MAAU,GACtB,OAAO,CAAC,QAAQ,EAAE,CAAC;IAWtB;;OAEG;IACG,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC;IAgCxE;;OAEG;IACG,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB7C;;OAEG;IACG,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAIrD;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAUpD;;OAEG;IACG,aAAa,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB7D;;OAEG;IACG,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IA6B/D;;OAEG;IACG,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAM5D"}
@@ -0,0 +1,263 @@
1
+ /**
2
+ * Memory Service
3
+ * Core service for memory management operations
4
+ */
5
+ import { v4 as uuidv4 } from 'uuid';
6
+ import { MemoryRepository, initMemoryRepository } from './memory.repository.js';
7
+ let _deps = null;
8
+ /**
9
+ * Initialize the Memory service with dependencies
10
+ */
11
+ export function initMemoryService(deps) {
12
+ _deps = deps;
13
+ initMemoryRepository(deps);
14
+ }
15
+ /**
16
+ * Get the current service dependencies
17
+ */
18
+ export function getMemoryServiceDeps() {
19
+ return _deps;
20
+ }
21
+ export class MemoryService {
22
+ repository;
23
+ // Qdrant collection name
24
+ static COLLECTION = 'mega_agent_memories';
25
+ constructor() {
26
+ if (!_deps) {
27
+ throw new Error('[MemoryService] Service not initialized! Call initMemoryService first.');
28
+ }
29
+ this.repository = new MemoryRepository();
30
+ _deps.logger.info('MemoryService initialized');
31
+ }
32
+ get logger() {
33
+ return _deps.logger;
34
+ }
35
+ get embeddingService() {
36
+ return _deps.embeddingService;
37
+ }
38
+ get qdrantService() {
39
+ return _deps.qdrantService;
40
+ }
41
+ /**
42
+ * Create a new memory with embedding
43
+ */
44
+ async createMemory(data) {
45
+ // 1. Generate embedding from content
46
+ const textForEmbedding = `${data.title}\n\n${data.content}`;
47
+ const { embedding } = await this.embeddingService.embed(textForEmbedding);
48
+ // 2. Generate Qdrant ID
49
+ const qdrantId = uuidv4();
50
+ // 3. Store in PostgreSQL first to get the memory ID
51
+ const memory = await this.repository.create({
52
+ ...data,
53
+ qdrantId,
54
+ });
55
+ // 4. Store in Qdrant with memoryId reference
56
+ await this.qdrantService.upsertPoint(MemoryService.COLLECTION, {
57
+ id: qdrantId,
58
+ vector: embedding,
59
+ payload: {
60
+ memoryId: memory.id,
61
+ userId: data.userId,
62
+ workspaceId: data.workspaceId,
63
+ type: data.type,
64
+ status: 'ACTIVE',
65
+ title: data.title,
66
+ importance: data.importance ?? 5,
67
+ tags: data.tags ?? [],
68
+ },
69
+ });
70
+ this.logger.info('Memory created', {
71
+ id: memory.id,
72
+ type: memory.type,
73
+ userId: memory.userId
74
+ });
75
+ return memory;
76
+ }
77
+ /**
78
+ * Semantic search for memories
79
+ */
80
+ async searchMemories(request) {
81
+ // 1. Generate embedding for query
82
+ const { embedding } = await this.embeddingService.embed(request.query);
83
+ // 2. Build Qdrant filter
84
+ const must = [
85
+ { key: 'userId', match: { value: request.userId } },
86
+ ];
87
+ if (!request.includeArchived) {
88
+ must.push({ key: 'status', match: { value: 'ACTIVE' } });
89
+ }
90
+ if (request.workspaceId) {
91
+ must.push({ key: 'workspaceId', match: { value: request.workspaceId } });
92
+ }
93
+ const filter = { must };
94
+ if (request.types && request.types.length > 0) {
95
+ filter.should = request.types.map(type => ({
96
+ key: 'type',
97
+ match: { value: type },
98
+ }));
99
+ }
100
+ // 3. Search in Qdrant
101
+ const searchResults = await this.qdrantService.search(MemoryService.COLLECTION, {
102
+ vector: embedding,
103
+ limit: request.limit ?? 10,
104
+ filter,
105
+ scoreThreshold: request.scoreThreshold ?? 0.7,
106
+ });
107
+ if (searchResults.length === 0) {
108
+ return [];
109
+ }
110
+ // 4. Fetch full memories from PostgreSQL
111
+ const memoryIds = searchResults.map(r => r.payload.memoryId);
112
+ const memories = await this.repository.findByIds(memoryIds);
113
+ // 5. Map with scores
114
+ const memoryMap = new Map(memories.map(m => [m.id, m]));
115
+ const results = [];
116
+ for (const searchResult of searchResults) {
117
+ const memory = memoryMap.get(searchResult.payload.memoryId);
118
+ if (memory) {
119
+ // Record access
120
+ await this.repository.recordAccess(memory.id);
121
+ results.push({
122
+ memory,
123
+ score: searchResult.score,
124
+ });
125
+ }
126
+ }
127
+ this.logger.debug('Memory search completed', {
128
+ query: request.query.substring(0, 50),
129
+ resultCount: results.length
130
+ });
131
+ return results;
132
+ }
133
+ /**
134
+ * Get memories for LLM context injection
135
+ */
136
+ async getRelevantMemoriesForContext(userId, query, maxMemories = 5) {
137
+ const results = await this.searchMemories({
138
+ userId,
139
+ query,
140
+ limit: maxMemories,
141
+ scoreThreshold: 0.75,
142
+ });
143
+ return results.map(r => r.memory);
144
+ }
145
+ /**
146
+ * Update a memory (re-embeds if content changed)
147
+ */
148
+ async updateMemory(id, data) {
149
+ const existing = await this.repository.findById(id);
150
+ if (!existing) {
151
+ throw new Error(`Memory ${id} not found`);
152
+ }
153
+ // If content changed, update embedding
154
+ if (data.content || data.title) {
155
+ const newTitle = data.title ?? existing.title;
156
+ const newContent = data.content ?? existing.content;
157
+ const textForEmbedding = `${newTitle}\n\n${newContent}`;
158
+ const { embedding } = await this.embeddingService.embed(textForEmbedding);
159
+ await this.qdrantService.upsertPoint(MemoryService.COLLECTION, {
160
+ id: existing.qdrantId,
161
+ vector: embedding,
162
+ payload: {
163
+ memoryId: existing.id,
164
+ userId: existing.userId,
165
+ type: existing.type,
166
+ status: data.status ?? existing.status,
167
+ title: newTitle,
168
+ importance: data.importance ?? existing.importance,
169
+ tags: data.tags ?? existing.tags,
170
+ },
171
+ });
172
+ }
173
+ return this.repository.update(id, data);
174
+ }
175
+ /**
176
+ * Delete a memory
177
+ */
178
+ async deleteMemory(id) {
179
+ const memory = await this.repository.findById(id);
180
+ if (!memory) {
181
+ throw new Error(`Memory ${id} not found`);
182
+ }
183
+ // Delete from Qdrant
184
+ if (memory.qdrantId) {
185
+ await this.qdrantService.deletePoint(MemoryService.COLLECTION, memory.qdrantId);
186
+ }
187
+ // Delete from PostgreSQL
188
+ await this.repository.delete(id);
189
+ this.logger.info('Memory deleted', { id });
190
+ }
191
+ /**
192
+ * Get memory by ID
193
+ */
194
+ async getMemory(id) {
195
+ return this.repository.findById(id);
196
+ }
197
+ /**
198
+ * Get user memory stats
199
+ */
200
+ async getStats(userId) {
201
+ const stats = await this.repository.getStats(userId);
202
+ return {
203
+ ...stats,
204
+ recentAccessCount: 0, // TODO: Calculate
205
+ avgConfidence: 0, // TODO: Calculate
206
+ };
207
+ }
208
+ /**
209
+ * Create a memory suggestion (Human-in-the-Loop)
210
+ */
211
+ async suggestMemory(data) {
212
+ await _deps.prisma.aiMemorySuggestion.create({
213
+ data: {
214
+ userId: data.userId,
215
+ type: data.type,
216
+ title: data.title,
217
+ content: data.content,
218
+ sourceType: data.sourceType,
219
+ sourceId: data.sourceId,
220
+ confidence: data.confidence,
221
+ status: 'pending',
222
+ },
223
+ });
224
+ this.logger.info('Memory suggestion created', { userId: data.userId, type: data.type });
225
+ }
226
+ /**
227
+ * Accept a memory suggestion
228
+ */
229
+ async acceptSuggestion(suggestionId) {
230
+ const suggestion = await _deps.prisma.aiMemorySuggestion.findUnique({
231
+ where: { id: suggestionId },
232
+ });
233
+ if (!suggestion) {
234
+ throw new Error(`Suggestion ${suggestionId} not found`);
235
+ }
236
+ // Create actual memory
237
+ const memory = await this.createMemory({
238
+ userId: suggestion.userId,
239
+ type: suggestion.type,
240
+ title: suggestion.title,
241
+ content: suggestion.content,
242
+ sourceType: suggestion.sourceType,
243
+ sourceId: suggestion.sourceId ?? undefined,
244
+ confidence: suggestion.confidence,
245
+ });
246
+ // Mark suggestion as accepted
247
+ await _deps.prisma.aiMemorySuggestion.update({
248
+ where: { id: suggestionId },
249
+ data: { status: 'accepted', resolvedAt: new Date() },
250
+ });
251
+ return memory;
252
+ }
253
+ /**
254
+ * Reject a memory suggestion
255
+ */
256
+ async rejectSuggestion(suggestionId) {
257
+ await _deps.prisma.aiMemorySuggestion.update({
258
+ where: { id: suggestionId },
259
+ data: { status: 'rejected', resolvedAt: new Date() },
260
+ });
261
+ }
262
+ }
263
+ //# sourceMappingURL=memory.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.service.js","sourceRoot":"","sources":["../../src/memory/memory.service.ts"],"names":[],"mappings":"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"}