@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,268 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Response Handler Registry
4
+ *
5
+ * Registry for managing and selecting appropriate handlers.
6
+ * Routes by message_type (from AgentResponse) first, then falls back to output_type (from OpenAI Response).
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.HandlerRegistry = void 0;
10
+ const direct_response_handler_1 = require("./direct-response-handler");
11
+ const plan_ready_handler_1 = require("./plan-ready-handler");
12
+ const request_plan_handler_1 = require("./request-plan-handler");
13
+ const message_handler_1 = require("./message-handler");
14
+ const step_complete_handler_1 = require("./step-complete-handler"); // Keep this one
15
+ const error_handler_1 = require("./error-handler"); // Keep this one
16
+ const unknown_handler_1 = require("./unknown-handler");
17
+ const user_input_handler_1 = require("./user-input-handler");
18
+ class HandlerRegistry {
19
+ constructor(logger, streaming_utils) {
20
+ this.logger = logger;
21
+ this.streaming_utils = streaming_utils;
22
+ this.message_type_handlers = [];
23
+ this.output_type_handlers = [];
24
+ // Create user input handler instance
25
+ this.user_input_handler = new user_input_handler_1.UserInputHandler(this.streaming_utils);
26
+ // Register message_type handlers (from AgentResponse in output_text)
27
+ // These are checked first when output_text exists
28
+ this.message_type_handlers.push(new error_handler_1.ErrorHandler(this.streaming_utils)); // Error handler should be checked early
29
+ this.message_type_handlers.push(new direct_response_handler_1.DirectResponseHandler(this.streaming_utils));
30
+ this.message_type_handlers.push(new request_plan_handler_1.RequestPlanHandler(this.streaming_utils));
31
+ this.message_type_handlers.push(new plan_ready_handler_1.PlanReadyHandler(this.streaming_utils));
32
+ this.message_type_handlers.push(new step_complete_handler_1.StepCompleteHandler(this.streaming_utils));
33
+ // Unknown handler should be last as fallback
34
+ this.message_type_handlers.push(new unknown_handler_1.UnknownHandler(this.streaming_utils));
35
+ }
36
+ // Note: output_type_handlers are not currently used due to the DynamicAgent's strategy
37
+ // of parsing AgentResponse from the text property. If Gemini's native tool outputs
38
+ // were to be used, these would need to be re-introduced.
39
+ /**
40
+ * Get handler for preparing input based on message_type
41
+ * This is used to format input before calling an agent
42
+ */
43
+ get_handler_for_prepare_input(message_type) {
44
+ // Map message_type to the handler that will process responses from that agent
45
+ // The handler knows how to prepare input for the agent it routes to
46
+ if (message_type === null) {
47
+ // Route to orchestrator - use DirectResponseHandler
48
+ return this.message_type_handlers.find(h => h instanceof direct_response_handler_1.DirectResponseHandler) || null;
49
+ }
50
+ switch (message_type) {
51
+ case "REQUEST_PLAN":
52
+ return this.message_type_handlers.find(h => h instanceof request_plan_handler_1.RequestPlanHandler) || null;
53
+ case "PLAN_READY":
54
+ case "STEP_READY":
55
+ case "STEP_COMPLETE":
56
+ case "TOOL_CALL_READY":
57
+ // For executor, use PlanReadyHandler or ToolCallReadyHandler
58
+ return this.message_type_handlers.find(h => h instanceof plan_ready_handler_1.PlanReadyHandler) || null;
59
+ case "KNOWLEDGE_ANSWER":
60
+ // For knowledge agent, use MessageHandler (handles KNOWLEDGE_ANSWER)
61
+ return this.output_type_handlers.find(h => h instanceof message_handler_1.MessageHandler) || null;
62
+ default:
63
+ return null;
64
+ }
65
+ }
66
+ /**
67
+ * Extract message_type from ChatMessage content
68
+ * Handles both string content and object content
69
+ */
70
+ extract_message_type_from_content(content) {
71
+ if (!content) {
72
+ this.logger.debug('❌ No content in message');
73
+ return null;
74
+ }
75
+ // If content is an object, check for message_type directly
76
+ if (typeof content === 'object' && content !== null) {
77
+ if (content.message_type) {
78
+ this.logger.info(`✅ Found message_type in content object: ${content.message_type}`);
79
+ return content.message_type;
80
+ }
81
+ // If it's an AgentResponse object, return the message_type
82
+ if (content.type === 'agent_response' && content.message_type) {
83
+ return content.message_type;
84
+ }
85
+ }
86
+ // If content is a string, try to parse it
87
+ const content_str = typeof content === 'string' ? content : JSON.stringify(content);
88
+ this.logger.debug(`🔍 Attempting to extract message_type from content (length: ${content_str.length})`);
89
+ // First, try to parse as pure JSON
90
+ try {
91
+ const agent_response = JSON.parse(content_str);
92
+ this.logger.info(`✅ Parsed as pure JSON, message_type: ${agent_response.message_type}`);
93
+ return agent_response.message_type || null;
94
+ }
95
+ catch (e) {
96
+ this.logger.debug(`⚠️ Pure JSON parse failed, trying to extract from text: ${e instanceof Error ? e.message : String(e)}`);
97
+ // If pure JSON parsing fails, try to extract JSON from text
98
+ // The response might be natural text with JSON embedded in it
99
+ try {
100
+ const extracted_json = this.extract_json_from_text(content_str);
101
+ if (extracted_json) {
102
+ this.logger.info(`✂️ Extracted JSON from text (${extracted_json.length} chars)`);
103
+ const agent_response = JSON.parse(extracted_json);
104
+ this.logger.info(`✅ Parsed extracted JSON, message_type: ${agent_response.message_type}`);
105
+ return agent_response.message_type || null;
106
+ }
107
+ else {
108
+ this.logger.warn(`❌ extract_json_from_text returned null`);
109
+ }
110
+ }
111
+ catch (extract_error) {
112
+ this.logger.warn('❌ Could not extract JSON from text for message_type', {
113
+ error: extract_error instanceof Error ? extract_error.message : String(extract_error)
114
+ });
115
+ }
116
+ this.logger.warn('❌ Could not parse content for message_type', { error: e instanceof Error ? e.message : String(e) });
117
+ return null;
118
+ }
119
+ }
120
+ /**
121
+ * Extract output_type from ChatMessage content
122
+ * For model messages, we infer output_type from the content structure
123
+ */
124
+ extract_output_type_from_content(content) {
125
+ // If content is an object, check for output_type or infer from structure
126
+ if (typeof content === 'object' && content !== null) {
127
+ // Check if it has an output array structure
128
+ if (content.output && Array.isArray(content.output) && content.output[0]?.type) {
129
+ return content.output[0].type;
130
+ }
131
+ // Check for function_call or tool_call indicators
132
+ if (content.function_call || content.tool_calls) {
133
+ return 'function_call';
134
+ }
135
+ if (content.error) {
136
+ return 'error';
137
+ }
138
+ }
139
+ // Default to 'message' for text content
140
+ return 'message';
141
+ }
142
+ /**
143
+ * Extract JSON object from text that may contain natural language or markdown code blocks
144
+ * Looks for JSON objects in the text (starting with { and ending with })
145
+ * PUBLIC so handlers can use this for parsing raw output_text
146
+ */
147
+ extract_json_from_text(text) {
148
+ // Remove leading/trailing whitespace
149
+ let trimmed = text.trim();
150
+ this.logger.debug(`🔍 Extracting JSON from text (length: ${trimmed.length}, starts with: ${trimmed.substring(0, 50)})`);
151
+ // CRITICAL FIX: Strip markdown code blocks (```json...``` or ```...```)
152
+ // Gemini sometimes wraps JSON in markdown despite structured output being enabled
153
+ const markdown_json_match = trimmed.match(/```(?:json)?\s*\n?([\s\S]*?)\n?```/);
154
+ if (markdown_json_match) {
155
+ this.logger.info(`✂️ Found markdown wrapper, stripping it (captured ${markdown_json_match[1].length} chars)`);
156
+ trimmed = markdown_json_match[1].trim();
157
+ this.logger.debug(`✂️ After stripping: ${trimmed.substring(0, 100)}...`);
158
+ }
159
+ else {
160
+ this.logger.debug(`❌ No markdown wrapper detected in text`);
161
+ }
162
+ // FIX: Gemini sometimes outputs invalid escape sequences which are NOT valid JSON
163
+ // JSON only allows: \", \\, \/, \b, \f, \n, \r, \t, \uXXXX
164
+ // Fix common invalid escape sequences:
165
+ // 1. \' (escaped single quote) - replace with '
166
+ // 2. \x (hex escape without proper format) - remove backslash
167
+ // 3. \z, \a, etc. (invalid single char escapes) - remove backslash
168
+ // 4. \u without 4 hex digits - fix or remove
169
+ const original_length = trimmed.length;
170
+ // Fix \' (escaped single quote) - most common issue
171
+ if (trimmed.includes("\\'")) {
172
+ trimmed = trimmed.replace(/\\'/g, "'");
173
+ }
174
+ // Fix \u sequences that don't have 4 hex digits (invalid \u escapes)
175
+ // Replace \u followed by less than 4 hex digits with just the characters
176
+ trimmed = trimmed.replace(/\\u(?![0-9a-fA-F]{4})/g, 'u');
177
+ // Fix invalid escape sequences like \x, \z, \a, etc. (but keep valid ones)
178
+ // Match \ followed by a character that's not a valid escape sequence
179
+ // Valid: ", \, /, b, f, n, r, t, u (for \uXXXX)
180
+ trimmed = trimmed.replace(/\\(?!["\\/bfnrtu])/g, '');
181
+ if (original_length !== trimmed.length) {
182
+ this.logger.info(`🔧 Fixed invalid escape sequences (${original_length - trimmed.length} chars removed)`);
183
+ }
184
+ // Try to find JSON object in the text
185
+ // Look for the first occurrence of { ... } which is likely the JSON response
186
+ const first_brace_open = trimmed.indexOf('{');
187
+ const last_brace_close = trimmed.lastIndexOf('}');
188
+ this.logger.debug(`🔍 JSON extraction: first_brace_open=${first_brace_open}, last_brace_close=${last_brace_close}`);
189
+ if (first_brace_open !== -1 && last_brace_close !== -1 && last_brace_close > first_brace_open) {
190
+ const json_candidate = trimmed.substring(first_brace_open, last_brace_close + 1);
191
+ this.logger.debug(`🔍 JSON candidate (${json_candidate.length} chars): ${json_candidate.substring(0, 100)}...`);
192
+ try {
193
+ // Validate it's valid JSON
194
+ JSON.parse(json_candidate);
195
+ this.logger.info(`✅ Successfully parsed JSON candidate`);
196
+ return json_candidate;
197
+ }
198
+ catch (e) {
199
+ this.logger.warn(`❌ JSON parse failed: ${e instanceof Error ? e.message : String(e)}`);
200
+ this.logger.debug(`Failed JSON: ${json_candidate.substring(0, 200)}`);
201
+ }
202
+ }
203
+ else {
204
+ this.logger.warn(`❌ Could not find valid brace positions in trimmed text`);
205
+ }
206
+ return null;
207
+ }
208
+ /**
209
+ * Find and return the appropriate handler for the given ChatMessage
210
+ * Uses heuristics-based classification:
211
+ * - If message.role == 'user', returns UserInputHandler
212
+ * - Otherwise, parses content to extract message_type/output_type and finds appropriate handler
213
+ */
214
+ find_handler(message) {
215
+ // Check if this is a user message
216
+ if (message.role === 'user') {
217
+ this.logger.info('📋 Selected handler: UserInputHandler for user message');
218
+ return this.user_input_handler;
219
+ }
220
+ // Extract content from ChatMessage
221
+ const content = message.content;
222
+ if (!content) {
223
+ this.logger.warn('⚠️ No content in message, using UnknownHandler');
224
+ return this.output_type_handlers[this.output_type_handlers.length - 1];
225
+ }
226
+ // Extract message_type and output_type from content
227
+ const message_type = this.extract_message_type_from_content(content);
228
+ const output_type = this.extract_output_type_from_content(content);
229
+ this.logger.info('Routing response:', { message_type, output_type, role: message.role });
230
+ // Create a minimal AIResponse-like structure for handlers that need it
231
+ // Convert content to string if it's an object
232
+ const content_str = typeof content === 'string' ? content : JSON.stringify(content);
233
+ // First, try message_type handlers (even if message_type is null, handlers can check structure)
234
+ // This allows handlers like PlanReadyHandler to check response structure even if message_type extraction failed
235
+ for (const handler of this.message_type_handlers) {
236
+ if (handler.can_handle(message_type, output_type, message)) {
237
+ this.logger.info(`📋 Selected handler: ${handler.constructor.name} for message_type: ${message_type || 'null (structure match)'}`);
238
+ return handler;
239
+ }
240
+ }
241
+ // Fallback to output_type handlers
242
+ for (const handler of this.output_type_handlers) {
243
+ if (handler.can_handle(message_type, output_type, message)) {
244
+ this.logger.info(`📋 Selected handler: ${handler.constructor.name} for output_type: ${output_type}`);
245
+ return handler;
246
+ }
247
+ }
248
+ // Fallback to unknown handler (should never happen, but just in case)
249
+ return this.output_type_handlers[this.output_type_handlers.length - 1];
250
+ }
251
+ /**
252
+ * Handle the response using the appropriate handler
253
+ */
254
+ async handle_response(message, context) {
255
+ const handler = this.find_handler(message);
256
+ if (!handler) {
257
+ this.logger.error(`❌ No handler found for message`);
258
+ return {
259
+ success: false,
260
+ result: [],
261
+ should_continue: false
262
+ };
263
+ }
264
+ return await handler.handle(message, context);
265
+ }
266
+ }
267
+ exports.HandlerRegistry = HandlerRegistry;
268
+ //# sourceMappingURL=handler-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler-registry.js","sourceRoot":"","sources":["../../../src/ai/response_handlers/handler-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @fileoverview Response Handlers Exports
3
+ *
4
+ * Central export point for all response handlers.
5
+ */
6
+ export { BaseHandler as BaseResponseHandler, HandlerContext, HandlerResult } from "./base-handler";
7
+ export { DirectResponseHandler } from "./direct-response-handler";
8
+ export { PlanReadyHandler } from "./plan-ready-handler";
9
+ export { RequestPlanHandler } from "./request-plan-handler";
10
+ export { StepCompleteHandler } from "./step-complete-handler";
11
+ export { MessageHandler } from "./message-handler";
12
+ export { ErrorHandler } from "./error-handler";
13
+ export { UnknownHandler } from "./unknown-handler";
14
+ export { UserInputHandler } from "./user-input-handler";
15
+ export { HandlerRegistry as ResponseHandlerRegistry } from "./handler-registry";
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ai/response_handlers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,IAAI,mBAAmB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACnG,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,eAAe,IAAI,uBAAuB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Response Handlers Exports
4
+ *
5
+ * Central export point for all response handlers.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.ResponseHandlerRegistry = exports.UserInputHandler = exports.UnknownHandler = exports.ErrorHandler = exports.MessageHandler = exports.StepCompleteHandler = exports.RequestPlanHandler = exports.PlanReadyHandler = exports.DirectResponseHandler = exports.BaseResponseHandler = void 0;
9
+ var base_handler_1 = require("./base-handler");
10
+ Object.defineProperty(exports, "BaseResponseHandler", { enumerable: true, get: function () { return base_handler_1.BaseHandler; } });
11
+ var direct_response_handler_1 = require("./direct-response-handler");
12
+ Object.defineProperty(exports, "DirectResponseHandler", { enumerable: true, get: function () { return direct_response_handler_1.DirectResponseHandler; } });
13
+ var plan_ready_handler_1 = require("./plan-ready-handler");
14
+ Object.defineProperty(exports, "PlanReadyHandler", { enumerable: true, get: function () { return plan_ready_handler_1.PlanReadyHandler; } });
15
+ var request_plan_handler_1 = require("./request-plan-handler");
16
+ Object.defineProperty(exports, "RequestPlanHandler", { enumerable: true, get: function () { return request_plan_handler_1.RequestPlanHandler; } });
17
+ var step_complete_handler_1 = require("./step-complete-handler");
18
+ Object.defineProperty(exports, "StepCompleteHandler", { enumerable: true, get: function () { return step_complete_handler_1.StepCompleteHandler; } });
19
+ var message_handler_1 = require("./message-handler");
20
+ Object.defineProperty(exports, "MessageHandler", { enumerable: true, get: function () { return message_handler_1.MessageHandler; } });
21
+ var error_handler_1 = require("./error-handler");
22
+ Object.defineProperty(exports, "ErrorHandler", { enumerable: true, get: function () { return error_handler_1.ErrorHandler; } });
23
+ var unknown_handler_1 = require("./unknown-handler");
24
+ Object.defineProperty(exports, "UnknownHandler", { enumerable: true, get: function () { return unknown_handler_1.UnknownHandler; } });
25
+ var user_input_handler_1 = require("./user-input-handler");
26
+ Object.defineProperty(exports, "UserInputHandler", { enumerable: true, get: function () { return user_input_handler_1.UserInputHandler; } });
27
+ var handler_registry_1 = require("./handler-registry");
28
+ Object.defineProperty(exports, "ResponseHandlerRegistry", { enumerable: true, get: function () { return handler_registry_1.HandlerRegistry; } });
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ai/response_handlers/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,+CAAmG;AAA1F,mHAAA,WAAW,OAAuB;AAC3C,qEAAkE;AAAzD,gIAAA,qBAAqB,OAAA;AAC9B,2DAAwD;AAA/C,sHAAA,gBAAgB,OAAA;AACzB,+DAA4D;AAAnD,0HAAA,kBAAkB,OAAA;AAC3B,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA;AAC5B,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AACrB,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,2DAAwD;AAA/C,sHAAA,gBAAgB,OAAA;AACzB,uDAAgF;AAAvE,2HAAA,eAAe,OAA2B"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @fileoverview Message Handler
3
+ *
4
+ * Handles message output types by parsing the output_text and reading message_type
5
+ * to decide whether to continue execution or break.
6
+ */
7
+ import { BaseHandler, HandlerContext, HandlerResult } from "./base-handler";
8
+ import { ChatMessage } from "../../lib/schemas";
9
+ export declare class MessageHandler 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
+ * Prepare input for KnowledgeAgent
14
+ * Formats the message as a question for the knowledge base
15
+ */
16
+ prepare_input(last_message: ChatMessage): ChatMessage[];
17
+ /**
18
+ * Extract JSON object from text that may contain natural language
19
+ * Looks for JSON objects in the text (starting with { and ending with })
20
+ */
21
+ private extract_json_from_text;
22
+ }
23
+ //# sourceMappingURL=message-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-handler.d.ts","sourceRoot":"","sources":["../../../src/ai/response_handlers/message-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAiB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAc/D,qBAAa,cAAe,SAAQ,WAAW;IAE3C,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO;IAYnF,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IA0HjF;;;OAGG;IACH,aAAa,CAAC,YAAY,EAAE,WAAW,GAAG,WAAW,EAAE;IAyBvD;;;OAGG;IACH,OAAO,CAAC,sBAAsB;CAsBjC"}
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Message Handler
4
+ *
5
+ * Handles message output types by parsing the output_text and reading message_type
6
+ * to decide whether to continue execution or break.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.MessageHandler = void 0;
10
+ const base_handler_1 = require("./base-handler");
11
+ /**
12
+ * Terminal response types that should break the execution loop
13
+ */
14
+ const TERMINAL_RESPONSE_TYPES = [
15
+ "DIRECT_RESPONSE",
16
+ "NO_DOMAIN",
17
+ "REQUEST_INPUT",
18
+ "EXECUTION_REPORT",
19
+ "ERROR",
20
+ "KNOWLEDGE_ANSWER"
21
+ ];
22
+ class MessageHandler extends base_handler_1.BaseHandler {
23
+ can_handle(message_type, output_type, input) {
24
+ // Handle Gemini message output_type (fallback when no message_type handlers match)
25
+ if (input.role !== 'model') {
26
+ return false;
27
+ }
28
+ // Check if content is an object with type property
29
+ if (typeof input.content === 'object' && input.content !== null && 'type' in input.content) {
30
+ return input.content.type === 'message';
31
+ }
32
+ return false;
33
+ }
34
+ async handle(input, context) {
35
+ this.logger.info('Message handler received result:', { result: input.content });
36
+ const result = input.content;
37
+ if (!result) {
38
+ this.logger.warn('⚠️ No AgentResponse in response');
39
+ return {
40
+ success: false,
41
+ result: [input],
42
+ should_continue: false
43
+ };
44
+ }
45
+ // Parse AgentResponse to read message_type
46
+ // Use base handler extraction method to handle markdown, escape sequences, etc.
47
+ // Note: result is AgentResponse, not GenerateContentResponse, so we need to extract from content
48
+ const content_str = typeof result === 'string' ? result : result.output_text || result.text || JSON.stringify(result);
49
+ const extracted = this.extract_agent_response(content_str);
50
+ if (!extracted) {
51
+ this.logger.error('❌ Failed to extract AgentResponse', {
52
+ content_preview: content_str.substring(0, 200)
53
+ });
54
+ return {
55
+ success: false,
56
+ result: [],
57
+ should_continue: false
58
+ };
59
+ }
60
+ const agent_response = extracted;
61
+ // Read message_type from content to decide next step
62
+ const message_type = agent_response.message_type;
63
+ this.logger.info(`📋 Message type: ${message_type}`);
64
+ // Extract domain from orchestrator response (for domain identification)
65
+ // Domain can be at top level or in content
66
+ const extracted_domain = agent_response?.domain || agent_response?.content?.domain || null;
67
+ // Get available_domains from context (passed by UserInputHandler)
68
+ const available_domains = context?.available_domains || [];
69
+ // Log response structure for debugging
70
+ this.logger.debug('🔍 Agent response structure', {
71
+ agent_kind: agent_response?.agent_kind,
72
+ message_type: message_type,
73
+ has_domain_field: 'domain' in agent_response,
74
+ domain_value: agent_response?.domain,
75
+ has_content_domain: agent_response?.content && 'domain' in agent_response.content,
76
+ content_domain_value: agent_response?.content?.domain,
77
+ response_keys: Object.keys(agent_response),
78
+ available_domains: available_domains
79
+ });
80
+ // Log domain identification for orchestrator responses (excluding REQUEST_PLAN which is handled by RequestPlanHandler)
81
+ const is_orchestrator_response = agent_response?.agent_kind === 'orchestrator' &&
82
+ message_type !== 'REQUEST_PLAN'; // REQUEST_PLAN is handled by RequestPlanHandler
83
+ if (is_orchestrator_response) {
84
+ if (extracted_domain) {
85
+ this.logger.info('🎯 Orchestrator identified domain', {
86
+ domain: extracted_domain,
87
+ message_type: message_type,
88
+ available_domains: available_domains,
89
+ agent_kind: agent_response?.agent_kind
90
+ });
91
+ }
92
+ else {
93
+ this.logger.info('⚠️ Orchestrator did not identify domain', {
94
+ message_type: message_type,
95
+ available_domains: available_domains,
96
+ agent_kind: agent_response?.agent_kind
97
+ });
98
+ }
99
+ }
100
+ // Note: REQUEST_PLAN is handled by RequestPlanHandler, not MessageHandler
101
+ // This validation is kept for other message types that might need domain validation in the future
102
+ // Handle NO_DOMAIN message type (already validated by orchestrator)
103
+ if (message_type === 'NO_DOMAIN') {
104
+ this.logger.info('⚠️ NO_DOMAIN response from orchestrator', {
105
+ available_domains: available_domains
106
+ });
107
+ }
108
+ // Append Gemini response to conversation history with role and parts
109
+ // In MessageHandler, result is already AgentResponse, so we create a ChatMessage from it
110
+ let updated_history = [];
111
+ updated_history.push({
112
+ role: 'model',
113
+ content: JSON.stringify(agent_response)
114
+ });
115
+ // Append context to conversation history
116
+ // Store domain in handler_context for later use (e.g., learning capture)
117
+ const handler_context = {
118
+ message_type: message_type,
119
+ agent_response: agent_response
120
+ };
121
+ // Store domain if identified
122
+ if (extracted_domain) {
123
+ handler_context.domain = extracted_domain;
124
+ this.logger.info('💾 Storing domain in handler context', { domain: extracted_domain });
125
+ }
126
+ updated_history = this.append_context_to_history(updated_history, handler_context);
127
+ // Determine if we should continue based on message_type
128
+ // Terminal types break the loop, others continue
129
+ const should_continue = !TERMINAL_RESPONSE_TYPES.includes(message_type);
130
+ this.logger.info(`🔄 Should continue: ${should_continue} (message_type: ${message_type})`);
131
+ return {
132
+ success: true,
133
+ result: updated_history,
134
+ should_continue: should_continue,
135
+ context: handler_context,
136
+ message_type: message_type // Return the message_type from the response
137
+ };
138
+ }
139
+ /**
140
+ * Prepare input for KnowledgeAgent
141
+ * Formats the message as a question for the knowledge base
142
+ */
143
+ prepare_input(last_message) {
144
+ if (!last_message) {
145
+ return [{
146
+ role: 'user',
147
+ content: 'Answer the following question using the knowledge base:'
148
+ }];
149
+ }
150
+ // Extract question from message
151
+ let question_text;
152
+ if (typeof last_message.content === 'string') {
153
+ question_text = last_message.content;
154
+ }
155
+ else if (last_message.content && typeof last_message.content === 'object') {
156
+ question_text = last_message.content.message || last_message.content.text || JSON.stringify(last_message.content);
157
+ }
158
+ else {
159
+ question_text = JSON.stringify(last_message);
160
+ }
161
+ // Format as knowledge base query
162
+ return [{
163
+ role: 'user',
164
+ content: `Answer the following question using the knowledge base: ${question_text}`
165
+ }];
166
+ }
167
+ /**
168
+ * Extract JSON object from text that may contain natural language
169
+ * Looks for JSON objects in the text (starting with { and ending with })
170
+ */
171
+ extract_json_from_text(text) {
172
+ // Remove leading/trailing whitespace
173
+ const trimmed = text.trim();
174
+ // Try to find JSON object in the text
175
+ // Look for the last occurrence of { ... } which is likely the JSON response
176
+ const last_brace_open = trimmed.lastIndexOf('{');
177
+ const last_brace_close = trimmed.lastIndexOf('}');
178
+ if (last_brace_open !== -1 && last_brace_close !== -1 && last_brace_close > last_brace_open) {
179
+ const json_candidate = trimmed.substring(last_brace_open, last_brace_close + 1);
180
+ try {
181
+ // Validate it's valid JSON
182
+ JSON.parse(json_candidate);
183
+ return json_candidate;
184
+ }
185
+ catch (e) {
186
+ // Not valid JSON, continue
187
+ }
188
+ }
189
+ return null;
190
+ }
191
+ }
192
+ exports.MessageHandler = MessageHandler;
193
+ //# sourceMappingURL=message-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-handler.js","sourceRoot":"","sources":["../../../src/ai/response_handlers/message-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @fileoverview Plan Ready Handler
3
+ *
4
+ * Handles PLAN_READY message_type from AgentResponse.
5
+ * Saves plan to database and continues to executor.
6
+ */
7
+ import { BaseHandler, HandlerContext, HandlerResult } from "./base-handler";
8
+ import { ChatMessage } from "../../lib/schemas";
9
+ export declare class PlanReadyHandler extends BaseHandler {
10
+ can_handle(message_type: string | null, output_type: string, result: ChatMessage): boolean;
11
+ handle(input: ChatMessage, context: HandlerContext): Promise<HandlerResult>;
12
+ /**
13
+ * Create plan in database from planner response
14
+ * @param planner_response - The planner response containing plan data
15
+ * @param conversation_id - The conversation ID to associate the plan with
16
+ * @returns The plan_id of the created plan
17
+ */
18
+ private create_plan;
19
+ /**
20
+ * Append steps to an existing plan
21
+ * @param planner_response - The planner response containing new steps
22
+ * @param plan_id - The existing plan ID to append steps to
23
+ */
24
+ private append_steps_to_plan;
25
+ }
26
+ //# sourceMappingURL=plan-ready-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-ready-handler.d.ts","sourceRoot":"","sources":["../../../src/ai/response_handlers/plan-ready-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAkC,WAAW,EAAiB,MAAM,mBAAmB,CAAC;AAI/F,qBAAa,gBAAiB,SAAQ,WAAW;IAC7C,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO;IAUpF,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAgSjF;;;;;OAKG;YACW,WAAW;IA+DzB;;;;OAIG;YACW,oBAAoB;CA8DrC"}