Ë
    (<çi   ã                   ó’   — d Z ddlZddlZddlZddlZddlmZmZmZ  ej                  e	«      Z
 e ed¬«      «      Z G d„ d«      Zy)u	  Feature Flag ë¡œë” ëª¨ë“ˆ.

.claude/feature_flags.jsonì„ ì½ê³  í”Œëž˜ê·¸ ìƒíƒœë¥¼ ê´€ë¦¬í•œë‹¤.

Usage:
    from utils.feature_flags import FeatureFlagLoader
    flags = FeatureFlagLoader()
    if flags.is_enabled("progressive_disclosure_enabled"):
        ...
é    N)ÚdatetimeÚ	timedeltaÚtimezoneé	   )Úhoursc                   ón   — e Zd ZdZddefd„Zdd„Zdd„Zdedefd	„Z	ded
eddfd„Z
deddfd„Zdefd„Zy)ÚFeatureFlagLoaderu1   Feature flag ë¡œë”. mtime ìºì‹œ + atomic write.Úpathc                 ó  — t         j                  j                  |«      s@t         j                  j	                  dd«      }t         j                  j                  ||«      }|| _        i | _        d| _        | j                  «        y )NÚWORKSPACE_ROOTz/home/jay/workspaceg        )
Úosr
   ÚisabsÚenvironÚgetÚjoinÚ_pathÚ_cacheÚ_mtimeÚ_load)Úselfr
   Ú	workspaces      úD/home/jay/workspace/.worktrees/task-2057-dev2/utils/feature_flags.pyÚ__init__zFeatureFlagLoader.__init__   sZ   € äw‰w}‰}˜TÔ"ÜŸ
™
Ÿ™Ð'7Ð9NÓOˆIÜ—7‘7—<‘< 	¨4Ó0ˆDØˆŒ
ØˆŒØ ˆŒØ
‰
ó    ÚreturnNc                 óÈ  — 	 t        | j                  dd¬«      5 }t        j                  |«      | _        ddd«       t
        j                  j                  | j                  «      | _        y# 1 sw Y   Œ8xY w# t        $ r, t        j                  d| j                  «       di i| _        Y yt        j                  $ r# t        j                  d| j                  «       Y yw xY w)u/   íŒŒì¼ ë¡œë“œ. ì‹¤íŒ¨ ì‹œ ì´ì „ ìºì‹œ ìœ ì§€.Úrzutf-8)ÚencodingNuA   Feature flags íŒŒì¼ ì—†ìŒ: %s â€” ëª¨ë“  í”Œëž˜ê·¸ false ì²˜ë¦¬Úflagsu=   Feature flags JSON íŒŒì‹± ì‹¤íŒ¨: %s â€” ì´ì „ ìºì‹œ ìœ ì§€)Úopenr   ÚjsonÚloadr   r   r
   Úgetmtimer   ÚFileNotFoundErrorÚloggerÚwarningÚJSONDecodeError)r   Úfs     r   r   zFeatureFlagLoader._load$   s¯   € ð	hÜd—j‘j #°Ô8ð +¸AÜ"Ÿi™i¨›l”÷+äŸ'™'×*Ñ*¨4¯:©:Ó6ˆDK÷+ð +ûô !ò 	(ÜN‰NÐ^Ð`d×`jÑ`jÔkØ" B˜-ˆDŽKÜ×#Ñ#ò 	hÜN‰NÐZÐ\`×\fÑ\fÖgð	hús-   ‚A8 šA,µ6A8 Á,A5Á1A8 Á82C!Â,2C!Ã C!c                 ó¶   — 	 t         j                  j                  | j                  «      }|| j
                  k7  r| j                  «        yy# t        $ r Y yw xY w)u9   íŒŒì¼ mtime í™•ì¸ í›„ ë³€ê²½ëœ ê²½ìš°ì—ë§Œ ìž¬ë¡œë“œ.N)r   r
   r#   r   r$   r   r   )r   Úcurrent_mtimes     r   ÚreloadzFeatureFlagLoader.reload0   sO   € ð	ÜŸG™G×,Ñ,¨T¯Z©ZÓ8ˆMð ˜DŸK™KÒ'ØJ‰JLð (øô !ò 	Ùð	ús   ‚)A Á	AÁAÚ	flag_namec                 ó¬   — | j                  «        | j                  j                  di «      }||vrt        j	                  d|«       yt        ||   «      S )uJ   í”Œëž˜ê·¸ í™œì„±í™” ì—¬ë¶€ ë°˜í™˜. ì¡´ìž¬í•˜ì§€ ì•ŠëŠ” í”Œëž˜ê·¸ëŠ” False.r   u-   ì•Œ ìˆ˜ ì—†ëŠ” í”Œëž˜ê·¸: %s â€” False ë°˜í™˜F)r+   r   r   r%   r&   Úbool)r   r,   r   s      r   Ú
is_enabledzFeatureFlagLoader.is_enabled9   sI   € à‰ŒØ—‘—‘ ¨Ó,ˆØ˜EÑ!ÜN‰NÐJÈIÔVØÜE˜)Ñ$Ó%Ð%r   Úvaluec                 ó~  — | j                  «        | j                  j                  di «      }|||<   || j                  d<   t        j                  t
        «      j                  «       | j                  d<   | j                  | j                  «       t        j                  j                  | j                  «      | _        y)u?   atomic writeë¡œ í”Œëž˜ê·¸ ê°’ ë³€ê²½. updated_at ìžë™ ê°±ì‹ .r   Ú
updated_atN)r+   r   r   r   ÚnowÚKSTÚ	isoformatÚ_atomic_writer   r
   r#   r   r   )r   r,   r0   r   s       r   Úset_flagzFeatureFlagLoader.set_flagB   sƒ   € à‰ŒØ—‘—‘ ¨Ó,ˆØ ˆˆiÑØ$ˆ‰GÑÜ$,§L¡L´Ó$5×$?Ñ$?Ó$Aˆ‰LÑ!Ø×Ñ˜4Ÿ;™;Ô'Ü—g‘g×&Ñ& t§z¡zÓ2ˆr   Údatac                 ój  — t         j                  j                  | j                  «      }t        j                  |d¬«       t        j                  d|dd¬«      5 }t        j                  ||dd¬«       |j                  }d	d	d	«       t        j                  | j                  «       y	# 1 sw Y   Œ*xY w)
u-   atomic write: tempfile â†’ os.replace íŒ¨í„´.T)Úexist_okÚwFz.tmp)ÚmodeÚdirÚdeleteÚsuffixé   )ÚindentÚensure_asciiN)r   r
   Údirnamer   ÚmakedirsÚtempfileÚNamedTemporaryFiler!   ÚdumpÚnameÚreplace)r   r8   Údir_pathr(   Útmp_paths        r   r6   zFeatureFlagLoader._atomic_writeL   s‚   € ä—7‘7—?‘? 4§:¡:Ó.ˆÜ
‰H tÕ,Ü×(Ñ(¨c°xÈÐV\Ô]ð 	ÐabÜI‰Id˜A a°eÕ<Ø—v‘vˆH÷	ô 	
‰
8˜TŸZ™ZÕ(÷	ð 	ús   Á&B)Â)B2c                 ól   — | j                  «        t        | j                  j                  di «      «      S )u   ëª¨ë“  í”Œëž˜ê·¸ ìƒíƒœ ë°˜í™˜.r   )r+   Údictr   r   )r   s    r   Úget_all_flagszFeatureFlagLoader.get_all_flagsU   s%   € à‰ŒÜD—K‘K—O‘O G¨RÓ0Ó1Ð1r   )z.claude/feature_flags.json)r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrr   r   r+   r.   r/   r7   rM   r6   rN   © r   r   r	   r	      sh   „ Ù;ñ˜Só ó
hóð& Cð &¨Dó &ð3 #ð 3¨dð 3°tó 3ð) $ð )¨4ó )ð2˜tô 2r   r	   )rR   r!   Úloggingr   rE   r   r   r   Ú	getLoggerrO   r%   r4   r	   rT   r   r   ú<module>rW      sK   ðñ	ó Û Û 	Û ß 2Ñ 2à	ˆ×	Ñ	˜8Ó	$€á‰y˜qÔ!Ó"€÷A2ò A2r   