Skip to content

Commit 6be2eb9

Browse files
committed
feat(ai-action-handlers): add support for environment variables as fallback for spaceId and environmentId
refactor(ai-action-handlers): improve error handling by adding validation for required parameters feat(ai-action-tool-generator): add fallback for spaceId and environmentId in tool context docs(tools.ts): update description for UPDATE_ENTRY tool to emphasize importance of sending all field values
1 parent e9ead34 commit 6be2eb9

File tree

3 files changed

+113
-29
lines changed

3 files changed

+113
-29
lines changed

src/handlers/ai-action-handlers.ts

Lines changed: 104 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,14 @@ export const aiActionHandlers = {
129129
params: ListAiActionsParams,
130130
): Promise<AiActionEntityCollection | { isError: true; message: string }> {
131131
try {
132-
const { spaceId, environmentId, limit, skip, status } = params
132+
// Use provided parameters or fall back to environment variables
133+
const spaceId = params.spaceId || process.env.SPACE_ID
134+
const environmentId = params.environmentId || process.env.ENVIRONMENT_ID || "master"
135+
const { limit, skip, status } = params
136+
137+
if (!spaceId) {
138+
return { isError: true, message: "Space ID is required" }
139+
}
133140

134141
const result = await aiActionsClient.listAiActions({
135142
spaceId,
@@ -152,7 +159,18 @@ export const aiActionHandlers = {
152159
params: GetAiActionParams,
153160
): Promise<AiActionEntity | { isError: true; message: string }> {
154161
try {
155-
const { spaceId, environmentId, aiActionId } = params
162+
// Use provided parameters or fall back to environment variables
163+
const spaceId = params.spaceId || process.env.SPACE_ID
164+
const environmentId = params.environmentId || process.env.ENVIRONMENT_ID || "master"
165+
const { aiActionId } = params
166+
167+
if (!spaceId) {
168+
return { isError: true, message: "Space ID is required" }
169+
}
170+
171+
if (!aiActionId) {
172+
return { isError: true, message: "AI Action ID is required" }
173+
}
156174

157175
const result = await aiActionsClient.getAiAction({
158176
spaceId,
@@ -173,8 +191,14 @@ export const aiActionHandlers = {
173191
params: CreateAiActionParams,
174192
): Promise<AiActionEntity | { isError: true; message: string }> {
175193
try {
176-
const { spaceId, environmentId, name, description, instruction, configuration, testCases } =
177-
params
194+
// Use provided parameters or fall back to environment variables
195+
const spaceId = params.spaceId || process.env.SPACE_ID
196+
const environmentId = params.environmentId || process.env.ENVIRONMENT_ID || "master"
197+
const { name, description, instruction, configuration, testCases } = params
198+
199+
if (!spaceId) {
200+
return { isError: true, message: "Space ID is required" }
201+
}
178202

179203
const actionData: AiActionSchemaParsed = {
180204
name,
@@ -203,16 +227,18 @@ export const aiActionHandlers = {
203227
params: UpdateAiActionParams,
204228
): Promise<AiActionEntity | { isError: true; message: string }> {
205229
try {
206-
const {
207-
spaceId,
208-
environmentId,
209-
aiActionId,
210-
name,
211-
description,
212-
instruction,
213-
configuration,
214-
testCases,
215-
} = params
230+
// Use provided parameters or fall back to environment variables
231+
const spaceId = params.spaceId || process.env.SPACE_ID
232+
const environmentId = params.environmentId || process.env.ENVIRONMENT_ID || "master"
233+
const { aiActionId, name, description, instruction, configuration, testCases } = params
234+
235+
if (!spaceId) {
236+
return { isError: true, message: "Space ID is required" }
237+
}
238+
239+
if (!aiActionId) {
240+
return { isError: true, message: "AI Action ID is required" }
241+
}
216242

217243
// First, get the current action to get the version
218244
const currentAction = await aiActionsClient.getAiAction({
@@ -250,7 +276,18 @@ export const aiActionHandlers = {
250276
params: DeleteAiActionParams,
251277
): Promise<{ success: true } | { isError: true; message: string }> {
252278
try {
253-
const { spaceId, environmentId, aiActionId } = params
279+
// Use provided parameters or fall back to environment variables
280+
const spaceId = params.spaceId || process.env.SPACE_ID
281+
const environmentId = params.environmentId || process.env.ENVIRONMENT_ID || "master"
282+
const { aiActionId } = params
283+
284+
if (!spaceId) {
285+
return { isError: true, message: "Space ID is required" }
286+
}
287+
288+
if (!aiActionId) {
289+
return { isError: true, message: "AI Action ID is required" }
290+
}
254291

255292
// First, get the current action to get the version
256293
const currentAction = await aiActionsClient.getAiAction({
@@ -279,7 +316,18 @@ export const aiActionHandlers = {
279316
params: PublishAiActionParams,
280317
): Promise<AiActionEntity | { isError: true; message: string }> {
281318
try {
282-
const { spaceId, environmentId, aiActionId } = params
319+
// Use provided parameters or fall back to environment variables
320+
const spaceId = params.spaceId || process.env.SPACE_ID
321+
const environmentId = params.environmentId || process.env.ENVIRONMENT_ID || "master"
322+
const { aiActionId } = params
323+
324+
if (!spaceId) {
325+
return { isError: true, message: "Space ID is required" }
326+
}
327+
328+
if (!aiActionId) {
329+
return { isError: true, message: "AI Action ID is required" }
330+
}
283331

284332
// First, get the current action to get the version
285333
const currentAction = await aiActionsClient.getAiAction({
@@ -308,7 +356,18 @@ export const aiActionHandlers = {
308356
params: UnpublishAiActionParams,
309357
): Promise<AiActionEntity | { isError: true; message: string }> {
310358
try {
311-
const { spaceId, environmentId, aiActionId } = params
359+
// Use provided parameters or fall back to environment variables
360+
const spaceId = params.spaceId || process.env.SPACE_ID
361+
const environmentId = params.environmentId || process.env.ENVIRONMENT_ID || "master"
362+
const { aiActionId } = params
363+
364+
if (!spaceId) {
365+
return { isError: true, message: "Space ID is required" }
366+
}
367+
368+
if (!aiActionId) {
369+
return { isError: true, message: "AI Action ID is required" }
370+
}
312371

313372
const result = await aiActionsClient.unpublishAiAction({
314373
spaceId,
@@ -329,13 +388,18 @@ export const aiActionHandlers = {
329388
params: InvokeAiActionParams,
330389
): Promise<AiActionInvocation | { isError: true; message: string }> {
331390
try {
332-
const {
333-
spaceId,
334-
environmentId,
335-
aiActionId,
336-
outputFormat = "Markdown",
337-
waitForCompletion = true,
338-
} = params
391+
// Use provided parameters or fall back to environment variables
392+
const spaceId = params.spaceId || process.env.SPACE_ID
393+
const environmentId = params.environmentId || process.env.ENVIRONMENT_ID || "master"
394+
const { aiActionId, outputFormat = "Markdown", waitForCompletion = true } = params
395+
396+
if (!spaceId) {
397+
return { isError: true, message: "Space ID is required" }
398+
}
399+
400+
if (!aiActionId) {
401+
return { isError: true, message: "AI Action ID is required" }
402+
}
339403

340404
// Prepare variables based on the input format
341405
let variables = []
@@ -401,7 +465,22 @@ export const aiActionHandlers = {
401465
params: GetAiActionInvocationParams,
402466
): Promise<AiActionInvocation | { isError: true; message: string }> {
403467
try {
404-
const { spaceId, environmentId, aiActionId, invocationId } = params
468+
// Use provided parameters or fall back to environment variables
469+
const spaceId = params.spaceId || process.env.SPACE_ID
470+
const environmentId = params.environmentId || process.env.ENVIRONMENT_ID || "master"
471+
const { aiActionId, invocationId } = params
472+
473+
if (!spaceId) {
474+
return { isError: true, message: "Space ID is required" }
475+
}
476+
477+
if (!aiActionId) {
478+
return { isError: true, message: "AI Action ID is required" }
479+
}
480+
481+
if (!invocationId) {
482+
return { isError: true, message: "Invocation ID is required" }
483+
}
405484

406485
const result = await aiActionsClient.getAiActionInvocation({
407486
spaceId,

src/types/tools.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ export const getEntryTools = () => {
101101
UPDATE_ENTRY: {
102102
name: "update_entry",
103103
description:
104-
"Update an existing entry, always send all field values, also the fields values that have not been updated",
104+
"Update an existing entry, very important: always send all field values and all values related to locales, also the fields values that have not been updated",
105105
inputSchema: getSpaceEnvProperties({
106106
type: "object",
107107
properties: {
@@ -785,7 +785,8 @@ export const getAiActionTools = () => {
785785
},
786786
rawVariables: {
787787
type: "array",
788-
description: "Array of raw variable objects (for complex variable types like references)",
788+
description:
789+
"Array of raw variable objects (for complex variable types like references)",
789790
items: {
790791
type: "object",
791792
},

src/utils/ai-action-tool-generator.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -464,9 +464,13 @@ export class AiActionToolContext {
464464

465465
const waitForCompletion = toolInput.waitForCompletion !== false
466466

467+
// Use provided spaceId and environmentId if available, otherwise use defaults
468+
const spaceId = toolInput.spaceId || this.spaceId
469+
const environmentId = toolInput.environmentId || this.environmentId
470+
467471
return {
468-
spaceId: this.spaceId,
469-
environmentId: this.environmentId,
472+
spaceId,
473+
environmentId,
470474
aiActionId: actionId,
471475
variables,
472476
outputFormat,

0 commit comments

Comments
 (0)