fix: add error handling for agent env vars save and sprites-exec JSON errors
- Agent env vars: auto-save now awaits response and shows alert on failure - sprites-exec v0.1.4: detect JSON error responses (e.g., auth failures) before binary parsing
This commit is contained in:
parent
b5fa46f6be
commit
69ae0dda2f
3 changed files with 42 additions and 9 deletions
|
|
@ -1029,14 +1029,26 @@ export default function AgentDetailPage(): React.ReactElement {
|
||||||
<div className="bg-surface border border-border rounded-lg p-6">
|
<div className="bg-surface border border-border rounded-lg p-6">
|
||||||
<EnvVarsEditor
|
<EnvVarsEditor
|
||||||
value={envVars}
|
value={envVars}
|
||||||
onChange={(newEnvVars) => {
|
onChange={async (newEnvVars) => {
|
||||||
setEnvVars(newEnvVars);
|
setEnvVars(newEnvVars);
|
||||||
// Auto-save env vars
|
// Auto-save env vars with error handling
|
||||||
fetch(`/api/agents/${agentId}`, {
|
try {
|
||||||
method: 'PATCH',
|
const response = await fetch(`/api/agents/${agentId}`, {
|
||||||
headers: { 'Content-Type': 'application/json' },
|
method: 'PATCH',
|
||||||
body: JSON.stringify({ envVars: newEnvVars }),
|
headers: { 'Content-Type': 'application/json' },
|
||||||
});
|
body: JSON.stringify({ envVars: newEnvVars }),
|
||||||
|
});
|
||||||
|
const result = await response.json();
|
||||||
|
if (!result.success) {
|
||||||
|
console.error('Failed to save env vars:', result.error);
|
||||||
|
alert(
|
||||||
|
'Failed to save environment variables: ' + (result.error || 'Unknown error')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Failed to save env vars:', err);
|
||||||
|
alert('Failed to save environment variables. Please try again.');
|
||||||
|
}
|
||||||
}}
|
}}
|
||||||
title="Environment Variables"
|
title="Environment Variables"
|
||||||
description="Passed to tools at runtime. Agent vars override collection vars. Changes are saved automatically."
|
description="Passed to tools at runtime. Agent vars override collection vars. Changes are saved automatically."
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@tpmjs/tools-sprites-exec",
|
"name": "@tpmjs/tools-sprites-exec",
|
||||||
"version": "0.1.3",
|
"version": "0.1.4",
|
||||||
"description": "Execute a command inside a sprite and return the output with exit code",
|
"description": "Execute a command inside a sprite and return the output with exit code",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
|
|
|
||||||
|
|
@ -254,9 +254,30 @@ export const spritesExecTool = tool({
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parse binary response
|
// Parse response - handle both binary and JSON error responses
|
||||||
const arrayBuffer = await response.arrayBuffer();
|
const arrayBuffer = await response.arrayBuffer();
|
||||||
const buffer = new Uint8Array(arrayBuffer);
|
const buffer = new Uint8Array(arrayBuffer);
|
||||||
|
|
||||||
|
// Check if response is JSON error (starts with '{') instead of binary (starts with 0x00-0x03)
|
||||||
|
// Sprites API returns HTTP 200 with JSON body for some errors like auth failures
|
||||||
|
if (buffer.length > 0 && buffer[0] === 0x7b) {
|
||||||
|
// 0x7B = '{'
|
||||||
|
const decoder = new TextDecoder();
|
||||||
|
const jsonText = decoder.decode(buffer);
|
||||||
|
try {
|
||||||
|
const errorResponse = JSON.parse(jsonText) as { error?: string };
|
||||||
|
if (errorResponse.error) {
|
||||||
|
throw new Error(`Failed to execute command in sprite "${name}": ${errorResponse.error}`);
|
||||||
|
}
|
||||||
|
} catch (parseError) {
|
||||||
|
// If JSON parsing fails, throw generic error with raw text
|
||||||
|
if (parseError instanceof SyntaxError) {
|
||||||
|
throw new Error(`Failed to execute command in sprite "${name}": ${jsonText}`);
|
||||||
|
}
|
||||||
|
throw parseError;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const { stdout, stderr, exitCode } = parseBinaryResponse(buffer);
|
const { stdout, stderr, exitCode } = parseBinaryResponse(buffer);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue