@solidstarters/solid-core 1.2.139 → 1.2.140

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.
Files changed (41) hide show
  1. package/dist/services/mcp-tool-response-handlers/mcp-tool-response-handler-factory.service.d.ts +1 -1
  2. package/dist/services/mcp-tool-response-handlers/mcp-tool-response-handler-factory.service.d.ts.map +1 -1
  3. package/dist/services/mcp-tool-response-handlers/mcp-tool-response-handler-factory.service.js +1 -2
  4. package/dist/services/mcp-tool-response-handlers/mcp-tool-response-handler-factory.service.js.map +1 -1
  5. package/dist/services/mcp-tool-response-handlers/solid-add-field-mcp-tool-response-handler.service.d.ts +16 -0
  6. package/dist/services/mcp-tool-response-handlers/solid-add-field-mcp-tool-response-handler.service.d.ts.map +1 -0
  7. package/dist/services/mcp-tool-response-handlers/solid-add-field-mcp-tool-response-handler.service.js +48 -0
  8. package/dist/services/mcp-tool-response-handlers/solid-add-field-mcp-tool-response-handler.service.js.map +1 -0
  9. package/dist/services/mcp-tool-response-handlers/solid-create-dashboard-mcp-tool-response-handler.service.d.ts +12 -0
  10. package/dist/services/mcp-tool-response-handlers/solid-create-dashboard-mcp-tool-response-handler.service.d.ts.map +1 -0
  11. package/dist/services/mcp-tool-response-handlers/solid-create-dashboard-mcp-tool-response-handler.service.js +38 -0
  12. package/dist/services/mcp-tool-response-handlers/solid-create-dashboard-mcp-tool-response-handler.service.js.map +1 -0
  13. package/dist/services/mcp-tool-response-handlers/solid-create-dashboard-question-mcp-tool-response-handler.service.d.ts +12 -0
  14. package/dist/services/mcp-tool-response-handlers/solid-create-dashboard-question-mcp-tool-response-handler.service.d.ts.map +1 -0
  15. package/dist/services/mcp-tool-response-handlers/solid-create-dashboard-question-mcp-tool-response-handler.service.js +37 -0
  16. package/dist/services/mcp-tool-response-handlers/solid-create-dashboard-question-mcp-tool-response-handler.service.js.map +1 -0
  17. package/dist/services/mcp-tool-response-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-tool-response-handler.service.d.ts +12 -0
  18. package/dist/services/mcp-tool-response-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-tool-response-handler.service.d.ts.map +1 -0
  19. package/dist/services/mcp-tool-response-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-tool-response-handler.service.js +38 -0
  20. package/dist/services/mcp-tool-response-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-tool-response-handler.service.js.map +1 -0
  21. package/dist/services/mcp-tool-response-handlers/solid-create-dashboard-widget-mcp-tool-response-handler.service.d.ts +12 -0
  22. package/dist/services/mcp-tool-response-handlers/solid-create-dashboard-widget-mcp-tool-response-handler.service.d.ts.map +1 -0
  23. package/dist/services/mcp-tool-response-handlers/solid-create-dashboard-widget-mcp-tool-response-handler.service.js +38 -0
  24. package/dist/services/mcp-tool-response-handlers/solid-create-dashboard-widget-mcp-tool-response-handler.service.js.map +1 -0
  25. package/dist/services/mcp-tool-response-handlers/solid-create-model-with-fields-mcp-tool-response-handler.service.d.ts +16 -0
  26. package/dist/services/mcp-tool-response-handlers/solid-create-model-with-fields-mcp-tool-response-handler.service.d.ts.map +1 -0
  27. package/dist/services/mcp-tool-response-handlers/solid-create-model-with-fields-mcp-tool-response-handler.service.js +47 -0
  28. package/dist/services/mcp-tool-response-handlers/solid-create-model-with-fields-mcp-tool-response-handler.service.js.map +1 -0
  29. package/dist/solid-core.module.d.ts.map +1 -1
  30. package/dist/solid-core.module.js +15 -3
  31. package/dist/solid-core.module.js.map +1 -1
  32. package/dist/tsconfig.tsbuildinfo +1 -1
  33. package/package.json +1 -1
  34. package/src/services/mcp-tool-response-handlers/mcp-tool-response-handler-factory.service.ts +2 -4
  35. package/src/services/mcp-tool-response-handlers/solid-add-field-mcp-tool-response-handler.service.ts +56 -0
  36. package/src/services/mcp-tool-response-handlers/solid-create-dashboard-mcp-tool-response-handler.service.ts +39 -0
  37. package/src/services/mcp-tool-response-handlers/solid-create-dashboard-question-mcp-tool-response-handler.service.ts +38 -0
  38. package/src/services/mcp-tool-response-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-tool-response-handler.service.ts +40 -0
  39. package/src/services/mcp-tool-response-handlers/solid-create-dashboard-widget-mcp-tool-response-handler.service.ts +39 -0
  40. package/src/services/mcp-tool-response-handlers/solid-create-model-with-fields-mcp-tool-response-handler.service.ts +46 -0
  41. package/src/solid-core.module.ts +16 -4
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solidstarters/solid-core",
3
- "version": "1.2.139",
3
+ "version": "1.2.140",
4
4
  "description": "This module is a NestJS module containing all the required core providers required by a Solid application",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,10 +1,8 @@
1
- import { Logger } from '@nestjs/common';
2
- import { Injectable } from '@nestjs/common';
1
+ import { Injectable, Logger } from '@nestjs/common';
3
2
 
4
- import { QueueMessage, QueuePublisher } from 'src/interfaces/mq';
5
3
  import { classify } from '@angular-devkit/core/src/utils/strings';
6
- import { SolidIntrospectService } from '../solid-introspect.service';
7
4
  import { IMcpToolResponseHandler } from 'src/interfaces';
5
+ import { SolidIntrospectService } from '../solid-introspect.service';
8
6
 
9
7
 
10
8
  @Injectable()
@@ -0,0 +1,56 @@
1
+ import { Injectable } from "@nestjs/common";
2
+ import { UpdateModelMetaDataDto } from "src/dtos/update-model-metadata.dto";
3
+ import { AiInteraction } from "src/entities/ai-interaction.entity";
4
+ import { FieldMetadata } from "src/entities/field-metadata.entity";
5
+ import { SolidRegistry } from "src/helpers/solid-registry";
6
+ import { IMcpToolResponseHandler } from "../../interfaces";
7
+ import { FieldMetadataService } from "../field-metadata.service";
8
+ import { ModelMetadataService } from "../model-metadata.service";
9
+
10
+ @Injectable()
11
+ // solid_add_field
12
+ export class SolidAddFieldMcpToolResponseHandler implements IMcpToolResponseHandler {
13
+
14
+ constructor(
15
+ private readonly modelMetadataService: ModelMetadataService,
16
+ private readonly fieldMetadataService: FieldMetadataService,
17
+ private readonly solidRegistry: SolidRegistry,
18
+ ) {
19
+ }
20
+
21
+ async apply(aiInteraction: AiInteraction) {
22
+ // const aiResponse = JSON.parse(aiInteraction.message);
23
+ const escapedMessage = aiInteraction.message.replace(/\\'/g, "'");
24
+ const aiResponse = JSON.parse(escapedMessage);
25
+
26
+ const { modelUserKey, fieldSchema } = aiResponse;
27
+
28
+ // TODO: Validate if another field with same name exists, if it does then raise an error...
29
+
30
+ // TODO: load the model with the fields.
31
+ const modelMetadata = await this.modelMetadataService.findOneByUserKey(modelUserKey, ['fields']);
32
+ if (!modelMetadata) {
33
+ throw new Error(`Model with user key ${modelUserKey} not found.`);
34
+ }
35
+
36
+ // Add the fieldSchema to the model fields array
37
+ fieldSchema['modelId'] = modelMetadata.id;
38
+ modelMetadata.fields.push(fieldSchema as FieldMetadata);
39
+
40
+ const modelObj = await this.modelMetadataService.update(modelMetadata.id, modelMetadata as unknown as UpdateModelMetaDataDto);
41
+
42
+
43
+ // This creates the module-metadata.json file....
44
+ // const modelObj = await this.fieldMetadataService.create(fieldSchema as CreateFieldMetadataDto);
45
+
46
+ // Now we need to run solid seed & then solid refresh-model --name <module-name>
47
+ await this.modelMetadataService.handleGenerateCode({ modelId: modelMetadata.id });
48
+
49
+ // TODO: decide on some shape to return hre...
50
+ return {
51
+ seedingRequired: true,
52
+ serverRebooting: true,
53
+ }
54
+ }
55
+
56
+ }
@@ -0,0 +1,39 @@
1
+ import { Injectable } from "@nestjs/common";
2
+ import { plainToInstance } from "class-transformer";
3
+ import { CreateDashboardDto } from "src/dtos/create-dashboard.dto";
4
+ import { AiInteraction } from "src/entities/ai-interaction.entity";
5
+ import { IMcpToolResponseHandler } from "../../interfaces";
6
+ import { DashboardService } from "../dashboard.service";
7
+
8
+ @Injectable()
9
+ export class SolidCreateDashboardMcpToolResponseHandler implements IMcpToolResponseHandler {
10
+
11
+ constructor(
12
+ private readonly dashboardService: DashboardService,
13
+ ) {
14
+ }
15
+
16
+ async apply(aiInteraction: AiInteraction) {
17
+ const escapedMessage = aiInteraction.message.replace(/\\'/g, "'");
18
+ const aiResponseMessage = JSON.parse(escapedMessage);
19
+
20
+ // const aiResponse = JSON.parse(aiInteraction.message);
21
+
22
+ //FIXME: Replace \' with ' in the response, since the AI response seems to contain \' which is invalid JSON.
23
+ // This is a workaround for now, until we find a better solution.
24
+ // const aiResponseMessageReplaced = aiResponse['message'].replace(/\\'/g, "'");
25
+
26
+ const dashboardDto = plainToInstance(CreateDashboardDto, aiResponseMessage);
27
+ dashboardDto['layoutJson'] = JSON.stringify(dashboardDto['layoutJson']);
28
+
29
+
30
+ const dashboard = await this.dashboardService.create(dashboardDto, []);
31
+
32
+ // TODO: decide on some shape to return hre...
33
+ return {
34
+ seedingRequired: false,
35
+ serverRebooting: false,
36
+ }
37
+ }
38
+
39
+ }
@@ -0,0 +1,38 @@
1
+ import { Injectable } from "@nestjs/common";
2
+ import { plainToInstance } from "class-transformer";
3
+ import { CreateDashboardQuestionDto } from "src/dtos/create-dashboard-question.dto";
4
+ import { AiInteraction } from "src/entities/ai-interaction.entity";
5
+ import { IMcpToolResponseHandler } from "../../interfaces";
6
+ import { DashboardQuestionService } from "../dashboard-question.service";
7
+
8
+ @Injectable()
9
+ export class SolidCreateDashboardQuestionMcpToolResponseHandler implements IMcpToolResponseHandler {
10
+
11
+ constructor(
12
+ private readonly dashboardQuestionService: DashboardQuestionService,
13
+ ) {
14
+ }
15
+
16
+ async apply(aiInteraction: AiInteraction) {
17
+ const escapedMessage = aiInteraction.message.replace(/\\'/g, "'");
18
+ const aiResponseMessage = JSON.parse(escapedMessage);
19
+
20
+ //FIXME: Replace \' with ' in the response, since the AI response seems to contain \' which is invalid JSON.
21
+ // This is a workaround for now, until we find a better solution.
22
+ // const aiResponseMessageReplaced = aiResponseMessage['message'].replace(/\\'/g, "'");
23
+ // const dashboardUserKey = aiResponseMessageReplaced['dashboardUserKey'];
24
+ // if (!dashboardUserKey) {
25
+ // throw new Error("Dashboard User Key is required to create a Dashboard Question.");
26
+ // }
27
+ const dashboardQuestionDto = plainToInstance(CreateDashboardQuestionDto, aiResponseMessage);
28
+
29
+ const dashboardQuestion = await this.dashboardQuestionService.create(dashboardQuestionDto, []);
30
+
31
+ // TODO: decide on some shape to return hre...
32
+ return {
33
+ seedingRequired: false,
34
+ serverRebooting: false,
35
+ }
36
+ }
37
+
38
+ }
@@ -0,0 +1,40 @@
1
+ import { Injectable } from "@nestjs/common";
2
+ import { plainToInstance } from "class-transformer";
3
+ import { AiInteraction } from "src/entities/ai-interaction.entity";
4
+ import { IMcpToolResponseHandler } from "../../interfaces";
5
+ import { DashboardQuestionSqlDatasetConfigService } from "../dashboard-question-sql-dataset-config.service";
6
+ import { CreateDashboardQuestionSqlDatasetConfigDto } from "src/dtos/create-dashboard-question-sql-dataset-config.dto";
7
+
8
+ @Injectable()
9
+ export class SolidCreateDashboardQuestionSqlDatasetConfigMcpToolResponseHandler implements IMcpToolResponseHandler {
10
+
11
+ constructor(
12
+ private readonly dashboardQuestionSqlDatasetConfigService: DashboardQuestionSqlDatasetConfigService,
13
+ ) {
14
+ }
15
+
16
+ async apply(aiInteraction: AiInteraction) {
17
+ // const aiResponse = JSON.parse(aiInteraction.message);
18
+ const escapedMessage = aiInteraction.message.replace(/\\'/g, "'");
19
+ const aiResponseMessage = JSON.parse(escapedMessage);
20
+
21
+ // FIXME: Replace \' with ' in the response, since the AI response seems to contain \' which is invalid JSON.
22
+ // This is a workaround for now, until we find a better solution.
23
+ // const aiResponseMessageReplaced = aiResponse['message'].replace(/\\'/g, "'");
24
+ // const dashboardUserKey = aiResponseMessageReplaced['dashboardUserKey'];
25
+ // if (!dashboardUserKey) {
26
+ // throw new Error("Dashboard User Key is required to create a Dashboard Question.");
27
+ // }
28
+ const dto = plainToInstance(CreateDashboardQuestionSqlDatasetConfigDto, aiResponseMessage);
29
+ dto['options'] = JSON.stringify(dto['options']);
30
+
31
+ const dashboardQuestion = await this.dashboardQuestionSqlDatasetConfigService.create(dto, []);
32
+
33
+ // TODO: decide on some shape to return hre...
34
+ return {
35
+ seedingRequired: false,
36
+ serverRebooting: false,
37
+ }
38
+ }
39
+
40
+ }
@@ -0,0 +1,39 @@
1
+ import { Injectable } from "@nestjs/common";
2
+ import { plainToInstance } from "class-transformer";
3
+ import { CreateDashboardQuestionDto } from "src/dtos/create-dashboard-question.dto";
4
+ import { AiInteraction } from "src/entities/ai-interaction.entity";
5
+ import { IMcpToolResponseHandler } from "../../interfaces";
6
+ import { DashboardQuestionService } from "../dashboard-question.service";
7
+
8
+ @Injectable()
9
+ export class SolidCreateDashboardWidgetMcpToolResponseHandler implements IMcpToolResponseHandler {
10
+
11
+ constructor(
12
+ private readonly dashboardQuestionService: DashboardQuestionService,
13
+ ) {
14
+ }
15
+
16
+ async apply(aiInteraction: AiInteraction) {
17
+ const escapedMessage = aiInteraction.message.replace(/\\'/g, "'");
18
+ const aiResponseMessage = JSON.parse(escapedMessage);
19
+
20
+ //FIXME: Replace \' with ' in the response, since the AI response seems to contain \' which is invalid JSON.
21
+ // This is a workaround for now, until we find a better solution.
22
+ // const aiResponseMessageReplaced = aiResponseMessage['message'].replace(/\\'/g, "'");
23
+ // const dashboardUserKey = aiResponseMessageReplaced['dashboardUserKey'];
24
+ // if (!dashboardUserKey) {
25
+ // throw new Error("Dashboard User Key is required to create a Dashboard Question.");
26
+ // }
27
+ const dashboardQuestionDto = plainToInstance(CreateDashboardQuestionDto, aiResponseMessage);
28
+ dashboardQuestionDto['questionSqlDatasetConfigsCommand'] = "update";
29
+
30
+ const dashboardQuestion = await this.dashboardQuestionService.create(dashboardQuestionDto, []);
31
+
32
+ // TODO: decide on some shape to return hre...
33
+ return {
34
+ seedingRequired: false,
35
+ serverRebooting: false,
36
+ }
37
+ }
38
+
39
+ }
@@ -0,0 +1,46 @@
1
+ import { Injectable } from "@nestjs/common";
2
+ import { IMcpToolResponseHandler } from "../../interfaces";
3
+ import { AiInteraction } from "src/entities/ai-interaction.entity";
4
+ import { SolidRegistry } from "src/helpers/solid-registry";
5
+ import { ModelMetadataService } from "../model-metadata.service";
6
+ import { CreateModelMetadataDto } from "src/dtos/create-model-metadata.dto";
7
+ import { ModuleMetadataService } from "../module-metadata.service";
8
+
9
+ @Injectable()
10
+ export class SolidCreateModelWithFieldsMcpToolResponseHandler implements IMcpToolResponseHandler {
11
+
12
+ constructor(
13
+ private readonly moduleMetadataService: ModuleMetadataService,
14
+ private readonly modelMetadataService: ModelMetadataService,
15
+ private readonly solidRegistry: SolidRegistry,
16
+ ) {
17
+ }
18
+
19
+ async apply(aiInteraction: AiInteraction) {
20
+ // const aiResponse = JSON.parse(aiInteraction.message);
21
+ const escapedMessage = aiInteraction.message.replace(/\\'/g, "'");
22
+ const aiResponse = JSON.parse(escapedMessage);
23
+
24
+ const { moduleUserKey, modelSchema } = aiResponse;
25
+ const moduleMetadata = await this.moduleMetadataService.findOneByUserKey(moduleUserKey);
26
+ if (!moduleMetadata) {
27
+ throw new Error(`Module with user key ${moduleUserKey} not found.`);
28
+ }
29
+ modelSchema['moduleId'] = moduleMetadata.id;
30
+
31
+ // TODO: Validate if another model with same name exists, if it does then raise an error...
32
+
33
+ // This creates the module-metadata.json file....
34
+ const modelObj = await this.modelMetadataService.create(modelSchema as CreateModelMetadataDto);
35
+
36
+ // Now we need to run solid seed & then solid refresh-model --name <module-name>
37
+ await this.modelMetadataService.handleGenerateCode({ modelId: modelObj.id });
38
+
39
+ // TODO: decide on some shape to return hre...
40
+ return {
41
+ seedingRequired: true,
42
+ serverRebooting: true,
43
+ }
44
+ }
45
+
46
+ }
@@ -203,6 +203,7 @@ import { ChatterMessageDetailsService } from './services/chatter-message-details
203
203
  import { ChatterMessageService } from './services/chatter-message.service';
204
204
  import { ConcatComputedFieldProvider } from './services/computed-fields/concat-computed-field-provider.service';
205
205
  import { ConcatEntityComputedFieldProvider } from './services/computed-fields/entity/concat-entity-computed-field-provider.service';
206
+ import { CRUDService } from './services/crud.service';
206
207
  import { CsvService } from './services/csv.service';
207
208
  import { DashboardQuestionSqlDatasetConfigService } from './services/dashboard-question-sql-dataset-config.service';
208
209
  import { DashboardQuestionService } from './services/dashboard-question.service';
@@ -216,6 +217,11 @@ import { ExportTransactionService } from './services/export-transaction.service'
216
217
  import { ImportTransactionErrorLogService } from './services/import-transaction-error-log.service';
217
218
  import { ImportTransactionService } from './services/import-transaction.service';
218
219
  import { LocaleService } from './services/locale.service';
220
+ import { McpToolResponseHandlerFactory } from './services/mcp-tool-response-handlers/mcp-tool-response-handler-factory.service';
221
+ import { SolidCreateDashboardMcpToolResponseHandler } from './services/mcp-tool-response-handlers/solid-create-dashboard-mcp-tool-response-handler.service';
222
+ import { SolidCreateDashboardQuestionMcpToolResponseHandler } from './services/mcp-tool-response-handlers/solid-create-dashboard-question-mcp-tool-response-handler.service';
223
+ import { SolidCreateDashboardQuestionSqlDatasetConfigMcpToolResponseHandler } from './services/mcp-tool-response-handlers/solid-create-dashboard-question-sql-dataset-config-mcp-tool-response-handler.service';
224
+ import { SolidCreateModuleMcpToolResponseHandler } from './services/mcp-tool-response-handlers/solid-create-module-mcp-tool-response-handler.service';
219
225
  import { FileS3StorageProvider } from './services/mediaStorageProviders/file-s3-storage-provider';
220
226
  import { FileStorageProvider } from './services/mediaStorageProviders/file-storage-provider';
221
227
  import { ChartJsSqlDataProvider } from './services/question-data-providers/chartjs-sql-data-provider.service';
@@ -246,9 +252,9 @@ import { DashboardVariableSubscriber } from './subscribers/dashboard-variable.su
246
252
  import { DashboardSubscriber } from './subscribers/dashboard.subscriber';
247
253
  import { SecurityRuleSubscriber } from './subscribers/security-rule.subscriber';
248
254
  import { ViewMetadataSubsciber } from './subscribers/view-metadata.subscriber';
249
- import { CRUDService } from './services/crud.service';
250
- import { McpToolResponseHandlerFactory } from './services/mcp-tool-response-handlers/mcp-tool-response-handler-factory.service';
251
- import { SolidCreateModuleMcpToolResponseHandler } from './services/mcp-tool-response-handlers/solid-create-module-mcp-tool-response-handler.service';
255
+ import { SolidCreateDashboardWidgetMcpToolResponseHandler } from './services/mcp-tool-response-handlers/solid-create-dashboard-widget-mcp-tool-response-handler.service';
256
+ import { SolidCreateModelWithFieldsMcpToolResponseHandler } from './services/mcp-tool-response-handlers/solid-create-model-with-fields-mcp-tool-response-handler.service';
257
+ import { SolidAddFieldMcpToolResponseHandler } from './services/mcp-tool-response-handlers/solid-add-field-mcp-tool-response-handler.service';
252
258
 
253
259
 
254
260
  @Global()
@@ -419,7 +425,7 @@ import { SolidCreateModuleMcpToolResponseHandler } from './services/mcp-tool-res
419
425
  SmsTemplateService,
420
426
  EmailTemplateService,
421
427
  PublisherFactory,
422
-
428
+
423
429
  McpToolResponseHandlerFactory,
424
430
  SolidCreateModuleMcpToolResponseHandler,
425
431
 
@@ -528,6 +534,12 @@ import { SolidCreateModuleMcpToolResponseHandler } from './services/mcp-tool-res
528
534
  DashboardVariableSubscriber,
529
535
  DashboardQuestionSubscriber,
530
536
  DashboardQuestionSqlDatasetConfigSubscriber,
537
+ SolidCreateDashboardMcpToolResponseHandler,
538
+ SolidCreateDashboardQuestionMcpToolResponseHandler,
539
+ SolidCreateDashboardQuestionSqlDatasetConfigMcpToolResponseHandler,
540
+ SolidCreateDashboardWidgetMcpToolResponseHandler,
541
+ SolidCreateModelWithFieldsMcpToolResponseHandler,
542
+ SolidAddFieldMcpToolResponseHandler,
531
543
  ],
532
544
  exports: [
533
545
  ModuleMetadataService,