@@ -463,14 +463,11 @@ pub async fn handle_get_policy(
463463
464464 info ! ( "Getting policy for component {}" , component_id) ;
465465
466- // First check if the component exists
467- let component_exists = lifecycle_manager
468- . get_component ( component_id)
466+ // Ensure the component is available (compile lazily if needed)
467+ lifecycle_manager
468+ . ensure_component_loaded ( component_id)
469469 . await
470- . is_some ( ) ;
471- if !component_exists {
472- return Err ( anyhow:: anyhow!( "Component not found: {}" , component_id) ) ;
473- }
470+ . map_err ( |e| anyhow:: anyhow!( "Component not found: {} ({})" , component_id, e) ) ?;
474471
475472 let policy_info = lifecycle_manager. get_policy_info ( component_id) . await ;
476473
@@ -520,6 +517,12 @@ pub async fn handle_grant_storage_permission(
520517
521518 info ! ( "Granting storage permission to component {}" , component_id) ;
522519
520+ // Ensure component is loaded (lazy compile)
521+ lifecycle_manager
522+ . ensure_component_loaded ( component_id)
523+ . await
524+ . map_err ( |e| anyhow:: anyhow!( "Component not found: {} ({})" , component_id, e) ) ?;
525+
523526 let result = lifecycle_manager
524527 . grant_permission ( component_id, "storage" , details)
525528 . await ;
@@ -570,6 +573,11 @@ pub async fn handle_grant_network_permission(
570573
571574 info ! ( "Granting network permission to component {}" , component_id) ;
572575
576+ lifecycle_manager
577+ . ensure_component_loaded ( component_id)
578+ . await
579+ . map_err ( |e| anyhow:: anyhow!( "Component not found: {} ({})" , component_id, e) ) ?;
580+
573581 let result = lifecycle_manager
574582 . grant_permission ( component_id, "network" , details)
575583 . await ;
@@ -623,6 +631,11 @@ pub async fn handle_grant_environment_variable_permission(
623631 component_id
624632 ) ;
625633
634+ lifecycle_manager
635+ . ensure_component_loaded ( component_id)
636+ . await
637+ . map_err ( |e| anyhow:: anyhow!( "Component not found: {} ({})" , component_id, e) ) ?;
638+
626639 let result = lifecycle_manager
627640 . grant_permission ( component_id, "environment" , details)
628641 . await ;
@@ -673,6 +686,11 @@ pub async fn handle_grant_memory_permission(
673686
674687 info ! ( "Granting memory permission to component {}" , component_id) ;
675688
689+ lifecycle_manager
690+ . ensure_component_loaded ( component_id)
691+ . await
692+ . map_err ( |e| anyhow:: anyhow!( "Component not found: {} ({})" , component_id, e) ) ?;
693+
676694 let result = lifecycle_manager
677695 . grant_permission ( component_id, "resource" , details)
678696 . await ;
@@ -731,6 +749,11 @@ pub async fn handle_revoke_storage_permission(
731749 uri, component_id
732750 ) ;
733751
752+ lifecycle_manager
753+ . ensure_component_loaded ( component_id)
754+ . await
755+ . map_err ( |e| anyhow:: anyhow!( "Component not found: {} ({})" , component_id, e) ) ?;
756+
734757 let result = lifecycle_manager
735758 . revoke_storage_permission_by_uri ( component_id, uri)
736759 . await ;
@@ -784,6 +807,11 @@ pub async fn handle_revoke_network_permission(
784807 component_id
785808 ) ;
786809
810+ lifecycle_manager
811+ . ensure_component_loaded ( component_id)
812+ . await
813+ . map_err ( |e| anyhow:: anyhow!( "Component not found: {} ({})" , component_id, e) ) ?;
814+
787815 let result = lifecycle_manager
788816 . revoke_permission ( component_id, "network" , details)
789817 . await ;
@@ -837,6 +865,11 @@ pub async fn handle_revoke_environment_variable_permission(
837865 component_id
838866 ) ;
839867
868+ lifecycle_manager
869+ . ensure_component_loaded ( component_id)
870+ . await
871+ . map_err ( |e| anyhow:: anyhow!( "Component not found: {} ({})" , component_id, e) ) ?;
872+
840873 let result = lifecycle_manager
841874 . revoke_permission ( component_id, "environment" , details)
842875 . await ;
@@ -883,6 +916,11 @@ pub async fn handle_reset_permission(
883916
884917 info ! ( "Resetting all permissions for component {}" , component_id) ;
885918
919+ lifecycle_manager
920+ . ensure_component_loaded ( component_id)
921+ . await
922+ . map_err ( |e| anyhow:: anyhow!( "Component not found: {} ({})" , component_id, e) ) ?;
923+
886924 let result = lifecycle_manager. reset_permission ( component_id) . await ;
887925
888926 match result {
0 commit comments