Q97: external calls that report failure are failed calls

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ZacharyZhang-NYandClaude Opus 5.5 committed 2026-10-08 16:04:15 -04:00
1 parent a9620eaa5a
commit 989127bed3
5 files changed
+39 -11

No files matched your search

@@ -26,10 +26,8 @@ export interface ComposioConnectedAccount {
createdAt: string;
}
export interface ComposioToolExecutionResult {
data: Record<string, unknown>;
error: string | null;
}
/** Composio answers 200 for business failures too; only `successful` tells them apart. */
export type ComposioToolExecutionResult = { successful: true; data: unknown } | { successful: false; error: string };
const MAX_RESPONSE_BYTES = 2_000_000;
@@ -142,10 +140,9 @@ export class ComposioClient {
};
if (input.connectedAccountId) body.connected_account_id = input.connectedAccountId;
const response = await this.request("POST", url, body);
return {
data: typeof response === "object" && response !== null ? response as Record<string, unknown> : {},
error: null,
};
if (typeof response.successful !== "boolean") throw new Error(`Composio returned no execution status for ${input.toolName}.`);
if (response.successful) return { successful: true, data: response.data };
return { successful: false, error: typeof response.error === "string" && response.error.trim() ? response.error.trim() : "Composio gave no reason." };
}
private async request(
@@ -114,7 +114,10 @@ async function runAction(db: DatabaseSync, apiKey: string, orgId: string, agentI
const input = typeof args.arguments === "object" && args.arguments !== null && !Array.isArray(args.arguments) ? args.arguments as Record<string, unknown> : null;
if (!input) return "ERROR: arguments must be an object matching the action's input.";
const result = await new ComposioClient(apiKey).executeTool({ toolName: action.name, arguments: input, userId: getComposioUserId(db, orgId), connectedAccountId: account.id });
if (result.error) return `ERROR: ${result.error}`;
if (!result.successful) {
console.warn(`[connectors] ${action.name} failed: ${result.error.replace(/\s+/g, " ")}`);
return `ERROR: ${action.name} failed: ${result.error}`;
}
return JSON.stringify(result.data);
}