
    Ki                       d Z ddlmZ ddlmZmZmZ ddlmZmZ ddl	m
Z
mZmZ ddlmZmZ ddlmZ  edd	g
      Zej'                  dd      dd       Zej'                  dd       eddd       edd      f	 	 	 	 	 	 	 d d       Zej'                  dd       edd       edd      f	 	 	 	 	 	 	 d!d       Zy)"u   
Agent 活動相關 API(階段 7-A)。

  GET  /api/agent/activity            ─ 拉 24 小時 / 7 天的 庫柏動態 stats + timeline
  GET  /api/agent/activity/timeline   ─ 拉最近 N 筆動作明細
    )annotationsdatetime	timedeltatimezone)	APIRouterQuery)descfuncselect)CurrentUser	DBSession)AgentActivityz
/api/agentagent)prefixtagsz	/activityu%   庫柏動態統計(24 小時 / 7 天))summaryc                  K   t        j                  t        j                        }|t	        d      z
  }|t	        d      z
  }fd} ||       d{   } ||       d{   }d }| ||      t        d |j                         D              d	| ||      t        d
 |j                         D              d	dS 7 l7 ^w)uf   聚合最近 24 小時 / 7 天的 Agent 活動。
    給 dashboard「庫柏動態」面板用。
       )hours   daysc                \  K   j                  t        t        j                  t	        j
                         j                  d      t	        j                  t	        j                  t        j                        d      j                  d            j                  t        j                  | k\        j                  t        j                               d {   j                         }|D ci c]3  }|j                  |j                  t        |j                   xs d      d5 c}S 7 Qc c}w w)Ncntg        costr   )countcost_usd)executer   r   activity_typer   r   labelcoalescesumr   where
created_atgroup_byallr   floatr   )sincerowsrdbs      1/volume1/homes/robertsu/coba/app/app/api/agent.py_aggz get_activity_stats.<locals>._agg   s     jj++

""5)dhh}'='=>DJJ6R
 U=++u45Xm112
 
 35 	 \``[_VW155eAFFKa>P!QQ[_``
 as$   CD,D%D,*8D'"D,'D,Nc                V    t        t        d | j                         D              d      S )Nc              3  &   K   | ]	  }|d      yw)r   N .0vs     r-   	<genexpr>z:get_activity_stats.<locals>._total_cost.<locals>.<genexpr>/   s     ;
1:
      )roundr#   values)ds    r-   _total_costz'get_activity_stats.<locals>._total_cost.   s     S;
;;Q??    c              3  &   K   | ]	  }|d      ywr   Nr1   r2   s     r-   r5   z%get_activity_stats.<locals>.<genexpr>5   s     C?aqz?r6   )by_typetotal_cost_usdtotal_countc              3  &   K   | ]	  }|d      ywr>   r1   r2   s     r-   r5   z%get_activity_stats.<locals>.<genexpr>:   s     B>aqz>r6   )h24d7)r   nowr   utcr   r#   r9   )	current_userr,   rE   rC   rD   r.   by_24hby_7dr;   s	    `       r-   get_activity_statsrJ      s     
 ,,x||
$C
	#
#C	ya 	 B
a 9_Fr(NE@
 )&1C6==?CC
 )%0B5<<>BB
  s%   ACCC%C&ACCz/reflectionsu    團隊體悟列表(過去 N 天)      im  )defaultgeleNu   只看某位 user 的體悟)rM   descriptionc                  K   ddl m }m}m} ddlm} ddlm}  |j                  |j                         ||      z
  }	t        t              j                  t        j                  dk(  t        j                  |	k\        j                  t        t        j                              }
|r/	 ddlm} |
j                  t        j"                   ||      k(        }
|j)                  |
       d{   j+                         j-                         }t/        |D ch c]  }|j"                  s|j"                   c}      }i }|r|j)                   ||      j                  |j0                  j3                  |                   d{   j+                         j-                         }|D ci c]  }|j0                  |j4                   }}|D cg c]v  }t7        |j0                        |j8                  xs i j;                  d	      |j"                  r|j;                  |j"                  d
      nd|j"                  rt7        |j"                        nd|j8                  xs i j;                  d      xs |j<                  |j8                  xs i j;                  d      xs d|j8                  xs i j;                  d      |j8                  xs i j;                  dd      |j8                  xs i j;                  dd      |j8                  xs i j;                  d      xs g |j                  r|j                  j?                         nddy c}S # t$        t&        f$ r Y w xY w7 uc c}w 7 c c}w c c}w w)u{   供工作台「💡 體悟」view 用。回 [{message_id, by, summary, raw, tag, actionable, similar_count, created_at}]。r   r   )User)r   r   reflection_note)UUIDN
message_idu   (未知)u   (系統)r   raw tag
actionableFsimilar_count
similar_to)idrU   byby_idr   rV   rX   rY   rZ   r[   r%   ) r   r   r   app.models.userrR   
sqlalchemyr   rE   rF   r   r$   r    r%   order_byr
   uuidrT   user_id
ValueError	TypeErrorr   scalarsr'   listr\   in_display_namestrextragetr   	isoformat)rG   r,   r   rc   r   r   r   rR   _selectcutoffstmt_UUIDr*   r+   uids	users_mapusus                     r-   list_reflectionsrv   ?   s     76$,X\\(,,')*>>F- &&##'88  F* htM,,-. 	 	*::m33uW~EFD **T""++-113DD6DqAIID67DIJJwt}22477;;t3DEFFOOQUUW3562aQTT1>>)2	6  A add)77=b--l;:;)))--		:6'(yyS^d2**95BGGMr&&u-3GGMr&&u-77=b--lEBggm00!D77=b--l;Ar67ll!,,002	
   I& 		"6 G6sz   B&M5).M
 M5+M ,)M5M#'M#5AM5M($M5'M+M5E<M0M5
MM5MM5#M5+
M5z/activity/timelineu#   庫柏動作時間軸(最近 N 筆)   )rM   rO   u   逗號分隔過濾 typec                R  K   t        t              j                  t        t        j                              j                  |      }|rm|j                  d      D cg c]#  }|j                         s|j                         % }}|r.|j                  t        j                  j                  |            }|j                  |       d {   j                         j                         }|D cg c]  }t        |j                        |j                  |j                   |j"                  rt        |j"                        nd |j$                  |j&                  |j(                  |j*                  |j                  r|j                  j-                         nd d	 c}S c c}w 7 c c}w w)N,)	r\   typer   rc   successr   duration_msrk   r%   )r   r   ra   r
   r%   limitsplitstripr$   r    rh   r   rf   r'   rj   r\   r   rc   r{   r   r|   rk   rm   )	rG   r,   r}   typesrp   t	type_listr*   r+   s	            r-   get_activity_timeliner   n   sA     - ))$}/G/G*HIOOPUVD(-C(8F(81AGGIQWWY(8	F::m99==iHID**T""++-113D  A add)OOyy)*s199~yy

==WW67ll!,,002
	
  	 G #s8   AF'F2FAF'
F $F'/B)F"	F'"F')rG   r   r,   r   )rG   r   r,   r   r   intrc   
str | None)rG   r   r,   r   r}   r   r   r   )__doc__
__future__r   r   r   r   fastapir   r	   r`   r
   r   r   app.core.depsr   r   app.models.agent_activityr   routerrl   rJ   rv   r   r1   r<   r-   <module>r      s   # 2 2 $ ) ) 0 3 
,gY	7 K!HI% J%P N$FG bQ3/:WX	+++ + 	+ H+\  *OP rc*d8QR	  	 Qr<   