@solidstarters/solid-core 1.2.135 → 1.2.136
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/dist/controllers/ai-interaction.controller.d.ts +2 -1
- package/dist/controllers/ai-interaction.controller.d.ts.map +1 -1
- package/dist/controllers/ai-interaction.controller.js +15 -3
- package/dist/controllers/ai-interaction.controller.js.map +1 -1
- package/dist/controllers/dashboard-question-sql-dataset-config.controller.d.ts +43 -0
- package/dist/controllers/dashboard-question-sql-dataset-config.controller.d.ts.map +1 -0
- package/dist/controllers/{question-sql-dataset-config.controller.js → dashboard-question-sql-dataset-config.controller.js} +30 -30
- package/dist/controllers/dashboard-question-sql-dataset-config.controller.js.map +1 -0
- package/dist/controllers/dashboard-question.controller.d.ts +45 -0
- package/dist/controllers/dashboard-question.controller.d.ts.map +1 -0
- package/dist/controllers/{question.controller.js → dashboard-question.controller.js} +31 -31
- package/dist/controllers/dashboard-question.controller.js.map +1 -0
- package/dist/dtos/{create-question-sql-dataset-config.dto.d.ts → create-dashboard-question-sql-dataset-config.dto.d.ts} +2 -2
- package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.d.ts.map +1 -0
- package/dist/dtos/{create-question-sql-dataset-config.dto.js → create-dashboard-question-sql-dataset-config.dto.js} +13 -13
- package/dist/dtos/create-dashboard-question-sql-dataset-config.dto.js.map +1 -0
- package/dist/dtos/create-dashboard-question.dto.d.ts +17 -0
- package/dist/dtos/create-dashboard-question.dto.d.ts.map +1 -0
- package/dist/dtos/{create-question.dto.js → create-dashboard-question.dto.js} +25 -19
- package/dist/dtos/create-dashboard-question.dto.js.map +1 -0
- package/dist/dtos/create-dashboard.dto.d.ts +2 -2
- package/dist/dtos/create-dashboard.dto.d.ts.map +1 -1
- package/dist/dtos/create-dashboard.dto.js +3 -3
- package/dist/dtos/create-dashboard.dto.js.map +1 -1
- package/dist/dtos/{update-question-sql-dataset-config.dto.d.ts → update-dashboard-question-sql-dataset-config.dto.d.ts} +2 -2
- package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.d.ts.map +1 -0
- package/dist/dtos/{update-question-sql-dataset-config.dto.js → update-dashboard-question-sql-dataset-config.dto.js} +14 -14
- package/dist/dtos/update-dashboard-question-sql-dataset-config.dto.js.map +1 -0
- package/dist/dtos/update-dashboard-question.dto.d.ts +18 -0
- package/dist/dtos/update-dashboard-question.dto.d.ts.map +1 -0
- package/dist/dtos/{update-question.dto.js → update-dashboard-question.dto.js} +26 -20
- package/dist/dtos/update-dashboard-question.dto.js.map +1 -0
- package/dist/dtos/update-dashboard.dto.d.ts +2 -2
- package/dist/dtos/update-dashboard.dto.d.ts.map +1 -1
- package/dist/dtos/update-dashboard.dto.js +3 -3
- package/dist/dtos/update-dashboard.dto.js.map +1 -1
- package/dist/entities/dashboard-question-sql-dataset-config.entity.d.ts +13 -0
- package/dist/entities/dashboard-question-sql-dataset-config.entity.d.ts.map +1 -0
- package/dist/entities/{question-sql-dataset-config.entity.js → dashboard-question-sql-dataset-config.entity.js} +19 -19
- package/dist/entities/dashboard-question-sql-dataset-config.entity.js.map +1 -0
- package/dist/entities/dashboard-question.entity.d.ts +16 -0
- package/dist/entities/dashboard-question.entity.d.ts.map +1 -0
- package/dist/entities/{question.entity.js → dashboard-question.entity.js} +23 -19
- package/dist/entities/dashboard-question.entity.js.map +1 -0
- package/dist/entities/dashboard.entity.d.ts +2 -2
- package/dist/entities/dashboard.entity.d.ts.map +1 -1
- package/dist/entities/dashboard.entity.js +3 -3
- package/dist/entities/dashboard.entity.js.map +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -2
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +16 -2
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js.map +1 -1
- package/dist/jobs/database/trigger-mcp-client-publisher-database.service.d.ts +11 -0
- package/dist/jobs/database/trigger-mcp-client-publisher-database.service.d.ts.map +1 -0
- package/dist/jobs/database/trigger-mcp-client-publisher-database.service.js +39 -0
- package/dist/jobs/database/trigger-mcp-client-publisher-database.service.js.map +1 -0
- package/dist/jobs/database/trigger-mcp-client-queue-options.d.ts +8 -0
- package/dist/jobs/database/trigger-mcp-client-queue-options.d.ts.map +1 -0
- package/dist/jobs/database/trigger-mcp-client-queue-options.js +10 -0
- package/dist/jobs/database/trigger-mcp-client-queue-options.js.map +1 -0
- package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts +16 -0
- package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts.map +1 -0
- package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js +71 -0
- package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js.map +1 -0
- package/dist/repository/dashboard.repository.d.ts +1 -3
- package/dist/repository/dashboard.repository.d.ts.map +1 -1
- package/dist/repository/dashboard.repository.js +42 -37
- package/dist/repository/dashboard.repository.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +88 -131
- package/dist/services/ai-interaction.service.d.ts +10 -2
- package/dist/services/ai-interaction.service.d.ts.map +1 -1
- package/dist/services/ai-interaction.service.js +53 -18
- package/dist/services/ai-interaction.service.js.map +1 -1
- package/dist/services/chatter-message.service.d.ts.map +1 -1
- package/dist/services/chatter-message.service.js +8 -6
- package/dist/services/chatter-message.service.js.map +1 -1
- package/dist/services/{question-sql-dataset-config.service.d.ts → dashboard-question-sql-dataset-config.service.d.ts} +5 -5
- package/dist/services/dashboard-question-sql-dataset-config.service.d.ts.map +1 -0
- package/dist/services/{question-sql-dataset-config.service.js → dashboard-question-sql-dataset-config.service.js} +9 -9
- package/dist/services/dashboard-question-sql-dataset-config.service.js.map +1 -0
- package/dist/services/{question.service.d.ts → dashboard-question.service.d.ts} +5 -5
- package/dist/services/dashboard-question.service.d.ts.map +1 -0
- package/dist/services/{question.service.js → dashboard-question.service.js} +10 -10
- package/dist/services/dashboard-question.service.js.map +1 -0
- package/dist/services/field-metadata.service.d.ts.map +1 -1
- package/dist/services/field-metadata.service.js +1 -0
- package/dist/services/field-metadata.service.js.map +1 -1
- package/dist/services/import-transaction.service.d.ts +3 -1
- package/dist/services/import-transaction.service.d.ts.map +1 -1
- package/dist/services/import-transaction.service.js +22 -0
- package/dist/services/import-transaction.service.js.map +1 -1
- package/dist/services/list-of-values.service.d.ts +1 -0
- package/dist/services/list-of-values.service.d.ts.map +1 -1
- package/dist/services/list-of-values.service.js +3 -0
- package/dist/services/list-of-values.service.js.map +1 -1
- package/dist/services/question-data-providers/chartjs-sql-data-provider.service.d.ts +2 -2
- package/dist/services/question-data-providers/chartjs-sql-data-provider.service.d.ts.map +1 -1
- package/dist/services/question-data-providers/chartjs-sql-data-provider.service.js +11 -7
- package/dist/services/question-data-providers/chartjs-sql-data-provider.service.js.map +1 -1
- package/dist/services/question-data-providers/helpers.d.ts +5 -2
- package/dist/services/question-data-providers/helpers.d.ts.map +1 -1
- package/dist/services/question-data-providers/helpers.js +18 -3
- package/dist/services/question-data-providers/helpers.js.map +1 -1
- package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.d.ts +2 -2
- package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.d.ts.map +1 -1
- package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.js +10 -4
- package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.js.map +1 -1
- package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.d.ts +2 -2
- package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.d.ts.map +1 -1
- package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.js +11 -3
- package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.js.map +1 -1
- package/dist/services/queues/publisher-factory.service.js +1 -1
- package/dist/services/queues/publisher-factory.service.js.map +1 -1
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +52 -39
- package/dist/solid-core.module.js.map +1 -1
- package/dist/subscribers/{question-sql-dataset-config.subscriber.d.ts → dashboard-question-sql-dataset-config.subscriber.d.ts} +6 -6
- package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.d.ts.map +1 -0
- package/dist/subscribers/{question-sql-dataset-config.subscriber.js → dashboard-question-sql-dataset-config.subscriber.js} +10 -10
- package/dist/subscribers/dashboard-question-sql-dataset-config.subscriber.js.map +1 -0
- package/dist/subscribers/{question.subscriber.d.ts → dashboard-question.subscriber.d.ts} +7 -7
- package/dist/subscribers/dashboard-question.subscriber.d.ts.map +1 -0
- package/dist/subscribers/{question.subscriber.js → dashboard-question.subscriber.js} +8 -8
- package/dist/subscribers/dashboard-question.subscriber.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/controllers/ai-interaction.controller.ts +8 -2
- package/src/controllers/{question-sql-dataset-config.controller.ts → dashboard-question-sql-dataset-config.controller.ts} +10 -10
- package/src/controllers/{question.controller.ts → dashboard-question.controller.ts} +10 -10
- package/src/dtos/{create-question-sql-dataset-config.dto.ts → create-dashboard-question-sql-dataset-config.dto.ts} +1 -1
- package/src/dtos/{create-question.dto.ts → create-dashboard-question.dto.ts} +9 -4
- package/src/dtos/create-dashboard.dto.ts +3 -3
- package/src/dtos/{update-question-sql-dataset-config.dto.ts → update-dashboard-question-sql-dataset-config.dto.ts} +1 -1
- package/src/dtos/{update-question.dto.ts → update-dashboard-question.dto.ts} +9 -4
- package/src/dtos/update-dashboard.dto.ts +3 -3
- package/src/entities/{question-sql-dataset-config.entity.ts → dashboard-question-sql-dataset-config.entity.ts} +5 -5
- package/src/entities/{question.entity.ts → dashboard-question.entity.ts} +8 -5
- package/src/entities/dashboard.entity.ts +3 -3
- package/src/index.ts +7 -4
- package/src/interfaces.ts +18 -2
- package/src/jobs/database/trigger-mcp-client-publisher-database.service.ts +22 -0
- package/src/jobs/database/trigger-mcp-client-queue-options.ts +9 -0
- package/src/jobs/database/trigger-mcp-client-subscriber-database.service.ts +71 -0
- package/src/repository/dashboard.repository.ts +54 -53
- package/src/seeders/seed-data/solid-core-metadata.json +88 -131
- package/src/services/ai-interaction.service.ts +68 -32
- package/src/services/chatter-message.service.ts +12 -6
- package/src/services/{question-sql-dataset-config.service.ts → dashboard-question-sql-dataset-config.service.ts} +5 -5
- package/src/services/{question.service.ts → dashboard-question.service.ts} +6 -6
- package/src/services/field-metadata.service.ts +1 -0
- package/src/services/import-transaction.service.ts +29 -1
- package/src/services/list-of-values.service.ts +5 -0
- package/src/services/question-data-providers/chartjs-sql-data-provider.service.ts +14 -10
- package/src/services/question-data-providers/helpers.ts +23 -4
- package/src/services/question-data-providers/prime-react-datatable-sql-data-provider.service.ts +12 -6
- package/src/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.ts +14 -5
- package/src/services/question-data-providers/test.sql +1 -0
- package/src/services/queues/publisher-factory.service.ts +1 -1
- package/src/solid-core.module.ts +54 -39
- package/src/subscribers/{question-sql-dataset-config.subscriber.ts → dashboard-question-sql-dataset-config.subscriber.ts} +8 -10
- package/src/subscribers/{question.subscriber.ts → dashboard-question.subscriber.ts} +7 -10
- package/dist/controllers/question-sql-dataset-config.controller.d.ts +0 -43
- package/dist/controllers/question-sql-dataset-config.controller.d.ts.map +0 -1
- package/dist/controllers/question-sql-dataset-config.controller.js.map +0 -1
- package/dist/controllers/question.controller.d.ts +0 -45
- package/dist/controllers/question.controller.d.ts.map +0 -1
- package/dist/controllers/question.controller.js.map +0 -1
- package/dist/dtos/create-question-sql-dataset-config.dto.d.ts.map +0 -1
- package/dist/dtos/create-question-sql-dataset-config.dto.js.map +0 -1
- package/dist/dtos/create-question.dto.d.ts +0 -16
- package/dist/dtos/create-question.dto.d.ts.map +0 -1
- package/dist/dtos/create-question.dto.js.map +0 -1
- package/dist/dtos/update-question-sql-dataset-config.dto.d.ts.map +0 -1
- package/dist/dtos/update-question-sql-dataset-config.dto.js.map +0 -1
- package/dist/dtos/update-question.dto.d.ts +0 -17
- package/dist/dtos/update-question.dto.d.ts.map +0 -1
- package/dist/dtos/update-question.dto.js.map +0 -1
- package/dist/entities/question-sql-dataset-config.entity.d.ts +0 -13
- package/dist/entities/question-sql-dataset-config.entity.d.ts.map +0 -1
- package/dist/entities/question-sql-dataset-config.entity.js.map +0 -1
- package/dist/entities/question.entity.d.ts +0 -15
- package/dist/entities/question.entity.d.ts.map +0 -1
- package/dist/entities/question.entity.js.map +0 -1
- package/dist/services/question-sql-dataset-config.service.d.ts.map +0 -1
- package/dist/services/question-sql-dataset-config.service.js.map +0 -1
- package/dist/services/question.service.d.ts.map +0 -1
- package/dist/services/question.service.js.map +0 -1
- package/dist/subscribers/question-sql-dataset-config.subscriber.d.ts.map +0 -1
- package/dist/subscribers/question-sql-dataset-config.subscriber.js.map +0 -1
- package/dist/subscribers/question.subscriber.d.ts.map +0 -1
- package/dist/subscribers/question.subscriber.js.map +0 -1
- package/src/services/1. Create a context menu option i.py +0 -12
|
@@ -4337,7 +4337,7 @@
|
|
|
4337
4337
|
},
|
|
4338
4338
|
{
|
|
4339
4339
|
"name": "questions",
|
|
4340
|
-
"displayName": "Questions",
|
|
4340
|
+
"displayName": "Dashboard Questions",
|
|
4341
4341
|
"type": "relation",
|
|
4342
4342
|
"required": false,
|
|
4343
4343
|
"unique": false,
|
|
@@ -4345,7 +4345,7 @@
|
|
|
4345
4345
|
"relationType": "one-to-many",
|
|
4346
4346
|
"relationCoModelFieldName": "dashboard",
|
|
4347
4347
|
"relationCreateInverse": true,
|
|
4348
|
-
"relationCoModelSingularName": "
|
|
4348
|
+
"relationCoModelSingularName": "dashboardQuestion",
|
|
4349
4349
|
"relationModelModuleName": "solid-core",
|
|
4350
4350
|
"isSystem": true
|
|
4351
4351
|
},
|
|
@@ -4547,13 +4547,13 @@
|
|
|
4547
4547
|
]
|
|
4548
4548
|
},
|
|
4549
4549
|
{
|
|
4550
|
-
"singularName": "
|
|
4551
|
-
"pluralName": "
|
|
4552
|
-
"displayName": "Question",
|
|
4553
|
-
"description": "This is used to maintain questions for dashboards",
|
|
4550
|
+
"singularName": "dashboardQuestion",
|
|
4551
|
+
"pluralName": "dashboardQuestions",
|
|
4552
|
+
"displayName": "Dashboard Question",
|
|
4553
|
+
"description": "This is used to maintain dashboard questions for dashboards",
|
|
4554
4554
|
"dataSource": "default",
|
|
4555
4555
|
"dataSourceType": "postgres",
|
|
4556
|
-
"tableName": "
|
|
4556
|
+
"tableName": "ss_dashboard_question",
|
|
4557
4557
|
"userKeyFieldUserKey": "name",
|
|
4558
4558
|
"fields": [
|
|
4559
4559
|
{
|
|
@@ -4604,6 +4604,18 @@
|
|
|
4604
4604
|
"prime-datatable:Prime - Datatable"
|
|
4605
4605
|
]
|
|
4606
4606
|
},
|
|
4607
|
+
{
|
|
4608
|
+
"name": "sequenceNumber",
|
|
4609
|
+
"displayName": "Sequence Number",
|
|
4610
|
+
"type": "int",
|
|
4611
|
+
"ormType": "integer",
|
|
4612
|
+
"required": false,
|
|
4613
|
+
"unique": false,
|
|
4614
|
+
"index": false,
|
|
4615
|
+
"private": false,
|
|
4616
|
+
"encrypt": false,
|
|
4617
|
+
"isSystem": true
|
|
4618
|
+
},
|
|
4607
4619
|
{
|
|
4608
4620
|
"name": "labelSql",
|
|
4609
4621
|
"displayName": "Label SQL Query",
|
|
@@ -4681,7 +4693,7 @@
|
|
|
4681
4693
|
},
|
|
4682
4694
|
{
|
|
4683
4695
|
"name": "questionSqlDatasetConfigs",
|
|
4684
|
-
"displayName": "Question SQL Dataset Config",
|
|
4696
|
+
"displayName": "Related Dashboard Question SQL Dataset Config",
|
|
4685
4697
|
"description": "Related Question SQL Dataset Config Model",
|
|
4686
4698
|
"type": "relation",
|
|
4687
4699
|
"ormType": "integer",
|
|
@@ -4689,7 +4701,7 @@
|
|
|
4689
4701
|
"relationType": "one-to-many",
|
|
4690
4702
|
"relationCoModelFieldName": "question",
|
|
4691
4703
|
"relationCreateInverse": true,
|
|
4692
|
-
"relationCoModelSingularName": "
|
|
4704
|
+
"relationCoModelSingularName": "dashboardQuestionSqlDatasetConfig",
|
|
4693
4705
|
"relationModelModuleName": "solid-core",
|
|
4694
4706
|
"relationCascade": "cascade",
|
|
4695
4707
|
"required": false,
|
|
@@ -4701,13 +4713,13 @@
|
|
|
4701
4713
|
]
|
|
4702
4714
|
},
|
|
4703
4715
|
{
|
|
4704
|
-
"singularName": "
|
|
4705
|
-
"pluralName": "
|
|
4706
|
-
"displayName": "Question SQL Dataset Config",
|
|
4707
|
-
"description": "This is used to maintain SQL dataset configurations
|
|
4716
|
+
"singularName": "dashboardQuestionSqlDatasetConfig",
|
|
4717
|
+
"pluralName": "dashboardQuestionSqlDatasetConfigs",
|
|
4718
|
+
"displayName": "Dashboard Question SQL Dataset Config",
|
|
4719
|
+
"description": "This is used to maintain Dashboard Question SQL dataset configurations",
|
|
4708
4720
|
"dataSource": "default",
|
|
4709
4721
|
"dataSourceType": "postgres",
|
|
4710
|
-
"tableName": "
|
|
4722
|
+
"tableName": "ss_dashboard_question_sql_dataset_config",
|
|
4711
4723
|
"userKeyFieldUserKey": "datasetName",
|
|
4712
4724
|
"fields": [
|
|
4713
4725
|
{
|
|
@@ -4811,7 +4823,7 @@
|
|
|
4811
4823
|
"relationType": "many-to-one",
|
|
4812
4824
|
"relationCoModelFieldName": "questionSqlDatasetConfigs",
|
|
4813
4825
|
"relationCreateInverse": true,
|
|
4814
|
-
"relationCoModelSingularName": "
|
|
4826
|
+
"relationCoModelSingularName": "dashboardQuestion",
|
|
4815
4827
|
"relationModelModuleName": "solid-core",
|
|
4816
4828
|
"relationCascade": "cascade",
|
|
4817
4829
|
"required": true,
|
|
@@ -4899,14 +4911,19 @@
|
|
|
4899
4911
|
{
|
|
4900
4912
|
"name": "status",
|
|
4901
4913
|
"displayName": "Status",
|
|
4902
|
-
"type": "
|
|
4914
|
+
"type": "selectionStatic",
|
|
4903
4915
|
"ormType": "varchar",
|
|
4904
4916
|
"length": 64,
|
|
4905
4917
|
"required": false,
|
|
4906
4918
|
"unique": false,
|
|
4907
4919
|
"index": true,
|
|
4908
4920
|
"private": false,
|
|
4909
|
-
"encrypt": false
|
|
4921
|
+
"encrypt": false,
|
|
4922
|
+
"selectionStaticValues": [
|
|
4923
|
+
"pending:Pending",
|
|
4924
|
+
"failed:Failed",
|
|
4925
|
+
"succeeded:Succeeded"
|
|
4926
|
+
]
|
|
4910
4927
|
},
|
|
4911
4928
|
{
|
|
4912
4929
|
"name": "errorMessage",
|
|
@@ -5416,46 +5433,7 @@
|
|
|
5416
5433
|
"type": "solid",
|
|
5417
5434
|
"domain": "",
|
|
5418
5435
|
"context": "",
|
|
5419
|
-
"customComponent": "
|
|
5420
|
-
"customIsModal": true,
|
|
5421
|
-
"serverEndpoint": "",
|
|
5422
|
-
"viewUserKey": "dashboardVariable-list-view",
|
|
5423
|
-
"moduleUserKey": "solid-core",
|
|
5424
|
-
"modelUserKey": "dashboardVariable"
|
|
5425
|
-
},
|
|
5426
|
-
{
|
|
5427
|
-
"displayName": "Question List Action",
|
|
5428
|
-
"name": "question-list-action",
|
|
5429
|
-
"type": "solid",
|
|
5430
|
-
"domain": "",
|
|
5431
|
-
"context": "",
|
|
5432
|
-
"customComponent": "/admin/address-master/question/all",
|
|
5433
|
-
"customIsModal": true,
|
|
5434
|
-
"serverEndpoint": "",
|
|
5435
|
-
"viewUserKey": "question-list-view",
|
|
5436
|
-
"moduleUserKey": "solid-core",
|
|
5437
|
-
"modelUserKey": "question"
|
|
5438
|
-
},
|
|
5439
|
-
{
|
|
5440
|
-
"displayName": "Dashboard List Action",
|
|
5441
|
-
"name": "dashboard-list-action",
|
|
5442
|
-
"type": "solid",
|
|
5443
|
-
"domain": "",
|
|
5444
|
-
"context": "",
|
|
5445
|
-
"customComponent": "/admin/address-master/dashboard/all",
|
|
5446
|
-
"customIsModal": true,
|
|
5447
|
-
"serverEndpoint": "",
|
|
5448
|
-
"viewUserKey": "dashboard-list-view",
|
|
5449
|
-
"moduleUserKey": "solid-core",
|
|
5450
|
-
"modelUserKey": "dashboard"
|
|
5451
|
-
},
|
|
5452
|
-
{
|
|
5453
|
-
"displayName": "Dashboard Variable List Action",
|
|
5454
|
-
"name": "dashboardVariable-list-action",
|
|
5455
|
-
"type": "solid",
|
|
5456
|
-
"domain": "",
|
|
5457
|
-
"context": "",
|
|
5458
|
-
"customComponent": "/admin/address-master/dashboardVariable/all",
|
|
5436
|
+
"customComponent": "",
|
|
5459
5437
|
"customIsModal": true,
|
|
5460
5438
|
"serverEndpoint": "",
|
|
5461
5439
|
"viewUserKey": "dashboardVariable-list-view",
|
|
@@ -5463,69 +5441,30 @@
|
|
|
5463
5441
|
"modelUserKey": "dashboardVariable"
|
|
5464
5442
|
},
|
|
5465
5443
|
{
|
|
5466
|
-
"displayName": "Question List Action",
|
|
5467
|
-
"name": "
|
|
5444
|
+
"displayName": "Dashboard Question List Action",
|
|
5445
|
+
"name": "dashboardQuestion-list-action",
|
|
5468
5446
|
"type": "solid",
|
|
5469
5447
|
"domain": "",
|
|
5470
5448
|
"context": "",
|
|
5471
|
-
"customComponent": "
|
|
5472
|
-
"customIsModal": true,
|
|
5473
|
-
"serverEndpoint": "",
|
|
5474
|
-
"viewUserKey": "question-list-view",
|
|
5475
|
-
"moduleUserKey": "solid-core",
|
|
5476
|
-
"modelUserKey": "question"
|
|
5477
|
-
},
|
|
5478
|
-
{
|
|
5479
|
-
"displayName": "Question List Action",
|
|
5480
|
-
"name": "question-list-action",
|
|
5481
|
-
"type": "solid",
|
|
5482
|
-
"domain": "",
|
|
5483
|
-
"context": "",
|
|
5484
|
-
"customComponent": "/admin/address-master/question/all",
|
|
5485
|
-
"customIsModal": true,
|
|
5486
|
-
"serverEndpoint": "",
|
|
5487
|
-
"viewUserKey": "question-list-view",
|
|
5488
|
-
"moduleUserKey": "solid-core",
|
|
5489
|
-
"modelUserKey": "question"
|
|
5490
|
-
},
|
|
5491
|
-
{
|
|
5492
|
-
"displayName": "Question List Action",
|
|
5493
|
-
"name": "question-list-action",
|
|
5494
|
-
"type": "solid",
|
|
5495
|
-
"domain": "",
|
|
5496
|
-
"context": "",
|
|
5497
|
-
"customComponent": "/admin/address-master/question/all",
|
|
5498
|
-
"customIsModal": true,
|
|
5499
|
-
"serverEndpoint": "",
|
|
5500
|
-
"viewUserKey": "question-list-view",
|
|
5501
|
-
"moduleUserKey": "solid-core",
|
|
5502
|
-
"modelUserKey": "question"
|
|
5503
|
-
},
|
|
5504
|
-
{
|
|
5505
|
-
"displayName": "Question SQL Dataset Config List Action",
|
|
5506
|
-
"name": "questionSqlDatasetConfig-list-action",
|
|
5507
|
-
"type": "solid",
|
|
5508
|
-
"domain": "",
|
|
5509
|
-
"context": "",
|
|
5510
|
-
"customComponent": "/admin/address-master/questionSqlDatasetConfig/all",
|
|
5449
|
+
"customComponent": "",
|
|
5511
5450
|
"customIsModal": true,
|
|
5512
5451
|
"serverEndpoint": "",
|
|
5513
|
-
"viewUserKey": "
|
|
5452
|
+
"viewUserKey": "dashboardQuestion-list-view",
|
|
5514
5453
|
"moduleUserKey": "solid-core",
|
|
5515
|
-
"modelUserKey": "
|
|
5454
|
+
"modelUserKey": "dashboardQuestion"
|
|
5516
5455
|
},
|
|
5517
5456
|
{
|
|
5518
|
-
"displayName": "Question List Action",
|
|
5519
|
-
"name": "
|
|
5457
|
+
"displayName": "Dashboard Question SQL Dataset Config List Action",
|
|
5458
|
+
"name": "dashboardQuestionSqlDatasetConfig-list-action",
|
|
5520
5459
|
"type": "solid",
|
|
5521
5460
|
"domain": "",
|
|
5522
5461
|
"context": "",
|
|
5523
|
-
"customComponent": "
|
|
5462
|
+
"customComponent": "",
|
|
5524
5463
|
"customIsModal": true,
|
|
5525
5464
|
"serverEndpoint": "",
|
|
5526
|
-
"viewUserKey": "
|
|
5465
|
+
"viewUserKey": "dsahboardQuestionSqlDatasetConfig-list-view",
|
|
5527
5466
|
"moduleUserKey": "solid-core",
|
|
5528
|
-
"modelUserKey": "
|
|
5467
|
+
"modelUserKey": "dashboardQuestionSqlDatasetConfig"
|
|
5529
5468
|
},
|
|
5530
5469
|
{
|
|
5531
5470
|
"displayName": "AI Interactions",
|
|
@@ -5855,10 +5794,10 @@
|
|
|
5855
5794
|
"parentMenuItemUserKey": "dashboard-root-menu-item"
|
|
5856
5795
|
},
|
|
5857
5796
|
{
|
|
5858
|
-
"displayName": "Question",
|
|
5859
|
-
"name": "
|
|
5797
|
+
"displayName": "Dashboard Question",
|
|
5798
|
+
"name": "dashboardQuestion-menu-item",
|
|
5860
5799
|
"sequenceNumber": 2,
|
|
5861
|
-
"actionUserKey": "
|
|
5800
|
+
"actionUserKey": "dashboardQuestion-list-action",
|
|
5862
5801
|
"moduleUserKey": "solid-core",
|
|
5863
5802
|
"parentMenuItemUserKey": "dashboard-root-menu-item"
|
|
5864
5803
|
},
|
|
@@ -11418,12 +11357,12 @@
|
|
|
11418
11357
|
}
|
|
11419
11358
|
},
|
|
11420
11359
|
{
|
|
11421
|
-
"name": "
|
|
11422
|
-
"displayName": "Question",
|
|
11360
|
+
"name": "dashboardQuestion-list-view",
|
|
11361
|
+
"displayName": "Dashboard Question",
|
|
11423
11362
|
"type": "list",
|
|
11424
11363
|
"context": "{}",
|
|
11425
11364
|
"moduleUserKey": "solid-core",
|
|
11426
|
-
"modelUserKey": "
|
|
11365
|
+
"modelUserKey": "dashboardQuestion",
|
|
11427
11366
|
"layout": {
|
|
11428
11367
|
"type": "list",
|
|
11429
11368
|
"attrs": {
|
|
@@ -11462,22 +11401,28 @@
|
|
|
11462
11401
|
"attrs": {
|
|
11463
11402
|
"name": "visualisedAs"
|
|
11464
11403
|
}
|
|
11404
|
+
},
|
|
11405
|
+
{
|
|
11406
|
+
"type": "field",
|
|
11407
|
+
"attrs": {
|
|
11408
|
+
"name": "sequenceNumber"
|
|
11409
|
+
}
|
|
11465
11410
|
}
|
|
11466
11411
|
]
|
|
11467
11412
|
}
|
|
11468
11413
|
},
|
|
11469
11414
|
{
|
|
11470
|
-
"name": "
|
|
11471
|
-
"displayName": "Question",
|
|
11415
|
+
"name": "dashboardQuestion-form-view",
|
|
11416
|
+
"displayName": "Dashboard Question",
|
|
11472
11417
|
"type": "form",
|
|
11473
11418
|
"context": "{}",
|
|
11474
11419
|
"moduleUserKey": "solid-core",
|
|
11475
|
-
"modelUserKey": "
|
|
11420
|
+
"modelUserKey": "dashboardQuestion",
|
|
11476
11421
|
"layout": {
|
|
11477
11422
|
"type": "form",
|
|
11478
11423
|
"attrs": {
|
|
11479
11424
|
"name": "form-1",
|
|
11480
|
-
"label": "Question",
|
|
11425
|
+
"label": "Dashboard Question",
|
|
11481
11426
|
"className": "grid"
|
|
11482
11427
|
},
|
|
11483
11428
|
"children": [
|
|
@@ -11531,6 +11476,12 @@
|
|
|
11531
11476
|
"attrs": {
|
|
11532
11477
|
"name": "visualisedAs"
|
|
11533
11478
|
}
|
|
11479
|
+
},
|
|
11480
|
+
{
|
|
11481
|
+
"type": "field",
|
|
11482
|
+
"attrs": {
|
|
11483
|
+
"name": "sequenceNumber"
|
|
11484
|
+
}
|
|
11534
11485
|
}
|
|
11535
11486
|
]
|
|
11536
11487
|
},
|
|
@@ -11548,6 +11499,18 @@
|
|
|
11548
11499
|
"name": "sourceType"
|
|
11549
11500
|
}
|
|
11550
11501
|
},
|
|
11502
|
+
{
|
|
11503
|
+
"type": "field",
|
|
11504
|
+
"attrs": {
|
|
11505
|
+
"name": "labelSql"
|
|
11506
|
+
}
|
|
11507
|
+
},
|
|
11508
|
+
{
|
|
11509
|
+
"type": "field",
|
|
11510
|
+
"attrs": {
|
|
11511
|
+
"name": "kpiSql"
|
|
11512
|
+
}
|
|
11513
|
+
},
|
|
11551
11514
|
{
|
|
11552
11515
|
"type": "field",
|
|
11553
11516
|
"attrs": {
|
|
@@ -11627,7 +11590,7 @@
|
|
|
11627
11590
|
{
|
|
11628
11591
|
"type": "field",
|
|
11629
11592
|
"attrs": {
|
|
11630
|
-
"name": "
|
|
11593
|
+
"name": "chartOptions"
|
|
11631
11594
|
}
|
|
11632
11595
|
}
|
|
11633
11596
|
]
|
|
@@ -11661,12 +11624,12 @@
|
|
|
11661
11624
|
}
|
|
11662
11625
|
},
|
|
11663
11626
|
{
|
|
11664
|
-
"name": "
|
|
11665
|
-
"displayName": "Question SQL Dataset Config",
|
|
11627
|
+
"name": "dashboardQuestionSqlDatasetConfig-list-view",
|
|
11628
|
+
"displayName": "Dashboard Question SQL Dataset Config",
|
|
11666
11629
|
"type": "list",
|
|
11667
11630
|
"context": "{}",
|
|
11668
11631
|
"moduleUserKey": "solid-core",
|
|
11669
|
-
"modelUserKey": "
|
|
11632
|
+
"modelUserKey": "dashboardQuestionSqlDatasetConfig",
|
|
11670
11633
|
"layout": {
|
|
11671
11634
|
"type": "list",
|
|
11672
11635
|
"attrs": {
|
|
@@ -11703,24 +11666,24 @@
|
|
|
11703
11666
|
{
|
|
11704
11667
|
"type": "field",
|
|
11705
11668
|
"attrs": {
|
|
11706
|
-
"name": "
|
|
11669
|
+
"name": "options"
|
|
11707
11670
|
}
|
|
11708
11671
|
}
|
|
11709
11672
|
]
|
|
11710
11673
|
}
|
|
11711
11674
|
},
|
|
11712
11675
|
{
|
|
11713
|
-
"name": "
|
|
11714
|
-
"displayName": "Question SQL Dataset Config",
|
|
11676
|
+
"name": "dashboardQuestionSqlDatasetConfig-form-view",
|
|
11677
|
+
"displayName": "Dashboard Question SQL Dataset Config",
|
|
11715
11678
|
"type": "form",
|
|
11716
11679
|
"context": "{}",
|
|
11717
11680
|
"moduleUserKey": "solid-core",
|
|
11718
|
-
"modelUserKey": "
|
|
11681
|
+
"modelUserKey": "dashboardQuestionSqlDatasetConfig",
|
|
11719
11682
|
"layout": {
|
|
11720
11683
|
"type": "form",
|
|
11721
11684
|
"attrs": {
|
|
11722
11685
|
"name": "form-1",
|
|
11723
|
-
"label": "Question SQL Dataset Config",
|
|
11686
|
+
"label": "Dashboard Question SQL Dataset Config",
|
|
11724
11687
|
"className": "grid"
|
|
11725
11688
|
},
|
|
11726
11689
|
"children": [
|
|
@@ -11782,12 +11745,6 @@
|
|
|
11782
11745
|
"name": "valueColumnName"
|
|
11783
11746
|
}
|
|
11784
11747
|
},
|
|
11785
|
-
{
|
|
11786
|
-
"type": "field",
|
|
11787
|
-
"attrs": {
|
|
11788
|
-
"name": "backgroundColor"
|
|
11789
|
-
}
|
|
11790
|
-
},
|
|
11791
11748
|
{
|
|
11792
11749
|
"type": "field",
|
|
11793
11750
|
"attrs": {
|
|
@@ -7,6 +7,9 @@ import { ConfigService } from '@nestjs/config';
|
|
|
7
7
|
import { FileService } from 'src/services/file.service';
|
|
8
8
|
import { CrudHelperService } from 'src/services/crud-helper.service';
|
|
9
9
|
import { AiInteraction } from '../entities/ai-interaction.entity';
|
|
10
|
+
import { McpResponse, TriggerMcpClientOptions } from 'src/interfaces';
|
|
11
|
+
import { PublisherFactory } from './queues/publisher-factory.service';
|
|
12
|
+
import { RequestContextService } from './request-context.service';
|
|
10
13
|
export declare class AiInteractionService extends CRUDService<AiInteraction> {
|
|
11
14
|
readonly modelMetadataService: ModelMetadataService;
|
|
12
15
|
readonly moduleMetadataService: ModuleMetadataService;
|
|
@@ -17,7 +20,12 @@ export declare class AiInteractionService extends CRUDService<AiInteraction> {
|
|
|
17
20
|
readonly entityManager: EntityManager;
|
|
18
21
|
readonly repo: Repository<AiInteraction>;
|
|
19
22
|
readonly moduleRef: ModuleRef;
|
|
20
|
-
|
|
21
|
-
|
|
23
|
+
readonly publisherFactory: PublisherFactory<TriggerMcpClientOptions>;
|
|
24
|
+
readonly requestContextService: RequestContextService;
|
|
25
|
+
private readonly logger;
|
|
26
|
+
constructor(modelMetadataService: ModelMetadataService, moduleMetadataService: ModuleMetadataService, configService: ConfigService, fileService: FileService, discoveryService: DiscoveryService, crudHelperService: CrudHelperService, entityManager: EntityManager, repo: Repository<AiInteraction>, moduleRef: ModuleRef, publisherFactory: PublisherFactory<TriggerMcpClientOptions>, requestContextService: RequestContextService);
|
|
27
|
+
triggerMcpClientJob(prompt: string): Promise<string>;
|
|
28
|
+
runMcpPrompt(prompt: string): Promise<McpResponse>;
|
|
29
|
+
cleanResponse(response: string): string;
|
|
22
30
|
}
|
|
23
31
|
//# sourceMappingURL=ai-interaction.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-interaction.service.d.ts","sourceRoot":"","sources":["../../src/services/ai-interaction.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-interaction.service.d.ts","sourceRoot":"","sources":["../../src/services/ai-interaction.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAElE,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGlE,qBACa,oBAAqB,SAAQ,WAAW,CAAC,aAAa,CAAC;IAIhE,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB;IACnD,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB;IACrD,QAAQ,CAAC,aAAa,EAAE,aAAa;IACrC,QAAQ,CAAC,WAAW,EAAE,WAAW;IACjC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB;IAC3C,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB;IAE7C,QAAQ,CAAC,aAAa,EAAE,aAAa;IAErC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,aAAa,CAAC;IACxC,QAAQ,CAAC,SAAS,EAAE,SAAS;IAC7B,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,uBAAuB,CAAC;IACpE,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB;IAfvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyC;gBAGrD,oBAAoB,EAAE,oBAAoB,EAC1C,qBAAqB,EAAE,qBAAqB,EAC5C,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,EAClC,iBAAiB,EAAE,iBAAiB,EAEpC,aAAa,EAAE,aAAa,EAE5B,IAAI,EAAE,UAAU,CAAC,aAAa,CAAC,EAC/B,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,gBAAgB,CAAC,uBAAuB,CAAC,EAC3D,qBAAqB,EAAE,qBAAqB;IAMjD,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA8BpD,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA2ExD,aAAa,CAAC,QAAQ,EAAE,MAAM;CAe/B"}
|
|
@@ -44,6 +44,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
44
44
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
45
45
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
46
46
|
};
|
|
47
|
+
var AiInteractionService_1;
|
|
47
48
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
49
|
exports.AiInteractionService = void 0;
|
|
49
50
|
const common_1 = require("@nestjs/common");
|
|
@@ -59,8 +60,10 @@ const crud_helper_service_1 = require("./crud-helper.service");
|
|
|
59
60
|
const child_process_1 = require("child_process");
|
|
60
61
|
const ai_interaction_entity_1 = require("../entities/ai-interaction.entity");
|
|
61
62
|
const fs = __importStar(require("fs/promises"));
|
|
62
|
-
|
|
63
|
-
|
|
63
|
+
const publisher_factory_service_1 = require("./queues/publisher-factory.service");
|
|
64
|
+
const request_context_service_1 = require("./request-context.service");
|
|
65
|
+
let AiInteractionService = AiInteractionService_1 = class AiInteractionService extends crud_service_1.CRUDService {
|
|
66
|
+
constructor(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, moduleRef, publisherFactory, requestContextService) {
|
|
64
67
|
super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, 'aiInteraction', 'solid-core', moduleRef);
|
|
65
68
|
this.modelMetadataService = modelMetadataService;
|
|
66
69
|
this.moduleMetadataService = moduleMetadataService;
|
|
@@ -71,6 +74,31 @@ let AiInteractionService = class AiInteractionService extends crud_service_1.CRU
|
|
|
71
74
|
this.entityManager = entityManager;
|
|
72
75
|
this.repo = repo;
|
|
73
76
|
this.moduleRef = moduleRef;
|
|
77
|
+
this.publisherFactory = publisherFactory;
|
|
78
|
+
this.requestContextService = requestContextService;
|
|
79
|
+
this.logger = new common_1.Logger(AiInteractionService_1.name);
|
|
80
|
+
}
|
|
81
|
+
async triggerMcpClientJob(prompt) {
|
|
82
|
+
const activeUser = this.requestContextService.getActiveUser();
|
|
83
|
+
const aiInteraction = await this.create({
|
|
84
|
+
userId: activeUser.sub,
|
|
85
|
+
threadId: `thread-${activeUser.sub}`,
|
|
86
|
+
role: 'human',
|
|
87
|
+
message: prompt,
|
|
88
|
+
contentType: '',
|
|
89
|
+
errorMessage: '',
|
|
90
|
+
modelUsed: '',
|
|
91
|
+
responseTimeMs: 0,
|
|
92
|
+
metadata: ''
|
|
93
|
+
});
|
|
94
|
+
const m = {
|
|
95
|
+
payload: {
|
|
96
|
+
aiInteractionId: aiInteraction.id,
|
|
97
|
+
},
|
|
98
|
+
parentEntity: 'aiInteraction',
|
|
99
|
+
parentEntityId: aiInteraction.id,
|
|
100
|
+
};
|
|
101
|
+
return await this.publisherFactory.publish(m, 'TriggerMcpClientPublisher');
|
|
74
102
|
}
|
|
75
103
|
async runMcpPrompt(prompt) {
|
|
76
104
|
const pythonExecutable = process.env.MCP_PYTHON_EXECUTABLE;
|
|
@@ -94,6 +122,8 @@ let AiInteractionService = class AiInteractionService extends crud_service_1.CRU
|
|
|
94
122
|
throw new common_1.BadRequestException(`Invalid MCP executable or client path: ${err.message}`);
|
|
95
123
|
}
|
|
96
124
|
return new Promise((resolve, reject) => {
|
|
125
|
+
this.logger.log(`Attempting to run command:`);
|
|
126
|
+
this.logger.log(`${pythonExecutable} ${mcpClient} ${prompt}`);
|
|
97
127
|
const python = (0, child_process_1.spawn)(pythonExecutable, [mcpClient, prompt]);
|
|
98
128
|
let stdout = '';
|
|
99
129
|
let stderr = '';
|
|
@@ -104,33 +134,36 @@ let AiInteractionService = class AiInteractionService extends crud_service_1.CRU
|
|
|
104
134
|
stderr += data.toString();
|
|
105
135
|
});
|
|
106
136
|
python.on('close', (code) => {
|
|
137
|
+
this.logger.log(`Python script exited with code ${code}`);
|
|
107
138
|
if (code !== 0) {
|
|
108
|
-
|
|
139
|
+
this.logger.error(`Python script exited with a non-zero exit code: ${stderr}`);
|
|
140
|
+
return reject(new Error(`Python script exited with a non-zero exit code: ${stderr}`));
|
|
109
141
|
}
|
|
110
142
|
try {
|
|
143
|
+
this.logger.log(`Python script exited with zero exit code: ${stdout}`);
|
|
111
144
|
const raw = JSON.parse(stdout);
|
|
112
|
-
|
|
113
|
-
return reject(new Error(`MCP error: ${raw.errors?.join(', ')}`));
|
|
114
|
-
}
|
|
115
|
-
let cleaned = raw.response.trim();
|
|
116
|
-
if (cleaned.startsWith('```json')) {
|
|
117
|
-
cleaned = cleaned.replace(/^```json/, '').trim();
|
|
118
|
-
}
|
|
119
|
-
if (cleaned.endsWith('```')) {
|
|
120
|
-
cleaned = cleaned.replace(/```$/, '').trim();
|
|
121
|
-
}
|
|
122
|
-
const parsed = JSON.parse(cleaned);
|
|
123
|
-
resolve(parsed);
|
|
145
|
+
resolve(raw);
|
|
124
146
|
}
|
|
125
147
|
catch (err) {
|
|
126
|
-
reject(new Error(`
|
|
148
|
+
reject(new Error(`Mcp Invocation Failed: ${err.message}`));
|
|
127
149
|
}
|
|
128
150
|
});
|
|
129
151
|
});
|
|
130
152
|
}
|
|
153
|
+
cleanResponse(response) {
|
|
154
|
+
this.logger.log(`mcp server response is: ${response}`);
|
|
155
|
+
if (response.startsWith('```json')) {
|
|
156
|
+
response = response.replace(/^```json/, '').trim();
|
|
157
|
+
}
|
|
158
|
+
if (response.endsWith('```')) {
|
|
159
|
+
response = response.replace(/```$/, '').trim();
|
|
160
|
+
}
|
|
161
|
+
this.logger.log(`mcp server response after removing doc tags is: ${response}`);
|
|
162
|
+
return response;
|
|
163
|
+
}
|
|
131
164
|
};
|
|
132
165
|
exports.AiInteractionService = AiInteractionService;
|
|
133
|
-
exports.AiInteractionService = AiInteractionService = __decorate([
|
|
166
|
+
exports.AiInteractionService = AiInteractionService = AiInteractionService_1 = __decorate([
|
|
134
167
|
(0, common_1.Injectable)(),
|
|
135
168
|
__param(6, (0, typeorm_1.InjectEntityManager)()),
|
|
136
169
|
__param(7, (0, typeorm_1.InjectRepository)(ai_interaction_entity_1.AiInteraction, 'default')),
|
|
@@ -142,6 +175,8 @@ exports.AiInteractionService = AiInteractionService = __decorate([
|
|
|
142
175
|
crud_helper_service_1.CrudHelperService,
|
|
143
176
|
typeorm_2.EntityManager,
|
|
144
177
|
typeorm_2.Repository,
|
|
145
|
-
core_1.ModuleRef
|
|
178
|
+
core_1.ModuleRef,
|
|
179
|
+
publisher_factory_service_1.PublisherFactory,
|
|
180
|
+
request_context_service_1.RequestContextService])
|
|
146
181
|
], AiInteractionService);
|
|
147
182
|
//# sourceMappingURL=ai-interaction.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-interaction.service.js","sourceRoot":"","sources":["../../src/services/ai-interaction.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { BadRequestException, Injectable } from '@nestjs/common';\nimport { InjectEntityManager, InjectRepository } from '@nestjs/typeorm';\nimport { DiscoveryService, ModuleRef } from \"@nestjs/core\";\nimport { EntityManager, Repository } from 'typeorm';\n\nimport { CRUDService } from 'src/services/crud.service';\nimport { ModelMetadataService } from 'src/services/model-metadata.service';\nimport { ModuleMetadataService } from 'src/services/module-metadata.service';\nimport { ConfigService } from '@nestjs/config';\nimport { FileService } from 'src/services/file.service';\nimport { CrudHelperService } from 'src/services/crud-helper.service';\nimport { spawn } from 'child_process';\nimport { AiInteraction } from '../entities/ai-interaction.entity';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\n\ninterface McpResponse {\n success: boolean;\n request: string;\n response: string;\n model?: string;\n tools_invoked?: string[];\n tool_calls?: any[];\n duration_ms?: number;\n errors?: string[];\n trace?: string[];\n}\n\n@Injectable()\nexport class AiInteractionService extends CRUDService<AiInteraction> {\n constructor(\n readonly modelMetadataService: ModelMetadataService,\n readonly moduleMetadataService: ModuleMetadataService,\n readonly configService: ConfigService,\n readonly fileService: FileService,\n readonly discoveryService: DiscoveryService,\n readonly crudHelperService: CrudHelperService,\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n @InjectRepository(AiInteraction, 'default')\n readonly repo: Repository<AiInteraction>,\n readonly moduleRef: ModuleRef\n\n ) {\n super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, 'aiInteraction', 'solid-core', moduleRef);\n }\n\n /**\n * Runs the Python MCP client with a prompt and returns the parsed JSON embedded in the 'response'.\n * @param prompt - The question or instruction to send to the MCP client.\n * @returns The parsed object inside the 'response' field of the JSON output.\n */\n async runMcpPrompt(prompt: string): Promise<any> {\n const pythonExecutable = process.env.MCP_PYTHON_EXECUTABLE;\n const mcpClient = process.env.MCP_CLIENT;\n\n // TODO: We can return an error if the above env variables are not properly setup...\n if (!pythonExecutable || !mcpClient) {\n throw new BadRequestException('SolidX AI MCP python executable or client path not configured.');\n }\n\n // Check if both paths are valid and accessible\n try {\n const [pyStat, clientStat] = await Promise.all([\n fs.stat(pythonExecutable),\n fs.stat(mcpClient),\n ]);\n\n if (!pyStat.isFile()) {\n throw new BadRequestException(`MCP_PYTHON_EXECUTABLE path is not a file: ${pythonExecutable}`);\n }\n\n if (!clientStat.isFile()) {\n throw new BadRequestException(`MCP_CLIENT path is not a file: ${mcpClient}`);\n }\n\n } catch (err: any) {\n throw new BadRequestException(`Invalid MCP executable or client path: ${err.message}`);\n }\n\n return new Promise((resolve, reject) => {\n\n const python = spawn(pythonExecutable, [mcpClient, prompt]);\n\n let stdout = '';\n let stderr = '';\n\n python.stdout.on('data', (data) => {\n stdout += data.toString();\n });\n\n python.stderr.on('data', (data) => {\n stderr += data.toString();\n });\n\n python.on('close', (code) => {\n if (code !== 0) {\n return reject(new Error(`Python script exited with code ${code}: ${stderr}`));\n }\n\n try {\n const raw: McpResponse = JSON.parse(stdout);\n\n if (!raw.success) {\n return reject(new Error(`MCP error: ${raw.errors?.join(', ')}`));\n }\n\n let cleaned = raw.response.trim();\n\n // Remove markdown-style code block wrapper\n if (cleaned.startsWith('```json')) {\n cleaned = cleaned.replace(/^```json/, '').trim();\n }\n if (cleaned.endsWith('```')) {\n cleaned = cleaned.replace(/```$/, '').trim();\n }\n\n const parsed = JSON.parse(cleaned);\n resolve(parsed);\n } catch (err: any) {\n reject(new Error(`Failed to parse JSON: ${err.message}`));\n }\n });\n });\n }\n\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ai-interaction.service.js","sourceRoot":"","sources":["../../src/services/ai-interaction.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { BadRequestException, Logger, Injectable } from '@nestjs/common';\nimport { InjectEntityManager, InjectRepository } from '@nestjs/typeorm';\nimport { DiscoveryService, ModuleRef } from \"@nestjs/core\";\nimport { EntityManager, Repository } from 'typeorm';\n\nimport { CRUDService } from 'src/services/crud.service';\nimport { ModelMetadataService } from 'src/services/model-metadata.service';\nimport { ModuleMetadataService } from 'src/services/module-metadata.service';\nimport { ConfigService } from '@nestjs/config';\nimport { FileService } from 'src/services/file.service';\nimport { CrudHelperService } from 'src/services/crud-helper.service';\nimport { spawn } from 'child_process';\nimport { AiInteraction } from '../entities/ai-interaction.entity';\nimport * as fs from 'fs/promises';\nimport { McpResponse, TriggerMcpClientOptions } from 'src/interfaces';\nimport { PublisherFactory } from './queues/publisher-factory.service';\nimport { RequestContextService } from './request-context.service';\nimport { ActiveUserData } from 'src/interfaces/active-user-data.interface';\n\n@Injectable()\nexport class AiInteractionService extends CRUDService<AiInteraction> {\n private readonly logger = new Logger(AiInteractionService.name);\n\n constructor(\n readonly modelMetadataService: ModelMetadataService,\n readonly moduleMetadataService: ModuleMetadataService,\n readonly configService: ConfigService,\n readonly fileService: FileService,\n readonly discoveryService: DiscoveryService,\n readonly crudHelperService: CrudHelperService,\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n @InjectRepository(AiInteraction, 'default')\n readonly repo: Repository<AiInteraction>,\n readonly moduleRef: ModuleRef,\n readonly publisherFactory: PublisherFactory<TriggerMcpClientOptions>,\n readonly requestContextService: RequestContextService,\n\n ) {\n super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, 'aiInteraction', 'solid-core', moduleRef);\n }\n\n async triggerMcpClientJob(prompt: string): Promise<string> {\n const activeUser: ActiveUserData = this.requestContextService.getActiveUser();\n\n const aiInteraction = await this.create({\n userId: activeUser.sub,\n threadId: `thread-${activeUser.sub}`,\n role: 'human',\n message: prompt,\n contentType: '',\n errorMessage: '',\n modelUsed: '',\n responseTimeMs: 0,\n metadata: ''\n });\n const m = {\n payload: {\n aiInteractionId: aiInteraction.id,\n },\n parentEntity: 'aiInteraction',\n parentEntityId: aiInteraction.id,\n };\n\n return await this.publisherFactory.publish(m, 'TriggerMcpClientPublisher');\n }\n\n /**\n * Runs the Python MCP client with a prompt and returns the parsed JSON embedded in the 'response'.\n * @param prompt - The question or instruction to send to the MCP client.\n * @returns The parsed object inside the 'response' field of the JSON output.\n */\n async runMcpPrompt(prompt: string): Promise<McpResponse> {\n const pythonExecutable = process.env.MCP_PYTHON_EXECUTABLE;\n const mcpClient = process.env.MCP_CLIENT;\n\n // TODO: We can return an error if the above env variables are not properly setup...\n if (!pythonExecutable || !mcpClient) {\n throw new BadRequestException('SolidX AI MCP python executable or client path not configured.');\n }\n\n // Check if both paths are valid and accessible\n try {\n const [pyStat, clientStat] = await Promise.all([\n fs.stat(pythonExecutable),\n fs.stat(mcpClient),\n ]);\n\n if (!pyStat.isFile()) {\n throw new BadRequestException(`MCP_PYTHON_EXECUTABLE path is not a file: ${pythonExecutable}`);\n }\n\n if (!clientStat.isFile()) {\n throw new BadRequestException(`MCP_CLIENT path is not a file: ${mcpClient}`);\n }\n\n } catch (err: any) {\n throw new BadRequestException(`Invalid MCP executable or client path: ${err.message}`);\n }\n\n // TODO: Refactor to use the command.service.ts instead...\n return new Promise((resolve, reject) => {\n this.logger.log(`Attempting to run command:`)\n this.logger.log(`${pythonExecutable} ${mcpClient} ${prompt}`);\n\n const python = spawn(pythonExecutable, [mcpClient, prompt]);\n\n let stdout = '';\n let stderr = '';\n\n python.stdout.on('data', (data) => {\n stdout += data.toString();\n });\n\n python.stderr.on('data', (data) => {\n stderr += data.toString();\n });\n\n python.on('close', (code) => {\n this.logger.log(`Python script exited with code ${code}`);\n\n if (code !== 0) {\n this.logger.error(`Python script exited with a non-zero exit code: ${stderr}`);\n return reject(new Error(`Python script exited with a non-zero exit code: ${stderr}`));\n }\n\n try {\n this.logger.log(`Python script exited with zero exit code: ${stdout}`);\n const raw: McpResponse = JSON.parse(stdout);\n\n // if (!raw.success) {\n // return reject(new Error(`MCP error: ${raw.errors?.join(', ')}`));\n // }\n // let cleaned = raw.response.trim();\n\n // Don't need to re-parse this...\n // const parsed = JSON.parse(cleaned);\n // resolve(cleaned);\n\n resolve(raw);\n } catch (err: any) {\n reject(new Error(`Mcp Invocation Failed: ${err.message}`));\n }\n });\n });\n }\n\n cleanResponse(response: string) {\n this.logger.log(`mcp server response is: ${response}`);\n\n // Remove markdown-style code block wrapper\n if (response.startsWith('```json')) {\n response = response.replace(/^```json/, '').trim();\n }\n if (response.endsWith('```')) {\n response = response.replace(/```$/, '').trim();\n }\n this.logger.log(`mcp server response after removing doc tags is: ${response}`);\n\n return response;\n }\n\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatter-message.service.d.ts","sourceRoot":"","sources":["../../src/services/chatter-message.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAG,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEpE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAGpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,qBACa,qBAAsB,SAAQ,WAAW,CAAC,cAAc,CAAC;IAElE,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB;IACnD,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB;IACrD,QAAQ,CAAC,aAAa,EAAE,aAAa;IACrC,QAAQ,CAAC,WAAW,EAAE,WAAW;IACjC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB;IAC3C,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB;IAE7C,QAAQ,CAAC,aAAa,EAAE,aAAa;IAErC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,cAAc,CAAC;IAEzC,QAAQ,CAAC,yBAAyB,EAAE,UAAU,CAAC,qBAAqB,CAAC;IACrE,QAAQ,CAAC,SAAS,EAAE,SAAS;IAE7B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB;gBAf5C,oBAAoB,EAAE,oBAAoB,EAC1C,qBAAqB,EAAE,qBAAqB,EAC5C,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,EAClC,iBAAiB,EAAE,iBAAiB,EAEpC,aAAa,EAAE,aAAa,EAE5B,IAAI,EAAE,UAAU,CAAC,cAAc,CAAC,EAEhC,yBAAyB,EAAE,UAAU,CAAC,qBAAqB,CAAC,EAC5D,SAAS,EAAE,SAAS,EAEZ,iBAAiB,EAAE,UAAU,CAAC,aAAa,CAAC,EACpD,qBAAqB,EAAE,qBAAqB;IAKlD,WAAW,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,GAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAO;IA4C7E,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,GAAE,OAAe;IAsD9F,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,EAAE,YAAY,GAAE,OAAe;IAwElH,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,EAAE,YAAY,GAAE,OAAe;IAkCxH,OAAO,CAAC,gBAAgB;IAsBxB,OAAO,CAAC,uBAAuB;IAsB/B,OAAO,CAAC,eAAe;
|
|
1
|
+
{"version":3,"file":"chatter-message.service.d.ts","sourceRoot":"","sources":["../../src/services/chatter-message.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAG,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEpE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAGpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,qBACa,qBAAsB,SAAQ,WAAW,CAAC,cAAc,CAAC;IAElE,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB;IACnD,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB;IACrD,QAAQ,CAAC,aAAa,EAAE,aAAa;IACrC,QAAQ,CAAC,WAAW,EAAE,WAAW;IACjC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB;IAC3C,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB;IAE7C,QAAQ,CAAC,aAAa,EAAE,aAAa;IAErC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,cAAc,CAAC;IAEzC,QAAQ,CAAC,yBAAyB,EAAE,UAAU,CAAC,qBAAqB,CAAC;IACrE,QAAQ,CAAC,SAAS,EAAE,SAAS;IAE7B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB;gBAf5C,oBAAoB,EAAE,oBAAoB,EAC1C,qBAAqB,EAAE,qBAAqB,EAC5C,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,EAClC,iBAAiB,EAAE,iBAAiB,EAEpC,aAAa,EAAE,aAAa,EAE5B,IAAI,EAAE,UAAU,CAAC,cAAc,CAAC,EAEhC,yBAAyB,EAAE,UAAU,CAAC,qBAAqB,CAAC,EAC5D,SAAS,EAAE,SAAS,EAEZ,iBAAiB,EAAE,UAAU,CAAC,aAAa,CAAC,EACpD,qBAAqB,EAAE,qBAAqB;IAKlD,WAAW,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,GAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAO;IA4C7E,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,GAAE,OAAe;IAsD9F,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,EAAE,YAAY,GAAE,OAAe;IAwElH,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,EAAE,YAAY,GAAE,OAAe;IAkCxH,OAAO,CAAC,gBAAgB;IAsBxB,OAAO,CAAC,uBAAuB;IAsB/B,OAAO,CAAC,eAAe;CAyBtB"}
|