diff --git a/packages/blocks/aws/src/lib/actions/cli/aws-cli.ts b/packages/blocks/aws/src/lib/actions/cli/aws-cli.ts index bf5408fb05..97d4d30c7c 100644 --- a/packages/blocks/aws/src/lib/actions/cli/aws-cli.ts +++ b/packages/blocks/aws/src/lib/actions/cli/aws-cli.ts @@ -8,6 +8,7 @@ export async function runCommand( ): Promise { const envVars: any = { AWS_DEFAULT_REGION: region, + HOME: process.env['HOME'] ?? '/tmp', PATH: process.env['PATH'] ?? '', }; diff --git a/packages/blocks/aws/test/cli/aws-cli.test.ts b/packages/blocks/aws/test/cli/aws-cli.test.ts index 3587492aa6..0d173727d6 100644 --- a/packages/blocks/aws/test/cli/aws-cli.test.ts +++ b/packages/blocks/aws/test/cli/aws-cli.test.ts @@ -36,6 +36,7 @@ describe('awsCli', () => { 'some command', 'aws', { + HOME: process.env['HOME'], AWS_ACCESS_KEY_ID: credential.accessKeyId, AWS_SECRET_ACCESS_KEY: credential.secretAccessKey, AWS_SESSION_TOKEN: credential.sessionToken, @@ -62,10 +63,8 @@ describe('awsCli', () => { 'some command', 'aws', { + HOME: process.env['HOME'], AWS_DEFAULT_REGION: 'region', - AWS_ACCESS_KEY_ID: undefined, - AWS_SECRET_ACCESS_KEY: undefined, - AWS_SESSION_TOKEN: undefined, PATH: process.env['PATH'], }, ); diff --git a/packages/blocks/azure/src/lib/azure-cli.ts b/packages/blocks/azure/src/lib/azure-cli.ts index ea09243d48..a289a3b67c 100644 --- a/packages/blocks/azure/src/lib/azure-cli.ts +++ b/packages/blocks/azure/src/lib/azure-cli.ts @@ -17,6 +17,7 @@ export async function runCommand( subscription?: string, ): Promise { const envVars: Record = { + HOME: process.env['HOME'] || '/tmp', PATH: process.env['PATH'] || '', }; diff --git a/packages/blocks/azure/test/azure-cli.test.ts b/packages/blocks/azure/test/azure-cli.test.ts index 66193c5027..57407c17fa 100644 --- a/packages/blocks/azure/test/azure-cli.test.ts +++ b/packages/blocks/azure/test/azure-cli.test.ts @@ -29,20 +29,20 @@ describe('azureCli', () => { expect(commonMock.runCliCommand).toHaveBeenCalledWith( `login --service-principal --username ${credentials.clientId} --password ${credentials.clientSecret} --tenant ${credentials.tenantId}`, 'az', - { + expect.objectContaining({ + HOME: process.env['HOME'], PATH: process.env['PATH'], AZURE_CONFIG_DIR: expect.any(String), - AZURE_EXTENSION_DIR: expect.any(String), - }, + }), ); expect(commonMock.runCliCommand).toHaveBeenCalledWith( 'some command', 'az', - { + expect.objectContaining({ + HOME: process.env['HOME'], PATH: process.env['PATH'], AZURE_CONFIG_DIR: expect.any(String), - AZURE_EXTENSION_DIR: expect.any(String), - }, + }), ); }); @@ -64,31 +64,31 @@ describe('azureCli', () => { 1, `login --service-principal --username ${credentials.clientId} --password ${credentials.clientSecret} --tenant ${credentials.tenantId}`, 'az', - { + expect.objectContaining({ + HOME: process.env['HOME'], PATH: process.env['PATH'], AZURE_CONFIG_DIR: expect.any(String), - AZURE_EXTENSION_DIR: expect.any(String), - }, + }), ); expect(commonMock.runCliCommand).toHaveBeenNthCalledWith( 2, 'account set --subscription subscriptionId', 'az', - { + expect.objectContaining({ + HOME: process.env['HOME'], PATH: process.env['PATH'], AZURE_CONFIG_DIR: expect.any(String), - AZURE_EXTENSION_DIR: expect.any(String), - }, + }), ); expect(commonMock.runCliCommand).toHaveBeenNthCalledWith( 3, 'some command', 'az', - { + expect.objectContaining({ + HOME: process.env['HOME'], PATH: process.env['PATH'], AZURE_CONFIG_DIR: expect.any(String), - AZURE_EXTENSION_DIR: expect.any(String), - }, + }), ); }); @@ -109,19 +109,19 @@ describe('azureCli', () => { 1, 'account set --subscription subscriptionId', 'az', - { + expect.objectContaining({ + HOME: process.env['HOME'], PATH: process.env['PATH'], - AZURE_EXTENSION_DIR: expect.any(String), - }, + }), ); expect(commonMock.runCliCommand).toHaveBeenNthCalledWith( 2, 'some command', 'az', - { + expect.objectContaining({ + HOME: process.env['HOME'], PATH: process.env['PATH'], - AZURE_EXTENSION_DIR: expect.any(String), - }, + }), ); }); @@ -138,10 +138,10 @@ describe('azureCli', () => { expect(commonMock.runCliCommand).toHaveBeenCalledWith( 'some command', 'az', - { + expect.objectContaining({ + HOME: process.env['HOME'], PATH: process.env['PATH'], - AZURE_EXTENSION_DIR: expect.any(String), - }, + }), ); process.env = originalEnv; }); @@ -164,11 +164,12 @@ describe('azureCli', () => { expect(commonMock.runCliCommand).toHaveBeenCalledWith( 'some command', 'az', - { + expect.objectContaining({ + HOME: process.env['HOME'], PATH: process.env['PATH'], AZURE_CONFIG_DIR: process.env['AZURE_CONFIG_DIR'], AZURE_EXTENSION_DIR: '/mock/config/dir/extensions', - }, + }), ); process.env = originalEnv; }); @@ -192,20 +193,22 @@ describe('azureCli', () => { expect(commonMock.runCliCommand).toHaveBeenCalledWith( `login --service-principal --username ${credentials.clientId} --password ${credentials.clientSecret} --tenant ${credentials.tenantId}`, 'az', - { + expect.objectContaining({ + HOME: process.env['HOME'], PATH: process.env['PATH'], AZURE_CONFIG_DIR: expect.any(String), AZURE_EXTENSION_DIR: '/mock/config/dir/extensions', - }, + }), ); expect(commonMock.runCliCommand).toHaveBeenCalledWith( 'some command', 'az', - { + expect.objectContaining({ + HOME: process.env['HOME'], PATH: process.env['PATH'], AZURE_CONFIG_DIR: expect.any(String), AZURE_EXTENSION_DIR: '/mock/config/dir/extensions', - }, + }), ); process.env = originalEnv; }); @@ -221,11 +224,11 @@ describe('azureCli', () => { expect(commonMock.runCliCommand).toHaveBeenCalledWith( `login --service-principal --username ${credentials.clientId} --password ${credentials.clientSecret} --tenant ${credentials.tenantId}`, 'az', - { + expect.objectContaining({ + HOME: process.env['HOME'], PATH: process.env['PATH'], AZURE_CONFIG_DIR: expect.any(String), - AZURE_EXTENSION_DIR: expect.any(String), - }, + }), ); }); @@ -244,11 +247,11 @@ describe('azureCli', () => { expect(commonMock.runCliCommand).toHaveBeenCalledWith( `login --service-principal --username ${credentials.clientId} --password ${credentials.clientSecret} --tenant ${credentials.tenantId}`, 'az', - { + expect.objectContaining({ + HOME: process.env['HOME'], PATH: process.env['PATH'], AZURE_CONFIG_DIR: expect.any(String), - AZURE_EXTENSION_DIR: expect.any(String), - }, + }), ); }); }); diff --git a/packages/blocks/google-cloud/src/lib/google-cloud-cli.ts b/packages/blocks/google-cloud/src/lib/google-cloud-cli.ts index ebb911463c..becad0ae8b 100644 --- a/packages/blocks/google-cloud/src/lib/google-cloud-cli.ts +++ b/packages/blocks/google-cloud/src/lib/google-cloud-cli.ts @@ -34,6 +34,7 @@ export async function runCommands( executeCliTool = 'gcloud', ): Promise { const envVars: Record = { + HOME: process.env['HOME'] || '/tmp', PATH: process.env['PATH'] || '', CLOUDSDK_CORE_DISABLE_PROMPTS: '1', }; diff --git a/packages/openops/src/lib/google-cloud/auth.ts b/packages/openops/src/lib/google-cloud/auth.ts index 3526ecf4d9..5c47a98bbf 100644 --- a/packages/openops/src/lib/google-cloud/auth.ts +++ b/packages/openops/src/lib/google-cloud/auth.ts @@ -52,6 +52,7 @@ async function runAuthCommand(keyObject: string): Promise { const gcpConfigDir = await getDefaultCloudSDKConfig(); const envVars: Record = { + HOME: process.env['HOME'] || '/tmp', PATH: process.env['PATH'] || '', CLOUDSDK_CORE_DISABLE_PROMPTS: '1', CLOUDSDK_CONFIG: gcpConfigDir, diff --git a/packages/server/api/src/app/ai/mcp/cost-tools.ts b/packages/server/api/src/app/ai/mcp/cost-tools.ts index 6f364174c9..9d0b41e401 100644 --- a/packages/server/api/src/app/ai/mcp/cost-tools.ts +++ b/packages/server/api/src/app/ai/mcp/cost-tools.ts @@ -96,6 +96,8 @@ async function initializeMcpClient( command: pythonPath, args: [serverPath], env: { + HOME: process.env['HOME'] ?? '/tmp', + PATH: process.env['PATH'] ?? '', AWS_ACCESS_KEY_ID: credentials.accessKeyId, AWS_SECRET_ACCESS_KEY: credentials.secretAccessKey, AWS_REGION: credentials.region, diff --git a/packages/server/api/src/app/ai/mcp/openops-tools.ts b/packages/server/api/src/app/ai/mcp/openops-tools.ts index 64fead52ef..a23a373401 100644 --- a/packages/server/api/src/app/ai/mcp/openops-tools.ts +++ b/packages/server/api/src/app/ai/mcp/openops-tools.ts @@ -89,6 +89,8 @@ export async function getOpenOpsTools( command: pythonPath, args: [serverPath], env: { + HOME: process.env['HOME'] ?? '/tmp', + PATH: process.env['PATH'] ?? '', OPENAPI_SCHEMA_PATH: tempSchemaPath, AUTH_TOKEN: serviceToken, API_BASE_URL: networkUtls.getInternalApiUrl(),