1+ import { dagsterUnionErrorMessage , parseDagsterGraphqlResponse } from '@/tools/dagster/graphql'
12import type { DagsterGetRunParams , DagsterGetRunResponse } from '@/tools/dagster/types'
23import type { ToolConfig } from '@/tools/types'
34
5+ /** Fields selected on `runOrError` when the union resolves to `Run`. */
6+ interface DagsterGetRunGraphqlRun {
7+ runId : string
8+ jobName : string | null
9+ status : string
10+ startTime : number | null
11+ endTime : number | null
12+ runConfigYaml : string | null
13+ tags : Array < { key : string ; value : string } > | null
14+ }
15+
416const GET_RUN_QUERY = `
517 query GetRun($runId: ID!) {
618 runOrError(runId: $runId) {
@@ -16,7 +28,8 @@ const GET_RUN_QUERY = `
1628 value
1729 }
1830 }
19- ... on RunNotFoundError {
31+ ... on Error {
32+ __typename
2033 message
2134 }
2235 }
@@ -66,33 +79,29 @@ export const getRunTool: ToolConfig<DagsterGetRunParams, DagsterGetRunResponse>
6679 } ,
6780
6881 transformResponse : async ( response : Response ) => {
69- const data = await response . json ( )
82+ const data = await parseDagsterGraphqlResponse < { runOrError ?: unknown } > ( response )
7083
71- if ( ! response . ok ) {
72- throw new Error ( data . errors ?. [ 0 ] ?. message || 'Dagster GraphQL request failed' )
73- }
84+ const raw = data . data ?. runOrError
85+ if ( ! raw || typeof raw !== 'object' ) throw new Error ( 'Unexpected response from Dagster' )
7486
75- if ( data . errors ?. length ) {
76- throw new Error ( data . errors [ 0 ] . message )
87+ if ( ! ( 'runId' in raw ) || typeof ( raw as { runId : unknown } ) . runId !== 'string' ) {
88+ throw new Error (
89+ dagsterUnionErrorMessage ( raw as { message ?: string } , 'Run not found or Dagster error' )
90+ )
7791 }
7892
79- const result = data . data ?. runOrError
80- if ( ! result ) throw new Error ( 'Unexpected response from Dagster' )
81-
82- if ( result . message && ! result . runId ) {
83- throw new Error ( result . message )
84- }
93+ const run = raw as DagsterGetRunGraphqlRun
8594
8695 return {
8796 success : true ,
8897 output : {
89- runId : result . runId ,
90- jobName : result . jobName ?? null ,
91- status : result . status ,
92- startTime : result . startTime ?? null ,
93- endTime : result . endTime ?? null ,
94- runConfigYaml : result . runConfigYaml ?? null ,
95- tags : result . tags ?? null ,
98+ runId : run . runId ,
99+ jobName : run . jobName ?? null ,
100+ status : run . status ,
101+ startTime : run . startTime ?? null ,
102+ endTime : run . endTime ?? null ,
103+ runConfigYaml : run . runConfigYaml ?? null ,
104+ tags : run . tags ?? null ,
96105 } ,
97106 }
98107 } ,
@@ -105,6 +114,7 @@ export const getRunTool: ToolConfig<DagsterGetRunParams, DagsterGetRunResponse>
105114 jobName : {
106115 type : 'string' ,
107116 description : 'Name of the job this run belongs to' ,
117+ optional : true ,
108118 } ,
109119 status : {
110120 type : 'string' ,
0 commit comments