@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,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Agent Response Parser
|
|
3
|
+
*
|
|
4
|
+
* Simple JSON parser for agent responses from OpenAI Responses API.
|
|
5
|
+
* The Responses API returns structured JSON, so we just parse and return it.
|
|
6
|
+
*
|
|
7
|
+
* @author MeasureOne
|
|
8
|
+
* @version 2.0.0
|
|
9
|
+
*/
|
|
10
|
+
import { AgentResponse } from "../../lib/schemas";
|
|
11
|
+
/**
|
|
12
|
+
* Parse agent response - OpenAI Responses API returns structured JSON
|
|
13
|
+
*
|
|
14
|
+
* @param response_text - JSON response from agent
|
|
15
|
+
* @param options - Parsing options (unused, kept for compatibility)
|
|
16
|
+
* @returns Parsed agent response
|
|
17
|
+
*/
|
|
18
|
+
export declare function parse_agent_response<T extends AgentResponse>(response_text: string): T;
|
|
19
|
+
/**
|
|
20
|
+
* Extract text from agent output (helper function)
|
|
21
|
+
*/
|
|
22
|
+
export declare function extract_text_from_output(output: any): string;
|
|
23
|
+
//# sourceMappingURL=response-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-parser.d.ts","sourceRoot":"","sources":["../../../src/ai/agents/response-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,aAAa,EAA6F,MAAM,mBAAmB,CAAC;AAiK7I;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,aAAa,EAAE,aAAa,EAAE,MAAM,GAAG,CAAC,CAyGtF;AAqCD;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,CAc5D"}
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Agent Response Parser
|
|
4
|
+
*
|
|
5
|
+
* Simple JSON parser for agent responses from OpenAI Responses API.
|
|
6
|
+
* The Responses API returns structured JSON, so we just parse and return it.
|
|
7
|
+
*
|
|
8
|
+
* @author MeasureOne
|
|
9
|
+
* @version 2.0.0
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.parse_agent_response = parse_agent_response;
|
|
13
|
+
exports.extract_text_from_output = extract_text_from_output;
|
|
14
|
+
const logger_1 = require("../../lib/utils/logger");
|
|
15
|
+
const logger = (0, logger_1.create_default_logger)("response-parser");
|
|
16
|
+
/**
|
|
17
|
+
* Sanitize JSON string by fixing common issues
|
|
18
|
+
*
|
|
19
|
+
* @param json_str - Potentially malformed JSON string
|
|
20
|
+
* @returns Sanitized JSON string
|
|
21
|
+
*/
|
|
22
|
+
function sanitize_json(json_str) {
|
|
23
|
+
// Remove any trailing commas before closing braces/brackets
|
|
24
|
+
let sanitized = json_str.replace(/,(\s*[}\]])/g, '$1');
|
|
25
|
+
// Remove JavaScript-style comments (// ... and /* ... */)
|
|
26
|
+
// This is a common issue when agents add explanatory comments in JSON
|
|
27
|
+
// Remove single-line comments (// ...)
|
|
28
|
+
// Match // followed by anything until end of line, but only if it's after a comma or value
|
|
29
|
+
sanitized = sanitized.replace(/,(\s*)\/\/[^\n]*/g, ',');
|
|
30
|
+
sanitized = sanitized.replace(/"\s*\/\/[^\n]*/g, '"');
|
|
31
|
+
// Remove multi-line comments (/* ... */)
|
|
32
|
+
sanitized = sanitized.replace(/\/\*[\s\S]*?\*\//g, '');
|
|
33
|
+
return sanitized;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Try to repair malformed JSON by finding the error position and attempting fixes
|
|
37
|
+
*
|
|
38
|
+
* @param json_str - Malformed JSON string
|
|
39
|
+
* @param error - The parsing error
|
|
40
|
+
* @returns Repaired JSON string or null if unable to repair
|
|
41
|
+
*/
|
|
42
|
+
function attempt_json_repair(json_str, error) {
|
|
43
|
+
// Extract position from error message
|
|
44
|
+
const position_match = error.message.match(/position (\d+)/);
|
|
45
|
+
if (!position_match)
|
|
46
|
+
return null;
|
|
47
|
+
const error_pos = parseInt(position_match[1]);
|
|
48
|
+
// Get context around error position
|
|
49
|
+
const context_start = Math.max(0, error_pos - 50);
|
|
50
|
+
const context_end = Math.min(json_str.length, error_pos + 50);
|
|
51
|
+
const context = json_str.substring(context_start, context_end);
|
|
52
|
+
logger.warn("⚠️ JSON error context", {
|
|
53
|
+
error_position: error_pos,
|
|
54
|
+
context_before: json_str.substring(context_start, error_pos),
|
|
55
|
+
context_after: json_str.substring(error_pos, context_end),
|
|
56
|
+
character_at_error: json_str[error_pos],
|
|
57
|
+
char_code: json_str.charCodeAt(error_pos)
|
|
58
|
+
});
|
|
59
|
+
// Try common repairs
|
|
60
|
+
const repairs = [
|
|
61
|
+
// 1. Try sanitizing (remove trailing commas)
|
|
62
|
+
() => sanitize_json(json_str),
|
|
63
|
+
// 2. Fix invalid escape sequences (like \' which is not valid in JSON)
|
|
64
|
+
// JSON only allows: \" \\ \/ \b \f \n \r \t \uXXXX
|
|
65
|
+
// Single quotes don't need escaping in JSON strings, but if we see \' it's invalid
|
|
66
|
+
() => {
|
|
67
|
+
let repaired = json_str;
|
|
68
|
+
// Replace invalid \' escape sequences with just ' (single quotes are valid in JSON strings)
|
|
69
|
+
// We need to handle both \' and \\' cases
|
|
70
|
+
// Pattern 1: \' (backslash + single quote) - replace with just '
|
|
71
|
+
// But we need to avoid matching \\' (escaped backslash + quote) incorrectly
|
|
72
|
+
// Strategy: Replace \' that appears in contexts like [type=\'] or similar
|
|
73
|
+
// First, handle the common case: \' in CSS selectors like input[type='password']
|
|
74
|
+
// When this is in a stringified JSON, it becomes \"input[type=\'password']\"
|
|
75
|
+
// The \' is invalid - should just be '
|
|
76
|
+
repaired = repaired.replace(/(?<!\\)\\'/g, "'");
|
|
77
|
+
// Also handle cases where we might have double-escaped: \\' should become \'
|
|
78
|
+
// But actually, \\' means escaped backslash + quote, which is still invalid
|
|
79
|
+
// So we should replace \\' with \' (one backslash + quote, which we'll fix above)
|
|
80
|
+
// Actually, let's be more careful - \\' means the string contains \' literally
|
|
81
|
+
// In JSON, to represent \' we'd need \\\\' (four backslashes)
|
|
82
|
+
// But the simplest fix: if we see \' (not preceded by backslash), replace with '
|
|
83
|
+
return repaired;
|
|
84
|
+
},
|
|
85
|
+
// 3. Try completing truncated JSON by adding closing braces
|
|
86
|
+
() => {
|
|
87
|
+
let repaired = json_str.trim();
|
|
88
|
+
let open_braces = (repaired.match(/\{/g) || []).length;
|
|
89
|
+
let close_braces = (repaired.match(/\}/g) || []).length;
|
|
90
|
+
let open_brackets = (repaired.match(/\[/g) || []).length;
|
|
91
|
+
let close_brackets = (repaired.match(/\]/g) || []).length;
|
|
92
|
+
// Add missing closing brackets
|
|
93
|
+
while (open_brackets > close_brackets) {
|
|
94
|
+
repaired += ']';
|
|
95
|
+
close_brackets++;
|
|
96
|
+
}
|
|
97
|
+
// Add missing closing braces
|
|
98
|
+
while (open_braces > close_braces) {
|
|
99
|
+
repaired += '}';
|
|
100
|
+
close_braces++;
|
|
101
|
+
}
|
|
102
|
+
return repaired;
|
|
103
|
+
},
|
|
104
|
+
// 3. Try truncating at error position and completing
|
|
105
|
+
() => {
|
|
106
|
+
let truncated = json_str.substring(0, error_pos).trim();
|
|
107
|
+
// Remove incomplete value at the end
|
|
108
|
+
if (truncated.endsWith(',')) {
|
|
109
|
+
truncated = truncated.slice(0, -1);
|
|
110
|
+
}
|
|
111
|
+
else if (truncated.endsWith(':')) {
|
|
112
|
+
// Remove incomplete key:value pair
|
|
113
|
+
const last_comma = truncated.lastIndexOf(',');
|
|
114
|
+
if (last_comma > 0) {
|
|
115
|
+
truncated = truncated.substring(0, last_comma);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// Complete the JSON
|
|
119
|
+
let open_braces = (truncated.match(/\{/g) || []).length;
|
|
120
|
+
let close_braces = (truncated.match(/\}/g) || []).length;
|
|
121
|
+
let open_brackets = (truncated.match(/\[/g) || []).length;
|
|
122
|
+
let close_brackets = (truncated.match(/\]/g) || []).length;
|
|
123
|
+
while (open_brackets > close_brackets) {
|
|
124
|
+
truncated += ']';
|
|
125
|
+
close_brackets++;
|
|
126
|
+
}
|
|
127
|
+
while (open_braces > close_braces) {
|
|
128
|
+
truncated += '}';
|
|
129
|
+
close_braces++;
|
|
130
|
+
}
|
|
131
|
+
return truncated;
|
|
132
|
+
}
|
|
133
|
+
];
|
|
134
|
+
// Try each repair strategy
|
|
135
|
+
for (let i = 0; i < repairs.length; i++) {
|
|
136
|
+
try {
|
|
137
|
+
const repaired = repairs[i]();
|
|
138
|
+
JSON.parse(repaired); // Test if valid
|
|
139
|
+
logger.info(`✅ Successfully repaired JSON using strategy ${i + 1}`);
|
|
140
|
+
return repaired;
|
|
141
|
+
}
|
|
142
|
+
catch (repair_error) {
|
|
143
|
+
// This repair didn't work, try next one
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Parse agent response - OpenAI Responses API returns structured JSON
|
|
151
|
+
*
|
|
152
|
+
* @param response_text - JSON response from agent
|
|
153
|
+
* @param options - Parsing options (unused, kept for compatibility)
|
|
154
|
+
* @returns Parsed agent response
|
|
155
|
+
*/
|
|
156
|
+
function parse_agent_response(response_text) {
|
|
157
|
+
// First, check if response is wrapped in markdown code blocks and extract it
|
|
158
|
+
let cleaned_text = response_text.trim();
|
|
159
|
+
// Remove markdown code block wrappers if present
|
|
160
|
+
if (cleaned_text.startsWith('```')) {
|
|
161
|
+
// Extract JSON from markdown code blocks (```json ... ``` or ``` ... ```)
|
|
162
|
+
const json_match = cleaned_text.match(/^```(?:json)?\s*\n([\s\S]*?)\n```$/);
|
|
163
|
+
if (json_match) {
|
|
164
|
+
cleaned_text = json_match[1].trim();
|
|
165
|
+
logger.info("📝 Detected markdown-wrapped JSON, extracted pure JSON");
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
// Try to extract by removing leading ```json and trailing ```
|
|
169
|
+
cleaned_text = cleaned_text.replace(/^```(?:json)?\s*\n?/, '').replace(/\n?```\s*$/, '').trim();
|
|
170
|
+
logger.info("📝 Detected markdown code blocks, attempting to extract JSON");
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
try {
|
|
174
|
+
// Try to parse as pure JSON (either original or extracted)
|
|
175
|
+
logger.info("🔍 Parsing agent response", {
|
|
176
|
+
response_length: cleaned_text.length,
|
|
177
|
+
was_markdown_wrapped: response_text !== cleaned_text
|
|
178
|
+
});
|
|
179
|
+
const response = JSON.parse(cleaned_text);
|
|
180
|
+
logger.info("✅ Parsed agent response:", {
|
|
181
|
+
message_type: response.message_type,
|
|
182
|
+
agent_type: response.agent_type,
|
|
183
|
+
has_plan: !!response.plan,
|
|
184
|
+
plan_steps: response.plan?.length || 0
|
|
185
|
+
});
|
|
186
|
+
return response;
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
// Log error only if markdown extraction also fails
|
|
190
|
+
if (response_text === cleaned_text) {
|
|
191
|
+
// Original text was not markdown-wrapped, so this is a real JSON error
|
|
192
|
+
logger.error("❌ JSON parsing failed", {
|
|
193
|
+
error: error instanceof Error ? error.message : String(error),
|
|
194
|
+
response_length: response_text.length,
|
|
195
|
+
response_preview: response_text.substring(0, 200)
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
// We already tried to extract from markdown, log as warning
|
|
200
|
+
logger.warn("⚠️ JSON parsing failed even after markdown extraction", {
|
|
201
|
+
error: error instanceof Error ? error.message : String(error),
|
|
202
|
+
response_length: cleaned_text.length,
|
|
203
|
+
response_preview: cleaned_text.substring(0, 200)
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
// Try to repair the JSON
|
|
207
|
+
if (error instanceof Error) {
|
|
208
|
+
const repaired = attempt_json_repair(response_text, error);
|
|
209
|
+
if (repaired) {
|
|
210
|
+
try {
|
|
211
|
+
const response = JSON.parse(repaired);
|
|
212
|
+
logger.info("✅ Parsed agent response after repair:", {
|
|
213
|
+
message_type: response.message_type,
|
|
214
|
+
agent_type: response.agent_type,
|
|
215
|
+
has_plan: !!response.plan,
|
|
216
|
+
plan_steps: response.plan?.length || 0
|
|
217
|
+
});
|
|
218
|
+
return response;
|
|
219
|
+
}
|
|
220
|
+
catch (repair_parse_error) {
|
|
221
|
+
logger.error("❌ Repaired JSON still invalid", {
|
|
222
|
+
error: repair_parse_error instanceof Error ? repair_parse_error.message : String(repair_parse_error)
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
// If pure JSON parsing fails, try to extract JSON from markdown code blocks
|
|
228
|
+
try {
|
|
229
|
+
const extracted_json = extract_json_from_markdown(response_text);
|
|
230
|
+
if (extracted_json) {
|
|
231
|
+
const response = JSON.parse(extracted_json);
|
|
232
|
+
logger.info("✅ Parsed agent response from markdown:", {
|
|
233
|
+
message_type: response.message_type,
|
|
234
|
+
agent_type: response.agent_type,
|
|
235
|
+
has_plan: !!response.plan,
|
|
236
|
+
plan_steps: response.plan?.length || 0
|
|
237
|
+
});
|
|
238
|
+
return response;
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
logger.warn("⚠️ No JSON extracted from markdown", {
|
|
242
|
+
response_text_preview: response_text.substring(0, 200)
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
catch (markdown_error) {
|
|
247
|
+
// Markdown extraction also failed, continue to original error
|
|
248
|
+
logger.error("❌ Markdown extraction also failed", {
|
|
249
|
+
error: markdown_error instanceof Error ? markdown_error.message : String(markdown_error)
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
logger.error("❌ Failed to parse agent response after all attempts", {
|
|
253
|
+
error: error instanceof Error ? error.message : String(error),
|
|
254
|
+
response_preview: response_text.substring(0, 200)
|
|
255
|
+
});
|
|
256
|
+
throw new Error(`Invalid JSON response from agent: ${error instanceof Error ? error.message : String(error)}`);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Extract JSON from markdown code blocks
|
|
261
|
+
*/
|
|
262
|
+
function extract_json_from_markdown(text) {
|
|
263
|
+
// Remove leading/trailing whitespace
|
|
264
|
+
const trimmed = text.trim();
|
|
265
|
+
// Look for ```json ... ``` pattern (most common)
|
|
266
|
+
const jsonBlockMatch = trimmed.match(/```json\s*\n([\s\S]*?)\n?```/);
|
|
267
|
+
if (jsonBlockMatch) {
|
|
268
|
+
return jsonBlockMatch[1].trim();
|
|
269
|
+
}
|
|
270
|
+
// Look for ``` ... ``` pattern (without json specifier)
|
|
271
|
+
const codeBlockMatch = trimmed.match(/```\s*\n([\s\S]*?)\n?```/);
|
|
272
|
+
if (codeBlockMatch) {
|
|
273
|
+
const content = codeBlockMatch[1].trim();
|
|
274
|
+
// Check if the content looks like JSON (starts with { or [)
|
|
275
|
+
if (content.startsWith('{') || content.startsWith('[')) {
|
|
276
|
+
return content;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
// Look for inline code blocks `...`
|
|
280
|
+
const inlineCodeMatch = trimmed.match(/^`([^`]+)`$/);
|
|
281
|
+
if (inlineCodeMatch) {
|
|
282
|
+
const content = inlineCodeMatch[1].trim();
|
|
283
|
+
if (content.startsWith('{') || content.startsWith('[')) {
|
|
284
|
+
return content;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
return null;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Extract text from agent output (helper function)
|
|
291
|
+
*/
|
|
292
|
+
function extract_text_from_output(output) {
|
|
293
|
+
if (typeof output === "string")
|
|
294
|
+
return output;
|
|
295
|
+
if (output && typeof output === "object") {
|
|
296
|
+
if (output.text)
|
|
297
|
+
return String(output.text);
|
|
298
|
+
if (output.content)
|
|
299
|
+
return String(output.content);
|
|
300
|
+
if (output.message)
|
|
301
|
+
return String(output.message);
|
|
302
|
+
if (output.response)
|
|
303
|
+
return String(output.response);
|
|
304
|
+
try {
|
|
305
|
+
return JSON.stringify(output, null, 2);
|
|
306
|
+
}
|
|
307
|
+
catch {
|
|
308
|
+
return String(output);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
return String(output || "");
|
|
312
|
+
}
|
|
313
|
+
//# sourceMappingURL=response-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-parser.js","sourceRoot":"","sources":["../../../src/ai/agents/response-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Summarizer Agent
|
|
3
|
+
*
|
|
4
|
+
* Summarizes conversation messages and context using LLM.
|
|
5
|
+
* Used to provide concise summaries to the learning agent while sanitizing sensitive information.
|
|
6
|
+
*
|
|
7
|
+
* @author MeasureOne
|
|
8
|
+
* @version 1.0.0
|
|
9
|
+
*/
|
|
10
|
+
import { GoogleGenAI } from "@google/genai";
|
|
11
|
+
import { DynamicAgent } from "./dynamic-agent";
|
|
12
|
+
import { z } from "zod";
|
|
13
|
+
import { ChatMessage } from "../../lib/schemas";
|
|
14
|
+
/**
|
|
15
|
+
* Schema for summarizer response
|
|
16
|
+
*/
|
|
17
|
+
declare const SummarizerResponseSchema: z.ZodObject<{
|
|
18
|
+
summary: z.ZodString;
|
|
19
|
+
}, z.core.$strip>;
|
|
20
|
+
export type SummarizerResponse = z.infer<typeof SummarizerResponseSchema>;
|
|
21
|
+
/**
|
|
22
|
+
* Summarizer Agent - Summarizes conversation messages and context
|
|
23
|
+
*/
|
|
24
|
+
export declare class SummarizerAgent extends DynamicAgent {
|
|
25
|
+
constructor(gemini_client: GoogleGenAI, mcp_servers?: any[], model?: string);
|
|
26
|
+
/**
|
|
27
|
+
* Summarize conversation messages for learning purposes
|
|
28
|
+
* Removes sensitive information and focuses on execution patterns
|
|
29
|
+
*/
|
|
30
|
+
summarize_conversation(messages: ChatMessage[], model?: string): Promise<string>;
|
|
31
|
+
/**
|
|
32
|
+
* Summarize conversation context for learning purposes
|
|
33
|
+
* Removes sensitive information and focuses on execution state
|
|
34
|
+
*/
|
|
35
|
+
summarize_context(context: any, model?: string): Promise<string>;
|
|
36
|
+
}
|
|
37
|
+
export {};
|
|
38
|
+
//# sourceMappingURL=summarizer.agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summarizer.agent.d.ts","sourceRoot":"","sources":["../../../src/ai/agents/summarizer.agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhD;;GAEG;AACH,QAAA,MAAM,wBAAwB;;iBAM5B,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E;;GAEG;AACH,qBAAa,eAAgB,SAAQ,YAAY;gBAEzC,aAAa,EAAE,WAAW,EAC1B,WAAW,GAAE,GAAG,EAAO,EACvB,KAAK,GAAE,MAA2B;IAsBtC;;;OAGG;IACG,sBAAsB,CACxB,QAAQ,EAAE,WAAW,EAAE,EACvB,KAAK,GAAE,MAA2B,GACnC,OAAO,CAAC,MAAM,CAAC;IA2GlB;;;OAGG;IACG,iBAAiB,CACnB,OAAO,EAAE,GAAG,EACZ,KAAK,GAAE,MAA2B,GACnC,OAAO,CAAC,MAAM,CAAC;CA2GrB"}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Summarizer Agent
|
|
4
|
+
*
|
|
5
|
+
* Summarizes conversation messages and context using LLM.
|
|
6
|
+
* Used to provide concise summaries to the learning agent while sanitizing sensitive information.
|
|
7
|
+
*
|
|
8
|
+
* @author MeasureOne
|
|
9
|
+
* @version 1.0.0
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.SummarizerAgent = void 0;
|
|
13
|
+
const dynamic_agent_1 = require("./dynamic-agent");
|
|
14
|
+
const summarizer_instructions_1 = require("../instructions/summarizer.instructions");
|
|
15
|
+
const logger_1 = require("../../lib/utils/logger");
|
|
16
|
+
const zod_1 = require("zod");
|
|
17
|
+
const logger = (0, logger_1.create_default_logger)("summarizer-agent");
|
|
18
|
+
/**
|
|
19
|
+
* Schema for summarizer response
|
|
20
|
+
*/
|
|
21
|
+
const SummarizerResponseSchema = zod_1.z.object({
|
|
22
|
+
summary: zod_1.z.string().describe("A concise text summary focusing on execution patterns, flow, and actionable insights. " +
|
|
23
|
+
"MUST NOT include any sensitive information: no usernames, passwords, credentials, PII (names, emails, phone numbers, SSN, account numbers, addresses, DOB), or actual user input values. " +
|
|
24
|
+
"ONLY include patterns, selectors, URLs (sanitized), and structural information."),
|
|
25
|
+
});
|
|
26
|
+
/**
|
|
27
|
+
* Summarizer Agent - Summarizes conversation messages and context
|
|
28
|
+
*/
|
|
29
|
+
class SummarizerAgent extends dynamic_agent_1.DynamicAgent {
|
|
30
|
+
constructor(gemini_client, mcp_servers = [], model = "gemini-2.5-flash") {
|
|
31
|
+
super(gemini_client, mcp_servers, "SummarizerAgent", summarizer_instructions_1.SUMMARIZER_INSTRUCTIONS, [], // No tools needed for summarization
|
|
32
|
+
model, SummarizerResponseSchema, // Pass the Zod schema for structured validation
|
|
33
|
+
undefined, // No conversation summary for summarizer agent
|
|
34
|
+
undefined, // No context summary for summarizer agent
|
|
35
|
+
undefined, // No recent messages for summarizer agent
|
|
36
|
+
undefined // No current context for summarizer agent
|
|
37
|
+
);
|
|
38
|
+
logger.info("SummarizerAgent initialized", {
|
|
39
|
+
model,
|
|
40
|
+
has_schema: true
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Summarize conversation messages for learning purposes
|
|
45
|
+
* Removes sensitive information and focuses on execution patterns
|
|
46
|
+
*/
|
|
47
|
+
async summarize_conversation(messages, model = "gemini-2.5-flash") {
|
|
48
|
+
try {
|
|
49
|
+
if (!messages || messages.length === 0) {
|
|
50
|
+
return "";
|
|
51
|
+
}
|
|
52
|
+
// Filter out system messages and focus on user/assistant exchanges
|
|
53
|
+
const relevant_messages = messages.filter(msg => msg.role === 'user' || msg.role === 'assistant' || msg.role === 'model');
|
|
54
|
+
if (relevant_messages.length === 0) {
|
|
55
|
+
return "";
|
|
56
|
+
}
|
|
57
|
+
// Convert messages to a readable format
|
|
58
|
+
const messages_text = relevant_messages.map((msg, idx) => {
|
|
59
|
+
const role = msg.role === 'model' ? 'assistant' : msg.role;
|
|
60
|
+
const content = typeof msg.content === 'string'
|
|
61
|
+
? msg.content
|
|
62
|
+
: JSON.stringify(msg.content);
|
|
63
|
+
return `${idx + 1}. [${role}]: ${content.substring(0, 500)}${content.length > 500 ? '...' : ''}`;
|
|
64
|
+
}).join('\n\n');
|
|
65
|
+
const prompt = `Summarize this conversation for learning purposes. Focus on:
|
|
66
|
+
1. The main task/goal requested by the user
|
|
67
|
+
2. Key execution steps taken
|
|
68
|
+
3. Tools/actions used
|
|
69
|
+
4. Success/failure patterns
|
|
70
|
+
5. Important context (URLs, selectors, page structures)
|
|
71
|
+
|
|
72
|
+
**CRITICAL SECURITY**:
|
|
73
|
+
- DO NOT include usernames, passwords, credentials, or any authentication tokens
|
|
74
|
+
- DO NOT include PII (names, emails, phone numbers, SSN, account numbers, addresses, DOB)
|
|
75
|
+
- DO NOT include actual user input values
|
|
76
|
+
- ONLY include patterns, selectors, URLs (sanitized), and structural information
|
|
77
|
+
|
|
78
|
+
Conversation:
|
|
79
|
+
${messages_text}
|
|
80
|
+
|
|
81
|
+
Generate a summary that helps future agents use the conversation to take the right steps without errors from execution flow and patterns without sensitive information.`;
|
|
82
|
+
const user_message = {
|
|
83
|
+
role: 'user',
|
|
84
|
+
content: prompt
|
|
85
|
+
};
|
|
86
|
+
// Use execute_with_retries for consistency
|
|
87
|
+
const response = await this.execute_with_retries([user_message], {
|
|
88
|
+
streaming: false // Summarization doesn't need streaming
|
|
89
|
+
});
|
|
90
|
+
// Parse the response
|
|
91
|
+
const content = response.text;
|
|
92
|
+
if (!content) {
|
|
93
|
+
throw new Error("SummarizerAgent returned no content");
|
|
94
|
+
}
|
|
95
|
+
let parsed_content;
|
|
96
|
+
if (typeof content === 'string') {
|
|
97
|
+
try {
|
|
98
|
+
parsed_content = JSON.parse(content);
|
|
99
|
+
}
|
|
100
|
+
catch (parse_error) {
|
|
101
|
+
// If JSON parse fails, try to extract JSON from markdown code blocks
|
|
102
|
+
const json_match = content.match(/```(?:json)?\s*\n?([\s\S]*?)\n?```/);
|
|
103
|
+
if (json_match) {
|
|
104
|
+
parsed_content = JSON.parse(json_match[1].trim());
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
// Try to find JSON object in the text
|
|
108
|
+
const json_object_match = content.match(/\{[\s\S]*"summary"[\s\S]*\}/);
|
|
109
|
+
if (json_object_match) {
|
|
110
|
+
parsed_content = JSON.parse(json_object_match[0]);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
// Fallback: use the text directly as summary
|
|
114
|
+
logger.warn("Failed to parse JSON from summarizer response, using text directly");
|
|
115
|
+
return content.trim();
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
else if (typeof content === 'object' && content !== null) {
|
|
121
|
+
parsed_content = content;
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
throw new Error(`SummarizerAgent returned unexpected content type: ${typeof content}`);
|
|
125
|
+
}
|
|
126
|
+
const extraction = SummarizerResponseSchema.parse(parsed_content);
|
|
127
|
+
const summary = extraction.summary?.trim() || "";
|
|
128
|
+
logger.info("Generated conversation summary", {
|
|
129
|
+
message_count: relevant_messages.length,
|
|
130
|
+
summary_length: summary.length
|
|
131
|
+
});
|
|
132
|
+
return summary;
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
logger.error("Failed to summarize conversation", {
|
|
136
|
+
error: error instanceof Error ? error.message : String(error)
|
|
137
|
+
});
|
|
138
|
+
// Return empty string on failure - don't block learning
|
|
139
|
+
return "";
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Summarize conversation context for learning purposes
|
|
144
|
+
* Removes sensitive information and focuses on execution state
|
|
145
|
+
*/
|
|
146
|
+
async summarize_context(context, model = "gemini-2.5-flash") {
|
|
147
|
+
try {
|
|
148
|
+
if (!context || Object.keys(context).length === 0) {
|
|
149
|
+
return "";
|
|
150
|
+
}
|
|
151
|
+
// Sanitize context - remove sensitive fields
|
|
152
|
+
const sanitized_context = { ...context };
|
|
153
|
+
// Remove known sensitive fields
|
|
154
|
+
const sensitive_fields = [
|
|
155
|
+
'password', 'pwd', 'pass', 'token', 'auth', 'credential',
|
|
156
|
+
'username', 'user', 'email', 'phone', 'ssn', 'account_number',
|
|
157
|
+
'api_key', 'secret', 'key', 'session', 'cookie', 'personal information', 'sensitive information'
|
|
158
|
+
];
|
|
159
|
+
for (const key in sanitized_context) {
|
|
160
|
+
const lower_key = key.toLowerCase();
|
|
161
|
+
if (sensitive_fields.some(field => lower_key.includes(field))) {
|
|
162
|
+
delete sanitized_context[key];
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
// Convert to readable format
|
|
166
|
+
const context_text = JSON.stringify(sanitized_context, null, 2);
|
|
167
|
+
const prompt = `Summarize this execution context for learning purposes. Focus on:
|
|
168
|
+
1. Browser/page state (URLs, page titles, browser_id)
|
|
169
|
+
2. Plan information (plan_id, current_step, step progress)
|
|
170
|
+
3. Tool results and execution state
|
|
171
|
+
4. Important configuration or state variables
|
|
172
|
+
|
|
173
|
+
**CRITICAL SECURITY**:
|
|
174
|
+
- DO NOT include usernames, passwords, credentials, or any authentication tokens
|
|
175
|
+
- DO NOT include PII (names, emails, phone numbers, SSN, account numbers, addresses, DOB)
|
|
176
|
+
- DO NOT include actual user input values
|
|
177
|
+
- ONLY include patterns, selectors, URLs (sanitized), and structural information
|
|
178
|
+
|
|
179
|
+
Context:
|
|
180
|
+
${context_text}
|
|
181
|
+
|
|
182
|
+
Generate a summary from execution flow and context that helps future agents use the context to take the right steps without errors from execution flow and patterns without sensitive information.`;
|
|
183
|
+
const user_message = {
|
|
184
|
+
role: 'user',
|
|
185
|
+
content: prompt
|
|
186
|
+
};
|
|
187
|
+
// Use execute_with_retries for consistency
|
|
188
|
+
const response = await this.execute_with_retries([user_message], {
|
|
189
|
+
streaming: false // Summarization doesn't need streaming
|
|
190
|
+
});
|
|
191
|
+
// Parse the response
|
|
192
|
+
const content = response.text;
|
|
193
|
+
if (!content) {
|
|
194
|
+
throw new Error("SummarizerAgent returned no content");
|
|
195
|
+
}
|
|
196
|
+
let parsed_content;
|
|
197
|
+
if (typeof content === 'string') {
|
|
198
|
+
try {
|
|
199
|
+
parsed_content = JSON.parse(content);
|
|
200
|
+
}
|
|
201
|
+
catch (parse_error) {
|
|
202
|
+
// If JSON parse fails, try to extract JSON from markdown code blocks
|
|
203
|
+
const json_match = content.match(/```(?:json)?\s*\n?([\s\S]*?)\n?```/);
|
|
204
|
+
if (json_match) {
|
|
205
|
+
parsed_content = JSON.parse(json_match[1].trim());
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
// Try to find JSON object in the text
|
|
209
|
+
const json_object_match = content.match(/\{[\s\S]*"summary"[\s\S]*\}/);
|
|
210
|
+
if (json_object_match) {
|
|
211
|
+
parsed_content = JSON.parse(json_object_match[0]);
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
// Fallback: use the text directly as summary
|
|
215
|
+
logger.warn("Failed to parse JSON from summarizer response, using text directly");
|
|
216
|
+
return content.trim();
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
else if (typeof content === 'object' && content !== null) {
|
|
222
|
+
parsed_content = content;
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
throw new Error(`SummarizerAgent returned unexpected content type: ${typeof content}`);
|
|
226
|
+
}
|
|
227
|
+
const extraction = SummarizerResponseSchema.parse(parsed_content);
|
|
228
|
+
const summary = extraction.summary?.trim() || "";
|
|
229
|
+
logger.info("Generated context summary", {
|
|
230
|
+
context_keys: Object.keys(context).length,
|
|
231
|
+
summary_length: summary.length
|
|
232
|
+
});
|
|
233
|
+
return summary;
|
|
234
|
+
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
logger.error("Failed to summarize context", {
|
|
237
|
+
error: error instanceof Error ? error.message : String(error)
|
|
238
|
+
});
|
|
239
|
+
// Return empty string on failure - don't block learning
|
|
240
|
+
return "";
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
exports.SummarizerAgent = SummarizerAgent;
|
|
245
|
+
//# sourceMappingURL=summarizer.agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summarizer.agent.js","sourceRoot":"","sources":["../../../src/ai/agents/summarizer.agent.ts"],"names":[],"mappings":"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"}
|