@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,394 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Plan Ready Handler
|
|
4
|
+
*
|
|
5
|
+
* Handles PLAN_READY message_type from AgentResponse.
|
|
6
|
+
* Saves plan to database and continues to executor.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.PlanReadyHandler = void 0;
|
|
10
|
+
const base_handler_1 = require("./base-handler");
|
|
11
|
+
const models_1 = require("../../models");
|
|
12
|
+
const uuid_1 = require("uuid");
|
|
13
|
+
class PlanReadyHandler extends base_handler_1.BaseHandler {
|
|
14
|
+
can_handle(message_type, output_type, result) {
|
|
15
|
+
// Primary check: message_type matches
|
|
16
|
+
if (message_type === 'PLAN_READY') {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
async handle(input, context) {
|
|
22
|
+
this.logger.info('Plan ready handler received result');
|
|
23
|
+
// Parse AgentResponse from output_text
|
|
24
|
+
if (!input.content) {
|
|
25
|
+
this.logger.warn('⚠️ No output_text in response');
|
|
26
|
+
return {
|
|
27
|
+
success: false,
|
|
28
|
+
result: [],
|
|
29
|
+
should_continue: false
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
// Use base handler extraction method to handle markdown, escape sequences, etc.
|
|
33
|
+
// This is similar to StepCompleteHandler - handles non-JSON output robustly
|
|
34
|
+
const extracted = this.extract_agent_response(input.content);
|
|
35
|
+
if (!extracted) {
|
|
36
|
+
this.logger.error('❌ Failed to extract AgentResponse from output_text', {
|
|
37
|
+
output_text_preview: input.content.substring(0, 200)
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
this.logger.info('Plan ready handler extracted plan', JSON.stringify(extracted, null, 2));
|
|
41
|
+
const planner_response = extracted;
|
|
42
|
+
const plan = planner_response.plan;
|
|
43
|
+
if (!plan || plan.length === 0) {
|
|
44
|
+
this.logger.warn('⚠️ PLAN_READY but no plan in response');
|
|
45
|
+
return {
|
|
46
|
+
success: false,
|
|
47
|
+
result: [],
|
|
48
|
+
should_continue: false
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
// extract the conversation_id from the context
|
|
52
|
+
const conversation_id = context.conversation_id;
|
|
53
|
+
if (!conversation_id) {
|
|
54
|
+
this.logger.error('❌ conversation_id not provided in context');
|
|
55
|
+
return {
|
|
56
|
+
success: false,
|
|
57
|
+
result: [],
|
|
58
|
+
should_continue: false
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
const conversation = await models_1.ConversationModel.findByPk(conversation_id);
|
|
62
|
+
if (!conversation) {
|
|
63
|
+
this.logger.error('❌ conversation not found');
|
|
64
|
+
return {
|
|
65
|
+
success: false,
|
|
66
|
+
result: [],
|
|
67
|
+
should_continue: false
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
// Parse context from database (it's stored as JSON string)
|
|
71
|
+
let db_context = {};
|
|
72
|
+
if (conversation.context) {
|
|
73
|
+
try {
|
|
74
|
+
db_context = JSON.parse(conversation.context);
|
|
75
|
+
}
|
|
76
|
+
catch (e) {
|
|
77
|
+
this.logger.warn('⚠️ Failed to parse conversation context from database', { error: e });
|
|
78
|
+
db_context = {};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
context = { ...context, ...db_context };
|
|
82
|
+
this.logger.info(`✅ Plan ready with ${plan.length} steps - saving to database`);
|
|
83
|
+
// Save plan to database
|
|
84
|
+
let plan_id;
|
|
85
|
+
try {
|
|
86
|
+
// Check if there's an existing ACTIVE plan - if so, append steps to it
|
|
87
|
+
const existing_plan = await models_1.PlanModel.findOne({
|
|
88
|
+
where: { conversation_id: conversation_id, status: 'ACTIVE' },
|
|
89
|
+
order: [['created_at', 'DESC']]
|
|
90
|
+
});
|
|
91
|
+
if (existing_plan) {
|
|
92
|
+
// Append steps to existing plan
|
|
93
|
+
plan_id = existing_plan.id;
|
|
94
|
+
await this.append_steps_to_plan(planner_response, plan_id);
|
|
95
|
+
this.logger.info(`✅ Appended ${plan.length} steps to existing plan: ${plan_id}`);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
// Create new plan
|
|
99
|
+
plan_id = await this.create_plan(planner_response, conversation_id);
|
|
100
|
+
}
|
|
101
|
+
// Update context with the plan_id (after creating or appending)
|
|
102
|
+
const conversation = await models_1.ConversationModel.findByPk(conversation_id);
|
|
103
|
+
if (conversation) {
|
|
104
|
+
let existing_context = {};
|
|
105
|
+
if (conversation.context) {
|
|
106
|
+
try {
|
|
107
|
+
existing_context = JSON.parse(conversation.context);
|
|
108
|
+
}
|
|
109
|
+
catch (e) {
|
|
110
|
+
this.logger.warn('⚠️ Failed to parse existing context, starting fresh');
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
const updated_context = { ...existing_context, plan_id: plan_id };
|
|
114
|
+
conversation.context = JSON.stringify(updated_context);
|
|
115
|
+
await conversation.save();
|
|
116
|
+
this.logger.info(`✅ Updated conversation context with plan_id: ${plan_id}`);
|
|
117
|
+
}
|
|
118
|
+
// Reload all steps from database to ensure we have the latest state
|
|
119
|
+
const all_steps_reload = await models_1.PlanStepModel.findAll({
|
|
120
|
+
where: { plan_id: plan_id },
|
|
121
|
+
order: [['step_index', 'ASC']]
|
|
122
|
+
});
|
|
123
|
+
this.logger.info(`🔍 Reloaded plan ${plan_id} with ${all_steps_reload.length} total steps`, {
|
|
124
|
+
steps: all_steps_reload.map(s => ({ step_index: s.step_index, status: s.status, id: s.id }))
|
|
125
|
+
});
|
|
126
|
+
// All steps are created with status: "PENDING" above
|
|
127
|
+
// Get the step with the smallest index that is PENDING
|
|
128
|
+
const next_step = await models_1.PlanStepModel.findOne({
|
|
129
|
+
where: {
|
|
130
|
+
plan_id: plan_id,
|
|
131
|
+
status: 'PENDING'
|
|
132
|
+
},
|
|
133
|
+
order: [['step_index', 'ASC']]
|
|
134
|
+
});
|
|
135
|
+
if (next_step) {
|
|
136
|
+
await next_step.update({
|
|
137
|
+
status: 'IN_PROGRESS',
|
|
138
|
+
started_at: new Date(),
|
|
139
|
+
updated_at: new Date()
|
|
140
|
+
});
|
|
141
|
+
this.logger.info(`✅ Marked step ${next_step.step_index} as IN_PROGRESS (smallest pending index)`);
|
|
142
|
+
}
|
|
143
|
+
this.logger.info(`✅ Plan saved to database: ${plan_id} with ${plan.length} steps`);
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
this.logger.error('❌ Failed to save plan to database', { error });
|
|
147
|
+
return {
|
|
148
|
+
success: false,
|
|
149
|
+
result: [],
|
|
150
|
+
should_continue: false
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
// Append context to conversation history so agent can see plan info
|
|
154
|
+
// Get the step that was marked as IN_PROGRESS (smallest pending index)
|
|
155
|
+
const in_progress_step = await models_1.PlanStepModel.findOne({
|
|
156
|
+
where: {
|
|
157
|
+
plan_id: plan_id,
|
|
158
|
+
status: 'IN_PROGRESS'
|
|
159
|
+
},
|
|
160
|
+
order: [['step_index', 'ASC']]
|
|
161
|
+
});
|
|
162
|
+
let c = {
|
|
163
|
+
conversation_id: context.conversation_id,
|
|
164
|
+
plan_id: plan_id,
|
|
165
|
+
};
|
|
166
|
+
if (planner_response.context) {
|
|
167
|
+
c = { ...c, ...planner_response.context };
|
|
168
|
+
}
|
|
169
|
+
if (!in_progress_step) {
|
|
170
|
+
this.logger.warn('⚠️ No in_progress_step found, cannot create handler context');
|
|
171
|
+
return {
|
|
172
|
+
success: false,
|
|
173
|
+
result: [],
|
|
174
|
+
should_continue: false
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
// Load the plan with all its steps
|
|
178
|
+
const plan_model = await models_1.PlanModel.findByPk(plan_id);
|
|
179
|
+
if (!plan_model) {
|
|
180
|
+
this.logger.error('❌ Plan not found after creation');
|
|
181
|
+
return {
|
|
182
|
+
success: false,
|
|
183
|
+
result: [],
|
|
184
|
+
should_continue: false
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
const all_steps = await models_1.PlanStepModel.findAll({
|
|
188
|
+
where: { plan_id: plan_id },
|
|
189
|
+
order: [['step_index', 'ASC']]
|
|
190
|
+
});
|
|
191
|
+
const plan_with_steps = {
|
|
192
|
+
...plan_model.to_shared_type(),
|
|
193
|
+
steps: all_steps.map(step => step.to_shared_type())
|
|
194
|
+
};
|
|
195
|
+
context.plan = plan_with_steps;
|
|
196
|
+
// Create clean context for the message - only include relevant fields, exclude internal fields
|
|
197
|
+
const clean_context = {
|
|
198
|
+
conversation_id: context.conversation_id,
|
|
199
|
+
plan_id: plan_id
|
|
200
|
+
};
|
|
201
|
+
// Include planner response context if available
|
|
202
|
+
if (planner_response.context) {
|
|
203
|
+
Object.assign(clean_context, planner_response.context);
|
|
204
|
+
}
|
|
205
|
+
// --- Multi-Step Knowledge Fetching ---
|
|
206
|
+
// Query knowledge base for ALL steps in the plan to provide complete context to the executor.
|
|
207
|
+
let knowledge_base_text = '';
|
|
208
|
+
if (context.embedding_service) {
|
|
209
|
+
const all_knowledge_results = [];
|
|
210
|
+
for (const step of all_steps) {
|
|
211
|
+
if (step.description) {
|
|
212
|
+
try {
|
|
213
|
+
this.logger.info(`🔍 Querying knowledge base for step ${step.step_index}: ${step.description}`);
|
|
214
|
+
const results = await context.embedding_service.search_embeddings(step.description, undefined, // knowledge_id - search all
|
|
215
|
+
5, // limit per step to keep the prompt concise
|
|
216
|
+
undefined, // model - use default
|
|
217
|
+
undefined, // type - search all types
|
|
218
|
+
undefined // domain - search all domains
|
|
219
|
+
);
|
|
220
|
+
if (results.length > 0) {
|
|
221
|
+
all_knowledge_results.push({ step_index: step.step_index, description: step.description, results });
|
|
222
|
+
this.logger.info(`✅ Found ${results.length} knowledge base results for step ${step.step_index}`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
catch (error) {
|
|
226
|
+
this.logger.warn(`⚠️ Failed to query knowledge base for step ${step.step_index}`, { error });
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
if (all_knowledge_results.length > 0) {
|
|
231
|
+
knowledge_base_text = `\n\n## Knowledge Base Learnings (for the entire plan):\n`;
|
|
232
|
+
knowledge_base_text += all_knowledge_results.map(step_knowledge => `### For Step ${step_knowledge.step_index}: "${step_knowledge.description}"\n` +
|
|
233
|
+
step_knowledge.results.map((result, idx) => `${idx + 1}. ${result.text} (score: ${result.score.toFixed(3)})`).join('\n')).join('\n\n');
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// End of multi-step knowledge fetching
|
|
237
|
+
// Format JSON for inclusion in message (using markdown code blocks to avoid escaping issues)
|
|
238
|
+
const context_json = JSON.stringify(clean_context, null, 2);
|
|
239
|
+
// Format plan JSON - only include essential plan info, not the full database object
|
|
240
|
+
const plan_summary = {
|
|
241
|
+
id: plan_with_steps.id,
|
|
242
|
+
intent: plan_with_steps.intent,
|
|
243
|
+
status: plan_with_steps.status,
|
|
244
|
+
steps: plan_with_steps.steps.map((step) => ({
|
|
245
|
+
id: step.id,
|
|
246
|
+
step_index: step.step_index,
|
|
247
|
+
description: step.description,
|
|
248
|
+
operation: step.operation,
|
|
249
|
+
status: step.status
|
|
250
|
+
}))
|
|
251
|
+
};
|
|
252
|
+
const plan_json = JSON.stringify(plan_summary, null, 2);
|
|
253
|
+
this.streaming_utils.write('status', { message: 'Plan ready - continuing to executor...' });
|
|
254
|
+
this.streaming_utils.write('plan', { plan: extracted.plan });
|
|
255
|
+
return {
|
|
256
|
+
success: true,
|
|
257
|
+
result: [
|
|
258
|
+
{
|
|
259
|
+
role: 'user',
|
|
260
|
+
content: `Execute the plan starting from the current IN_PROGRESS step. Continue executing subsequent steps until you encounter an error, need user input, or the plan is complete.
|
|
261
|
+
|
|
262
|
+
The full plan and relevant knowledge are provided in the context below. Use this context for parameters and guidance. If a step is unsuccessful, stop and report the failure.
|
|
263
|
+
${knowledge_base_text}
|
|
264
|
+
## Context:
|
|
265
|
+
\`\`\`json
|
|
266
|
+
${context_json}
|
|
267
|
+
\`\`\`
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
`
|
|
271
|
+
}
|
|
272
|
+
],
|
|
273
|
+
should_continue: true,
|
|
274
|
+
context: context,
|
|
275
|
+
message_type: 'STEP_READY' // Route to executor to execute next step
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Create plan in database from planner response
|
|
280
|
+
* @param planner_response - The planner response containing plan data
|
|
281
|
+
* @param conversation_id - The conversation ID to associate the plan with
|
|
282
|
+
* @returns The plan_id of the created plan
|
|
283
|
+
*/
|
|
284
|
+
async create_plan(planner_response, conversation_id) {
|
|
285
|
+
const plan = planner_response.plan;
|
|
286
|
+
if (!plan || plan.length === 0) {
|
|
287
|
+
throw new Error('Plan is empty or undefined');
|
|
288
|
+
}
|
|
289
|
+
const plan_id = `plan_${(0, uuid_1.v4)()}`;
|
|
290
|
+
const plan_data = models_1.PlanModel.from_shared_type({
|
|
291
|
+
id: plan_id,
|
|
292
|
+
conversation_id: conversation_id,
|
|
293
|
+
intent: planner_response.intent,
|
|
294
|
+
message: planner_response.message,
|
|
295
|
+
status: "ACTIVE",
|
|
296
|
+
created_at: new Date().toISOString(),
|
|
297
|
+
updated_at: new Date().toISOString(),
|
|
298
|
+
}); // Type assertion needed due to Partial return type
|
|
299
|
+
await models_1.PlanModel.create(plan_data);
|
|
300
|
+
// Save all steps to database
|
|
301
|
+
const step_promises = plan.map((step, index) => {
|
|
302
|
+
// Always generate a unique UUID for step ID to avoid conflicts
|
|
303
|
+
// step.id from plan is just a plan-local identifier, not a database ID
|
|
304
|
+
const step_id = `step_${(0, uuid_1.v4)()}`;
|
|
305
|
+
// Convert params to JSON string if it's an object/array
|
|
306
|
+
// The database expects params to be a string (JSON string)
|
|
307
|
+
const params_string = typeof step.params === 'string'
|
|
308
|
+
? step.params
|
|
309
|
+
: JSON.stringify(step.params || {});
|
|
310
|
+
const step_data = models_1.PlanStepModel.from_shared_type({
|
|
311
|
+
id: step_id,
|
|
312
|
+
plan_id: plan_id,
|
|
313
|
+
parent_step_id: undefined, // Top-level steps have no parent
|
|
314
|
+
description: step.description,
|
|
315
|
+
tool: step.tool || null,
|
|
316
|
+
operation: step.operation,
|
|
317
|
+
params: params_string,
|
|
318
|
+
depends_on: step.depends_on || [],
|
|
319
|
+
success_check: step.success_check,
|
|
320
|
+
suggestions_on_failure: step.suggestions_on_failure || [],
|
|
321
|
+
status: "PENDING",
|
|
322
|
+
step_index: index,
|
|
323
|
+
result: undefined,
|
|
324
|
+
error: undefined,
|
|
325
|
+
started_at: undefined,
|
|
326
|
+
completed_at: undefined,
|
|
327
|
+
created_at: new Date().toISOString(),
|
|
328
|
+
updated_at: new Date().toISOString(),
|
|
329
|
+
}); // Type assertion needed due to Partial return type
|
|
330
|
+
return models_1.PlanStepModel.create(step_data);
|
|
331
|
+
});
|
|
332
|
+
await Promise.all(step_promises);
|
|
333
|
+
this.logger.info(`✅ Plan created in database: ${plan_id} with ${plan.length} steps`);
|
|
334
|
+
return plan_id;
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Append steps to an existing plan
|
|
338
|
+
* @param planner_response - The planner response containing new steps
|
|
339
|
+
* @param plan_id - The existing plan ID to append steps to
|
|
340
|
+
*/
|
|
341
|
+
async append_steps_to_plan(planner_response, plan_id) {
|
|
342
|
+
const plan = planner_response.plan;
|
|
343
|
+
if (!plan || plan.length === 0) {
|
|
344
|
+
throw new Error('Plan is empty or undefined');
|
|
345
|
+
}
|
|
346
|
+
// Update plan status to ACTIVE when appending new steps
|
|
347
|
+
const plan_model = await models_1.PlanModel.findByPk(plan_id);
|
|
348
|
+
if (plan_model) {
|
|
349
|
+
await plan_model.update({ status: 'ACTIVE', updated_at: new Date() });
|
|
350
|
+
this.logger.info(`✅ Updated plan ${plan_id} status to ACTIVE`);
|
|
351
|
+
}
|
|
352
|
+
// Get the current highest step_index to continue from
|
|
353
|
+
const existing_steps = await models_1.PlanStepModel.findAll({
|
|
354
|
+
where: { plan_id: plan_id },
|
|
355
|
+
order: [['step_index', 'DESC']],
|
|
356
|
+
limit: 1
|
|
357
|
+
});
|
|
358
|
+
const start_index = existing_steps.length > 0 ? existing_steps[0].step_index + 1 : 0;
|
|
359
|
+
// Save all new steps to database
|
|
360
|
+
const step_promises = plan.map((step, index) => {
|
|
361
|
+
const step_id = `step_${(0, uuid_1.v4)()}`;
|
|
362
|
+
const step_index = start_index + index;
|
|
363
|
+
// Convert params to JSON string if it's an object/array
|
|
364
|
+
const params_string = typeof step.params === 'string'
|
|
365
|
+
? step.params
|
|
366
|
+
: JSON.stringify(step.params || {});
|
|
367
|
+
const step_data = models_1.PlanStepModel.from_shared_type({
|
|
368
|
+
id: step_id,
|
|
369
|
+
plan_id: plan_id,
|
|
370
|
+
parent_step_id: undefined, // Top-level steps have no parent
|
|
371
|
+
description: step.description,
|
|
372
|
+
tool: step.tool || null,
|
|
373
|
+
operation: step.operation,
|
|
374
|
+
params: params_string,
|
|
375
|
+
depends_on: step.depends_on || [],
|
|
376
|
+
success_check: step.success_check,
|
|
377
|
+
suggestions_on_failure: step.suggestions_on_failure || [],
|
|
378
|
+
status: "PENDING",
|
|
379
|
+
step_index: step_index,
|
|
380
|
+
result: undefined,
|
|
381
|
+
error: undefined,
|
|
382
|
+
started_at: undefined,
|
|
383
|
+
completed_at: undefined,
|
|
384
|
+
created_at: new Date().toISOString(),
|
|
385
|
+
updated_at: new Date().toISOString(),
|
|
386
|
+
});
|
|
387
|
+
return models_1.PlanStepModel.create(step_data);
|
|
388
|
+
});
|
|
389
|
+
await Promise.all(step_promises);
|
|
390
|
+
this.logger.info(`✅ Appended ${plan.length} steps to plan: ${plan_id} (starting from index ${start_index})`);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
exports.PlanReadyHandler = PlanReadyHandler;
|
|
394
|
+
//# sourceMappingURL=plan-ready-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-ready-handler.js","sourceRoot":"","sources":["../../../src/ai/response_handlers/plan-ready-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Request Input Handler
|
|
3
|
+
*
|
|
4
|
+
* Handles REQUEST_INPUT message_type from AgentResponse.
|
|
5
|
+
* This is a terminal response type that breaks the execution loop
|
|
6
|
+
* and sends the input request to the client.
|
|
7
|
+
*/
|
|
8
|
+
import { BaseHandler, HandlerContext, HandlerResult } from "./base-handler";
|
|
9
|
+
import { ChatMessage } from "../../lib/schemas";
|
|
10
|
+
export declare class RequestInputHandler extends BaseHandler {
|
|
11
|
+
can_handle(message_type: string | null, output_type: string, result: ChatMessage): boolean;
|
|
12
|
+
handle(result: ChatMessage, context: HandlerContext): Promise<HandlerResult>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=request-input-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-input-handler.d.ts","sourceRoot":"","sources":["../../../src/ai/response_handlers/request-input-handler.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAiB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE/D,qBAAa,mBAAoB,SAAQ,WAAW;IAChD,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO;IAIpF,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CAmFrF"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Request Input Handler
|
|
4
|
+
*
|
|
5
|
+
* Handles REQUEST_INPUT message_type from AgentResponse.
|
|
6
|
+
* This is a terminal response type that breaks the execution loop
|
|
7
|
+
* and sends the input request to the client.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.RequestInputHandler = void 0;
|
|
11
|
+
const base_handler_1 = require("./base-handler");
|
|
12
|
+
class RequestInputHandler extends base_handler_1.BaseHandler {
|
|
13
|
+
can_handle(message_type, output_type, result) {
|
|
14
|
+
return message_type === 'REQUEST_INPUT';
|
|
15
|
+
}
|
|
16
|
+
async handle(result, context) {
|
|
17
|
+
this.logger.info('Request input handler received result');
|
|
18
|
+
// Parse AgentResponse from text property (for GenerateContentResponse) or content (for ChatMessage)
|
|
19
|
+
let agent_response;
|
|
20
|
+
let content_str;
|
|
21
|
+
// It's a ChatMessage - extract from content
|
|
22
|
+
let content = result.content;
|
|
23
|
+
content_str = typeof content === 'string' ? content : JSON.stringify(content);
|
|
24
|
+
if (!content_str) {
|
|
25
|
+
this.logger.warn('⚠️ No text content in response');
|
|
26
|
+
return {
|
|
27
|
+
success: false,
|
|
28
|
+
result: [],
|
|
29
|
+
should_continue: false
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
// Use base handler extraction method to handle markdown, escape sequences, etc.
|
|
33
|
+
const extracted = this.extract_agent_response(content_str);
|
|
34
|
+
if (!extracted) {
|
|
35
|
+
this.logger.error('❌ Failed to extract AgentResponse from output_text');
|
|
36
|
+
return {
|
|
37
|
+
success: false,
|
|
38
|
+
result: [],
|
|
39
|
+
should_continue: false
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
agent_response = extracted;
|
|
43
|
+
content = agent_response.content || {};
|
|
44
|
+
const requested_inputs = content.requested_inputs || [];
|
|
45
|
+
// Try to extract step_id from executor context or step_result if available
|
|
46
|
+
const step_id = content.context?.step_id ||
|
|
47
|
+
content.step_result?.step_id ||
|
|
48
|
+
content.blocked_step ||
|
|
49
|
+
null;
|
|
50
|
+
if (requested_inputs.length === 0) {
|
|
51
|
+
this.logger.warn('⚠️ REQUEST_INPUT but no requested_inputs in content');
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
this.logger.info(`✅ Request input received - requesting ${requested_inputs.length} field(s) from user`);
|
|
55
|
+
this.logger.info(`Requested fields: ${requested_inputs.map((input) => input.field || input.label).join(', ')}`);
|
|
56
|
+
}
|
|
57
|
+
// Stream the request input to the client
|
|
58
|
+
if (this.streaming_utils) {
|
|
59
|
+
this.streaming_utils.write('request_input', {
|
|
60
|
+
requested_inputs: requested_inputs,
|
|
61
|
+
message: content.message || agent_response.message || 'Please provide the following information:',
|
|
62
|
+
step_id: step_id || undefined,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
// Append Gemini response to conversation history with role and parts
|
|
66
|
+
let updated_history = this.append_gemini_response_to_history([], result, agent_response);
|
|
67
|
+
// Append context to conversation history
|
|
68
|
+
const handler_context = {
|
|
69
|
+
request_input: {
|
|
70
|
+
requested_inputs: requested_inputs,
|
|
71
|
+
message: content.message || agent_response.message,
|
|
72
|
+
step_id: step_id || undefined,
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
updated_history = this.append_context_to_history(updated_history, handler_context);
|
|
76
|
+
// REQUEST_INPUT is terminal - break the loop and wait for user input
|
|
77
|
+
return {
|
|
78
|
+
success: true,
|
|
79
|
+
result: updated_history,
|
|
80
|
+
should_continue: false,
|
|
81
|
+
context: handler_context,
|
|
82
|
+
message_type: 'REQUEST_INPUT' // Terminal state
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.RequestInputHandler = RequestInputHandler;
|
|
87
|
+
//# sourceMappingURL=request-input-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-input-handler.js","sourceRoot":"","sources":["../../../src/ai/response_handlers/request-input-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Request Plan Handler
|
|
3
|
+
*
|
|
4
|
+
* Handles REQUEST_PLAN message_type from AgentResponse.
|
|
5
|
+
* Agent is requesting a plan from the planner.
|
|
6
|
+
*/
|
|
7
|
+
import { BaseHandler, HandlerContext, HandlerResult } from "./base-handler";
|
|
8
|
+
import { ChatMessage } from "../../lib/schemas";
|
|
9
|
+
export declare class RequestPlanHandler extends BaseHandler {
|
|
10
|
+
can_handle(message_type: string | null, output_type: string, input: ChatMessage): boolean;
|
|
11
|
+
handle(input: ChatMessage, context: HandlerContext): Promise<HandlerResult>;
|
|
12
|
+
/**
|
|
13
|
+
* Prepare input for PlannerAgent
|
|
14
|
+
* Formats the message for plan creation
|
|
15
|
+
*/
|
|
16
|
+
prepare_input(last_message: ChatMessage): ChatMessage[];
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=request-plan-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-plan-handler.d.ts","sourceRoot":"","sources":["../../../src/ai/response_handlers/request-plan-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAiB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAG/D,qBAAa,kBAAmB,SAAQ,WAAW;IAE/C,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO;IAInF,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAuHjF;;;OAGG;IACH,aAAa,CAAC,YAAY,EAAE,WAAW,GAAG,WAAW,EAAE;CAuB1D"}
|