specrails-desktop 2.16.0 → 2.17.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 (354) hide show
  1. package/client/dist/assets/{ActivityFeedPage-C_clKk8d.js → ActivityFeedPage-BLDMBgwL.js} +1 -1
  2. package/client/dist/assets/AgentsPage-CFaIiyAA.js +86 -0
  3. package/client/dist/assets/{AnalyticsPage-DZkVU3yd.js → AnalyticsPage-DY8ECq2R.js} +1 -1
  4. package/client/dist/assets/{BarChart-Dq1h8eYR.js → BarChart-ouivqe5L.js} +2 -2
  5. package/client/dist/assets/CodePage-DAFtRafz.js +2 -0
  6. package/client/dist/assets/{DesktopAnalyticsPage-CYhXhJoQ.js → DesktopAnalyticsPage-DIMhuuv0.js} +1 -1
  7. package/client/dist/assets/{DocsDialog-CS3Syf61.js → DocsDialog-DBYhv3SM.js} +2 -2
  8. package/client/dist/assets/{DocsPage-l3ZcTO2E.js → DocsPage-DeLRn8W_.js} +2 -2
  9. package/client/dist/assets/{ExportDropdown-DdB2ncYh.js → ExportDropdown-2XwQ08sz.js} +1 -1
  10. package/client/dist/assets/{IntegrationsPage-CJ_Om1zu.js → IntegrationsPage-DB-a4FDV.js} +3 -3
  11. package/client/dist/assets/JobDetailPage-C3lljMiV.js +16 -0
  12. package/client/dist/assets/JobsPage-CzquwJ6G.js +1 -0
  13. package/client/dist/assets/LoopBuilderPage-TkoalfW5.js +7 -0
  14. package/client/dist/assets/LoopsPage-ypooVAQ5.js +1 -0
  15. package/client/dist/assets/{agents-CQlu1nOm.js → agents-4fnKlwcG.js} +1 -1
  16. package/client/dist/assets/{agents-DcoUUFZl.js → agents-B-rVIhuw.js} +1 -1
  17. package/client/dist/assets/{agents-DVYpVGur.js → agents-BRUz6RJs.js} +1 -1
  18. package/client/dist/assets/{agents-DCX9D3-Q.js → agents-CZQvKDIb.js} +1 -1
  19. package/client/dist/assets/{agents-BYjUOrLD.js → agents-CuRY-Zg_.js} +1 -1
  20. package/client/dist/assets/{agents-Jc-CjBDB.js → agents-D7nWnLg6.js} +1 -1
  21. package/client/dist/assets/{agents-CIhRSOna.js → agents-DzhSlNZd.js} +1 -1
  22. package/client/dist/assets/{agents-1lhqEcXH.js → agents-E-42N3b1.js} +1 -1
  23. package/client/dist/assets/{cssMode-DSHXamUH.js → cssMode-BijCvCxs.js} +1 -1
  24. package/client/dist/assets/{dist-js-Ele_sHO7.js → dist-js-D7m9--SN.js} +1 -1
  25. package/client/dist/assets/{dist-js-D27I-bfi.js → dist-js-nZhsq1qo.js} +1 -1
  26. package/client/dist/assets/{editor.main-Cd8qBRAT.js → editor.main-DMIcqwXb.js} +2 -2
  27. package/client/dist/assets/{freemarker2-CkEKTBm2.js → freemarker2-CP2AizpZ.js} +1 -1
  28. package/client/dist/assets/{handlebars-BRGx0JpL.js → handlebars-8ElanPOm.js} +1 -1
  29. package/client/dist/assets/{html-BfRIaGgN.js → html-Mu3b73tG.js} +1 -1
  30. package/client/dist/assets/{htmlMode-BTpSnsDE.js → htmlMode-tHprGCEv.js} +1 -1
  31. package/client/dist/assets/index-CDEQ4aU_.js +144 -0
  32. package/client/dist/assets/{javascript-DMmE2kKN.js → javascript-DlG0apUe.js} +1 -1
  33. package/client/dist/assets/{jsonMode-hYuaUleY.js → jsonMode-Cr0T4SXO.js} +1 -1
  34. package/client/dist/assets/{lib-qdRfWwE1.js → lib-Bu76JzdB.js} +2 -2
  35. package/client/dist/assets/{liquid-C-VbuTr7.js → liquid-QgTgbClC.js} +1 -1
  36. package/client/dist/assets/{lspLanguageFeatures-BALx-vjn.js → lspLanguageFeatures-D-BxkRza.js} +1 -1
  37. package/client/dist/assets/mcp-BSCAtU6Y.js +1 -0
  38. package/client/dist/assets/mcp-Cb6fUaFJ.js +1 -0
  39. package/client/dist/assets/mcp-CyP0quZ7.js +1 -0
  40. package/client/dist/assets/mcp-D-zQCO5E.js +1 -0
  41. package/client/dist/assets/mcp-DCTNWpfB.js +1 -0
  42. package/client/dist/assets/mcp-DEFGJ1OJ.js +1 -0
  43. package/client/dist/assets/mcp-DFG9OEXM.js +1 -0
  44. package/client/dist/assets/mcp-DyERgHA2.js +1 -0
  45. package/client/dist/assets/{mdx-Cs8MNCzn.js → mdx-B2QTaeRe.js} +1 -1
  46. package/client/dist/assets/{monaco.contribution-CIvCAJs4.js → monaco.contribution-CkdGfXCC.js} +2 -2
  47. package/client/dist/assets/{python-CGShLxuI.js → python-BlF0qnMQ.js} +1 -1
  48. package/client/dist/assets/{razor-CvOBQGd5.js → razor--3PSy3lb.js} +1 -1
  49. package/client/dist/assets/setup-BiQ7ut8d.js +1 -0
  50. package/client/dist/assets/setup-BxvjG5Xp.js +1 -0
  51. package/client/dist/assets/setup-CQ-F6Ciq.js +1 -0
  52. package/client/dist/assets/setup-D2JlpJEz.js +1 -0
  53. package/client/dist/assets/setup-DG1R6J6o.js +1 -0
  54. package/client/dist/assets/setup-DuFJZJsm.js +1 -0
  55. package/client/dist/assets/setup-DyJszDqm.js +1 -0
  56. package/client/dist/assets/setup-Ynw19V8w.js +1 -0
  57. package/client/dist/assets/{tsMode-04uOpiiP.js → tsMode-CHfsvcOI.js} +1 -1
  58. package/client/dist/assets/{typescript-CX0CwyIZ.js → typescript-Bjxf6BOp.js} +1 -1
  59. package/client/dist/assets/{upload-DPG87J4t.js → upload-x42OZJr2.js} +1 -1
  60. package/client/dist/assets/{value-BRVOAvhY.js → value-fEDhg5Bd.js} +1 -1
  61. package/client/dist/assets/{workers-yr2u4c3C.js → workers-CAAvSda9.js} +1 -1
  62. package/client/dist/assets/{xml-C0OFlt5X.js → xml-iYCSJ4oL.js} +1 -1
  63. package/client/dist/assets/{yaml-DgabaPs5.js → yaml-DtO-_yDY.js} +1 -1
  64. package/client/dist/index.html +10 -9
  65. package/docs/README.md +2 -0
  66. package/docs/guide/de/integrations/5-mcp-server.md +74 -0
  67. package/docs/guide/en/integrations/5-mcp-server.md +74 -0
  68. package/docs/guide/es/integrations/5-mcp-server.md +74 -0
  69. package/docs/guide/fr/integrations/5-mcp-server.md +74 -0
  70. package/docs/guide/it/integrations/5-mcp-server.md +74 -0
  71. package/docs/guide/ja/integrations/5-mcp-server.md +74 -0
  72. package/docs/guide/pt/integrations/5-mcp-server.md +74 -0
  73. package/docs/guide/zh/integrations/5-mcp-server.md +74 -0
  74. package/docs/mcp.md +249 -0
  75. package/package.json +8 -5
  76. package/server/dist/index.js +30 -0
  77. package/server/dist/mcp/guide.js +82 -0
  78. package/server/dist/mcp/index.js +21 -0
  79. package/server/dist/mcp/mcp-admin-router.js +71 -0
  80. package/server/dist/mcp/mcp-server.js +143 -0
  81. package/server/dist/mcp/mcp-tiers.js +48 -0
  82. package/server/dist/mcp/mcp-token.js +119 -0
  83. package/server/dist/mcp/resources.js +24 -0
  84. package/server/dist/mcp/tools/agents.js +319 -0
  85. package/server/dist/mcp/tools/analytics.js +168 -0
  86. package/server/dist/mcp/tools/app-settings.js +81 -0
  87. package/server/dist/mcp/tools/catalog.js +45 -0
  88. package/server/dist/mcp/tools/chat.js +147 -0
  89. package/server/dist/mcp/tools/code.js +145 -0
  90. package/server/dist/mcp/tools/jira.js +222 -0
  91. package/server/dist/mcp/tools/jobs.js +258 -0
  92. package/server/dist/mcp/tools/loops.js +229 -0
  93. package/server/dist/mcp/tools/meta.js +96 -0
  94. package/server/dist/mcp/tools/plugins.js +83 -0
  95. package/server/dist/mcp/tools/projects.js +62 -0
  96. package/server/dist/mcp/tools/rails.js +181 -0
  97. package/server/dist/mcp/tools/setup.js +187 -0
  98. package/server/dist/mcp/tools/specs.js +327 -0
  99. package/server/dist/mcp/tools/types.js +137 -0
  100. package/server/dist/mcp/tools/watch.js +93 -0
  101. package/server/dist/mobile/mobile-event-bus.js +2 -0
  102. package/server/dist/project-router-tickets.js +2 -2
  103. package/server/dist/rails-router.js +5 -0
  104. package/client/dist/assets/AgentsPage-jcPUtPhP.js +0 -86
  105. package/client/dist/assets/CodePage-BcbZT88K.js +0 -2
  106. package/client/dist/assets/JobDetailPage-D5Cxw0md.js +0 -16
  107. package/client/dist/assets/JobsPage-3v_iX83r.js +0 -1
  108. package/client/dist/assets/LoopBuilderPage-4s_adZy5.js +0 -7
  109. package/client/dist/assets/LoopsPage-DA94-o0j.js +0 -1
  110. package/client/dist/assets/index-meTWPBzY.js +0 -144
  111. package/client/dist/assets/setup-BOmQ4vh2.js +0 -1
  112. package/client/dist/assets/setup-BwO2-kuK.js +0 -1
  113. package/client/dist/assets/setup-CUTNWz-0.js +0 -1
  114. package/client/dist/assets/setup-Cf3hjChU.js +0 -1
  115. package/client/dist/assets/setup-CsuXrbJ2.js +0 -1
  116. package/client/dist/assets/setup-Df4cJOqu.js +0 -1
  117. package/client/dist/assets/setup-Do0fWx6W.js +0 -1
  118. package/client/dist/assets/setup-GlkDhBlJ.js +0 -1
  119. /package/client/dist/assets/{abap-CK68cr9-.js → abap-BFJA_Joo.js} +0 -0
  120. /package/client/dist/assets/{activity-D4dhNEwO.js → activity-BXBMi28x.js} +0 -0
  121. /package/client/dist/assets/{activity-usnNa7FX.js → activity-By6I70Ws.js} +0 -0
  122. /package/client/dist/assets/{activity-BbNkUmW4.js → activity-CfedQaof.js} +0 -0
  123. /package/client/dist/assets/{activity-B2MvEH54.js → activity-D62CDlQz.js} +0 -0
  124. /package/client/dist/assets/{activity-DHjfmAyT.js → activity-DAFuSwnt.js} +0 -0
  125. /package/client/dist/assets/{activity-C7VdmeGb.js → activity-Did0FnrH.js} +0 -0
  126. /package/client/dist/assets/{activity-Di2f50_Z.js → activity-oLgwaVyt.js} +0 -0
  127. /package/client/dist/assets/{addon-image-biWX2UUm.js → addon-image-bPlduuUZ.js} +0 -0
  128. /package/client/dist/assets/{addon-ligatures-D4EiDb5r.js → addon-ligatures-BexpF7xb.js} +0 -0
  129. /package/client/dist/assets/{addon-webgl-CDCIZQ03.js → addon-webgl-Zy4IOieH.js} +0 -0
  130. /package/client/dist/assets/{addspec-BxMn39wn.js → addspec-B2fTENuq.js} +0 -0
  131. /package/client/dist/assets/{addspec-DAveBiCE.js → addspec-BmggyuCD.js} +0 -0
  132. /package/client/dist/assets/{addspec-1HEtmLv1.js → addspec-CFsLeQKV.js} +0 -0
  133. /package/client/dist/assets/{addspec-DfuR6EAl.js → addspec-CkHI5c5H.js} +0 -0
  134. /package/client/dist/assets/{addspec-CO1xv6BL.js → addspec-Cvm06hGe.js} +0 -0
  135. /package/client/dist/assets/{addspec-IozoiiGs.js → addspec-DwoLTocx.js} +0 -0
  136. /package/client/dist/assets/{addspec-CNyAUGz_.js → addspec-gthH-H1g.js} +0 -0
  137. /package/client/dist/assets/{agentstudio-Q0Sq_jTg.js → agentstudio-BtASTJl7.js} +0 -0
  138. /package/client/dist/assets/{agentstudio-9NbsoGXk.js → agentstudio-CIe9C892.js} +0 -0
  139. /package/client/dist/assets/{agentstudio-B-jQgYV-.js → agentstudio-CYGk-jjo.js} +0 -0
  140. /package/client/dist/assets/{agentstudio-Bwa72b1S.js → agentstudio-CwiS3BTp.js} +0 -0
  141. /package/client/dist/assets/{agentstudio-B1y0JWY-.js → agentstudio-D0bQBWpI.js} +0 -0
  142. /package/client/dist/assets/{agentstudio-DCyDW8sy.js → agentstudio-Dq-bZrI3.js} +0 -0
  143. /package/client/dist/assets/{agentstudio-1E-bag77.js → agentstudio-n0pmwz2I.js} +0 -0
  144. /package/client/dist/assets/{aiedit-qTGI_PGs.js → aiedit-1Z-UYKFb.js} +0 -0
  145. /package/client/dist/assets/{aiedit-CGxeml8D.js → aiedit-BAJM9Cch.js} +0 -0
  146. /package/client/dist/assets/{aiedit-CfBNanHE.js → aiedit-CYnsp1Iv.js} +0 -0
  147. /package/client/dist/assets/{aiedit-CvSspQmE.js → aiedit-CZBZAyeK.js} +0 -0
  148. /package/client/dist/assets/{aiedit-kAU7KADg.js → aiedit-CunYxmW0.js} +0 -0
  149. /package/client/dist/assets/{aiedit-DUpe7NxI.js → aiedit-s1T1EMK8.js} +0 -0
  150. /package/client/dist/assets/{aiedit-DSLtsYIu.js → aiedit-uIDh2tlc.js} +0 -0
  151. /package/client/dist/assets/{analytics-DBGO8B6-.js → analytics-B95FiMuD.js} +0 -0
  152. /package/client/dist/assets/{analytics-CgEkAUiP.js → analytics-DPIkvuTS.js} +0 -0
  153. /package/client/dist/assets/{analytics-DDqve9Ma.js → analytics-DPmCEzvJ.js} +0 -0
  154. /package/client/dist/assets/{analytics-D1ElChhs.js → analytics-DRexho82.js} +0 -0
  155. /package/client/dist/assets/{analytics-DEsEAJZL.js → analytics-DVFNjjAv.js} +0 -0
  156. /package/client/dist/assets/{analytics-BDlELxc7.js → analytics-DZKGAUdm.js} +0 -0
  157. /package/client/dist/assets/{analytics-CQqu1yE5.js → analytics-g9ASAR_r.js} +0 -0
  158. /package/client/dist/assets/{apex-BHHyAVNb.js → apex-C1f-z6NO.js} +0 -0
  159. /package/client/dist/assets/{atom-one-dark-DrWoEEbZ.js → atom-one-dark-CT4DolNR.js} +0 -0
  160. /package/client/dist/assets/{attachments-3CuBBRFu.js → attachments--jr2QLGv.js} +0 -0
  161. /package/client/dist/assets/{attachments-pW3zm9nu.js → attachments-BgqfeoOx.js} +0 -0
  162. /package/client/dist/assets/{attachments-BNgH6Tcu.js → attachments-Bj3HHTXV.js} +0 -0
  163. /package/client/dist/assets/{attachments-D5fVsMgb.js → attachments-C3skjFyH.js} +0 -0
  164. /package/client/dist/assets/{attachments-UJtEq892.js → attachments-CnPS8YWu.js} +0 -0
  165. /package/client/dist/assets/{attachments-CppM7de8.js → attachments-DejzxE0C.js} +0 -0
  166. /package/client/dist/assets/{attachments-BLqqPGyy.js → attachments-FFb2xHc_.js} +0 -0
  167. /package/client/dist/assets/{azcli-C56lfIEP.js → azcli-Dr0WBJTP.js} +0 -0
  168. /package/client/dist/assets/{bat-BLamSaf-.js → bat-BKG3k49W.js} +0 -0
  169. /package/client/dist/assets/{bicep-lrOcEItS.js → bicep-DXs2wTcS.js} +0 -0
  170. /package/client/dist/assets/{browser-C91MQBxx.js → browser-BS9t1qMc.js} +0 -0
  171. /package/client/dist/assets/{browser-B7i7Ysc8.js → browser-BpMo-amf.js} +0 -0
  172. /package/client/dist/assets/{browser-DwE289IS.js → browser-CsC3NOZ-.js} +0 -0
  173. /package/client/dist/assets/{browser-C__Vz7KR.js → browser-DS6xnywt.js} +0 -0
  174. /package/client/dist/assets/{browser-DhwTc0ry.js → browser-Dm6F9bqQ.js} +0 -0
  175. /package/client/dist/assets/{browser-EFmPpkvO.js → browser-Dm_Of27q.js} +0 -0
  176. /package/client/dist/assets/{browser-BVQgd1_1.js → browser-U3iouSXn.js} +0 -0
  177. /package/client/dist/assets/{cameligo-BK_p0bgU.js → cameligo-Detknuxp.js} +0 -0
  178. /package/client/dist/assets/{chat-PVakYp92.js → chat-B2tWTbZL.js} +0 -0
  179. /package/client/dist/assets/{chat-BnJPyeUK.js → chat-CXOJHDUZ.js} +0 -0
  180. /package/client/dist/assets/{chat-CE8bx6Rz.js → chat-Cy78lw1n.js} +0 -0
  181. /package/client/dist/assets/{chat-UMl6H55K.js → chat-D78VMi-v.js} +0 -0
  182. /package/client/dist/assets/{chat-BXVx6rb5.js → chat-De1RgOXU.js} +0 -0
  183. /package/client/dist/assets/{chat-C5nJF6L0.js → chat-DyTbH-0F.js} +0 -0
  184. /package/client/dist/assets/{chat-9RcD5Lcn.js → chat-sqZyn0C4.js} +0 -0
  185. /package/client/dist/assets/{clojure-BQ7JOykv.js → clojure-CCu4UNKg.js} +0 -0
  186. /package/client/dist/assets/{clsx-CjLeUJfG.js → clsx-pVRQNNR0.js} +0 -0
  187. /package/client/dist/assets/{code-u9Sg9ohM.js → code-6LokPmIE.js} +0 -0
  188. /package/client/dist/assets/{code-OoLqhjoI.js → code-CLTuhuvM.js} +0 -0
  189. /package/client/dist/assets/{code-Lg4awa35.js → code-CwGlPuwb.js} +0 -0
  190. /package/client/dist/assets/{code-BPMR8_Vp.js → code-DFCDV5e1.js} +0 -0
  191. /package/client/dist/assets/{code-eh4vO2-_.js → code-Djq48g0s.js} +0 -0
  192. /package/client/dist/assets/{code-aCUqkVN_.js → code-Do27r8WG.js} +0 -0
  193. /package/client/dist/assets/{code-BsOBm1Fb.js → code-Drc7f197.js} +0 -0
  194. /package/client/dist/assets/{coffee-BD3DiL5s.js → coffee-Bam7Y9IR.js} +0 -0
  195. /package/client/dist/assets/{commands-B9XEyMj-.js → commands-CxReviyc.js} +0 -0
  196. /package/client/dist/assets/{commands-Ic1DJDxm.js → commands-CzP1qQyD.js} +0 -0
  197. /package/client/dist/assets/{commands-BdI0CtOL.js → commands-DGP46UxM.js} +0 -0
  198. /package/client/dist/assets/{commands-DSX3yJyr.js → commands-DQvoMqa7.js} +0 -0
  199. /package/client/dist/assets/{commands-yNn4IA4C.js → commands-DeKaz04Q.js} +0 -0
  200. /package/client/dist/assets/{commands-BI1Ta-E7.js → commands-DwYhwQsF.js} +0 -0
  201. /package/client/dist/assets/{commands-C2ewlyXo.js → commands-lm6Vlght.js} +0 -0
  202. /package/client/dist/assets/{common-CzCQ0rpW.js → common-B0crwfK0.js} +0 -0
  203. /package/client/dist/assets/{common-CNoRVpnA.js → common-BlqmiTj4.js} +0 -0
  204. /package/client/dist/assets/{common-CcHFVATT.js → common-CIUPtPdu.js} +0 -0
  205. /package/client/dist/assets/{common-LDwESeCX.js → common-C_-0fZsp.js} +0 -0
  206. /package/client/dist/assets/{common-C9VyfY7g.js → common-DH9A-wTo.js} +0 -0
  207. /package/client/dist/assets/{common-Dmpyh323.js → common-DJM41wFl.js} +0 -0
  208. /package/client/dist/assets/{common-ULlk84G4.js → common-SyTaRc_K.js} +0 -0
  209. /package/client/dist/assets/{cpp-splnCwCh.js → cpp-BhOkAe-9.js} +0 -0
  210. /package/client/dist/assets/{csharp-BCpsl-o3.js → csharp-BgHArJNx.js} +0 -0
  211. /package/client/dist/assets/{csp-tkCWrZmb.js → csp-Xzh56_3-.js} +0 -0
  212. /package/client/dist/assets/{css-B_xdnReq.js → css-CD7-RYRS.js} +0 -0
  213. /package/client/dist/assets/{cypher-OL1zq-y3.js → cypher-l2xAdF3X.js} +0 -0
  214. /package/client/dist/assets/{dart-CtTlOkrm.js → dart-CDOWeyzt.js} +0 -0
  215. /package/client/dist/assets/{dashboard-C-dXxut-.js → dashboard-B1rs1wki.js} +0 -0
  216. /package/client/dist/assets/{dashboard-CUjyhohl.js → dashboard-D9QPCmv3.js} +0 -0
  217. /package/client/dist/assets/{dashboard-C52PElPV.js → dashboard-Dxgb47lO.js} +0 -0
  218. /package/client/dist/assets/{dashboard-03EpOoMM.js → dashboard-TuElRCZX.js} +0 -0
  219. /package/client/dist/assets/{dashboard-Ch6H-457.js → dashboard-UWXs9_wy.js} +0 -0
  220. /package/client/dist/assets/{dashboard-zH9quXks.js → dashboard-ajT8usAi.js} +0 -0
  221. /package/client/dist/assets/{dashboard-C2owt3eN.js → dashboard-zwN2xswo.js} +0 -0
  222. /package/client/dist/assets/{dockerfile-DcQ5CNiW.js → dockerfile-Dv8atx7v.js} +0 -0
  223. /package/client/dist/assets/{ecl-DZpiDRt6.js → ecl-DIYTlbD_.js} +0 -0
  224. /package/client/dist/assets/{editor.api2-Cwla1nvV.js → editor.api2-CrNrMVfe.js} +0 -0
  225. /package/client/dist/assets/{elixir-Dzj2lqtK.js → elixir-CR7PLJja.js} +0 -0
  226. /package/client/dist/assets/{explore-4SD1DxR0.js → explore-BYFCCka4.js} +0 -0
  227. /package/client/dist/assets/{explore-xQoaak6e.js → explore-CE0wSNV1.js} +0 -0
  228. /package/client/dist/assets/{explore-CZt4Ncpa.js → explore-CSDcRUNj.js} +0 -0
  229. /package/client/dist/assets/{explore-DQ0XEjed.js → explore-CvM08PpD.js} +0 -0
  230. /package/client/dist/assets/{explore-CCcPXrHg.js → explore-Jkw93usp.js} +0 -0
  231. /package/client/dist/assets/{explore-BxR9q8Hq.js → explore-kK239uoZ.js} +0 -0
  232. /package/client/dist/assets/{explore-B2n8r9Ye.js → explore-mLI5eXks.js} +0 -0
  233. /package/client/dist/assets/{flow9-CFENCHIZ.js → flow9-DCK5-6NG.js} +0 -0
  234. /package/client/dist/assets/{format-command-CMsBTOPN.js → format-command-rVyGPxWE.js} +0 -0
  235. /package/client/dist/assets/{fsharp-D-4bv7FB.js → fsharp-DJ1xiUVU.js} +0 -0
  236. /package/client/dist/assets/{go-djxbTJq7.js → go-BEvbHcbb.js} +0 -0
  237. /package/client/dist/assets/{graphql-DHIFrkZ6.js → graphql-DN1ktXnz.js} +0 -0
  238. /package/client/dist/assets/{hcl-CXVoowNb.js → hcl-DJaIjIEr.js} +0 -0
  239. /package/client/dist/assets/{ini-Crzc5kly.js → ini-PlKfLEnb.js} +0 -0
  240. /package/client/dist/assets/{integrations-A9f08E0o.js → integrations-B8hT0Qf_.js} +0 -0
  241. /package/client/dist/assets/{integrations-DwSVdCpf.js → integrations-Bdk5dMyv.js} +0 -0
  242. /package/client/dist/assets/{integrations-B46ac3sf.js → integrations-CYqz7YFS.js} +0 -0
  243. /package/client/dist/assets/{integrations-9qxUNhPD.js → integrations-Cj_BsXxJ.js} +0 -0
  244. /package/client/dist/assets/{integrations-B17KyA-i.js → integrations-D8M8eJH2.js} +0 -0
  245. /package/client/dist/assets/{integrations-DkBi-Gsh.js → integrations-TJuDBl-9.js} +0 -0
  246. /package/client/dist/assets/{integrations-C7u7SInG.js → integrations-TwQV3sLw.js} +0 -0
  247. /package/client/dist/assets/{java-CYLaJrdE.js → java-3PUwMlx-.js} +0 -0
  248. /package/client/dist/assets/{jira-01H1RfQj.js → jira--rI5PfuE.js} +0 -0
  249. /package/client/dist/assets/{jira-CBU0200d.js → jira-BoRyckbb.js} +0 -0
  250. /package/client/dist/assets/{jira-BpnpUFlb.js → jira-C95FN3yk.js} +0 -0
  251. /package/client/dist/assets/{jira-DzIVvNmy.js → jira-CNUUgTs4.js} +0 -0
  252. /package/client/dist/assets/{jira-Dht8qNck.js → jira-DHFnvEm8.js} +0 -0
  253. /package/client/dist/assets/{jira-4Fin3fu7.js → jira-NhkbrDXe.js} +0 -0
  254. /package/client/dist/assets/{jira-0ldfMByG.js → jira-wiIvGma5.js} +0 -0
  255. /package/client/dist/assets/{jobs-Oz3UtLQn.js → jobs-Bjp7v9aA.js} +0 -0
  256. /package/client/dist/assets/{jobs-jEQidSIb.js → jobs-Bjt5PyVv.js} +0 -0
  257. /package/client/dist/assets/{jobs-BF9raUkL.js → jobs-BmTs4Bn3.js} +0 -0
  258. /package/client/dist/assets/{jobs-DcCONARH.js → jobs-Cchy-18B.js} +0 -0
  259. /package/client/dist/assets/{jobs-DM9owF1j.js → jobs-D2QVTPbz.js} +0 -0
  260. /package/client/dist/assets/{jobs-Bw4hqEro.js → jobs-LK1ImiDH.js} +0 -0
  261. /package/client/dist/assets/{jobs-ym72SIR9.js → jobs-yPz4Dvi-.js} +0 -0
  262. /package/client/dist/assets/{julia-BJ7tUU-T.js → julia-DC6LnY15.js} +0 -0
  263. /package/client/dist/assets/{kotlin-CeWcU3lC.js → kotlin-CoGntbZF.js} +0 -0
  264. /package/client/dist/assets/{less-CviwWNG4.js → less-DCFflTXL.js} +0 -0
  265. /package/client/dist/assets/{lexon-Dt28jqDS.js → lexon-BTOivnjP.js} +0 -0
  266. /package/client/dist/assets/{loops-Fv4Bs-9A.js → loops-BFIcYvpy.js} +0 -0
  267. /package/client/dist/assets/{loops-D_ZxkD4l.js → loops-BU314kSd.js} +0 -0
  268. /package/client/dist/assets/{loops-DE-2cmLw.js → loops-C3OaXou9.js} +0 -0
  269. /package/client/dist/assets/{loops-mcoeFMat.js → loops-Cv6Aeszq.js} +0 -0
  270. /package/client/dist/assets/{loops-B_w7STrw.js → loops-IQe23ef6.js} +0 -0
  271. /package/client/dist/assets/{loops-BYNUJVyD.js → loops-LqZ4MC6J.js} +0 -0
  272. /package/client/dist/assets/{loops-B_gS4Pqu.js → loops-SbkOdciY.js} +0 -0
  273. /package/client/dist/assets/{lua-B6AOaJSi.js → lua-ClKCZMmP.js} +0 -0
  274. /package/client/dist/assets/{m3-VnMkHJcy.js → m3-25hKFWMb.js} +0 -0
  275. /package/client/dist/assets/{markdown-8vKNdvIM.js → markdown-BGAj9q0K.js} +0 -0
  276. /package/client/dist/assets/{mips-DoEcuzan.js → mips-BrVgY2Pf.js} +0 -0
  277. /package/client/dist/assets/{msdax-CNzvHyEp.js → msdax-7EhcRsm8.js} +0 -0
  278. /package/client/dist/assets/{mysql-Buk3vUtL.js → mysql-B5_atCBH.js} +0 -0
  279. /package/client/dist/assets/{nav-_0vAgZ_k.js → nav-B2Cv1vjz.js} +0 -0
  280. /package/client/dist/assets/{nav-Cw3_40fA.js → nav-Br2AivTc.js} +0 -0
  281. /package/client/dist/assets/{nav-DNDJ3H-_.js → nav-CFofO7QO.js} +0 -0
  282. /package/client/dist/assets/{nav-CCz4krPP.js → nav-CyHKTZxn.js} +0 -0
  283. /package/client/dist/assets/{nav-B5W9IMnf.js → nav-DqyLGJmF.js} +0 -0
  284. /package/client/dist/assets/{nav-CrG_mYRr.js → nav-_-siCrRv.js} +0 -0
  285. /package/client/dist/assets/{nav-DbAbG5_k.js → nav-rO4Nqnh-.js} +0 -0
  286. /package/client/dist/assets/{nav-DVp1nEsi.js → nav-zyBhf29M.js} +0 -0
  287. /package/client/dist/assets/{objective-c-DfOmda-5.js → objective-c-CLUvUl9T.js} +0 -0
  288. /package/client/dist/assets/{pascal-DoAA2yjy.js → pascal-BnU1HU42.js} +0 -0
  289. /package/client/dist/assets/{pascaligo-C65Vn1fu.js → pascaligo-dsKvjFzi.js} +0 -0
  290. /package/client/dist/assets/{perl-INlfQ_ro.js → perl-CZne1GYG.js} +0 -0
  291. /package/client/dist/assets/{pgsql-DtwRzglx.js → pgsql-CMa5W_iF.js} +0 -0
  292. /package/client/dist/assets/{php-DfHqVNet.js → php-Cu4mS35J.js} +0 -0
  293. /package/client/dist/assets/{pla-D3dNVRYk.js → pla-B7COwnnm.js} +0 -0
  294. /package/client/dist/assets/{postiats-UKXD1rM4.js → postiats-GLeNtnBQ.js} +0 -0
  295. /package/client/dist/assets/{powerquery-zE3E3O7s.js → powerquery-BqPf3R1W.js} +0 -0
  296. /package/client/dist/assets/{powershell-Df9b3zQl.js → powershell-D9btb5su.js} +0 -0
  297. /package/client/dist/assets/{protobuf-BF0nUVrW.js → protobuf-6GHSuaNm.js} +0 -0
  298. /package/client/dist/assets/{pug-Bj6Yikv_.js → pug-ct6rYKQd.js} +0 -0
  299. /package/client/dist/assets/{qsharp-BI4h-raZ.js → qsharp-CIrAQNPy.js} +0 -0
  300. /package/client/dist/assets/{r-DhpnmaXx.js → r-Bk-a0sON.js} +0 -0
  301. /package/client/dist/assets/{redis-DwYYPr4d.js → redis-C9yfaWYh.js} +0 -0
  302. /package/client/dist/assets/{redshift-D2f3Bc-4.js → redshift-DaOT1jRU.js} +0 -0
  303. /package/client/dist/assets/{restructuredtext-Dkiif6fe.js → restructuredtext-C1t9LQfS.js} +0 -0
  304. /package/client/dist/assets/{ruby-C6hLmHy0.js → ruby-COiPZJjc.js} +0 -0
  305. /package/client/dist/assets/{rust-X8WAGtxB.js → rust--gZOJZzj.js} +0 -0
  306. /package/client/dist/assets/{sb-4M2la0Kr.js → sb-NHf3iazF.js} +0 -0
  307. /package/client/dist/assets/{scala-CaCXz58E.js → scala-D1nO1TBd.js} +0 -0
  308. /package/client/dist/assets/{scheme-CMdjpmP7.js → scheme-Bref42s5.js} +0 -0
  309. /package/client/dist/assets/{scss-QopmvPyp.js → scss-BS9CCLr3.js} +0 -0
  310. /package/client/dist/assets/{settings-DyBxunCh.js → settings-BN4dufu6.js} +0 -0
  311. /package/client/dist/assets/{settings-BN7OusER.js → settings-Bap_q3rt.js} +0 -0
  312. /package/client/dist/assets/{settings-Bi5FFkIw.js → settings-BlYjWMy5.js} +0 -0
  313. /package/client/dist/assets/{settings-iQe5Dim-.js → settings-C7t_uUz4.js} +0 -0
  314. /package/client/dist/assets/{settings-fk-WlnUt.js → settings-CIFrUsKt.js} +0 -0
  315. /package/client/dist/assets/{settings-BA1V6KdK.js → settings-Cbj9VWmI.js} +0 -0
  316. /package/client/dist/assets/{settings-CRJxyTNN.js → settings-D7saHMU8.js} +0 -0
  317. /package/client/dist/assets/{settings-0m2iuTzd.js → settings-DrRjM5e8.js} +0 -0
  318. /package/client/dist/assets/{shell-CDBchS00.js → shell-DT3joMBB.js} +0 -0
  319. /package/client/dist/assets/{solidity-DvBfi5mC.js → solidity-o2Fm9dvg.js} +0 -0
  320. /package/client/dist/assets/{sophia-HSnXR17u.js → sophia-Dj1N6Xqb.js} +0 -0
  321. /package/client/dist/assets/{sparql-DhG_ppup.js → sparql-D2fjpTWm.js} +0 -0
  322. /package/client/dist/assets/{specs-BvsFNKTs.js → specs-C-WXGBqy.js} +0 -0
  323. /package/client/dist/assets/{specs-D4ORogcT.js → specs-C57koADY.js} +0 -0
  324. /package/client/dist/assets/{specs-CnH7dOiF.js → specs-CCXV-eSF.js} +0 -0
  325. /package/client/dist/assets/{specs-CUE3xSFM.js → specs-CYA5Bv7Q.js} +0 -0
  326. /package/client/dist/assets/{specs-C2wW5bq8.js → specs-DFCFg51O.js} +0 -0
  327. /package/client/dist/assets/{specs-C_8j4ELZ.js → specs-Dslng_yW.js} +0 -0
  328. /package/client/dist/assets/{specs-D6Y76Bgi.js → specs-DwRPiJTc.js} +0 -0
  329. /package/client/dist/assets/{specs-Bku8SypT.js → specs-DzlROLy7.js} +0 -0
  330. /package/client/dist/assets/{sql-DHeIS-tf.js → sql-BArhsPUz.js} +0 -0
  331. /package/client/dist/assets/{st-CMWchiRU.js → st-Bd2-tALj.js} +0 -0
  332. /package/client/dist/assets/{swift-CDXvBefj.js → swift-DvEpXBKj.js} +0 -0
  333. /package/client/dist/assets/{systemverilog-0RTukYUE.js → systemverilog-mHEbsnVH.js} +0 -0
  334. /package/client/dist/assets/{tcl-CbBF_Ttl.js → tcl-DePutp1e.js} +0 -0
  335. /package/client/dist/assets/{terminal-CB33IsO1.js → terminal-2S-Wsk6L.js} +0 -0
  336. /package/client/dist/assets/{terminal-Cz_Puz0q.js → terminal-BRQMrU74.js} +0 -0
  337. /package/client/dist/assets/{terminal-DFEH9XTQ.js → terminal-BTiemy98.js} +0 -0
  338. /package/client/dist/assets/{terminal-BTanJIt_.js → terminal-CjQeWfpp.js} +0 -0
  339. /package/client/dist/assets/{terminal-CY_sPfdD.js → terminal-CmP5riTU.js} +0 -0
  340. /package/client/dist/assets/{terminal-BLh00ouM.js → terminal-CnObBCAh.js} +0 -0
  341. /package/client/dist/assets/{terminal-CR6t-Oey.js → terminal-DcPKgKMN.js} +0 -0
  342. /package/client/dist/assets/{terminal-Cj4HzP3p.js → terminal-XciDq6VV.js} +0 -0
  343. /package/client/dist/assets/{tickets-OrJwUxJR.js → tickets-7kl_0jgM.js} +0 -0
  344. /package/client/dist/assets/{tickets-68LH1xp6.js → tickets-BSyaZI8d.js} +0 -0
  345. /package/client/dist/assets/{tickets-blQnNA4N.js → tickets-CcTcvwKS.js} +0 -0
  346. /package/client/dist/assets/{tickets-D6f3GSYn.js → tickets-D75vyZJj.js} +0 -0
  347. /package/client/dist/assets/{tickets-PtHNxQo5.js → tickets-D79ZT2SZ.js} +0 -0
  348. /package/client/dist/assets/{tickets-DBQXMYYA.js → tickets-DbcMWq5L.js} +0 -0
  349. /package/client/dist/assets/{tickets-jxsTrApR.js → tickets-ZA_2iPd1.js} +0 -0
  350. /package/client/dist/assets/{tickets-REr-EQx9.js → tickets-mxd23fWX.js} +0 -0
  351. /package/client/dist/assets/{twig-DCcGd8FE.js → twig-DQ2zIX0b.js} +0 -0
  352. /package/client/dist/assets/{typespec-HTphp-Uh.js → typespec-DPoaiGTJ.js} +0 -0
  353. /package/client/dist/assets/{vb-Cb_yUcVd.js → vb-Jo98wdMr.js} +0 -0
  354. /package/client/dist/assets/{wgsl-DrKU3YXj.js → wgsl-DZc4h_eS.js} +0 -0
@@ -0,0 +1,16 @@
1
+ import{r as e}from"./chunk-CilyBKbf.js";import{A as t,At as n,Cn as r,D as i,En as a,Et as o,G as s,Ht as c,Kt as l,Mt as u,Nt as d,O as f,Ot as p,Pt as m,Sn as ee,Tt as h,U as g,W as _,Wt as v,_n as y,b,f as x,in as S,kt as C,l as te,mt as w,nn as T,nt as ne,o as E,ot as re,p as D,qt as O,rn as k,rt as A,u as ie,vn as j,x as M,xn as N}from"./index-CDEQ4aU_.js";import{t as P}from"./lib-Bu76JzdB.js";import{t as ae}from"./format-command-rVyGPxWE.js";var F=c(`clock`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 6v6l4 2`,key:`mmk7yg`}]]),I=c(`house`,[[`path`,{d:`M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8`,key:`5wwlr5`}],[`path`,{d:`M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z`,key:`r6nss1`}]]),L=e(a(),1),R=k();function oe({phases:e,phaseDefinitions:n}){return n.length===0?null:(0,R.jsx)(`div`,{className:`flex items-center`,children:n.map((r,a)=>{let o=e[r.key]??`idle`,c=a<n.length-1?e[n[a+1].key]??`idle`:null;return(0,R.jsxs)(`div`,{className:`flex items-center`,children:[(0,R.jsxs)(i,{children:[(0,R.jsx)(t,{asChild:!0,children:(0,R.jsxs)(`div`,{className:`flex flex-col items-center gap-1.5 cursor-default px-4`,children:[(0,R.jsx)(se,{state:o}),(0,R.jsx)(`span`,{className:s(`text-xs font-medium transition-colors`,o===`running`?`text-blue-400 aurora-light:text-accent-info`:o===`done`?`text-emerald-400 aurora-light:text-accent-success`:o===`error`?`text-red-400 aurora-light:text-destructive`:`text-muted-foreground/40`),children:r.label})]})}),(0,R.jsxs)(f,{side:`bottom`,className:`max-w-[200px]`,children:[(0,R.jsx)(`p`,{className:`font-medium`,children:r.label}),(0,R.jsx)(`p`,{className:`text-muted-foreground mt-0.5`,children:r.description})]})]}),c!==null&&(0,R.jsx)(`div`,{className:s(`h-px w-12 -mt-5 shrink-0 transition-all duration-300`,c===`done`||o===`done`?`bg-emerald-500/30 aurora-light:bg-accent-success/40`:c===`running`?`bg-blue-400/40 aurora-light:bg-accent-info/40`:`bg-border/30`)})]},r.key)})})}function se({state:e}){return(0,R.jsxs)(`div`,{className:s(`flex items-center justify-center w-10 h-10 rounded-full transition-all duration-300`,e===`running`?`bg-blue-500/10 aurora-light:bg-accent-info/10 ring-1 ring-blue-400/30 aurora-light:ring-accent-info/30 animate-pulse`:e===`done`?`bg-emerald-500/10 aurora-light:bg-accent-success/10`:e===`error`?`bg-red-500/10 aurora-light:bg-destructive/10`:`bg-muted/20`),children:[e===`running`&&(0,R.jsx)(w,{className:`w-6 h-6 text-blue-400 aurora-light:text-accent-info animate-spin`}),e===`done`&&(0,R.jsx)(n,{className:`w-6 h-6 text-emerald-400 aurora-light:text-accent-success`}),e===`error`&&(0,R.jsx)(C,{className:`w-6 h-6 text-red-400 aurora-light:text-destructive`}),e===`idle`&&(0,R.jsx)(p,{className:`w-6 h-6 text-muted-foreground/20`})]})}function z(e,t){let n=(typeof t==`number`?t:new Date(t).getTime())-new Date(e).getTime();if(!Number.isFinite(n)||n<0)return`—`;let r=Math.round(n/1e3);if(r<60)return`${r}s`;let i=Math.floor(r/60),a=r%60;return i<60?`${i}m ${a}s`:`${Math.floor(i/60)}h ${i%60}m`}function B(e){let t=new Set;for(let n of e)if(n.event_type===`log`)try{let e=(JSON.parse(n.payload).line??``).match(/(?:Writing|Editing|Created?|Updated?)\s+(?:file:\s*)?([\w./\-]+\.\w+)/i);e&&t.add(e[1])}catch{}return Array.from(t).slice(0,20)}var V={steps:0,actionKey:``,actionArg:``,lastSeenIdx:0};function ce(e,t){if(t.type===`reset`)return V;if(t.type===`consume`){let{events:n}=t,r=e.lastSeenIdx>n.length?n.length:e.lastSeenIdx;if(n.length<=r)return r===e.lastSeenIdx?e:{...e,lastSeenIdx:r};let{steps:i,actionKey:a,actionArg:o}=e;for(let e=r;e<n.length;e++){let t=D(n[e]);t.step&&(i+=t.stepCount??1),t.actionKey&&(a=t.actionKey,o=t.actionArg??``)}return{steps:i,actionKey:a,actionArg:o,lastSeenIdx:n.length}}return e}function le({job:e,events:t,defaultOpen:r=!0,pipelineTotals:i,phases:a,phaseDefinitions:o}){let{t:c}=j(`jobs`),[l,u]=(0,L.useState)(r),d=(0,L.useMemo)(()=>B(t),[t]),f=e.status===`running`,p=e.status===`completed`,[ee,h]=(0,L.useState)(()=>Date.now());(0,L.useEffect)(()=>{if(!f)return;let e=window.setInterval(()=>h(Date.now()),1e3);return()=>window.clearInterval(e)},[f]);let[g,_]=(0,L.useReducer)(ce,V),v=(0,L.useRef)(e.id);(0,L.useEffect)(()=>{v.current!==e.id&&(v.current=e.id,_({type:`reset`})),_({type:`consume`,events:t})},[e.id,t]);let[y,b]=(0,L.useState)(!0);(0,L.useEffect)(()=>{if(!f)return;b(!0);let e=window.setTimeout(()=>b(!1),8e3);return()=>window.clearTimeout(e)},[f,e.id]);let S=e.finished_at?z(e.started_at,e.finished_at):f?z(e.started_at,ee):`—`,te=!!e.total_cost_usd_estimated,T=e.total_cost_usd==null?null:`${te?`~`:``}$${e.total_cost_usd.toFixed(4)}`,ne=e.num_turns==null?null:String(e.num_turns),E=e.tokens_in==null?null:(e.tokens_in??0)+(e.tokens_out??0)+(e.tokens_cache_read??0)+(e.tokens_cache_create??0),re=E==null?null:`${(E/1e3).toFixed(1)}k`,D=(0,L.useMemo)(()=>!a||!o?null:o.find(e=>a[e.key]===`running`)?.label??null,[a,o]),O=f&&g.steps===0?`connecting`:g.actionKey||`thinking`,k=x.has(O)&&g.actionArg!==``,A=x.has(O)&&!k?`working`:O,ie=k?c(`statusPanel.activity.${A}`,{arg:g.actionArg}):c(`statusPanel.activity.${A}`),M=D??(f&&g.steps===0?c(`statusPanel.activity.starting`):null),N=g.steps>0?c(`statusPanel.steps`,{count:g.steps}):null,P=c(f?`statusPanel.inProgress`:p?`statusPanel.completed`:`statusPanel.failed`),ae=f?`border-accent-info/20 bg-accent-info/5`:p?`border-emerald-500/20 aurora-light:border-accent-success/30 bg-emerald-500/5 aurora-light:bg-accent-success/5`:`border-red-500/20 aurora-light:border-destructive/30 bg-red-500/5 aurora-light:bg-destructive/5`,F=f?w:p?n:C,I=f?`w-4 h-4 text-accent-info shrink-0 animate-spin`:p?`w-4 h-4 text-emerald-400 aurora-light:text-accent-success shrink-0`:`w-4 h-4 text-red-400 aurora-light:text-destructive shrink-0`;return(0,R.jsxs)(`div`,{className:s(`mx-4 my-2 rounded-xl border transition-colors duration-500`,ae),children:[(0,R.jsxs)(`button`,{type:`button`,onClick:()=>u(!l),className:`w-full flex items-center gap-3 px-4 py-3`,children:[(0,R.jsx)(F,{className:I,"aria-hidden":`true`}),(0,R.jsx)(`span`,{className:`text-sm font-semibold flex-1 text-left`,children:P}),(0,R.jsxs)(`div`,{className:`flex items-center gap-3 text-[11px] text-muted-foreground`,children:[(0,R.jsx)(`span`,{className:`tabular-nums`,children:S}),f?N&&(0,R.jsx)(`span`,{className:`tabular-nums`,children:N}):(0,R.jsxs)(R.Fragment,{children:[T&&(0,R.jsx)(`span`,{className:`tabular-nums text-yellow-400 aurora-light:text-accent-warning`,children:T}),d.length>0&&(0,R.jsx)(`span`,{children:c(`statusPanel.filesCount`,{count:d.length})})]})]}),(0,R.jsx)(m,{className:s(`w-4 h-4 text-muted-foreground/40 transition-transform duration-150 shrink-0`,l&&`rotate-180`)})]}),l&&(0,R.jsx)(`div`,{className:`px-4 pb-4 space-y-3 border-t border-border/20`,children:f?(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`p`,{className:`pt-3 text-[10px] text-muted-foreground/50 uppercase tracking-wider`,children:c(`statusPanel.zoneInProgress`)}),(0,R.jsxs)(`div`,{className:`flex flex-col sm:flex-row gap-3 sm:items-stretch`,children:[(0,R.jsxs)(`div`,{className:`bg-muted/20 rounded-lg px-3 py-2 sm:w-44 shrink-0`,children:[(0,R.jsxs)(`p`,{className:`flex items-center gap-1.5 text-[10px] text-muted-foreground/50 uppercase tracking-wider`,children:[c(`statusPanel.duration`),(0,R.jsx)(`span`,{className:`inline-block w-1.5 h-1.5 rounded-full bg-accent-info animate-pulse`,title:c(`statusPanel.liveTooltip`),"aria-label":c(`statusPanel.liveTooltip`)})]}),(0,R.jsx)(`p`,{className:`text-sm font-semibold tabular-nums mt-0.5 text-accent-info`,children:S})]}),(0,R.jsxs)(`div`,{className:`flex-1 flex items-center gap-2 bg-muted/10 rounded-lg px-3 py-2 min-w-0`,children:[(0,R.jsx)(w,{className:`w-3.5 h-3.5 text-accent-info shrink-0 animate-spin`,"aria-hidden":`true`}),M&&(0,R.jsx)(`span`,{className:`text-[11px] font-medium px-1.5 py-0.5 rounded bg-accent-info/15 text-accent-info shrink-0`,children:M}),(0,R.jsx)(`span`,{className:`text-xs text-muted-foreground truncate flex-1 min-w-0`,children:ie}),N&&(0,R.jsxs)(`span`,{className:`text-[11px] text-muted-foreground/60 tabular-nums shrink-0`,children:[`· `,N]})]})]}),y&&(0,R.jsx)(`p`,{className:`text-[11px] text-muted-foreground/40 leading-snug`,children:c(`statusPanel.explainer`)}),(0,R.jsx)(`p`,{className:`pt-1 text-[10px] text-muted-foreground/50 uppercase tracking-wider border-t border-accent-info/10 mt-1`,children:c(`statusPanel.zoneFinalPending`)}),(0,R.jsxs)(`div`,{className:`grid grid-cols-3 gap-2`,children:[(0,R.jsx)(W,{label:c(`statusPanel.cost`),caption:c(`statusPanel.pendingCaption`),tooltip:c(`statusPanel.costTooltip`)}),(0,R.jsx)(W,{label:c(`statusPanel.turns`),caption:c(`statusPanel.pendingCaption`),tooltip:c(`statusPanel.pendingTooltip`)}),(0,R.jsx)(W,{label:c(`statusPanel.tokens`),caption:c(`statusPanel.pendingCaption`),tooltip:c(`statusPanel.pendingTooltip`)})]})]}):(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`p`,{className:`pt-3 text-[10px] text-muted-foreground/50 uppercase tracking-wider`,children:c(`statusPanel.zoneFinal`)}),(0,R.jsxs)(`div`,{className:`grid grid-cols-2 sm:grid-cols-4 gap-2`,children:[(0,R.jsx)(H,{label:c(`statusPanel.duration`),value:S}),(0,R.jsx)(U,{label:c(`statusPanel.cost`),value:T,valueClass:`text-yellow-400 aurora-light:text-accent-warning`,naCaption:c(`statusPanel.notAvailable`)}),(0,R.jsx)(U,{label:c(`statusPanel.turns`),value:ne,naCaption:c(`statusPanel.notAvailable`)}),(0,R.jsx)(U,{label:c(`statusPanel.tokens`),value:re,naCaption:c(`statusPanel.notAvailable`)})]}),i&&(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`p`,{className:`text-[10px] text-muted-foreground/50 uppercase tracking-wider mb-1.5`,children:c(`statusPanel.pipelineTotal`,{count:i.jobCount})}),(0,R.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,R.jsx)(H,{label:c(`statusPanel.totalCost`),value:`$${i.totalCostUsd.toFixed(4)}`,valueClass:`text-yellow-400 aurora-light:text-accent-warning`}),(0,R.jsx)(H,{label:c(`statusPanel.totalTokens`),value:`${((i.totalTokensIn+i.totalTokensOut+i.totalTokensCacheRead+i.totalTokensCacheCreate)/1e3).toFixed(1)}k`})]})]}),d.length>0&&(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`p`,{className:`text-[10px] text-muted-foreground/50 uppercase tracking-wider mb-1.5`,children:c(`statusPanel.filesModified`)}),(0,R.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:d.map(e=>(0,R.jsx)(`code`,{className:`text-[10px] font-mono bg-muted/30 px-2 py-0.5 rounded text-cyan-400/80 aurora-light:text-accent-info`,children:e},e))})]})]})})]})}function H({label:e,value:t,valueClass:n}){return(0,R.jsxs)(`div`,{className:`bg-muted/20 rounded-lg px-3 py-2`,children:[(0,R.jsx)(`p`,{className:`text-[10px] text-muted-foreground/50 uppercase tracking-wider`,children:e}),(0,R.jsx)(`p`,{className:s(`text-sm font-semibold tabular-nums mt-0.5`,n),children:t})]})}function U({label:e,value:t,valueClass:n,naCaption:r}){return(0,R.jsxs)(`div`,{className:`bg-muted/20 rounded-lg px-3 py-2`,children:[(0,R.jsx)(`p`,{className:`text-[10px] text-muted-foreground/50 uppercase tracking-wider`,children:e}),(0,R.jsx)(`p`,{className:s(`text-sm font-semibold tabular-nums mt-0.5`,t==null?`text-muted-foreground`:n),children:t??`—`}),t==null&&(0,R.jsx)(`p`,{className:`text-[10px] text-muted-foreground/30 mt-0.5`,children:r})]})}function W({label:e,caption:t,tooltip:n}){return(0,R.jsxs)(`div`,{className:`bg-muted/20 rounded-lg px-3 py-2 ring-1 ring-accent-info/10`,title:n,children:[(0,R.jsxs)(`p`,{className:`flex items-center gap-1 text-[10px] text-muted-foreground/50 uppercase tracking-wider`,children:[e,(0,R.jsx)(F,{className:`w-2.5 h-2.5 text-muted-foreground/30`,"aria-hidden":`true`})]}),(0,R.jsx)(`p`,{className:`text-sm font-semibold tabular-nums mt-0.5 text-muted-foreground/40`,children:`—`}),(0,R.jsx)(`p`,{className:`text-[10px] text-muted-foreground/30 mt-0.5`,children:t})]})}var G=4;function ue({tickets:e,onTicketClick:t}){let{t:n}=j(`jobs`),[r,i]=(0,L.useState)(!1);if(e.length===0)return null;let a=e.length>=G&&!r?e.slice(0,1):e,o=e.length-a.length;return(0,R.jsxs)(`div`,{className:`rounded-xl border border-border/40 bg-card/40 px-4 py-3 space-y-1.5`,children:[a.map(e=>(0,R.jsx)(K,{ticket:e,onClick:()=>t(e.id)},e.id)),o>0&&(0,R.jsxs)(`button`,{type:`button`,onClick:()=>i(!0),className:`flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground transition-colors`,children:[n(`ticketHeader.showMore`,{count:o}),(0,R.jsx)(m,{className:`w-3 h-3`})]}),r&&e.length>=G&&(0,R.jsxs)(`button`,{type:`button`,onClick:()=>i(!1),className:`flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground transition-colors`,children:[n(`ticketHeader.showLess`),(0,R.jsx)(u,{className:`w-3 h-3`})]})]})}function K({ticket:e,onClick:t}){let{t:n}=j(`jobs`),r=e.title==null,i=`inline-flex items-center px-1.5 py-0.5 rounded-md text-[11px] font-mono tabular-nums shrink-0`;return r?(0,R.jsx)(`div`,{className:`flex items-center gap-2 min-w-0`,children:(0,R.jsx)(`span`,{className:s(i,`text-muted-foreground bg-muted/20 select-none`),title:n(`ticketHeader.deletedTooltip`),children:n(`ticketHeader.deletedTicket`,{id:e.id})})}):(0,R.jsxs)(`button`,{type:`button`,onClick:t,className:`flex items-center gap-2 min-w-0 w-full text-left group`,title:e.title??void 0,children:[(0,R.jsxs)(`span`,{className:s(i,`text-accent-primary bg-accent-primary/10 group-hover:bg-accent-primary/20 transition-colors`),children:[`#`,e.id]}),(0,R.jsx)(`span`,{className:`text-lg font-semibold text-foreground truncate group-hover:text-accent-primary transition-colors`,children:e.title})]})}function q(e){let t=e.trimStart();return!!(/^#{1,6}\s/.test(t)||/^[-*+]\s/.test(t)||/^\d+\.\s/.test(t)||/^\|.+\|/.test(t)||t.startsWith("```")||t.startsWith(`> `)||/\*\*[^*]+\*\*/.test(e)||/`[^`]+`/.test(e)||/\[.+\]\(.+\)/.test(e)||/^(-{3,}|_{3,}|\*{3,})$/.test(t)||/^- \[[ x]\]\s/.test(t))}function J(e,t){let n=`${e.id??t}`,r=e.timestamp;if(e.event_type===`log`)try{let t=JSON.parse(e.payload).line??``;return t.trim()?t.startsWith(`▸`)||t.match(/^(architect|developer|reviewer|ship|analyst)\s*:/i)?{id:n,content:t,type:`phase`,timestamp:r}:e.source===`stderr`?{id:n,content:t,type:`stderr`,timestamp:r}:q(t)?{id:n,content:t,type:`assistant`,timestamp:r}:{id:n,content:t,type:`plain`,timestamp:r}:null}catch{return null}if(e.event_type!==`log`&&e.event_type!==`result`)return null;if(e.event_type===`result`)try{let t=JSON.parse(e.payload),i=[];return t.duration_ms&&i.push(`${(t.duration_ms/1e3).toFixed(1)}s`),t.total_cost_usd&&i.push(`$${t.total_cost_usd.toFixed(4)}`),t.num_turns&&i.push(O.t(`jobs:logViewer.turns`,{count:t.num_turns})),{id:n,content:`▸ ${O.t(`jobs:logViewer.completed`)}${i.length?` — ${i.join(` · `)}`:``}`,type:`result`,timestamp:r}}catch{return null}return null}function de(e){let t=`none`,n=[];for(let r of e){let e=r.type;if(e!==`plain`&&e!==`log`){t=`none`,n.push(r);continue}let i=r.content;i.startsWith(`--- `)?(t=`saw_minus`,n.push({...r,type:`diff-meta`})):t===`saw_minus`&&i.startsWith(`+++ `)?(t=`active`,n.push({...r,type:`diff-meta`})):t===`active`&&i.startsWith(`@@ `)?n.push({...r,type:`diff-hunk`}):t===`active`&&i.startsWith(`+`)&&!i.startsWith(`+++`)?n.push({...r,type:`diff-add`}):t===`active`&&i.startsWith(`-`)&&!i.startsWith(`---`)?n.push({...r,type:`diff-remove`}):(t===`active`&&(i.startsWith(` `)||i===``)||(t=`none`),n.push(r))}return n}function Y(e){let t=[{key:`__preamble__`,header:null,lines:[]}];for(let n of e)n.type===`phase`?t.push({key:n.id,header:n,lines:[]}):t[t.length-1].lines.push(n);return t.filter(e=>e.header!==null||e.lines.length>0)}function fe({events:e,isLoading:t}){let{t:n,i18n:r}=j(`jobs`),[i,a]=(0,L.useState)(``),[s,c]=(0,L.useState)(!0),[l,u]=(0,L.useState)(new Set),d=(0,L.useRef)(null),f=(0,L.useRef)(null),{processedLines:p,groups:ee,totalLines:h}=(0,L.useMemo)(()=>{let t=e.map((e,t)=>J(e,t)).filter(e=>e!==null),n=[];for(let e of t){let t=n.length>0?n[n.length-1]:null;e.type===`assistant`&&t?.type===`assistant`?t.content+=`
2
+ `+e.content:n.push({...e})}let r=de(n);return{processedLines:r,groups:Y(r),totalLines:r.length}},[e,r.language]),g=(0,L.useMemo)(()=>{if(!i)return h;let e=i.toLowerCase();return p.filter(t=>t.content.toLowerCase().includes(e)).length},[i,p,h]),v=(0,L.useCallback)(()=>{let e=f.current;e&&(e.scrollTop=e.scrollHeight)},[]);(0,L.useEffect)(()=>{s&&v()},[e.length,s,v]);function b(){let e=f.current;e&&c(e.scrollHeight-e.scrollTop-e.clientHeight<50)}function x(e){u(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}return t?(0,R.jsx)(`div`,{className:`flex-1 flex items-center justify-center`,children:(0,R.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:n(`logViewer.loading`)})}):h===0?(0,R.jsx)(`div`,{className:`flex-1 flex items-center justify-center`,children:(0,R.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:n(`logViewer.empty`)})}):(0,R.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,R.jsxs)(`div`,{className:`px-4 py-2 border-b border-border flex items-center gap-2`,children:[(0,R.jsxs)(`div`,{className:`relative flex-1 max-w-xs`,children:[(0,R.jsx)(A,{className:`absolute left-2.5 top-1/2 -translate-y-1/2 w-3 h-3 text-muted-foreground`}),(0,R.jsx)(E,{placeholder:n(`logViewer.filterPlaceholder`),value:i,onChange:e=>a(e.target.value),className:`pl-7 h-7`})]}),(0,R.jsx)(_,{variant:`ghost`,size:`sm`,className:`h-7 px-2 text-muted-foreground/50 hover:text-foreground`,onClick:()=>{let e=p.map(e=>e.content).join(`
3
+ `);navigator.clipboard.writeText(e).then(()=>{y.success(n(`logViewer.copySuccess`))}).catch(()=>{y.error(n(`logViewer.copyFailed`))})},children:(0,R.jsx)(o,{className:`w-3.5 h-3.5`})}),(0,R.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:n(`logViewer.lineCount`,{filtered:g,total:h})})]}),(0,R.jsxs)(`div`,{ref:f,className:`flex-1 overflow-y-auto p-2 text-xs relative`,onScroll:b,children:[ee.map(e=>(0,R.jsx)(X,{group:e,filter:i,collapsed:l.has(e.key),onToggle:()=>x(e.key)},e.key)),(0,R.jsx)(`div`,{ref:d})]}),!s&&(0,R.jsxs)(_,{size:`sm`,variant:`secondary`,onClick:()=>{c(!0),v()},className:`absolute bottom-16 right-6 h-7 gap-1 shadow-lg`,children:[(0,R.jsx)(m,{className:`w-3 h-3`}),n(`logViewer.jumpToBottom`)]})]})}var X=(0,L.memo)(function({group:e,filter:t,collapsed:n,onToggle:r}){let{t:i}=j(`jobs`),a=t?e.lines.filter(e=>e.content.toLowerCase().includes(t.toLowerCase())):e.lines;if(e.header===null)return a.length===0?null:(0,R.jsx)(`div`,{children:a.map((e,t)=>(0,R.jsx)(Q,{line:e,even:t%2==0},e.id))});let o=e.header.content;return(0,R.jsxs)(`div`,{className:`mt-3 rounded-md overflow-hidden border border-border/20`,children:[(0,R.jsxs)(`button`,{type:`button`,onClick:r,className:s(`flex items-center gap-2 w-full text-left px-3 py-2`,`bg-primary/5 border-b border-primary/20`,`hover:bg-primary/10 transition-colors duration-150 cursor-pointer`),children:[(0,R.jsx)(d,{className:s(`w-3 h-3 text-primary/60 shrink-0 transition-transform duration-150`,!n&&`rotate-90`)}),(0,R.jsx)(`span`,{className:`flex-1 text-[12px] font-semibold text-foreground leading-none`,children:o}),e.header.timestamp&&(0,R.jsx)(`span`,{className:`text-[10px] text-muted-foreground/40 font-mono tabular-nums shrink-0`,children:new Date(e.header.timestamp).toLocaleTimeString(`en`,{hour:`2-digit`,minute:`2-digit`,second:`2-digit`,hour12:!1})}),(0,R.jsx)(`span`,{className:`text-[10px] text-muted-foreground/40 shrink-0`,children:i(`logViewer.phaseLines`,{count:e.lines.length})})]}),!n&&(0,R.jsx)(`div`,{className:`bg-muted/5`,children:a.length===0?(0,R.jsx)(`p`,{className:`px-4 py-2 text-[10px] text-muted-foreground/40 italic`,children:i(t?`logViewer.noMatchingLines`:`logViewer.noOutput`)}):a.map((e,t)=>(0,R.jsx)(Q,{line:e,even:t%2==0},e.id))})]})}),Z=[P],Q=(0,L.memo)(function({line:e,even:t}){let n=e.type===`assistant`,r=e.type===`diff-add`,i=e.type===`diff-remove`,a=e.type===`diff-meta`,o=e.type===`diff-hunk`;return(0,R.jsxs)(`div`,{className:s(`flex items-start gap-2 group px-2 py-0.5 rounded-sm`,!(r||i||a||o)&&(t?`bg-muted/20`:`bg-transparent`),e.type===`result`&&`bg-emerald-500/5 aurora-light:bg-accent-success/10 border-l-2 border-emerald-500/40 aurora-light:border-accent-success/40 mt-2 py-2`,r&&`bg-emerald-500/8 aurora-light:bg-accent-success/10 border-l-2 border-emerald-500/50 aurora-light:border-accent-success/50`,i&&`bg-red-500/8 aurora-light:bg-destructive/10 border-l-2 border-red-500/50 aurora-light:border-destructive/50`,a&&`bg-accent-primary/5 border-l-2 border-accent-primary/30`,o&&`bg-accent-info/5 border-l-2 border-accent-info/30`),children:[e.timestamp&&(0,R.jsx)(`span`,{className:`text-[10px] text-muted-foreground/40 shrink-0 mt-0.5 w-[52px] font-mono tabular-nums`,children:new Date(e.timestamp).toLocaleTimeString(`en`,{hour:`2-digit`,minute:`2-digit`,second:`2-digit`,hour12:!1})}),n?(0,R.jsx)(`div`,{className:`flex-1 min-w-0 prose prose-invert prose-xs max-w-none
4
+ prose-p:my-1 prose-p:leading-relaxed
5
+ prose-headings:mt-2 prose-headings:mb-1 prose-headings:text-sm prose-headings:font-semibold
6
+ prose-ul:my-1 prose-ol:my-1 prose-li:my-0
7
+ prose-code:text-cyan-300 prose-code:text-[11px] prose-code:bg-muted/40 prose-code:px-1 prose-code:py-0.5 prose-code:rounded
8
+ prose-pre:my-1 prose-pre:bg-muted/30 prose-pre:rounded-md prose-pre:p-2 prose-pre:text-[11px]
9
+ prose-strong:text-foreground prose-em:text-foreground/70
10
+ prose-a:text-blue-400 prose-a:no-underline hover:prose-a:underline
11
+ prose-table:my-2 prose-table:text-[11px]
12
+ prose-thead:border-border prose-thead:bg-muted/30
13
+ prose-th:px-3 prose-th:py-1.5 prose-th:text-left prose-th:font-semibold prose-th:text-foreground/90
14
+ prose-td:px-3 prose-td:py-1.5 prose-td:border-border
15
+ prose-tr:border-border
16
+ text-foreground/80`,children:(0,R.jsx)(M,{remarkPlugins:[b],rehypePlugins:Z,children:e.content})}):(0,R.jsx)(`span`,{className:s(`flex-1 break-all leading-relaxed whitespace-pre-wrap font-mono`,e.type===`tool-use`&&`text-cyan-400/80 aurora-light:text-accent-info text-[11px]`,e.type===`stderr`&&`text-orange-400 aurora-light:text-accent-warning`,e.type===`result`&&`text-emerald-400 aurora-light:text-accent-success font-medium`,e.type===`log`&&`text-foreground/60`,e.type===`plain`&&`text-foreground/70`,e.type===`tool-result`&&`text-muted-foreground/50`,r&&`text-emerald-400 aurora-light:text-accent-success`,i&&`text-red-400 aurora-light:text-destructive`,a&&`text-accent-primary/80`,o&&`text-accent-info/80`),children:e.content})]})}),pe={running:{variant:`running`,labelKey:`statusLabel.running`,tooltipKey:`statusTooltip.running`},completed:{variant:`success`,labelKey:`statusLabel.completed`,tooltipKey:`statusTooltip.completed`},failed:{variant:`failed`,labelKey:`statusLabel.failed`,tooltipKey:`statusTooltip.failed`},canceled:{variant:`canceled`,labelKey:`statusLabel.canceled`,tooltipKey:`statusTooltip.canceled`},queued:{variant:`queued`,labelKey:`statusLabel.queued`,tooltipKey:`statusTooltip.queued`}};function $(){let{t:e}=j(`jobs`),{id:a}=r(),{activeProjectId:o,projects:c}=v(),u=c.find(e=>e.id===o)?.provider,p=ee(),{openTicketDetail:m}=te(),[b,x]=(0,L.useState)(null),[C,E]=(0,L.useState)([]),[D,O]=(0,L.useState)([]),[k,A]=(0,L.useState)({}),[M,P]=(0,L.useState)([]),[F,se]=(0,L.useState)(!0),[z,B]=(0,L.useState)(!1),[V,ce]=(0,L.useState)(null),[H,U]=(0,L.useState)(!1),[W,G]=(0,L.useState)(``),[K,q]=(0,L.useState)(!1),[J,de]=(0,L.useState)(!1);(0,L.useEffect)(()=>{if(!a)return;let e=new AbortController;x(null),E([]),O([]),A({}),se(!0),B(!1);async function t(){try{let t=await fetch(`${S()}/jobs/${a}`,{signal:e.signal});if(t.status===404){B(!0);return}if(!t.ok)throw Error(`Failed to fetch job`);let n=await t.json();x(n.job),E(n.events)}catch(e){if(e.name===`AbortError`)return;B(!0)}finally{e.signal.aborted||se(!1)}}return t(),()=>e.abort()},[a,o]),(0,L.useEffect)(()=>{if(!b?.pipeline_id){P([]);return}let e=b.pipeline_id;fetch(`${S()}/pipelines/${e}`).then(e=>e.ok?e.json():null).then(e=>{e?.jobs&&P(e.jobs)}).catch(()=>{})},[b?.pipeline_id,b?.status]);let Y=(0,L.useRef)(o);Y.current=o;let X=(0,L.useRef)([]),Z=(0,L.useRef)(null),Q=(0,L.useCallback)(()=>{Z.current=null;let e=X.current;e.length!==0&&(X.current=[],E(t=>{let n=[...t,...e];return n.length>1e4?n.slice(n.length-8e3):n}))},[]),$=(0,L.useCallback)(e=>{let t=X.current;t.push(e),t.length>1e4&&(X.current=t.slice(-8e3)),Z.current||=requestAnimationFrame(Q)},[Q]);(0,L.useEffect)(()=>()=>{Z.current&&cancelAnimationFrame(Z.current)},[]);let me=(0,L.useCallback)(e=>{let t=e;if(!(Y.current&&t.projectId&&t.projectId!==Y.current)){if(t.type===`init`){let e=t.phaseDefinitions??[];O(e);let n={};for(let r of e)n[r.key]=t.phases?.[r.key]??`idle`;A(n)}else if(t.type===`event`&&t.jobId===a)$({id:Date.now(),job_id:a??``,seq:t.seq??0,event_type:t.event_type,source:t.source,payload:t.payload,timestamp:t.timestamp});else if(t.type===`log`&&t.processId===a)$({id:Date.now(),job_id:a??``,seq:0,event_type:`log`,source:t.source,payload:JSON.stringify({line:t.line}),timestamp:t.timestamp});else if(t.type===`job.turn_user`&&t.jobId===a)U(!0);else if(t.type===`job.turn_done`&&t.jobId===a)ce(t.totals),U(!1);else if(t.type===`job.finalized`&&t.jobId===a){U(!1),q(!1);let e=t.totals;e&&ce(e),fetch(`${S()}/jobs/${a}`).then(e=>e.json()).then(e=>x(e.job)).catch(()=>{})}else if(t.type===`phase`){let e=t.phase,n=t.state;A(t=>({...t,[e]:n}))}else if(t.type===`queue`){let e=t.jobs?.find(e=>e.id===a);if(e){let t=e.status;x(e=>e&&{...e,status:t}),(t===`completed`||t===`failed`||t===`canceled`)&&fetch(`${S()}/jobs/${a}`).then(e=>e.json()).then(e=>x(e.job)).catch(()=>{})}}}},[a,$]),{registerHandler:he,unregisterHandler:ge}=T();(0,L.useEffect)(()=>(he(`job-detail-${a}`,me),()=>ge(`job-detail-${a}`)),[a,me,he,ge]),(0,L.useEffect)(()=>{if(!a||!b||b.status!==`running`||b.hasTelemetry)return;let e=setInterval(()=>{fetch(`${S()}/jobs/${a}`).then(e=>e.ok?e.json():null).then(e=>{e?.job?.hasTelemetry&&x(e=>e&&{...e,hasTelemetry:!0})}).catch(()=>{})},8e3);return()=>clearInterval(e)},[a,b?.status,b?.hasTelemetry]);async function _e(){if(a)try{let t=await fetch(`${S()}/jobs/${a}`,{method:`DELETE`});if(t.ok)(await t.json()).status===`deleted`?(y.success(e(`detail.toast.jobDeleted`)),p(`/jobs`)):y.success(e(`detail.toast.cancelSignalSent`),{description:e(`detail.toast.cancelSignalSentDescription`)});else{let n=await t.json();y.error(e(`detail.toast.failed`),{description:n.error})}}catch{y.error(e(`detail.toast.networkError`))}}async function ve(){if(!(!a||K)){q(!0);try{let t=await fetch(`${S()}/jobs/${a}/finalize`,{method:`POST`});if(t.ok)y.success(e(`detail.toast.finalizeScheduled`));else{let n=await t.json().catch(()=>({}));y.error(e(`detail.toast.finalizeFailed`),{description:n.error}),q(!1)}}catch{y.error(e(`detail.toast.networkError`)),q(!1)}}}async function ye(){let t=W.trim();if(!(!a||!t||J)){de(!0);try{let n=await fetch(`${S()}/jobs/${a}/messages`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({text:t})});if(n.ok)G(``);else{let t=await n.json().catch(()=>({}));y.error(e(`detail.toast.sendFailed`),{description:t.error})}}catch{y.error(e(`detail.toast.networkError`))}finally{de(!1)}}}async function be(){if(b)try{let t=await fetch(`${S()}/jobs/${b.id}/diagnostic`);if(!t.ok){let n=await t.json().catch(()=>({}));throw Error(n.error??e(`detail.toast.exportFailedHttp`,{status:t.status}))}let n=await t.blob(),r=URL.createObjectURL(n),i=new Date().toISOString().slice(0,10),a=document.createElement(`a`);a.href=r,a.download=`specrails-diagnostic-${b.id}-${i}.zip`,document.body.appendChild(a),a.click(),a.remove(),URL.revokeObjectURL(r)}catch(t){y.error(e(`detail.toast.exportFailed`),{description:t.message})}}async function xe(){if(b)try{let t=await fetch(`${S()}/spawn`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({command:b.command})}),n=await t.json();if(!t.ok)throw Error(n.error??e(`detail.toast.spawnFailed`));y.success(e(`detail.toast.jobRequeued`)),p(`/jobs/${n.jobId}`)}catch(e){y.error(e.message)}}if(F)return(0,R.jsx)(`div`,{className:`max-w-5xl mx-auto px-4 py-6`,children:(0,R.jsxs)(`div`,{className:`space-y-3`,children:[(0,R.jsx)(`div`,{className:`h-4 w-48 bg-muted/30 rounded animate-pulse`}),(0,R.jsx)(`div`,{className:`h-20 bg-muted/30 rounded-lg animate-pulse`}),(0,R.jsx)(`div`,{className:`h-64 bg-muted/30 rounded-lg animate-pulse`})]})});if(z||!b)return(0,R.jsxs)(`div`,{className:`max-w-5xl mx-auto px-4 py-6 flex flex-col items-center gap-3 mt-12`,children:[(0,R.jsx)(`p`,{className:`text-lg font-semibold`,children:e(`detail.notFound`)}),(0,R.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:e(`detail.notFoundDescription`,{id:a})}),(0,R.jsx)(_,{asChild:!0,variant:`outline`,size:`sm`,children:(0,R.jsxs)(N,{to:`/`,children:[(0,R.jsx)(I,{className:`w-3.5 h-3.5 mr-1.5`}),e(`detail.backToDashboard`)]})})]});let Se=pe[b.status]??pe.queued,Ce=b.status===`running`,we=b.status===`completed`||b.status===`failed`,Te=!!b.interactive,Ee=Te&&Ce,De=(b.tickets?.length??0)>0,Oe=M.length>1?{totalCostUsd:M.reduce((e,t)=>e+(t.total_cost_usd??0),0),totalTokensIn:M.reduce((e,t)=>e+(t.tokens_in??0),0),totalTokensOut:M.reduce((e,t)=>e+(t.tokens_out??0),0),totalTokensCacheRead:M.reduce((e,t)=>e+(t.tokens_cache_read??0),0),totalTokensCacheCreate:M.reduce((e,t)=>e+(t.tokens_cache_create??0),0),jobCount:M.length}:null;return(0,R.jsxs)(`div`,{"data-job-detail-surface":!0,className:`flex flex-col h-full max-w-5xl mx-auto w-full`,children:[(0,R.jsxs)(`div`,{className:`px-4 py-4 border-b border-border space-y-3`,children:[(0,R.jsxs)(`div`,{className:`flex items-center gap-1 text-xs text-muted-foreground`,children:[(0,R.jsxs)(N,{to:`/`,className:`hover:text-foreground transition-colors flex items-center gap-1`,children:[(0,R.jsx)(I,{className:`w-3 h-3`}),e(`detail.breadcrumbDashboard`)]}),(0,R.jsx)(d,{className:`w-3 h-3`}),(0,R.jsx)(`span`,{className:`text-foreground font-mono`,children:e(`detail.breadcrumbJob`,{id:a?.slice(0,8)})})]}),De&&(0,R.jsx)(ue,{tickets:b.tickets??[],onTicketClick:m}),(0,R.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,R.jsxs)(`div`,{className:`space-y-1 min-w-0`,children:[(0,R.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,R.jsxs)(i,{children:[(0,R.jsx)(t,{asChild:!0,children:(0,R.jsx)(`div`,{children:(0,R.jsx)(g,{variant:Se.variant,children:e(Se.labelKey)})})}),(0,R.jsx)(f,{children:e(Se.tooltipKey)})]}),(0,R.jsx)(`code`,{className:s(`font-mono text-foreground/90 truncate`,De?`text-xs text-muted-foreground`:`text-sm`),children:ae(b.command,u)})]}),(0,R.jsxs)(`div`,{className:`flex items-center gap-3 text-xs text-muted-foreground flex-wrap`,children:[(0,R.jsx)(`span`,{children:b.started_at?e(`detail.startedAgo`,{timeAgo:ie(new Date(b.started_at),{addSuffix:!0,locale:l()})}):e(`detail.queuedWaiting`)}),b.model&&(0,R.jsx)(`span`,{className:`text-muted-foreground/40`,children:b.model})]})]}),(0,R.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[b.hasTelemetry&&(0,R.jsxs)(i,{children:[(0,R.jsx)(t,{asChild:!0,children:(0,R.jsxs)(_,{variant:`outline`,size:`sm`,className:`h-7`,onClick:be,"aria-label":e(`detail.exportDiagnosticAria`),children:[(0,R.jsx)(h,{className:`w-3.5 h-3.5 mr-1.5`}),e(`detail.exportDiagnostic`)]})}),(0,R.jsx)(f,{children:e(`detail.exportDiagnosticTooltip`)})]}),we&&(0,R.jsxs)(i,{children:[(0,R.jsx)(t,{asChild:!0,children:(0,R.jsxs)(_,{variant:`outline`,size:`sm`,onClick:xe,className:`h-7`,children:[(0,R.jsx)(re,{className:`w-3.5 h-3.5 mr-1.5`}),e(`detail.reExecute`)]})}),(0,R.jsx)(f,{children:e(`detail.reExecuteTooltip`)})]}),Ee&&(0,R.jsxs)(i,{children:[(0,R.jsx)(t,{asChild:!0,children:(0,R.jsxs)(_,{variant:`outline`,size:`sm`,onClick:ve,disabled:K,className:`h-7 border-accent-success/40 text-accent-success hover:bg-accent-success/10`,children:[(0,R.jsx)(n,{className:`w-3.5 h-3.5 mr-1.5`}),e(K?`detail.finalizing`:`detail.finalizeJob`)]})}),(0,R.jsx)(f,{children:e(`detail.finalizeJobTooltip`)})]}),Ce&&(0,R.jsxs)(i,{children:[(0,R.jsx)(t,{asChild:!0,children:(0,R.jsx)(_,{variant:`outline`,size:`sm`,onClick:_e,className:`h-7 border-destructive/30 text-destructive hover:bg-destructive/10`,children:e(Te?`detail.cancelInteractive`:`detail.cancelJob`)})}),(0,R.jsx)(f,{children:e(`detail.cancelJobTooltip`)})]})]})]}),(0,R.jsx)(oe,{phases:k,phaseDefinitions:D})]}),(b.status===`running`||b.status===`completed`||b.status===`failed`)&&(0,R.jsx)(le,{job:b,events:C,defaultOpen:b.status===`completed`||b.status===`running`,pipelineTotals:Oe??void 0,phases:k,phaseDefinitions:D}),(0,R.jsx)(`div`,{className:`flex-1 overflow-hidden relative`,children:(0,R.jsx)(fe,{events:C})}),Ee&&(0,R.jsxs)(`div`,{className:`shrink-0 border-t border-border/40 bg-surface/40 px-3 py-2 space-y-2`,children:[(0,R.jsxs)(`div`,{className:`flex items-center justify-between text-[11px] text-muted-foreground`,children:[(0,R.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[H&&(0,R.jsx)(w,{className:`w-3 h-3 animate-spin`}),e(H?`detail.interactive.working`:`detail.interactive.ready`)]}),V&&(0,R.jsx)(`span`,{className:`tabular-nums`,children:e(`detail.interactive.liveTotals`,{turns:V.num_turns,cost:V.total_cost_usd.toFixed(4)})})]}),(0,R.jsxs)(`div`,{className:`flex items-end gap-2`,children:[(0,R.jsx)(`textarea`,{value:W,onChange:e=>G(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),ye())},rows:2,placeholder:e(`detail.interactive.placeholder`),"aria-label":e(`detail.interactive.placeholder`),className:`flex-1 resize-none rounded-md border border-border/50 bg-background px-2.5 py-1.5 text-sm focus:outline-none focus:ring-2 focus:ring-ring`}),(0,R.jsxs)(_,{size:`sm`,onClick:()=>void ye(),disabled:J||!W.trim(),className:`h-9 shrink-0`,children:[(0,R.jsx)(ne,{className:`w-3.5 h-3.5 mr-1.5`}),e(`detail.interactive.send`)]})]})]})]})}export{$ as default};
@@ -0,0 +1 @@
1
+ import{r as e}from"./chunk-CilyBKbf.js";import{A as t,At as n,B as r,D as i,Dt as a,En as o,F as s,Gt as c,Ht as l,I as u,Kt as d,L as f,N as p,O as m,P as h,R as g,Sn as _,U as ee,W as v,Wt as y,X as b,_n as x,b as S,ht as C,in as w,kt as te,n as ne,q as T,rn as E,u as D,vn as O,x as k,z as A}from"./index-CDEQ4aU_.js";import{t as j}from"./ExportDropdown-2XwQ08sz.js";import{t as re}from"./format-command-rVyGPxWE.js";var ie=l(`git-compare-arrows`,[[`circle`,{cx:`5`,cy:`6`,r:`3`,key:`1qnov2`}],[`path`,{d:`M12 6h5a2 2 0 0 1 2 2v7`,key:`1yj91y`}],[`path`,{d:`m15 9-3-3 3-3`,key:`1lwv8l`}],[`circle`,{cx:`19`,cy:`18`,r:`3`,key:`1qljk2`}],[`path`,{d:`M12 18H7a2 2 0 0 1-2-2V9`,key:`16sdep`}],[`path`,{d:`m9 15 3 3-3 3`,key:`1m3kbl`}]]),M=e(o(),1),N=E();function P(e){if(e==null)return`—`;let t=Math.round(e/1e3);return t<60?`${t}s`:`${Math.floor(t/60)}m ${t%60}s`}function F(e){return e==null?`—`:e===0?`$0`:e<.01?`$${e.toFixed(4)}`:`$${e.toFixed(3)}`}function I(e){return e==null?`—`:e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}function L({label:e,a:t,b:n,highlight:r}){return(0,N.jsxs)(`div`,{className:`grid grid-cols-3 gap-2 py-2 border-b border-border/20 last:border-0 text-xs`,children:[(0,N.jsx)(`span`,{className:`text-muted-foreground`,children:e}),(0,N.jsx)(`span`,{className:`font-mono text-right ${r===`a`?`text-emerald-400 aurora-light:text-accent-success font-semibold`:``}`,children:t}),(0,N.jsx)(`span`,{className:`font-mono text-right ${r===`b`?`text-emerald-400 aurora-light:text-accent-success font-semibold`:``}`,children:n})]})}function R(e,t,n=!0){return e==null||t==null||e===t?null:n?e<t?`a`:`b`:e>t?`a`:`b`}function ae({jobIds:e,onClose:t}){let{t:i}=O(`jobs`),[a,o]=(0,M.useState)(null),[s,c]=(0,M.useState)(!0),[l,u]=(0,M.useState)(null),{panelRef:d,panelStyle:f,headerHandleProps:p,resizeHandles:m,isFloating:h,guardBackdrop:g}=r();(0,M.useEffect)(()=>{let t=new AbortController;return fetch(`${w()}/jobs/compare?jobIds=${e.join(`,`)}`,{signal:t.signal}).then(e=>{if(!e.ok)throw Error(`HTTP ${e.status}`);return e.json()}).then(e=>{o(e),c(!1)}).catch(e=>{e.name!==`AbortError`&&(u(e.message),c(!1))}),()=>t.abort()},[e]);function _(e,t){return(0,N.jsxs)(`div`,{className:`text-center space-y-1`,children:[(0,N.jsx)(`p`,{className:`text-[10px] text-muted-foreground font-medium uppercase tracking-wider`,children:i(`comparison.jobN`,{n:t+1})}),(0,N.jsx)(`code`,{className:`text-[10px] text-foreground/70 block truncate max-w-[160px] mx-auto`,children:e.command}),(0,N.jsxs)(`div`,{className:`flex items-center justify-center gap-1 text-[10px]`,children:[e.status===`completed`?(0,N.jsx)(n,{className:`w-3 h-3 text-emerald-400 aurora-light:text-accent-success`}):(0,N.jsx)(te,{className:`w-3 h-3 text-rose-400 aurora-light:text-destructive`}),(0,N.jsx)(`span`,{className:`capitalize text-muted-foreground`,children:i(`statusLabel.${e.status}`,{defaultValue:e.status})})]}),(0,N.jsx)(`p`,{className:`text-[10px] text-muted-foreground font-mono`,children:e.id.slice(0,8)})]})}return(0,N.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm`,onClick:g(t),children:[(0,N.jsxs)(`div`,{ref:d,className:`w-full max-w-lg rounded-xl border border-border/30 bg-popover p-5 shadow-xl space-y-4 mx-4`,onClick:e=>e.stopPropagation(),style:f,children:[(0,N.jsxs)(`div`,{className:`flex items-center justify-between ${h?`cursor-grab active:cursor-grabbing`:``}`,...p,children:[(0,N.jsx)(`h2`,{className:`text-sm font-semibold`,children:i(`comparison.title`)}),(0,N.jsx)(`button`,{type:`button`,onClick:t,className:`text-muted-foreground hover:text-foreground transition-colors`,children:(0,N.jsx)(T,{className:`w-4 h-4`})})]}),s&&(0,N.jsx)(`div`,{className:`space-y-2`,children:[0,1,2,3].map(e=>(0,N.jsx)(`div`,{className:`h-8 bg-muted/20 rounded animate-pulse`},e))}),l&&(0,N.jsx)(`p`,{className:`text-xs text-red-400 aurora-light:text-destructive`,children:i(`comparison.loadFailed`,{error:l})}),a&&(()=>{let[e,t]=a.jobs,n=R(e.durationMs,t.durationMs,!0),r=R(e.totalCostUsd,t.totalCostUsd,!0),o=R(e.tokensOut==null?null:e.tokensOut,t.tokensOut==null?null:t.tokensOut,!0);return(0,N.jsxs)(`div`,{children:[(0,N.jsxs)(`div`,{className:`grid grid-cols-3 gap-2 pb-3 border-b border-border/30 mb-1`,children:[(0,N.jsx)(`div`,{}),_(e,0),_(t,1)]}),(0,N.jsx)(L,{label:i(`comparison.duration`),a:P(e.durationMs),b:P(t.durationMs),highlight:n}),(0,N.jsx)(L,{label:i(`comparison.cost`),a:F(e.totalCostUsd),b:F(t.totalCostUsd),highlight:r}),(0,N.jsx)(L,{label:i(`comparison.tokensOut`),a:I(e.tokensOut),b:I(t.tokensOut),highlight:o}),(0,N.jsx)(L,{label:i(`comparison.tokensIn`),a:I(e.tokensIn),b:I(t.tokensIn),highlight:null}),(0,N.jsx)(L,{label:i(`comparison.cacheRead`),a:I(e.tokensCacheRead),b:I(t.tokensCacheRead),highlight:null}),(0,N.jsx)(L,{label:i(`comparison.model`),a:e.model??`—`,b:t.model??`—`,highlight:null}),(0,N.jsx)(L,{label:i(`comparison.phasesDone`),a:e.phasesCompleted.length>0?e.phasesCompleted.join(`, `):`—`,b:t.phasesCompleted.length>0?t.phasesCompleted.join(`, `):`—`,highlight:null})]})})(),a&&(0,N.jsx)(`p`,{className:`text-[10px] text-muted-foreground/60 text-center`,children:i(`comparison.betterValueHint`)})]}),(0,N.jsx)(A,{handles:m})]})}var oe={running:{variant:`running`,labelKey:`statusLabel.running`,tooltipKey:`statusTooltip.running`},completed:{variant:`success`,labelKey:`statusLabel.done`,tooltipKey:`statusTooltip.completed`},failed:{variant:`failed`,labelKey:`statusLabel.failed`,tooltipKey:`statusTooltip.failed`},canceled:{variant:`canceled`,labelKey:`statusLabel.canceled`,tooltipKey:`statusTooltip.canceled`},queued:{variant:`queued`,labelKey:`statusLabel.queued`,tooltipKey:`statusTooltip.queuedToRun`},zombie_terminated:{variant:`failed`,labelKey:`statusLabel.zombie`,tooltipKey:`statusTooltip.zombie`},skipped:{variant:`warning`,labelKey:`statusLabel.skipped`,tooltipKey:`statusTooltip.skipped`}},se=[`running`,`completed`,`failed`,`canceled`,`zombie_terminated`,`queued`,`skipped`],z={critical:{className:`bg-red-500/15 aurora-light:bg-destructive/10 text-red-400 aurora-light:text-destructive border-red-500/30 aurora-light:border-destructive/30`,labelKey:`recent.priority.critical`},high:{className:`bg-orange-500/15 aurora-light:bg-accent-warning/10 text-orange-400 aurora-light:text-accent-warning border-orange-500/30 aurora-light:border-accent-warning/30`,labelKey:`recent.priority.high`},normal:{className:``,labelKey:`recent.priority.normal`},low:{className:`bg-gray-500/15 aurora-light:bg-muted text-gray-400 aurora-light:text-muted-foreground border-gray-500/30 aurora-light:border-border`,labelKey:`recent.priority.low`}};function ce(e){return e==null||e===0?null:e<.01?`$${e.toFixed(4)}`:`$${e.toFixed(3)}`}function le(e,t){if(!t)return null;let n=new Date(t).getTime()-new Date(e).getTime();if(n<0)return null;let r=Math.round(n/1e3);if(r<60)return`${r}s`;let i=Math.floor(r/60),a=r%60;return i<60?`${i}m ${a}s`:`${Math.floor(i/60)}h ${i%60}m`}function ue(e){return e==null||e===0?null:e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}function de(e){try{return D(new Date(e),{addSuffix:!0,locale:d()})}catch{return e}}var B=10;function V({jobs:e,isLoading:n,onJobsCleared:o,onProposalClick:c,onProposalDelete:l}){let{t:d}=O(`jobs`),S=_(),{activeProjectId:te,projects:ne}=y(),T=ne.find(e=>e.id===te)?.provider,[E,D]=(0,M.useState)(null),[k,j]=(0,M.useState)(``),[P,F]=(0,M.useState)(``),[I,L]=(0,M.useState)(!1),[R,V]=(0,M.useState)(``),[H,U]=(0,M.useState)(``),[W,G]=(0,M.useState)(!1),[K,q]=(0,M.useState)(null),[J,fe]=(0,M.useState)(B),[Y,pe]=(0,M.useState)(!1),[X,Z]=(0,M.useState)([]),[me,Q]=(0,M.useState)(null),{panelRef:he,panelStyle:ge,headerHandleProps:_e,resizeHandles:ve,isFloating:ye,guardBackdrop:be}=r();(0,M.useEffect)(()=>{fe(B)},[e.length]);function xe(){pe(e=>!e),Z([])}function Se(e){Z(t=>{if(t.includes(e))return t.filter(t=>t!==e);if(t.length>=2)return t;let n=[...t,e];return n.length===2&&Q(n),n})}let $=e.filter(e=>!(E&&e.status!==E||k&&e.started_at<k||P&&e.started_at>`${P}T23:59:59`)),Ce=e.filter(e=>!(R&&e.started_at<R||H&&e.started_at>`${H}T23:59:59`)).length;async function we(e){G(!0);try{let t={};e===`range`&&(R&&(t.from=R),H&&(t.to=H));let n=await fetch(`${w()}/jobs`,{method:`DELETE`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(n.ok){let e=await n.json();x.success(d(`recent.toast.cleared`,{count:e.deleted})),L(!1),V(``),U(``),o?.()}else x.error(d(`recent.toast.clearFailed`))}catch{x.error(d(`recent.toast.networkError`))}finally{G(!1)}}return n?(0,N.jsx)(`div`,{className:`rounded-lg border border-border/40 bg-card/50 p-4 space-y-1`,children:[0,1,2].map(e=>(0,N.jsx)(`div`,{className:`h-9 bg-muted/30 rounded-md animate-pulse`},e))}):e.length===0?(0,N.jsxs)(`div`,{className:`rounded-lg border border-dashed border-border/40 bg-card/50 p-8 text-center space-y-2`,children:[(0,N.jsx)(a,{className:`w-8 h-8 text-muted-foreground/30 mx-auto`}),(0,N.jsx)(`p`,{className:`text-sm font-medium text-muted-foreground`,children:d(`recent.emptyTitle`)}),(0,N.jsx)(`p`,{className:`text-xs text-muted-foreground/60`,children:d(`recent.emptyDescription`)})]}):(0,N.jsxs)(`div`,{className:`rounded-lg border border-border/40 bg-card/50 p-4 space-y-2`,children:[(0,N.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,N.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,N.jsx)(`button`,{type:`button`,onClick:()=>D(null),className:`px-2 py-0.5 rounded text-[10px] font-medium transition-colors ${E===null?`bg-accent text-foreground`:`text-muted-foreground hover:text-foreground hover:bg-accent/50`}`,children:d(`recent.filterAll`,{count:e.length})}),se.map(t=>{let n=e.filter(e=>e.status===t).length;return n===0?null:(0,N.jsx)(`button`,{type:`button`,onClick:()=>D(E===t?null:t),className:`px-2 py-0.5 rounded text-[10px] font-medium capitalize transition-colors ${E===t?`bg-accent text-foreground`:`text-muted-foreground hover:text-foreground hover:bg-accent/50`}`,children:d(`recent.filterStatus`,{status:d(`statusName.${t}`),count:n})},t)})]}),(0,N.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,N.jsx)(`input`,{type:`date`,value:k,onChange:e=>j(e.target.value),className:`h-6 rounded border border-border bg-input px-1.5 text-[10px] text-foreground`,title:d(`recent.fromDate`)}),(0,N.jsx)(`input`,{type:`date`,value:P,onChange:e=>F(e.target.value),className:`h-6 rounded border border-border bg-input px-1.5 text-[10px] text-foreground`,title:d(`recent.toDate`)}),(k||P)&&(0,N.jsx)(`button`,{type:`button`,onClick:()=>{j(``),F(``)},className:`text-[10px] text-muted-foreground hover:text-foreground transition-colors`,children:d(`recent.clear`)}),(0,N.jsxs)(i,{children:[(0,N.jsx)(t,{asChild:!0,children:(0,N.jsx)(v,{variant:`ghost`,size:`sm`,className:`h-6 w-6 p-0 transition-colors ${Y?`text-foreground bg-accent`:`text-muted-foreground hover:text-foreground`}`,onClick:xe,children:(0,N.jsx)(ie,{className:`w-3.5 h-3.5`})})}),(0,N.jsx)(m,{children:d(Y?`recent.exitCompareMode`:`recent.compareTwoJobs`)})]}),(0,N.jsxs)(i,{children:[(0,N.jsx)(t,{asChild:!0,children:(0,N.jsx)(v,{variant:`ghost`,size:`sm`,className:`h-6 w-6 p-0 text-muted-foreground hover:text-destructive`,onClick:()=>L(!0),children:(0,N.jsx)(b,{className:`w-3.5 h-3.5`})})}),(0,N.jsx)(m,{children:d(`recent.clearJobs`)})]})]})]}),Y&&(0,N.jsxs)(`div`,{className:`flex items-center justify-between rounded-md bg-accent/40 px-3 py-1.5 text-[10px] text-muted-foreground`,children:[(0,N.jsxs)(`span`,{children:[X.length===0&&d(`recent.selectTwoToCompare`),X.length===1&&d(`recent.selectOneMore`),X.length===2&&d(`recent.readyToCompare`)]}),X.length===2&&(0,N.jsx)(`button`,{type:`button`,className:`text-[10px] font-medium text-foreground hover:underline`,onClick:()=>Q(X),children:d(`recent.compareAction`)})]}),(0,N.jsxs)(`div`,{className:`flex items-center gap-3 px-3 py-1 text-[10px] font-medium text-muted-foreground uppercase tracking-wider`,children:[(0,N.jsx)(`span`,{className:`w-14`,children:d(`recent.colStatus`)}),(0,N.jsx)(`span`,{className:`flex-1 min-w-0`,children:d(`recent.colCommand`)}),(0,N.jsxs)(`div`,{className:`flex items-center gap-3 shrink-0`,children:[(0,N.jsx)(`span`,{className:`w-14 text-right`,children:d(`recent.colDuration`)}),(0,N.jsx)(`span`,{className:`w-12 text-right`,children:d(`recent.colTokens`)}),(0,N.jsx)(`span`,{className:`w-12 text-right`,children:d(`recent.colCost`)}),(0,N.jsx)(`span`,{className:`w-20 text-right`,children:d(`recent.colStarted`)})]})]}),(0,N.jsx)(`div`,{className:`space-y-0.5`,children:$.slice(0,J).map(e=>{let n=oe[e.status]??oe.queued,r=ce(e.total_cost_usd),a=le(e.started_at,e.finished_at),o=ue((e.tokens_in??0)+(e.tokens_out??0)+(e.tokens_cache_read??0)+(e.tokens_cache_create??0)||null),s=e.id.startsWith(`proposal:`),l=s?e.id.replace(`proposal:`,``):null,u=X.includes(e.id),f=Y&&!s&&X.length===2&&!u;return(0,N.jsxs)(`div`,{role:`button`,tabIndex:0,className:`flex items-center gap-3 px-3 py-2 rounded-md transition-colors cursor-pointer group ${u?`bg-accent/70 ring-1 ring-border`:f?`opacity-40 cursor-not-allowed`:`hover:bg-accent/50`}`,onClick:()=>{if(Y&&!s){Se(e.id);return}s&&l?c?.(l):S(`/jobs/${e.id}`)},children:[(0,N.jsxs)(i,{children:[(0,N.jsx)(t,{asChild:!0,children:(0,N.jsx)(`div`,{children:(0,N.jsx)(ee,{variant:n.variant,children:d(n.labelKey)})})}),(0,N.jsx)(m,{children:d(n.tooltipKey)})]}),e.priority&&e.priority!==`normal`&&(0,N.jsx)(`span`,{className:`inline-flex items-center rounded px-1.5 py-0.5 text-[9px] font-medium border ${z[e.priority].className}`,children:d(z[e.priority].labelKey)}),e.profile_name&&(0,N.jsxs)(i,{children:[(0,N.jsx)(t,{asChild:!0,children:(0,N.jsx)(`span`,{className:`inline-flex items-center rounded px-1.5 py-0.5 text-[9px] font-medium border border-accent-primary/40 bg-accent-primary/10 text-accent-primary/90`,children:e.profile_name})}),(0,N.jsx)(m,{children:d(`recent.profileTooltip`,{name:e.profile_name})})]}),(0,N.jsxs)(`div`,{className:`flex items-center gap-1 flex-1 min-w-0`,children:[e.pipeline_id&&(0,N.jsxs)(i,{children:[(0,N.jsx)(t,{asChild:!0,children:(0,N.jsx)(C,{className:`w-3 h-3 text-accent-primary/60 shrink-0`})}),(0,N.jsxs)(m,{children:[d(`recent.pipelinePart`),e.depends_on_job_id&&` ${d(`recent.pipelineDependsOn`)}`,e.skip_reason&&` — ${e.skip_reason}`]})]}),(0,N.jsx)(`code`,{className:`text-xs text-foreground/80 truncate`,children:re(e.command,T)})]}),(0,N.jsxs)(`div`,{className:`flex items-center gap-3 text-[10px] text-muted-foreground shrink-0`,children:[(0,N.jsx)(`span`,{className:`w-14 text-right`,children:a??`—`}),(0,N.jsx)(`span`,{className:`w-12 text-right`,children:o?`${o}`:`—`}),(0,N.jsx)(`span`,{className:`w-12 text-right`,children:r??`—`}),(0,N.jsx)(`span`,{className:`w-20 text-right`,children:de(e.started_at)}),s&&l&&(0,N.jsx)(`button`,{type:`button`,className:`w-4 h-4 md:opacity-0 md:group-hover:opacity-100 text-muted-foreground hover:text-destructive transition-all`,onClick:e=>{e.stopPropagation(),q(l)},title:d(`recent.deleteProposal`),children:(0,N.jsx)(b,{className:`w-3 h-3`})})]})]},e.id)})}),$.length>J&&(0,N.jsx)(`div`,{className:`pt-1 text-center`,children:(0,N.jsx)(`button`,{type:`button`,onClick:()=>fe(e=>e+B),className:`text-[10px] text-muted-foreground hover:text-foreground transition-colors px-3 py-1 rounded hover:bg-accent/50`,children:d(`recent.loadMore`,{count:$.length-J})})}),I&&(0,N.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm`,onClick:be(()=>L(!1)),children:[(0,N.jsxs)(`div`,{ref:he,className:`w-80 rounded-xl border border-border/30 bg-popover p-4 shadow-lg space-y-4`,onClick:e=>e.stopPropagation(),style:ge,children:[(0,N.jsxs)(`div`,{..._e,className:ye?`cursor-grab active:cursor-grabbing`:void 0,children:[(0,N.jsx)(`h3`,{className:`text-sm font-semibold`,children:d(`recent.clearModal.title`)}),(0,N.jsx)(`p`,{className:`text-xs text-muted-foreground mt-0.5`,children:d(`recent.clearModal.jobsInHistory`,{count:e.length})})]}),(0,N.jsx)(v,{variant:`destructive`,size:`sm`,className:`w-full`,disabled:W,onClick:()=>we(`all`),children:d(`recent.clearModal.clearAll`,{count:e.length})}),(0,N.jsxs)(`div`,{className:`space-y-2`,children:[(0,N.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:d(`recent.clearModal.orByRange`)}),(0,N.jsxs)(`div`,{className:`flex gap-2`,children:[(0,N.jsx)(`input`,{type:`date`,value:R,onChange:e=>V(e.target.value),className:`flex-1 h-7 rounded-md border border-border bg-input px-2 text-xs text-foreground`,placeholder:d(`recent.clearModal.fromPlaceholder`)}),(0,N.jsx)(`input`,{type:`date`,value:H,onChange:e=>U(e.target.value),className:`flex-1 h-7 rounded-md border border-border bg-input px-2 text-xs text-foreground`,placeholder:d(`recent.clearModal.toPlaceholder`)})]}),(0,N.jsx)(v,{variant:`outline`,size:`sm`,className:`w-full`,disabled:W||!R&&!H,onClick:()=>we(`range`),children:R||H?d(`recent.clearModal.clearInRange`,{count:Ce}):d(`recent.clearModal.clearRange`)})]}),(0,N.jsx)(v,{variant:`ghost`,size:`sm`,className:`w-full`,onClick:()=>L(!1),children:d(`common:actions.cancel`)})]}),(0,N.jsx)(A,{handles:ve})]}),(0,N.jsx)(p,{open:K!==null,onOpenChange:e=>!e&&q(null),children:(0,N.jsxs)(h,{className:`max-w-sm`,children:[(0,N.jsxs)(f,{children:[(0,N.jsx)(g,{children:d(`recent.deleteProposalConfirm.title`)}),(0,N.jsx)(s,{children:d(`recent.deleteProposalConfirm.description`)})]}),(0,N.jsxs)(u,{children:[(0,N.jsx)(v,{variant:`ghost`,size:`sm`,onClick:()=>q(null),children:d(`common:actions.cancel`)}),(0,N.jsx)(v,{variant:`destructive`,size:`sm`,onClick:()=>{K&&l?.(K),q(null)},children:d(`common:actions.delete`)})]})]})}),me&&(0,N.jsx)(ae,{jobIds:me,onClose:()=>{Q(null),Z([]),pe(!1)}})]})}function H(){let{t:e}=O(`jobs`),{activeProjectId:t}=y(),{recentJobs:n}=ne(t),{data:r,isFirstLoad:i,refresh:a}=c({namespace:`jobs`,projectId:t,initialValue:n,fetcher:async()=>{let e=await fetch(`${w()}/jobs?limit=10`);return e.ok?(await e.json()).jobs:[]},pollInterval:1e4}),{data:o}=c({namespace:`proposals`,projectId:t,initialValue:[],fetcher:async()=>{let e=await fetch(`${w()}/propose?limit=10`);return e.ok?(await e.json()).proposals:[]},pollInterval:1e4}),s={input:`queued`,exploring:`running`,review:`running`,refining:`running`,creating_issue:`running`,created:`completed`,cancelled:`canceled`},l=o.map(e=>({id:`proposal:${e.id}`,command:`/specrails:propose-feature ${e.idea.length>60?e.idea.slice(0,57)+`...`:e.idea}`,started_at:e.created_at,status:s[e.status]??`queued`})),d=[...r,...l].sort((e,t)=>new Date(t.started_at).getTime()-new Date(e.started_at).getTime()),[m,_]=(0,M.useState)(null),b=(0,M.useCallback)(async e=>{try{let t=await fetch(`${w()}/propose/${e}`);if(!t.ok)return;_((await t.json()).proposal)}catch{}},[]),C=(0,M.useCallback)(async t=>{try{(await fetch(`${w()}/propose/${t}`,{method:`DELETE`})).ok&&(x.success(e(`page.proposalDeleted`)),a())}catch{}},[a,e]);return(0,N.jsxs)(`div`,{className:`max-w-4xl mx-auto px-4 py-6`,children:[(0,N.jsxs)(`div`,{className:`flex items-center justify-between mb-4`,children:[(0,N.jsx)(`h1`,{className:`text-sm font-semibold`,children:e(`page.title`)}),(0,N.jsx)(j,{baseUrl:`${w()}/jobs/export`,label:e(`page.exportJobs`)})]}),(0,N.jsx)(V,{jobs:d,isLoading:i,onJobsCleared:a,onProposalClick:b,onProposalDelete:C}),(0,N.jsx)(p,{open:m!==null,onOpenChange:e=>!e&&_(null),children:(0,N.jsx)(h,{className:`max-w-3xl glass-card`,children:m&&(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(f,{children:(0,N.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,N.jsx)(g,{className:`flex-1 min-w-0`,children:e(`page.proposal.title`)}),(0,N.jsx)(ee,{variant:m.status===`created`?`success`:m.status===`cancelled`?`destructive`:`secondary`,children:m.status})]})}),(0,N.jsx)(`div`,{className:`text-xs text-muted-foreground bg-muted/20 rounded px-2 py-1 italic`,children:m.idea}),m.result_markdown?(0,N.jsx)(`div`,{className:`max-h-[400px] overflow-y-auto rounded-lg px-3 py-2 text-xs bg-muted/40`,children:(0,N.jsx)(`div`,{className:`prose prose-invert prose-xs max-w-none prose-p:my-1 prose-headings:mt-2 prose-headings:mb-1 prose-headings:text-sm prose-headings:font-semibold prose-ul:my-1 prose-ol:my-1 prose-li:my-0 prose-code:text-cyan-300 prose-code:text-[10px] prose-code:bg-muted/40 prose-code:px-1 prose-code:py-0.5 prose-code:rounded text-foreground/80`,children:(0,N.jsx)(k,{remarkPlugins:[S],children:m.result_markdown})})}):(0,N.jsx)(`p`,{className:`text-xs text-muted-foreground py-4 text-center`,children:e(`page.proposal.noContent`)}),m.issue_url&&(0,N.jsxs)(`div`,{className:`text-xs`,children:[e(`page.proposal.githubIssue`),` `,(0,N.jsx)(`a`,{href:m.issue_url,target:`_blank`,rel:`noopener noreferrer`,className:`text-accent-primary hover:underline`,children:m.issue_url})]}),(0,N.jsxs)(u,{children:[(0,N.jsx)(v,{variant:`destructive`,size:`sm`,onClick:()=>{C(m.id),_(null)},children:e(`common:actions.delete`)}),(0,N.jsx)(v,{variant:`ghost`,size:`sm`,onClick:()=>_(null),children:e(`common:actions.close`)})]})]})})})]})}export{H as default};