From 7206350be6c58da90b9923b1a6b70fcea6c466e6 Mon Sep 17 00:00:00 2001 From: KlviG <78801020+KlviG@users.noreply.github.com> Date: Mon, 17 Aug 2026 12:03:02 +0300 Subject: [PATCH 01/12] Update .env.gui --- .env.gui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env.gui b/.env.gui index 84d5da085..30dee33d2 100644 --- a/.env.gui +++ b/.env.gui @@ -1,4 +1,4 @@ RELEASE=PRE-ALPHA-test VERSION=1 BUILD=1 -FIX=16 +FIX=17 From 43656106ce2a12e07d72f94408a6e297c18b9a95 Mon Sep 17 00:00:00 2001 From: 1AhmedYasser <26207361+1AhmedYasser@users.noreply.github.com> Date: Mon, 17 Aug 2026 14:11:44 +0300 Subject: [PATCH 02/12] fix(1105): Added nonce support to jump to service --- DSL/Ruuter/services/TEMPLATES/jump-to-service.yml | 9 +++++++++ GUI/src/services/service-tester.test.ts | 10 ++++++++++ GUI/src/services/service-tester.ts | 6 ++++-- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/DSL/Ruuter/services/TEMPLATES/jump-to-service.yml b/DSL/Ruuter/services/TEMPLATES/jump-to-service.yml index 11a5050df..6f6632a8a 100644 --- a/DSL/Ruuter/services/TEMPLATES/jump-to-service.yml +++ b/DSL/Ruuter/services/TEMPLATES/jump-to-service.yml @@ -25,12 +25,21 @@ check_for_body: switch: - condition: ${incoming.body == null || incoming.body.serviceName == null || incoming.body.serviceName == ""} next: missing_service_name + next: get_new_nonce + +get_new_nonce: + call: http.post + args: + url: "[#SERVICE_TRAINING_RESQL]/get-new-nonce" + result: nonce_res next: trigger_service trigger_service: call: http.post args: url: "[#SERVICE_RUUTER]/services/active/${incoming.body.serviceName}" + headers: + x-ruuter-nonce: ${nonce_res.response.body[0].nonce} body: chatId: ${incoming.body.chatId} authorId: ${incoming.body.authorId} diff --git a/GUI/src/services/service-tester.test.ts b/GUI/src/services/service-tester.test.ts index 1cd937f3f..e900acc3e 100644 --- a/GUI/src/services/service-tester.test.ts +++ b/GUI/src/services/service-tester.test.ts @@ -1297,4 +1297,14 @@ describe('addSuccessMessages', () => { expect(mockAddBotMessage).toHaveBeenCalledWith('Test response content', undefined); expect(mockAddSuccess).toHaveBeenCalledWith('chat.service-test-success'); }); + + it('should not throw and should skip the bot message when the response array is empty', () => { + const responseData = { + response: [], + }; + + expect(() => addSuccessMessages(responseData)).not.toThrow(); + expect(mockAddBotMessage).not.toHaveBeenCalled(); + expect(mockAddSuccess).toHaveBeenCalledWith('chat.service-test-success'); + }); }); diff --git a/GUI/src/services/service-tester.ts b/GUI/src/services/service-tester.ts index dd7a8ed41..8d45748b7 100644 --- a/GUI/src/services/service-tester.ts +++ b/GUI/src/services/service-tester.ts @@ -232,8 +232,10 @@ export const executeService = async (state: ServiceState, name: string, input: s }; export const addSuccessMessages = (responseData: ServiceResponse): void => { - const res = responseData.response[0]; + const res = responseData.response?.[0]; const store = useTestServiceStore.getState(); - store.addBotMessage(res.content, res.buttons); + if (res) { + store.addBotMessage(res.content, res.buttons); + } store.addSuccess('chat.service-test-success'); }; From 37476268121274ed96ecc50dd02185614cbfd0ba Mon Sep 17 00:00:00 2001 From: 1AhmedYasser <26207361+1AhmedYasser@users.noreply.github.com> Date: Mon, 17 Aug 2026 14:18:41 +0300 Subject: [PATCH 03/12] fix(1105): Added service status to jump to service --- .../services/POST/get-service-status-by-name.sql | 6 ++++++ .../services/TEMPLATES/jump-to-service.yml | 16 +++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 DSL/Resql/services/POST/get-service-status-by-name.sql diff --git a/DSL/Resql/services/POST/get-service-status-by-name.sql b/DSL/Resql/services/POST/get-service-status-by-name.sql new file mode 100644 index 000000000..b7cf48e93 --- /dev/null +++ b/DSL/Resql/services/POST/get-service-status-by-name.sql @@ -0,0 +1,6 @@ +SELECT current_state +FROM services +WHERE name = :service_name + AND NOT deleted +ORDER BY id DESC +LIMIT 1; diff --git a/DSL/Ruuter/services/TEMPLATES/jump-to-service.yml b/DSL/Ruuter/services/TEMPLATES/jump-to-service.yml index 6f6632a8a..46e268c8e 100644 --- a/DSL/Ruuter/services/TEMPLATES/jump-to-service.yml +++ b/DSL/Ruuter/services/TEMPLATES/jump-to-service.yml @@ -25,6 +25,20 @@ check_for_body: switch: - condition: ${incoming.body == null || incoming.body.serviceName == null || incoming.body.serviceName == ""} next: missing_service_name + next: get_service_status + +get_service_status: + call: http.post + args: + url: "[#SERVICE_RESQL]/get-service-status-by-name" + body: + service_name: ${incoming.body.serviceName} + result: service_status_res + next: assign_service_status + +assign_service_status: + assign: + service_status: "${service_status_res.response.body[0] && service_status_res.response.body[0].currentState === 'active' ? 'active' : 'draft'}" next: get_new_nonce get_new_nonce: @@ -37,7 +51,7 @@ get_new_nonce: trigger_service: call: http.post args: - url: "[#SERVICE_RUUTER]/services/active/${incoming.body.serviceName}" + url: "[#SERVICE_RUUTER]/services/${service_status}/${incoming.body.serviceName}" headers: x-ruuter-nonce: ${nonce_res.response.body[0].nonce} body: From a060279eb5674756a62aaab62e7a465bb07d8297 Mon Sep 17 00:00:00 2001 From: 1AhmedYasser <26207361+1AhmedYasser@users.noreply.github.com> Date: Mon, 17 Aug 2026 16:25:28 +0300 Subject: [PATCH 04/12] chore(2150): Added env.gui to gitignore --- .github/workflows/ci-build-image.yml | 47 ++++++++++++++++++++++++++++ .gitignore | 1 + 2 files changed, 48 insertions(+) create mode 100644 .github/workflows/ci-build-image.yml diff --git a/.github/workflows/ci-build-image.yml b/.github/workflows/ci-build-image.yml new file mode 100644 index 000000000..a0002b276 --- /dev/null +++ b/.github/workflows/ci-build-image.yml @@ -0,0 +1,47 @@ +name: Build and publish GUI + +on: + push: + branches: [ fredy-temp ] + paths: + - '.env.gui' + +jobs: + PackageDeploy: + runs-on: ubuntu-latest + + steps: + - name: Debugging Step + run: | + echo "Checking runner status..." + # Add more debugging commands as needed + + - uses: actions/checkout@v2 + + - name: Docker Setup BuildX + uses: docker/setup-buildx-action@v2 + + - name: Load environment variables and set them + run: | + if [ -f .env.gui ]; then + export $(cat .env.gui | grep -v '^#' | xargs) + fi + echo "RELEASE=$RELEASE" >> $GITHUB_ENV + echo "VERSION=$VERSION" >> $GITHUB_ENV + echo "BUILD=$BUILD" >> $GITHUB_ENV + echo "FIX=$FIX" >> $GITHUB_ENV + - name: Set repo + run: | + LOWER_CASE_GITHUB_REPOSITORY=$(echo $GITHUB_REPOSITORY | tr '[:upper:]' '[:lower:]') + echo "DOCKER_TAG_CUSTOM=ghcr.io/${LOWER_CASE_GITHUB_REPOSITORY}:$RELEASE-$VERSION.$BUILD.$FIX" >> $GITHUB_ENV + echo "$GITHUB_ENV" + - name: Docker Build + run: | + cd GUI + docker image build --tag $DOCKER_TAG_CUSTOM . + + - name: Log in to GitHub container registry + run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u $ --password-stdin + + - name: Push Docker image to ghcr + run: docker push $DOCKER_TAG_CUSTOM diff --git a/.gitignore b/.gitignore index a8f470c1d..44977c210 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ .DS_Store .vscode .env +.env.gui **/node_modules **/dist From bbba4c8871f302d89764c0cb2fa4c62df74820ad Mon Sep 17 00:00:00 2001 From: ffrose <119657383+ffrose@users.noreply.github.com> Date: Tue, 18 Aug 2026 11:08:44 +0300 Subject: [PATCH 05/12] Update ci-build-image.yml --- .github/workflows/ci-build-image.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-build-image.yml b/.github/workflows/ci-build-image.yml index a0002b276..dc4fa270a 100644 --- a/.github/workflows/ci-build-image.yml +++ b/.github/workflows/ci-build-image.yml @@ -2,7 +2,7 @@ name: Build and publish GUI on: push: - branches: [ fredy-temp ] + branches: [ v3.3.1 ] paths: - '.env.gui' From fc8d13280c242860f12957782bf9f9eeaac91920 Mon Sep 17 00:00:00 2001 From: ffrose <119657383+ffrose@users.noreply.github.com> Date: Tue, 18 Aug 2026 11:08:53 +0300 Subject: [PATCH 06/12] Update .env.gui --- .env.gui | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.env.gui b/.env.gui index 30dee33d2..d6bb6911a 100644 --- a/.env.gui +++ b/.env.gui @@ -1,4 +1,4 @@ RELEASE=PRE-ALPHA-test -VERSION=1 -BUILD=1 -FIX=17 +VERSION=3 +BUILD=3 +FIX=1-test From 6a979c2cada890fc2e9438d5ab88c5c51b66005b Mon Sep 17 00:00:00 2001 From: ffrose <119657383+ffrose@users.noreply.github.com> Date: Tue, 18 Aug 2026 11:39:18 +0300 Subject: [PATCH 07/12] Update .env.gui --- .env.gui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env.gui b/.env.gui index d6bb6911a..bfa8de1ac 100644 --- a/.env.gui +++ b/.env.gui @@ -1,4 +1,4 @@ RELEASE=PRE-ALPHA-test VERSION=3 BUILD=3 -FIX=1-test +FIX=2-test From 12fa7cfc58d35423ecea3d418482d92a050528c1 Mon Sep 17 00:00:00 2001 From: 1AhmedYasser <26207361+1AhmedYasser@users.noreply.github.com> Date: Mon, 24 Aug 2026 03:04:08 +0300 Subject: [PATCH 08/12] fix(1149): Fixed export modal search --- DSL/Resql/services/POST/get-services-list.sql | 5 +++-- DSL/Ruuter/services/POST/services.yml | 6 +++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/DSL/Resql/services/POST/get-services-list.sql b/DSL/Resql/services/POST/get-services-list.sql index d1a44856f..903bceedc 100644 --- a/DSL/Resql/services/POST/get-services-list.sql +++ b/DSL/Resql/services/POST/get-services-list.sql @@ -5,10 +5,11 @@ SELECT current_state AS state, ruuter_type AS type, slot, - CEIL((SELECT COUNT(DISTINCT service_id) FROM services WHERE NOT deleted AND (:is_common::TEXT = '' OR is_common = (:is_common::TEXT)::BOOLEAN)) / :page_size::DECIMAL) AS total_pages + CEIL((SELECT COUNT(DISTINCT service_id) FROM services WHERE NOT deleted AND (:is_common::TEXT = '' OR is_common = (:is_common::TEXT)::BOOLEAN) AND (:search IS NULL OR :search = '' OR LOWER(name) LIKE LOWER('%' || :search || '%'))) / :page_size::DECIMAL) AS total_pages FROM services -WHERE NOT deleted +WHERE NOT deleted AND (:is_common::TEXT = '' OR is_common = (:is_common::TEXT)::BOOLEAN) + AND (:search IS NULL OR :search = '' OR LOWER(name) LIKE LOWER('%' || :search || '%')) ORDER BY CASE WHEN :sorting = 'name asc' THEN name END ASC, CASE WHEN :sorting = 'name desc' THEN name END DESC, diff --git a/DSL/Ruuter/services/POST/services.yml b/DSL/Ruuter/services/POST/services.yml index b54d47af0..fb971f1a6 100644 --- a/DSL/Ruuter/services/POST/services.yml +++ b/DSL/Ruuter/services/POST/services.yml @@ -19,7 +19,10 @@ declaration: description: "Body field 'sorting'" - field: is_common type: boolean - description: "Body field 'is_common'" + description: "Body field 'is_common'" + - field: search + type: string + description: "Body field 'search'" get_services_list: call: http.post @@ -30,6 +33,7 @@ get_services_list: page_size: ${incoming.body.page_size} sorting: ${incoming.body.sorting} is_common: ${incoming.body.is_common} + search: ${incoming.body.search} limit: 600 result: services_res From 72ad1b2dbbc1d70de2a322fbfaac214ec6949a35 Mon Sep 17 00:00:00 2001 From: 1AhmedYasser <26207361+1AhmedYasser@users.noreply.github.com> Date: Mon, 24 Aug 2026 03:08:54 +0300 Subject: [PATCH 09/12] fix(1150): Fixed deleting shared prefix service files --- DSL/Ruuter/services/POST/services/add.yml | 2 +- DSL/Ruuter/services/POST/services/delete.yml | 2 +- DSL/Ruuter/services/POST/services/edit.yml | 4 ++-- DSL/Ruuter/services/POST/services/status.yml | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/DSL/Ruuter/services/POST/services/add.yml b/DSL/Ruuter/services/POST/services/add.yml index a9a81ec44..07c76c5c0 100644 --- a/DSL/Ruuter/services/POST/services/add.yml +++ b/DSL/Ruuter/services/POST/services/add.yml @@ -112,7 +112,7 @@ delete_all_mcq_files: url: "[#SERVICE_DMAPPER]/file-manager/delete-all-that-starts-with" body: path: "[#RUUTER_SERVICES_PATH]/${type}/services/draft" - keyword: "${name}_" + keyword: "${name}_mcq_" result: deleteRes convert_json_content_to_yml: diff --git a/DSL/Ruuter/services/POST/services/delete.yml b/DSL/Ruuter/services/POST/services/delete.yml index c9a7bef54..7bb8c60ef 100644 --- a/DSL/Ruuter/services/POST/services/delete.yml +++ b/DSL/Ruuter/services/POST/services/delete.yml @@ -130,7 +130,7 @@ delete_mcq_files: url: "[#SERVICE_DMAPPER]/file-manager/delete-all-that-starts-with" body: path: "[#RUUTER_SERVICES_PATH]/${ruuter_type}/[#RUUTER_SERVICES_DIR_PATH]/${old_file_status_path}" - keyword: "${name_res.response.body[0].name}_" + keyword: "${name_res.response.body[0].name}_mcq_" result: deleted_mcq return_ok: diff --git a/DSL/Ruuter/services/POST/services/edit.yml b/DSL/Ruuter/services/POST/services/edit.yml index 890477054..6e1299051 100644 --- a/DSL/Ruuter/services/POST/services/edit.yml +++ b/DSL/Ruuter/services/POST/services/edit.yml @@ -103,7 +103,7 @@ delete_old_mcq_files: url: "[#SERVICE_DMAPPER]/file-manager/delete-all-that-starts-with" body: path: "[#RUUTER_SERVICES_PATH]/${type}/services/active" - keyword: "${get_service_result.response.body[0].name}_" + keyword: "${get_service_result.response.body[0].name}_mcq_" result: deleteOldRes next: delete_all_mcq_files @@ -113,7 +113,7 @@ delete_all_mcq_files: url: "[#SERVICE_DMAPPER]/file-manager/delete-all-that-starts-with" body: path: "[#RUUTER_SERVICES_PATH]/${type}/services/active" - keyword: "${name}_" + keyword: "${name}_mcq_" result: deleteRes next: check_for_content diff --git a/DSL/Ruuter/services/POST/services/status.yml b/DSL/Ruuter/services/POST/services/status.yml index 77e1820bc..a44745809 100644 --- a/DSL/Ruuter/services/POST/services/status.yml +++ b/DSL/Ruuter/services/POST/services/status.yml @@ -197,7 +197,7 @@ activate_all_mcq_services: body: file_path: "[#RUUTER_SERVICES_PATH]/${ruuter_type}/[#RUUTER_SERVICES_DIR_PATH]/${old_file_status_path}" new_path: "[#RUUTER_SERVICES_PATH]/${ruuter_type}/[#RUUTER_SERVICES_DIR_PATH]/active" - keyword: "${name}_" + keyword: "${name}_mcq_" format: "yml" result: active_move_results next: return_ok @@ -257,7 +257,7 @@ dactivate_all_mcq_services: body: file_path: "[#RUUTER_SERVICES_PATH]/${ruuter_type}/[#RUUTER_SERVICES_DIR_PATH]/${old_file_status_path}" new_path: "[#RUUTER_SERVICES_PATH]/${ruuter_type}/[#RUUTER_SERVICES_DIR_PATH]/inactive" - keyword: "${name}_" + keyword: "${name}_mcq_" format: "tmp" result: inactive_move_results next: return_ok @@ -279,7 +279,7 @@ draft_all_mcq_services: body: file_path: "[#RUUTER_SERVICES_PATH]/${ruuter_type}/[#RUUTER_SERVICES_DIR_PATH]/${old_file_status_path}" new_path: "[#RUUTER_SERVICES_PATH]/${ruuter_type}/[#RUUTER_SERVICES_DIR_PATH]/draft" - keyword: "${name}_" + keyword: "${name}_mcq_" format: "tmp" result: inactive_move_results next: return_ok From bd787de9cfe45587912b79a6c9440181e317a792 Mon Sep 17 00:00:00 2001 From: 1AhmedYasser <26207361+1AhmedYasser@users.noreply.github.com> Date: Mon, 24 Aug 2026 04:08:08 +0300 Subject: [PATCH 10/12] chore(1149): Added search body field in main service list --- GUI/src/store/services.store.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/GUI/src/store/services.store.ts b/GUI/src/store/services.store.ts index 953769f11..70e3e4527 100644 --- a/GUI/src/store/services.store.ts +++ b/GUI/src/store/services.store.ts @@ -70,6 +70,7 @@ const useServiceListStore = create()( page_size: pagination.pageSize, sorting: sort, is_common: false, + search: '', }); const services = result.data.response[0].map?.((item: any) => ({ @@ -99,6 +100,7 @@ const useServiceListStore = create()( page_size: pagination.pageSize, sorting: sort, is_common: true, + search: '', }); const services = result.data.response[0].map?.((item: any) => ({ From 20992844da25af7e7011142633d685a3d64ce54b Mon Sep 17 00:00:00 2001 From: ffrose <119657383+ffrose@users.noreply.github.com> Date: Mon, 24 Aug 2026 11:35:11 +0300 Subject: [PATCH 11/12] Update .env.gui --- .env.gui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env.gui b/.env.gui index bfa8de1ac..dc1dd4e5f 100644 --- a/.env.gui +++ b/.env.gui @@ -1,4 +1,4 @@ RELEASE=PRE-ALPHA-test VERSION=3 BUILD=3 -FIX=2-test +FIX=3-test From 91e39304d52fd1d1d4228423360a27bfa1472313 Mon Sep 17 00:00:00 2001 From: ffrose <119657383+ffrose@users.noreply.github.com> Date: Mon, 24 Aug 2026 13:57:13 +0300 Subject: [PATCH 12/12] Update release.env --- release.env | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/release.env b/release.env index 72724cac6..b5d6c89a2 100644 --- a/release.env +++ b/release.env @@ -1,4 +1,4 @@ main -MAJOR=1 -MINOR=1 -PATCH=45 +MAJOR=3 +MINOR=3 +PATCH=1