Skip to content

Commit ddf53be

Browse files
suryaiyer95claude
andcommitted
fix: [AI-5975] propagate tool error messages to telemetry across all 25 tools
- Add `?? {}` null guard on `result.data` for all altimate-core tool wrappers - Extract `result.error ?? data.error` and spread into metadata conditionally - Add `error: msg` to catch block metadata for impact-analysis, lineage-check - Fix sql-fix unconditional error spread to conditional `...(result.error && { error })` - Add comprehensive test suite (90 tests) covering all error propagation paths Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent f0be8f2 commit ddf53be

26 files changed

Lines changed: 592 additions & 68 deletions

packages/opencode/src/altimate/tools/altimate-core-check.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,16 @@ export const AltimateCoreCheckTool = Tool.define("altimate_core_check", {
1717
schema_path: args.schema_path ?? "",
1818
schema_context: args.schema_context,
1919
})
20-
const data = result.data as Record<string, any>
20+
const data = (result.data ?? {}) as Record<string, any>
21+
const error = result.error ?? data.error
2122
return {
2223
title: `Check: ${formatCheckTitle(data)}`,
23-
metadata: { success: result.success },
24+
metadata: { success: result.success, ...(error && { error }) },
2425
output: formatCheck(data),
2526
}
2627
} catch (e) {
2728
const msg = e instanceof Error ? e.message : String(e)
28-
return { title: "Check: ERROR", metadata: { success: false }, output: `Failed: ${msg}` }
29+
return { title: "Check: ERROR", metadata: { success: false, error: msg }, output: `Failed: ${msg}` }
2930
}
3031
},
3132
})

packages/opencode/src/altimate/tools/altimate-core-classify-pii.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,18 @@ export const AltimateCoreClassifyPiiTool = Tool.define("altimate_core_classify_p
1515
schema_path: args.schema_path ?? "",
1616
schema_context: args.schema_context,
1717
})
18-
const data = result.data as Record<string, any>
18+
const data = (result.data ?? {}) as Record<string, any>
1919
const piiColumns = data.columns ?? data.findings ?? []
2020
const findingCount = piiColumns.length
21+
const error = result.error ?? data.error
2122
return {
2223
title: `PII Classification: ${findingCount} finding(s)`,
23-
metadata: { success: result.success, finding_count: findingCount },
24+
metadata: { success: result.success, finding_count: findingCount, ...(error && { error }) },
2425
output: formatClassifyPii(data),
2526
}
2627
} catch (e) {
2728
const msg = e instanceof Error ? e.message : String(e)
28-
return { title: "PII Classification: ERROR", metadata: { success: false, finding_count: 0 }, output: `Failed: ${msg}` }
29+
return { title: "PII Classification: ERROR", metadata: { success: false, finding_count: 0, error: msg }, output: `Failed: ${msg}` }
2930
}
3031
},
3132
})

packages/opencode/src/altimate/tools/altimate-core-column-lineage.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,17 @@ export const AltimateCoreColumnLineageTool = Tool.define("altimate_core_column_l
1919
schema_path: args.schema_path ?? "",
2020
schema_context: args.schema_context,
2121
})
22-
const data = result.data as Record<string, any>
22+
const data = (result.data ?? {}) as Record<string, any>
2323
const edgeCount = data.column_lineage?.length ?? 0
24+
const error = result.error ?? data.error
2425
return {
2526
title: `Column Lineage: ${edgeCount} edge(s)`,
26-
metadata: { success: result.success, edge_count: edgeCount },
27+
metadata: { success: result.success, edge_count: edgeCount, ...(error && { error }) },
2728
output: formatColumnLineage(data),
2829
}
2930
} catch (e) {
3031
const msg = e instanceof Error ? e.message : String(e)
31-
return { title: "Column Lineage: ERROR", metadata: { success: false, edge_count: 0 }, output: `Failed: ${msg}` }
32+
return { title: "Column Lineage: ERROR", metadata: { success: false, edge_count: 0, error: msg }, output: `Failed: ${msg}` }
3233
}
3334
},
3435
})

packages/opencode/src/altimate/tools/altimate-core-compare.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,17 @@ export const AltimateCoreCompareTool = Tool.define("altimate_core_compare", {
1717
right_sql: args.right_sql,
1818
dialect: args.dialect ?? "",
1919
})
20-
const data = result.data as Record<string, any>
20+
const data = (result.data ?? {}) as Record<string, any>
2121
const diffCount = data.differences?.length ?? 0
22+
const error = result.error ?? data.error
2223
return {
2324
title: `Compare: ${diffCount === 0 ? "IDENTICAL" : `${diffCount} difference(s)`}`,
24-
metadata: { success: result.success, difference_count: diffCount },
25+
metadata: { success: result.success, difference_count: diffCount, ...(error && { error }) },
2526
output: formatCompare(data),
2627
}
2728
} catch (e) {
2829
const msg = e instanceof Error ? e.message : String(e)
29-
return { title: "Compare: ERROR", metadata: { success: false, difference_count: 0 }, output: `Failed: ${msg}` }
30+
return { title: "Compare: ERROR", metadata: { success: false, difference_count: 0, error: msg }, output: `Failed: ${msg}` }
3031
}
3132
},
3233
})

packages/opencode/src/altimate/tools/altimate-core-complete.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export const AltimateCoreCompleteTool = Tool.define("altimate_core_complete", {
1919
schema_path: args.schema_path ?? "",
2020
schema_context: args.schema_context,
2121
})
22-
const data = result.data as Record<string, any>
22+
const data = (result.data ?? {}) as Record<string, any>
2323
const count = data.items?.length ?? data.suggestions?.length ?? 0
2424
const error = result.error ?? (data as any).error
2525
return {

packages/opencode/src/altimate/tools/altimate-core-export-ddl.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,16 @@ export const AltimateCoreExportDdlTool = Tool.define("altimate_core_export_ddl",
1515
schema_path: args.schema_path ?? "",
1616
schema_context: args.schema_context,
1717
})
18-
const data = result.data as Record<string, any>
18+
const data = (result.data ?? {}) as Record<string, any>
19+
const error = result.error ?? data.error
1920
return {
2021
title: "Export DDL: done",
21-
metadata: { success: result.success },
22+
metadata: { success: result.success, ...(error && { error }) },
2223
output: data.ddl ?? JSON.stringify(data, null, 2),
2324
}
2425
} catch (e) {
2526
const msg = e instanceof Error ? e.message : String(e)
26-
return { title: "Export DDL: ERROR", metadata: { success: false }, output: `Failed: ${msg}` }
27+
return { title: "Export DDL: ERROR", metadata: { success: false, error: msg }, output: `Failed: ${msg}` }
2728
}
2829
},
2930
})

packages/opencode/src/altimate/tools/altimate-core-extract-metadata.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,16 @@ export const AltimateCoreExtractMetadataTool = Tool.define("altimate_core_extrac
1515
sql: args.sql,
1616
dialect: args.dialect ?? "",
1717
})
18-
const data = result.data as Record<string, any>
18+
const data = (result.data ?? {}) as Record<string, any>
19+
const error = result.error ?? data.error
1920
return {
2021
title: `Metadata: ${data.tables?.length ?? 0} tables, ${data.columns?.length ?? 0} columns`,
21-
metadata: { success: result.success },
22+
metadata: { success: result.success, ...(error && { error }) },
2223
output: formatMetadata(data),
2324
}
2425
} catch (e) {
2526
const msg = e instanceof Error ? e.message : String(e)
26-
return { title: "Metadata: ERROR", metadata: { success: false }, output: `Failed: ${msg}` }
27+
return { title: "Metadata: ERROR", metadata: { success: false, error: msg }, output: `Failed: ${msg}` }
2728
}
2829
},
2930
})

packages/opencode/src/altimate/tools/altimate-core-fingerprint.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,16 @@ export const AltimateCoreFingerprintTool = Tool.define("altimate_core_fingerprin
1515
schema_path: args.schema_path ?? "",
1616
schema_context: args.schema_context,
1717
})
18-
const data = result.data as Record<string, any>
18+
const data = (result.data ?? {}) as Record<string, any>
19+
const error = result.error ?? data.error
1920
return {
2021
title: `Fingerprint: ${data.fingerprint?.substring(0, 12) ?? "computed"}...`,
21-
metadata: { success: result.success, fingerprint: data.fingerprint },
22+
metadata: { success: result.success, fingerprint: data.fingerprint, ...(error && { error }) },
2223
output: `SHA-256: ${data.fingerprint ?? "unknown"}`,
2324
}
2425
} catch (e) {
2526
const msg = e instanceof Error ? e.message : String(e)
26-
return { title: "Fingerprint: ERROR", metadata: { success: false, fingerprint: null }, output: `Failed: ${msg}` }
27+
return { title: "Fingerprint: ERROR", metadata: { success: false, fingerprint: null, error: msg }, output: `Failed: ${msg}` }
2728
}
2829
},
2930
})

packages/opencode/src/altimate/tools/altimate-core-grade.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export const AltimateCoreGradeTool = Tool.define("altimate_core_grade", {
1717
schema_path: args.schema_path ?? "",
1818
schema_context: args.schema_context,
1919
})
20-
const data = result.data as Record<string, any>
20+
const data = (result.data ?? {}) as Record<string, any>
2121
const grade = data.overall_grade ?? data.grade
2222
const score = data.scores?.overall != null ? Math.round(data.scores.overall * 100) : data.score
2323
const error = result.error ?? data.error

packages/opencode/src/altimate/tools/altimate-core-import-ddl.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,16 @@ export const AltimateCoreImportDdlTool = Tool.define("altimate_core_import_ddl",
1515
ddl: args.ddl,
1616
dialect: args.dialect ?? "",
1717
})
18-
const data = result.data as Record<string, any>
18+
const data = (result.data ?? {}) as Record<string, any>
19+
const error = result.error ?? data.error
1920
return {
2021
title: "Import DDL: done",
21-
metadata: { success: result.success },
22+
metadata: { success: result.success, ...(error && { error }) },
2223
output: formatImportDdl(data),
2324
}
2425
} catch (e) {
2526
const msg = e instanceof Error ? e.message : String(e)
26-
return { title: "Import DDL: ERROR", metadata: { success: false }, output: `Failed: ${msg}` }
27+
return { title: "Import DDL: ERROR", metadata: { success: false, error: msg }, output: `Failed: ${msg}` }
2728
}
2829
},
2930
})

0 commit comments

Comments
 (0)