circuschief 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/package.json +1 -1
  2. package/packages/server/src/api/projects-session-helpers.js +25 -0
  3. package/packages/server/src/api/projects.js +1 -0
  4. package/packages/server/src/api/sessions-draft.js +1 -0
  5. package/packages/server/src/api/settings.js +52 -4
  6. package/packages/server/src/db/ConversationRepository.js +16 -3
  7. package/packages/server/src/db/ProjectDefaultsRepository.js +47 -37
  8. package/packages/server/src/db/SessionRepository.js +12 -8
  9. package/packages/server/src/db/SettingsRepository.js +44 -16
  10. package/packages/server/src/db/conversation-helpers.js +1 -0
  11. package/packages/server/src/db/migrations/conversationsMigrations.js +4 -0
  12. package/packages/server/src/db/migrations/index.js +2 -0
  13. package/packages/server/src/db/migrations/sessionsMigrations.js +6 -1
  14. package/packages/server/src/db/session-helpers.js +3 -0
  15. package/packages/server/src/schema.sql +8 -0
  16. package/packages/server/src/services/agentCallLogger.js +1 -1
  17. package/packages/server/src/services/commandButtonPrompts.js +48 -0
  18. package/packages/server/src/services/draftSessionService.js +2 -0
  19. package/packages/server/src/services/sessionExecution.js +3 -1
  20. package/packages/server/src/services/sessionPrompts.js +4 -0
  21. package/packages/server/src/services/sessionProvider.js +6 -8
  22. package/packages/server/src/services/streamEventCallbacks.js +72 -40
  23. package/packages/server/src/services/streamEventHandler.js +13 -2
  24. package/packages/server/src/services/streamUsageHandler.js +6 -0
  25. package/packages/server/src/services/summaryClaudeClient.js +37 -12
  26. package/packages/server/src/services/summaryModelClient.js +154 -0
  27. package/packages/server/src/services/summaryModelResolver.js +148 -0
  28. package/packages/server/src/services/summaryService.js +6 -4
  29. package/packages/server/src/services/usageTracker.js +5 -1
  30. package/packages/server/src/services/visibleFinalErrorMessage.js +123 -0
  31. package/packages/shared/src/constants.js +1 -2
  32. package/packages/shared/src/contracts/projects.js +2 -0
  33. package/packages/shared/src/utils.js +9 -17
  34. package/packages/web/dist/assets/ActiveSessionsView-UJsCILDL.js +1 -0
  35. package/packages/web/dist/assets/{AgentLogsView-Cdw4nmvd.js → AgentLogsView-BGFPLjLa.js} +1 -1
  36. package/packages/web/dist/assets/ApiClient-B4YTtyY4.js +1 -0
  37. package/packages/web/dist/assets/{ArchiveConfirmModal-J48eh3zw.js → ArchiveConfirmModal-OFaj_uX5.js} +1 -1
  38. package/packages/web/dist/assets/{CommandButtonDetailView-DnFhJY5A.js → CommandButtonDetailView-D8S258uP.js} +1 -1
  39. package/packages/web/dist/assets/EffortLevelSelector-C2378L8e.js +1 -0
  40. package/packages/web/dist/assets/{GeneralSettingsView-CQkmdczf.js → GeneralSettingsView-DsHChEhv.js} +1 -1
  41. package/packages/web/dist/assets/{InputWithButton-XyM3k6lN.js → InputWithButton-Ci15ox0a.js} +1 -1
  42. package/packages/web/dist/assets/{InterpolationHelp-PfYR3KJo.js → InterpolationHelp-CIkOSkWX.js} +1 -1
  43. package/packages/web/dist/assets/MarkdownEditor-5-bexzUT.js +2 -0
  44. package/packages/web/dist/assets/ModelSelector-BMpR0DPr.js +1 -0
  45. package/packages/web/dist/assets/{ModelSelector-BZOT1Jc6.css → ModelSelector-D8hbTRIt.css} +1 -1
  46. package/packages/web/dist/assets/{NewSessionView-DkjFLvHU.js → NewSessionView-BCqtIgWH.js} +2 -2
  47. package/packages/web/dist/assets/{NewSessionView-D_Hi7M9g.css → NewSessionView-CUUdHkfv.css} +1 -1
  48. package/packages/web/dist/assets/ProjectEditView-D9sK0fdH.css +1 -0
  49. package/packages/web/dist/assets/ProjectEditView-RFaxHhAX.js +1 -0
  50. package/packages/web/dist/assets/{ProjectListView-CuYMmd3O.js → ProjectListView-B9FuWESY.js} +1 -1
  51. package/packages/web/dist/assets/{ProjectNewView-CNaA4Maf.js → ProjectNewView-D62jYlBL.js} +1 -1
  52. package/packages/web/dist/assets/ProvidersView-DDKMIQWZ.js +1 -0
  53. package/packages/web/dist/assets/QuickResponseSettings-CDm5vwP7.js +1 -0
  54. package/packages/web/dist/assets/{QuickResponsesPanel-DIBQFj0W.css → QuickResponsesPanel-BlFDvnZ2.css} +1 -1
  55. package/packages/web/dist/assets/{QuickResponsesPanel-BqMYSHb0.js → QuickResponsesPanel-DZ_Lre_l.js} +1 -1
  56. package/packages/web/dist/assets/{ResizableTextarea-wYF3K2RO.js → ResizableTextarea-DiIOEGjN.js} +1 -1
  57. package/packages/web/dist/assets/{SessionCard-bLaQEWWX.js → SessionCard-DmjnVYWn.js} +1 -1
  58. package/packages/web/dist/assets/SessionDetailView-CL7nmfiB.js +36 -0
  59. package/packages/web/dist/assets/SessionDetailView-CupIkI7u.css +1 -0
  60. package/packages/web/dist/assets/SessionFormOptions-BpUALRKn.css +1 -0
  61. package/packages/web/dist/assets/SessionFormOptions-DYUISplS.js +1 -0
  62. package/packages/web/dist/assets/SessionListView-BcxGz4aC.js +1 -0
  63. package/packages/web/dist/assets/{SessionLogStream-DTnDAF95.js → SessionLogStream-DpUE6Xsh.js} +1 -1
  64. package/packages/web/dist/assets/{SettingsView-DNLUSsHV.js → SettingsView-BC055tIA.js} +1 -1
  65. package/packages/web/dist/assets/{SlashCommandWizard-CRGFaO8t.js → SlashCommandWizard-DmTyNG9O.js} +1 -1
  66. package/packages/web/dist/assets/SummarySettingsView-BgnRCwlq.js +1 -0
  67. package/packages/web/dist/assets/SummarySettingsView-l2bxHmZZ.css +1 -0
  68. package/packages/web/dist/assets/TemplateDetailView-BlhOmLUX.js +1 -0
  69. package/packages/web/dist/assets/{commandButtons-Bbjf3fCt.js → commandButtons-D4RPpLiu.js} +1 -1
  70. package/packages/web/dist/assets/index-4rhEeO0B.js +1 -0
  71. package/packages/web/dist/assets/index-9vb2KaAd.js +1 -0
  72. package/packages/web/dist/assets/index-B0CvZXuN.js +7 -0
  73. package/packages/web/dist/assets/{index-BQL_L4gL.js → index-B6G18FqB.js} +14 -14
  74. package/packages/web/dist/assets/{index-Cf6vdW-B.js → index-BGwH4Cfn.js} +3 -3
  75. package/packages/web/dist/assets/index-BUhvkAdF.js +1 -0
  76. package/packages/web/dist/assets/index-BcnkUk2o.js +1 -0
  77. package/packages/web/dist/assets/{index-Bs7Qf5D6.js → index-Bn5xdGFM.js} +2 -2
  78. package/packages/web/dist/assets/index-CNwkdB0T.js +1 -0
  79. package/packages/web/dist/assets/index-CfL84oGW.js +1 -0
  80. package/packages/web/dist/assets/index-CkmxO8Mm.js +1 -0
  81. package/packages/web/dist/assets/index-Cpy4-yv3.js +1 -0
  82. package/packages/web/dist/assets/index-CrAQJmoZ.js +1 -0
  83. package/packages/web/dist/assets/{index-gmCCsCQ1.css → index-Cs2nxhrT.css} +1 -1
  84. package/packages/web/dist/assets/index-D6Ky9vJe.js +3 -0
  85. package/packages/web/dist/assets/index-DfrE0gAC.js +1 -0
  86. package/packages/web/dist/assets/index-KwEyz0F3.js +1 -0
  87. package/packages/web/dist/assets/index-OfCywayk.js +1 -0
  88. package/packages/web/dist/assets/index-PDesaJc6.js +1 -0
  89. package/packages/web/dist/assets/index-uB6nhSvz.js +1 -0
  90. package/packages/web/dist/assets/{projects-CPt3AB7U.js → projects-BUiOGmmb.js} +1 -1
  91. package/packages/web/dist/assets/{providers-ChfeMvUq.js → providers-Bh1ZiiJi.js} +1 -1
  92. package/packages/web/dist/assets/sessions-DH1R-NhV.js +1 -0
  93. package/packages/web/dist/assets/settings-Z4AVVmkJ.js +1 -0
  94. package/packages/web/dist/index.html +2 -2
  95. package/packages/web/dist/assets/ActiveSessionsView-UCbQrF1b.js +0 -1
  96. package/packages/web/dist/assets/ApiClient-CWbXWDUY.js +0 -1
  97. package/packages/web/dist/assets/EffortLevelSelector-bXbPo4Zw.js +0 -1
  98. package/packages/web/dist/assets/MarkdownEditor-P8F5kO-o.js +0 -2
  99. package/packages/web/dist/assets/ModelSelector-CowKfGMP.js +0 -1
  100. package/packages/web/dist/assets/ProjectEditView-CpeKj-_w.css +0 -1
  101. package/packages/web/dist/assets/ProjectEditView-embVT7NC.js +0 -1
  102. package/packages/web/dist/assets/ProvidersView-C7rydtOd.js +0 -1
  103. package/packages/web/dist/assets/QuickResponseSettings-BTQEKhwJ.js +0 -1
  104. package/packages/web/dist/assets/SessionDetailView-Cv-xMzXp.css +0 -1
  105. package/packages/web/dist/assets/SessionDetailView-CvQOUsW2.js +0 -36
  106. package/packages/web/dist/assets/SessionFormOptions-3pzbgI2Q.js +0 -1
  107. package/packages/web/dist/assets/SessionFormOptions-DhhIkjIS.css +0 -1
  108. package/packages/web/dist/assets/SessionListView-Dranfb72.js +0 -1
  109. package/packages/web/dist/assets/SummarySettingsView-C7G_suHp.js +0 -1
  110. package/packages/web/dist/assets/SummarySettingsView-DcsmSVJI.css +0 -1
  111. package/packages/web/dist/assets/TemplateDetailView-B78_DLMR.js +0 -1
  112. package/packages/web/dist/assets/index--V7c-VZf.js +0 -1
  113. package/packages/web/dist/assets/index-8Q04yd7H.js +0 -1
  114. package/packages/web/dist/assets/index-B47XRBDH.js +0 -1
  115. package/packages/web/dist/assets/index-BXbgZrhS.js +0 -1
  116. package/packages/web/dist/assets/index-CGhDVPen.js +0 -1
  117. package/packages/web/dist/assets/index-CKcRO1A6.js +0 -1
  118. package/packages/web/dist/assets/index-CTq-SLIW.js +0 -1
  119. package/packages/web/dist/assets/index-CYyos3iC.js +0 -1
  120. package/packages/web/dist/assets/index-CsCREAxF.js +0 -1
  121. package/packages/web/dist/assets/index-DJTTk_8T.js +0 -3
  122. package/packages/web/dist/assets/index-DPqUJ5JK.js +0 -1
  123. package/packages/web/dist/assets/index-EwAe1dKg.js +0 -1
  124. package/packages/web/dist/assets/index-JBA8axyA.js +0 -1
  125. package/packages/web/dist/assets/index-JkVHFtK5.js +0 -7
  126. package/packages/web/dist/assets/index-gMPUwT55.js +0 -1
  127. package/packages/web/dist/assets/index-wadc_0zT.js +0 -1
  128. package/packages/web/dist/assets/sessions-CwPsJOb1.js +0 -1
  129. package/packages/web/dist/assets/settings-BOj6wq6t.js +0 -1
@@ -1 +1 @@
1
- import{_ as j,o as H,a as e,c as o,b as t,t as b,i as c,j as k,n as R,u as q,e as W,x as y,g as z,d as U,w as G,f as K,G as C,F as D,r as J,E}from"./index-BQL_L4gL.js";import{u as Q}from"./sessions-CwPsJOb1.js";import{u as X}from"./commandButtons-Bbjf3fCt.js";import{u as Y,P as Z,S as _,B as ss,g as ts,f as es,b as ns}from"./SessionLogStream-DTnDAF95.js";import{a as os}from"./ApiClient-CWbXWDUY.js";const as={key:0,class:"session-summary"},is={class:"summary-text"},rs={class:"summary-meta"},ls={key:0,class:"summary-files"},us={key:1,class:"session-summary session-summary-loading"},ds={key:2,class:"session-summary session-summary-error"},cs={__name:"SessionCardSummary",props:{sessionId:{type:String,required:!0},summary:{type:Object,default:null},summaryLoading:{type:Boolean,default:!1},summaryError:{type:Boolean,default:!1}},emits:["retrySummary"],setup(s){const g=s,m=R(0);return H(async()=>{var f,r;try{const l=await os.getSessionFilesCount(g.sessionId);m.value=l.count||0}catch(l){console.warn("Failed to fetch files count:",l),(r=(f=g.summary)==null?void 0:f.filesModified)!=null&&r.length&&(m.value=g.summary.filesModified.length)}}),(f,r)=>s.summary?(e(),o("div",as,[t("p",is,b(s.summary.shortSummary),1),t("div",rs,[m.value>0?(e(),o("span",ls,b(m.value)+" "+b(m.value===1?"file":"files")+" modified ",1)):c("",!0)])])):s.summaryLoading?(e(),o("div",us,[...r[1]||(r[1]=[t("span",{class:"loading-spinner-small"},null,-1),t("span",null,"Loading summary...",-1)])])):s.summaryError?(e(),o("div",ds,[r[2]||(r[2]=t("span",{class:"error-icon"},"!",-1)),r[3]||(r[3]=t("span",null,"Summary unavailable",-1)),t("button",{class:"retry-btn",onClick:r[0]||(r[0]=k(l=>f.$emit("retrySummary"),["prevent"]))}," Retry ")])):c("",!0)}},ms=j(cs,[["__scopeId","data-v-a9b445b6"]]);function hs(s){return new Date(s).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}const vs={class:"session-header-actions"},ys=["title"],fs={key:0,class:"archive-actions"},ws=["title"],gs={key:0,xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},ks={key:1,xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},bs={__name:"SessionCardHeaderActions",props:{dateToShow:{type:String,default:null},isChild:{type:Boolean,default:!1},isOnBoard:{type:Boolean,default:!1},kanbanEnabled:{type:Boolean,default:!0},showArchive:{type:Boolean,default:!1},showUnarchive:{type:Boolean,default:!1},sessionStatus:{type:String,default:""},starred:{type:Boolean,default:!1}},emits:["archive","unarchive","star","addToBoard"],setup(s,{emit:g}){const m=s,f=g,r=y(()=>m.sessionStatus!=="running"&&m.sessionStatus!=="starting"),l=()=>{f("archive")},u=()=>{confirm("Restore this session to active?")&&f("unarchive")};return(S,i)=>(e(),o("div",vs,[t("div",{class:"session-date",title:s.dateToShow?"Last activity":"No activity yet"},b(s.dateToShow?q(hs)(s.dateToShow):"—"),9,ys),s.isChild?c("",!0):(e(),o("div",fs,[s.kanbanEnabled&&!s.isOnBoard?(e(),o("button",{key:0,class:"add-to-board-btn",title:"Add to kanban board",onClick:i[0]||(i[0]=k(B=>S.$emit("addToBoard"),["stop","prevent"]))},[...i[2]||(i[2]=[t("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[t("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2",ry:"2"}),t("line",{x1:"9",y1:"3",x2:"9",y2:"21"}),t("line",{x1:"15",y1:"3",x2:"15",y2:"21"})],-1)])])):c("",!0),s.showArchive&&r.value?(e(),o("button",{key:1,class:"archive-btn",title:"Archive session",onClick:k(l,["stop","prevent"])},[...i[3]||(i[3]=[t("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[t("rect",{x:"2",y:"4",width:"20",height:"5",rx:"1",ry:"1"}),t("path",{d:"M4 9v9a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9"}),t("path",{d:"M10 13h4"})],-1)])])):c("",!0),s.showUnarchive?(e(),o("button",{key:2,class:"archive-btn",title:"Unarchive session",onClick:k(u,["stop","prevent"])},[...i[4]||(i[4]=[W('<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-v-07b0375c><rect x="2" y="4" width="20" height="5" rx="1" ry="1" data-v-07b0375c></rect><path d="M4 9v9a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9" data-v-07b0375c></path><path d="M12 11v6" data-v-07b0375c></path><path d="M9 14l3-3 3 3" data-v-07b0375c></path></svg>',1)])])):c("",!0),t("button",{class:"star-btn star-btn-mobile",title:s.starred?"Unstar session":"Star session",onClick:i[1]||(i[1]=k(B=>S.$emit("star"),["stop","prevent"]))},[s.starred?(e(),o("svg",gs,[...i[5]||(i[5]=[t("polygon",{points:"12 2 15.09 10.26 24 10.5 17.18 16.34 19.34 24.5 12 18.92 4.66 24.5 6.82 16.34 0 10.5 8.91 10.26 12 2"},null,-1)])])):(e(),o("svg",ks,[...i[6]||(i[6]=[t("polygon",{points:"12 2 15.09 10.26 24 10.5 17.18 16.34 19.34 24.5 12 18.92 4.66 24.5 6.82 16.34 0 10.5 8.91 10.26 12 2"},null,-1)])]))],8,ws)]))]))}},Ss=j(bs,[["__scopeId","data-v-07b0375c"]]),ps={class:"workflow-card-wrapper"},Cs={class:"session-header-row"},Bs=["title"],xs={key:0,xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},$s={key:1,xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},js={class:"session-info"},As={class:"session-name"},Is={class:"session-meta"},Ts={key:0,class:"status-badge status-running"},Ms={key:1,class:"status-badge status-scheduled"},Ls=["title"],Us=["title","aria-label","onClick","innerHTML"],Ds={key:0,class:"session-project"},Es={class:"project-name"},Rs={__name:"SessionCard",props:{session:{type:Object,required:!0},showSummary:{type:Boolean,default:!1},showProject:{type:Boolean,default:!1},summary:{type:Object,default:null},summaryLoading:{type:Boolean,default:!1},summaryError:{type:Boolean,default:!1},isChild:{type:Boolean,default:!1},showArchive:{type:Boolean,default:!1},showUnarchive:{type:Boolean,default:!1},prUrl:{type:String,default:null},prSummary:{type:Object,default:null},kanbanEnabled:{type:Boolean,default:!0}},emits:["retrySummary","archive","unarchive","addToBoard"],setup(s,{emit:g}){const m=Q(),f=X(),r=Y(),l=R(null),u=s,S=g,i=y(()=>r.isSessionOnBoard(u.session.id)),B=()=>{S("addToBoard",u.session)},O=y(()=>u.session.lastActivityAt??null);function x(){return m.getWorkflowSessions(u.session.id)}const A=y(()=>{const d=x(),n=["running","starting"];let h=0,a=0;for(const w of d)n.includes(w.status)&&h++,w.status==="scheduled"&&a++;return{runningCount:h,scheduledCount:a,totalCount:d.length,effectiveStatus:u.session.status}}),I=y(()=>{const d=["running","starting"];return x().filter(n=>d.includes(n.status)).map(n=>n.id)}),N=y(()=>I.value.length>0),p=y(()=>{const d=Date.now();if(u.session.status==="scheduled"&&u.session.scheduledAt)return u.session.scheduledAt;const n=x();let h=null;for(const a of n)if(a.id!==u.session.id&&a.status==="scheduled"&&a.scheduledAt){const w=new Date(a.scheduledAt).getTime();w>=d&&(h===null||w<h)&&(h=w)}return h}),T=y(()=>p.value?es(new Date(p.value),{addSuffix:!0}):null),V=y(()=>p.value?ns(new Date(p.value),"MMM d, h:mm a"):null),F=y(()=>{const d=u.session.projectId;if(!d)return[];m.commandRunVersion;const n=f.getButtonsByProjectId(d),h=Object.fromEntries(n.map(v=>[v.id,v])),a=u.session.id,$=m.sessions.find(v=>v.id===a);return(($==null?void 0:$.latestCommandRuns)||u.session.latestCommandRuns||[]).filter(v=>{var L;return(L=h[v.buttonId])==null?void 0:L.showOnList}).map(v=>({buttonId:v.buttonId,label:h[v.buttonId].label,command:h[v.buttonId].command,status:v.status,latestRun:v}))}),P=d=>ts(d),M=()=>{m.toggleSessionStar(u.session.id)};return(d,n)=>{const h=z("router-link");return e(),o(D,null,[t("div",ps,[U(h,{to:`/sessions/${s.session.id}`,class:E(["session-card card",{"is-child":s.isChild}])},{default:G(()=>[t("div",Cs,[s.isChild?c("",!0):(e(),o("button",{key:0,class:"star-btn",title:s.session.starred?"Unstar session":"Star session",onClick:k(M,["stop","prevent"])},[s.session.starred?(e(),o("svg",xs,[...n[4]||(n[4]=[t("polygon",{points:"12 2 15.09 10.26 24 10.5 17.18 16.34 19.34 24.5 12 18.92 4.66 24.5 6.82 16.34 0 10.5 8.91 10.26 12 2"},null,-1)])])):(e(),o("svg",$s,[...n[5]||(n[5]=[t("polygon",{points:"12 2 15.09 10.26 24 10.5 17.18 16.34 19.34 24.5 12 18.92 4.66 24.5 6.82 16.34 0 10.5 8.91 10.26 12 2"},null,-1)])]))],8,Bs)),t("div",js,[t("h3",As,b(s.session.name),1),t("p",Is,[A.value.runningCount>0?(e(),o("span",Ts," ● running ")):c("",!0),A.value.scheduledCount>0?(e(),o("span",Ms,[...n[6]||(n[6]=[t("svg",{class:"schedule-icon-inline",xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[t("circle",{cx:"12",cy:"12",r:"10"}),t("polyline",{points:"12 6 12 12 16 14"})],-1),K(" scheduled ",-1)])])):c("",!0),T.value?(e(),o("span",{key:2,class:"scheduled-time",title:V.value},b(T.value),9,Ls)):c("",!0),s.prUrl&&!s.isChild?(e(),C(Z,{key:3,"pr-url":s.prUrl,summary:s.prSummary,"data-testid":"session-card-pr-indicators"},null,8,["pr-url","summary"])):c("",!0),(e(!0),o(D,null,J(F.value,a=>(e(),o("span",{key:a.buttonId,class:E(["button-status-indicator",`button-status-${a.status}`]),title:a.label,"aria-label":a.status,onClick:k(w=>l.value=a,["stop","prevent"]),innerHTML:P(a.status)},null,10,Us))),128))]),s.showProject&&s.session.projectName?(e(),o("p",Ds,[t("span",Es,b(s.session.projectName),1)])):c("",!0)]),U(Ss,{"date-to-show":O.value,"is-child":s.isChild,"is-on-board":i.value,"kanban-enabled":s.kanbanEnabled,"show-archive":s.showArchive,"show-unarchive":s.showUnarchive,"session-status":s.session.status,starred:!!s.session.starred,onArchive:n[0]||(n[0]=a=>d.$emit("archive",s.session.id)),onUnarchive:n[1]||(n[1]=a=>d.$emit("unarchive",s.session.id)),onStar:M,onAddToBoard:B},null,8,["date-to-show","is-child","is-on-board","kanban-enabled","show-archive","show-unarchive","session-status","starred"])]),s.showSummary?(e(),C(ms,{key:0,"session-id":s.session.id,summary:s.summary,"summary-loading":s.summaryLoading,"summary-error":s.summaryError,onRetrySummary:n[2]||(n[2]=a=>d.$emit("retrySummary",s.session.id))},null,8,["session-id","summary","summary-loading","summary-error"])):c("",!0),N.value?(e(),C(_,{key:1,"session-ids":I.value,"data-testid":"session-log-stream"},null,8,["session-ids"])):c("",!0)]),_:1},8,["to","class"])]),l.value?(e(),C(ss,{key:0,button:{id:l.value.buttonId,label:l.value.label,command:l.value.command},"latest-run":l.value.latestRun,"is-open":!!l.value,"session-id":s.session.id,onClose:n[3]||(n[3]=a=>l.value=null)},null,8,["button","latest-run","is-open","session-id"])):c("",!0)],64)}}},qs=j(Rs,[["__scopeId","data-v-eef8bbf3"]]);export{qs as S};
1
+ import{_ as j,o as H,a as e,c as o,b as t,t as b,i as c,j as k,n as R,u as q,e as W,x as y,g as z,d as U,w as G,f as K,G as C,F as D,r as J,E}from"./index-B6G18FqB.js";import{u as Q}from"./sessions-DH1R-NhV.js";import{u as X}from"./commandButtons-D4RPpLiu.js";import{u as Y,P as Z,S as _,B as ss,g as ts,f as es,b as ns}from"./SessionLogStream-DpUE6Xsh.js";import{a as os}from"./ApiClient-B4YTtyY4.js";const as={key:0,class:"session-summary"},is={class:"summary-text"},rs={class:"summary-meta"},ls={key:0,class:"summary-files"},us={key:1,class:"session-summary session-summary-loading"},ds={key:2,class:"session-summary session-summary-error"},cs={__name:"SessionCardSummary",props:{sessionId:{type:String,required:!0},summary:{type:Object,default:null},summaryLoading:{type:Boolean,default:!1},summaryError:{type:Boolean,default:!1}},emits:["retrySummary"],setup(s){const g=s,m=R(0);return H(async()=>{var f,r;try{const l=await os.getSessionFilesCount(g.sessionId);m.value=l.count||0}catch(l){console.warn("Failed to fetch files count:",l),(r=(f=g.summary)==null?void 0:f.filesModified)!=null&&r.length&&(m.value=g.summary.filesModified.length)}}),(f,r)=>s.summary?(e(),o("div",as,[t("p",is,b(s.summary.shortSummary),1),t("div",rs,[m.value>0?(e(),o("span",ls,b(m.value)+" "+b(m.value===1?"file":"files")+" modified ",1)):c("",!0)])])):s.summaryLoading?(e(),o("div",us,[...r[1]||(r[1]=[t("span",{class:"loading-spinner-small"},null,-1),t("span",null,"Loading summary...",-1)])])):s.summaryError?(e(),o("div",ds,[r[2]||(r[2]=t("span",{class:"error-icon"},"!",-1)),r[3]||(r[3]=t("span",null,"Summary unavailable",-1)),t("button",{class:"retry-btn",onClick:r[0]||(r[0]=k(l=>f.$emit("retrySummary"),["prevent"]))}," Retry ")])):c("",!0)}},ms=j(cs,[["__scopeId","data-v-a9b445b6"]]);function hs(s){return new Date(s).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}const vs={class:"session-header-actions"},ys=["title"],fs={key:0,class:"archive-actions"},ws=["title"],gs={key:0,xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},ks={key:1,xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},bs={__name:"SessionCardHeaderActions",props:{dateToShow:{type:String,default:null},isChild:{type:Boolean,default:!1},isOnBoard:{type:Boolean,default:!1},kanbanEnabled:{type:Boolean,default:!0},showArchive:{type:Boolean,default:!1},showUnarchive:{type:Boolean,default:!1},sessionStatus:{type:String,default:""},starred:{type:Boolean,default:!1}},emits:["archive","unarchive","star","addToBoard"],setup(s,{emit:g}){const m=s,f=g,r=y(()=>m.sessionStatus!=="running"&&m.sessionStatus!=="starting"),l=()=>{f("archive")},u=()=>{confirm("Restore this session to active?")&&f("unarchive")};return(S,i)=>(e(),o("div",vs,[t("div",{class:"session-date",title:s.dateToShow?"Last activity":"No activity yet"},b(s.dateToShow?q(hs)(s.dateToShow):"—"),9,ys),s.isChild?c("",!0):(e(),o("div",fs,[s.kanbanEnabled&&!s.isOnBoard?(e(),o("button",{key:0,class:"add-to-board-btn",title:"Add to kanban board",onClick:i[0]||(i[0]=k(B=>S.$emit("addToBoard"),["stop","prevent"]))},[...i[2]||(i[2]=[t("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[t("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2",ry:"2"}),t("line",{x1:"9",y1:"3",x2:"9",y2:"21"}),t("line",{x1:"15",y1:"3",x2:"15",y2:"21"})],-1)])])):c("",!0),s.showArchive&&r.value?(e(),o("button",{key:1,class:"archive-btn",title:"Archive session",onClick:k(l,["stop","prevent"])},[...i[3]||(i[3]=[t("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[t("rect",{x:"2",y:"4",width:"20",height:"5",rx:"1",ry:"1"}),t("path",{d:"M4 9v9a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9"}),t("path",{d:"M10 13h4"})],-1)])])):c("",!0),s.showUnarchive?(e(),o("button",{key:2,class:"archive-btn",title:"Unarchive session",onClick:k(u,["stop","prevent"])},[...i[4]||(i[4]=[W('<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-v-07b0375c><rect x="2" y="4" width="20" height="5" rx="1" ry="1" data-v-07b0375c></rect><path d="M4 9v9a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9" data-v-07b0375c></path><path d="M12 11v6" data-v-07b0375c></path><path d="M9 14l3-3 3 3" data-v-07b0375c></path></svg>',1)])])):c("",!0),t("button",{class:"star-btn star-btn-mobile",title:s.starred?"Unstar session":"Star session",onClick:i[1]||(i[1]=k(B=>S.$emit("star"),["stop","prevent"]))},[s.starred?(e(),o("svg",gs,[...i[5]||(i[5]=[t("polygon",{points:"12 2 15.09 10.26 24 10.5 17.18 16.34 19.34 24.5 12 18.92 4.66 24.5 6.82 16.34 0 10.5 8.91 10.26 12 2"},null,-1)])])):(e(),o("svg",ks,[...i[6]||(i[6]=[t("polygon",{points:"12 2 15.09 10.26 24 10.5 17.18 16.34 19.34 24.5 12 18.92 4.66 24.5 6.82 16.34 0 10.5 8.91 10.26 12 2"},null,-1)])]))],8,ws)]))]))}},Ss=j(bs,[["__scopeId","data-v-07b0375c"]]),ps={class:"workflow-card-wrapper"},Cs={class:"session-header-row"},Bs=["title"],xs={key:0,xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},$s={key:1,xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},js={class:"session-info"},As={class:"session-name"},Is={class:"session-meta"},Ts={key:0,class:"status-badge status-running"},Ms={key:1,class:"status-badge status-scheduled"},Ls=["title"],Us=["title","aria-label","onClick","innerHTML"],Ds={key:0,class:"session-project"},Es={class:"project-name"},Rs={__name:"SessionCard",props:{session:{type:Object,required:!0},showSummary:{type:Boolean,default:!1},showProject:{type:Boolean,default:!1},summary:{type:Object,default:null},summaryLoading:{type:Boolean,default:!1},summaryError:{type:Boolean,default:!1},isChild:{type:Boolean,default:!1},showArchive:{type:Boolean,default:!1},showUnarchive:{type:Boolean,default:!1},prUrl:{type:String,default:null},prSummary:{type:Object,default:null},kanbanEnabled:{type:Boolean,default:!0}},emits:["retrySummary","archive","unarchive","addToBoard"],setup(s,{emit:g}){const m=Q(),f=X(),r=Y(),l=R(null),u=s,S=g,i=y(()=>r.isSessionOnBoard(u.session.id)),B=()=>{S("addToBoard",u.session)},O=y(()=>u.session.lastActivityAt??null);function x(){return m.getWorkflowSessions(u.session.id)}const A=y(()=>{const d=x(),n=["running","starting"];let h=0,a=0;for(const w of d)n.includes(w.status)&&h++,w.status==="scheduled"&&a++;return{runningCount:h,scheduledCount:a,totalCount:d.length,effectiveStatus:u.session.status}}),I=y(()=>{const d=["running","starting"];return x().filter(n=>d.includes(n.status)).map(n=>n.id)}),N=y(()=>I.value.length>0),p=y(()=>{const d=Date.now();if(u.session.status==="scheduled"&&u.session.scheduledAt)return u.session.scheduledAt;const n=x();let h=null;for(const a of n)if(a.id!==u.session.id&&a.status==="scheduled"&&a.scheduledAt){const w=new Date(a.scheduledAt).getTime();w>=d&&(h===null||w<h)&&(h=w)}return h}),T=y(()=>p.value?es(new Date(p.value),{addSuffix:!0}):null),V=y(()=>p.value?ns(new Date(p.value),"MMM d, h:mm a"):null),F=y(()=>{const d=u.session.projectId;if(!d)return[];m.commandRunVersion;const n=f.getButtonsByProjectId(d),h=Object.fromEntries(n.map(v=>[v.id,v])),a=u.session.id,$=m.sessions.find(v=>v.id===a);return(($==null?void 0:$.latestCommandRuns)||u.session.latestCommandRuns||[]).filter(v=>{var L;return(L=h[v.buttonId])==null?void 0:L.showOnList}).map(v=>({buttonId:v.buttonId,label:h[v.buttonId].label,command:h[v.buttonId].command,status:v.status,latestRun:v}))}),P=d=>ts(d),M=()=>{m.toggleSessionStar(u.session.id)};return(d,n)=>{const h=z("router-link");return e(),o(D,null,[t("div",ps,[U(h,{to:`/sessions/${s.session.id}`,class:E(["session-card card",{"is-child":s.isChild}])},{default:G(()=>[t("div",Cs,[s.isChild?c("",!0):(e(),o("button",{key:0,class:"star-btn",title:s.session.starred?"Unstar session":"Star session",onClick:k(M,["stop","prevent"])},[s.session.starred?(e(),o("svg",xs,[...n[4]||(n[4]=[t("polygon",{points:"12 2 15.09 10.26 24 10.5 17.18 16.34 19.34 24.5 12 18.92 4.66 24.5 6.82 16.34 0 10.5 8.91 10.26 12 2"},null,-1)])])):(e(),o("svg",$s,[...n[5]||(n[5]=[t("polygon",{points:"12 2 15.09 10.26 24 10.5 17.18 16.34 19.34 24.5 12 18.92 4.66 24.5 6.82 16.34 0 10.5 8.91 10.26 12 2"},null,-1)])]))],8,Bs)),t("div",js,[t("h3",As,b(s.session.name),1),t("p",Is,[A.value.runningCount>0?(e(),o("span",Ts," ● running ")):c("",!0),A.value.scheduledCount>0?(e(),o("span",Ms,[...n[6]||(n[6]=[t("svg",{class:"schedule-icon-inline",xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[t("circle",{cx:"12",cy:"12",r:"10"}),t("polyline",{points:"12 6 12 12 16 14"})],-1),K(" scheduled ",-1)])])):c("",!0),T.value?(e(),o("span",{key:2,class:"scheduled-time",title:V.value},b(T.value),9,Ls)):c("",!0),s.prUrl&&!s.isChild?(e(),C(Z,{key:3,"pr-url":s.prUrl,summary:s.prSummary,"data-testid":"session-card-pr-indicators"},null,8,["pr-url","summary"])):c("",!0),(e(!0),o(D,null,J(F.value,a=>(e(),o("span",{key:a.buttonId,class:E(["button-status-indicator",`button-status-${a.status}`]),title:a.label,"aria-label":a.status,onClick:k(w=>l.value=a,["stop","prevent"]),innerHTML:P(a.status)},null,10,Us))),128))]),s.showProject&&s.session.projectName?(e(),o("p",Ds,[t("span",Es,b(s.session.projectName),1)])):c("",!0)]),U(Ss,{"date-to-show":O.value,"is-child":s.isChild,"is-on-board":i.value,"kanban-enabled":s.kanbanEnabled,"show-archive":s.showArchive,"show-unarchive":s.showUnarchive,"session-status":s.session.status,starred:!!s.session.starred,onArchive:n[0]||(n[0]=a=>d.$emit("archive",s.session.id)),onUnarchive:n[1]||(n[1]=a=>d.$emit("unarchive",s.session.id)),onStar:M,onAddToBoard:B},null,8,["date-to-show","is-child","is-on-board","kanban-enabled","show-archive","show-unarchive","session-status","starred"])]),s.showSummary?(e(),C(ms,{key:0,"session-id":s.session.id,summary:s.summary,"summary-loading":s.summaryLoading,"summary-error":s.summaryError,onRetrySummary:n[2]||(n[2]=a=>d.$emit("retrySummary",s.session.id))},null,8,["session-id","summary","summary-loading","summary-error"])):c("",!0),N.value?(e(),C(_,{key:1,"session-ids":I.value,"data-testid":"session-log-stream"},null,8,["session-ids"])):c("",!0)]),_:1},8,["to","class"])]),l.value?(e(),C(ss,{key:0,button:{id:l.value.buttonId,label:l.value.label,command:l.value.command},"latest-run":l.value.latestRun,"is-open":!!l.value,"session-id":s.session.id,onClose:n[3]||(n[3]=a=>l.value=null)},null,8,["button","latest-run","is-open","session-id"])):c("",!0)],64)}}},qs=j(Rs,[["__scopeId","data-v-eef8bbf3"]]);export{qs as S};