11import {
22 MCPAppsClient ,
33 Profile ,
4- ProfilesResult ,
54 ProfileStatusResult ,
5+ ProfileStatusApiResponse ,
66 Repository ,
7- RepositoriesResult ,
7+ RepositoriesApiResponse ,
88 type ToolResultParams ,
99 type ToolInputParams ,
1010} from './mcp-client.js' ;
@@ -185,27 +185,36 @@ function handleToolResult(result: ToolResultParams): void {
185185 }
186186
187187 // Try to identify the data type and update accordingly
188- if ( isProfilesResult ( data ) ) {
188+ // API returns profiles as array directly
189+ if ( isProfilesArray ( data ) ) {
189190 console . log (
190191 '[Dashboard] Received profiles data:' ,
191- data . profiles . length ,
192+ data . length ,
192193 'profiles'
193194 ) ;
194- profiles = data . profiles || [ ] ;
195+ profiles = data ;
195196 updateSummaryCards ( ) ;
196197 renderProfiles ( ) ;
197- } else if ( isProfileStatusResult ( data ) ) {
198- console . log ( '[Dashboard] Received profile status:' , data . profile_name ) ;
199- profileStatuses . set ( data . profile_id , data ) ;
198+ // API returns profile status with nested profile_status object
199+ } else if ( isProfileStatusApiResponse ( data ) ) {
200+ const status : ProfileStatusResult = {
201+ profile_id : data . profile_status . profile_id ,
202+ profile_name : data . profile_status . profile_name ,
203+ profile_status : data . profile_status . profile_status ,
204+ rule_evaluation_status : data . rule_evaluation_status ,
205+ } ;
206+ console . log ( '[Dashboard] Received profile status:' , status . profile_name ) ;
207+ profileStatuses . set ( status . profile_id , status ) ;
200208 updateSummaryCards ( ) ;
201209 renderProfiles ( ) ;
202- } else if ( isRepositoriesResult ( data ) ) {
210+ // API returns repositories as { results: [...] }
211+ } else if ( isRepositoriesApiResponse ( data ) ) {
203212 console . log (
204213 '[Dashboard] Received repositories data:' ,
205- data . repositories . length ,
214+ data . results . length ,
206215 'repos'
207216 ) ;
208- repositories = data . repositories || [ ] ;
217+ repositories = data . results || [ ] ;
209218 updateSummaryCards ( ) ;
210219 renderRepositories ( ) ;
211220 } else {
@@ -214,38 +223,35 @@ function handleToolResult(result: ToolResultParams): void {
214223}
215224
216225/**
217- * Type guard for ProfilesResult
226+ * Type guard for ProfilesResult - API returns array directly
218227 */
219- function isProfilesResult ( data : unknown ) : data is ProfilesResult {
220- return (
221- typeof data === 'object' &&
222- data !== null &&
223- 'profiles' in data &&
224- Array . isArray ( ( data as ProfilesResult ) . profiles )
228+ function isProfilesArray ( data : unknown ) : data is Profile [ ] {
229+ return Array . isArray ( data ) && data . every ( item =>
230+ typeof item === 'object' && item !== null && 'name' in item
225231 ) ;
226232}
227233
228234/**
229- * Type guard for ProfileStatusResult
235+ * Type guard for ProfileStatusApiResponse - API returns nested structure
230236 */
231- function isProfileStatusResult ( data : unknown ) : data is ProfileStatusResult {
237+ function isProfileStatusApiResponse ( data : unknown ) : data is ProfileStatusApiResponse {
232238 return (
233239 typeof data === 'object' &&
234240 data !== null &&
235- 'profile_id ' in data &&
236- 'profile_name' in data
241+ 'profile_status ' in data &&
242+ typeof ( data as ProfileStatusApiResponse ) . profile_status === 'object'
237243 ) ;
238244}
239245
240246/**
241- * Type guard for RepositoriesResult
247+ * Type guard for RepositoriesApiResponse - API returns { results: [...] }
242248 */
243- function isRepositoriesResult ( data : unknown ) : data is RepositoriesResult {
249+ function isRepositoriesApiResponse ( data : unknown ) : data is RepositoriesApiResponse {
244250 return (
245251 typeof data === 'object' &&
246252 data !== null &&
247- 'repositories ' in data &&
248- Array . isArray ( ( data as RepositoriesResult ) . repositories )
253+ 'results ' in data &&
254+ Array . isArray ( ( data as RepositoriesApiResponse ) . results )
249255 ) ;
250256}
251257
@@ -323,9 +329,9 @@ async function loadDashboard(): Promise<void> {
323329 profileStatuses = new Map ( ) ;
324330 const statusPromises = profiles . map ( async ( profile ) => {
325331 try {
326- // Use project_id from profile context if available, or fall back to current context
332+ // Use project from profile context if available, or fall back to current context
327333 const profileProjectId =
328- profile . context ?. project_id ?? currentProjectId ?? undefined ;
334+ profile . context ?. project ?? currentProjectId ?? undefined ;
329335 const status = await client . getProfileStatus ( {
330336 name : profile . name ,
331337 projectId : profileProjectId ,
@@ -591,7 +597,7 @@ function renderProfileRules(status: ProfileStatusResult | undefined): string {
591597 const safeStatus = escapeAttr ( rule . status || 'pending' ) ;
592598 return `
593599 <div class="rule-item">
594- <span class="rule-name">${ escapeHtml ( rule . rule_name || rule . rule_type || 'Unknown rule' ) } </span>
600+ <span class="rule-name">${ escapeHtml ( rule . rule_name || rule . rule_type_name || 'Unknown rule' ) } </span>
595601 <span class="status-badge ${ safeStatus } ">
596602 <span class="status-dot ${ safeStatus } "></span>
597603 ${ escapeHtml ( rule . status || 'pending' ) }
0 commit comments