@solidxai/core 0.1.10-beta.26 → 0.1.10-beta.28
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/.claude/settings.local.json +15 -0
- package/CLAUDE.md +26 -0
- package/MICROSOFT_ACTIVE_DIRECTORY_OAUTH_FLOW.md +616 -0
- package/ai-interaction-cleanup.sql +53 -0
- package/dist/constants/error-messages.d.ts +1 -0
- package/dist/constants/error-messages.d.ts.map +1 -1
- package/dist/constants/error-messages.js +1 -0
- package/dist/constants/error-messages.js.map +1 -1
- package/dist/controllers/microsoft-active-directory-authentication.controller.d.ts +28 -0
- package/dist/controllers/microsoft-active-directory-authentication.controller.d.ts.map +1 -0
- package/dist/controllers/microsoft-active-directory-authentication.controller.js +122 -0
- package/dist/controllers/microsoft-active-directory-authentication.controller.js.map +1 -0
- package/dist/controllers/service.controller.d.ts +1 -5
- package/dist/controllers/service.controller.d.ts.map +1 -1
- package/dist/controllers/service.controller.js +6 -11
- package/dist/controllers/service.controller.js.map +1 -1
- package/dist/controllers/test.controller.d.ts +1 -6
- package/dist/controllers/test.controller.d.ts.map +1 -1
- package/dist/controllers/test.controller.js +2 -20
- package/dist/controllers/test.controller.js.map +1 -1
- package/dist/dtos/create-permission-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/create-permission-metadata.dto.js +2 -0
- package/dist/dtos/create-permission-metadata.dto.js.map +1 -1
- package/dist/dtos/create-role-metadata.dto.d.ts +2 -0
- package/dist/dtos/create-role-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/create-role-metadata.dto.js +13 -1
- package/dist/dtos/create-role-metadata.dto.js.map +1 -1
- package/dist/dtos/import-instructions.dto.d.ts +2 -0
- package/dist/dtos/import-instructions.dto.d.ts.map +1 -1
- package/dist/dtos/import-instructions.dto.js +15 -1
- package/dist/dtos/import-instructions.dto.js.map +1 -1
- package/dist/dtos/update-permission-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/update-permission-metadata.dto.js +3 -1
- package/dist/dtos/update-permission-metadata.dto.js.map +1 -1
- package/dist/dtos/update-role-metadata.dto.d.ts +2 -0
- package/dist/dtos/update-role-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/update-role-metadata.dto.js +13 -1
- package/dist/dtos/update-role-metadata.dto.js.map +1 -1
- package/dist/entities/action-metadata.entity.d.ts.map +1 -1
- package/dist/entities/action-metadata.entity.js +1 -0
- package/dist/entities/action-metadata.entity.js.map +1 -1
- package/dist/entities/agent-event.entity.d.ts.map +1 -1
- package/dist/entities/agent-event.entity.js +1 -0
- package/dist/entities/agent-event.entity.js.map +1 -1
- package/dist/entities/agent-session.entity.d.ts.map +1 -1
- package/dist/entities/agent-session.entity.js +1 -0
- package/dist/entities/agent-session.entity.js.map +1 -1
- package/dist/entities/chatter-message.entity.d.ts.map +1 -1
- package/dist/entities/chatter-message.entity.js +2 -0
- package/dist/entities/chatter-message.entity.js.map +1 -1
- package/dist/entities/email-template.entity.d.ts.map +1 -1
- package/dist/entities/email-template.entity.js +1 -0
- package/dist/entities/email-template.entity.js.map +1 -1
- package/dist/entities/field-metadata.entity.d.ts.map +1 -1
- package/dist/entities/field-metadata.entity.js +4 -0
- package/dist/entities/field-metadata.entity.js.map +1 -1
- package/dist/entities/list-of-values.entity.d.ts.map +1 -1
- package/dist/entities/list-of-values.entity.js +4 -0
- package/dist/entities/list-of-values.entity.js.map +1 -1
- package/dist/entities/locale.entity.d.ts.map +1 -1
- package/dist/entities/locale.entity.js +1 -0
- package/dist/entities/locale.entity.js.map +1 -1
- package/dist/entities/media.entity.d.ts.map +1 -1
- package/dist/entities/media.entity.js +1 -0
- package/dist/entities/media.entity.js.map +1 -1
- package/dist/entities/menu-item-metadata.entity.d.ts.map +1 -1
- package/dist/entities/menu-item-metadata.entity.js +2 -0
- package/dist/entities/menu-item-metadata.entity.js.map +1 -1
- package/dist/entities/model-metadata.entity.d.ts.map +1 -1
- package/dist/entities/model-metadata.entity.js +3 -0
- package/dist/entities/model-metadata.entity.js.map +1 -1
- package/dist/entities/module-metadata.entity.d.ts.map +1 -1
- package/dist/entities/module-metadata.entity.js +2 -0
- package/dist/entities/module-metadata.entity.js.map +1 -1
- package/dist/entities/permission-metadata.entity.d.ts.map +1 -1
- package/dist/entities/permission-metadata.entity.js.map +1 -1
- package/dist/entities/role-metadata.entity.d.ts +2 -0
- package/dist/entities/role-metadata.entity.d.ts.map +1 -1
- package/dist/entities/role-metadata.entity.js +10 -2
- package/dist/entities/role-metadata.entity.js.map +1 -1
- package/dist/entities/saved-filters.entity.d.ts.map +1 -1
- package/dist/entities/saved-filters.entity.js +3 -0
- package/dist/entities/saved-filters.entity.js.map +1 -1
- package/dist/entities/scheduled-job.entity.d.ts.map +1 -1
- package/dist/entities/scheduled-job.entity.js +2 -0
- package/dist/entities/scheduled-job.entity.js.map +1 -1
- package/dist/entities/security-rule.entity.d.ts.map +1 -1
- package/dist/entities/security-rule.entity.js +1 -0
- package/dist/entities/security-rule.entity.js.map +1 -1
- package/dist/entities/sms-template.entity.d.ts.map +1 -1
- package/dist/entities/sms-template.entity.js +2 -0
- package/dist/entities/sms-template.entity.js.map +1 -1
- package/dist/entities/user-activity-history.entity.d.ts.map +1 -1
- package/dist/entities/user-activity-history.entity.js +1 -0
- package/dist/entities/user-activity-history.entity.js.map +1 -1
- package/dist/entities/user.entity.d.ts +3 -0
- package/dist/entities/user.entity.d.ts.map +1 -1
- package/dist/entities/user.entity.js +15 -1
- package/dist/entities/user.entity.js.map +1 -1
- package/dist/entities/view-metadata.entity.d.ts.map +1 -1
- package/dist/entities/view-metadata.entity.js +2 -0
- package/dist/entities/view-metadata.entity.js.map +1 -1
- package/dist/helpers/microsoft-active-directory-oauth.helper.d.ts +34 -0
- package/dist/helpers/microsoft-active-directory-oauth.helper.d.ts.map +1 -0
- package/dist/helpers/microsoft-active-directory-oauth.helper.js +43 -0
- package/dist/helpers/microsoft-active-directory-oauth.helper.js.map +1 -0
- package/dist/helpers/module.helper.js +0 -5
- package/dist/helpers/module.helper.js.map +1 -1
- package/dist/helpers/user-helper.d.ts.map +1 -1
- package/dist/helpers/user-helper.js +4 -0
- package/dist/helpers/user-helper.js.map +1 -1
- package/dist/index.d.ts +1 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -5
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +0 -8
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js.map +1 -1
- package/dist/passport-strategies/microsoft-active-directory-oauth.strategy.d.ts +14 -0
- package/dist/passport-strategies/microsoft-active-directory-oauth.strategy.d.ts.map +1 -0
- package/dist/passport-strategies/microsoft-active-directory-oauth.strategy.js +67 -0
- package/dist/passport-strategies/microsoft-active-directory-oauth.strategy.js.map +1 -0
- package/dist/seeders/seed-data/solid-core-metadata.json +317 -814
- package/dist/services/authentication.service.d.ts +12 -0
- package/dist/services/authentication.service.d.ts.map +1 -1
- package/dist/services/authentication.service.js +64 -0
- package/dist/services/authentication.service.js.map +1 -1
- package/dist/services/crud-helper.service.d.ts.map +1 -1
- package/dist/services/crud-helper.service.js +11 -3
- package/dist/services/crud-helper.service.js.map +1 -1
- package/dist/services/import-transaction.service.d.ts.map +1 -1
- package/dist/services/import-transaction.service.js +6 -0
- package/dist/services/import-transaction.service.js.map +1 -1
- package/dist/services/settings/default-settings-provider.service.d.ts +100 -0
- package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
- package/dist/services/settings/default-settings-provider.service.js +56 -0
- package/dist/services/settings/default-settings-provider.service.js.map +1 -1
- package/dist/services/user.service.d.ts +2 -0
- package/dist/services/user.service.d.ts.map +1 -1
- package/dist/services/user.service.js +46 -0
- package/dist/services/user.service.js.map +1 -1
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +4 -29
- package/dist/solid-core.module.js.map +1 -1
- package/dist/subscribers/scheduled-job.subscriber.js +1 -1
- package/dist/subscribers/scheduled-job.subscriber.js.map +1 -1
- package/dist/subscribers/security-rule.subscriber.js +1 -1
- package/dist/subscribers/security-rule.subscriber.js.map +1 -1
- package/package.json +4 -4
- package/src/constants/error-messages.ts +2 -1
- package/src/controllers/microsoft-active-directory-authentication.controller.ts +104 -0
- package/src/controllers/service.controller.ts +4 -7
- package/src/controllers/test.controller.ts +0 -9
- package/src/dtos/create-permission-metadata.dto.ts +3 -0
- package/src/dtos/create-role-metadata.dto.ts +11 -1
- package/src/dtos/import-instructions.dto.ts +11 -1
- package/src/dtos/update-permission-metadata.dto.ts +4 -1
- package/src/dtos/update-role-metadata.dto.ts +21 -1
- package/src/entities/action-metadata.entity.ts +1 -0
- package/src/entities/agent-event.entity.ts +1 -0
- package/src/entities/agent-session.entity.ts +1 -0
- package/src/entities/chatter-message.entity.ts +2 -0
- package/src/entities/email-template.entity.ts +1 -0
- package/src/entities/field-metadata.entity.ts +4 -1
- package/src/entities/list-of-values.entity.ts +5 -1
- package/src/entities/locale.entity.ts +1 -0
- package/src/entities/media.entity.ts +1 -0
- package/src/entities/menu-item-metadata.entity.ts +2 -0
- package/src/entities/model-metadata.entity.ts +3 -0
- package/src/entities/module-metadata.entity.ts +2 -0
- package/src/entities/permission-metadata.entity.ts +2 -2
- package/src/entities/role-metadata.entity.ts +11 -3
- package/src/entities/saved-filters.entity.ts +3 -0
- package/src/entities/scheduled-job.entity.ts +2 -0
- package/src/entities/security-rule.entity.ts +1 -0
- package/src/entities/sms-template.entity.ts +2 -0
- package/src/entities/user-activity-history.entity.ts +1 -0
- package/src/entities/user.entity.ts +15 -1
- package/src/entities/view-metadata.entity.ts +2 -0
- package/src/helpers/microsoft-active-directory-oauth.helper.ts +83 -0
- package/src/helpers/module.helper.ts +5 -5
- package/src/helpers/user-helper.ts +5 -1
- package/src/index.ts +1 -5
- package/src/interfaces.ts +0 -8
- package/src/passport-strategies/microsoft-active-directory-oauth.strategy.ts +63 -0
- package/src/seeders/seed-data/solid-core-metadata.json +317 -814
- package/src/services/1.js +6 -0
- package/src/services/authentication.service.ts +78 -0
- package/src/services/crud-helper.service.ts +9 -3
- package/src/services/import-transaction.service.ts +11 -1
- package/src/services/settings/default-settings-provider.service.ts +59 -0
- package/src/services/user.service.ts +61 -0
- package/src/solid-core.module.ts +4 -31
- package/src/subscribers/scheduled-job.subscriber.ts +1 -1
- package/src/subscribers/security-rule.subscriber.ts +1 -1
- package/dist/commands/ingest.command.d.ts +0 -16
- package/dist/commands/ingest.command.d.ts.map +0 -1
- package/dist/commands/ingest.command.js +0 -50
- package/dist/commands/ingest.command.js.map +0 -1
- package/dist/controllers/ai-interaction.controller.d.ts +0 -29
- package/dist/controllers/ai-interaction.controller.d.ts.map +0 -1
- package/dist/controllers/ai-interaction.controller.js +0 -218
- package/dist/controllers/ai-interaction.controller.js.map +0 -1
- package/dist/dtos/create-ai-interaction.dto.d.ts +0 -23
- package/dist/dtos/create-ai-interaction.dto.d.ts.map +0 -1
- package/dist/dtos/create-ai-interaction.dto.js +0 -149
- package/dist/dtos/create-ai-interaction.dto.js.map +0 -1
- package/dist/dtos/invoke-ai-prompt.dto.d.ts +0 -5
- package/dist/dtos/invoke-ai-prompt.dto.d.ts.map +0 -1
- package/dist/dtos/invoke-ai-prompt.dto.js +0 -30
- package/dist/dtos/invoke-ai-prompt.dto.js.map +0 -1
- package/dist/dtos/update-ai-interaction.dto.d.ts +0 -24
- package/dist/dtos/update-ai-interaction.dto.d.ts.map +0 -1
- package/dist/dtos/update-ai-interaction.dto.js +0 -150
- package/dist/dtos/update-ai-interaction.dto.js.map +0 -1
- package/dist/entities/ai-interaction.entity.d.ts +0 -24
- package/dist/entities/ai-interaction.entity.d.ts.map +0 -1
- package/dist/entities/ai-interaction.entity.js +0 -116
- package/dist/entities/ai-interaction.entity.js.map +0 -1
- package/dist/jobs/database/trigger-mcp-client-publisher-database.service.d.ts +0 -11
- package/dist/jobs/database/trigger-mcp-client-publisher-database.service.d.ts.map +0 -1
- package/dist/jobs/database/trigger-mcp-client-publisher-database.service.js +0 -39
- package/dist/jobs/database/trigger-mcp-client-publisher-database.service.js.map +0 -1
- package/dist/jobs/database/trigger-mcp-client-queue-options.d.ts +0 -8
- package/dist/jobs/database/trigger-mcp-client-queue-options.d.ts.map +0 -1
- package/dist/jobs/database/trigger-mcp-client-queue-options.js +0 -10
- package/dist/jobs/database/trigger-mcp-client-queue-options.js.map +0 -1
- package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts +0 -25
- package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts.map +0 -1
- package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js +0 -222
- package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js.map +0 -1
- package/dist/jobs/rabbitmq/trigger-mcp-client-publisher.service.d.ts +0 -11
- package/dist/jobs/rabbitmq/trigger-mcp-client-publisher.service.d.ts.map +0 -1
- package/dist/jobs/rabbitmq/trigger-mcp-client-publisher.service.js +0 -39
- package/dist/jobs/rabbitmq/trigger-mcp-client-publisher.service.js.map +0 -1
- package/dist/jobs/rabbitmq/trigger-mcp-client-queue-options.d.ts +0 -8
- package/dist/jobs/rabbitmq/trigger-mcp-client-queue-options.d.ts.map +0 -1
- package/dist/jobs/rabbitmq/trigger-mcp-client-queue-options.js +0 -10
- package/dist/jobs/rabbitmq/trigger-mcp-client-queue-options.js.map +0 -1
- package/dist/jobs/rabbitmq/trigger-mcp-client-subscriber.service.d.ts +0 -18
- package/dist/jobs/rabbitmq/trigger-mcp-client-subscriber.service.d.ts.map +0 -1
- package/dist/jobs/rabbitmq/trigger-mcp-client-subscriber.service.js +0 -103
- package/dist/jobs/rabbitmq/trigger-mcp-client-subscriber.service.js.map +0 -1
- package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.d.ts +0 -11
- package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.d.ts.map +0 -1
- package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.js +0 -39
- package/dist/jobs/redis/trigger-mcp-client-publisher-redis.service.js.map +0 -1
- package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.d.ts +0 -8
- package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.d.ts.map +0 -1
- package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.js +0 -10
- package/dist/jobs/redis/trigger-mcp-client-queue-options-redis.js.map +0 -1
- package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.d.ts +0 -18
- package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.d.ts.map +0 -1
- package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.js +0 -103
- package/dist/jobs/redis/trigger-mcp-client-subscriber-redis.service.js.map +0 -1
- package/dist/repository/ai-interaction.repository.d.ts +0 -12
- package/dist/repository/ai-interaction.repository.d.ts.map +0 -1
- package/dist/repository/ai-interaction.repository.js +0 -34
- package/dist/repository/ai-interaction.repository.js.map +0 -1
- package/dist/services/ai-interaction.service.d.ts +0 -23
- package/dist/services/ai-interaction.service.d.ts.map +0 -1
- package/dist/services/ai-interaction.service.js +0 -217
- package/dist/services/ai-interaction.service.js.map +0 -1
- package/dist/services/genai/ingest-metadata.service.d.ts +0 -38
- package/dist/services/genai/ingest-metadata.service.d.ts.map +0 -1
- package/dist/services/genai/ingest-metadata.service.js +0 -542
- package/dist/services/genai/ingest-metadata.service.js.map +0 -1
- package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.d.ts +0 -9
- package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.d.ts.map +0 -1
- package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.js +0 -39
- package/dist/services/genai/mcp-handlers/mcp-handler-factory.service.js.map +0 -1
- package/dist/services/genai/r2r-helper.service.d.ts +0 -9
- package/dist/services/genai/r2r-helper.service.d.ts.map +0 -1
- package/dist/services/genai/r2r-helper.service.js +0 -40
- package/dist/services/genai/r2r-helper.service.js.map +0 -1
- package/dist-tests/api/authenticate.spec.js +0 -119
- package/dist-tests/api/authenticate.spec.js.map +0 -1
- package/dist-tests/api/crud-service.findOne.cityMaster.spec.js +0 -97
- package/dist-tests/api/crud-service.findOne.cityMaster.spec.js.map +0 -1
- package/dist-tests/api/ping.spec.js +0 -21
- package/dist-tests/api/ping.spec.js.map +0 -1
- package/dist-tests/helpers/auth.js +0 -41
- package/dist-tests/helpers/auth.js.map +0 -1
- package/dist-tests/helpers/env.js +0 -11
- package/dist-tests/helpers/env.js.map +0 -1
- package/docs/dashboards/AGENTIC_DASHBOARD_IMPLEMENTATION_PLAN.md +0 -438
- package/docs/dashboards/dashboard-curl-smoke-tests.txt +0 -146
- package/docs/dashboards/delete-legacy-dashboard-metadata.sql +0 -172
- package/docs/grouping-enhancements.md +0 -89
- package/docs/java-spring/README.md +0 -3
- package/docs/java-spring/solid-core-module-deep-dive-report.md +0 -1317
- package/docs/module-package-import-handoff.md +0 -691
- package/docs/seed-changes.md +0 -65
- package/docs/test-data-workflow.md +0 -200
- package/docs/type-declaration-import-issue.md +0 -24
- package/src/commands/ingest.command.ts +0 -36
- package/src/controllers/ai-interaction.controller.ts +0 -112
- package/src/dtos/create-ai-interaction.dto.ts +0 -89
- package/src/dtos/invoke-ai-prompt.dto.ts +0 -10
- package/src/dtos/update-ai-interaction.dto.ts +0 -93
- package/src/entities/ai-interaction.entity.ts +0 -71
- package/src/jobs/database/trigger-mcp-client-publisher-database.service.ts +0 -22
- package/src/jobs/database/trigger-mcp-client-queue-options.ts +0 -9
- package/src/jobs/database/trigger-mcp-client-subscriber-database.service.ts +0 -278
- package/src/jobs/rabbitmq/trigger-mcp-client-publisher.service.ts +0 -22
- package/src/jobs/rabbitmq/trigger-mcp-client-queue-options.ts +0 -9
- package/src/jobs/rabbitmq/trigger-mcp-client-subscriber.service.ts +0 -104
- package/src/jobs/redis/trigger-mcp-client-publisher-redis.service.ts +0 -23
- package/src/jobs/redis/trigger-mcp-client-queue-options-redis.ts +0 -9
- package/src/jobs/redis/trigger-mcp-client-subscriber-redis.service.ts +0 -98
- package/src/repository/ai-interaction.repository.ts +0 -17
- package/src/services/ai-interaction.service.ts +0 -239
- package/src/services/genai/ingest-metadata.service.ts +0 -798
- package/src/services/genai/mcp-handlers/mcp-handler-factory.service.ts +0 -33
- package/src/services/genai/r2r-helper.service.ts +0 -37
|
@@ -1,239 +0,0 @@
|
|
|
1
|
-
import { BadRequestException, Injectable, Logger } from '@nestjs/common';
|
|
2
|
-
import { ModuleRef } from "@nestjs/core";
|
|
3
|
-
import { InjectEntityManager } from '@nestjs/typeorm';
|
|
4
|
-
import { EntityManager } from 'typeorm';
|
|
5
|
-
import type { SolidCoreSetting } from "src/services/settings/default-settings-provider.service";
|
|
6
|
-
|
|
7
|
-
import { spawn } from 'child_process';
|
|
8
|
-
import * as fs from 'fs/promises';
|
|
9
|
-
import { ERROR_MESSAGES } from 'src/constants/error-messages';
|
|
10
|
-
import { InvokeAiPromptDto } from 'src/dtos/invoke-ai-prompt.dto';
|
|
11
|
-
import { McpResponse, TriggerMcpClientOptions } from 'src/interfaces';
|
|
12
|
-
import { AiInteractionRepository } from 'src/repository/ai-interaction.repository';
|
|
13
|
-
import { CRUDService } from 'src/services/crud.service';
|
|
14
|
-
import { AiInteraction } from '../entities/ai-interaction.entity';
|
|
15
|
-
import { McpHandlerFactory } from './genai/mcp-handlers/mcp-handler-factory.service';
|
|
16
|
-
import { PublisherFactory } from './queues/publisher-factory.service';
|
|
17
|
-
|
|
18
|
-
@Injectable()
|
|
19
|
-
export class AiInteractionService extends CRUDService<AiInteraction> {
|
|
20
|
-
private readonly logger = new Logger(AiInteractionService.name);
|
|
21
|
-
|
|
22
|
-
constructor(
|
|
23
|
-
@InjectEntityManager()
|
|
24
|
-
readonly entityManager: EntityManager,
|
|
25
|
-
// @InjectRepository(AiInteraction, 'default')
|
|
26
|
-
// readonly repo: Repository<AiInteraction>,
|
|
27
|
-
readonly repo: AiInteractionRepository,
|
|
28
|
-
readonly moduleRef: ModuleRef,
|
|
29
|
-
readonly publisherFactory: PublisherFactory<TriggerMcpClientOptions>,
|
|
30
|
-
// readonly requestContextService: RequestContextService,
|
|
31
|
-
readonly mcpHandlerFactory: McpHandlerFactory,
|
|
32
|
-
|
|
33
|
-
) {
|
|
34
|
-
super(entityManager, repo, 'aiInteraction', 'solid-core', moduleRef);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
async triggerMcpClientJob(dto: InvokeAiPromptDto, userId: number, isAutoApply: boolean = false, threadId: string = null): Promise<any> {
|
|
38
|
-
// const activeUser: ActiveUserData = this.requestContextService.getActiveUser();
|
|
39
|
-
|
|
40
|
-
const aiInteraction = await this.create({
|
|
41
|
-
userId: userId,
|
|
42
|
-
threadId: threadId ? threadId : `thread-${userId}`,
|
|
43
|
-
role: 'human',
|
|
44
|
-
message: dto.prompt,
|
|
45
|
-
contentType: '',
|
|
46
|
-
errorMessage: '',
|
|
47
|
-
modelUsed: '',
|
|
48
|
-
responseTimeMs: 0,
|
|
49
|
-
metadata: '',
|
|
50
|
-
isAutoApply: isAutoApply
|
|
51
|
-
});
|
|
52
|
-
const m = {
|
|
53
|
-
payload: {
|
|
54
|
-
aiInteractionId: aiInteraction.id,
|
|
55
|
-
moduleName: dto.moduleName
|
|
56
|
-
},
|
|
57
|
-
parentEntity: 'aiInteraction',
|
|
58
|
-
parentEntityId: aiInteraction.id,
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
const queueMessageId = await this.publisherFactory.publish(m, 'TriggerMcpClientPublisher');
|
|
62
|
-
|
|
63
|
-
return {
|
|
64
|
-
queueMessageId: queueMessageId,
|
|
65
|
-
aiInteractionId: aiInteraction.id
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Runs the Python MCP client with a prompt and returns the parsed JSON embedded in the 'response'.
|
|
71
|
-
* @param prompt - The question or instruction to send to the MCP client.
|
|
72
|
-
* @returns The parsed object inside the 'response' field of the JSON output.
|
|
73
|
-
*/
|
|
74
|
-
async runMcpPrompt(prompt: string): Promise<McpResponse> {
|
|
75
|
-
const pythonExecutable = this.settingService.getConfigValue<SolidCoreSetting>('mcpPythonExecutable');
|
|
76
|
-
const mcpClient = this.settingService.getConfigValue<SolidCoreSetting>('mcpClient');
|
|
77
|
-
|
|
78
|
-
// TODO: We can return an error if the above env variables are not properly setup...
|
|
79
|
-
if (!pythonExecutable || !mcpClient) {
|
|
80
|
-
throw new BadRequestException(ERROR_MESSAGES.PYTHON_EXECUTABLE_NOT_CONFIGURED);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
// Check if both paths are valid and accessible
|
|
84
|
-
try {
|
|
85
|
-
const [pyStat, clientStat] = await Promise.all([
|
|
86
|
-
fs.stat(pythonExecutable),
|
|
87
|
-
fs.stat(mcpClient),
|
|
88
|
-
]);
|
|
89
|
-
|
|
90
|
-
if (!pyStat.isFile()) {
|
|
91
|
-
throw new BadRequestException(`MCP_PYTHON_EXECUTABLE path is not a file: ${pythonExecutable}`);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
if (!clientStat.isFile()) {
|
|
95
|
-
throw new BadRequestException(`MCP_CLIENT path is not a file: ${mcpClient}`);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
} catch (err: any) {
|
|
99
|
-
throw new BadRequestException(`Invalid MCP executable or client path: ${err.message}`);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// TODO: Refactor to use the command.service.ts instead...
|
|
103
|
-
return new Promise((resolve, reject) => {
|
|
104
|
-
this.logger.log(`Attempting to run command:`)
|
|
105
|
-
this.logger.log(`${pythonExecutable} ${mcpClient} "${prompt}"`);
|
|
106
|
-
|
|
107
|
-
const python = spawn(pythonExecutable, [mcpClient, `"${prompt}"`]);
|
|
108
|
-
|
|
109
|
-
let stdout = '';
|
|
110
|
-
let stderr = '';
|
|
111
|
-
|
|
112
|
-
python.stdout.on('data', (data) => {
|
|
113
|
-
stdout += data.toString();
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
python.stderr.on('data', (data) => {
|
|
117
|
-
stderr += data.toString();
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
python.on('close', (code) => {
|
|
121
|
-
this.logger.log(`Python script exited with code ${code}`);
|
|
122
|
-
|
|
123
|
-
if (code !== 0) {
|
|
124
|
-
this.logger.error(`Python script exited with a non-zero exit code: ${stderr}`);
|
|
125
|
-
return reject(new Error(`Python script exited with a non-zero exit code: ${stderr}`));
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
try {
|
|
129
|
-
this.logger.log(`Python script exited with zero exit code: ${stdout}`);
|
|
130
|
-
const raw: McpResponse = JSON.parse(stdout);
|
|
131
|
-
|
|
132
|
-
// Sometimes the raw.response might not be a valid json
|
|
133
|
-
// TODO: examine the content type of the raw response..
|
|
134
|
-
// if (raw.content_type==='json') {
|
|
135
|
-
// }
|
|
136
|
-
let parsedResponse = raw.response;
|
|
137
|
-
try {
|
|
138
|
-
parsedResponse = JSON.parse(raw.response);
|
|
139
|
-
}
|
|
140
|
-
catch (ex) {
|
|
141
|
-
this.logger.warn(`Attempting to parse mcp client response assuming it is JSON, however it is not: ${parsedResponse}`);
|
|
142
|
-
// raw.success = false
|
|
143
|
-
}
|
|
144
|
-
// Parse the response string into an object
|
|
145
|
-
// const parsedResponse = JSON.parse(raw.response);
|
|
146
|
-
|
|
147
|
-
// Replace the string with the parsed object
|
|
148
|
-
const enrichedRaw = {
|
|
149
|
-
...raw,
|
|
150
|
-
response: parsedResponse,
|
|
151
|
-
};
|
|
152
|
-
// if (!raw.success) {
|
|
153
|
-
// return reject(new Error(`MCP error: ${raw.errors?.join(', ')}`));
|
|
154
|
-
// }
|
|
155
|
-
// let cleaned = raw.response.trim();
|
|
156
|
-
|
|
157
|
-
// Don't need to re-parse this...
|
|
158
|
-
// const parsed = JSON.parse(cleaned);
|
|
159
|
-
// resolve(cleaned);
|
|
160
|
-
|
|
161
|
-
resolve(enrichedRaw);
|
|
162
|
-
} catch (err: any) {
|
|
163
|
-
reject(new Error(`Mcp Invocation Failed: ${err.message}`));
|
|
164
|
-
}
|
|
165
|
-
});
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
cleanResponse(response: string) {
|
|
170
|
-
this.logger.log(`mcp server response is: ${response}`);
|
|
171
|
-
|
|
172
|
-
// Remove markdown-style code block wrapper
|
|
173
|
-
if (response.startsWith('```json')) {
|
|
174
|
-
response = response.replace(/^```json/, '').trim();
|
|
175
|
-
}
|
|
176
|
-
if (response.endsWith('```')) {
|
|
177
|
-
response = response.replace(/```$/, '').trim();
|
|
178
|
-
}
|
|
179
|
-
this.logger.log(`mcp server response after removing doc tags is: ${response}`);
|
|
180
|
-
|
|
181
|
-
return response;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
async applySolidAiInteraction(id: number) {
|
|
185
|
-
// Fetch the aiInteraction
|
|
186
|
-
const aiInteraction = await this.findOne(id, {
|
|
187
|
-
populate: ['user']
|
|
188
|
-
});
|
|
189
|
-
if (!aiInteraction) {
|
|
190
|
-
const m = `Unable to identified the aiInteraction entry that triggered this job... using id: ${id}`
|
|
191
|
-
|
|
192
|
-
// TODO: RESPONSE SHAPE ALERT Check if we want to control the shape of the response....
|
|
193
|
-
throw new Error(m);
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
// TODO: Validation: Check if JSON.parse(metadata).tools_invoked starts with solid_
|
|
197
|
-
let metadata: any = {};
|
|
198
|
-
try {
|
|
199
|
-
if (typeof aiInteraction.metadata === "string") {
|
|
200
|
-
metadata = JSON.parse(aiInteraction.metadata);
|
|
201
|
-
} else if (typeof aiInteraction.metadata === "object" && aiInteraction.metadata !== null) {
|
|
202
|
-
metadata = aiInteraction.metadata;
|
|
203
|
-
} else {
|
|
204
|
-
// optional fallback
|
|
205
|
-
metadata = {};
|
|
206
|
-
}
|
|
207
|
-
} catch (e) {
|
|
208
|
-
// TODO: RESPONSE SHAPE ALERT Check if we want to control the shape of the response....
|
|
209
|
-
throw new Error(`Invalid metadata JSON: ${e}`);
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
const toolsInvoked = metadata['tools_invoked'];
|
|
213
|
-
if (!toolsInvoked) {
|
|
214
|
-
// TODO: RESPONSE SHAPE ALERT Check if we want to control the shape of the response....
|
|
215
|
-
throw new Error(ERROR_MESSAGES.UNABLE_TO_RESOLVE_SOLID_COMMAND);
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
// TODO: OPTIMISATION for chained tool invocation, for now we are assuming only 1 tool was used.
|
|
219
|
-
const toolInvoked = toolsInvoked[0];
|
|
220
|
-
|
|
221
|
-
// TODO: use the toolInvoked to identify a service using some convention.
|
|
222
|
-
// TODO: Eg. if toolInvoked is solid_create_module <> SolidCreateModuleMcpToolHandler ... create a factory class to do this mapping and identify the relevant provider.
|
|
223
|
-
const mcpToolHandler = this.mcpHandlerFactory.getInstance(toolInvoked);
|
|
224
|
-
if (!mcpToolHandler) {
|
|
225
|
-
// TODO: RESPONSE SHAPE ALERT Check if we want to control the shape of the response....
|
|
226
|
-
throw new Error(ERROR_MESSAGES.UNABLE_TO_RESOLVE_MCP_HANDLER);
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
const handlerApplicationResponse = await mcpToolHandler.apply(aiInteraction);
|
|
230
|
-
|
|
231
|
-
// TODO: This provider to implement an interface - IMcpToolResponseHandler ... apply(aiInteraction: AiInteraction)
|
|
232
|
-
// throw new Error('Method not implemented.');
|
|
233
|
-
|
|
234
|
-
// Mark the interaction as applied
|
|
235
|
-
await this.update(aiInteraction.id, { isApplied: true }, [], true);
|
|
236
|
-
|
|
237
|
-
return handlerApplicationResponse;
|
|
238
|
-
}
|
|
239
|
-
}
|