@@ -51,7 +51,7 @@ use crate::model::{
5151use crate :: services:: agent_types:: AgentTypesService ;
5252use crate :: services:: agent_webhooks:: AgentWebhooksService ;
5353use crate :: services:: blob_store:: BlobStoreService ;
54- use crate :: services:: card:: CardService ;
54+ use crate :: services:: card:: { CardService , CardState } ;
5555use crate :: services:: component:: ComponentService ;
5656use crate :: services:: environment_state:: EnvironmentStateService ;
5757use crate :: services:: file_loader:: { FileLoader , FileUseToken } ;
@@ -722,20 +722,40 @@ impl<Ctx: WorkerCtx> DurableWorkerCtx<Ctx> {
722722 card : StoredCard ,
723723 ) -> Result < Result < ( ) , CardInstallFailure > , WorkerExecutorError > {
724724 let card_id = card. card_id ( ) ;
725- let revoked_or_missing = self
725+ let mut candidate_wallet_card_ids = self
726+ . state
727+ . agent_wallet_cards
728+ . keys ( )
729+ . copied ( )
730+ . collect :: < Vec < _ > > ( ) ;
731+ if !candidate_wallet_card_ids. contains ( & card_id) {
732+ candidate_wallet_card_ids. push ( card_id) ;
733+ }
734+ self . state
735+ . card_service
736+ . set_card_interest ( self . owned_agent_id . clone ( ) , & candidate_wallet_card_ids)
737+ . await ;
738+
739+ let card_state = self
726740 . state
727741 . card_service
728742 . check_cards ( vec ! [ card_id] )
729743 . await ?
730- . contains ( & card_id) ;
731- let status = self . public_state . worker ( ) . get_last_known_status ( ) . await ;
744+ . remove ( & card_id) ;
732745
733- if revoked_or_missing {
734- let reason = if status. revoked_cards . contains ( & card_id) {
735- CardInstallFailure :: CardRevoked
736- } else {
737- CardInstallFailure :: NotFound
738- } ;
746+ if !matches ! ( card_state, Some ( CardState :: Live ( _) ) ) {
747+ let wallet_card_ids = self
748+ . state
749+ . agent_wallet_cards
750+ . keys ( )
751+ . copied ( )
752+ . collect :: < Vec < _ > > ( ) ;
753+ self . state
754+ . card_service
755+ . set_card_interest ( self . owned_agent_id . clone ( ) , & wallet_card_ids)
756+ . await ;
757+
758+ let reason = CardInstallFailure :: NotFound ;
739759
740760 if let Some ( queued_event_index) = queued_event_index {
741761 self . public_state
@@ -759,8 +779,9 @@ impl<Ctx: WorkerCtx> DurableWorkerCtx<Ctx> {
759779 . collect :: < Vec < _ > > ( ) ;
760780 self . state
761781 . card_service
762- . register_agent_cards ( self . owned_agent_id . clone ( ) , & wallet_card_ids)
782+ . set_card_interest ( self . owned_agent_id . clone ( ) , & wallet_card_ids)
763783 . await ;
784+
764785 self . public_state
765786 . worker ( )
766787 . add_and_commit_oplog ( OplogEntry :: card_installed ( queued_event_index, card) )
@@ -784,7 +805,17 @@ impl<Ctx: WorkerCtx> DurableWorkerCtx<Ctx> {
784805 if is_live {
785806 self . state
786807 . card_service
787- . remove_revoked_agent_cards ( & self . owned_agent_id , & [ card_id] )
808+ . record_revoked_cards ( & [ card_id] )
809+ . await ;
810+ let wallet_card_ids = self
811+ . state
812+ . agent_wallet_cards
813+ . keys ( )
814+ . copied ( )
815+ . collect :: < Vec < _ > > ( ) ;
816+ self . state
817+ . card_service
818+ . set_card_interest ( self . owned_agent_id . clone ( ) , & wallet_card_ids)
788819 . await ;
789820
790821 self . public_state
@@ -2605,20 +2636,22 @@ impl<Ctx: WorkerCtx> DurableWorkerCtx<Ctx> {
26052636 . collect :: < Vec < _ > > ( ) ;
26062637 self . state
26072638 . card_service
2608- . register_agent_cards ( self . owned_agent_id . clone ( ) , & wallet_card_ids)
2639+ . set_card_interest ( self . owned_agent_id . clone ( ) , & wallet_card_ids)
26092640 . await ;
26102641
26112642 if wallet_card_ids. is_empty ( ) {
26122643 return Ok ( ( ) ) ;
26132644 }
26142645
2615- let revoked_card_ids = self . state . card_service . check_cards ( wallet_card_ids) . await ?;
2646+ let card_states = self . state . card_service . check_cards ( wallet_card_ids) . await ?;
26162647
2617- for card_id in revoked_card_ids {
2618- self . public_state
2619- . worker ( )
2620- . queue_card_revocation ( card_id)
2621- . await ;
2648+ for ( card_id, state) in card_states {
2649+ if state == CardState :: Revoked {
2650+ self . public_state
2651+ . worker ( )
2652+ . queue_card_revocation ( card_id)
2653+ . await ;
2654+ }
26222655 }
26232656
26242657 Ok ( ( ) )
@@ -2722,6 +2755,16 @@ impl<Ctx: WorkerCtx> DurableWorkerCtx<Ctx> {
27222755 self . state . cached_agent_config_retry_policies = None ;
27232756 self . state . agent_effective_surface = agent_effective_surface;
27242757 self . state . agent_wallet_cards = initial_wallet_cards;
2758+ let wallet_card_ids = self
2759+ . state
2760+ . agent_wallet_cards
2761+ . keys ( )
2762+ . copied ( )
2763+ . collect :: < Vec < _ > > ( ) ;
2764+ self . state
2765+ . card_service
2766+ . set_card_interest ( self . owned_agent_id . clone ( ) , & wallet_card_ids)
2767+ . await ;
27252768 } ;
27262769
27272770 self . state . component_metadata = new_metadata;
0 commit comments