From 1700394b73843858eb4264c4094c5a80dd81ffad Mon Sep 17 00:00:00 2001 From: Ori Lael Date: Tue, 15 Apr 2025 11:53:08 +0300 Subject: [PATCH 1/8] Enhance agent toolkit with new Monday.com app management tools - Introduced tools for creating, retrieving, and promoting apps and app features. - Added functionality for managing environment variables and storage data. - Updated the structure to support new app version and feature management capabilities. - Improved error handling and response formatting across new tools. --- packages/agent-toolkit/package.json | 1 + .../app-feature/create-app-feature.ts | 61 ++++++++++++ .../app-feature/get-app-features.ts | 58 +++++++++++ .../monday-apps-tools/app-feature/index.ts | 4 + .../schemas/app-feature-schemas.ts | 29 ++++++ .../app-version/get-app-version.ts | 48 +++++++++ .../app-version/get-app-versions.ts | 49 +++++++++ .../monday-apps-tools/app-version/index.ts | 4 + .../schemas/app-version-schemas.ts | 34 +++++++ .../app/create-app-from-manifest.ts | 57 +++++++++++ .../tools/monday-apps-tools/app/create-app.ts | 45 +++++++++ .../monday-apps-tools/app/get-all-apps.ts | 47 +++++++++ .../core/tools/monday-apps-tools/app/index.ts | 6 ++ .../monday-apps-tools/app/promote-app.ts | 46 +++++++++ .../app/schemas/app-schemas.ts | 44 +++++++++ .../base-tool/monday-apps-tool.ts | 99 +++++++++++++++++++ .../base/monday-apps-tool.ts | 99 +++++++++++++++++++ .../monday-apps-tools/consts/apps.consts.ts | 52 ++++++++++ .../monday-apps-tools/consts/routes.consts.ts | 79 +++++++++++++++ .../src/core/tools/monday-apps-tools/index.ts | 25 ++++- .../delete-environment-variable.ts | 43 ++++++++ .../monday-code/get-deployment-status.ts | 48 +++++++++ .../monday-code/get-tunnel-token.ts | 48 +++++++++ .../monday-apps-tools/monday-code/index.ts | 13 +++ .../list-environment-variable-keys.ts | 47 +++++++++ .../monday-code/schemas/code-schemas.ts | 44 +++++++++ .../monday-code/set-environment-variable.ts | 44 +++++++++ .../storage/export-storage-data.ts | 56 +++++++++++ .../tools/monday-apps-tools/storage/index.ts | 5 + .../storage/remove-app-storage-data.ts | 49 +++++++++ .../storage/schemas/storage-schemas.ts | 38 +++++++ .../storage/search-storage-records.ts | 56 +++++++++++ yarn.lock | 19 ++++ 33 files changed, 1395 insertions(+), 2 deletions(-) create mode 100644 packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/create-app-feature.ts create mode 100644 packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/get-app-features.ts create mode 100644 packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/index.ts create mode 100644 packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/schemas/app-feature-schemas.ts create mode 100644 packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/get-app-version.ts create mode 100644 packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/get-app-versions.ts create mode 100644 packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/index.ts create mode 100644 packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/schemas/app-version-schemas.ts create mode 100644 packages/agent-toolkit/src/core/tools/monday-apps-tools/app/create-app-from-manifest.ts create mode 100644 packages/agent-toolkit/src/core/tools/monday-apps-tools/app/create-app.ts create mode 100644 packages/agent-toolkit/src/core/tools/monday-apps-tools/app/get-all-apps.ts create mode 100644 packages/agent-toolkit/src/core/tools/monday-apps-tools/app/index.ts create mode 100644 packages/agent-toolkit/src/core/tools/monday-apps-tools/app/promote-app.ts create mode 100644 packages/agent-toolkit/src/core/tools/monday-apps-tools/app/schemas/app-schemas.ts create mode 100644 packages/agent-toolkit/src/core/tools/monday-apps-tools/base-tool/monday-apps-tool.ts create mode 100644 packages/agent-toolkit/src/core/tools/monday-apps-tools/base/monday-apps-tool.ts create mode 100644 packages/agent-toolkit/src/core/tools/monday-apps-tools/consts/apps.consts.ts create mode 100644 packages/agent-toolkit/src/core/tools/monday-apps-tools/consts/routes.consts.ts create mode 100644 packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/delete-environment-variable.ts create mode 100644 packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/get-deployment-status.ts create mode 100644 packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/get-tunnel-token.ts create mode 100644 packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/index.ts create mode 100644 packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/list-environment-variable-keys.ts create mode 100644 packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/schemas/code-schemas.ts create mode 100644 packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/set-environment-variable.ts create mode 100644 packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/export-storage-data.ts create mode 100644 packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/index.ts create mode 100644 packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/remove-app-storage-data.ts create mode 100644 packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/schemas/storage-schemas.ts create mode 100644 packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/search-storage-records.ts diff --git a/packages/agent-toolkit/package.json b/packages/agent-toolkit/package.json index 9aae6a6a..4574532e 100644 --- a/packages/agent-toolkit/package.json +++ b/packages/agent-toolkit/package.json @@ -50,6 +50,7 @@ }, "dependencies": { "@mondaydotcomorg/api": "^9.0.1", + "axios": "^1.8.4", "zod": "^3.24.2", "zod-to-json-schema": "^3.24.5" }, diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/create-app-feature.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/create-app-feature.ts new file mode 100644 index 00000000..ffcdb4fc --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/create-app-feature.ts @@ -0,0 +1,61 @@ +import { ToolInputType, ToolOutputType } from '../../../tool'; +import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; +import { MondayAppsToolCategory } from '../consts/apps.consts'; +import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; +import { CreateAppFeatureResponse, createAppFeatureSchema } from './schemas/app-feature-schemas'; + +export class CreateAppFeatureTool extends BaseMondayAppsTool< + typeof createAppFeatureSchema.shape, + CreateAppFeatureResponse +> { + name = 'monday_apps_create_app_feature'; + category = MondayAppsToolCategory.APP_FEATURE; + + getDescription(): string { + return 'Create a new app feature for an app version'; + } + + getInputSchema() { + return createAppFeatureSchema.shape; + } + + async execute( + input: ToolInputType, + ): Promise> { + try { + const { appId, appVersionId, name, type, data } = input; + + // Prepare the request body + const requestBody = { + name, + type, + data: data || {}, + }; + + const response = await this.executeApiRequest( + HttpMethod.POST, + API_ENDPOINTS.APP_FEATURES.CREATE(appId, appVersionId), + { data: requestBody }, + ); + + return { + content: `Successfully created app feature '${name}' of type ${type} for app ID ${appId}, version ID ${appVersionId}.`, + metadata: response, + }; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + return { + content: `Failed to create app feature: ${errorMessage}`, + metadata: { + statusCode: 500, + error: errorMessage, + id: 0, + app_id: input.appId, + app_version_id: input.appVersionId, + name: input.name, + type: input.type, + } as CreateAppFeatureResponse, + }; + } + } +} diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/get-app-features.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/get-app-features.ts new file mode 100644 index 00000000..689d8b5a --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/get-app-features.ts @@ -0,0 +1,58 @@ +import { ToolInputType, ToolOutputType } from '../../../tool'; +import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; +import { MondayAppsToolCategory } from '../consts/apps.consts'; +import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; +import { AppFeaturesResponse, getAppFeaturesSchema } from './schemas/app-feature-schemas'; + +export class GetAppFeaturesTool extends BaseMondayAppsTool { + name = 'monday_apps_get_app_features'; + category = MondayAppsToolCategory.APP_FEATURE; + + getDescription(): string { + return 'Retrieve app features by app version id'; + } + + getInputSchema() { + return getAppFeaturesSchema.shape; + } + + async execute(input: ToolInputType): Promise> { + try { + const { appVersionId, type } = input; + + const query: Record = {}; + if (type) { + query.type = type; + } + + const response = await this.executeApiRequest( + HttpMethod.GET, + API_ENDPOINTS.APP_FEATURES.GET_ALL(appVersionId), + { query }, + ); + + // The response is an array, so we need to check if it has a length property + const featuresCount = Array.isArray(response) ? response.length : 0; + + return { + content: `Successfully retrieved ${featuresCount} app features for app version ID ${appVersionId}${type ? ` of type ${type}` : ''}.`, + metadata: { + ...response, + length: featuresCount, + statusCode: response.statusCode, + headers: response.headers, + }, + }; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + return { + content: `Failed to retrieve app features: ${errorMessage}`, + metadata: { + statusCode: 500, + error: errorMessage, + length: 0, + } as AppFeaturesResponse, + }; + } + } +} diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/index.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/index.ts new file mode 100644 index 00000000..9875d876 --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/index.ts @@ -0,0 +1,4 @@ +import { GetAppFeaturesTool } from './get-app-features'; +import { CreateAppFeatureTool } from './create-app-feature'; + +export const appFeatureTools = [GetAppFeaturesTool, CreateAppFeatureTool]; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/schemas/app-feature-schemas.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/schemas/app-feature-schemas.ts new file mode 100644 index 00000000..ea5f08db --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/schemas/app-feature-schemas.ts @@ -0,0 +1,29 @@ +import { z } from 'zod'; +import { MondayApiResponse } from '../../base-tool/monday-apps-tool'; +import { AppFeatureType } from '../../consts/apps.consts'; + +export interface AppFeaturesResponse extends MondayApiResponse { + [key: string]: any; + length?: number; +} + +export const getAppFeaturesSchema = z.object({ + appVersionId: z.number().describe('The ID of the app version to get features for'), + type: z.nativeEnum(AppFeatureType).optional().describe('Filter by app feature type'), +}); + +export interface CreateAppFeatureResponse extends MondayApiResponse { + id: number; + app_id: number; + app_version_id: number; + name: string; + type: AppFeatureType; +} + +export const createAppFeatureSchema = z.object({ + appId: z.number().describe('The ID of the app'), + appVersionId: z.number().describe('The ID of the app version'), + name: z.string().describe('The name of the app feature'), + type: z.nativeEnum(AppFeatureType).describe('The type of the app feature'), + data: z.record(z.any()).optional().describe('Additional data for the app feature'), +}); diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/get-app-version.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/get-app-version.ts new file mode 100644 index 00000000..fc17898f --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/get-app-version.ts @@ -0,0 +1,48 @@ +import { ToolInputType, ToolOutputType } from '../../../tool'; +import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; +import { MondayAppsToolCategory } from '../consts/apps.consts'; +import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; +import { AppVersionApiData, getAppVersionSchema } from './schemas/app-version-schemas'; + +export class GetAppVersionTool extends BaseMondayAppsTool { + name = 'monday_apps_get_app_version'; + category = MondayAppsToolCategory.APP_VERSION; + + getDescription(): string { + return 'Retrieve the app version data'; + } + + getInputSchema() { + return getAppVersionSchema.shape; + } + + async execute(input: ToolInputType): Promise> { + try { + const { versionId } = input; + + const response = await this.executeApiRequest( + HttpMethod.GET, + API_ENDPOINTS.APP_VERSIONS.GET_BY_ID(versionId), + ); + + return { + content: `Successfully retrieved details for app version ID ${versionId}.`, + metadata: response, + }; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + return { + content: `Failed to retrieve app version: ${errorMessage}`, + metadata: { + statusCode: 500, + error: errorMessage, + id: input.versionId, // Fix the reference to versionId + name: '', + appId: 0, + versionNumber: '', + status: '', + } as AppVersionApiData, + }; + } + } +} diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/get-app-versions.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/get-app-versions.ts new file mode 100644 index 00000000..f4a6d355 --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/get-app-versions.ts @@ -0,0 +1,49 @@ +import { ToolInputType, ToolOutputType } from '../../../tool'; +import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; +import { MondayAppsToolCategory } from '../consts/apps.consts'; +import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; +import { AppVersionsApiDataResponse, getAppVersionsSchema } from './schemas/app-version-schemas'; + +export class GetAppVersionsTool extends BaseMondayAppsTool< + typeof getAppVersionsSchema.shape, + AppVersionsApiDataResponse +> { + name = 'monday_apps_get_app_versions'; + category = MondayAppsToolCategory.APP_VERSION; + + getDescription(): string { + return 'Retrieve all the app versions of an app'; + } + + getInputSchema() { + return getAppVersionsSchema.shape; + } + + async execute( + input: ToolInputType, + ): Promise> { + try { + const { appId } = input; + + const response = await this.executeApiRequest( + HttpMethod.GET, + API_ENDPOINTS.APP_VERSIONS.GET_ALL(appId), + ); + + return { + content: `Successfully retrieved ${response.appVersions.length} versions for app ID ${appId}.`, + metadata: response, + }; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + return { + content: `Failed to retrieve app versions: ${errorMessage}`, + metadata: { + statusCode: 500, + error: errorMessage, + appVersions: [], // Add required appVersions property + } as AppVersionsApiDataResponse, + }; + } + } +} diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/index.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/index.ts new file mode 100644 index 00000000..ee976466 --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/index.ts @@ -0,0 +1,4 @@ +import { GetAppVersionsTool } from './get-app-versions'; +import { GetAppVersionTool } from './get-app-version'; + +export const appVersionTools = [GetAppVersionsTool, GetAppVersionTool]; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/schemas/app-version-schemas.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/schemas/app-version-schemas.ts new file mode 100644 index 00000000..f0cde096 --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/schemas/app-version-schemas.ts @@ -0,0 +1,34 @@ +import { z } from 'zod'; +import { MondayApiResponse } from '../../base-tool/monday-apps-tool'; + +export interface AppVersionsApiDataResponse extends MondayApiResponse { + appVersions: Array<{ + id: number; + name: string; + appId: number; + versionNumber: string; + status: string; + mondayCodeConfig?: { + isMultiRegion: boolean; + }; + }>; +} + +export interface AppVersionApiData extends MondayApiResponse { + id: number; + name: string; + appId: number; + versionNumber: string; + status: string; + mondayCodeConfig?: { + isMultiRegion: boolean; + }; +} + +export const getAppVersionsSchema = z.object({ + appId: z.number().describe('The ID of the app to get versions for'), +}); + +export const getAppVersionSchema = z.object({ + versionId: z.number().describe('The ID of the app version to get'), +}); diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/create-app-from-manifest.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/create-app-from-manifest.ts new file mode 100644 index 00000000..54e90c0d --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/create-app-from-manifest.ts @@ -0,0 +1,57 @@ +import { ToolInputType, ToolOutputType } from '../../../tool'; +import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; +import { MondayAppsToolCategory } from '../consts/apps.consts'; +import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; +import { CreateAppResponse, createAppSchema } from './schemas/app-schemas'; + +export class CreateAppFromManifestTool extends BaseMondayAppsTool { + name = 'monday_apps_create_app_from_manifest'; + category = MondayAppsToolCategory.APP; + + getDescription(): string { + return 'Create a new app from a manifest file (Not ready to use yet)'; + } + + getInputSchema() { + return createAppSchema.shape; + } + + async execute(input: ToolInputType): Promise> { + try { + // Convert base64 to Blob for form data + const manifestData = Buffer.from(input.manifestFile, 'base64'); + + // Create FormData + const formData = new FormData(); + const blob = new Blob([manifestData], { type: 'application/zip' }); + formData.append('file', blob, 'manifest.zip'); + + const response = await this.executeApiRequest( + HttpMethod.POST, + API_ENDPOINTS.APPS.CREATE_FROM_MANIFEST, + { + data: formData, + headers: { + 'Content-Type': 'multipart/form-data', + }, + }, + ); + + return { + content: `Successfully created app- ${JSON.stringify(response)}.`, + metadata: response, + }; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + return { + content: `Failed to create app from manifest: ${errorMessage}`, + metadata: { + statusCode: 500, + error: errorMessage, + app: { id: 0, name: '' }, + app_version: { id: 0, name: '' }, + }, + }; + } + } +} diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/create-app.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/create-app.ts new file mode 100644 index 00000000..a1ad4e2a --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/create-app.ts @@ -0,0 +1,45 @@ +import { ToolInputType, ToolOutputType } from '../../../tool'; +import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; +import { MondayAppsToolCategory } from '../consts/apps.consts'; +import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; +import { CreateAppResponse, createPlainAppSchema } from './schemas/app-schemas'; + +export class CreateAppTool extends BaseMondayAppsTool { + name = 'monday_apps_create_app'; + category = MondayAppsToolCategory.APP; + + getDescription(): string { + return 'Create a new app with basic information'; + } + + getInputSchema() { + return createPlainAppSchema.shape; + } + + async execute(input: ToolInputType): Promise> { + try { + const response = await this.executeApiRequest(HttpMethod.POST, API_ENDPOINTS.APPS.CREATE, { + data: { + name: input.name, + description: input.description || '', + }, + }); + + return { + content: `Successfully created app "${input.name}": ${JSON.stringify(response)}.`, + metadata: response, + }; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + return { + content: `Failed to create app: ${errorMessage}`, + metadata: { + statusCode: 500, + error: errorMessage, + app: { id: 0, name: '' }, + app_version: { id: 0, name: '' }, + }, + }; + } + } +} diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/get-all-apps.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/get-all-apps.ts new file mode 100644 index 00000000..f81e11a9 --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/get-all-apps.ts @@ -0,0 +1,47 @@ +import { ToolInputType, ToolOutputType } from '../../../tool'; +import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; +import { MondayAppsToolCategory } from '../consts/apps.consts'; +import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; +import { AppApiDataResponse } from './schemas/app-schemas'; + +export class GetAllAppsTool extends BaseMondayAppsTool { + name = 'monday_apps_get_all_apps'; + category = MondayAppsToolCategory.APP; + + getDescription(): string { + return 'Retrieve all the development apps that the user has collaboration permissions for'; + } + + getInputSchema() { + return undefined; + } + + async execute(_input?: ToolInputType): Promise> { + try { + const response = await this.executeApiRequest(HttpMethod.GET, API_ENDPOINTS.APPS.GET_ALL); + + // Format the apps data for display + const appsDetails = response.apps + .map((app) => { + const multiRegion = app.mondayCodeConfig?.isMultiRegion ? ' (Multi-Region)' : ''; + return `- ID: ${app.id}, Name: ${app.name}${multiRegion}`; + }) + .join('\n'); + + return { + content: `Retrieved ${response.apps.length} apps:\n${appsDetails}`, + metadata: response, + }; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + return { + content: `Failed to retrieve apps: ${errorMessage}`, + metadata: { + statusCode: 500, + error: errorMessage, + apps: [], // Add required apps property + } as AppApiDataResponse, + }; + } + } +} diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/index.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/index.ts new file mode 100644 index 00000000..7f0c8368 --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/index.ts @@ -0,0 +1,6 @@ +import { GetAllAppsTool } from './get-all-apps'; +import { PromoteAppTool } from './promote-app'; +import { CreateAppFromManifestTool } from './create-app-from-manifest'; +import { CreateAppTool } from './create-app'; + +export const appTools = [GetAllAppsTool, PromoteAppTool, CreateAppFromManifestTool, CreateAppTool]; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/promote-app.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/promote-app.ts new file mode 100644 index 00000000..fa14cfbd --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/promote-app.ts @@ -0,0 +1,46 @@ +import { ToolInputType, ToolOutputType } from '../../../tool'; +import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; +import { MondayAppsToolCategory } from '../consts/apps.consts'; +import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; +import { PromoteAppResponse, promoteAppSchema } from './schemas/app-schemas'; + +export class PromoteAppTool extends BaseMondayAppsTool { + name = 'monday_apps_promote_app'; + category = MondayAppsToolCategory.APP; + + getDescription(): string { + return 'Promote an app version to live'; + } + + getInputSchema() { + return promoteAppSchema.shape; + } + + async execute(input: ToolInputType): Promise> { + try { + const { appId, versionId } = input; + const data = versionId ? { versionId } : undefined; + + const response = await this.executeApiRequest( + HttpMethod.POST, + API_ENDPOINTS.APPS.PROMOTE(appId), + { data }, + ); + + return { + content: `Successfully started promotion for app ID ${appId}${versionId ? ` and version ID ${versionId}` : ''}.`, + metadata: response, + }; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + return { + content: `Failed to promote app: ${errorMessage}`, + metadata: { + statusCode: 500, + error: errorMessage, + appId: input.appId, // Add required appId property + } as PromoteAppResponse, + }; + } + } +} diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/schemas/app-schemas.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/schemas/app-schemas.ts new file mode 100644 index 00000000..500d66a5 --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/schemas/app-schemas.ts @@ -0,0 +1,44 @@ +import { z } from 'zod'; +import { MondayApiResponse } from '../../base-tool/monday-apps-tool'; + +export interface AppApiDataResponse extends MondayApiResponse { + apps: Array<{ + id: number; + name: string; + mondayCodeConfig?: { + isMultiRegion: boolean; + }; + }>; +} + +export interface PromoteAppResponse extends MondayApiResponse { + appId: number; +} + +export const promoteAppSchema = z.object({ + appId: z.number().describe('The ID of the app to promote'), + versionId: z + .number() + .optional() + .describe('The version ID to promote. If not provided, the latest draft will be used'), +}); + +export interface CreateAppResponse extends MondayApiResponse { + app: { + id: number; + name: string; + }; + app_version: { + id: number; + name: string; + }; +} + +export const createAppSchema = z.object({ + manifestFile: z.string().describe('The base64 encoded manifest file content'), +}); + +export const createPlainAppSchema = z.object({ + name: z.string().describe('The name of the app'), + description: z.string().optional().describe('The description of the app'), +}); diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/base-tool/monday-apps-tool.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/base-tool/monday-apps-tool.ts new file mode 100644 index 00000000..bd8246b3 --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/base-tool/monday-apps-tool.ts @@ -0,0 +1,99 @@ +import axios, { AxiosRequestConfig } from 'axios'; +import * as crypto from 'crypto'; +import * as https from 'https'; +import { ZodRawShape } from 'zod'; +import { Tool, ToolInputType, ToolOutputType, ToolType } from '../../../tool'; +import { APPS_MS_TIMEOUT_IN_MS } from '../consts/routes.consts'; +import { MondayAppsToolCategory } from '../consts/apps.consts'; + +export interface MondayApiResponse { + statusCode: number; + headers?: Record; + [key: string]: any; +} + +export type MondayAppsToolType = new (mondayApiToken?: string) => BaseMondayAppsTool; + +export abstract class BaseMondayAppsTool< + Input extends ZodRawShape | undefined, + Output extends Record = never, +> implements Tool +{ + abstract name: string; + type: ToolType = ToolType.MONDAY_APPS; + abstract category: MondayAppsToolCategory; + private mondayApiToken?: string; + + constructor(mondayApiToken?: string) { + this.mondayApiToken = mondayApiToken; + } + + abstract getDescription(): string; + abstract getInputSchema(): Input; + abstract execute(input?: ToolInputType): Promise>; + + /** + * Execute an API request to the Monday.com API + */ + protected async executeApiRequest( + method: string, + endpoint: string, + options: { + data?: any; + query?: Record; + headers?: Record; + timeout?: number; + } = {}, + ): Promise { + if (!this.mondayApiToken) { + throw new Error('Monday API token is required to execute Monday.com API requests'); + } + + const { data, query, headers = {}, timeout = APPS_MS_TIMEOUT_IN_MS } = options; + const headersWithToken = { + ...headers, + Authorization: `${this.mondayApiToken}`, + 'Content-Type': 'application/json', + }; + + try { + // Create a custom HTTPS agent to handle self-signed certificates + const httpsAgent = new https.Agent({ + secureOptions: crypto.constants.SSL_OP_LEGACY_SERVER_CONNECT, + rejectUnauthorized: false, + }); + + const axiosConfig: AxiosRequestConfig = { + method, + url: endpoint, + data, + headers: headersWithToken, + params: query, + timeout, + httpsAgent, + }; + + const response = await axios.request(axiosConfig); + + return { + ...response.data, + statusCode: response.status, + headers: response.headers as Record, + } as T; + } catch (error: any) { + // Handle different types of errors + if (axios.isAxiosError(error)) { + const statusCode = error.response?.status || 500; + const errorData = error.response?.data || { message: error.message }; + + throw new Error( + `Monday.com API request failed with status ${statusCode}: ${ + typeof errorData === 'object' ? JSON.stringify(errorData) : errorData + }`, + ); + } + + throw new Error(`Failed to execute Monday.com API request: ${error.message}`); + } + } +} diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/base/monday-apps-tool.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/base/monday-apps-tool.ts new file mode 100644 index 00000000..bd8246b3 --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/base/monday-apps-tool.ts @@ -0,0 +1,99 @@ +import axios, { AxiosRequestConfig } from 'axios'; +import * as crypto from 'crypto'; +import * as https from 'https'; +import { ZodRawShape } from 'zod'; +import { Tool, ToolInputType, ToolOutputType, ToolType } from '../../../tool'; +import { APPS_MS_TIMEOUT_IN_MS } from '../consts/routes.consts'; +import { MondayAppsToolCategory } from '../consts/apps.consts'; + +export interface MondayApiResponse { + statusCode: number; + headers?: Record; + [key: string]: any; +} + +export type MondayAppsToolType = new (mondayApiToken?: string) => BaseMondayAppsTool; + +export abstract class BaseMondayAppsTool< + Input extends ZodRawShape | undefined, + Output extends Record = never, +> implements Tool +{ + abstract name: string; + type: ToolType = ToolType.MONDAY_APPS; + abstract category: MondayAppsToolCategory; + private mondayApiToken?: string; + + constructor(mondayApiToken?: string) { + this.mondayApiToken = mondayApiToken; + } + + abstract getDescription(): string; + abstract getInputSchema(): Input; + abstract execute(input?: ToolInputType): Promise>; + + /** + * Execute an API request to the Monday.com API + */ + protected async executeApiRequest( + method: string, + endpoint: string, + options: { + data?: any; + query?: Record; + headers?: Record; + timeout?: number; + } = {}, + ): Promise { + if (!this.mondayApiToken) { + throw new Error('Monday API token is required to execute Monday.com API requests'); + } + + const { data, query, headers = {}, timeout = APPS_MS_TIMEOUT_IN_MS } = options; + const headersWithToken = { + ...headers, + Authorization: `${this.mondayApiToken}`, + 'Content-Type': 'application/json', + }; + + try { + // Create a custom HTTPS agent to handle self-signed certificates + const httpsAgent = new https.Agent({ + secureOptions: crypto.constants.SSL_OP_LEGACY_SERVER_CONNECT, + rejectUnauthorized: false, + }); + + const axiosConfig: AxiosRequestConfig = { + method, + url: endpoint, + data, + headers: headersWithToken, + params: query, + timeout, + httpsAgent, + }; + + const response = await axios.request(axiosConfig); + + return { + ...response.data, + statusCode: response.status, + headers: response.headers as Record, + } as T; + } catch (error: any) { + // Handle different types of errors + if (axios.isAxiosError(error)) { + const statusCode = error.response?.status || 500; + const errorData = error.response?.data || { message: error.message }; + + throw new Error( + `Monday.com API request failed with status ${statusCode}: ${ + typeof errorData === 'object' ? JSON.stringify(errorData) : errorData + }`, + ); + } + + throw new Error(`Failed to execute Monday.com API request: ${error.message}`); + } + } +} diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/consts/apps.consts.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/consts/apps.consts.ts new file mode 100644 index 00000000..feb4ec72 --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/consts/apps.consts.ts @@ -0,0 +1,52 @@ +export enum AppFeatureType { + AppFeatureBoardView = 'AppFeatureBoardView', + AppFeatureIntegration = 'AppFeatureIntegration', + AppFeatureSolution = 'AppFeatureSolution', + AppFeatureItemView = 'AppFeatureItemView', + AppFeatureDashboardWidget = 'AppFeatureDashboardWidget', + AppFeatureAccountSettingsView = 'AppFeatureAccountSettingsView', + AppFeatureDocActions = 'AppFeatureDocActions', + AppFeatureObject = 'AppFeatureObject', + AppFeatureWorkspaceView = 'AppFeatureWorkspaceView', + AppFeatureAI = 'AppFeatureAI', + AppFeatureAiBoardMainMenuHeader = 'AppFeatureAiBoardMainMenuHeader', + AppFeatureAiItemUpdateActions = 'AppFeatureAiItemUpdateActions', + AppFeatureAiDocSlashCommand = 'AppFeatureAiDocSlashCommand', + AppFeatureAiDocContextualMenu = 'AppFeatureAiDocContextualMenu', + AppFeatureAiDocQuickStart = 'AppFeatureAiDocQuickStart', + AppFeatureAiDocTopBar = 'AppFeatureAiDocTopBar', + AppFeatureColumnTemplate = 'AppFeatureColumnTemplate', + AppFeatureAiIcAssistantHelpCenter = 'AppFeatureAiIcAssistantHelpCenter', + AppFeatureAppWizard = 'AppFeatureAppWizard', + AppFeatureGroupMenuAction = 'AppFeatureGroupMenuAction', + AppFeatureItemMenuAction = 'AppFeatureItemMenuAction', + AppFeatureNotificationKind = 'AppFeatureNotificationKind', + AppFeatureNotificationSettingKind = 'AppFeatureNotificationSettingKind', + AppFeatureBlock = 'AppFeatureBlock', + AppFeatureItemBatchAction = 'AppFeatureItemBatchAction', + AppFeatureAiFormula = 'AppFeatureAiFormula', + AppFeatureAiItemEmailsAndActivitiesActions = 'AppFeatureAiItemEmailsAndActivitiesActions', + AppFeatureAiEmailsAndActivitiesHeaderActions = 'AppFeatureAiEmailsAndActivitiesHeaderActions', + AppFeatureFieldType = 'AppFeatureFieldType', + AppFeatureProduct = 'AppFeatureProduct', + AppFeatureProductView = 'AppFeatureProductView', + AppFeatureBoardColumnAction = 'AppFeatureBoardColumnAction', + AppFeatureBoardColumnExtension = 'AppFeatureBoardColumnExtension', + AppFeaturePackagedBlock = 'AppFeaturePackagedBlock', + AppFeatureTopbar = 'AppFeatureTopbar', + AppFeatureWorkflowTemplate = 'AppFeatureWorkflowTemplate', + AppFeatureColumn = 'AppFeatureColumn', + AppFeatureSubWorkflow = 'AppFeatureSubWorkflow', + AppFeatureBoardHeaderAction = 'AppFeatureBoardHeaderAction', + AppFeatureDialog = 'AppFeatureDialog', + AppFeatureDataEntity = 'AppFeatureDataEntity', + AppFeatureSurfaceView = 'AppFeatureSurfaceView', +} + +export enum MondayAppsToolCategory { + APP = 'app', + APP_VERSION = 'app_version', + APP_FEATURE = 'app_feature', + STORAGE = 'storage', + MONDAY_CODE = 'monday_code', +} diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/consts/routes.consts.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/consts/routes.consts.ts new file mode 100644 index 00000000..c5efda1d --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/consts/routes.consts.ts @@ -0,0 +1,79 @@ +export enum HttpMethod { + GET = 'GET', + POST = 'POST', + PUT = 'PUT', + DELETE = 'DELETE', +} + +export const MONDAY_APPS_DOMAIN = 'https://monday-apps-ms.monday.com'; +const APPS_MS_PATH = '/apps_ms'; + +const BASE_API = '/api'; +const BASE_APPS = `${BASE_API}/apps`; +const BASE_APP_VERSIONS = `${BASE_API}/app-versions`; +const BASE_CODE = `${BASE_API}/code`; +const BASE_STORAGE = `${BASE_API}/storage`; + +const API_URL = `${MONDAY_APPS_DOMAIN}${BASE_API}`; +const APPS_URL = `${MONDAY_APPS_DOMAIN}${BASE_APPS}`; +const APP_VERSIONS_URL = `${MONDAY_APPS_DOMAIN}${BASE_APP_VERSIONS}`; +const CODE_URL = `${MONDAY_APPS_DOMAIN}${BASE_CODE}`; +const STORAGE_URL = `${MONDAY_APPS_DOMAIN}${BASE_STORAGE}`; +const APPS_MS_URL = `${MONDAY_APPS_DOMAIN}${APPS_MS_PATH}`; + +export const API_ENDPOINTS = { + APPS: { + GET_ALL: APPS_URL, + CREATE: APPS_URL, + CREATE_FROM_MANIFEST: `${APPS_URL}/manifest`, + GET_MANIFEST: (appId: number) => `${APPS_URL}/${appId}/manifest`, + UPDATE_MANIFEST: (appId: number) => `${APPS_URL}/${appId}/manifest`, + PROMOTE: (appId: number) => `${APPS_URL}/${appId}/promote`, + }, + + APP_VERSIONS: { + GET_ALL: (appId: number) => `${APPS_URL}/${appId}/versions`, + GET_BY_ID: (versionId: number) => `${APP_VERSIONS_URL}/${versionId}`, + GET_STATUS: (path: string) => `${API_URL}/${path}`, + }, + + APP_FEATURES: { + GET_ALL: (appVersionId: number) => `${APP_VERSIONS_URL}/${appVersionId}/app-features`, + GET_WITH_TYPES: (appVersionId: number, types?: string[]) => { + const url = `${APP_VERSIONS_URL}/${appVersionId}/app-features`; + const appFeatureTypes = types?.map((type, index) => `type[${index}]=${type}`).join('&'); + return appFeatureTypes ? `${url}?${appFeatureTypes}` : url; + }, + CREATE: (appId: number, appVersionId: number) => `${APPS_URL}/${appId}/app-versions/${appVersionId}/app-features`, + CREATE_RELEASE: (appId: number, appVersionId: number, appFeatureId: number) => + `${APPS_URL}/${appId}/versions/${appVersionId}/app-features/${appFeatureId}/releases`, + }, + + STORAGE: { + GET_BY_TERM: (appId: number, accountId: number, term: string) => + `${STORAGE_URL}/app/${appId}/account/${accountId}/records?term=${encodeURI(term)}`, + EXPORT_DATA: (appId: number, accountId: number) => + `${STORAGE_URL}/app/${appId}/account/${accountId}/records/export`, + REMOVE_APP_DATA: (appId: number, accountId: number) => `${APPS_URL}/${appId}/accounts/${accountId}`, + }, + + CODE: { + APP_VERSION_BASE: (appVersionId: number) => `${CODE_URL}/${appVersionId}`, + GET_DEPLOYMENT_STATUS: (appVersionId: number) => `${CODE_URL}/${appVersionId}/deployments`, + GET_DEPLOYMENT_SIGNED_URL: (appVersionId: number) => `${CODE_URL}/${appVersionId}/deployments/signed-url`, + UPLOAD_DEPLOYMENT: (appVersionId: number) => `${CODE_URL}/${appVersionId}/deployments`, + GET_LOGS: (appVersionId: number, logsType: string, additionalParams?: string) => + `${CODE_URL}/${appVersionId}/logs?type=${logsType}${additionalParams || ''}`, + GET_ENV_KEYS: (appId: number) => `${CODE_URL}/${appId}/env-keys`, + MANAGE_ENV: (appId: number, key: string) => `${CODE_URL}/${appId}/env/${key}`, + GET_SECRET_KEYS: (appId: number) => `${CODE_URL}/${appId}/secret-keys`, + MANAGE_SECRET: (appId: number, key: string) => `${CODE_URL}/${appId}/secrets/${key}`, + TUNNEL_TOKEN: `${CODE_URL}/tunnel-token`, + }, + + RELEASES: { + GET_APP_RELEASES: (appVersionId: number) => `${APPS_MS_URL}/app-versions/${appVersionId}/releases`, + }, +}; + +export const APPS_MS_TIMEOUT_IN_MS = 30000; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/index.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/index.ts index b7232bcc..e9b7511f 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/index.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/index.ts @@ -1,2 +1,23 @@ -import { Tool } from 'src/core/tool'; -export const allMondayAppsTools: (new (...args: any[]) => Tool)[] = []; +import { MondayAppsToolType } from './base-tool/monday-apps-tool'; +import { MondayAppsToolCategory } from './consts/apps.consts'; +import { storageTools } from './storage'; +import { appTools } from './app'; +import { appVersionTools } from './app-version'; +import { appFeatureTools } from './app-feature'; +import { codeTools } from './monday-code'; + +export const mondayAppsTools = { + [MondayAppsToolCategory.STORAGE]: storageTools, + [MondayAppsToolCategory.APP]: appTools, + [MondayAppsToolCategory.APP_VERSION]: appVersionTools, + [MondayAppsToolCategory.APP_FEATURE]: appFeatureTools, + [MondayAppsToolCategory.MONDAY_CODE]: codeTools, +}; + +export const allMondayAppsTools: MondayAppsToolType[] = [ + ...storageTools, + ...appTools, + ...appVersionTools, + ...appFeatureTools, + ...codeTools, +]; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/delete-environment-variable.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/delete-environment-variable.ts new file mode 100644 index 00000000..37db8947 --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/delete-environment-variable.ts @@ -0,0 +1,43 @@ +import { ToolInputType, ToolOutputType } from '../../../tool'; +import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; +import { MondayAppsToolCategory } from '../consts/apps.consts'; +import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; +import { EnvVarResponse, deleteEnvVarSchema } from './schemas/code-schemas'; + +export class DeleteEnvironmentVariableTool extends BaseMondayAppsTool { + name = 'monday_apps_delete_environment_variable'; + category = MondayAppsToolCategory.MONDAY_CODE; + + getDescription(): string { + return 'Delete an environment variable for an app'; + } + + getInputSchema() { + return deleteEnvVarSchema.shape; + } + + async execute(input: ToolInputType): Promise> { + try { + const { appId, key } = input; + + const response = await this.executeApiRequest( + HttpMethod.DELETE, + API_ENDPOINTS.CODE.MANAGE_ENV(appId, key), + ); + + return { + content: `Successfully deleted environment variable '${key}' for app ID ${appId}.`, + metadata: response, + }; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + return { + content: `Failed to delete environment variable: ${errorMessage}`, + metadata: { + statusCode: 500, + error: errorMessage, + } as EnvVarResponse, + }; + } + } +} diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/get-deployment-status.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/get-deployment-status.ts new file mode 100644 index 00000000..3028dde4 --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/get-deployment-status.ts @@ -0,0 +1,48 @@ +import { ToolInputType, ToolOutputType } from '../../../tool'; +import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; +import { MondayAppsToolCategory } from '../consts/apps.consts'; +import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; +import { DeploymentStatusResponse, getDeploymentStatusSchema } from './schemas/code-schemas'; + +export class GetDeploymentStatusTool extends BaseMondayAppsTool< + typeof getDeploymentStatusSchema.shape, + DeploymentStatusResponse +> { + name = 'monday_apps_get_deployment_status'; + category = MondayAppsToolCategory.MONDAY_CODE; + + getDescription(): string { + return 'Get the deployment status for a specific app version'; + } + + getInputSchema() { + return getDeploymentStatusSchema.shape; + } + + async execute( + input: ToolInputType, + ): Promise> { + try { + const { appVersionId } = input; + + const response = await this.executeApiRequest( + HttpMethod.GET, + API_ENDPOINTS.CODE.GET_DEPLOYMENT_STATUS(appVersionId), + ); + + return { + content: `Deployment status for app version ID ${appVersionId}: ${response.status || 'Unknown'}`, + metadata: response, + }; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + return { + content: `Failed to get deployment status: ${errorMessage}`, + metadata: { + statusCode: 500, + error: errorMessage, + } as DeploymentStatusResponse, + }; + } + } +} diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/get-tunnel-token.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/get-tunnel-token.ts new file mode 100644 index 00000000..288928bf --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/get-tunnel-token.ts @@ -0,0 +1,48 @@ +import { ToolInputType, ToolOutputType } from '../../../tool'; +import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; +import { MondayAppsToolCategory } from '../consts/apps.consts'; +import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; +import { TunnelTokenResponse, getTunnelTokenSchema } from './schemas/code-schemas'; + +export class GetTunnelTokenTool extends BaseMondayAppsTool { + name = 'monday_apps_get_tunnel_token'; + category = MondayAppsToolCategory.MONDAY_CODE; + + getDescription(): string { + return 'Get a tunnel token for exposing code running on the local machine'; + } + + getInputSchema() { + return getTunnelTokenSchema.shape; + } + + async execute(input: ToolInputType): Promise> { + try { + const { appId } = input; + + const query = appId ? { appId } : undefined; + + const response = await this.executeApiRequest( + HttpMethod.PUT, + API_ENDPOINTS.CODE.TUNNEL_TOKEN, + { query }, + ); + + return { + content: `Successfully retrieved tunnel token. Domain: ${response.domain}`, + metadata: response, + }; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + return { + content: `Failed to get tunnel token: ${errorMessage}`, + metadata: { + statusCode: 500, + error: errorMessage, + token: '', + domain: '', + } as TunnelTokenResponse, + }; + } + } +} diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/index.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/index.ts new file mode 100644 index 00000000..851af537 --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/index.ts @@ -0,0 +1,13 @@ +import { GetDeploymentStatusTool } from './get-deployment-status'; +import { GetTunnelTokenTool } from './get-tunnel-token'; +import { SetEnvironmentVariableTool } from './set-environment-variable'; +import { DeleteEnvironmentVariableTool } from './delete-environment-variable'; +import { ListEnvironmentVariableKeysTool } from './list-environment-variable-keys'; + +export const codeTools = [ + GetDeploymentStatusTool, + GetTunnelTokenTool, + SetEnvironmentVariableTool, + DeleteEnvironmentVariableTool, + ListEnvironmentVariableKeysTool, +]; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/list-environment-variable-keys.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/list-environment-variable-keys.ts new file mode 100644 index 00000000..e2365de7 --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/list-environment-variable-keys.ts @@ -0,0 +1,47 @@ +import { ToolInputType, ToolOutputType } from '../../../tool'; +import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; +import { MondayAppsToolCategory } from '../consts/apps.consts'; +import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; +import { EnvVarKeysResponse, listEnvVarKeysSchema } from './schemas/code-schemas'; + +export class ListEnvironmentVariableKeysTool extends BaseMondayAppsTool< + typeof listEnvVarKeysSchema.shape, + EnvVarKeysResponse +> { + name = 'monday_apps_list_environment_variable_keys'; + category = MondayAppsToolCategory.MONDAY_CODE; + + getDescription(): string { + return 'List all environment variable keys for an app'; + } + + getInputSchema() { + return listEnvVarKeysSchema.shape; + } + + async execute(input: ToolInputType): Promise> { + try { + const { appId } = input; + + const response = await this.executeApiRequest( + HttpMethod.GET, + API_ENDPOINTS.CODE.GET_ENV_KEYS(appId), + ); + + return { + content: `Found ${response.keys.length} environment variable keys for app ID ${appId}.`, + metadata: response, + }; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + return { + content: `Failed to list environment variable keys: ${errorMessage}`, + metadata: { + statusCode: 500, + error: errorMessage, + keys: [], + } as EnvVarKeysResponse, + }; + } + } +} diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/schemas/code-schemas.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/schemas/code-schemas.ts new file mode 100644 index 00000000..d3812bb4 --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/schemas/code-schemas.ts @@ -0,0 +1,44 @@ +import { z } from 'zod'; +import { MondayApiResponse } from '../../base-tool/monday-apps-tool'; + +export interface DeploymentStatusResponse extends MondayApiResponse { + status?: string; + creationDate?: string; + activeFromVersionId?: number; +} + +export const getDeploymentStatusSchema = z.object({ + appVersionId: z.number().describe('The ID of the app version to get deployment status for'), +}); + +export interface TunnelTokenResponse extends MondayApiResponse { + token: string; + domain: string; +} + +export const getTunnelTokenSchema = z.object({ + appId: z.number().optional().describe('The ID of the app to get a tunnel token for (optional)'), +}); + +export interface EnvVarResponse extends MondayApiResponse { + success?: boolean; +} + +export const baseEnvVarSchema = z.object({ + appId: z.number().describe('The ID of the app to manage environment variables for'), + key: z.string().describe('The environment variable key'), +}); + +export const setEnvVarSchema = baseEnvVarSchema.extend({ + value: z.string().describe('The environment variable value'), +}); + +export const deleteEnvVarSchema = baseEnvVarSchema; + +export interface EnvVarKeysResponse extends MondayApiResponse { + keys: string[]; +} + +export const listEnvVarKeysSchema = z.object({ + appId: z.number().describe('The ID of the app to list environment variable keys for'), +}); diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/set-environment-variable.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/set-environment-variable.ts new file mode 100644 index 00000000..6977fc93 --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/set-environment-variable.ts @@ -0,0 +1,44 @@ +import { ToolInputType, ToolOutputType } from '../../../tool'; +import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; +import { MondayAppsToolCategory } from '../consts/apps.consts'; +import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; +import { EnvVarResponse, setEnvVarSchema } from './schemas/code-schemas'; + +export class SetEnvironmentVariableTool extends BaseMondayAppsTool { + name = 'monday_apps_set_environment_variable'; + category = MondayAppsToolCategory.MONDAY_CODE; + + getDescription(): string { + return 'Set an environment variable for an app'; + } + + getInputSchema() { + return setEnvVarSchema.shape; + } + + async execute(input: ToolInputType): Promise> { + try { + const { appId, key, value } = input; + + const response = await this.executeApiRequest( + HttpMethod.PUT, + API_ENDPOINTS.CODE.MANAGE_ENV(appId, key), + { data: { value } }, + ); + + return { + content: `Successfully set environment variable '${key}' for app ID ${appId}.`, + metadata: response, + }; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + return { + content: `Failed to set environment variable: ${errorMessage}`, + metadata: { + statusCode: 500, + error: errorMessage, + } as EnvVarResponse, + }; + } + } +} diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/export-storage-data.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/export-storage-data.ts new file mode 100644 index 00000000..56138eb2 --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/export-storage-data.ts @@ -0,0 +1,56 @@ +import { ToolInputType, ToolOutputType } from 'src/core/tool'; +import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; +import { MondayAppsToolCategory } from '../consts/apps.consts'; +import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; +import { ExportStorageDataResponse, exportStorageDataSchema } from './schemas/storage-schemas'; + +export class ExportStorageDataTool extends BaseMondayAppsTool< + typeof exportStorageDataSchema.shape, + ExportStorageDataResponse +> { + name = 'monday_apps_export_storage_data'; + category = MondayAppsToolCategory.STORAGE; + + getDescription(): string { + return 'Export storage data from a Monday.com app'; + } + + getInputSchema() { + return exportStorageDataSchema.shape; + } + + async execute( + input: ToolInputType, + ): Promise> { + try { + const { appId, accountId, fileFormat } = input; + + const query: Record = {}; + if (fileFormat) { + query.fileFormat = fileFormat; + } + + const response = await this.executeApiRequest( + HttpMethod.GET, + API_ENDPOINTS.STORAGE.EXPORT_DATA(appId, accountId), + { query }, + ); + + return { + content: `Successfully exported storage data for app ID ${appId}, account ID ${accountId}.${ + response.downloadUrl ? ` Download URL: ${response.downloadUrl}` : '' + }`, + metadata: response, + }; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + return { + content: `Failed to export storage data: ${errorMessage}`, + metadata: { + statusCode: 500, + error: errorMessage, + } as ExportStorageDataResponse, + }; + } + } +} diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/index.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/index.ts new file mode 100644 index 00000000..bf21a9f4 --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/index.ts @@ -0,0 +1,5 @@ +import { SearchStorageRecordsTool } from './search-storage-records'; +import { ExportStorageDataTool } from './export-storage-data'; +import { RemoveAppStorageDataTool } from './remove-app-storage-data'; + +export const storageTools = [SearchStorageRecordsTool, ExportStorageDataTool, RemoveAppStorageDataTool]; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/remove-app-storage-data.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/remove-app-storage-data.ts new file mode 100644 index 00000000..23ba5be0 --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/remove-app-storage-data.ts @@ -0,0 +1,49 @@ +import { ToolInputType, ToolOutputType } from '../../../tool'; +import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; +import { MondayAppsToolCategory } from '../consts/apps.consts'; +import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; +import { RemoveAppStorageDataResponse, removeAppStorageDataSchema } from './schemas/storage-schemas'; + +export class RemoveAppStorageDataTool extends BaseMondayAppsTool< + typeof removeAppStorageDataSchema.shape, + RemoveAppStorageDataResponse +> { + name = 'monday_apps_remove_app_storage_data'; + category = MondayAppsToolCategory.STORAGE; + + getDescription(): string { + return 'Remove all storage data for a specific account on a specific app'; + } + + getInputSchema() { + return removeAppStorageDataSchema.shape; + } + + async execute( + input: ToolInputType, + ): Promise> { + try { + const { appId, accountId } = input; + + const response = await this.executeApiRequest( + HttpMethod.DELETE, + API_ENDPOINTS.STORAGE.REMOVE_APP_DATA(appId, accountId), + ); + + return { + content: `Successfully removed all data for app ID ${appId}, account ID ${accountId}.`, + metadata: response, + }; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + return { + content: `Failed to remove app data: ${errorMessage}`, + metadata: { + statusCode: 500, + error: errorMessage, + success: false, + } as RemoveAppStorageDataResponse, + }; + } + } +} diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/schemas/storage-schemas.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/schemas/storage-schemas.ts new file mode 100644 index 00000000..9be5d599 --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/schemas/storage-schemas.ts @@ -0,0 +1,38 @@ +import { z } from 'zod'; +import { MondayApiResponse } from '../../base-tool/monday-apps-tool'; + +export interface StorageRecordsResponse extends MondayApiResponse { + term: string; + records: Array<{ + key: string; + value: string; + backendOnly: boolean; + }>; + cursor?: string; +} + +export const searchStorageRecordsSchema = z.object({ + appId: z.number().describe('The ID of the app to search storage records for'), + accountId: z.number().describe('The ID of the account to search storage records for'), + term: z.string().describe('The term to search for in the storage records'), + cursor: z.string().optional().describe('The cursor for pagination'), +}); + +export interface ExportStorageDataResponse extends MondayApiResponse { + downloadUrl?: string; +} + +export const exportStorageDataSchema = z.object({ + appId: z.number().describe('The ID of the app to export storage data for'), + accountId: z.number().describe('The ID of the account to export storage data for'), + fileFormat: z.enum(['JSON', 'CSV']).optional().describe('The format of the exported file (JSON or CSV)'), +}); + +export interface RemoveAppStorageDataResponse extends MondayApiResponse { + success?: boolean; +} + +export const removeAppStorageDataSchema = z.object({ + appId: z.number().describe('The ID of the app to remove data for'), + accountId: z.number().describe('The ID of the account to remove data for'), +}); diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/search-storage-records.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/search-storage-records.ts new file mode 100644 index 00000000..70b83745 --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/search-storage-records.ts @@ -0,0 +1,56 @@ +import { ToolInputType, ToolOutputType } from 'src/core/tool'; +import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; +import { MondayAppsToolCategory } from '../consts/apps.consts'; +import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; +import { StorageRecordsResponse, searchStorageRecordsSchema } from './schemas/storage-schemas'; + +export class SearchStorageRecordsTool extends BaseMondayAppsTool< + typeof searchStorageRecordsSchema.shape, + StorageRecordsResponse +> { + name = 'monday_apps_search_storage_records'; + category = MondayAppsToolCategory.STORAGE; + + getDescription(): string { + return 'Search for storage records in a Monday.com app'; + } + + getInputSchema() { + return searchStorageRecordsSchema.shape; + } + + async execute( + input: ToolInputType, + ): Promise> { + try { + const { appId, accountId, term, cursor } = input; + + const query: Record = { term }; + if (cursor) { + query.cursor = cursor; + } + + const response = await this.executeApiRequest( + HttpMethod.GET, + API_ENDPOINTS.STORAGE.GET_BY_TERM(appId, accountId, term), + { query }, + ); + + return { + content: `Found ${response.records.length} storage records matching term '${term}' for app ID ${appId}, account ID ${accountId}.`, + metadata: response, + }; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + return { + content: `Failed to search storage records: ${errorMessage}`, + metadata: { + statusCode: 500, + error: errorMessage, + term: input.term, + records: [], + } as StorageRecordsResponse, + }; + } + } +} diff --git a/yarn.lock b/yarn.lock index a23384bb..c9a0af95 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1639,6 +1639,15 @@ auto-bind@~4.0.0: resolved "https://registry.yarnpkg.com/auto-bind/-/auto-bind-4.0.0.tgz#e3589fc6c2da8f7ca43ba9f84fa52a744fc997fb" integrity sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ== +axios@^1.8.4: + version "1.8.4" + resolved "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz#78990bb4bc63d2cae072952d374835950a82f447" + integrity sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + babel-jest@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" @@ -2681,6 +2690,11 @@ flatted@^3.2.9: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== +follow-redirects@^1.15.6: + version "1.15.9" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== + form-data-encoder@1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.2.tgz#1f1ae3dccf58ed4690b86d87e4f57c654fbab040" @@ -4341,6 +4355,11 @@ proxy-addr@^2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + punycode@^2.1.0: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" From 310320d45e415629d3a59b1b8d9746df57968243 Mon Sep 17 00:00:00 2001 From: Ori Lael Date: Tue, 15 Apr 2025 13:33:35 +0300 Subject: [PATCH 2/8] Enhance app feature and version management in agent toolkit - Improved response formatting for app feature creation and retrieval, providing detailed information about features and their states. - Updated schemas to include detailed app feature and version structures. - Enhanced error handling and response messages for app version retrieval and deployment status checks, offering clearer insights into the process. - Added detailed summaries for app versions and deployment statuses to improve user experience. --- .../app-feature/create-app-feature.ts | 34 ++++++++++++--- .../app-feature/get-app-features.ts | 15 ++++--- .../schemas/app-feature-schemas.ts | 42 +++++++++++++++---- .../app-version/get-app-version.ts | 36 ++++++++++------ .../app-version/get-app-versions.ts | 13 +++++- .../schemas/app-version-schemas.ts | 18 ++++---- .../monday-code/get-deployment-status.ts | 13 +++++- 7 files changed, 130 insertions(+), 41 deletions(-) diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/create-app-feature.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/create-app-feature.ts index ffcdb4fc..fcc48847 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/create-app-feature.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/create-app-feature.ts @@ -38,8 +38,9 @@ export class CreateAppFeatureTool extends BaseMondayAppsTool< { data: requestBody }, ); + const { app_feature } = response; return { - content: `Successfully created app feature '${name}' of type ${type} for app ID ${appId}, version ID ${appVersionId}.`, + content: `Successfully created app feature '${app_feature.name}' (ID: ${app_feature.id}) of type ${app_feature.type} for app ID ${app_feature.app_id}, version ID ${app_feature.app_version_id}. Feature state: ${app_feature.state}`, metadata: response, }; } catch (error) { @@ -49,11 +50,32 @@ export class CreateAppFeatureTool extends BaseMondayAppsTool< metadata: { statusCode: 500, error: errorMessage, - id: 0, - app_id: input.appId, - app_version_id: input.appVersionId, - name: input.name, - type: input.type, + app_feature: { + id: 0, + app_id: input.appId, + app_version_id: input.appVersionId, + app_feature_reference_id: 0, + source_app_feature_id: null, + name: input.name, + type: input.type, + state: 'error', + user_id: 0, + data: input.data || {}, + schema: null, + status: null, + client_instance_token: '', + created_at: new Date().toISOString(), + updated_at: new Date().toISOString(), + current_release: null, + configured_secret_names: [], + }, + app_feature_reference: { + id: 0, + created_at: new Date().toISOString(), + updated_at: new Date().toISOString(), + live_app_feature_id: 0, + app_feature_reference_id: 0, + }, } as CreateAppFeatureResponse, }; } diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/get-app-features.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/get-app-features.ts index 689d8b5a..81fa17f8 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/get-app-features.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/get-app-features.ts @@ -31,14 +31,19 @@ export class GetAppFeaturesTool extends BaseMondayAppsTool `${feature.name} (ID: ${feature.id}, Type: ${feature.type}, State: ${feature.state})`) + .join(', '); return { - content: `Successfully retrieved ${featuresCount} app features for app version ID ${appVersionId}${type ? ` of type ${type}` : ''}.`, + content: + `Successfully retrieved ${featuresCount} app features for app version ID ${appVersionId}${type ? ` of type ${type}` : ''}.\n` + + `Features: ${featuresSummary || 'No features found'}`, metadata: { ...response, - length: featuresCount, statusCode: response.statusCode, headers: response.headers, }, @@ -50,7 +55,7 @@ export class GetAppFeaturesTool extends BaseMondayAppsTool; + schema: boolean | null; + status: string | null; [key: string]: any; - length?: number; +} + +export interface AppFeaturesResponse extends MondayApiResponse { + appFeatures: AppFeature[]; } export const getAppFeaturesSchema = z.object({ @@ -12,12 +27,25 @@ export const getAppFeaturesSchema = z.object({ type: z.nativeEnum(AppFeatureType).optional().describe('Filter by app feature type'), }); -export interface CreateAppFeatureResponse extends MondayApiResponse { +export interface AppFeatureReference { id: number; - app_id: number; - app_version_id: number; - name: string; - type: AppFeatureType; + created_at: string; + updated_at: string; + live_app_feature_id: number; + app_feature_reference_id: number; +} + +export interface DetailedAppFeature extends AppFeature { + client_instance_token: string; + created_at: string; + updated_at: string; + current_release: string | null; + configured_secret_names: string[]; +} + +export interface CreateAppFeatureResponse extends MondayApiResponse { + app_feature: DetailedAppFeature; + app_feature_reference: AppFeatureReference; } export const createAppFeatureSchema = z.object({ diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/get-app-version.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/get-app-version.ts index fc17898f..56fb8a83 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/get-app-version.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/get-app-version.ts @@ -2,9 +2,9 @@ import { ToolInputType, ToolOutputType } from '../../../tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; -import { AppVersionApiData, getAppVersionSchema } from './schemas/app-version-schemas'; +import { AppVersionApiDataResponse, getAppVersionSchema } from './schemas/app-version-schemas'; -export class GetAppVersionTool extends BaseMondayAppsTool { +export class GetAppVersionTool extends BaseMondayAppsTool { name = 'monday_apps_get_app_version'; category = MondayAppsToolCategory.APP_VERSION; @@ -16,17 +16,24 @@ export class GetAppVersionTool extends BaseMondayAppsTool): Promise> { + async execute( + input: ToolInputType, + ): Promise> { try { const { versionId } = input; - const response = await this.executeApiRequest( + const response = await this.executeApiRequest( HttpMethod.GET, API_ENDPOINTS.APP_VERSIONS.GET_BY_ID(versionId), ); return { - content: `Successfully retrieved details for app version ID ${versionId}.`, + content: + `Successfully retrieved details for app version ID ${versionId}:\n` + + `Name: ${response.appVersion.name}\n` + + `App ID: ${response.appVersion.appId}\n` + + `Version Number: ${response.appVersion.versionNumber}\n` + + `Status: ${response.appVersion.status}`, metadata: response, }; } catch (error) { @@ -34,14 +41,17 @@ export class GetAppVersionTool extends BaseMondayAppsTool + [ + `- Version ${version.versionNumber} (ID: ${version.id})`, + ` Name: ${version.name}`, + ` Status: ${version.status}`, + ].join('\n'), + ) + .join('\n'); + return { - content: `Successfully retrieved ${response.appVersions.length} versions for app ID ${appId}.`, + content: `Successfully retrieved ${response.appVersions.length} versions for app ID ${appId}:\n\n${versionsSummary}`, metadata: response, }; } catch (error) { diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/schemas/app-version-schemas.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/schemas/app-version-schemas.ts index f0cde096..50564006 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/schemas/app-version-schemas.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/schemas/app-version-schemas.ts @@ -14,14 +14,16 @@ export interface AppVersionsApiDataResponse extends MondayApiResponse { }>; } -export interface AppVersionApiData extends MondayApiResponse { - id: number; - name: string; - appId: number; - versionNumber: string; - status: string; - mondayCodeConfig?: { - isMultiRegion: boolean; +export interface AppVersionApiDataResponse extends MondayApiResponse { + appVersion: { + id: number; + name: string; + appId: number; + versionNumber: string; + status: string; + mondayCodeConfig?: { + isMultiRegion: boolean; + }; }; } diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/get-deployment-status.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/get-deployment-status.ts index 3028dde4..0837bf5d 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/get-deployment-status.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/get-deployment-status.ts @@ -30,8 +30,19 @@ export class GetDeploymentStatusTool extends BaseMondayAppsTool< API_ENDPOINTS.CODE.GET_DEPLOYMENT_STATUS(appVersionId), ); + // Create a more detailed status message + const statusDetails = [ + `Status: ${response.status || 'Unknown'}`, + response.startTime ? `Started: ${new Date(response.startTime).toLocaleString()}` : null, + response.endTime ? `Completed: ${new Date(response.endTime).toLocaleString()}` : null, + response.error ? `Error: ${response.error}` : null, + response.logs ? `Logs: ${response.logs}` : null, + ] + .filter(Boolean) + .join('\n'); + return { - content: `Deployment status for app version ID ${appVersionId}: ${response.status || 'Unknown'}`, + content: `Deployment status for app version ID ${appVersionId}:\n${statusDetails}`, metadata: response, }; } catch (error) { From c8a2295cf33b6a8dc66bbc037d77110ed773e0c0 Mon Sep 17 00:00:00 2001 From: Ori Lael Date: Tue, 15 Apr 2025 13:40:52 +0300 Subject: [PATCH 3/8] Implement base class for Monday.com app tools and improve app creation response - Introduced a new base class for Monday.com app tools to streamline API interactions and enhance code organization. - Updated the app creation response to include app ID and version for better clarity and tracking. --- .../src/core/tools/monday-apps-tools/app/create-app.ts | 2 +- .../base/{monday-apps-tool.ts => base-monday-apps-tool.ts} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename packages/agent-toolkit/src/core/tools/monday-apps-tools/base/{monday-apps-tool.ts => base-monday-apps-tool.ts} (100%) diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/create-app.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/create-app.ts index a1ad4e2a..e4b47d95 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/create-app.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/create-app.ts @@ -26,7 +26,7 @@ export class CreateAppTool extends BaseMondayAppsTool Date: Tue, 15 Apr 2025 13:49:30 +0300 Subject: [PATCH 4/8] Bump version for agent-toolkit and monday-api-mcp to 1.1.0 - Updated version numbers in package.json for both agent-toolkit and monday-api-mcp to reflect the latest release. --- packages/agent-toolkit/package.json | 2 +- packages/monday-api-mcp/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/agent-toolkit/package.json b/packages/agent-toolkit/package.json index 7b605b1b..3c28cde1 100644 --- a/packages/agent-toolkit/package.json +++ b/packages/agent-toolkit/package.json @@ -1,6 +1,6 @@ { "name": "@mondaydotcomorg/agent-toolkit", - "version": "1.0.1", + "version": "1.1.0", "description": "monday.com agent toolkit", "type": "module", "exports": { diff --git a/packages/monday-api-mcp/package.json b/packages/monday-api-mcp/package.json index 6586689f..17df1c06 100644 --- a/packages/monday-api-mcp/package.json +++ b/packages/monday-api-mcp/package.json @@ -1,6 +1,6 @@ { "name": "@mondaydotcomorg/monday-api-mcp", - "version": "1.0.1", + "version": "1.1.0", "description": "MCP server for using the monday.com API", "license": "MIT", "type": "module", From 75660141fa727ad4923841bb2b6c80d5f6aefd9a Mon Sep 17 00:00:00 2001 From: Ori Lael Date: Mon, 21 Apr 2025 12:06:37 +0300 Subject: [PATCH 5/8] Refactor Monday Apps tools to incorporate ToolSubType enumeration - Updated various Monday Apps tools to include the ToolSubType property, categorizing them as READ or WRITE. - Modified the filter function to accept MondayAppsToolType for better type safety. - Removed the deprecated base class for Monday Apps tools, streamlining the codebase. --- .../app-feature/create-app-feature.ts | 3 +- .../app-feature/get-app-features.ts | 3 +- .../app-version/get-app-version.ts | 3 +- .../app-version/get-app-versions.ts | 3 +- .../app/create-app-from-manifest.ts | 3 +- .../tools/monday-apps-tools/app/create-app.ts | 3 +- .../monday-apps-tools/app/get-all-apps.ts | 3 +- .../monday-apps-tools/app/promote-app.ts | 3 +- .../base-tool/monday-apps-tool.ts | 3 +- .../base/base-monday-apps-tool.ts | 99 ------------------- .../delete-environment-variable.ts | 3 +- .../monday-code/get-deployment-status.ts | 3 +- .../monday-code/get-tunnel-token.ts | 3 +- .../list-environment-variable-keys.ts | 3 +- .../monday-code/set-environment-variable.ts | 3 +- .../storage/export-storage-data.ts | 3 +- .../storage/remove-app-storage-data.ts | 3 +- .../storage/search-storage-records.ts | 3 +- .../src/core/tools/monday-apps-tools/utils.ts | 9 +- .../platform-api-tools/create-column-tool.ts | 2 +- 20 files changed, 40 insertions(+), 121 deletions(-) delete mode 100644 packages/agent-toolkit/src/core/tools/monday-apps-tools/base/base-monday-apps-tool.ts diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/create-app-feature.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/create-app-feature.ts index fcc48847..563f4adb 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/create-app-feature.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/create-app-feature.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType } from '../../../tool'; +import { ToolInputType, ToolOutputType, ToolSubType } from '../../../tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -10,6 +10,7 @@ export class CreateAppFeatureTool extends BaseMondayAppsTool< > { name = 'monday_apps_create_app_feature'; category = MondayAppsToolCategory.APP_FEATURE; + subType: ToolSubType = ToolSubType.WRITE; getDescription(): string { return 'Create a new app feature for an app version'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/get-app-features.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/get-app-features.ts index 81fa17f8..8b46d578 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/get-app-features.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/get-app-features.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType } from '../../../tool'; +import { ToolInputType, ToolOutputType, ToolSubType } from '../../../tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -7,6 +7,7 @@ import { AppFeaturesResponse, getAppFeaturesSchema } from './schemas/app-feature export class GetAppFeaturesTool extends BaseMondayAppsTool { name = 'monday_apps_get_app_features'; category = MondayAppsToolCategory.APP_FEATURE; + subType: ToolSubType = ToolSubType.READ; getDescription(): string { return 'Retrieve app features by app version id'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/get-app-version.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/get-app-version.ts index 56fb8a83..a7194c49 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/get-app-version.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/get-app-version.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType } from '../../../tool'; +import { ToolInputType, ToolOutputType, ToolSubType } from '../../../tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -7,6 +7,7 @@ import { AppVersionApiDataResponse, getAppVersionSchema } from './schemas/app-ve export class GetAppVersionTool extends BaseMondayAppsTool { name = 'monday_apps_get_app_version'; category = MondayAppsToolCategory.APP_VERSION; + subType: ToolSubType = ToolSubType.READ; getDescription(): string { return 'Retrieve the app version data'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/get-app-versions.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/get-app-versions.ts index e7ae51c5..ade81172 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/get-app-versions.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/get-app-versions.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType } from '../../../tool'; +import { ToolInputType, ToolOutputType, ToolSubType } from '../../../tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -10,6 +10,7 @@ export class GetAppVersionsTool extends BaseMondayAppsTool< > { name = 'monday_apps_get_app_versions'; category = MondayAppsToolCategory.APP_VERSION; + subType: ToolSubType = ToolSubType.READ; getDescription(): string { return 'Retrieve all the app versions of an app'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/create-app-from-manifest.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/create-app-from-manifest.ts index 54e90c0d..e3c32200 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/create-app-from-manifest.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/create-app-from-manifest.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType } from '../../../tool'; +import { ToolInputType, ToolOutputType, ToolSubType } from '../../../tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -7,6 +7,7 @@ import { CreateAppResponse, createAppSchema } from './schemas/app-schemas'; export class CreateAppFromManifestTool extends BaseMondayAppsTool { name = 'monday_apps_create_app_from_manifest'; category = MondayAppsToolCategory.APP; + subType: ToolSubType = ToolSubType.WRITE; getDescription(): string { return 'Create a new app from a manifest file (Not ready to use yet)'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/create-app.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/create-app.ts index e4b47d95..b0d69d94 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/create-app.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/create-app.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType } from '../../../tool'; +import { ToolInputType, ToolOutputType, ToolSubType } from '../../../tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -7,6 +7,7 @@ import { CreateAppResponse, createPlainAppSchema } from './schemas/app-schemas'; export class CreateAppTool extends BaseMondayAppsTool { name = 'monday_apps_create_app'; category = MondayAppsToolCategory.APP; + subType: ToolSubType = ToolSubType.WRITE; getDescription(): string { return 'Create a new app with basic information'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/get-all-apps.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/get-all-apps.ts index f81e11a9..040627d4 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/get-all-apps.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/get-all-apps.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType } from '../../../tool'; +import { ToolInputType, ToolOutputType, ToolSubType } from '../../../tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -7,6 +7,7 @@ import { AppApiDataResponse } from './schemas/app-schemas'; export class GetAllAppsTool extends BaseMondayAppsTool { name = 'monday_apps_get_all_apps'; category = MondayAppsToolCategory.APP; + subType: ToolSubType = ToolSubType.READ; getDescription(): string { return 'Retrieve all the development apps that the user has collaboration permissions for'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/promote-app.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/promote-app.ts index fa14cfbd..b75eec54 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/promote-app.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/promote-app.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType } from '../../../tool'; +import { ToolInputType, ToolOutputType, ToolSubType } from '../../../tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -7,6 +7,7 @@ import { PromoteAppResponse, promoteAppSchema } from './schemas/app-schemas'; export class PromoteAppTool extends BaseMondayAppsTool { name = 'monday_apps_promote_app'; category = MondayAppsToolCategory.APP; + subType: ToolSubType = ToolSubType.WRITE; getDescription(): string { return 'Promote an app version to live'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/base-tool/monday-apps-tool.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/base-tool/monday-apps-tool.ts index bd8246b3..42f4eb15 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/base-tool/monday-apps-tool.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/base-tool/monday-apps-tool.ts @@ -2,7 +2,7 @@ import axios, { AxiosRequestConfig } from 'axios'; import * as crypto from 'crypto'; import * as https from 'https'; import { ZodRawShape } from 'zod'; -import { Tool, ToolInputType, ToolOutputType, ToolType } from '../../../tool'; +import { Tool, ToolInputType, ToolOutputType, ToolSubType, ToolType } from '../../../tool'; import { APPS_MS_TIMEOUT_IN_MS } from '../consts/routes.consts'; import { MondayAppsToolCategory } from '../consts/apps.consts'; @@ -21,6 +21,7 @@ export abstract class BaseMondayAppsTool< { abstract name: string; type: ToolType = ToolType.MONDAY_APPS; + abstract subType: ToolSubType; abstract category: MondayAppsToolCategory; private mondayApiToken?: string; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/base/base-monday-apps-tool.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/base/base-monday-apps-tool.ts deleted file mode 100644 index bd8246b3..00000000 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/base/base-monday-apps-tool.ts +++ /dev/null @@ -1,99 +0,0 @@ -import axios, { AxiosRequestConfig } from 'axios'; -import * as crypto from 'crypto'; -import * as https from 'https'; -import { ZodRawShape } from 'zod'; -import { Tool, ToolInputType, ToolOutputType, ToolType } from '../../../tool'; -import { APPS_MS_TIMEOUT_IN_MS } from '../consts/routes.consts'; -import { MondayAppsToolCategory } from '../consts/apps.consts'; - -export interface MondayApiResponse { - statusCode: number; - headers?: Record; - [key: string]: any; -} - -export type MondayAppsToolType = new (mondayApiToken?: string) => BaseMondayAppsTool; - -export abstract class BaseMondayAppsTool< - Input extends ZodRawShape | undefined, - Output extends Record = never, -> implements Tool -{ - abstract name: string; - type: ToolType = ToolType.MONDAY_APPS; - abstract category: MondayAppsToolCategory; - private mondayApiToken?: string; - - constructor(mondayApiToken?: string) { - this.mondayApiToken = mondayApiToken; - } - - abstract getDescription(): string; - abstract getInputSchema(): Input; - abstract execute(input?: ToolInputType): Promise>; - - /** - * Execute an API request to the Monday.com API - */ - protected async executeApiRequest( - method: string, - endpoint: string, - options: { - data?: any; - query?: Record; - headers?: Record; - timeout?: number; - } = {}, - ): Promise { - if (!this.mondayApiToken) { - throw new Error('Monday API token is required to execute Monday.com API requests'); - } - - const { data, query, headers = {}, timeout = APPS_MS_TIMEOUT_IN_MS } = options; - const headersWithToken = { - ...headers, - Authorization: `${this.mondayApiToken}`, - 'Content-Type': 'application/json', - }; - - try { - // Create a custom HTTPS agent to handle self-signed certificates - const httpsAgent = new https.Agent({ - secureOptions: crypto.constants.SSL_OP_LEGACY_SERVER_CONNECT, - rejectUnauthorized: false, - }); - - const axiosConfig: AxiosRequestConfig = { - method, - url: endpoint, - data, - headers: headersWithToken, - params: query, - timeout, - httpsAgent, - }; - - const response = await axios.request(axiosConfig); - - return { - ...response.data, - statusCode: response.status, - headers: response.headers as Record, - } as T; - } catch (error: any) { - // Handle different types of errors - if (axios.isAxiosError(error)) { - const statusCode = error.response?.status || 500; - const errorData = error.response?.data || { message: error.message }; - - throw new Error( - `Monday.com API request failed with status ${statusCode}: ${ - typeof errorData === 'object' ? JSON.stringify(errorData) : errorData - }`, - ); - } - - throw new Error(`Failed to execute Monday.com API request: ${error.message}`); - } - } -} diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/delete-environment-variable.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/delete-environment-variable.ts index 37db8947..a1f973fd 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/delete-environment-variable.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/delete-environment-variable.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType } from '../../../tool'; +import { ToolInputType, ToolOutputType, ToolSubType } from '../../../tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -7,6 +7,7 @@ import { EnvVarResponse, deleteEnvVarSchema } from './schemas/code-schemas'; export class DeleteEnvironmentVariableTool extends BaseMondayAppsTool { name = 'monday_apps_delete_environment_variable'; category = MondayAppsToolCategory.MONDAY_CODE; + subType: ToolSubType = ToolSubType.WRITE; getDescription(): string { return 'Delete an environment variable for an app'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/get-deployment-status.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/get-deployment-status.ts index 0837bf5d..8d566595 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/get-deployment-status.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/get-deployment-status.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType } from '../../../tool'; +import { ToolInputType, ToolOutputType, ToolSubType } from '../../../tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -10,6 +10,7 @@ export class GetDeploymentStatusTool extends BaseMondayAppsTool< > { name = 'monday_apps_get_deployment_status'; category = MondayAppsToolCategory.MONDAY_CODE; + subType: ToolSubType = ToolSubType.READ; getDescription(): string { return 'Get the deployment status for a specific app version'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/get-tunnel-token.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/get-tunnel-token.ts index 288928bf..b3079462 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/get-tunnel-token.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/get-tunnel-token.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType } from '../../../tool'; +import { ToolInputType, ToolOutputType, ToolSubType } from '../../../tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -7,6 +7,7 @@ import { TunnelTokenResponse, getTunnelTokenSchema } from './schemas/code-schema export class GetTunnelTokenTool extends BaseMondayAppsTool { name = 'monday_apps_get_tunnel_token'; category = MondayAppsToolCategory.MONDAY_CODE; + subType: ToolSubType = ToolSubType.READ; getDescription(): string { return 'Get a tunnel token for exposing code running on the local machine'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/list-environment-variable-keys.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/list-environment-variable-keys.ts index e2365de7..87cc2fa7 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/list-environment-variable-keys.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/list-environment-variable-keys.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType } from '../../../tool'; +import { ToolInputType, ToolOutputType, ToolSubType } from '../../../tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -10,6 +10,7 @@ export class ListEnvironmentVariableKeysTool extends BaseMondayAppsTool< > { name = 'monday_apps_list_environment_variable_keys'; category = MondayAppsToolCategory.MONDAY_CODE; + subType: ToolSubType = ToolSubType.READ; getDescription(): string { return 'List all environment variable keys for an app'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/set-environment-variable.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/set-environment-variable.ts index 6977fc93..ba69ce2f 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/set-environment-variable.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/set-environment-variable.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType } from '../../../tool'; +import { ToolInputType, ToolOutputType, ToolSubType } from '../../../tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -7,6 +7,7 @@ import { EnvVarResponse, setEnvVarSchema } from './schemas/code-schemas'; export class SetEnvironmentVariableTool extends BaseMondayAppsTool { name = 'monday_apps_set_environment_variable'; category = MondayAppsToolCategory.MONDAY_CODE; + subType: ToolSubType = ToolSubType.WRITE; getDescription(): string { return 'Set an environment variable for an app'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/export-storage-data.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/export-storage-data.ts index 56138eb2..5b653adc 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/export-storage-data.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/export-storage-data.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType } from 'src/core/tool'; +import { ToolInputType, ToolOutputType, ToolSubType } from 'src/core/tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -10,6 +10,7 @@ export class ExportStorageDataTool extends BaseMondayAppsTool< > { name = 'monday_apps_export_storage_data'; category = MondayAppsToolCategory.STORAGE; + subType: ToolSubType = ToolSubType.READ; getDescription(): string { return 'Export storage data from a Monday.com app'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/remove-app-storage-data.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/remove-app-storage-data.ts index 23ba5be0..63dec34a 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/remove-app-storage-data.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/remove-app-storage-data.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType } from '../../../tool'; +import { ToolInputType, ToolOutputType, ToolSubType } from '../../../tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -10,6 +10,7 @@ export class RemoveAppStorageDataTool extends BaseMondayAppsTool< > { name = 'monday_apps_remove_app_storage_data'; category = MondayAppsToolCategory.STORAGE; + subType: ToolSubType = ToolSubType.WRITE; getDescription(): string { return 'Remove all storage data for a specific account on a specific app'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/search-storage-records.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/search-storage-records.ts index 70b83745..eda579ec 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/search-storage-records.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/search-storage-records.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType } from 'src/core/tool'; +import { ToolInputType, ToolOutputType, ToolSubType } from 'src/core/tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -10,6 +10,7 @@ export class SearchStorageRecordsTool extends BaseMondayAppsTool< > { name = 'monday_apps_search_storage_records'; category = MondayAppsToolCategory.STORAGE; + subType: ToolSubType = ToolSubType.READ; getDescription(): string { return 'Search for storage records in a Monday.com app'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/utils.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/utils.ts index bcde9d63..cc6de0ba 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/utils.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/utils.ts @@ -1,11 +1,12 @@ import { ToolsConfiguration } from 'src/mcp/toolkit'; -import { Tool, ToolSubType } from '../../tool'; +import { ToolSubType, ToolType } from '../../tool'; +import { MondayAppsToolType } from './base-tool/monday-apps-tool'; -export function filterMondayAppsTools Tool>( - tools: T[], +export function filterMondayAppsTools( + tools: MondayAppsToolType[], mondayApiToken: string, config?: ToolsConfiguration, -): T[] { +): MondayAppsToolType[] { if (!config) { return tools; } diff --git a/packages/agent-toolkit/src/core/tools/platform-api-tools/create-column-tool.ts b/packages/agent-toolkit/src/core/tools/platform-api-tools/create-column-tool.ts index af822fff..f3f4d1c8 100644 --- a/packages/agent-toolkit/src/core/tools/platform-api-tools/create-column-tool.ts +++ b/packages/agent-toolkit/src/core/tools/platform-api-tools/create-column-tool.ts @@ -1,5 +1,5 @@ import { z } from 'zod'; -import { ToolInputType, ToolOutputType, ToolSubType, ToolSubType, ToolType } from '../../tool'; +import { ToolInputType, ToolOutputType, ToolSubType, ToolType } from '../../tool'; import { BaseMondayApiTool } from './base-monday-api-tool'; import { createColumn } from '../../../monday-graphql/queries.graphql'; import { From c9935b7a71dc387fe4dd07fba0a6c6cb1fc8afd7 Mon Sep 17 00:00:00 2001 From: Ori Lael Date: Tue, 22 Apr 2025 10:34:01 +0300 Subject: [PATCH 6/8] Add Monday Apps tools option to README.md - Introduced a new command line option `--enable-monday-apps-tools` for enabling Monday Apps tools in the documentation. - Updated the README to reflect this addition, enhancing clarity for users on available features. --- packages/monday-api-mcp/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/monday-api-mcp/README.md b/packages/monday-api-mcp/README.md index 3121e259..77d42af0 100644 --- a/packages/monday-api-mcp/README.md +++ b/packages/monday-api-mcp/README.md @@ -34,6 +34,7 @@ The Monday API token can also be provided via the `monday_token` environment var | API Version | `--version`, `-v` | Monday.com API version | No | `current` | | Read Only Mode | `--read-only`, `-ro` | Enable read-only mode | No | `false` | | Dynamic API Tools | `--enable-dynamic-api-tools`, `-edat` | (Beta) Enable dynamic API tools (Mode that includes the whole API schema, not supported when using read-only mode) | No | `false` | +| Monday apps Tools | `--enable-monday-apps-tools`, `-emat` | (Beta) Enable Monday Apps tools | No | `false` | ## 💻 Claude Desktop Integration From f9ad6ae5335e016bf174c9128a88e8b89c0906c0 Mon Sep 17 00:00:00 2001 From: Ori Lael Date: Thu, 24 Apr 2025 13:51:21 +0300 Subject: [PATCH 7/8] Add support for BaseMondayAppsTool in tool instance creation - Updated the createToolInstance function to handle instances of BaseMondayAppsTool, allowing for initialization with an apiToken. - Enhanced the tool instantiation logic to support additional tool types, improving flexibility in the toolkit. --- packages/agent-toolkit/src/utils/tools/initializing.utils.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/agent-toolkit/src/utils/tools/initializing.utils.ts b/packages/agent-toolkit/src/utils/tools/initializing.utils.ts index 1bdd4436..e552d2fe 100644 --- a/packages/agent-toolkit/src/utils/tools/initializing.utils.ts +++ b/packages/agent-toolkit/src/utils/tools/initializing.utils.ts @@ -1,9 +1,12 @@ import { ApiClient } from '@mondaydotcomorg/api'; +import { BaseMondayAppsTool } from 'src/core/tools/monday-apps-tools/base-tool/monday-apps-tool'; import { BaseMondayApiTool } from 'src/core/tools/platform-api-tools/base-monday-api-tool'; export const createToolInstance = (tool: any, instanceOptions: { apiClient: ApiClient; apiToken: string }) => { if (tool.prototype instanceof BaseMondayApiTool) { return new tool(instanceOptions.apiClient); + } else if (tool.prototype instanceof BaseMondayAppsTool) { + return new tool(instanceOptions.apiToken); } return new tool(); }; From 78a7938ffe5967d54ec0a15c2b4dc82825984a61 Mon Sep 17 00:00:00 2001 From: Ori Lael Date: Thu, 24 Apr 2025 13:53:40 +0300 Subject: [PATCH 8/8] Refactor tool type definitions to use ToolType enumeration - Replaced ToolSubType with ToolType in various Monday Apps tools for consistency. - Updated import statements and tool definitions across multiple files to reflect this change. - Enhanced clarity and organization in the toolkit by standardizing tool categorization. --- .../monday-apps-tools/app-feature/create-app-feature.ts | 4 ++-- .../monday-apps-tools/app-feature/get-app-features.ts | 4 ++-- .../src/core/tools/monday-apps-tools/app-feature/index.ts | 3 +++ .../tools/monday-apps-tools/app-version/get-app-version.ts | 4 ++-- .../monday-apps-tools/app-version/get-app-versions.ts | 4 ++-- .../src/core/tools/monday-apps-tools/app-version/index.ts | 3 +++ .../monday-apps-tools/app/create-app-from-manifest.ts | 4 ++-- .../src/core/tools/monday-apps-tools/app/create-app.ts | 4 ++-- .../src/core/tools/monday-apps-tools/app/get-all-apps.ts | 4 ++-- .../src/core/tools/monday-apps-tools/app/index.ts | 5 +++++ .../src/core/tools/monday-apps-tools/app/promote-app.ts | 4 ++-- .../tools/monday-apps-tools/base-tool/monday-apps-tool.ts | 7 +++---- .../src/core/tools/monday-apps-tools/index.ts | 6 +++++- .../monday-code/delete-environment-variable.ts | 4 ++-- .../monday-apps-tools/monday-code/get-deployment-status.ts | 4 ++-- .../monday-apps-tools/monday-code/get-tunnel-token.ts | 4 ++-- .../src/core/tools/monday-apps-tools/monday-code/index.ts | 6 ++++++ .../monday-code/list-environment-variable-keys.ts | 4 ++-- .../monday-code/set-environment-variable.ts | 4 ++-- .../tools/monday-apps-tools/storage/export-storage-data.ts | 4 ++-- .../src/core/tools/monday-apps-tools/storage/index.ts | 4 ++++ .../monday-apps-tools/storage/remove-app-storage-data.ts | 4 ++-- .../monday-apps-tools/storage/search-storage-records.ts | 4 ++-- 23 files changed, 61 insertions(+), 37 deletions(-) diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/create-app-feature.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/create-app-feature.ts index 563f4adb..2fb38811 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/create-app-feature.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/create-app-feature.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType, ToolSubType } from '../../../tool'; +import { ToolInputType, ToolOutputType, ToolType } from '../../../tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -10,7 +10,7 @@ export class CreateAppFeatureTool extends BaseMondayAppsTool< > { name = 'monday_apps_create_app_feature'; category = MondayAppsToolCategory.APP_FEATURE; - subType: ToolSubType = ToolSubType.WRITE; + type: ToolType = ToolType.WRITE; getDescription(): string { return 'Create a new app feature for an app version'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/get-app-features.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/get-app-features.ts index 8b46d578..7bc476aa 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/get-app-features.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/get-app-features.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType, ToolSubType } from '../../../tool'; +import { ToolInputType, ToolOutputType, ToolType } from '../../../tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -7,7 +7,7 @@ import { AppFeaturesResponse, getAppFeaturesSchema } from './schemas/app-feature export class GetAppFeaturesTool extends BaseMondayAppsTool { name = 'monday_apps_get_app_features'; category = MondayAppsToolCategory.APP_FEATURE; - subType: ToolSubType = ToolSubType.READ; + type: ToolType = ToolType.READ; getDescription(): string { return 'Retrieve app features by app version id'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/index.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/index.ts index 9875d876..dc597c10 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/index.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-feature/index.ts @@ -2,3 +2,6 @@ import { GetAppFeaturesTool } from './get-app-features'; import { CreateAppFeatureTool } from './create-app-feature'; export const appFeatureTools = [GetAppFeaturesTool, CreateAppFeatureTool]; + +export * from './get-app-features'; +export * from './create-app-feature'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/get-app-version.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/get-app-version.ts index a7194c49..abc393fe 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/get-app-version.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/get-app-version.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType, ToolSubType } from '../../../tool'; +import { ToolInputType, ToolOutputType, ToolType } from '../../../tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -7,7 +7,7 @@ import { AppVersionApiDataResponse, getAppVersionSchema } from './schemas/app-ve export class GetAppVersionTool extends BaseMondayAppsTool { name = 'monday_apps_get_app_version'; category = MondayAppsToolCategory.APP_VERSION; - subType: ToolSubType = ToolSubType.READ; + type: ToolType = ToolType.READ; getDescription(): string { return 'Retrieve the app version data'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/get-app-versions.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/get-app-versions.ts index ade81172..30058805 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/get-app-versions.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/get-app-versions.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType, ToolSubType } from '../../../tool'; +import { ToolInputType, ToolOutputType, ToolType } from '../../../tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -10,7 +10,7 @@ export class GetAppVersionsTool extends BaseMondayAppsTool< > { name = 'monday_apps_get_app_versions'; category = MondayAppsToolCategory.APP_VERSION; - subType: ToolSubType = ToolSubType.READ; + type: ToolType = ToolType.READ; getDescription(): string { return 'Retrieve all the app versions of an app'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/index.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/index.ts index ee976466..36083c08 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/index.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app-version/index.ts @@ -2,3 +2,6 @@ import { GetAppVersionsTool } from './get-app-versions'; import { GetAppVersionTool } from './get-app-version'; export const appVersionTools = [GetAppVersionsTool, GetAppVersionTool]; + +export * from './get-app-versions'; +export * from './get-app-version'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/create-app-from-manifest.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/create-app-from-manifest.ts index e3c32200..999053ea 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/create-app-from-manifest.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/create-app-from-manifest.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType, ToolSubType } from '../../../tool'; +import { ToolInputType, ToolOutputType, ToolType } from '../../../tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -7,7 +7,7 @@ import { CreateAppResponse, createAppSchema } from './schemas/app-schemas'; export class CreateAppFromManifestTool extends BaseMondayAppsTool { name = 'monday_apps_create_app_from_manifest'; category = MondayAppsToolCategory.APP; - subType: ToolSubType = ToolSubType.WRITE; + type: ToolType = ToolType.WRITE; getDescription(): string { return 'Create a new app from a manifest file (Not ready to use yet)'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/create-app.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/create-app.ts index b0d69d94..93cb3344 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/create-app.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/create-app.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType, ToolSubType } from '../../../tool'; +import { ToolInputType, ToolOutputType, ToolType } from '../../../tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -7,7 +7,7 @@ import { CreateAppResponse, createPlainAppSchema } from './schemas/app-schemas'; export class CreateAppTool extends BaseMondayAppsTool { name = 'monday_apps_create_app'; category = MondayAppsToolCategory.APP; - subType: ToolSubType = ToolSubType.WRITE; + type: ToolType = ToolType.WRITE; getDescription(): string { return 'Create a new app with basic information'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/get-all-apps.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/get-all-apps.ts index 040627d4..c1dceace 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/get-all-apps.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/get-all-apps.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType, ToolSubType } from '../../../tool'; +import { ToolInputType, ToolOutputType, ToolType } from '../../../tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -7,7 +7,7 @@ import { AppApiDataResponse } from './schemas/app-schemas'; export class GetAllAppsTool extends BaseMondayAppsTool { name = 'monday_apps_get_all_apps'; category = MondayAppsToolCategory.APP; - subType: ToolSubType = ToolSubType.READ; + type: ToolType = ToolType.READ; getDescription(): string { return 'Retrieve all the development apps that the user has collaboration permissions for'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/index.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/index.ts index 7f0c8368..fd3e3601 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/index.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/index.ts @@ -4,3 +4,8 @@ import { CreateAppFromManifestTool } from './create-app-from-manifest'; import { CreateAppTool } from './create-app'; export const appTools = [GetAllAppsTool, PromoteAppTool, CreateAppFromManifestTool, CreateAppTool]; + +export * from './get-all-apps'; +export * from './promote-app'; +export * from './create-app-from-manifest'; +export * from './create-app'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/promote-app.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/promote-app.ts index b75eec54..3ccf7766 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/promote-app.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/app/promote-app.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType, ToolSubType } from '../../../tool'; +import { ToolInputType, ToolOutputType, ToolType } from '../../../tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -7,7 +7,7 @@ import { PromoteAppResponse, promoteAppSchema } from './schemas/app-schemas'; export class PromoteAppTool extends BaseMondayAppsTool { name = 'monday_apps_promote_app'; category = MondayAppsToolCategory.APP; - subType: ToolSubType = ToolSubType.WRITE; + type: ToolType = ToolType.WRITE; getDescription(): string { return 'Promote an app version to live'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/base-tool/monday-apps-tool.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/base-tool/monday-apps-tool.ts index 42f4eb15..d37716eb 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/base-tool/monday-apps-tool.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/base-tool/monday-apps-tool.ts @@ -2,9 +2,9 @@ import axios, { AxiosRequestConfig } from 'axios'; import * as crypto from 'crypto'; import * as https from 'https'; import { ZodRawShape } from 'zod'; -import { Tool, ToolInputType, ToolOutputType, ToolSubType, ToolType } from '../../../tool'; -import { APPS_MS_TIMEOUT_IN_MS } from '../consts/routes.consts'; +import { Tool, ToolInputType, ToolOutputType, ToolType } from '../../../tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; +import { APPS_MS_TIMEOUT_IN_MS } from '../consts/routes.consts'; export interface MondayApiResponse { statusCode: number; @@ -20,8 +20,7 @@ export abstract class BaseMondayAppsTool< > implements Tool { abstract name: string; - type: ToolType = ToolType.MONDAY_APPS; - abstract subType: ToolSubType; + abstract type: ToolType; abstract category: MondayAppsToolCategory; private mondayApiToken?: string; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/index.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/index.ts index 547cc85f..a8f478d2 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/index.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/index.ts @@ -22,4 +22,8 @@ export const allMondayAppsTools: MondayAppsToolType[] = [ ...codeTools, ]; -export { MondayAppsToolType }; +export * from './storage'; +export * from './app'; +export * from './app-version'; +export * from './app-feature'; +export * from './monday-code'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/delete-environment-variable.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/delete-environment-variable.ts index a1f973fd..c85e5ca0 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/delete-environment-variable.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/delete-environment-variable.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType, ToolSubType } from '../../../tool'; +import { ToolInputType, ToolOutputType, ToolType } from '../../../tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -7,7 +7,7 @@ import { EnvVarResponse, deleteEnvVarSchema } from './schemas/code-schemas'; export class DeleteEnvironmentVariableTool extends BaseMondayAppsTool { name = 'monday_apps_delete_environment_variable'; category = MondayAppsToolCategory.MONDAY_CODE; - subType: ToolSubType = ToolSubType.WRITE; + type: ToolType = ToolType.WRITE; getDescription(): string { return 'Delete an environment variable for an app'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/get-deployment-status.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/get-deployment-status.ts index 8d566595..5915aa22 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/get-deployment-status.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/get-deployment-status.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType, ToolSubType } from '../../../tool'; +import { ToolInputType, ToolOutputType, ToolType } from '../../../tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -10,7 +10,7 @@ export class GetDeploymentStatusTool extends BaseMondayAppsTool< > { name = 'monday_apps_get_deployment_status'; category = MondayAppsToolCategory.MONDAY_CODE; - subType: ToolSubType = ToolSubType.READ; + type: ToolType = ToolType.READ; getDescription(): string { return 'Get the deployment status for a specific app version'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/get-tunnel-token.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/get-tunnel-token.ts index b3079462..77719a16 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/get-tunnel-token.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/get-tunnel-token.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType, ToolSubType } from '../../../tool'; +import { ToolInputType, ToolOutputType, ToolType } from '../../../tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -7,7 +7,7 @@ import { TunnelTokenResponse, getTunnelTokenSchema } from './schemas/code-schema export class GetTunnelTokenTool extends BaseMondayAppsTool { name = 'monday_apps_get_tunnel_token'; category = MondayAppsToolCategory.MONDAY_CODE; - subType: ToolSubType = ToolSubType.READ; + type: ToolType = ToolType.READ; getDescription(): string { return 'Get a tunnel token for exposing code running on the local machine'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/index.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/index.ts index 851af537..1717e039 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/index.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/index.ts @@ -11,3 +11,9 @@ export const codeTools = [ DeleteEnvironmentVariableTool, ListEnvironmentVariableKeysTool, ]; + +export * from './get-deployment-status'; +export * from './get-tunnel-token'; +export * from './set-environment-variable'; +export * from './delete-environment-variable'; +export * from './list-environment-variable-keys'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/list-environment-variable-keys.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/list-environment-variable-keys.ts index 87cc2fa7..b8f7d07a 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/list-environment-variable-keys.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/list-environment-variable-keys.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType, ToolSubType } from '../../../tool'; +import { ToolInputType, ToolOutputType, ToolType } from '../../../tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -10,7 +10,7 @@ export class ListEnvironmentVariableKeysTool extends BaseMondayAppsTool< > { name = 'monday_apps_list_environment_variable_keys'; category = MondayAppsToolCategory.MONDAY_CODE; - subType: ToolSubType = ToolSubType.READ; + type: ToolType = ToolType.READ; getDescription(): string { return 'List all environment variable keys for an app'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/set-environment-variable.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/set-environment-variable.ts index ba69ce2f..ad133c94 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/set-environment-variable.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/monday-code/set-environment-variable.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType, ToolSubType } from '../../../tool'; +import { ToolInputType, ToolOutputType, ToolType } from '../../../tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -7,7 +7,7 @@ import { EnvVarResponse, setEnvVarSchema } from './schemas/code-schemas'; export class SetEnvironmentVariableTool extends BaseMondayAppsTool { name = 'monday_apps_set_environment_variable'; category = MondayAppsToolCategory.MONDAY_CODE; - subType: ToolSubType = ToolSubType.WRITE; + type: ToolType = ToolType.WRITE; getDescription(): string { return 'Set an environment variable for an app'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/export-storage-data.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/export-storage-data.ts index 5b653adc..9477367c 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/export-storage-data.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/export-storage-data.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType, ToolSubType } from 'src/core/tool'; +import { ToolInputType, ToolOutputType, ToolType } from 'src/core/tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -10,7 +10,7 @@ export class ExportStorageDataTool extends BaseMondayAppsTool< > { name = 'monday_apps_export_storage_data'; category = MondayAppsToolCategory.STORAGE; - subType: ToolSubType = ToolSubType.READ; + type: ToolType = ToolType.READ; getDescription(): string { return 'Export storage data from a Monday.com app'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/index.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/index.ts index bf21a9f4..9960a0ea 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/index.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/index.ts @@ -3,3 +3,7 @@ import { ExportStorageDataTool } from './export-storage-data'; import { RemoveAppStorageDataTool } from './remove-app-storage-data'; export const storageTools = [SearchStorageRecordsTool, ExportStorageDataTool, RemoveAppStorageDataTool]; + +export * from './search-storage-records'; +export * from './export-storage-data'; +export * from './remove-app-storage-data'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/remove-app-storage-data.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/remove-app-storage-data.ts index 63dec34a..37c9bbe9 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/remove-app-storage-data.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/remove-app-storage-data.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType, ToolSubType } from '../../../tool'; +import { ToolInputType, ToolOutputType, ToolType } from '../../../tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -10,7 +10,7 @@ export class RemoveAppStorageDataTool extends BaseMondayAppsTool< > { name = 'monday_apps_remove_app_storage_data'; category = MondayAppsToolCategory.STORAGE; - subType: ToolSubType = ToolSubType.WRITE; + type: ToolType = ToolType.WRITE; getDescription(): string { return 'Remove all storage data for a specific account on a specific app'; diff --git a/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/search-storage-records.ts b/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/search-storage-records.ts index eda579ec..e6ba528d 100644 --- a/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/search-storage-records.ts +++ b/packages/agent-toolkit/src/core/tools/monday-apps-tools/storage/search-storage-records.ts @@ -1,4 +1,4 @@ -import { ToolInputType, ToolOutputType, ToolSubType } from 'src/core/tool'; +import { ToolInputType, ToolOutputType, ToolType } from 'src/core/tool'; import { BaseMondayAppsTool } from '../base-tool/monday-apps-tool'; import { MondayAppsToolCategory } from '../consts/apps.consts'; import { API_ENDPOINTS, HttpMethod } from '../consts/routes.consts'; @@ -10,7 +10,7 @@ export class SearchStorageRecordsTool extends BaseMondayAppsTool< > { name = 'monday_apps_search_storage_records'; category = MondayAppsToolCategory.STORAGE; - subType: ToolSubType = ToolSubType.READ; + type: ToolType = ToolType.READ; getDescription(): string { return 'Search for storage records in a Monday.com app';