@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,244 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Domain Service
|
|
4
|
+
*
|
|
5
|
+
* Service for managing domains, seeds, and domain validation.
|
|
6
|
+
* Ensures that seeds exist for domains before allowing learning creation.
|
|
7
|
+
*
|
|
8
|
+
* @author MeasureOne, Inc.
|
|
9
|
+
* @version 1.0.0
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.DomainService = void 0;
|
|
13
|
+
exports.get_domain_service = get_domain_service;
|
|
14
|
+
const logger_1 = require("../lib/utils/logger");
|
|
15
|
+
const sequelize_service_1 = require("../lib/sequelize-service");
|
|
16
|
+
const models_1 = require("../models");
|
|
17
|
+
const sequelize_1 = require("sequelize");
|
|
18
|
+
const genai_1 = require("@google/genai");
|
|
19
|
+
const domain_identifier_agent_1 = require("../ai/agents/domain-identifier.agent");
|
|
20
|
+
const config_1 = require("../config");
|
|
21
|
+
const logger = (0, logger_1.create_default_logger)("domain-service");
|
|
22
|
+
class DomainService {
|
|
23
|
+
constructor() {
|
|
24
|
+
this.sequelize = (0, sequelize_service_1.get_sequelize_service)();
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Get all unique domains from Embeddings table (ALL types: SEED and LEARNING)
|
|
28
|
+
* Returns all distinct domain values that exist in the system
|
|
29
|
+
*
|
|
30
|
+
* @returns Promise resolving to array of unique domain strings
|
|
31
|
+
*/
|
|
32
|
+
async get_unique_domains() {
|
|
33
|
+
try {
|
|
34
|
+
// Get unique domains from ALL embedding types (SEED and LEARNING)
|
|
35
|
+
const domains = await models_1.EmbeddingModel.findAll({
|
|
36
|
+
attributes: [
|
|
37
|
+
[this.sequelize.fn('DISTINCT', this.sequelize.col('domain')), 'domain']
|
|
38
|
+
],
|
|
39
|
+
where: {
|
|
40
|
+
domain: {
|
|
41
|
+
[sequelize_1.Op.ne]: null
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
raw: true
|
|
45
|
+
});
|
|
46
|
+
const unique_domains = domains
|
|
47
|
+
.map((d) => d.domain)
|
|
48
|
+
.filter((d) => d !== null && d.trim().length > 0);
|
|
49
|
+
logger.debug('Retrieved unique domains from all embeddings', { count: unique_domains.length, domains: unique_domains });
|
|
50
|
+
return unique_domains;
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
logger.error('Failed to get unique domains', { error });
|
|
54
|
+
return [];
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Check if a seed exists for a given domain
|
|
59
|
+
* Seeds are SEED type embeddings with a domain field
|
|
60
|
+
*
|
|
61
|
+
* @param domain - The domain to check
|
|
62
|
+
* @returns Promise resolving to true if seed exists, false otherwise
|
|
63
|
+
*/
|
|
64
|
+
async seed_exists_for_domain(domain) {
|
|
65
|
+
try {
|
|
66
|
+
if (!domain || domain.trim().length === 0) {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
// Check if any SEED type embedding exists for this domain
|
|
70
|
+
const seed_count = await models_1.EmbeddingModel.count({
|
|
71
|
+
where: {
|
|
72
|
+
type: models_1.EmbeddingType.SEED,
|
|
73
|
+
domain: domain,
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
const exists = seed_count > 0;
|
|
77
|
+
logger.debug('Seed existence check', { domain, exists, seed_count });
|
|
78
|
+
return exists;
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
logger.error('Failed to check seed existence', { error, domain });
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Get seed pattern for a domain
|
|
87
|
+
* Returns the pattern/format specification from the seed
|
|
88
|
+
*
|
|
89
|
+
* @param domain - The domain to get seed pattern for
|
|
90
|
+
* @returns Promise resolving to seed pattern text or null if not found
|
|
91
|
+
*/
|
|
92
|
+
async get_seed_pattern(domain) {
|
|
93
|
+
try {
|
|
94
|
+
if (!domain || domain.trim().length === 0) {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
// Get ALL SEED type embeddings for this domain
|
|
98
|
+
const seed_embeddings = await models_1.EmbeddingModel.findAll({
|
|
99
|
+
where: {
|
|
100
|
+
type: models_1.EmbeddingType.SEED,
|
|
101
|
+
domain: domain,
|
|
102
|
+
},
|
|
103
|
+
attributes: ['knowledge_id', 'knowledge_revision_id', 'text', 'chunk_index', 'created_at'],
|
|
104
|
+
order: [['created_at', 'DESC'], ['chunk_index', 'ASC']], // Most recent first, then by chunk order
|
|
105
|
+
});
|
|
106
|
+
if (!seed_embeddings || seed_embeddings.length === 0) {
|
|
107
|
+
logger.debug('No seed embeddings found for domain', { domain });
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
logger.info('Found seed embeddings for domain', {
|
|
111
|
+
domain,
|
|
112
|
+
total_embeddings: seed_embeddings.length,
|
|
113
|
+
unique_knowledge_ids: [...new Set(seed_embeddings.map(e => e.knowledge_id))].length
|
|
114
|
+
});
|
|
115
|
+
// Group embeddings by knowledge_id to combine chunks from the same Knowledge
|
|
116
|
+
const knowledge_groups = new Map();
|
|
117
|
+
for (const embedding of seed_embeddings) {
|
|
118
|
+
const knowledge_id = embedding.knowledge_id;
|
|
119
|
+
if (!knowledge_groups.has(knowledge_id)) {
|
|
120
|
+
knowledge_groups.set(knowledge_id, []);
|
|
121
|
+
}
|
|
122
|
+
knowledge_groups.get(knowledge_id).push(embedding);
|
|
123
|
+
}
|
|
124
|
+
// Try each knowledge's combined text to find LEARNING FORMAT
|
|
125
|
+
// Start with the most recent knowledge (first in the sorted list)
|
|
126
|
+
for (const [knowledge_id, embeddings] of knowledge_groups.entries()) {
|
|
127
|
+
// Get the most recent revision for this knowledge
|
|
128
|
+
const most_recent_revision_id = embeddings[0]?.knowledge_revision_id;
|
|
129
|
+
// Get all chunks for the most recent revision, sorted by chunk_index
|
|
130
|
+
const revision_chunks = embeddings
|
|
131
|
+
.filter(e => e.knowledge_revision_id === most_recent_revision_id)
|
|
132
|
+
.sort((a, b) => (a.chunk_index || 0) - (b.chunk_index || 0));
|
|
133
|
+
// Combine chunks in order
|
|
134
|
+
const combined_text = revision_chunks
|
|
135
|
+
.map(e => e.text)
|
|
136
|
+
.join('\n\n');
|
|
137
|
+
logger.debug('Combined seed chunks for knowledge', {
|
|
138
|
+
domain,
|
|
139
|
+
knowledge_id,
|
|
140
|
+
revision_id: most_recent_revision_id,
|
|
141
|
+
chunk_count: revision_chunks.length,
|
|
142
|
+
combined_length: combined_text.length
|
|
143
|
+
});
|
|
144
|
+
// Extract the LEARNING FORMAT section from the combined text
|
|
145
|
+
// Match "** LEARNING FORMAT **" (with optional spaces) and capture everything until next section or end
|
|
146
|
+
// logger.info('Extracting LEARNING FORMAT section from combined text', combined_text);
|
|
147
|
+
const learning_format_match = combined_text.match(/\*\*\s*LEARNING FORMAT\s*\*\*([\s\S]*?)(?=\n\*\*|$)/i);
|
|
148
|
+
if (learning_format_match && learning_format_match[1]) {
|
|
149
|
+
const learning_format = learning_format_match[1].trim();
|
|
150
|
+
logger.info('✅ Extracted LEARNING FORMAT section from seed knowledge', {
|
|
151
|
+
domain,
|
|
152
|
+
knowledge_id,
|
|
153
|
+
revision_id: most_recent_revision_id,
|
|
154
|
+
format_length: learning_format.length,
|
|
155
|
+
format_preview: learning_format.substring(0, 200)
|
|
156
|
+
});
|
|
157
|
+
return learning_format;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// If LEARNING FORMAT section not found in any seed, try the most recent seed's full text as fallback
|
|
161
|
+
const most_recent_seed = seed_embeddings[0];
|
|
162
|
+
logger.warn('⚠️ LEARNING FORMAT section not found in any seed knowledge, using most recent seed text as fallback', {
|
|
163
|
+
domain,
|
|
164
|
+
knowledge_id: most_recent_seed.knowledge_id,
|
|
165
|
+
seed_text_length: most_recent_seed.text.length
|
|
166
|
+
});
|
|
167
|
+
return most_recent_seed.text;
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
logger.error('Failed to get seed pattern', { error, domain });
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Validate that a seed exists for a domain before allowing operations
|
|
176
|
+
* Throws an error if seed doesn't exist
|
|
177
|
+
*
|
|
178
|
+
* @param domain - The domain to validate
|
|
179
|
+
* @throws Error if seed doesn't exist for domain
|
|
180
|
+
*/
|
|
181
|
+
async validate_seed_exists(domain) {
|
|
182
|
+
if (!domain || domain.trim().length === 0) {
|
|
183
|
+
throw new Error('Domain is required');
|
|
184
|
+
}
|
|
185
|
+
const exists = await this.seed_exists_for_domain(domain);
|
|
186
|
+
if (!exists) {
|
|
187
|
+
throw new Error(`No seed found for domain '${domain}'. Please add a seed for this domain before creating learnings.`);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Identify domain from seed content using AI
|
|
192
|
+
* Domain is ALWAYS identified using AI - never from manual input
|
|
193
|
+
*
|
|
194
|
+
* @param content - The seed content to analyze
|
|
195
|
+
* @returns Promise resolving to identified domain string
|
|
196
|
+
* @throws Error if domain cannot be identified or if GEMINI_API_KEY is not configured
|
|
197
|
+
*/
|
|
198
|
+
async identify_domain_from_content(content) {
|
|
199
|
+
if (!content || content.trim().length === 0) {
|
|
200
|
+
throw new Error('Content is required for domain identification');
|
|
201
|
+
}
|
|
202
|
+
const gemini_api_key = config_1.config_utils.get('GEMINI_API_KEY');
|
|
203
|
+
if (!gemini_api_key) {
|
|
204
|
+
throw new Error('GEMINI_API_KEY not configured');
|
|
205
|
+
}
|
|
206
|
+
logger.info('Starting domain identification from content', {
|
|
207
|
+
content_length: content.length,
|
|
208
|
+
content_preview: content.substring(0, 200)
|
|
209
|
+
});
|
|
210
|
+
const domain_agent = new domain_identifier_agent_1.DomainIdentifierAgent(new genai_1.GoogleGenAI({ apiKey: gemini_api_key }));
|
|
211
|
+
logger.debug('Calling domain agent with content', {
|
|
212
|
+
content_length: content.length,
|
|
213
|
+
content_title: content.split('\n')[0]?.substring(0, 100)
|
|
214
|
+
});
|
|
215
|
+
const identified_domain = await domain_agent.identify_domain(content);
|
|
216
|
+
logger.info('Domain identification result', {
|
|
217
|
+
identified_domain: identified_domain || 'null',
|
|
218
|
+
domain_type: typeof identified_domain,
|
|
219
|
+
domain_length: identified_domain?.length || 0
|
|
220
|
+
});
|
|
221
|
+
if (!identified_domain || identified_domain.trim().length === 0) {
|
|
222
|
+
throw new Error('Could not identify domain from seed content. Domain identification is required for seed creation.');
|
|
223
|
+
}
|
|
224
|
+
// Normalize and return domain
|
|
225
|
+
const normalized_domain = identified_domain.trim();
|
|
226
|
+
logger.info('✅ Domain identified from content', {
|
|
227
|
+
domain: normalized_domain
|
|
228
|
+
});
|
|
229
|
+
return normalized_domain;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
exports.DomainService = DomainService;
|
|
233
|
+
// Singleton instance
|
|
234
|
+
let domain_service_instance = null;
|
|
235
|
+
/**
|
|
236
|
+
* Get the singleton DomainService instance
|
|
237
|
+
*/
|
|
238
|
+
function get_domain_service() {
|
|
239
|
+
if (!domain_service_instance) {
|
|
240
|
+
domain_service_instance = new DomainService();
|
|
241
|
+
}
|
|
242
|
+
return domain_service_instance;
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=domain.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain.service.js","sourceRoot":"","sources":["../../src/services/domain.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Embedding Service
|
|
3
|
+
*
|
|
4
|
+
* Service for generating embeddings using Gemini and storing them in the database.
|
|
5
|
+
*
|
|
6
|
+
* @author MeasureOne, Inc.
|
|
7
|
+
* @version 1.0.0
|
|
8
|
+
*/
|
|
9
|
+
import { EmbeddingType } from "../models";
|
|
10
|
+
export declare class EmbeddingService {
|
|
11
|
+
private gemini;
|
|
12
|
+
private default_model;
|
|
13
|
+
private query_embedding_cache;
|
|
14
|
+
private readonly EMBEDDING_CACHE_TTL_MS;
|
|
15
|
+
private readonly MAX_EMBEDDING_CACHE_SIZE;
|
|
16
|
+
private readonly SEMANTIC_SIMILARITY_THRESHOLD;
|
|
17
|
+
private readonly MAX_SEMANTIC_CHECKS;
|
|
18
|
+
private faiss_index_cache;
|
|
19
|
+
private is_index_building;
|
|
20
|
+
constructor();
|
|
21
|
+
/**
|
|
22
|
+
* Builds or retrieves a cached Faiss index for a given model.
|
|
23
|
+
* This is the core of the search optimization.
|
|
24
|
+
* @param model - The embedding model name (e.g., "text-embedding-004")
|
|
25
|
+
*/
|
|
26
|
+
private get_or_build_faiss_index;
|
|
27
|
+
/**
|
|
28
|
+
* Generate embedding with caching (Phase 1 optimization)
|
|
29
|
+
* Caches query embeddings to avoid redundant API calls
|
|
30
|
+
*
|
|
31
|
+
* Cache strategy (optimized for user-generated queries):
|
|
32
|
+
* 1. Quick exact text check (O(1) - fast path, but rare for user queries)
|
|
33
|
+
* 2. Generate embedding and check semantic similarity (primary strategy)
|
|
34
|
+
* 3. Cache by semantic similarity, not exact text (since exact matches are rare)
|
|
35
|
+
*
|
|
36
|
+
* Rationale: User queries are semantically similar but textually different.
|
|
37
|
+
* Exact text caching has low hit rate, so we prioritize semantic similarity.
|
|
38
|
+
*/
|
|
39
|
+
private generate_embedding_cached;
|
|
40
|
+
/**
|
|
41
|
+
* Set cache entry with LRU eviction
|
|
42
|
+
* Stores embedding with pre-computed norm for faster similarity calculations
|
|
43
|
+
*/
|
|
44
|
+
private set_cache_entry;
|
|
45
|
+
/**
|
|
46
|
+
* Find semantically similar cached embedding (synchronous version)
|
|
47
|
+
* Checks cached embeddings for high similarity (>= threshold)
|
|
48
|
+
*
|
|
49
|
+
* Optimization: Limits checks to prevent O(n) performance on large cache
|
|
50
|
+
* Uses pre-computed norms for faster similarity calculation
|
|
51
|
+
*
|
|
52
|
+
* @param query_embedding - Pre-computed query embedding vector
|
|
53
|
+
* @param query_norm - Pre-computed query embedding norm
|
|
54
|
+
* @param model - Embedding model
|
|
55
|
+
* @param similarity_threshold - Minimum similarity threshold
|
|
56
|
+
* @returns Matching embedding or null
|
|
57
|
+
*/
|
|
58
|
+
private find_similar_cached_embedding_sync;
|
|
59
|
+
/**
|
|
60
|
+
* Generate embedding for a single text using Gemini
|
|
61
|
+
*
|
|
62
|
+
* @param text - Text to embed
|
|
63
|
+
* @param model - Embedding model (default: text-embedding-004)
|
|
64
|
+
* @returns Promise resolving to embedding vector
|
|
65
|
+
*/
|
|
66
|
+
generate_embedding(text: string, model?: string): Promise<number[]>;
|
|
67
|
+
/**
|
|
68
|
+
* Create embeddings for a document (works for both SEED and LEARNING types)
|
|
69
|
+
* This method chunks text, generates embeddings, and stores them in the database.
|
|
70
|
+
*
|
|
71
|
+
* @param knowledge_id - Required knowledge ID (must exist)
|
|
72
|
+
* @param knowledge_revision_id - Required revision ID (must exist)
|
|
73
|
+
* @param text - Text content to create embeddings for
|
|
74
|
+
* @param source_data_id - Optional source data ID
|
|
75
|
+
* @param model - Optional embedding model (defaults to default_model)
|
|
76
|
+
* @param type - Embedding type (SEED or LEARNING)
|
|
77
|
+
* @param domain - Required domain (normalized to lowercase)
|
|
78
|
+
*
|
|
79
|
+
* Note: This does NOT search for similar documents or create knowledge/revision.
|
|
80
|
+
* The caller must ensure knowledge_id and knowledge_revision_id already exist.
|
|
81
|
+
*/
|
|
82
|
+
create_embeddings_for_document(knowledge_id: string, knowledge_revision_id: string, text: string, source_data_id: string | undefined, model: string | undefined, type: EmbeddingType, domain: string): Promise<{
|
|
83
|
+
embeddings_created: number;
|
|
84
|
+
knowledge_id: string;
|
|
85
|
+
knowledge_revision_id: string;
|
|
86
|
+
}>;
|
|
87
|
+
/**
|
|
88
|
+
* Find knowledge ID for learned patterns
|
|
89
|
+
*/
|
|
90
|
+
find_learned_patterns_knowledge_id(): Promise<string | null>;
|
|
91
|
+
/**
|
|
92
|
+
* Search embeddings by similarity using a two-pass top-k approach
|
|
93
|
+
*
|
|
94
|
+
* @param query_text - Query text to search for
|
|
95
|
+
* @param knowledge_id - Optional knowledge ID to filter by (learned knowledge from LEARNING embeddings is ALWAYS included)
|
|
96
|
+
* @param limit - Maximum number of results (default: 10)
|
|
97
|
+
* @param model - Embedding model (default: text-embedding-004)
|
|
98
|
+
* @returns Promise resolving to array of similar embeddings with scores
|
|
99
|
+
*
|
|
100
|
+
* This optimized version uses a pre-built in-memory Faiss index for fast vector search.
|
|
101
|
+
*/
|
|
102
|
+
search_embeddings(query_text: string, knowledge_id?: string, limit?: number, model?: string, type?: EmbeddingType, domain?: string): Promise<Array<{
|
|
103
|
+
text: string;
|
|
104
|
+
score: number;
|
|
105
|
+
knowledge_id: string;
|
|
106
|
+
knowledge_revision_id: string;
|
|
107
|
+
source_data_id?: string;
|
|
108
|
+
chunk_index?: number;
|
|
109
|
+
type?: EmbeddingType;
|
|
110
|
+
domain?: string;
|
|
111
|
+
}>>;
|
|
112
|
+
/**
|
|
113
|
+
* Calculate cosine similarity between two vectors
|
|
114
|
+
*
|
|
115
|
+
* @param vec_a - First vector
|
|
116
|
+
* @param vec_b - Second vector
|
|
117
|
+
* @returns Cosine similarity score (0-1)
|
|
118
|
+
*/
|
|
119
|
+
cosine_similarity(vec_a: number[], vec_b: number[]): number;
|
|
120
|
+
/**
|
|
121
|
+
* Optimized cosine similarity calculation that reuses pre-computed norms
|
|
122
|
+
* This avoids recalculating norms for every comparison
|
|
123
|
+
*
|
|
124
|
+
* @param vec_a - Query vector
|
|
125
|
+
* @param vec_b - Embedding vector to compare
|
|
126
|
+
* @param vec_a_norm - Pre-computed norm of vec_a (sqrt of sum of squares)
|
|
127
|
+
* @param vec_b_norm - Optional pre-computed norm of vec_b (if not provided, calculates it)
|
|
128
|
+
* @returns Cosine similarity score (0-1)
|
|
129
|
+
*/
|
|
130
|
+
private cosine_similarity_optimized;
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=embedding.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedding.service.d.ts","sourceRoot":"","sources":["../../src/services/embedding.service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAkB,aAAa,EAAkB,MAAM,WAAW,CAAC;AA2B1E,qBAAa,gBAAgB;IACzB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,aAAa,CAAgC;IAKrD,OAAO,CAAC,qBAAqB,CAAsC;IACnE,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAkB;IACzD,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAQ;IACjD,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAQ;IACtD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAM;IAG1C,OAAO,CAAC,iBAAiB,CAAqC;IAC9D,OAAO,CAAC,iBAAiB,CAAS;;IAUlC;;;;OAIG;YACW,wBAAwB;IA2EtC;;;;;;;;;;;OAWG;YACW,yBAAyB;IAkDvC;;;OAGG;IACH,OAAO,CAAC,eAAe;IA4BvB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,kCAAkC;IAkE1C;;;;;;OAMG;IACG,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAqCzE;;;;;;;;;;;;;;OAcG;IACU,8BAA8B,CACvC,YAAY,EAAE,MAAM,EACpB,qBAAqB,EAAE,MAAM,EAC7B,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,MAAM,GACf,OAAO,CAAC;QAAE,kBAAkB,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,qBAAqB,EAAE,MAAM,CAAA;KAAE,CAAC;IA4G/F;;OAEG;IACU,kCAAkC,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAyBzE;;;;;;;;;;OAUG;IACG,iBAAiB,CACnB,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,EACrB,KAAK,GAAE,MAAW,EAClB,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,aAAa,EACpB,MAAM,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,qBAAqB,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,aAAa,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IA8G7L;;;;;;OAMG;IACI,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;IAuBlE;;;;;;;;;OASG;IACH,OAAO,CAAC,2BAA2B;CA2BtC"}
|