diff --git a/src/assets/image/icons/connections/AzureBot.svg b/src/assets/image/icons/connections/AzureBot.svg
new file mode 100644
index 0000000000..986e6d2651
--- /dev/null
+++ b/src/assets/image/icons/connections/AzureBot.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/image/icons/connections/index.ts b/src/assets/image/icons/connections/index.ts
index 34f9193a3e..103fa960a5 100644
--- a/src/assets/image/icons/connections/index.ts
+++ b/src/assets/image/icons/connections/index.ts
@@ -37,3 +37,4 @@ export { default as LinearIcon } from "@assets/image/icons/connections/linear.sv
export { default as SalesforceIcon } from "@assets/image/icons/connections/Salesforce.svg?react";
// Taken from: https://www.svgrepo.com/svg/452111/teams
export { default as MicrosoftTeamsIcon } from "@assets/image/icons/connections/MicrosoftTeams.svg?react";
+export { default as AzureBotIcon } from "@assets/image/icons/connections/AzureBot.svg?react";
diff --git a/src/autokitteh b/src/autokitteh
index a3da264cb5..8f2dc44fd3 160000
--- a/src/autokitteh
+++ b/src/autokitteh
@@ -1 +1 @@
-Subproject commit a3da264cb509bb86b3453f489635f2ddb8edc6d2
+Subproject commit 8f2dc44fd3bcebc095aeccffb28d294bef49a678
diff --git a/src/components/organisms/connections/integrations/azurebot/add.tsx b/src/components/organisms/connections/integrations/azurebot/add.tsx
new file mode 100644
index 0000000000..85179cc39e
--- /dev/null
+++ b/src/components/organisms/connections/integrations/azurebot/add.tsx
@@ -0,0 +1,110 @@
+import React, { useEffect, useState } from "react";
+
+import { useTranslation } from "react-i18next";
+
+import { ConnectionAuthType } from "@enums";
+import { Integrations } from "@src/enums/components";
+import { useConnectionForm } from "@src/hooks";
+import { azureBotIntegrationSchema } from "@validations";
+
+import { Button, ErrorMessage, Input, SecretInput, Spinner } from "@components/atoms";
+
+export const AzureBotIntegrationAddForm = ({
+ connectionId,
+ triggerParentFormSubmit,
+ type,
+}: {
+ connectionId?: string;
+ triggerParentFormSubmit: () => void;
+ type: string;
+}) => {
+ const { createConnection, errors, handleSubmit, isLoading, register, setValue } = useConnectionForm(
+ azureBotIntegrationSchema,
+ "create"
+ );
+
+ const [lockState, setLockState] = useState({
+ app_password: true,
+ tenant_id: true,
+ });
+
+ const handleLockAction = (fieldName: string, newLockState: boolean) => {
+ setLockState((prev) => ({ ...prev, [fieldName]: newLockState }));
+ };
+
+ const configureConnection = async (connectionId: string) => {
+ await createConnection(connectionId, ConnectionAuthType.Initialized, Integrations.azurebot);
+ };
+
+ useEffect(() => {
+ setValue("auth_scopes", type);
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [type]);
+
+ useEffect(() => {
+ if (connectionId) {
+ configureConnection(connectionId);
+ }
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [connectionId]);
+
+ const { t } = useTranslation("integrations");
+
+ return (
+
+ );
+};
diff --git a/src/components/organisms/connections/integrations/azurebot/edit.tsx b/src/components/organisms/connections/integrations/azurebot/edit.tsx
new file mode 100644
index 0000000000..7b5e9e591d
--- /dev/null
+++ b/src/components/organisms/connections/integrations/azurebot/edit.tsx
@@ -0,0 +1,90 @@
+import React, { useState } from "react";
+
+import { useTranslation } from "react-i18next";
+
+import { useConnectionForm } from "@src/hooks";
+import { azureBotIntegrationSchema } from "@validations";
+
+import { Button, ErrorMessage, Input, SecretInput, Spinner } from "@components/atoms";
+
+import { FloppyDiskIcon } from "@assets/image/icons";
+
+const initialLockState: Record = {
+ app_password: true,
+ tenant_id: true,
+};
+
+export const AzureBotIntegrationEditForm = () => {
+ const { t } = useTranslation("integrations");
+ const [lockState, setLockState] = useState(initialLockState);
+
+ const { errors, handleSubmit, isLoading, onSubmitEdit, register, setValue } = useConnectionForm(
+ azureBotIntegrationSchema,
+ "edit"
+ );
+
+ const handleLockAction = (fieldName: string, newLockState: boolean) => {
+ setLockState((prev) => ({ ...prev, [fieldName]: newLockState }));
+ };
+
+ // Removed useEffect to not pre-populate values - just show clean form with labels
+
+ return (
+
+ );
+};
diff --git a/src/components/organisms/connections/integrations/azurebot/index.ts b/src/components/organisms/connections/integrations/azurebot/index.ts
new file mode 100644
index 0000000000..84a8d43df1
--- /dev/null
+++ b/src/components/organisms/connections/integrations/azurebot/index.ts
@@ -0,0 +1,2 @@
+export { AzureBotIntegrationAddForm } from "@components/organisms/connections/integrations/azurebot/add";
+export { AzureBotIntegrationEditForm } from "@components/organisms/connections/integrations/azurebot/edit";
diff --git a/src/components/organisms/connections/integrations/index.ts b/src/components/organisms/connections/integrations/index.ts
index c1e5a8f447..6287f60af2 100644
--- a/src/components/organisms/connections/integrations/index.ts
+++ b/src/components/organisms/connections/integrations/index.ts
@@ -58,3 +58,7 @@ export {
SalesforceIntegrationAddForm,
SalesforceIntegrationEditForm,
} from "@components/organisms/connections/integrations/salesforce";
+export {
+ AzureBotIntegrationAddForm,
+ AzureBotIntegrationEditForm,
+} from "@components/organisms/connections/integrations/azurebot";
diff --git a/src/constants/connections/addComponentsMapping.constants.ts b/src/constants/connections/addComponentsMapping.constants.ts
index bdbab5d38a..a75701e6c2 100644
--- a/src/constants/connections/addComponentsMapping.constants.ts
+++ b/src/constants/connections/addComponentsMapping.constants.ts
@@ -22,6 +22,7 @@ import {
HeightIntegrationAddForm,
ZoomIntegrationAddForm,
SalesforceIntegrationAddForm,
+ AzureBotIntegrationAddForm,
} from "@components/organisms/connections/integrations";
import { MicrosoftTeamsIntegrationAddForm } from "@components/organisms/connections/integrations/microsoft/teams";
@@ -49,5 +50,6 @@ export const integrationAddFormComponents: Partial = {
label: "Microsoft Teams",
value: Integrations.microsoft_teams,
},
+ azurebot: {
+ icon: AzureBotIcon,
+ label: "Azure Bot",
+ value: Integrations.azurebot,
+ },
};
const shouldHideIntegration: Partial> = {
diff --git a/src/hooks/useConnectionForm.ts b/src/hooks/useConnectionForm.ts
index a5a6ceb7e4..5743b7a75a 100644
--- a/src/hooks/useConnectionForm.ts
+++ b/src/hooks/useConnectionForm.ts
@@ -90,6 +90,7 @@ export const useConnectionForm = (validationSchema: ZodObject, mode
[Integrations.chatgpt]: ConnectionAuthType.Initialized,
[Integrations.googlegemini]: ConnectionAuthType.Key,
[Integrations.hubspot]: ConnectionAuthType.OauthDefault,
+ [Integrations.azurebot]: ConnectionAuthType.Initialized,
};
const defaultAuthType = integrationAuthDefaults[integrationName as string];
diff --git a/src/locales/en/dashboard/translation.json b/src/locales/en/dashboard/translation.json
index 333e54f0af..a1a8821f0e 100644
--- a/src/locales/en/dashboard/translation.json
+++ b/src/locales/en/dashboard/translation.json
@@ -157,5 +157,18 @@
"aiPage": {
"requiredMessage": "Please enter a message"
}
+ },
+ "welcomeLanding": {
+ "createNew": "Start",
+ "creating": "Creating...",
+ "createFromScratch": "Create from Scratch",
+ "createFromScratchDesc": "Build a new automation project from the ground up",
+ "createFromScratchButton": "Create New",
+ "learnMore": "Learn More",
+ "newProject": "Quick Tutorial",
+ "newProjectDesc": "Deploy, execute, and review the output of a simple Python project",
+ "title": "Welcome to AutoKitteh",
+ "useTemplate": "Start From Template",
+ "useTemplateDesc": "Select from a collection of out of the box templates"
}
}
diff --git a/src/locales/en/integrations/translation.json b/src/locales/en/integrations/translation.json
index 00910ab3cb..639b953898 100644
--- a/src/locales/en/integrations/translation.json
+++ b/src/locales/en/integrations/translation.json
@@ -240,5 +240,12 @@
"clientSecret": "Client Secret",
"tenantId": "Tenant ID (multi-tenant = 'common')"
}
+ },
+ "azurebot": {
+ "placeholders": {
+ "appId": "App ID",
+ "appPassword": "App Password",
+ "tenantId": "Tenant ID"
+ }
}
}
diff --git a/src/validations/connection.schema.ts b/src/validations/connection.schema.ts
index 94b2b3bdda..231eed3cbf 100644
--- a/src/validations/connection.schema.ts
+++ b/src/validations/connection.schema.ts
@@ -169,4 +169,10 @@ export const microsoftTeamsIntegrationSchema = z.object({
tenant_id: z.string().min(1, "Tenant ID is required"),
});
+export const azureBotIntegrationSchema = z.object({
+ app_id: z.string().min(1, "App ID is required"),
+ app_password: z.string().min(1, "App Password is required"),
+ tenant_id: z.string().min(1, "Tenant ID is required"),
+});
+
export const oauthSchema = z.object({});
diff --git a/src/validations/index.ts b/src/validations/index.ts
index 727ab08228..71e836555c 100644
--- a/src/validations/index.ts
+++ b/src/validations/index.ts
@@ -29,6 +29,7 @@ export {
zoomServerToServerIntegrationSchema,
salesforcePrivateAuthIntegrationSchema,
microsoftTeamsIntegrationSchema,
+ azureBotIntegrationSchema,
linearOauthIntegrationSchema,
} from "@validations/connection.schema";
export { codeAssetsSchema } from "@validations/coseAndAssets.schema";