@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,143 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Request Plan Handler
4
+ *
5
+ * Handles REQUEST_PLAN message_type from AgentResponse.
6
+ * Agent is requesting a plan from the planner.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.RequestPlanHandler = void 0;
10
+ const base_handler_1 = require("./base-handler");
11
+ const domain_matcher_1 = require("../../lib/utils/domain-matcher");
12
+ class RequestPlanHandler extends base_handler_1.BaseHandler {
13
+ can_handle(message_type, output_type, input) {
14
+ return message_type === 'REQUEST_PLAN';
15
+ }
16
+ async handle(input, context) {
17
+ this.logger.info('Request plan handler received result');
18
+ // Parse AgentResponse from output_text
19
+ let agent_response;
20
+ if (!input.content) {
21
+ this.logger.warn('⚠️ No output_text in response');
22
+ return {
23
+ success: false,
24
+ result: [],
25
+ should_continue: false
26
+ };
27
+ }
28
+ // Use base handler extraction method to handle markdown, escape sequences, etc.
29
+ const extracted = this.extract_agent_response(input.content);
30
+ if (!extracted) {
31
+ this.logger.error('❌ Failed to extract AgentResponse from output_text');
32
+ return {
33
+ success: false,
34
+ result: [],
35
+ should_continue: false
36
+ };
37
+ }
38
+ agent_response = extracted;
39
+ // Extract domain from orchestrator response (for domain identification)
40
+ const extracted_domain = agent_response?.domain || agent_response?.content?.domain || null;
41
+ const available_domains = context?.available_domains || [];
42
+ // Find matching domain (case-insensitive) and use original case from available_domains
43
+ const matched_domain = extracted_domain ? (0, domain_matcher_1.find_matching_domain)(extracted_domain, available_domains) : null;
44
+ const domain_valid = (0, domain_matcher_1.is_domain_in_list)(extracted_domain, available_domains);
45
+ // Log domain identification result from orchestrator
46
+ this.logger.info('🎯 RequestPlanHandler - Orchestrator domain identification', {
47
+ identified_domain: extracted_domain || 'null',
48
+ matched_domain: matched_domain || 'null',
49
+ message_type: agent_response.message_type,
50
+ available_domains: available_domains,
51
+ domain_valid: domain_valid,
52
+ agent_kind: agent_response?.agent_kind
53
+ });
54
+ // Validate domain for REQUEST_PLAN
55
+ if (!extracted_domain || !domain_valid) {
56
+ const error_message = !extracted_domain
57
+ ? 'Could not identify domain for the request. Available domains: ' + available_domains.join(', ')
58
+ : `Domain '${extracted_domain}' is not supported. Available domains: ${available_domains.join(', ')}`;
59
+ this.logger.warn(!extracted_domain ? '❌ No domain identified for REQUEST_PLAN' : '❌ Domain not in available_domains', {
60
+ identified_domain: extracted_domain,
61
+ available_domains: available_domains
62
+ });
63
+ // Reject the request - domain is missing or invalid
64
+ return {
65
+ success: false,
66
+ result: [],
67
+ should_continue: false,
68
+ context: {
69
+ message_type: 'NO_DOMAIN',
70
+ domain: null,
71
+ error: error_message
72
+ },
73
+ message_type: 'NO_DOMAIN'
74
+ };
75
+ }
76
+ // Use matched_domain (with original case from available_domains) for consistency
77
+ this.logger.info('✅ Domain validated', { domain: matched_domain });
78
+ // Store domain in context for later use (e.g., learning capture)
79
+ // Use matched_domain to ensure consistent casing
80
+ const handler_context = {
81
+ domain: matched_domain
82
+ };
83
+ this.streaming_utils.write('status', { message: extracted.content.message });
84
+ // Check if there's an active plan in context
85
+ // If there is, route to executor (STEP_READY) instead of planner
86
+ const plan_id = context?.plan_id;
87
+ if (plan_id) {
88
+ this.logger.info(`✅ Request plan received but active plan exists (plan_id: ${plan_id}) - routing to executor`);
89
+ // Format message for executor to continue with the plan
90
+ const user_message = typeof input.content === 'string'
91
+ ? input.content
92
+ : input.content?.message || input.content?.text || JSON.stringify(input.content);
93
+ return {
94
+ success: true,
95
+ result: [{
96
+ role: 'user',
97
+ content: `I have provided additional inputs: ${user_message}. Continue with the plan from the next step.`
98
+ }],
99
+ should_continue: true,
100
+ message_type: 'STEP_READY' // Route to executor when active plan exists
101
+ };
102
+ }
103
+ this.logger.info(`✅ Request plan received - continuing to planner`);
104
+ // REQUEST_PLAN - continue to planner (no active plan)
105
+ return {
106
+ success: true,
107
+ result: [{
108
+ role: 'user',
109
+ content: ' Create a detailed plan for the task: ' + context.original_message
110
+ }],
111
+ should_continue: true,
112
+ message_type: 'REQUEST_PLAN', // Route to planner based on context
113
+ context: handler_context // Include domain in context
114
+ };
115
+ }
116
+ /**
117
+ * Prepare input for PlannerAgent
118
+ * Formats the message for plan creation
119
+ */
120
+ prepare_input(last_message) {
121
+ if (!last_message) {
122
+ return [{
123
+ role: 'user',
124
+ content: 'Create a detailed plan for the task'
125
+ }];
126
+ }
127
+ // Extract the user's message
128
+ let user_message = '';
129
+ if (typeof last_message.content === 'string') {
130
+ user_message = last_message.content;
131
+ }
132
+ else if (last_message.content && typeof last_message.content === 'object') {
133
+ user_message = last_message.content.message || last_message.content.text || JSON.stringify(last_message.content);
134
+ }
135
+ const formatted_message = user_message || 'Create a detailed plan for the task';
136
+ return [{
137
+ role: 'user',
138
+ content: formatted_message
139
+ }];
140
+ }
141
+ }
142
+ exports.RequestPlanHandler = RequestPlanHandler;
143
+ //# sourceMappingURL=request-plan-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-plan-handler.js","sourceRoot":"","sources":["../../../src/ai/response_handlers/request-plan-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @fileoverview Step Complete Handler
3
+ *
4
+ * Handles STEP_COMPLETE message_type from AgentResponse.
5
+ * Updates step status in database, finds next step, and continues execution.
6
+ */
7
+ import { BaseHandler, HandlerContext, HandlerResult } from "./base-handler";
8
+ import { ChatMessage } from "../../lib/schemas";
9
+ export declare class StepCompleteHandler extends BaseHandler {
10
+ can_handle(message_type: string | null, output_type: string, input: ChatMessage): boolean;
11
+ handle(input: ChatMessage, context: HandlerContext): Promise<HandlerResult>;
12
+ /**
13
+ * Load conversation context from database
14
+ */
15
+ private load_conversation_context;
16
+ /**
17
+ * Save context to conversation in database
18
+ * Merges new context with existing context
19
+ */
20
+ private save_conversation_context;
21
+ }
22
+ //# sourceMappingURL=step-complete-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-complete-handler.d.ts","sourceRoot":"","sources":["../../../src/ai/response_handlers/step-complete-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAoB,WAAW,EAA6B,MAAM,mBAAmB,CAAC;AAI7F,qBAAa,mBAAoB,SAAQ,WAAW;IAEhD,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO;IAInF,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAyQjF;;OAEG;YACW,yBAAyB;IAuBvC;;;OAGG;YACW,yBAAyB;CAsC1C"}
@@ -0,0 +1,307 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Step Complete Handler
4
+ *
5
+ * Handles STEP_COMPLETE message_type from AgentResponse.
6
+ * Updates step status in database, finds next step, and continues execution.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.StepCompleteHandler = void 0;
10
+ const base_handler_1 = require("./base-handler");
11
+ const models_1 = require("../../models");
12
+ class StepCompleteHandler extends base_handler_1.BaseHandler {
13
+ can_handle(message_type, output_type, input) {
14
+ return message_type === 'STEP_COMPLETE';
15
+ }
16
+ async handle(input, context) {
17
+ this.logger.info('Step complete handler received result ' + input.content);
18
+ // Parse AgentResponse from output_text
19
+ if (!input.content) {
20
+ this.logger.warn('⚠️ No output_text in response');
21
+ return { success: false, result: [], should_continue: false };
22
+ }
23
+ const extracted = this.extract_agent_response(input.content);
24
+ if (!extracted) {
25
+ this.logger.error('❌ Failed to extract AgentResponse from output_text');
26
+ return { success: false, result: [], should_continue: false };
27
+ }
28
+ const executor_response = extracted;
29
+ const step_result = executor_response.content?.step_result;
30
+ const step_result_context = executor_response.content?.context;
31
+ if (!step_result) {
32
+ this.logger.warn('⚠️ STEP_COMPLETE but no step_result in response');
33
+ return { success: false, result: [], should_continue: false };
34
+ }
35
+ // Load context from database
36
+ if (!step_result_context?.conversation_id) {
37
+ this.logger.error('❌ conversation_id not found in handler context');
38
+ return { success: false, result: [], should_continue: false };
39
+ }
40
+ const db_context = await this.load_conversation_context(step_result_context.conversation_id);
41
+ // Extract plan_id - prioritize step_result context since that's what the executor is reporting
42
+ // This ensures we use the correct plan_id even if the database context is stale
43
+ const content_context = executor_response.content?.context || {};
44
+ const plan_id = content_context?.plan_id || step_result_context?.plan_id || db_context?.plan_id || null;
45
+ if (!plan_id) {
46
+ this.logger.error('❌ plan_id not found in conversation context');
47
+ return { success: false, result: [], should_continue: false };
48
+ }
49
+ // Extract tool results from context (passed from conversation service)
50
+ // Tool results are extracted from automaticFunctionCallingHistory after ExecutorAgent execution
51
+ let tool_results = [];
52
+ if (context.tool_results && Array.isArray(context.tool_results)) {
53
+ tool_results = context.tool_results;
54
+ this.logger.info(`📊 Found ${tool_results.length} tool result(s) in handler context`);
55
+ }
56
+ else if (content_context?.tool_results && Array.isArray(content_context.tool_results)) {
57
+ tool_results = content_context.tool_results;
58
+ }
59
+ else if (step_result_context?.tool_results && Array.isArray(step_result_context.tool_results)) {
60
+ tool_results = step_result_context.tool_results;
61
+ }
62
+ else if (db_context?.tool_results && Array.isArray(db_context.tool_results)) {
63
+ // Fallback to database context
64
+ tool_results = db_context.tool_results;
65
+ }
66
+ // Extract context from step_result and merge with DB context (context is separate from step instructions)
67
+ const step_context = { ...step_result_context, ...content_context };
68
+ // Merge tool_results: deduplicate by call_id before merging
69
+ const existing_tool_results = db_context?.tool_results || [];
70
+ const existing_call_ids = new Set(existing_tool_results.map((tr) => tr.call_id).filter(Boolean));
71
+ // Filter out duplicates from new tool_results
72
+ const unique_new_results = tool_results.filter((tr) => {
73
+ const call_id = tr.call_id;
74
+ if (!call_id) {
75
+ // If no call_id, check for duplicates by tool_name + result hash
76
+ const result_str = JSON.stringify(tr.result);
77
+ const key = `${tr.tool_name}:${result_str}`;
78
+ return !existing_tool_results.some((etr) => {
79
+ if (etr.call_id)
80
+ return false; // Has call_id, skip
81
+ return `${etr.tool_name}:${JSON.stringify(etr.result)}` === key;
82
+ });
83
+ }
84
+ return !existing_call_ids.has(call_id);
85
+ });
86
+ const all_tool_results = [...existing_tool_results, ...unique_new_results];
87
+ if (unique_new_results.length < tool_results.length) {
88
+ this.logger.info(`📊 Filtered out ${tool_results.length - unique_new_results.length} duplicate tool result(s)`);
89
+ }
90
+ const merged_context = {
91
+ ...db_context,
92
+ ...step_context,
93
+ plan_id: plan_id,
94
+ tool_results: all_tool_results // All tool results from all steps (deduplicated)
95
+ };
96
+ // Save merged context to database (without step instructions)
97
+ await this.save_conversation_context(context.conversation_id, merged_context);
98
+ // Determine if step succeeded (no error)
99
+ const is_success = step_result.success;
100
+ const error_message = executor_response.content?.error_message || null;
101
+ const error_code = executor_response.content?.error_code || null;
102
+ const step_succeeded = is_success && !error_message && !error_code;
103
+ // Update step status in database
104
+ let next_step = null;
105
+ const all_steps = await models_1.PlanStepModel.findAll({ where: { plan_id }, order: [['step_index', 'ASC']] });
106
+ // Find current step by step_id first, then fallback to step_index
107
+ let current_step = all_steps.find(s => s.id === step_result.step_id);
108
+ if (!current_step && step_result.step_index !== undefined) {
109
+ current_step = all_steps.find(s => s.step_index === step_result.step_index);
110
+ }
111
+ if (!current_step) {
112
+ this.logger.error('❌ Current step not found in database', {
113
+ step_id: step_result.step_id,
114
+ step_index: step_result.step_index,
115
+ plan_id: plan_id,
116
+ available_steps: all_steps.map(s => ({ id: s.id, step_index: s.step_index, status: s.status }))
117
+ });
118
+ return { success: false, result: [], should_continue: false };
119
+ }
120
+ // Prepare update attributes based on success/failure
121
+ const step_status = step_succeeded ? 'COMPLETED' : 'FAILED';
122
+ const error_text = step_succeeded ? null : (error_message || (error_code ? `Error code: ${error_code}` : 'Step execution failed') || 'Step execution failed');
123
+ // Update step status in database
124
+ await current_step.update({
125
+ status: step_status, result: step_result.result || null, error: error_text,
126
+ completed_at: new Date(), updated_at: new Date()
127
+ });
128
+ if (!step_succeeded) {
129
+ return {
130
+ success: false, result: [input], should_continue: false,
131
+ context: merged_context, message_type: 'EXECUTION_REPORT'
132
+ };
133
+ }
134
+ this.logger.info(`✅ Marked step ${current_step.step_index} as COMPLETED`);
135
+ // Get next step (first pending step after current) only if current step succeeded
136
+ // Only look for steps with step_index greater than current step_index
137
+ // This ensures we don't accidentally mark the plan as complete if there are earlier pending steps
138
+ const current_step_index = current_step.step_index;
139
+ next_step = all_steps.find(s => s.status === 'PENDING' && s.step_index > current_step_index) || null;
140
+ // Log all steps for debugging
141
+ this.logger.info(`🔍 Checking for next step after step ${current_step_index}`, {
142
+ total_steps: all_steps.length,
143
+ current_step_index: current_step_index,
144
+ all_steps_status: all_steps.map(s => ({ step_index: s.step_index, status: s.status })),
145
+ pending_steps_after_current: all_steps.filter(s => s.status === 'PENDING' && s.step_index > current_step_index).map(s => s.step_index)
146
+ });
147
+ if (!next_step) {
148
+ // Check if there are any pending steps at all (including earlier ones)
149
+ const any_pending_steps = all_steps.some(s => s.status === 'PENDING');
150
+ if (any_pending_steps) {
151
+ this.logger.warn(`⚠️ No next step found after step ${current_step_index}, but there are pending steps. This might indicate a step_index ordering issue.`);
152
+ // Find the first pending step regardless of index (fallback)
153
+ next_step = all_steps.find(s => s.status === 'PENDING') || null;
154
+ }
155
+ if (!next_step) {
156
+ // All steps are complete - mark plan as COMPLETED
157
+ const plan = await models_1.PlanModel.findByPk(plan_id);
158
+ if (plan) {
159
+ await plan.update({ status: 'COMPLETED', updated_at: new Date() });
160
+ this.logger.info(`✅ All steps completed - marked plan ${plan_id} as COMPLETED`);
161
+ // Update context with completed plan
162
+ const all_steps_completed = await models_1.PlanStepModel.findAll({
163
+ where: { plan_id: plan_id },
164
+ order: [['step_index', 'ASC']]
165
+ });
166
+ const plan_with_steps = {
167
+ ...plan.to_shared_type(),
168
+ steps: all_steps_completed.map(step => step.to_shared_type())
169
+ };
170
+ merged_context.plan = plan_with_steps;
171
+ }
172
+ return {
173
+ success: true,
174
+ result: [input],
175
+ should_continue: false,
176
+ context: merged_context,
177
+ message_type: 'EXECUTION_REPORT'
178
+ };
179
+ }
180
+ }
181
+ await next_step.update({ status: 'IN_PROGRESS', started_at: new Date(), updated_at: new Date() });
182
+ this.logger.info(`✅ Marked next step ${next_step.step_index} as IN_PROGRESS`);
183
+ // Load plan with all steps for context update
184
+ const plan = await models_1.PlanModel.findByPk(plan_id);
185
+ if (plan) {
186
+ const all_steps = await models_1.PlanStepModel.findAll({
187
+ where: { plan_id: plan_id },
188
+ order: [['step_index', 'ASC']]
189
+ });
190
+ const plan_with_steps = {
191
+ ...plan.to_shared_type(),
192
+ steps: all_steps.map(step => step.to_shared_type())
193
+ };
194
+ merged_context.plan = plan_with_steps;
195
+ }
196
+ // Query knowledge base using next step description
197
+ let knowledge_base_results = [];
198
+ if (context.embedding_service && next_step.description) {
199
+ try {
200
+ this.logger.info(`🔍 Querying knowledge base for next step: ${next_step.description}`);
201
+ knowledge_base_results = await context.embedding_service.search_embeddings(next_step.description, undefined, // knowledge_id - search all
202
+ 10, // limit
203
+ undefined, // model - use default
204
+ undefined, // type - search all types
205
+ undefined // domain - search all domains
206
+ );
207
+ this.logger.info(`✅ Found ${knowledge_base_results.length} knowledge base results for next step`);
208
+ }
209
+ catch (error) {
210
+ this.logger.warn('⚠️ Failed to query knowledge base', { error });
211
+ }
212
+ }
213
+ // Format knowledge base results for inclusion in message
214
+ let knowledge_base_text = '';
215
+ if (knowledge_base_results.length > 0) {
216
+ knowledge_base_text = `\n\n## Knowledge Base Learnings:\n`;
217
+ knowledge_base_text += knowledge_base_results.map((result, idx) => `${idx + 1}. ${result.text} (score: ${result.score.toFixed(3)})`).join('\n');
218
+ }
219
+ // Format context JSON for inclusion in message
220
+ const context_json = JSON.stringify(merged_context, null, 2);
221
+ // Create result message with step instructions and context (similar to PlanReadyHandler)
222
+ return {
223
+ success: true,
224
+ result: [{
225
+ role: 'user',
226
+ content: `Execute the following step: ${next_step.id}: ${next_step.description}
227
+ Use the parameters available from the context in JSON format below.
228
+ If the step is unsuccessful, use the suggestions on failure to recover.
229
+ ${knowledge_base_text}
230
+ ## Context:
231
+ \`\`\`json
232
+ ${context_json}
233
+ \`\`\`
234
+ `
235
+ }],
236
+ should_continue: true,
237
+ context: merged_context,
238
+ message_type: 'STEP_READY'
239
+ };
240
+ }
241
+ /**
242
+ * Load conversation context from database
243
+ */
244
+ async load_conversation_context(conversation_id) {
245
+ try {
246
+ const conversation = await models_1.ConversationModel.findByPk(conversation_id);
247
+ if (!conversation || !conversation.context) {
248
+ return null;
249
+ }
250
+ try {
251
+ return JSON.parse(conversation.context);
252
+ }
253
+ catch (e) {
254
+ this.logger.warn('⚠️ Failed to parse conversation context from database', { error: e });
255
+ return null;
256
+ }
257
+ }
258
+ catch (error) {
259
+ this.logger.error('❌ Failed to load conversation context', {
260
+ error: error instanceof Error ? error.message : String(error),
261
+ conversation_id
262
+ });
263
+ return null;
264
+ }
265
+ }
266
+ /**
267
+ * Save context to conversation in database
268
+ * Merges new context with existing context
269
+ */
270
+ async save_conversation_context(conversation_id, new_context) {
271
+ try {
272
+ const conversation = await models_1.ConversationModel.findByPk(conversation_id);
273
+ if (!conversation) {
274
+ this.logger.warn(`⚠️ Conversation not found: ${conversation_id}`);
275
+ return;
276
+ }
277
+ // Load existing context
278
+ let existing_context = {};
279
+ if (conversation.context) {
280
+ try {
281
+ existing_context = JSON.parse(conversation.context);
282
+ }
283
+ catch (e) {
284
+ this.logger.warn('⚠️ Failed to parse existing context, starting fresh');
285
+ }
286
+ }
287
+ // Merge new context with existing (new context takes precedence)
288
+ const merged_context = { ...existing_context, ...new_context };
289
+ // Save merged context
290
+ conversation.context = JSON.stringify(merged_context);
291
+ await conversation.save();
292
+ this.logger.info('✅ Saved conversation context to database', {
293
+ conversation_id,
294
+ context_keys: Object.keys(merged_context)
295
+ });
296
+ }
297
+ catch (error) {
298
+ this.logger.error('❌ Failed to save conversation context', {
299
+ error: error instanceof Error ? error.message : String(error),
300
+ conversation_id
301
+ });
302
+ // Don't throw - context saving is not critical
303
+ }
304
+ }
305
+ }
306
+ exports.StepCompleteHandler = StepCompleteHandler;
307
+ //# sourceMappingURL=step-complete-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-complete-handler.js","sourceRoot":"","sources":["../../../src/ai/response_handlers/step-complete-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @fileoverview Unknown Handler
3
+ *
4
+ * Handles unknown output types as a fallback.
5
+ */
6
+ import { BaseHandler, HandlerContext, HandlerResult } from "./base-handler";
7
+ import { ChatMessage } from "../../lib/schemas";
8
+ export declare class UnknownHandler extends BaseHandler {
9
+ can_handle(message_type: string | null, output_type: string, input: ChatMessage): boolean;
10
+ handle(input: ChatMessage, context: HandlerContext): Promise<HandlerResult>;
11
+ }
12
+ //# sourceMappingURL=unknown-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unknown-handler.d.ts","sourceRoot":"","sources":["../../../src/ai/response_handlers/unknown-handler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,qBAAa,cAAe,SAAQ,WAAW;IAC9C,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO;IAKnF,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CAYjF"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Unknown Handler
4
+ *
5
+ * Handles unknown output types as a fallback.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.UnknownHandler = void 0;
9
+ const base_handler_1 = require("./base-handler");
10
+ class UnknownHandler extends base_handler_1.BaseHandler {
11
+ can_handle(message_type, output_type, input) {
12
+ // This is the fallback handler - always returns true
13
+ return true;
14
+ }
15
+ async handle(input, context) {
16
+ this.logger.warn(`⚠️ Unknown output type: ${input.content}`);
17
+ return {
18
+ success: true,
19
+ result: [input],
20
+ should_continue: false,
21
+ context: {},
22
+ message_type: null
23
+ };
24
+ }
25
+ }
26
+ exports.UnknownHandler = UnknownHandler;
27
+ //# sourceMappingURL=unknown-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unknown-handler.js","sourceRoot":"","sources":["../../../src/ai/response_handlers/unknown-handler.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAGH,iDAA4E;AAG5E,MAAa,cAAe,SAAQ,0BAAW;IAC9C,UAAU,CAAC,YAA2B,EAAE,WAAmB,EAAE,KAAkB;QAC9E,qDAAqD;QACrD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAkB,EAAE,OAAuB;QAEvD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAE7D,OAAO;YACN,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,CAAC,KAAK,CAAC;YACf,eAAe,EAAE,KAAK;YACtB,OAAO,EAAE,EAAE;YACX,YAAY,EAAE,IAAI;SAClB,CAAC;IACH,CAAC;CACD;AAlBD,wCAkBC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @fileoverview User Input Handler
3
+ *
4
+ * Handles user input messages. Formats and prepares user messages for routing to agents.
5
+ * This handler processes raw user input and determines the appropriate routing.
6
+ */
7
+ import type { GenerateContentResponse } from "@google/genai";
8
+ import { BaseHandler, HandlerContext, HandlerResult } from "./base-handler";
9
+ import { ChatMessage } from "../../lib/schemas";
10
+ export declare class UserInputHandler extends BaseHandler {
11
+ can_handle(message_type: string | null, output_type: string, result: GenerateContentResponse | ChatMessage): boolean;
12
+ /**
13
+ * Handle the user input message
14
+ * @param input - The ChatMessage object
15
+ * @param context - The HandlerContext object
16
+ * @returns The HandlerResult object
17
+ */
18
+ handle(input: ChatMessage, context: HandlerContext): Promise<HandlerResult>;
19
+ }
20
+ //# sourceMappingURL=user-input-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-input-handler.d.ts","sourceRoot":"","sources":["../../../src/ai/response_handlers/user-input-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAOhD,qBAAa,gBAAiB,SAAQ,WAAW;IAC7C,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,uBAAuB,GAAG,WAAW,GAAG,OAAO;IASpH;;;;;OAKG;IACG,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CA0CpF"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview User Input Handler
4
+ *
5
+ * Handles user input messages. Formats and prepares user messages for routing to agents.
6
+ * This handler processes raw user input and determines the appropriate routing.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.UserInputHandler = void 0;
10
+ const base_handler_1 = require("./base-handler");
11
+ const models_1 = require("../../models");
12
+ const domain_service_1 = require("../../services/domain.service");
13
+ const logger_1 = require("../../lib/utils/logger");
14
+ const logger = (0, logger_1.create_default_logger)("user-input-handler");
15
+ class UserInputHandler extends base_handler_1.BaseHandler {
16
+ can_handle(message_type, output_type, result) {
17
+ if ('role' in result && result.role === 'user') {
18
+ return true;
19
+ }
20
+ return false; // Not used for agent responses - called explicitly for user input
21
+ }
22
+ /**
23
+ * Handle the user input message
24
+ * @param input - The ChatMessage object
25
+ * @param context - The HandlerContext object
26
+ * @returns The HandlerResult object
27
+ */
28
+ async handle(input, context) {
29
+ this.logger.info('User input handler processing user message');
30
+ const conversation = await models_1.ConversationModel.findByPk(context.conversation_id);
31
+ if (!conversation) {
32
+ this.logger.error(`⚠️ Conversation not found: ${context.conversation_id}`);
33
+ throw new Error(`Conversation not found: ${context.conversation_id}`);
34
+ }
35
+ // Parse context from database (it's stored as JSON string)
36
+ let db_context = {};
37
+ if (conversation.context) {
38
+ try {
39
+ db_context = JSON.parse(conversation.context);
40
+ }
41
+ catch (e) {
42
+ this.logger.warn('⚠️ Failed to parse conversation context from database', { error: e });
43
+ db_context = {};
44
+ }
45
+ }
46
+ context = { ...context, ...db_context };
47
+ // Fetch available domains and add to context for orchestrator
48
+ // The orchestrator needs this to identify the domain of the request
49
+ const domain_service = (0, domain_service_1.get_domain_service)();
50
+ const available_domains = await domain_service.get_unique_domains();
51
+ context = { ...context, available_domains: available_domains };
52
+ logger.info('Fetched available domains for orchestrator', {
53
+ domains_count: available_domains.length,
54
+ domains: available_domains
55
+ });
56
+ // Always route to orchestrator - let it decide what to do based on context
57
+ // The orchestrator will check for active plans and route accordingly
58
+ // UserInputHandler should not make routing decisions - it just passes user input through
59
+ return {
60
+ success: true,
61
+ result: [input],
62
+ should_continue: true,
63
+ context: context,
64
+ message_type: null // null routes to OrchestratorAgent
65
+ };
66
+ }
67
+ }
68
+ exports.UserInputHandler = UserInputHandler;
69
+ //# sourceMappingURL=user-input-handler.js.map