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