@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,536 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Execution Learner - Reinforcement Learning for ExecutorAgent
|
|
4
|
+
*
|
|
5
|
+
* Captures successful execution patterns and updates knowledge base automatically.
|
|
6
|
+
* Learns from:
|
|
7
|
+
* - Successful execution patterns
|
|
8
|
+
* - Working parameters and selectors
|
|
9
|
+
* - Execution performance characteristics
|
|
10
|
+
* - Error recovery strategies
|
|
11
|
+
*
|
|
12
|
+
* Generic execution learning - no domain-specific knowledge.
|
|
13
|
+
*
|
|
14
|
+
* @author MeasureOne
|
|
15
|
+
* @version 1.0.0
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.ExecutionLearner = void 0;
|
|
19
|
+
exports.get_execution_learner = get_execution_learner;
|
|
20
|
+
const logger_1 = require("../../lib/utils/logger");
|
|
21
|
+
const mcp_utils_1 = require("../../lib/utils/mcp-utils");
|
|
22
|
+
const embedding_service_1 = require("../../services/embedding.service");
|
|
23
|
+
const models_1 = require("../../models");
|
|
24
|
+
const learning_agent_1 = require("../agents/learning.agent");
|
|
25
|
+
const genai_1 = require("@google/genai");
|
|
26
|
+
const config_1 = require("../../config");
|
|
27
|
+
const knowledge_service_1 = require("../../services/knowledge.service");
|
|
28
|
+
const models_2 = require("../../models");
|
|
29
|
+
const summarizer_agent_1 = require("../agents/summarizer.agent");
|
|
30
|
+
const sequelize_service_1 = require("../../lib/sequelize-service");
|
|
31
|
+
const source_hash_1 = require("../../lib/source-hash");
|
|
32
|
+
const stable_stringify_1 = require("../../lib/stable-stringify");
|
|
33
|
+
const logger = (0, logger_1.create_default_logger)('execution-learner');
|
|
34
|
+
const DEFAULT_LEARNING_CONFIG = {
|
|
35
|
+
enabled: true, // Enabled by default - automatically learns from all executions (success or failure)
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* ExecutionLearner - Captures patterns and updates knowledge base
|
|
39
|
+
*/
|
|
40
|
+
class ExecutionLearner {
|
|
41
|
+
constructor(config = {}) {
|
|
42
|
+
this.learned_patterns_kn_id = null; // Cache for learned-patterns knowledge ID
|
|
43
|
+
this.learning_agent = null;
|
|
44
|
+
this.summarizer_agent = null;
|
|
45
|
+
this.config = { ...DEFAULT_LEARNING_CONFIG, ...config };
|
|
46
|
+
this.embedding_service = new embedding_service_1.EmbeddingService();
|
|
47
|
+
this.knowledge_service = new knowledge_service_1.KnowledgeService();
|
|
48
|
+
// Initialize LearningAgent and SummarizerAgent with Gemini
|
|
49
|
+
this.initialize_learning_agent();
|
|
50
|
+
this.initialize_summarizer_agent();
|
|
51
|
+
logger.info('ExecutionLearner initialized', {
|
|
52
|
+
enabled: this.config.enabled,
|
|
53
|
+
has_learning_agent: this.learning_agent !== null,
|
|
54
|
+
has_summarizer_agent: this.summarizer_agent !== null
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
async capture_learnings(learnings, conversation_id, domain) {
|
|
58
|
+
if (!this.config.enabled) {
|
|
59
|
+
logger.debug('Learning disabled, skipping capture');
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
logger.info('📝 Captured learnings for learning', {
|
|
63
|
+
learnings: learnings,
|
|
64
|
+
conversation_id: conversation_id
|
|
65
|
+
});
|
|
66
|
+
// Get and summarize conversation and context if conversation_id is provided
|
|
67
|
+
let conversation_summary = "";
|
|
68
|
+
let context_summary = "";
|
|
69
|
+
let extracted_domain = domain;
|
|
70
|
+
if (conversation_id) {
|
|
71
|
+
try {
|
|
72
|
+
const conversation = await models_2.ConversationModel.findByPk(conversation_id);
|
|
73
|
+
if (conversation) {
|
|
74
|
+
// Get conversation messages
|
|
75
|
+
const messages = conversation.messages ? JSON.parse(conversation.messages) : [];
|
|
76
|
+
// Get conversation context
|
|
77
|
+
const context = conversation.context ? JSON.parse(conversation.context) : {};
|
|
78
|
+
// Extract domain from context if not provided
|
|
79
|
+
if (!extracted_domain && context.domain) {
|
|
80
|
+
extracted_domain = context.domain;
|
|
81
|
+
logger.info('Extracted domain from conversation context', { domain: extracted_domain });
|
|
82
|
+
}
|
|
83
|
+
// Summarize conversation and context using SummarizerAgent
|
|
84
|
+
if (this.summarizer_agent) {
|
|
85
|
+
// Summarize conversation messages
|
|
86
|
+
conversation_summary = await this.summarizer_agent.summarize_conversation(messages);
|
|
87
|
+
// Summarize context
|
|
88
|
+
context_summary = await this.summarizer_agent.summarize_context(context);
|
|
89
|
+
// Store summaries in database
|
|
90
|
+
conversation.conversation_summary = conversation_summary;
|
|
91
|
+
conversation.context_summary = context_summary;
|
|
92
|
+
await conversation.save();
|
|
93
|
+
logger.info('Generated and stored conversation summaries', {
|
|
94
|
+
conversation_summary_length: conversation_summary.length,
|
|
95
|
+
context_summary_length: context_summary.length
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
logger.warn('Failed to get/summarize conversation for learning', {
|
|
102
|
+
error: error instanceof Error ? error.message : String(error),
|
|
103
|
+
conversation_id
|
|
104
|
+
});
|
|
105
|
+
// Continue with learning capture even if summarization fails
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Step 1: Validate and sanitize all learnings upfront
|
|
109
|
+
const valid_learnings = [];
|
|
110
|
+
for (let learning of learnings) {
|
|
111
|
+
// Ensure learning is a string (not an object)
|
|
112
|
+
if (typeof learning !== 'string') {
|
|
113
|
+
if (learning && typeof learning === 'object') {
|
|
114
|
+
learning = JSON.stringify(learning);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
learning = String(learning);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
learning = learning.trim();
|
|
121
|
+
if (learning.length === 0 || learning === '[object Object]') {
|
|
122
|
+
logger.warn('Invalid learning provided (empty or object), skipping capture', {
|
|
123
|
+
learning_type: typeof learning,
|
|
124
|
+
learning_value: learning
|
|
125
|
+
});
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
valid_learnings.push(learning);
|
|
129
|
+
}
|
|
130
|
+
if (valid_learnings.length === 0) {
|
|
131
|
+
logger.info('No valid learnings to process');
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
// Validate domain before processing
|
|
135
|
+
if (!extracted_domain || extracted_domain.trim().length === 0) {
|
|
136
|
+
logger.warn('❌ Cannot process learnings: domain is required but not provided', {
|
|
137
|
+
learnings_count: valid_learnings.length
|
|
138
|
+
});
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
logger.info('Processing learnings in batch (summarized approach)', {
|
|
142
|
+
total_learnings: valid_learnings.length,
|
|
143
|
+
domain: extracted_domain
|
|
144
|
+
});
|
|
145
|
+
// Step 2: Summarize all learnings into a single text
|
|
146
|
+
let summarized_learnings;
|
|
147
|
+
if (this.summarizer_agent && valid_learnings.length > 1) {
|
|
148
|
+
try {
|
|
149
|
+
// Combine all learnings with separators
|
|
150
|
+
const combined_learnings_text = valid_learnings.join('\n\n---\n\n');
|
|
151
|
+
// Use SummarizerAgent to create a concise summary of all learnings
|
|
152
|
+
const prompt = `Summarize the following learnings from execution. Combine them into a single, coherent learning document that captures:
|
|
153
|
+
1. All key patterns, selectors, URLs, and approaches discovered
|
|
154
|
+
2. Success patterns and failure patterns
|
|
155
|
+
3. Important context and structural information
|
|
156
|
+
|
|
157
|
+
**CRITICAL SECURITY**:
|
|
158
|
+
- DO NOT include usernames, passwords, credentials, or any authentication tokens
|
|
159
|
+
- DO NOT include PII (names, emails, phone numbers, SSN, account numbers, addresses, DOB)
|
|
160
|
+
- DO NOT include actual user input values
|
|
161
|
+
- ONLY include patterns, selectors, URLs (sanitized), and structural information
|
|
162
|
+
|
|
163
|
+
Learnings:
|
|
164
|
+
${combined_learnings_text}
|
|
165
|
+
|
|
166
|
+
Generate a comprehensive summary that combines all learnings into one cohesive document.`;
|
|
167
|
+
const user_message = {
|
|
168
|
+
role: 'user',
|
|
169
|
+
content: prompt
|
|
170
|
+
};
|
|
171
|
+
const summary_response = await this.summarizer_agent.execute_with_retries([user_message], { streaming: false });
|
|
172
|
+
const summary_content = summary_response.text || '';
|
|
173
|
+
// Try to extract summary from JSON response
|
|
174
|
+
try {
|
|
175
|
+
const parsed = JSON.parse(summary_content);
|
|
176
|
+
summarized_learnings = parsed.summary || combined_learnings_text;
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
// If not JSON, use the text directly
|
|
180
|
+
summarized_learnings = summary_content.trim() || combined_learnings_text;
|
|
181
|
+
}
|
|
182
|
+
logger.info('✅ Summarized all learnings into single text', {
|
|
183
|
+
original_count: valid_learnings.length,
|
|
184
|
+
summarized_length: summarized_learnings.length
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
catch (error) {
|
|
188
|
+
logger.warn('Failed to summarize learnings, using combined text', {
|
|
189
|
+
error: error instanceof Error ? error.message : String(error)
|
|
190
|
+
});
|
|
191
|
+
// Fallback: combine all learnings with separators
|
|
192
|
+
summarized_learnings = valid_learnings.join('\n\n---\n\n');
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
// Single learning or no summarizer - use as is
|
|
197
|
+
summarized_learnings = valid_learnings.join('\n\n---\n\n');
|
|
198
|
+
}
|
|
199
|
+
// Step 3: Process learnings (search, match, create/update)
|
|
200
|
+
await this.process_learnings_with_search(summarized_learnings, extracted_domain, conversation_summary, context_summary, valid_learnings.length);
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Initialize LearningAgent with Gemini and MCP servers
|
|
204
|
+
*/
|
|
205
|
+
initialize_learning_agent() {
|
|
206
|
+
try {
|
|
207
|
+
const gemini_api_key = config_1.config_utils.get('GEMINI_API_KEY');
|
|
208
|
+
if (!gemini_api_key) {
|
|
209
|
+
logger.warn('GEMINI_API_KEY not configured, LearningAgent will not be available');
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
const gemini_client = new genai_1.GoogleGenAI({ apiKey: gemini_api_key });
|
|
213
|
+
// Get MCP clients for the learning agent to use search_embeddings tool
|
|
214
|
+
const mcp_manager = mcp_utils_1.MCPServerManager.get_instance();
|
|
215
|
+
const connected_servers = mcp_manager.get_connected_servers();
|
|
216
|
+
const mcp_clients = Array.from(connected_servers.values());
|
|
217
|
+
// Convert MCP Client[] to any[] for LearningAgent
|
|
218
|
+
const mcp_servers_array = Array.isArray(mcp_clients) ? mcp_clients : [];
|
|
219
|
+
this.learning_agent = new learning_agent_1.LearningAgent(gemini_client, mcp_servers_array, 'gemini-2.5-flash', this.embedding_service);
|
|
220
|
+
logger.info('LearningAgent initialized with Gemini and MCP servers', {
|
|
221
|
+
mcp_servers_count: mcp_clients.length
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
logger.warn('Failed to initialize LearningAgent, will use simple text conversion', {
|
|
226
|
+
error: error instanceof Error ? error.message : String(error)
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
initialize_summarizer_agent() {
|
|
231
|
+
try {
|
|
232
|
+
const gemini_api_key = config_1.config_utils.get('GEMINI_API_KEY');
|
|
233
|
+
if (!gemini_api_key) {
|
|
234
|
+
logger.warn('GEMINI_API_KEY not configured, SummarizerAgent will not be available');
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
const gemini_client = new genai_1.GoogleGenAI({ apiKey: gemini_api_key });
|
|
238
|
+
// SummarizerAgent doesn't need MCP servers
|
|
239
|
+
this.summarizer_agent = new summarizer_agent_1.SummarizerAgent(gemini_client, [], // No MCP servers needed for summarization
|
|
240
|
+
'gemini-2.5-flash');
|
|
241
|
+
logger.info('SummarizerAgent initialized with Gemini');
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
logger.warn('Failed to initialize SummarizerAgent, summaries will not be available', {
|
|
245
|
+
error: error instanceof Error ? error.message : String(error)
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Enable learning (call after initial testing phase)
|
|
251
|
+
*/
|
|
252
|
+
enable_learning() {
|
|
253
|
+
this.config.enabled = true;
|
|
254
|
+
logger.info('🎓 Learning ENABLED - Will capture successful patterns');
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Disable learning
|
|
258
|
+
*/
|
|
259
|
+
disable_learning() {
|
|
260
|
+
this.config.enabled = false;
|
|
261
|
+
logger.info('🛑 Learning DISABLED');
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Find similar LEARNING embeddings using cosine similarity
|
|
265
|
+
* Compares learning text embeddings (not execution context embeddings)
|
|
266
|
+
* Returns the best match if similarity > threshold
|
|
267
|
+
*/
|
|
268
|
+
async find_similar_learning_embeddings(query_embedding, model) {
|
|
269
|
+
// Use 0.8 threshold since we're now comparing actual learning text, not execution context
|
|
270
|
+
// Learning texts are more semantically consistent, so higher threshold is appropriate
|
|
271
|
+
const SIMILARITY_THRESHOLD = 0.8;
|
|
272
|
+
// Get all LEARNING embeddings with the same model
|
|
273
|
+
const all_learning_embeddings = await models_1.EmbeddingModel.findAll({
|
|
274
|
+
where: {
|
|
275
|
+
type: models_1.EmbeddingType.LEARNING,
|
|
276
|
+
model: model
|
|
277
|
+
},
|
|
278
|
+
attributes: ['id', 'knowledge_id', 'knowledge_revision_id', 'embedding'],
|
|
279
|
+
});
|
|
280
|
+
if (all_learning_embeddings.length === 0) {
|
|
281
|
+
return null;
|
|
282
|
+
}
|
|
283
|
+
let best_match = null;
|
|
284
|
+
// Calculate cosine similarity for all embeddings
|
|
285
|
+
const similarity_scores = [];
|
|
286
|
+
for (const embedding of all_learning_embeddings) {
|
|
287
|
+
try {
|
|
288
|
+
const embedding_vector = JSON.parse(embedding.embedding);
|
|
289
|
+
const similarity = this.embedding_service.cosine_similarity(query_embedding, embedding_vector);
|
|
290
|
+
// Track all similarities for logging
|
|
291
|
+
similarity_scores.push({
|
|
292
|
+
knowledge_id: embedding.knowledge_id,
|
|
293
|
+
revision_id: embedding.knowledge_revision_id,
|
|
294
|
+
similarity
|
|
295
|
+
});
|
|
296
|
+
if (similarity > SIMILARITY_THRESHOLD) {
|
|
297
|
+
if (!best_match || similarity > best_match.similarity) {
|
|
298
|
+
best_match = {
|
|
299
|
+
knowledge_id: embedding.knowledge_id,
|
|
300
|
+
revision_id: embedding.knowledge_revision_id,
|
|
301
|
+
similarity
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
catch (error) {
|
|
307
|
+
logger.warn('Failed to parse embedding JSON', {
|
|
308
|
+
embedding_id: embedding.id,
|
|
309
|
+
error: error instanceof Error ? error.message : String(error)
|
|
310
|
+
});
|
|
311
|
+
continue;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
// Log top similarity scores for debugging
|
|
315
|
+
if (similarity_scores.length > 0) {
|
|
316
|
+
const top_scores = similarity_scores
|
|
317
|
+
.sort((a, b) => b.similarity - a.similarity)
|
|
318
|
+
.slice(0, 5);
|
|
319
|
+
logger.info('📊 Top similarity scores', {
|
|
320
|
+
threshold: SIMILARITY_THRESHOLD,
|
|
321
|
+
top_scores: top_scores.map(s => ({
|
|
322
|
+
knowledge_id: s.knowledge_id,
|
|
323
|
+
revision_id: s.revision_id,
|
|
324
|
+
similarity: s.similarity.toFixed(4)
|
|
325
|
+
}))
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
if (best_match) {
|
|
329
|
+
logger.info('Found similar LEARNING embedding', {
|
|
330
|
+
knowledge_id: best_match.knowledge_id,
|
|
331
|
+
revision_id: best_match.revision_id,
|
|
332
|
+
similarity: best_match.similarity.toFixed(4)
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
return best_match;
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Combine all chunks from the same revision into a single text
|
|
339
|
+
*/
|
|
340
|
+
async combine_chunks_from_revision(knowledge_id, revision_id) {
|
|
341
|
+
if (!knowledge_id || !revision_id) {
|
|
342
|
+
logger.warn('No knowledge or revision id provided, skipping combine chunks from revision');
|
|
343
|
+
return '';
|
|
344
|
+
}
|
|
345
|
+
// Get all embeddings for this revision
|
|
346
|
+
const embeddings = await models_1.EmbeddingModel.findAll({
|
|
347
|
+
where: {
|
|
348
|
+
knowledge_id: knowledge_id,
|
|
349
|
+
knowledge_revision_id: revision_id,
|
|
350
|
+
type: models_1.EmbeddingType.LEARNING
|
|
351
|
+
},
|
|
352
|
+
attributes: ['text', 'chunk_index'],
|
|
353
|
+
order: [['chunk_index', 'ASC']]
|
|
354
|
+
});
|
|
355
|
+
// Combine all chunks in order
|
|
356
|
+
const combined_text = embeddings
|
|
357
|
+
.map(e => e.text)
|
|
358
|
+
.join('\n\n');
|
|
359
|
+
logger.info('Combined chunks from revision', {
|
|
360
|
+
knowledge_id,
|
|
361
|
+
revision_id,
|
|
362
|
+
chunk_count: embeddings.length,
|
|
363
|
+
combined_length: combined_text.length
|
|
364
|
+
});
|
|
365
|
+
return combined_text;
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Process learnings: search for similar existing learnings, then create new or update existing
|
|
369
|
+
*/
|
|
370
|
+
async process_learnings_with_search(summarized_learnings, domain, conversation_summary, context_summary, total_learnings_count) {
|
|
371
|
+
const FAISS_SIMILARITY_THRESHOLD = 0.75;
|
|
372
|
+
// Search for similar existing learnings
|
|
373
|
+
logger.info('Searching for similar existing learnings', {
|
|
374
|
+
domain,
|
|
375
|
+
summarized_length: summarized_learnings.length
|
|
376
|
+
});
|
|
377
|
+
const search_results = await this.embedding_service.search_embeddings(summarized_learnings, undefined, // knowledge_id - search all
|
|
378
|
+
5, // limit - get top 5 to see what's available
|
|
379
|
+
'text-embedding-004', // model
|
|
380
|
+
models_1.EmbeddingType.LEARNING, // type - only search LEARNING embeddings
|
|
381
|
+
domain // domain - filter by domain
|
|
382
|
+
);
|
|
383
|
+
// Log search results for debugging
|
|
384
|
+
logger.info('🔍 Search results from Faiss index', {
|
|
385
|
+
total_results: search_results.length,
|
|
386
|
+
results: search_results.map(r => ({
|
|
387
|
+
knowledge_id: r.knowledge_id,
|
|
388
|
+
revision_id: r.knowledge_revision_id,
|
|
389
|
+
score: r.score,
|
|
390
|
+
text_preview: r.text.substring(0, 100) + '...'
|
|
391
|
+
}))
|
|
392
|
+
});
|
|
393
|
+
// Process based on search results
|
|
394
|
+
const best_match = search_results[0];
|
|
395
|
+
const has_match = best_match && best_match.score >= FAISS_SIMILARITY_THRESHOLD;
|
|
396
|
+
if (!has_match) {
|
|
397
|
+
// No similar learning found - create new knowledge
|
|
398
|
+
logger.info(`❌ No similar learning found (score < ${FAISS_SIMILARITY_THRESHOLD}) - creating new knowledge`, {
|
|
399
|
+
search_results_count: search_results.length,
|
|
400
|
+
best_score: best_match?.score || 0,
|
|
401
|
+
threshold: FAISS_SIMILARITY_THRESHOLD
|
|
402
|
+
});
|
|
403
|
+
await this.create_new_learning_knowledge(summarized_learnings, domain);
|
|
404
|
+
logger.info('✅ Finished processing all learnings', {
|
|
405
|
+
total_learnings: total_learnings_count,
|
|
406
|
+
domain
|
|
407
|
+
});
|
|
408
|
+
return;
|
|
409
|
+
}
|
|
410
|
+
// Similar learning found - update existing knowledge
|
|
411
|
+
await this.update_existing_learning(best_match.knowledge_id, best_match.knowledge_revision_id, best_match.score, summarized_learnings, domain, conversation_summary, context_summary);
|
|
412
|
+
logger.info('✅ Finished processing all learnings', {
|
|
413
|
+
total_learnings: total_learnings_count,
|
|
414
|
+
domain
|
|
415
|
+
});
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Update existing learning with new learnings (creates new revision)
|
|
419
|
+
*/
|
|
420
|
+
async update_existing_learning(knowledge_id, revision_id, similarity_score, new_learnings, domain, conversation_summary, context_summary) {
|
|
421
|
+
logger.info('✅ Found similar existing learning', {
|
|
422
|
+
knowledge_id,
|
|
423
|
+
revision_id,
|
|
424
|
+
similarity_score
|
|
425
|
+
});
|
|
426
|
+
// Get existing learning text
|
|
427
|
+
const existing_learning_text = await this.combine_chunks_from_revision(knowledge_id, revision_id);
|
|
428
|
+
// Use LearningAgent to intelligently combine new learnings with existing learning
|
|
429
|
+
if (!this.learning_agent) {
|
|
430
|
+
logger.warn('LearningAgent not available, falling back to simple concatenation');
|
|
431
|
+
const combined_learning_text = existing_learning_text
|
|
432
|
+
? `${existing_learning_text}\n\n---\n\nNEW LEARNINGS:\n${new_learnings}`
|
|
433
|
+
: new_learnings;
|
|
434
|
+
await this.create_learning_revision(knowledge_id, combined_learning_text, revision_id, domain);
|
|
435
|
+
return;
|
|
436
|
+
}
|
|
437
|
+
logger.info('Using LearningAgent to extract/refine learning', {
|
|
438
|
+
knowledge_id,
|
|
439
|
+
revision_id,
|
|
440
|
+
domain
|
|
441
|
+
});
|
|
442
|
+
// Pass new learnings with conversation and context summaries
|
|
443
|
+
const execution_data = {
|
|
444
|
+
learning: new_learnings,
|
|
445
|
+
conversation_summary: conversation_summary || undefined,
|
|
446
|
+
context_summary: context_summary || undefined
|
|
447
|
+
};
|
|
448
|
+
const refined_learning = await this.learning_agent.extract_learning(execution_data, existing_learning_text);
|
|
449
|
+
if (!refined_learning) {
|
|
450
|
+
logger.info('LearningAgent determined no meaningful difference - skipping revision', {
|
|
451
|
+
knowledge_id,
|
|
452
|
+
revision_id
|
|
453
|
+
});
|
|
454
|
+
return;
|
|
455
|
+
}
|
|
456
|
+
await this.create_learning_revision(knowledge_id, refined_learning, revision_id, domain);
|
|
457
|
+
}
|
|
458
|
+
/**
|
|
459
|
+
* Create new revision of existing knowledge with new learning
|
|
460
|
+
*/
|
|
461
|
+
async create_learning_revision(knowledge_id, new_learning, previous_revision_id, domain) {
|
|
462
|
+
const sequelize = (0, sequelize_service_1.get_sequelize_service)();
|
|
463
|
+
const transaction = await sequelize.transaction();
|
|
464
|
+
try {
|
|
465
|
+
// Prepare source data
|
|
466
|
+
const source_data = {
|
|
467
|
+
source_type: 'VALUE',
|
|
468
|
+
mime_type: 'text/markdown',
|
|
469
|
+
content: new_learning
|
|
470
|
+
};
|
|
471
|
+
const stable_json = (0, stable_stringify_1.stable_stringify)(source_data);
|
|
472
|
+
const source_hash = (0, source_hash_1.compute_source_hash)(stable_json);
|
|
473
|
+
// Check if revision with same hash already exists (deduplication)
|
|
474
|
+
const existing_revision = await models_1.KnowledgeRevisionModel.findOne({
|
|
475
|
+
where: { knowledge_id: knowledge_id, source_hash },
|
|
476
|
+
transaction
|
|
477
|
+
});
|
|
478
|
+
if (existing_revision) {
|
|
479
|
+
logger.info('Revision with same hash already exists - skipping creation', {
|
|
480
|
+
knowledge_id,
|
|
481
|
+
existing_revision_id: existing_revision.id,
|
|
482
|
+
revision: existing_revision.revision,
|
|
483
|
+
source_hash
|
|
484
|
+
});
|
|
485
|
+
await transaction.rollback();
|
|
486
|
+
return;
|
|
487
|
+
}
|
|
488
|
+
// Create new revision using shared method
|
|
489
|
+
const knowledge_service = new knowledge_service_1.KnowledgeService();
|
|
490
|
+
const new_revision_id = await knowledge_service.create_revision_for_knowledge(knowledge_id, stable_json, source_hash, { previous_revision_id }, transaction);
|
|
491
|
+
await transaction.commit();
|
|
492
|
+
logger.info('Created new revision for learning', {
|
|
493
|
+
knowledge_id,
|
|
494
|
+
revision_id: new_revision_id
|
|
495
|
+
});
|
|
496
|
+
// Create embeddings for the new revision
|
|
497
|
+
await this.embedding_service.create_embeddings_for_document(knowledge_id, new_revision_id, new_learning, undefined, 'text-embedding-004', models_1.EmbeddingType.LEARNING, domain);
|
|
498
|
+
}
|
|
499
|
+
catch (error) {
|
|
500
|
+
await transaction.rollback();
|
|
501
|
+
throw error;
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
/**
|
|
505
|
+
* Create new knowledge with first revision for new learning
|
|
506
|
+
* Already searched for similar learnings, so create directly without searching again
|
|
507
|
+
*/
|
|
508
|
+
async create_new_learning_knowledge(learning_text, domain) {
|
|
509
|
+
// Create knowledge and revision directly (no need to search again - already done)
|
|
510
|
+
const knowledge_service = new knowledge_service_1.KnowledgeService();
|
|
511
|
+
const { knowledge_id, revision_id } = await knowledge_service.create_learning_knowledge(learning_text);
|
|
512
|
+
logger.info('Created new knowledge for learning', {
|
|
513
|
+
knowledge_id,
|
|
514
|
+
revision_id,
|
|
515
|
+
domain
|
|
516
|
+
});
|
|
517
|
+
// Create embeddings for the new knowledge revision
|
|
518
|
+
await this.embedding_service.create_embeddings_for_document(knowledge_id, revision_id, learning_text, undefined, // source_data_id
|
|
519
|
+
'text-embedding-004', // model
|
|
520
|
+
models_1.EmbeddingType.LEARNING, domain);
|
|
521
|
+
return { knowledge_id, revision_id };
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
exports.ExecutionLearner = ExecutionLearner;
|
|
525
|
+
// Singleton instance
|
|
526
|
+
let learner_instance = null;
|
|
527
|
+
/**
|
|
528
|
+
* Get or create the global ExecutionLearner instance
|
|
529
|
+
*/
|
|
530
|
+
function get_execution_learner(config) {
|
|
531
|
+
if (!learner_instance) {
|
|
532
|
+
learner_instance = new ExecutionLearner(config);
|
|
533
|
+
}
|
|
534
|
+
return learner_instance;
|
|
535
|
+
}
|
|
536
|
+
//# sourceMappingURL=execution-learner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-learner.js","sourceRoot":"","sources":["../../../src/ai/learning/execution-learner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Base Handler for Response Output Types
|
|
3
|
+
*
|
|
4
|
+
* Base interface and abstract class for handling different response output types
|
|
5
|
+
* from the OpenAI Responses API.
|
|
6
|
+
*/
|
|
7
|
+
import { Logger } from "../../lib/utils/logger";
|
|
8
|
+
import { ChatMessage, AgentResponse, PlanWithSteps } from "../../lib/schemas";
|
|
9
|
+
import { StreamingUtils } from "../../lib/streaming-utils";
|
|
10
|
+
import type { GenerateContentResponse } from "@google/genai";
|
|
11
|
+
export interface HandlerContext {
|
|
12
|
+
conversation_id?: string;
|
|
13
|
+
step_id?: string;
|
|
14
|
+
original_message?: string;
|
|
15
|
+
plan?: PlanWithSteps | null;
|
|
16
|
+
tool_results?: any[];
|
|
17
|
+
embedding_service?: any;
|
|
18
|
+
}
|
|
19
|
+
export interface HandlerResult {
|
|
20
|
+
success: boolean;
|
|
21
|
+
result: ChatMessage[];
|
|
22
|
+
should_continue: boolean;
|
|
23
|
+
context?: any;
|
|
24
|
+
message_type?: string | null;
|
|
25
|
+
}
|
|
26
|
+
export declare abstract class BaseHandler {
|
|
27
|
+
protected logger: Logger;
|
|
28
|
+
protected streaming_utils: StreamingUtils;
|
|
29
|
+
constructor(streaming_utils: StreamingUtils);
|
|
30
|
+
/**
|
|
31
|
+
* Check if this handler can handle the given message_type or output_type
|
|
32
|
+
* @param message_type - message_type from AgentResponse (if output_text exists)
|
|
33
|
+
* @param output_type - output_type from OpenAI Response output[0].type
|
|
34
|
+
* @param result - The full AIResponse object
|
|
35
|
+
*/
|
|
36
|
+
abstract can_handle(message_type: string | null, output_type: string, input: ChatMessage): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Handle the response output
|
|
39
|
+
* @param result - The Gemini SDK response or ChatMessage object
|
|
40
|
+
* @param context - Additional handler context
|
|
41
|
+
* @returns Handler result with updated conversation history and execution control
|
|
42
|
+
*/
|
|
43
|
+
abstract handle(result: GenerateContentResponse | ChatMessage, context: HandlerContext): Promise<HandlerResult>;
|
|
44
|
+
/**
|
|
45
|
+
* Extract and parse AgentResponse from content
|
|
46
|
+
* Handles both string and object content, with JSON extraction from text
|
|
47
|
+
* @param content - Content from ChatMessage (can be string or object)
|
|
48
|
+
* @returns Parsed AgentResponse or null if parsing fails
|
|
49
|
+
*/
|
|
50
|
+
protected extract_agent_response(content: string | any): AgentResponse | null;
|
|
51
|
+
/**
|
|
52
|
+
* Parse content string to extract AgentResponse
|
|
53
|
+
* Handles markdown wrappers, invalid escape sequences, and JSON extraction
|
|
54
|
+
*/
|
|
55
|
+
protected parse_content_string(content_str: string): AgentResponse | null;
|
|
56
|
+
/**
|
|
57
|
+
* Append Gemini response to conversation history
|
|
58
|
+
* Formats the response as a ChatMessage with role 'model' and content as JSON string
|
|
59
|
+
* @param history - Current conversation history
|
|
60
|
+
* @param result - GenerateContentResponse or ChatMessage from Gemini
|
|
61
|
+
* @param agent_response - Optional parsed AgentResponse to include
|
|
62
|
+
* @returns Updated conversation history
|
|
63
|
+
*/
|
|
64
|
+
protected append_gemini_response_to_history(history: ChatMessage[], result: GenerateContentResponse | ChatMessage, agent_response?: AgentResponse): ChatMessage[];
|
|
65
|
+
/**
|
|
66
|
+
* Append context to conversation history as a special context message
|
|
67
|
+
* @param history - Current conversation history
|
|
68
|
+
* @param context - Context object to append
|
|
69
|
+
* @returns Updated conversation history
|
|
70
|
+
*/
|
|
71
|
+
protected append_context_to_history(history: ChatMessage[], context: any): ChatMessage[];
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=base-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-handler.d.ts","sourceRoot":"","sources":["../../../src/ai/response_handlers/base-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAyB,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAE7D,MAAM,WAAW,cAAc;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC;IACrB,iBAAiB,CAAC,EAAE,GAAG,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,8BAAsB,WAAW;IAC7B,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,eAAe,EAAE,cAAc,CAAC;gBAG9B,eAAe,EAAE,cAAc;IAM3C;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO;IAElG;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,uBAAuB,GAAG,WAAW,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAE/G;;;;;OAKG;IACH,SAAS,CAAC,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,GAAG,aAAa,GAAG,IAAI;IAkC7E;;;OAGG;IACH,SAAS,CAAC,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAqDzE;;;;;;;OAOG;IACH,SAAS,CAAC,iCAAiC,CACvC,OAAO,EAAE,WAAW,EAAE,EACtB,MAAM,EAAE,uBAAuB,GAAG,WAAW,EAC7C,cAAc,CAAC,EAAE,aAAa,GAC/B,WAAW,EAAE;IAyBhB;;;;;OAKG;IACH,SAAS,CAAC,yBAAyB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,GAAG,GAAG,WAAW,EAAE;CAa3F"}
|