@measureoneinc/savant 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 (398) hide show
  1. package/README-SDK.md +148 -0
  2. package/dist/ai/agents/domain-identifier.agent.d.ts +34 -0
  3. package/dist/ai/agents/domain-identifier.agent.d.ts.map +1 -0
  4. package/dist/ai/agents/domain-identifier.agent.js +176 -0
  5. package/dist/ai/agents/domain-identifier.agent.js.map +1 -0
  6. package/dist/ai/agents/dynamic-agent.d.ts +105 -0
  7. package/dist/ai/agents/dynamic-agent.d.ts.map +1 -0
  8. package/dist/ai/agents/dynamic-agent.js +505 -0
  9. package/dist/ai/agents/dynamic-agent.js.map +1 -0
  10. package/dist/ai/agents/executor.agent.d.ts +25 -0
  11. package/dist/ai/agents/executor.agent.d.ts.map +1 -0
  12. package/dist/ai/agents/executor.agent.js +44 -0
  13. package/dist/ai/agents/executor.agent.js.map +1 -0
  14. package/dist/ai/agents/index.d.ts +17 -0
  15. package/dist/ai/agents/index.d.ts.map +1 -0
  16. package/dist/ai/agents/index.js +29 -0
  17. package/dist/ai/agents/index.js.map +1 -0
  18. package/dist/ai/agents/knowledge.agent.d.ts +25 -0
  19. package/dist/ai/agents/knowledge.agent.d.ts.map +1 -0
  20. package/dist/ai/agents/knowledge.agent.js +42 -0
  21. package/dist/ai/agents/knowledge.agent.js.map +1 -0
  22. package/dist/ai/agents/learning.agent.d.ts +63 -0
  23. package/dist/ai/agents/learning.agent.d.ts.map +1 -0
  24. package/dist/ai/agents/learning.agent.js +288 -0
  25. package/dist/ai/agents/learning.agent.js.map +1 -0
  26. package/dist/ai/agents/orchestrator.agent.d.ts +26 -0
  27. package/dist/ai/agents/orchestrator.agent.d.ts.map +1 -0
  28. package/dist/ai/agents/orchestrator.agent.js +42 -0
  29. package/dist/ai/agents/orchestrator.agent.js.map +1 -0
  30. package/dist/ai/agents/planner.agent.d.ts +25 -0
  31. package/dist/ai/agents/planner.agent.d.ts.map +1 -0
  32. package/dist/ai/agents/planner.agent.js +36 -0
  33. package/dist/ai/agents/planner.agent.js.map +1 -0
  34. package/dist/ai/agents/response-parser.d.ts +23 -0
  35. package/dist/ai/agents/response-parser.d.ts.map +1 -0
  36. package/dist/ai/agents/response-parser.js +313 -0
  37. package/dist/ai/agents/response-parser.js.map +1 -0
  38. package/dist/ai/agents/summarizer.agent.d.ts +38 -0
  39. package/dist/ai/agents/summarizer.agent.d.ts.map +1 -0
  40. package/dist/ai/agents/summarizer.agent.js +245 -0
  41. package/dist/ai/agents/summarizer.agent.js.map +1 -0
  42. package/dist/ai/instructions/domain-identifier.instructions.d.ts +10 -0
  43. package/dist/ai/instructions/domain-identifier.instructions.d.ts.map +1 -0
  44. package/dist/ai/instructions/domain-identifier.instructions.js +63 -0
  45. package/dist/ai/instructions/domain-identifier.instructions.js.map +1 -0
  46. package/dist/ai/instructions/executor.instructions.d.ts +11 -0
  47. package/dist/ai/instructions/executor.instructions.d.ts.map +1 -0
  48. package/dist/ai/instructions/executor.instructions.js +218 -0
  49. package/dist/ai/instructions/executor.instructions.js.map +1 -0
  50. package/dist/ai/instructions/knowledge.instructions.d.ts +11 -0
  51. package/dist/ai/instructions/knowledge.instructions.d.ts.map +1 -0
  52. package/dist/ai/instructions/knowledge.instructions.js +145 -0
  53. package/dist/ai/instructions/knowledge.instructions.js.map +1 -0
  54. package/dist/ai/instructions/learning.instructions.d.ts +11 -0
  55. package/dist/ai/instructions/learning.instructions.d.ts.map +1 -0
  56. package/dist/ai/instructions/learning.instructions.js +226 -0
  57. package/dist/ai/instructions/learning.instructions.js.map +1 -0
  58. package/dist/ai/instructions/orchestrator.instructions.d.ts +11 -0
  59. package/dist/ai/instructions/orchestrator.instructions.d.ts.map +1 -0
  60. package/dist/ai/instructions/orchestrator.instructions.js +148 -0
  61. package/dist/ai/instructions/orchestrator.instructions.js.map +1 -0
  62. package/dist/ai/instructions/planner.instructions.d.ts +12 -0
  63. package/dist/ai/instructions/planner.instructions.d.ts.map +1 -0
  64. package/dist/ai/instructions/planner.instructions.js +129 -0
  65. package/dist/ai/instructions/planner.instructions.js.map +1 -0
  66. package/dist/ai/instructions/summarizer.instructions.d.ts +11 -0
  67. package/dist/ai/instructions/summarizer.instructions.d.ts.map +1 -0
  68. package/dist/ai/instructions/summarizer.instructions.js +84 -0
  69. package/dist/ai/instructions/summarizer.instructions.js.map +1 -0
  70. package/dist/ai/learning/execution-learner.d.ts +79 -0
  71. package/dist/ai/learning/execution-learner.d.ts.map +1 -0
  72. package/dist/ai/learning/execution-learner.js +536 -0
  73. package/dist/ai/learning/execution-learner.js.map +1 -0
  74. package/dist/ai/response_handlers/base-handler.d.ts +73 -0
  75. package/dist/ai/response_handlers/base-handler.d.ts.map +1 -0
  76. package/dist/ai/response_handlers/base-handler.js +153 -0
  77. package/dist/ai/response_handlers/base-handler.js.map +1 -0
  78. package/dist/ai/response_handlers/direct-response-handler.d.ts +18 -0
  79. package/dist/ai/response_handlers/direct-response-handler.d.ts.map +1 -0
  80. package/dist/ai/response_handlers/direct-response-handler.js +86 -0
  81. package/dist/ai/response_handlers/direct-response-handler.js.map +1 -0
  82. package/dist/ai/response_handlers/error-handler.d.ts +13 -0
  83. package/dist/ai/response_handlers/error-handler.d.ts.map +1 -0
  84. package/dist/ai/response_handlers/error-handler.js +72 -0
  85. package/dist/ai/response_handlers/error-handler.js.map +1 -0
  86. package/dist/ai/response_handlers/handler-registry.d.ts +51 -0
  87. package/dist/ai/response_handlers/handler-registry.d.ts.map +1 -0
  88. package/dist/ai/response_handlers/handler-registry.js +268 -0
  89. package/dist/ai/response_handlers/handler-registry.js.map +1 -0
  90. package/dist/ai/response_handlers/index.d.ts +16 -0
  91. package/dist/ai/response_handlers/index.d.ts.map +1 -0
  92. package/dist/ai/response_handlers/index.js +29 -0
  93. package/dist/ai/response_handlers/index.js.map +1 -0
  94. package/dist/ai/response_handlers/message-handler.d.ts +23 -0
  95. package/dist/ai/response_handlers/message-handler.d.ts.map +1 -0
  96. package/dist/ai/response_handlers/message-handler.js +193 -0
  97. package/dist/ai/response_handlers/message-handler.js.map +1 -0
  98. package/dist/ai/response_handlers/plan-ready-handler.d.ts +26 -0
  99. package/dist/ai/response_handlers/plan-ready-handler.d.ts.map +1 -0
  100. package/dist/ai/response_handlers/plan-ready-handler.js +394 -0
  101. package/dist/ai/response_handlers/plan-ready-handler.js.map +1 -0
  102. package/dist/ai/response_handlers/request-input-handler.d.ts +14 -0
  103. package/dist/ai/response_handlers/request-input-handler.d.ts.map +1 -0
  104. package/dist/ai/response_handlers/request-input-handler.js +87 -0
  105. package/dist/ai/response_handlers/request-input-handler.js.map +1 -0
  106. package/dist/ai/response_handlers/request-plan-handler.d.ts +18 -0
  107. package/dist/ai/response_handlers/request-plan-handler.d.ts.map +1 -0
  108. package/dist/ai/response_handlers/request-plan-handler.js +143 -0
  109. package/dist/ai/response_handlers/request-plan-handler.js.map +1 -0
  110. package/dist/ai/response_handlers/step-complete-handler.d.ts +22 -0
  111. package/dist/ai/response_handlers/step-complete-handler.d.ts.map +1 -0
  112. package/dist/ai/response_handlers/step-complete-handler.js +307 -0
  113. package/dist/ai/response_handlers/step-complete-handler.js.map +1 -0
  114. package/dist/ai/response_handlers/unknown-handler.d.ts +12 -0
  115. package/dist/ai/response_handlers/unknown-handler.d.ts.map +1 -0
  116. package/dist/ai/response_handlers/unknown-handler.js +27 -0
  117. package/dist/ai/response_handlers/unknown-handler.js.map +1 -0
  118. package/dist/ai/response_handlers/user-input-handler.d.ts +20 -0
  119. package/dist/ai/response_handlers/user-input-handler.d.ts.map +1 -0
  120. package/dist/ai/response_handlers/user-input-handler.js +69 -0
  121. package/dist/ai/response_handlers/user-input-handler.js.map +1 -0
  122. package/dist/ai/tools/log-step.d.ts +29 -0
  123. package/dist/ai/tools/log-step.d.ts.map +1 -0
  124. package/dist/ai/tools/log-step.js +47 -0
  125. package/dist/ai/tools/log-step.js.map +1 -0
  126. package/dist/app.d.ts +15 -0
  127. package/dist/app.d.ts.map +1 -0
  128. package/dist/app.js +223 -0
  129. package/dist/app.js.map +1 -0
  130. package/dist/config/environment/local.d.ts +12 -0
  131. package/dist/config/environment/local.d.ts.map +1 -0
  132. package/dist/config/environment/local.js +124 -0
  133. package/dist/config/environment/local.js.map +1 -0
  134. package/dist/config/environment/production.d.ts +7 -0
  135. package/dist/config/environment/production.d.ts.map +1 -0
  136. package/dist/config/environment/production.js +105 -0
  137. package/dist/config/environment/production.js.map +1 -0
  138. package/dist/config/environment/test.d.ts +7 -0
  139. package/dist/config/environment/test.d.ts.map +1 -0
  140. package/dist/config/environment/test.js +97 -0
  141. package/dist/config/environment/test.js.map +1 -0
  142. package/dist/config/index.d.ts +219 -0
  143. package/dist/config/index.d.ts.map +1 -0
  144. package/dist/config/index.js +360 -0
  145. package/dist/config/index.js.map +1 -0
  146. package/dist/controllers/agent_request.controller.d.ts +43 -0
  147. package/dist/controllers/agent_request.controller.d.ts.map +1 -0
  148. package/dist/controllers/agent_request.controller.js +141 -0
  149. package/dist/controllers/agent_request.controller.js.map +1 -0
  150. package/dist/controllers/base.controller.d.ts +208 -0
  151. package/dist/controllers/base.controller.d.ts.map +1 -0
  152. package/dist/controllers/base.controller.js +378 -0
  153. package/dist/controllers/base.controller.js.map +1 -0
  154. package/dist/controllers/conversations.controller.d.ts +31 -0
  155. package/dist/controllers/conversations.controller.d.ts.map +1 -0
  156. package/dist/controllers/conversations.controller.js +138 -0
  157. package/dist/controllers/conversations.controller.js.map +1 -0
  158. package/dist/controllers/knowledge.controller.d.ts +63 -0
  159. package/dist/controllers/knowledge.controller.d.ts.map +1 -0
  160. package/dist/controllers/knowledge.controller.js +311 -0
  161. package/dist/controllers/knowledge.controller.js.map +1 -0
  162. package/dist/controllers/mcp.controller.d.ts +25 -0
  163. package/dist/controllers/mcp.controller.d.ts.map +1 -0
  164. package/dist/controllers/mcp.controller.js +93 -0
  165. package/dist/controllers/mcp.controller.js.map +1 -0
  166. package/dist/index.d.ts +12 -0
  167. package/dist/index.d.ts.map +1 -0
  168. package/dist/index.js +25 -0
  169. package/dist/index.js.map +1 -0
  170. package/dist/lib/app-constants.d.ts +231 -0
  171. package/dist/lib/app-constants.d.ts.map +1 -0
  172. package/dist/lib/app-constants.js +240 -0
  173. package/dist/lib/app-constants.js.map +1 -0
  174. package/dist/lib/controller-utils.d.ts +48 -0
  175. package/dist/lib/controller-utils.d.ts.map +1 -0
  176. package/dist/lib/controller-utils.js +70 -0
  177. package/dist/lib/controller-utils.js.map +1 -0
  178. package/dist/lib/exceptions/app-exceptions.d.ts +158 -0
  179. package/dist/lib/exceptions/app-exceptions.d.ts.map +1 -0
  180. package/dist/lib/exceptions/app-exceptions.js +287 -0
  181. package/dist/lib/exceptions/app-exceptions.js.map +1 -0
  182. package/dist/lib/middleware/upload.middleware.d.ts +13 -0
  183. package/dist/lib/middleware/upload.middleware.d.ts.map +1 -0
  184. package/dist/lib/middleware/upload.middleware.js +35 -0
  185. package/dist/lib/middleware/upload.middleware.js.map +1 -0
  186. package/dist/lib/middleware/validation.middleware.d.ts +29 -0
  187. package/dist/lib/middleware/validation.middleware.d.ts.map +1 -0
  188. package/dist/lib/middleware/validation.middleware.js +219 -0
  189. package/dist/lib/middleware/validation.middleware.js.map +1 -0
  190. package/dist/lib/model/validation-schema/submit-message.schema.d.ts +3 -0
  191. package/dist/lib/model/validation-schema/submit-message.schema.d.ts.map +1 -0
  192. package/dist/lib/model/validation-schema/submit-message.schema.js +40 -0
  193. package/dist/lib/model/validation-schema/submit-message.schema.js.map +1 -0
  194. package/dist/lib/model/validation-schema/update-knowledge.schema.d.ts +3 -0
  195. package/dist/lib/model/validation-schema/update-knowledge.schema.d.ts.map +1 -0
  196. package/dist/lib/model/validation-schema/update-knowledge.schema.js +35 -0
  197. package/dist/lib/model/validation-schema/update-knowledge.schema.js.map +1 -0
  198. package/dist/lib/open-ai-event-processor.d.ts +101 -0
  199. package/dist/lib/open-ai-event-processor.d.ts.map +1 -0
  200. package/dist/lib/open-ai-event-processor.js +426 -0
  201. package/dist/lib/open-ai-event-processor.js.map +1 -0
  202. package/dist/lib/schemas/ai-responses.schema.d.ts +617 -0
  203. package/dist/lib/schemas/ai-responses.schema.d.ts.map +1 -0
  204. package/dist/lib/schemas/ai-responses.schema.js +377 -0
  205. package/dist/lib/schemas/ai-responses.schema.js.map +1 -0
  206. package/dist/lib/schemas/common.schemas.d.ts +84 -0
  207. package/dist/lib/schemas/common.schemas.d.ts.map +1 -0
  208. package/dist/lib/schemas/common.schemas.js +87 -0
  209. package/dist/lib/schemas/common.schemas.js.map +1 -0
  210. package/dist/lib/schemas/conversation.schema.d.ts +28 -0
  211. package/dist/lib/schemas/conversation.schema.d.ts.map +1 -0
  212. package/dist/lib/schemas/conversation.schema.js +31 -0
  213. package/dist/lib/schemas/conversation.schema.js.map +1 -0
  214. package/dist/lib/schemas/http-client.schema.d.ts +39 -0
  215. package/dist/lib/schemas/http-client.schema.d.ts.map +1 -0
  216. package/dist/lib/schemas/http-client.schema.js +36 -0
  217. package/dist/lib/schemas/http-client.schema.js.map +1 -0
  218. package/dist/lib/schemas/index.d.ts +95 -0
  219. package/dist/lib/schemas/index.d.ts.map +1 -0
  220. package/dist/lib/schemas/index.js +32 -0
  221. package/dist/lib/schemas/index.js.map +1 -0
  222. package/dist/lib/schemas/knowledge.schema.d.ts +145 -0
  223. package/dist/lib/schemas/knowledge.schema.d.ts.map +1 -0
  224. package/dist/lib/schemas/knowledge.schema.js +81 -0
  225. package/dist/lib/schemas/knowledge.schema.js.map +1 -0
  226. package/dist/lib/schemas/orchestration.schema.d.ts +168 -0
  227. package/dist/lib/schemas/orchestration.schema.d.ts.map +1 -0
  228. package/dist/lib/schemas/orchestration.schema.js +133 -0
  229. package/dist/lib/schemas/orchestration.schema.js.map +1 -0
  230. package/dist/lib/schemas/plan.schema.d.ts +103 -0
  231. package/dist/lib/schemas/plan.schema.d.ts.map +1 -0
  232. package/dist/lib/schemas/plan.schema.js +58 -0
  233. package/dist/lib/schemas/plan.schema.js.map +1 -0
  234. package/dist/lib/sequelize-service.d.ts +23 -0
  235. package/dist/lib/sequelize-service.d.ts.map +1 -0
  236. package/dist/lib/sequelize-service.js +446 -0
  237. package/dist/lib/sequelize-service.js.map +1 -0
  238. package/dist/lib/source-hash.d.ts +39 -0
  239. package/dist/lib/source-hash.d.ts.map +1 -0
  240. package/dist/lib/source-hash.js +56 -0
  241. package/dist/lib/source-hash.js.map +1 -0
  242. package/dist/lib/stable-stringify.d.ts +32 -0
  243. package/dist/lib/stable-stringify.d.ts.map +1 -0
  244. package/dist/lib/stable-stringify.js +72 -0
  245. package/dist/lib/stable-stringify.js.map +1 -0
  246. package/dist/lib/streaming-utils.d.ts +60 -0
  247. package/dist/lib/streaming-utils.d.ts.map +1 -0
  248. package/dist/lib/streaming-utils.js +190 -0
  249. package/dist/lib/streaming-utils.js.map +1 -0
  250. package/dist/lib/utils/conversation-builder.d.ts +36 -0
  251. package/dist/lib/utils/conversation-builder.d.ts.map +1 -0
  252. package/dist/lib/utils/conversation-builder.js +132 -0
  253. package/dist/lib/utils/conversation-builder.js.map +1 -0
  254. package/dist/lib/utils/domain-matcher.d.ts +25 -0
  255. package/dist/lib/utils/domain-matcher.d.ts.map +1 -0
  256. package/dist/lib/utils/domain-matcher.js +42 -0
  257. package/dist/lib/utils/domain-matcher.js.map +1 -0
  258. package/dist/lib/utils/file-util.d.ts +157 -0
  259. package/dist/lib/utils/file-util.d.ts.map +1 -0
  260. package/dist/lib/utils/file-util.js +373 -0
  261. package/dist/lib/utils/file-util.js.map +1 -0
  262. package/dist/lib/utils/html-summarizer.d.ts +27 -0
  263. package/dist/lib/utils/html-summarizer.d.ts.map +1 -0
  264. package/dist/lib/utils/html-summarizer.js +189 -0
  265. package/dist/lib/utils/html-summarizer.js.map +1 -0
  266. package/dist/lib/utils/http-client.d.ts +108 -0
  267. package/dist/lib/utils/http-client.d.ts.map +1 -0
  268. package/dist/lib/utils/http-client.js +298 -0
  269. package/dist/lib/utils/http-client.js.map +1 -0
  270. package/dist/lib/utils/index.d.ts +12 -0
  271. package/dist/lib/utils/index.d.ts.map +1 -0
  272. package/dist/lib/utils/index.js +28 -0
  273. package/dist/lib/utils/index.js.map +1 -0
  274. package/dist/lib/utils/logger.d.ts +30 -0
  275. package/dist/lib/utils/logger.d.ts.map +1 -0
  276. package/dist/lib/utils/logger.js +88 -0
  277. package/dist/lib/utils/logger.js.map +1 -0
  278. package/dist/lib/utils/mcp-utils.d.ts +208 -0
  279. package/dist/lib/utils/mcp-utils.d.ts.map +1 -0
  280. package/dist/lib/utils/mcp-utils.js +451 -0
  281. package/dist/lib/utils/mcp-utils.js.map +1 -0
  282. package/dist/lib/utils/sequelize-service.d.ts +153 -0
  283. package/dist/lib/utils/sequelize-service.d.ts.map +1 -0
  284. package/dist/lib/utils/sequelize-service.js +339 -0
  285. package/dist/lib/utils/sequelize-service.js.map +1 -0
  286. package/dist/lib/utils/tool-call-extractor.d.ts +36 -0
  287. package/dist/lib/utils/tool-call-extractor.d.ts.map +1 -0
  288. package/dist/lib/utils/tool-call-extractor.js +121 -0
  289. package/dist/lib/utils/tool-call-extractor.js.map +1 -0
  290. package/dist/lib/utils/zod-to-json-schema.d.ts +17 -0
  291. package/dist/lib/utils/zod-to-json-schema.d.ts.map +1 -0
  292. package/dist/lib/utils/zod-to-json-schema.js +53 -0
  293. package/dist/lib/utils/zod-to-json-schema.js.map +1 -0
  294. package/dist/models/AgentRequest.d.ts +33 -0
  295. package/dist/models/AgentRequest.d.ts.map +1 -0
  296. package/dist/models/AgentRequest.js +49 -0
  297. package/dist/models/AgentRequest.js.map +1 -0
  298. package/dist/models/AgentRun.d.ts +44 -0
  299. package/dist/models/AgentRun.d.ts.map +1 -0
  300. package/dist/models/AgentRun.js +53 -0
  301. package/dist/models/AgentRun.js.map +1 -0
  302. package/dist/models/AuditLog.d.ts +37 -0
  303. package/dist/models/AuditLog.d.ts.map +1 -0
  304. package/dist/models/AuditLog.js +46 -0
  305. package/dist/models/AuditLog.js.map +1 -0
  306. package/dist/models/Conversation.d.ts +39 -0
  307. package/dist/models/Conversation.d.ts.map +1 -0
  308. package/dist/models/Conversation.js +49 -0
  309. package/dist/models/Conversation.js.map +1 -0
  310. package/dist/models/Embedding.d.ts +56 -0
  311. package/dist/models/Embedding.d.ts.map +1 -0
  312. package/dist/models/Embedding.js +36 -0
  313. package/dist/models/Embedding.js.map +1 -0
  314. package/dist/models/ExecutionPattern.d.ts +57 -0
  315. package/dist/models/ExecutionPattern.d.ts.map +1 -0
  316. package/dist/models/ExecutionPattern.js +61 -0
  317. package/dist/models/ExecutionPattern.js.map +1 -0
  318. package/dist/models/Knowledge.d.ts +49 -0
  319. package/dist/models/Knowledge.d.ts.map +1 -0
  320. package/dist/models/Knowledge.js +67 -0
  321. package/dist/models/Knowledge.js.map +1 -0
  322. package/dist/models/KnowledgeRevision.d.ts +35 -0
  323. package/dist/models/KnowledgeRevision.d.ts.map +1 -0
  324. package/dist/models/KnowledgeRevision.js +51 -0
  325. package/dist/models/KnowledgeRevision.js.map +1 -0
  326. package/dist/models/Plan.d.ts +34 -0
  327. package/dist/models/Plan.d.ts.map +1 -0
  328. package/dist/models/Plan.js +43 -0
  329. package/dist/models/Plan.js.map +1 -0
  330. package/dist/models/PlanStep.d.ts +56 -0
  331. package/dist/models/PlanStep.d.ts.map +1 -0
  332. package/dist/models/PlanStep.js +65 -0
  333. package/dist/models/PlanStep.js.map +1 -0
  334. package/dist/models/SourceData.d.ts +39 -0
  335. package/dist/models/SourceData.d.ts.map +1 -0
  336. package/dist/models/SourceData.js +18 -0
  337. package/dist/models/SourceData.js.map +1 -0
  338. package/dist/models/index.d.ts +36 -0
  339. package/dist/models/index.d.ts.map +1 -0
  340. package/dist/models/index.js +179 -0
  341. package/dist/models/index.js.map +1 -0
  342. package/dist/routes/agent.routes.d.ts +13 -0
  343. package/dist/routes/agent.routes.d.ts.map +1 -0
  344. package/dist/routes/agent.routes.js +27 -0
  345. package/dist/routes/agent.routes.js.map +1 -0
  346. package/dist/routes/agent_request.routes.d.ts +13 -0
  347. package/dist/routes/agent_request.routes.d.ts.map +1 -0
  348. package/dist/routes/agent_request.routes.js +65 -0
  349. package/dist/routes/agent_request.routes.js.map +1 -0
  350. package/dist/routes/knowledge.routes.d.ts +13 -0
  351. package/dist/routes/knowledge.routes.d.ts.map +1 -0
  352. package/dist/routes/knowledge.routes.js +91 -0
  353. package/dist/routes/knowledge.routes.js.map +1 -0
  354. package/dist/routes/mcp.routes.d.ts +14 -0
  355. package/dist/routes/mcp.routes.d.ts.map +1 -0
  356. package/dist/routes/mcp.routes.js +27 -0
  357. package/dist/routes/mcp.routes.js.map +1 -0
  358. package/dist/sdk/index.d.ts +13 -0
  359. package/dist/sdk/index.d.ts.map +1 -0
  360. package/dist/sdk/index.js +35 -0
  361. package/dist/sdk/index.js.map +1 -0
  362. package/dist/sdk/savant.sdk.d.ts +53 -0
  363. package/dist/sdk/savant.sdk.d.ts.map +1 -0
  364. package/dist/sdk/savant.sdk.js +120 -0
  365. package/dist/sdk/savant.sdk.js.map +1 -0
  366. package/dist/services/agent-request-service.d.ts +104 -0
  367. package/dist/services/agent-request-service.d.ts.map +1 -0
  368. package/dist/services/agent-request-service.js +319 -0
  369. package/dist/services/agent-request-service.js.map +1 -0
  370. package/dist/services/audit_log.service.d.ts +104 -0
  371. package/dist/services/audit_log.service.d.ts.map +1 -0
  372. package/dist/services/audit_log.service.js +339 -0
  373. package/dist/services/audit_log.service.js.map +1 -0
  374. package/dist/services/conversation.service.d.ts +90 -0
  375. package/dist/services/conversation.service.d.ts.map +1 -0
  376. package/dist/services/conversation.service.js +552 -0
  377. package/dist/services/conversation.service.js.map +1 -0
  378. package/dist/services/domain.service.d.ts +58 -0
  379. package/dist/services/domain.service.d.ts.map +1 -0
  380. package/dist/services/domain.service.js +244 -0
  381. package/dist/services/domain.service.js.map +1 -0
  382. package/dist/services/embedding.service.d.ts +132 -0
  383. package/dist/services/embedding.service.d.ts.map +1 -0
  384. package/dist/services/embedding.service.js +587 -0
  385. package/dist/services/embedding.service.js.map +1 -0
  386. package/dist/services/file_upload.service.d.ts +50 -0
  387. package/dist/services/file_upload.service.d.ts.map +1 -0
  388. package/dist/services/file_upload.service.js +172 -0
  389. package/dist/services/file_upload.service.js.map +1 -0
  390. package/dist/services/knowledge.service.d.ts +200 -0
  391. package/dist/services/knowledge.service.d.ts.map +1 -0
  392. package/dist/services/knowledge.service.js +784 -0
  393. package/dist/services/knowledge.service.js.map +1 -0
  394. package/dist/types/responses-api.types.d.ts +181 -0
  395. package/dist/types/responses-api.types.d.ts.map +1 -0
  396. package/dist/types/responses-api.types.js +12 -0
  397. package/dist/types/responses-api.types.js.map +1 -0
  398. package/package.json +145 -0
@@ -0,0 +1,552 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * @fileoverview Conversation Service Integration
5
+ *
6
+ * Service integration for Conversation service using the generic HTTP client.
7
+ * Provides typed methods for conversation-specific operations including streaming support.
8
+ *
9
+ * @author MeasureOne, Inc.
10
+ * @version 1.0.0
11
+ */
12
+ const logger_1 = require("../lib/utils/logger");
13
+ const models_1 = require("../models");
14
+ const agents_1 = require("../ai/agents");
15
+ const mcp_utils_1 = require("../lib/utils/mcp-utils");
16
+ const config_1 = require("../config");
17
+ const genai_1 = require("@google/genai");
18
+ const response_parser_1 = require("../ai/agents/response-parser");
19
+ const tool_call_extractor_1 = require("../lib/utils/tool-call-extractor");
20
+ const handler_registry_1 = require("../ai/response_handlers/handler-registry");
21
+ const embedding_service_1 = require("./embedding.service");
22
+ const execution_learner_1 = require("../ai/learning/execution-learner");
23
+ const logger = (0, logger_1.create_compact_logger)('ConversationService');
24
+ const terminal_response_types = [
25
+ "DIRECT_RESPONSE",
26
+ "NO_DOMAIN",
27
+ "REQUEST_INPUT",
28
+ "EXECUTION_REPORT"
29
+ // Note: STEP_COMPLETE is NOT terminal - it continues to next step
30
+ ];
31
+ class ConversationService {
32
+ constructor(streaming_utils) {
33
+ this.mcp_servers = [];
34
+ this.mcp_servers_initialized = false;
35
+ this.mcp_server_manager = null;
36
+ // MCP server configurations - initialized once, reused for creating agents
37
+ this.embedding_servers = [];
38
+ this.all_mcp_servers = [];
39
+ const gemini_api_key = config_1.config_utils.get('GEMINI_API_KEY');
40
+ if (!gemini_api_key) {
41
+ throw new Error('GEMINI_API_KEY is required. Please set it in your environment or config.');
42
+ }
43
+ this.gemini_client = new genai_1.GoogleGenAI({ apiKey: gemini_api_key });
44
+ this.embedding_service = new embedding_service_1.EmbeddingService();
45
+ // Step 2: Initialize agent system
46
+ (async () => {
47
+ await this.initialize_agent_system(streaming_utils);
48
+ })();
49
+ }
50
+ /**
51
+ * Initialize MCP servers once and reuse them across all agents
52
+ * Uses the singleton MCPServerManager instance which may already have servers initialized
53
+ */
54
+ async initialize_mcp_servers() {
55
+ if (this.mcp_servers_initialized)
56
+ return;
57
+ try {
58
+ logger.info('🔌 Initializing MCP servers for ConversationService');
59
+ // Get the singleton MCPServerManager instance
60
+ this.mcp_server_manager = mcp_utils_1.MCPServerManager.get_instance();
61
+ // Check if servers are already connected (from app.ts initialization)
62
+ const servers_with_names = this.mcp_server_manager.get_connected_servers_with_names();
63
+ if (servers_with_names.length > 0) {
64
+ // Servers already initialized, just use them
65
+ this.mcp_servers = servers_with_names.map(item => item.server);
66
+ logger.info(`✅ Using existing MCP servers: ${this.mcp_servers.length} servers already connected`);
67
+ logger.info(`🔍 Server names: ${servers_with_names.map(item => item.name).join(', ')}`);
68
+ this.mcp_servers_initialized = true;
69
+ return;
70
+ }
71
+ // Servers not initialized yet, try to initialize them
72
+ const mcp_servers_config = config_1.config_utils.get_mcp_servers();
73
+ if (mcp_servers_config.length === 0) {
74
+ logger.warn('⚠️ No MCP server configurations found');
75
+ this.mcp_servers_initialized = true;
76
+ return;
77
+ }
78
+ // Initialize and connect to MCP servers
79
+ await mcp_utils_1.MCPServerManager.create_and_connect_mcp_servers(mcp_servers_config);
80
+ // Get servers with names after initialization
81
+ const updated_servers_with_names = this.mcp_server_manager.get_connected_servers_with_names();
82
+ this.mcp_servers = updated_servers_with_names.map(item => item.server);
83
+ logger.info(`✅ MCP servers initialized: ${this.mcp_servers.length} servers connected`);
84
+ logger.info(`🔍 Server names: ${updated_servers_with_names.map(item => item.name).join(', ')}`);
85
+ this.mcp_servers_initialized = true;
86
+ }
87
+ catch (error) {
88
+ logger.error('❌ Failed to initialize MCP servers:', error instanceof Error ? error : new Error(String(error)));
89
+ this.mcp_servers_initialized = true;
90
+ }
91
+ }
92
+ get_mcp_servers() {
93
+ return this.mcp_servers;
94
+ }
95
+ /**
96
+ * Initialize MCP server configurations for agent creation
97
+ * Separates embedding servers (for planner) from all servers (for executor/knowledge)
98
+ */
99
+ async initialize_mcp_server_configs() {
100
+ await this.initialize_mcp_servers();
101
+ // Get servers with names from the manager
102
+ const servers_with_names = this.mcp_server_manager?.get_connected_servers_with_names() || [];
103
+ const server_names = servers_with_names.map(item => item.name);
104
+ logger.info("🔍 MCP Servers Available", { total_servers: this.mcp_servers.length, server_names: server_names });
105
+ // Filter embedding servers by name (for semantic search)
106
+ this.embedding_servers = servers_with_names
107
+ .filter(item => item.name.includes('embeddings') ||
108
+ item.name.includes('Embeddings') ||
109
+ item.name === 'embeddings-mcp' ||
110
+ item.name.includes('embeddings-mcp'))
111
+ .map(item => item.server);
112
+ this.all_mcp_servers = this.mcp_servers;
113
+ const planner_server_names = servers_with_names.filter(item => item.name.includes('embeddings') || item.name.includes('Embeddings') || item.name === 'embeddings-mcp' || item.name.includes('embeddings-mcp')).map(item => item.name);
114
+ const mcp_config_info = { embedding_servers_count: this.embedding_servers.length, all_mcp_servers_count: this.all_mcp_servers.length, planner_servers: planner_server_names, executor_servers: server_names, tool_separation: 'Planner=Embeddings for knowledge search, Executor/Knowledge=All tools' };
115
+ logger.info('MCP server configurations initialized', mcp_config_info);
116
+ }
117
+ /**
118
+ * Main entry point for submitting a message to the conversation system
119
+ * Loads conversation history from database, appends new message, processes, and saves back
120
+ */
121
+ async submit_message(data, streaming_utils) {
122
+ const original_message = data?.message?.content;
123
+ try {
124
+ logger.info('📨 Received new message for conversation', { agent_request_id: data.agent_request_id, conversation_id: data.conversation_id });
125
+ if (!data.conversation_id) {
126
+ throw new Error('Conversation ID is required');
127
+ }
128
+ const handler_registry = new handler_registry_1.HandlerRegistry(logger, streaming_utils);
129
+ let message_type = null;
130
+ let current_message = data.message;
131
+ let last_agent = null;
132
+ let context = {};
133
+ let last_agent_response = null;
134
+ // Load existing learnings from conversation at the start
135
+ let initial_conversation = await models_1.ConversationModel.findByPk(data.conversation_id);
136
+ if (!initial_conversation) {
137
+ throw new Error('Conversation not found');
138
+ }
139
+ // Accumulate learnings throughout the conversation for batch processing at the end
140
+ const accumulated_learnings = [];
141
+ // Main execution loop: identify handler -> classify agent -> execute -> handle
142
+ while (true) {
143
+ // Step 1: Identify handler for current message
144
+ let handler = null;
145
+ let handler_result = null;
146
+ // get the plan from the Database
147
+ const plan_with_steps = await this.get_plan(data.conversation_id, [['updated_at', 'DESC']]);
148
+ context.plan = plan_with_steps || null;
149
+ handler = handler_registry.find_handler(current_message);
150
+ if (!handler) {
151
+ logger.warn('⚠️ No handler found or handler failed');
152
+ streaming_utils?.write('status', { message: 'Error in message processing: No handler found or handler failed' });
153
+ const error_message = { role: 'model', content: 'Error in message processing: No handler found or handler failed' };
154
+ return { messages: [error_message], response_text: '' };
155
+ }
156
+ // Build handler context - include available_domains from merged context
157
+ const handler_context = {
158
+ conversation_id: data.conversation_id,
159
+ plan: plan_with_steps,
160
+ original_message: original_message,
161
+ tool_results: context.tool_results,
162
+ available_domains: context.available_domains || [], // Pass available_domains from context
163
+ embedding_service: this.embedding_service // Pass embedding service for knowledge base queries
164
+ };
165
+ handler_result = await handler.handle(current_message, handler_context);
166
+ context = { ...context, ...handler_result.context || {} };
167
+ // load the conversation history, and update the conversation messages and context that is returned by the handler
168
+ let conversation = await models_1.ConversationModel.findByPk(data.conversation_id);
169
+ if (!conversation) {
170
+ return { messages: [], response_text: 'Conversation not found' };
171
+ }
172
+ let messages = JSON.parse(conversation.messages || '[]');
173
+ const db_context = JSON.parse(conversation.context || '{}');
174
+ // Merge contexts: preserve available_domains from handler context if it exists and is non-empty
175
+ // DB context might have empty available_domains from previous iterations
176
+ const preserved_available_domains = (context.available_domains && Array.isArray(context.available_domains) && context.available_domains.length > 0)
177
+ ? context.available_domains
178
+ : (db_context.available_domains || []);
179
+ // IMPORTANT: embedding_service cannot be serialized (methods are lost), so always use the instance from this class
180
+ context = { ...db_context, ...context, available_domains: preserved_available_domains, embedding_service: this.embedding_service };
181
+ // Get summaries from database
182
+ const conversation_summary = conversation.conversation_summary || null;
183
+ const context_summary = conversation.context_summary || null;
184
+ // Handler result is always ChatMessage[]
185
+ messages = [...messages, ...handler_result.result];
186
+ conversation.messages = JSON.stringify(messages);
187
+ // IMPORTANT: embedding_service cannot be serialized (methods are lost), so exclude it before saving
188
+ const { embedding_service, ...context_to_save } = context;
189
+ conversation.context = JSON.stringify(context_to_save);
190
+ await conversation.save();
191
+ // Step 4: Check if handler indicates we should stop
192
+ if (!handler_result.success || !handler_result.should_continue) {
193
+ logger.info('✅ Handler determined execution should stop');
194
+ break;
195
+ }
196
+ // Step 5: Handler's response determines next message_type (classifies next agent)
197
+ message_type = handler_result.message_type;
198
+ // Check for terminal response types
199
+ if (message_type && terminal_response_types.includes(message_type)) {
200
+ logger.info(`✅ Terminal response type: ${message_type}`);
201
+ break;
202
+ }
203
+ // Step 6: Get recent messages for immediate context
204
+ // If summaries exist, use last 3 messages. If not, use last 10 for backward compatibility
205
+ const recent_messages_count = (conversation_summary || context_summary) ? 3 : 10;
206
+ const recent_messages = messages.slice(-recent_messages_count);
207
+ // Step 7: Classify agent based on handler's message_type
208
+ // Pass summaries, recent messages, and current context to agent constructor
209
+ const agent = this.classify_agent(conversation_summary, context_summary, recent_messages, context, message_type);
210
+ if (!agent) {
211
+ logger.info('✅ No routing available, ending loop');
212
+ break;
213
+ }
214
+ logger.info(`🔀 Routing to agent: ${agent.name} (message_type: ${message_type || 'null'})`);
215
+ // Step 8: Execute agent
216
+ // Since chat_instance is already created with condensed history (summaries + recent messages),
217
+ // we only need to pass the current message (last message in messages array)
218
+ const current_message_for_agent = messages.length > 0 ? [messages[messages.length - 1]] : [];
219
+ const execute_options = { streaming: !!streaming_utils };
220
+ const agent_response = await agent.execute_with_retries(current_message_for_agent, execute_options);
221
+ // For ExecutorAgent, extract tool results from automaticFunctionCallingHistory
222
+ // --- PERFORMANCE OPTIMIZATION ---
223
+ // Process tool results in the background to avoid blocking the main loop.
224
+ // This is especially important if results include large content that needs summarization.
225
+ // We call the async function without await and attach a .catch() to handle errors
226
+ // without crashing the main process.
227
+ this.process_tool_results(agent_response, context).catch(tool_processing_error => {
228
+ logger.error('❌ Background tool result processing failed', { error: tool_processing_error instanceof Error ? tool_processing_error.message : String(tool_processing_error), conversation_id: data.conversation_id });
229
+ });
230
+ // Log agent response without double-stringifying
231
+ // Parse the response to log it cleanly, or just log the text directly
232
+ const parsed_response = (0, response_parser_1.parse_agent_response)(agent_response.text || '');
233
+ // Accumulate learnings from each agent response (will be processed at the end)
234
+ const new_learnings = this.extract_learnings_from_response(parsed_response);
235
+ if (new_learnings.length > 0) {
236
+ const domain = context.domain || undefined;
237
+ logger.info('📚 Accumulating learnings for batch processing', {
238
+ count: new_learnings.length,
239
+ conversation_id: data.conversation_id,
240
+ domain,
241
+ total_accumulated: accumulated_learnings.length + new_learnings.length
242
+ });
243
+ // Add learnings to accumulation array with domain context
244
+ for (const learning of new_learnings) {
245
+ accumulated_learnings.push({ learning, domain });
246
+ }
247
+ }
248
+ // Step 9: Set agent response as current message for next iteration
249
+ // The handler will be identified in the next loop iteration
250
+ current_message = { role: 'model', content: JSON.stringify(parsed_response) };
251
+ last_agent = agent;
252
+ }
253
+ logger.info('✅ Message processing completed successfully');
254
+ // Process all accumulated learnings in batch at the end of conversation
255
+ if (accumulated_learnings.length > 0) {
256
+ try {
257
+ // Group learnings by domain for efficient processing
258
+ const learnings_by_domain = new Map();
259
+ for (const { learning, domain } of accumulated_learnings) {
260
+ const domain_key = domain || 'unknown';
261
+ if (!learnings_by_domain.has(domain_key)) {
262
+ learnings_by_domain.set(domain_key, []);
263
+ }
264
+ learnings_by_domain.get(domain_key).push(learning);
265
+ }
266
+ logger.info('📚 Processing all accumulated learnings in batch', {
267
+ total_learnings: accumulated_learnings.length,
268
+ domains: Array.from(learnings_by_domain.keys()),
269
+ learnings_per_domain: Object.fromEntries(Array.from(learnings_by_domain.entries()).map(([domain, learnings]) => [domain, learnings.length]))
270
+ });
271
+ // Process learnings for each domain in parallel (non-blocking)
272
+ const learning_promises = Array.from(learnings_by_domain.entries()).map(([domain, learnings]) => {
273
+ const domain_value = domain === 'unknown' ? undefined : domain;
274
+ return (0, execution_learner_1.get_execution_learner)()
275
+ .capture_learnings(learnings, data.conversation_id, domain_value)
276
+ .catch(learning_error => {
277
+ logger.error('❌ Background learning task failed for domain', {
278
+ domain: domain_value,
279
+ error: learning_error instanceof Error ? learning_error.message : String(learning_error),
280
+ learnings_count: learnings.length
281
+ });
282
+ });
283
+ });
284
+ // Wait for all learning processing to complete (non-blocking for user response)
285
+ Promise.all(learning_promises).catch(error => {
286
+ logger.error('❌ Some learning tasks failed', {
287
+ error: error instanceof Error ? error.message : String(error)
288
+ });
289
+ });
290
+ }
291
+ catch (learning_error) {
292
+ // Don't fail the conversation if learning processing fails
293
+ logger.error('❌ Failed to process accumulated learnings', {
294
+ error: learning_error instanceof Error ? learning_error.message : String(learning_error),
295
+ conversation_id: data.conversation_id,
296
+ learnings_count: accumulated_learnings.length
297
+ });
298
+ }
299
+ }
300
+ else {
301
+ logger.info('📚 No learnings to process');
302
+ }
303
+ streaming_utils.write('end', { status: 'completed' });
304
+ // Load final messages from database
305
+ const final_conversation = await models_1.ConversationModel.findByPk(data.conversation_id);
306
+ const final_messages = final_conversation?.messages ? JSON.parse(final_conversation.messages) : [];
307
+ return { messages: final_messages, response_text: '' };
308
+ }
309
+ catch (error) {
310
+ logger.error('❌ Failed to process message', { error: error instanceof Error ? error.message : String(error) });
311
+ // Emit 'end' event even on error to stop heartbeat
312
+ if (streaming_utils) {
313
+ const error_status = { status: 'error', error: error instanceof Error ? error.message : String(error) };
314
+ streaming_utils.write('end', error_status);
315
+ }
316
+ throw error;
317
+ }
318
+ }
319
+ /**
320
+ * DAO method: Find agent request by ID
321
+ */
322
+ async find_agent_request(agent_request_id) {
323
+ return await models_1.AgentRequestModel.findByPk(agent_request_id);
324
+ }
325
+ /**
326
+ * DAO method: Find conversation by ID
327
+ */
328
+ async find_conversation(conversation_id) {
329
+ return await models_1.ConversationModel.findByPk(conversation_id);
330
+ }
331
+ /**
332
+ * DAO method: Find plan step by ID
333
+ */
334
+ async find_plan_step(step_id) {
335
+ return await models_1.PlanStepModel.findByPk(step_id);
336
+ }
337
+ /**
338
+ * DAO method: Find plan by ID
339
+ */
340
+ async find_plan(plan_id) {
341
+ return await models_1.PlanModel.findByPk(plan_id);
342
+ }
343
+ /**
344
+ * Step 2: Initialize the agent system
345
+ */
346
+ async initialize_agent_system(streaming_utils) {
347
+ logger.info('🤖 Initializing agent system');
348
+ streaming_utils?.write('status', { message: 'Initializing AI agents...' });
349
+ await this.initialize_mcp_server_configs();
350
+ logger.info('🤖 Agent system initialized - agents will be created per conversation with conversation history');
351
+ }
352
+ /**
353
+ * Unified routing method - creates new agent instance based on message_type
354
+ * Each agent instance is created with conversation history for stateful chat
355
+ * Simple routing: null → orchestrator, otherwise route based on message_type
356
+ */
357
+ classify_agent(conversation_summary, context_summary, recent_messages, current_context, message_type = null) {
358
+ const routing_info = { message_type: message_type || 'null', recent_messages_count: recent_messages.length, has_summaries: !!conversation_summary || !!context_summary };
359
+ logger.info(`🔀 Routing: message_type: ${routing_info.message_type}, recent_messages: ${routing_info.recent_messages_count}, has_summaries: ${routing_info.has_summaries}`);
360
+ // If message_type is null, route to orchestrator
361
+ if (message_type === null) {
362
+ return new agents_1.OrchestratorAgent(this.gemini_client, [], "gemini-2.5-flash", conversation_summary, context_summary, recent_messages, current_context);
363
+ }
364
+ // Route based on message_type - create new agent instance with summaries and recent messages
365
+ switch (message_type) {
366
+ case "REQUEST_PLAN":
367
+ return new agents_1.PlannerAgent(this.gemini_client, this.embedding_servers, "gemini-2.5-flash", conversation_summary, context_summary, recent_messages, current_context);
368
+ case "PLAN_READY":
369
+ case "STEP_READY":
370
+ case "STEP_COMPLETE":
371
+ case "TOOL_CALL_READY":
372
+ return new agents_1.ExecutorAgent(this.gemini_client, this.all_mcp_servers, "gemini-2.5-flash", conversation_summary, context_summary, recent_messages, current_context);
373
+ case "ERROR":
374
+ case "KNOWLEDGE_ANSWER":
375
+ case "DIRECT_RESPONSE":
376
+ case "NO_DOMAIN":
377
+ case "REQUEST_INPUT":
378
+ case "EXECUTION_REPORT":
379
+ // Terminal states - no more routing
380
+ return null;
381
+ default:
382
+ // Unknown message_type - route to orchestrator as fallback
383
+ logger.warn(`⚠️ Unknown message_type: ${message_type}, routing to orchestrator`);
384
+ return new agents_1.OrchestratorAgent(this.gemini_client, [], "gemini-2.5-flash", conversation_summary, context_summary, recent_messages, current_context);
385
+ }
386
+ }
387
+ // ===========================================================================
388
+ // Helper Methods
389
+ // ===========================================================================
390
+ /**
391
+ * Extracts learnings from a parsed agent response.
392
+ * @param parsed_response The parsed agent response.
393
+ * @returns An array of stringified, valid learnings.
394
+ */
395
+ extract_learnings_from_response(parsed_response) {
396
+ const learnings_value = parsed_response?.content?.learnings;
397
+ if (!learnings_value) {
398
+ return [];
399
+ }
400
+ const learnings_array = Array.isArray(learnings_value) ? learnings_value : [learnings_value];
401
+ return learnings_array
402
+ .filter((l) => l !== null && l !== undefined)
403
+ .map((l) => {
404
+ if (typeof l === 'string') {
405
+ return l.trim();
406
+ }
407
+ else if (typeof l === 'object') {
408
+ return JSON.stringify(l);
409
+ }
410
+ return String(l);
411
+ })
412
+ .filter((l) => l.length > 0 && l !== '[object Object]');
413
+ }
414
+ /**
415
+ * Process tool results from ExecutorAgent response and update context
416
+ * Extracts tool results, formats them, deduplicates, and updates context
417
+ * @param agent_response - The GenerateContentResponse from the agent
418
+ * @param context - The context object to update with tool results
419
+ */
420
+ async process_tool_results(agent_response, context) {
421
+ try {
422
+ const tool_results = (0, tool_call_extractor_1.extract_tool_results_from_history)(agent_response);
423
+ if (tool_results.length > 0) {
424
+ // Format tool results for context (matching executor instructions format)
425
+ const formatted_tool_results = tool_results.map(tr => ({ call_id: tr.call_id, tool_name: tr.tool_name, result: tr.result, execution_time_ms: tr.execution_time_ms, success: tr.success, error: tr.error }));
426
+ // Deduplicate by call_id before appending
427
+ const existing_tool_results = context.tool_results || [];
428
+ const existing_call_ids = new Set(existing_tool_results.map((tr) => tr.call_id).filter(Boolean));
429
+ // Filter out duplicates by call_id
430
+ const new_unique_results = formatted_tool_results.filter(tr => !existing_call_ids.has(tr.call_id));
431
+ if (new_unique_results.length == 0) {
432
+ logger.info(`📊 No new tool results found`);
433
+ return;
434
+ }
435
+ context.tool_results = [...existing_tool_results, ...new_unique_results];
436
+ logger.info(`📊 Extracted ${tool_results.length} tool result(s), added ${new_unique_results.length} unique result(s) (total: ${context.tool_results.length})`);
437
+ }
438
+ }
439
+ catch (error) {
440
+ logger.error('❌ Error processing tool results', { error: error instanceof Error ? error.message : String(error) });
441
+ }
442
+ }
443
+ /**
444
+ * Get plan from database for a conversation
445
+ * @param conversation_id - The conversation ID to get the plan for
446
+ * @param sort_params - Sort parameters for the plan query (default: [['updated_at', 'DESC']])
447
+ * @returns PlanWithSteps with all steps, or null if no plan found
448
+ */
449
+ async get_plan(conversation_id, sort_params = [['updated_at', 'DESC']]) {
450
+ try {
451
+ const plan_query = { where: { conversation_id: conversation_id }, order: sort_params };
452
+ const plan_model = await models_1.PlanModel.findOne(plan_query);
453
+ if (!plan_model) {
454
+ return null;
455
+ }
456
+ const step_models = await models_1.PlanStepModel.findAll({ where: { plan_id: plan_model.id }, order: [['step_index', 'ASC']] });
457
+ // Convert models to DTOs
458
+ const plan_dto = plan_model.to_shared_type();
459
+ const steps_dto = step_models.map(step => step.to_shared_type());
460
+ const plan_with_steps = { ...plan_dto, steps: steps_dto };
461
+ return plan_with_steps;
462
+ }
463
+ catch (error) {
464
+ logger.error('❌ Failed to get plan from database', { error: error instanceof Error ? error.message : String(error), conversation_id });
465
+ return null;
466
+ }
467
+ }
468
+ /**
469
+ * Capture learnings from handler result (success or failure)
470
+ * Passes raw execution data directly to LearningAgent - no pattern extraction needed
471
+ */
472
+ async capture_learnings_from_handler_result(handler_result, ai_response, conversation_history) {
473
+ try {
474
+ const learner = (0, execution_learner_1.get_execution_learner)();
475
+ // Extract AgentResponse from AIResponse (similar to how handlers do it)
476
+ // Note: parse_agent_response throws on failure, which will be caught by outer catch
477
+ const agent_response = (0, response_parser_1.parse_agent_response)(ai_response.text || '');
478
+ if (!agent_response) {
479
+ logger.info('⚠️ No agent response extracted');
480
+ return;
481
+ }
482
+ // Only capture learnings for executor agent responses
483
+ // Check both agent_kind and agent_type (error responses might only have agent_type)
484
+ const is_executor = (('agent_kind' in agent_response) && agent_response.agent_kind === 'executor') ||
485
+ (('agent_type' in agent_response) && agent_response.agent_type === 'ExecutorAgent');
486
+ if (!is_executor) {
487
+ logger.debug('Skipping learning capture - not an executor response', { agent_kind: agent_response.agent_kind, agent_type: agent_response.agent_type });
488
+ return;
489
+ }
490
+ // Determine if this was a success or failure
491
+ const is_success = handler_result.success &&
492
+ (handler_result.message_type === 'STEP_COMPLETE' ||
493
+ handler_result.message_type === 'TOOL_CALL_READY' ||
494
+ handler_result.message_type === 'EXECUTION_REPORT');
495
+ //
496
+ }
497
+ catch (error) {
498
+ // Don't fail the conversation if learning capture fails
499
+ logger.warn('⚠️ Failed to capture learnings', { error: error instanceof Error ? error.message : String(error) });
500
+ }
501
+ }
502
+ }
503
+ exports.default = ConversationService;
504
+ /**
505
+ * Merge conversation histories safely.
506
+ *
507
+ * Handlers frequently return a FULL updated history (history + model message + context message),
508
+ * but some handlers may return only the delta. This function:
509
+ * - Treats `next_history` as authoritative if it already contains `current_history` as a prefix
510
+ * - Otherwise appends only new, non-duplicate messages (fingerprint-based)
511
+ */
512
+ function merge_conversation_histories(current_history, next_history) {
513
+ if (next_history.length === 0) {
514
+ return current_history;
515
+ }
516
+ if (is_history_prefix(current_history, next_history)) {
517
+ return dedupe_messages(next_history);
518
+ }
519
+ const merged = [...current_history, ...next_history];
520
+ return dedupe_messages(merged);
521
+ }
522
+ function is_history_prefix(prefix, full) {
523
+ if (prefix.length > full.length) {
524
+ return false;
525
+ }
526
+ for (let i = 0; i < prefix.length; i++) {
527
+ if (chat_message_fingerprint(prefix[i]) !== chat_message_fingerprint(full[i])) {
528
+ return false;
529
+ }
530
+ }
531
+ return true;
532
+ }
533
+ function dedupe_messages(messages) {
534
+ const seen = new Set();
535
+ const result = [];
536
+ for (const msg of messages) {
537
+ const fp = chat_message_fingerprint(msg);
538
+ if (seen.has(fp)) {
539
+ continue;
540
+ }
541
+ seen.add(fp);
542
+ result.push(msg);
543
+ }
544
+ return result;
545
+ }
546
+ function chat_message_fingerprint(message) {
547
+ const role = message?.role ?? '';
548
+ const content = message?.content;
549
+ const content_str = typeof content === 'string' ? content : JSON.stringify(content);
550
+ return `${role}::${content_str}`;
551
+ }
552
+ //# sourceMappingURL=conversation.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.service.js","sourceRoot":"","sources":["../../src/services/conversation.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * @fileoverview Domain Service
3
+ *
4
+ * Service for managing domains, seeds, and domain validation.
5
+ * Ensures that seeds exist for domains before allowing learning creation.
6
+ *
7
+ * @author MeasureOne, Inc.
8
+ * @version 1.0.0
9
+ */
10
+ export declare class DomainService {
11
+ private sequelize;
12
+ constructor();
13
+ /**
14
+ * Get all unique domains from Embeddings table (ALL types: SEED and LEARNING)
15
+ * Returns all distinct domain values that exist in the system
16
+ *
17
+ * @returns Promise resolving to array of unique domain strings
18
+ */
19
+ get_unique_domains(): Promise<string[]>;
20
+ /**
21
+ * Check if a seed exists for a given domain
22
+ * Seeds are SEED type embeddings with a domain field
23
+ *
24
+ * @param domain - The domain to check
25
+ * @returns Promise resolving to true if seed exists, false otherwise
26
+ */
27
+ seed_exists_for_domain(domain: string): Promise<boolean>;
28
+ /**
29
+ * Get seed pattern for a domain
30
+ * Returns the pattern/format specification from the seed
31
+ *
32
+ * @param domain - The domain to get seed pattern for
33
+ * @returns Promise resolving to seed pattern text or null if not found
34
+ */
35
+ get_seed_pattern(domain: string): Promise<string | null>;
36
+ /**
37
+ * Validate that a seed exists for a domain before allowing operations
38
+ * Throws an error if seed doesn't exist
39
+ *
40
+ * @param domain - The domain to validate
41
+ * @throws Error if seed doesn't exist for domain
42
+ */
43
+ validate_seed_exists(domain: string): Promise<void>;
44
+ /**
45
+ * Identify domain from seed content using AI
46
+ * Domain is ALWAYS identified using AI - never from manual input
47
+ *
48
+ * @param content - The seed content to analyze
49
+ * @returns Promise resolving to identified domain string
50
+ * @throws Error if domain cannot be identified or if GEMINI_API_KEY is not configured
51
+ */
52
+ identify_domain_from_content(content: string): Promise<string>;
53
+ }
54
+ /**
55
+ * Get the singleton DomainService instance
56
+ */
57
+ export declare function get_domain_service(): DomainService;
58
+ //# sourceMappingURL=domain.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain.service.d.ts","sourceRoot":"","sources":["../../src/services/domain.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAYH,qBAAa,aAAa;IACtB,OAAO,CAAC,SAAS,CAAM;;IAMvB;;;;;OAKG;IACG,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IA2B7C;;;;;;OAMG;IACG,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAuB9D;;;;;;OAMG;IACG,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA6F9D;;;;;;OAMG;IACG,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWzD;;;;;;;OAOG;IACG,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CA4CvE;AAKD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,aAAa,CAKlD"}