specrails-desktop 2.64.2 → 2.65.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 (1116) hide show
  1. package/README.md +1 -1
  2. package/cli/dist/status.js +3 -0
  3. package/client/dist/assets/ActivityFeedPage-ByVKYII-.js +1 -0
  4. package/client/dist/assets/AgentBrowserCapture-BGUTjhUr.js +1 -0
  5. package/client/dist/assets/AgentModeAnalyticsPane-CtOLDDjB.js +2 -0
  6. package/client/dist/assets/AgentModeCodePane-CDhUKarT.js +2 -0
  7. package/client/dist/assets/AgentModeJobsPane-BAa_oEHJ.js +1 -0
  8. package/client/dist/assets/AgentsPage-D32hG4Ve.js +120 -0
  9. package/client/dist/assets/AnalyticsPage-BU50zeG6.js +5 -0
  10. package/client/dist/assets/BudgetCard-DP_jxwaD.js +55 -0
  11. package/client/dist/assets/CodePage-jiYnKGpp.js +3 -0
  12. package/client/dist/assets/CostValue-Bvn8674q.js +1 -0
  13. package/client/dist/assets/DesktopAnalyticsPage-CF__H4e3.js +1 -0
  14. package/client/dist/assets/DocView-RrAp70zp.js +11 -0
  15. package/client/dist/assets/DocsDialog-DkqHU-JF.js +1 -0
  16. package/client/dist/assets/DocsPage-C6X089zC.js +1 -0
  17. package/client/dist/assets/ExportDropdown-C5-o8y3K.js +1 -0
  18. package/client/dist/assets/HelpHint-Crf9_uoR.js +1 -0
  19. package/client/dist/assets/IntegrationsPage-aflU3KHK.js +1 -0
  20. package/client/dist/assets/InteractiveJobComposer-CEMMhyyJ.js +19 -0
  21. package/client/dist/assets/JobDetailModal-BVJ6hyRs.js +1 -0
  22. package/client/dist/assets/JobDetailPage-DHzBUmox.js +1 -0
  23. package/client/dist/assets/JobsPage-o-LAqkwC.js +1 -0
  24. package/client/dist/assets/LoopBuilderPage-DbSVmXBM.js +1 -0
  25. package/client/dist/assets/LoopPreviewModal-DbJcVyN1.js +1 -0
  26. package/client/dist/assets/{LoopWindowSurface-DE0v2K1p.js → LoopWindowSurface-Co1ZK26V.js} +1 -1
  27. package/client/dist/assets/LoopsPage-C4lgkPXB.js +2 -0
  28. package/client/dist/assets/MinimizedChatsContext-742ypO8n.js +1 -0
  29. package/client/dist/assets/PluginsPage-Acks9ges.js +2 -0
  30. package/client/dist/assets/RailTrack-BfLmBzBh.js +1 -0
  31. package/client/dist/assets/{RepositoryScopeSelector-2eSqR9WK.js → RepositoryScopeSelector-DcxbKI9w.js} +1 -1
  32. package/client/dist/assets/ReviewPacketPage-CAVSIOAJ.js +7 -0
  33. package/client/dist/assets/TemplatePreviewModal-C23SYCTm.js +1 -0
  34. package/client/dist/assets/TicketDetailModalContext-B-Gtm6Ob.js +23 -0
  35. package/client/dist/assets/Trans-C6J0cLyh.js +1 -0
  36. package/client/dist/assets/a11y-prefs-BqoP5goK.js +1 -0
  37. package/client/dist/assets/activity-BBWfoUOG.js +1 -0
  38. package/client/dist/assets/activity-BM_skann.js +1 -0
  39. package/client/dist/assets/activity-Cevl82ke.js +1 -0
  40. package/client/dist/assets/activity-CmACk5W5.js +1 -0
  41. package/client/dist/assets/activity-D9LBw3PQ.js +1 -0
  42. package/client/dist/assets/activity-Dspbb9lz.js +1 -0
  43. package/client/dist/assets/activity-FPjYIjv9.js +1 -0
  44. package/client/dist/assets/activity-nLCKMUKt.js +1 -0
  45. package/client/dist/assets/addspec-BI4jDMhA.js +1 -0
  46. package/client/dist/assets/addspec-BldTv7Tl.js +1 -0
  47. package/client/dist/assets/addspec-Cdq-2EcC.js +1 -0
  48. package/client/dist/assets/addspec-DH5M16BQ.js +1 -0
  49. package/client/dist/assets/addspec-DOFo9pD5.js +1 -0
  50. package/client/dist/assets/addspec-DPkwhdmL.js +1 -0
  51. package/client/dist/assets/addspec-Dzy12Pv3.js +1 -0
  52. package/client/dist/assets/addspec-skTs6EEW.js +1 -0
  53. package/client/dist/assets/agent-B_UEUy7Y.js +1 -0
  54. package/client/dist/assets/agent-BarjlhTA.js +1 -0
  55. package/client/dist/assets/agent-BfqIITo5.js +1 -0
  56. package/client/dist/assets/agent-Bt9a7Kyj.js +1 -0
  57. package/client/dist/assets/agent-C3689RwP.js +1 -0
  58. package/client/dist/assets/agent-CrmboTAi.js +1 -0
  59. package/client/dist/assets/agent-DcsoTnuE.js +1 -0
  60. package/client/dist/assets/agent-GDZoYwd4.js +1 -0
  61. package/client/dist/assets/{agentRuntime-es2ymSl-.js → agentRuntime-BYH70bKY.js} +1 -1
  62. package/client/dist/assets/agentRuntime-BijLh8I9.js +1 -0
  63. package/client/dist/assets/{agentRuntime-BzuwQQgn.js → agentRuntime-BvyuETPe.js} +1 -1
  64. package/client/dist/assets/{agentRuntime-BDvbJMmS.js → agentRuntime-C2WI6HQh.js} +1 -1
  65. package/client/dist/assets/{agentRuntime-BKJfv5YD.js → agentRuntime-CZPIlQsr.js} +1 -1
  66. package/client/dist/assets/{agentRuntime-DiCldqGG.js → agentRuntime-D2dDvCyJ.js} +1 -1
  67. package/client/dist/assets/agentRuntime-DWZedEbn.js +1 -0
  68. package/client/dist/assets/agentRuntime-DkIruUNw.js +1 -0
  69. package/client/dist/assets/agents-35_PDKx9.js +1 -0
  70. package/client/dist/assets/agents-8fZnHhEQ.js +1 -0
  71. package/client/dist/assets/agents-Bgimtw8z.js +1 -0
  72. package/client/dist/assets/agents-C4P160Us.js +1 -0
  73. package/client/dist/assets/agents-Clg67zbp.js +1 -0
  74. package/client/dist/assets/agents-DJfF4o6G.js +1 -0
  75. package/client/dist/assets/agents-Dc9-Y5cw.js +1 -0
  76. package/client/dist/assets/agents-EN1Zl4YZ.js +1 -0
  77. package/client/dist/assets/agentstudio-Bm4-NYaG.js +1 -0
  78. package/client/dist/assets/agentstudio-CD1fuj2o.js +1 -0
  79. package/client/dist/assets/agentstudio-CQGWFSst.js +1 -0
  80. package/client/dist/assets/agentstudio-CqVSb65S.js +1 -0
  81. package/client/dist/assets/agentstudio-DIE_HjsX.js +1 -0
  82. package/client/dist/assets/agentstudio-D_OmQK-k.js +1 -0
  83. package/client/dist/assets/agentstudio-Djz9aUfb.js +1 -0
  84. package/client/dist/assets/agentstudio-Qa3v9o5J.js +1 -0
  85. package/client/dist/assets/{aiedit-DNXxq_Dr.js → aiedit-1VzLs37W.js} +1 -1
  86. package/client/dist/assets/{aiedit-DCjA7jLJ.js → aiedit-BNp6GSik.js} +1 -1
  87. package/client/dist/assets/{aiedit-BoG24nlg.js → aiedit-BOY5xRPi.js} +1 -1
  88. package/client/dist/assets/{aiedit-iIjz2_Qk.js → aiedit-BrqMZvbc.js} +1 -1
  89. package/client/dist/assets/{aiedit-CjlSRQVP.js → aiedit-CVgtl7hm.js} +1 -1
  90. package/client/dist/assets/{aiedit-DQ-0_pvE.js → aiedit-CrFW9Jd2.js} +1 -1
  91. package/client/dist/assets/{aiedit-olnv3QSt.js → aiedit-YE2lILp7.js} +1 -1
  92. package/client/dist/assets/{aiedit-B0KUbpB6.js → aiedit-iA_R1AVQ.js} +1 -1
  93. package/client/dist/assets/analytics-3w0t-4ic.js +1 -0
  94. package/client/dist/assets/analytics-BRi4KQD6.js +1 -0
  95. package/client/dist/assets/analytics-BtjAqzke.js +1 -0
  96. package/client/dist/assets/analytics-COSQ1h47.js +1 -0
  97. package/client/dist/assets/analytics-CP2HjESk.js +1 -0
  98. package/client/dist/assets/analytics-DY65TC62.js +1 -0
  99. package/client/dist/assets/analytics-Den_vvxn.js +1 -0
  100. package/client/dist/assets/analytics-LmBS96O8.js +1 -0
  101. package/client/dist/assets/api-DOGbyfTO.js +2 -0
  102. package/client/dist/assets/builder-BMVvSr4v.js +1 -0
  103. package/client/dist/assets/builder-BN-MuLZt.js +1 -0
  104. package/client/dist/assets/builder-BQOZi4CF.js +1 -0
  105. package/client/dist/assets/builder-BjUPjsyu.js +1 -0
  106. package/client/dist/assets/builder-BoBtN18T.js +1 -0
  107. package/client/dist/assets/builder-C5g5NhxL.js +1 -0
  108. package/client/dist/assets/builder-RUHXw3yx.js +1 -0
  109. package/client/dist/assets/builder-fyS_AiyC.js +1 -0
  110. package/client/dist/assets/button-CHPkroew.js +1 -0
  111. package/client/dist/assets/chat-C9L5T7KI.js +1 -0
  112. package/client/dist/assets/chevron-right-CwMAj0w_.js +1 -0
  113. package/client/dist/assets/chevron-up-BAMuP0XD.js +1 -0
  114. package/client/dist/assets/chunk-OB3PAWPO-BBaq6pUk.js +3 -0
  115. package/client/dist/assets/code-4le5IIbf.js +1 -0
  116. package/client/dist/assets/code-B-jCVIbm.js +1 -0
  117. package/client/dist/assets/code-BRfrn5ix.js +1 -0
  118. package/client/dist/assets/code-CC9NCrDM.js +1 -0
  119. package/client/dist/assets/code-CK6pm8wY.js +1 -0
  120. package/client/dist/assets/code-DDiOzd6c.js +1 -0
  121. package/client/dist/assets/code-tGifiyf5.js +1 -0
  122. package/client/dist/assets/code-xkn8kQTg.js +1 -0
  123. package/client/dist/assets/commands-Bv1QshHR.js +1 -0
  124. package/client/dist/assets/commands-BvxTxboW.js +1 -0
  125. package/client/dist/assets/commands-C5ORR0fO.js +1 -0
  126. package/client/dist/assets/commands-CBKMFSTV.js +1 -0
  127. package/client/dist/assets/commands-CFJIRsJv.js +1 -0
  128. package/client/dist/assets/commands-D9o3ZcXl.js +1 -0
  129. package/client/dist/assets/commands-DNox0Edk.js +1 -0
  130. package/client/dist/assets/commands-DmIUMLdV.js +1 -0
  131. package/client/dist/assets/common-5H4TkaoI.js +1 -0
  132. package/client/dist/assets/common-9S3OdPjx.js +1 -0
  133. package/client/dist/assets/common-BqnwIcjs.js +1 -0
  134. package/client/dist/assets/common-CQP3VafS.js +1 -0
  135. package/client/dist/assets/common-CZnAfkB2.js +1 -0
  136. package/client/dist/assets/common-D5sNttV4.js +1 -0
  137. package/client/dist/assets/common-k_qX9nlv.js +1 -0
  138. package/client/dist/assets/common-s4HIi9XI.js +1 -0
  139. package/client/dist/assets/compass-B7guwBlY.js +1 -0
  140. package/client/dist/assets/confirm-dialog-ChZdHL3Q.js +1 -0
  141. package/client/dist/assets/copy-DOPlLymH.js +1 -0
  142. package/client/dist/assets/core-BozBzB6Y.js +1 -0
  143. package/client/dist/assets/dashboard-6zGLGcEz.js +1 -0
  144. package/client/dist/assets/dashboard-8Gi0FBDq.js +1 -0
  145. package/client/dist/assets/dashboard-B7E5YrSy.js +1 -0
  146. package/client/dist/assets/dashboard-BhdKV8xK.js +1 -0
  147. package/client/dist/assets/dashboard-Bu3zzH_s.js +1 -0
  148. package/client/dist/assets/dashboard-Ce_6rELA.js +1 -0
  149. package/client/dist/assets/dashboard-DWY-oz8P.js +1 -0
  150. package/client/dist/assets/dashboard-gUzlWk0o.js +1 -0
  151. package/client/dist/assets/date-input-Cdlr8kHz.js +1 -0
  152. package/client/dist/assets/dialog-C23lB2iP.js +5 -0
  153. package/client/dist/assets/dist-Di-oOFkX.js +1 -0
  154. package/client/dist/assets/dist-js-CBmS6MsJ.js +1 -0
  155. package/client/dist/assets/{dist-js-Rlh4FLH5.js → dist-js-DaJmKapi.js} +1 -1
  156. package/client/dist/assets/dropdown-menu-Bfp2CK6H.js +1 -0
  157. package/client/dist/assets/empty-state-D5w9OWj-.js +1 -0
  158. package/client/dist/assets/es2015-DfnECntk.js +41 -0
  159. package/client/dist/assets/esm-BKF6CE7v.js +1 -0
  160. package/client/dist/assets/event-BEnMLqAi.js +1 -0
  161. package/client/dist/assets/explore--NOz9LCN.js +1 -0
  162. package/client/dist/assets/explore-B2ulH6dO.js +1 -0
  163. package/client/dist/assets/explore-BD-QiLdg.js +1 -0
  164. package/client/dist/assets/explore-BOqd4_1j.js +1 -0
  165. package/client/dist/assets/explore-Be_Zh5zu.js +1 -0
  166. package/client/dist/assets/explore-CLjzPSKo.js +1 -0
  167. package/client/dist/assets/explore-D_-vHm29.js +1 -0
  168. package/client/dist/assets/explore-yEQTF6ro.js +1 -0
  169. package/client/dist/assets/file-text-CNXzL3wj.js +1 -0
  170. package/client/dist/assets/format-BODoFIw6.js +1 -0
  171. package/client/dist/assets/formatDistanceToNow-DLMIOS0N.js +1 -0
  172. package/client/dist/assets/getTimezoneOffsetInMilliseconds-O61feXch.js +1 -0
  173. package/client/dist/assets/git-compare-arrows-Cu6tICCq.js +1 -0
  174. package/client/dist/assets/humanise-command-CB4ybLwq.js +1 -0
  175. package/client/dist/assets/inbox-BLZ8cm6_.js +1 -0
  176. package/client/dist/assets/inbox-BQ3VmNYY.js +1 -0
  177. package/client/dist/assets/inbox-BdcXWCuT.js +1 -0
  178. package/client/dist/assets/inbox-CF1PHjns.js +1 -0
  179. package/client/dist/assets/inbox-CFNPDhso.js +1 -0
  180. package/client/dist/assets/inbox-DIttK_NW.js +1 -0
  181. package/client/dist/assets/inbox-Dfdv1Ykl.js +1 -0
  182. package/client/dist/assets/inbox-JS1inmeO.js +1 -0
  183. package/client/dist/assets/index-4UWY7Xyz.css +2 -0
  184. package/client/dist/assets/index-DHzB0T26.js +120 -0
  185. package/client/dist/assets/integrations-BcKgzgPD.js +1 -0
  186. package/client/dist/assets/integrations-BmX_XyJq.js +1 -0
  187. package/client/dist/assets/integrations-CHpwMjlY.js +1 -0
  188. package/client/dist/assets/integrations-CT3kr8e-.js +1 -0
  189. package/client/dist/assets/integrations-C_5XAkgz.js +1 -0
  190. package/client/dist/assets/integrations-Ct9zLX7N.js +1 -0
  191. package/client/dist/assets/integrations-DEYemxUv.js +1 -0
  192. package/client/dist/assets/integrations-DWvsB_WB.js +1 -0
  193. package/client/dist/assets/{jira-Cq6yvN4q.js → jira-B_ERkFRv.js} +1 -1
  194. package/client/dist/assets/jira-Bn-A5lwD.js +1 -0
  195. package/client/dist/assets/jira-C71Ybnhp.js +1 -0
  196. package/client/dist/assets/jira-CkwjeJz6.js +1 -0
  197. package/client/dist/assets/jira-D9pSLXjI.js +1 -0
  198. package/client/dist/assets/jira-DBRS_lcp.js +1 -0
  199. package/client/dist/assets/jira-DHS6CsKh.js +1 -0
  200. package/client/dist/assets/jira-MInHRUb1.js +1 -0
  201. package/client/dist/assets/jira-api-DHme7Upx.js +1 -0
  202. package/client/dist/assets/jobs-BMLTDo63.js +1 -0
  203. package/client/dist/assets/jobs-BO8q4Mi1.js +1 -0
  204. package/client/dist/assets/jobs-Ck8uOWMM.js +1 -0
  205. package/client/dist/assets/jobs-CyFfPCpg.js +1 -0
  206. package/client/dist/assets/jobs-DT5s4fZ6.js +1 -0
  207. package/client/dist/assets/jobs-DZAgVPcD.js +1 -0
  208. package/client/dist/assets/jobs-b5gPYaKr.js +1 -0
  209. package/client/dist/assets/jobs-xsZK1440.js +1 -0
  210. package/client/dist/assets/launch-forecast-BTa-p3RP.js +1 -0
  211. package/client/dist/assets/{loop-layout-DtxX27Jz.css → loop-layout-DLioOiRN.css} +1 -1
  212. package/client/dist/assets/loop-layout-Sl9cfTvs.js +7 -0
  213. package/client/dist/assets/loops-BEEOVJDR.js +1 -0
  214. package/client/dist/assets/loops-BcrQ2vk7.js +1 -0
  215. package/client/dist/assets/loops-BjWxzJIZ.js +1 -0
  216. package/client/dist/assets/loops-BogV595N.js +1 -0
  217. package/client/dist/assets/loops-CU0BLZiz.js +1 -0
  218. package/client/dist/assets/loops-CrNBgi1G.js +1 -0
  219. package/client/dist/assets/loops-CwalwS_i.js +1 -0
  220. package/client/dist/assets/loops-_TDVN-fX.js +1 -0
  221. package/client/dist/assets/mcp-BNs8gxoL.js +1 -0
  222. package/client/dist/assets/mcp-BvRh_xO5.js +1 -0
  223. package/client/dist/assets/mcp-C2F1pghi.js +1 -0
  224. package/client/dist/assets/mcp-D9RLKAs2.js +1 -0
  225. package/client/dist/assets/mcp-DAghcsR0.js +1 -0
  226. package/client/dist/assets/mcp-DWWAPi1G.js +1 -0
  227. package/client/dist/assets/mcp-DbGSFC3f.js +1 -0
  228. package/client/dist/assets/mcp-FelCicrv.js +1 -0
  229. package/client/dist/assets/narration-C3NBkAR4.js +1 -0
  230. package/client/dist/assets/narration-CkoJq-Lf.js +1 -0
  231. package/client/dist/assets/narration-Cr0NeW9K.js +1 -0
  232. package/client/dist/assets/narration-DJUXOs-W.js +1 -0
  233. package/client/dist/assets/narration-DgL8TMvN.js +1 -0
  234. package/client/dist/assets/narration-DjBafgv0.js +1 -0
  235. package/client/dist/assets/narration-Dle6Iv0c.js +1 -0
  236. package/client/dist/assets/narration-MYlfktga.js +1 -0
  237. package/client/dist/assets/nav-BSQ8KW1c.js +1 -0
  238. package/client/dist/assets/nav-BauVof8Z.js +1 -0
  239. package/client/dist/assets/nav-BfOAH1se.js +1 -0
  240. package/client/dist/assets/nav-D3bOsipX.js +1 -0
  241. package/client/dist/assets/nav-DOMMhlLx.js +1 -0
  242. package/client/dist/assets/nav-DPzVlgZU.js +1 -0
  243. package/client/dist/assets/nav-DZJbFbah.js +1 -0
  244. package/client/dist/assets/nav-D_5aojd2.js +1 -0
  245. package/client/dist/assets/notify-error-BsWANx1T.js +1 -0
  246. package/client/dist/assets/onboarding-BdZQnNm3.js +1 -0
  247. package/client/dist/assets/onboarding-CJQEv1vp.js +1 -0
  248. package/client/dist/assets/onboarding-CWJGYUW3.js +1 -0
  249. package/client/dist/assets/onboarding-ChfYN7dA.js +1 -0
  250. package/client/dist/assets/onboarding-CjvDUR3V.js +1 -0
  251. package/client/dist/assets/onboarding-I6vS-zTB.js +1 -0
  252. package/client/dist/assets/onboarding-dgC_9dTB.js +1 -0
  253. package/client/dist/assets/onboarding-mlXSyKzX.js +1 -0
  254. package/client/dist/assets/origin-03nTuaOb.js +1 -0
  255. package/client/dist/assets/packet-BjpyRnZr.js +1 -0
  256. package/client/dist/assets/packet-BwgG5mBt.js +1 -0
  257. package/client/dist/assets/packet-C3eAUFkV.js +1 -0
  258. package/client/dist/assets/packet-C8wZuSld.js +1 -0
  259. package/client/dist/assets/packet-CNXEy_85.js +1 -0
  260. package/client/dist/assets/packet-DsV5Aa_8.js +1 -0
  261. package/client/dist/assets/packet-aasskOE7.js +1 -0
  262. package/client/dist/assets/packet-phxCc2gJ.js +1 -0
  263. package/client/dist/assets/page-header-BStSHkP8.js +1 -0
  264. package/client/dist/assets/project-repositories-DJPeAVBK.js +1 -0
  265. package/client/dist/assets/{provider-capabilities-lePfeT_Y.js → provider-capabilities-DtwcTme4.js} +1 -1
  266. package/client/dist/assets/recovery-BPDOsC92.js +1 -0
  267. package/client/dist/assets/recovery-BluNHoXM.js +1 -0
  268. package/client/dist/assets/recovery-CRvEmB0C.js +1 -0
  269. package/client/dist/assets/recovery-CeIoRnkR.js +1 -0
  270. package/client/dist/assets/recovery-DHCo8KGi.js +1 -0
  271. package/client/dist/assets/recovery-OxAIpbBF.js +1 -0
  272. package/client/dist/assets/recovery-XXexYGOJ.js +1 -0
  273. package/client/dist/assets/recovery-pITlc--v.js +1 -0
  274. package/client/dist/assets/refresh-cw-DfyTkbsf.js +1 -0
  275. package/client/dist/assets/select-xA3pSmqE.js +1 -0
  276. package/client/dist/assets/settings--yzDbX9r.js +1 -0
  277. package/client/dist/assets/settings-5_heTv8s.js +1 -0
  278. package/client/dist/assets/settings-BSf27MDg.js +1 -0
  279. package/client/dist/assets/settings-BSj6FakR.js +1 -0
  280. package/client/dist/assets/settings-BZDo_8Nn.js +1 -0
  281. package/client/dist/assets/settings-BdWgmNc0.js +1 -0
  282. package/client/dist/assets/settings-DRouxKqb.js +1 -0
  283. package/client/dist/assets/settings-DnWFoY-F.js +1 -0
  284. package/client/dist/assets/setup-BJWy62ri.js +1 -0
  285. package/client/dist/assets/setup-BgKOIuzc.js +1 -0
  286. package/client/dist/assets/setup-BvVIyUlz.js +1 -0
  287. package/client/dist/assets/setup-BxCk2pe1.js +1 -0
  288. package/client/dist/assets/setup-C-xQTL7R.js +1 -0
  289. package/client/dist/assets/setup-CbaVoiwV.js +1 -0
  290. package/client/dist/assets/setup-DxTBkX3P.js +1 -0
  291. package/client/dist/assets/setup-oGoVAzOD.js +1 -0
  292. package/client/dist/assets/specs-7tAb4IKr.js +1 -0
  293. package/client/dist/assets/specs-BUcY4s5v.js +1 -0
  294. package/client/dist/assets/specs-Bk5LeBAA.js +1 -0
  295. package/client/dist/assets/specs-CAA4Lrlg.js +1 -0
  296. package/client/dist/assets/specs-CS091AnA.js +1 -0
  297. package/client/dist/assets/specs-DJ6gmFcK.js +1 -0
  298. package/client/dist/assets/specs-GfCcrBSC.js +1 -0
  299. package/client/dist/assets/specs-xQgyc7WL.js +1 -0
  300. package/client/dist/assets/spending-CVH8VREb.js +1 -0
  301. package/client/dist/assets/square-Co6h5vZg.js +1 -0
  302. package/client/dist/assets/tauri-shell-43ixPGfa.js +2 -0
  303. package/client/dist/assets/terminal-0v9sBylD.js +1 -0
  304. package/client/dist/assets/terminal-AbUAmCxE.js +1 -0
  305. package/client/dist/assets/terminal-BJayIbIP.js +1 -0
  306. package/client/dist/assets/terminal-C2RUlXyi.js +1 -0
  307. package/client/dist/assets/terminal-CMmSb_Nj.js +1 -0
  308. package/client/dist/assets/terminal-DKWjj7HJ.js +1 -0
  309. package/client/dist/assets/terminal-KlFu7_pV.js +1 -0
  310. package/client/dist/assets/terminal-i99yqFvm.js +1 -0
  311. package/client/dist/assets/tickets-846Oq3i3.js +1 -0
  312. package/client/dist/assets/tickets-B5LJTe_b.js +1 -0
  313. package/client/dist/assets/tickets-Bfo2GGmH.js +1 -0
  314. package/client/dist/assets/tickets-BhdZ1yY2.js +1 -0
  315. package/client/dist/assets/tickets-CgjWJHAW.js +1 -0
  316. package/client/dist/assets/tickets-Ct9DbDUR.js +1 -0
  317. package/client/dist/assets/tickets-rptLEJB1.js +1 -0
  318. package/client/dist/assets/tickets-xQ6DpYdu.js +1 -0
  319. package/client/dist/assets/trending-up-BGvb4zZt.js +1 -0
  320. package/client/dist/assets/undo-6zuS4-sL.js +1 -0
  321. package/client/dist/assets/undo-BeM4gDOP.js +1 -0
  322. package/client/dist/assets/undo-BeppX8xS.js +1 -0
  323. package/client/dist/assets/undo-BqvNZ5MG.js +1 -0
  324. package/client/dist/assets/undo-BzwEPf_k.js +1 -0
  325. package/client/dist/assets/undo-CJ9Cu1NN.js +1 -0
  326. package/client/dist/assets/undo-ds8nMFbX.js +1 -0
  327. package/client/dist/assets/undo-x_gA-knG.js +1 -0
  328. package/client/dist/assets/useDesktop-BuOp2-MR.js +1 -0
  329. package/client/dist/assets/useRuntimeRuns-BRS6ncnO.js +1 -0
  330. package/client/dist/assets/utils-ELimjS2Y.js +1 -0
  331. package/client/dist/assets/wrench-Br2n1Lxd.js +1 -0
  332. package/client/dist/index.html +75 -60
  333. package/docs/ci-cd.md +29 -1
  334. package/docs/cli.md +10 -31
  335. package/docs/codex.md +1 -1
  336. package/docs/creating-specs.md +15 -12
  337. package/docs/customizing.md +16 -13
  338. package/docs/getting-started.md +12 -11
  339. package/docs/guide/de/agents/1-meet-the-agents.md +1 -1
  340. package/docs/guide/de/getting-started/2-installing-and-first-run.md +2 -0
  341. package/docs/guide/de/getting-started/3-try-the-sample-project.md +35 -0
  342. package/docs/guide/de/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
  343. package/docs/guide/de/getting-started/6-universal-search.md +34 -0
  344. package/docs/guide/de/insights/1-analytics-and-cost-tracking.md +20 -6
  345. package/docs/guide/de/insights/2-the-integrated-terminal.md +1 -1
  346. package/docs/guide/de/insights/3-code-explorer.md +1 -1
  347. package/docs/guide/de/integrations/1-ai-providers.md +1 -1
  348. package/docs/guide/de/integrations/2-plugins.md +1 -1
  349. package/docs/guide/de/integrations/3-jira-integration.md +3 -3
  350. package/docs/guide/de/integrations/4-mobile-companion.md +1 -1
  351. package/docs/guide/de/integrations/5-mcp-server.md +1 -1
  352. package/docs/guide/de/integrations/6-agent-chat.md +12 -5
  353. package/docs/guide/de/integrations/8-flow-mode.md +69 -0
  354. package/docs/guide/de/pipeline/1-rails-and-jobs.md +21 -1
  355. package/docs/guide/de/pipeline/2-the-job-detail-view.md +12 -0
  356. package/docs/guide/de/pipeline/3-reviewing-a-delivery.md +43 -0
  357. package/docs/guide/de/pipeline/4-picking-an-engine-per-rail.md +2 -2
  358. package/docs/guide/de/pipeline/5-the-loop-builder.md +1 -1
  359. package/docs/guide/de/settings/1-themes.md +1 -1
  360. package/docs/guide/de/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
  361. package/docs/guide/de/settings/5-project-environment.md +1 -1
  362. package/docs/guide/de/settings/6-updates.md +24 -0
  363. package/docs/guide/de/settings/7-existing-projects.md +33 -0
  364. package/docs/guide/de/settings/8-accessibility.md +23 -0
  365. package/docs/guide/de/specs/1-specs-and-the-backlog.md +41 -3
  366. package/docs/guide/de/specs/2-add-spec-quick-mode.md +1 -1
  367. package/docs/guide/de/specs/3-add-spec-explore-mode.md +1 -1
  368. package/docs/guide/en/agents/1-meet-the-agents.md +1 -1
  369. package/docs/guide/en/getting-started/1-what-is-specrails.md +1 -1
  370. package/docs/guide/en/getting-started/2-installing-and-first-run.md +2 -0
  371. package/docs/guide/en/getting-started/3-try-the-sample-project.md +35 -0
  372. package/docs/guide/en/getting-started/5-the-dashboard-tour.md +52 -0
  373. package/docs/guide/en/getting-started/6-universal-search.md +34 -0
  374. package/docs/guide/en/insights/1-analytics-and-cost-tracking.md +24 -10
  375. package/docs/guide/en/insights/2-the-integrated-terminal.md +1 -1
  376. package/docs/guide/en/insights/3-code-explorer.md +5 -5
  377. package/docs/guide/en/integrations/1-ai-providers.md +1 -1
  378. package/docs/guide/en/integrations/2-plugins.md +1 -1
  379. package/docs/guide/en/integrations/3-jira-integration.md +4 -4
  380. package/docs/guide/en/integrations/4-mobile-companion.md +1 -1
  381. package/docs/guide/en/integrations/5-mcp-server.md +4 -4
  382. package/docs/guide/en/integrations/6-agent-chat.md +12 -5
  383. package/docs/guide/en/integrations/8-flow-mode.md +69 -0
  384. package/docs/guide/en/pipeline/1-rails-and-jobs.md +22 -3
  385. package/docs/guide/en/pipeline/2-the-job-detail-view.md +19 -7
  386. package/docs/guide/en/pipeline/3-reviewing-a-delivery.md +43 -0
  387. package/docs/guide/en/pipeline/4-picking-an-engine-per-rail.md +2 -2
  388. package/docs/guide/en/pipeline/5-the-loop-builder.md +2 -2
  389. package/docs/guide/en/settings/1-themes.md +1 -1
  390. package/docs/guide/en/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
  391. package/docs/guide/en/settings/5-project-environment.md +1 -1
  392. package/docs/guide/en/settings/6-updates.md +24 -0
  393. package/docs/guide/en/settings/7-existing-projects.md +33 -0
  394. package/docs/guide/en/settings/8-accessibility.md +23 -0
  395. package/docs/guide/en/specs/1-specs-and-the-backlog.md +42 -6
  396. package/docs/guide/en/specs/2-add-spec-quick-mode.md +1 -1
  397. package/docs/guide/en/specs/3-add-spec-explore-mode.md +2 -2
  398. package/docs/guide/es/agents/1-meet-the-agents.md +1 -1
  399. package/docs/guide/es/agents/2-profiles-and-the-balanced-default.md +1 -1
  400. package/docs/guide/es/agents/3-customizing-models-per-agent.md +2 -2
  401. package/docs/guide/es/agents/4-custom-agents-catalog.md +1 -1
  402. package/docs/guide/es/getting-started/1-what-is-specrails.md +3 -3
  403. package/docs/guide/es/getting-started/2-installing-and-first-run.md +2 -0
  404. package/docs/guide/es/getting-started/3-try-the-sample-project.md +35 -0
  405. package/docs/guide/es/getting-started/5-the-dashboard-tour.md +52 -0
  406. package/docs/guide/es/getting-started/6-universal-search.md +34 -0
  407. package/docs/guide/es/insights/1-analytics-and-cost-tracking.md +26 -12
  408. package/docs/guide/es/insights/2-the-integrated-terminal.md +1 -1
  409. package/docs/guide/es/insights/3-code-explorer.md +5 -5
  410. package/docs/guide/es/integrations/1-ai-providers.md +1 -1
  411. package/docs/guide/es/integrations/2-plugins.md +1 -1
  412. package/docs/guide/es/integrations/3-jira-integration.md +4 -4
  413. package/docs/guide/es/integrations/4-mobile-companion.md +1 -1
  414. package/docs/guide/es/integrations/5-mcp-server.md +4 -4
  415. package/docs/guide/es/integrations/6-agent-chat.md +14 -7
  416. package/docs/guide/es/integrations/7-local-engines.md +1 -1
  417. package/docs/guide/es/integrations/8-flow-mode.md +69 -0
  418. package/docs/guide/es/pipeline/1-rails-and-jobs.md +33 -13
  419. package/docs/guide/es/pipeline/2-the-job-detail-view.md +38 -26
  420. package/docs/guide/es/pipeline/3-reviewing-a-delivery.md +43 -0
  421. package/docs/guide/es/pipeline/4-picking-an-engine-per-rail.md +2 -2
  422. package/docs/guide/es/pipeline/5-the-loop-builder.md +4 -4
  423. package/docs/guide/es/settings/1-themes.md +1 -1
  424. package/docs/guide/es/settings/3-pipeline-telemetry-and-diagnostics.md +10 -10
  425. package/docs/guide/es/settings/5-project-environment.md +1 -1
  426. package/docs/guide/es/settings/6-updates.md +24 -0
  427. package/docs/guide/es/settings/7-existing-projects.md +33 -0
  428. package/docs/guide/es/settings/8-accessibility.md +23 -0
  429. package/docs/guide/es/specs/1-specs-and-the-backlog.md +43 -7
  430. package/docs/guide/es/specs/2-add-spec-quick-mode.md +1 -1
  431. package/docs/guide/es/specs/3-add-spec-explore-mode.md +3 -3
  432. package/docs/guide/fr/agents/1-meet-the-agents.md +1 -1
  433. package/docs/guide/fr/getting-started/2-installing-and-first-run.md +2 -0
  434. package/docs/guide/fr/getting-started/3-try-the-sample-project.md +35 -0
  435. package/docs/guide/fr/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
  436. package/docs/guide/fr/getting-started/6-universal-search.md +34 -0
  437. package/docs/guide/fr/insights/1-analytics-and-cost-tracking.md +18 -4
  438. package/docs/guide/fr/insights/2-the-integrated-terminal.md +1 -1
  439. package/docs/guide/fr/insights/3-code-explorer.md +1 -1
  440. package/docs/guide/fr/integrations/1-ai-providers.md +1 -1
  441. package/docs/guide/fr/integrations/2-plugins.md +1 -1
  442. package/docs/guide/fr/integrations/3-jira-integration.md +3 -3
  443. package/docs/guide/fr/integrations/4-mobile-companion.md +1 -1
  444. package/docs/guide/fr/integrations/5-mcp-server.md +1 -1
  445. package/docs/guide/fr/integrations/6-agent-chat.md +11 -4
  446. package/docs/guide/fr/integrations/8-flow-mode.md +69 -0
  447. package/docs/guide/fr/pipeline/1-rails-and-jobs.md +21 -1
  448. package/docs/guide/fr/pipeline/2-the-job-detail-view.md +12 -0
  449. package/docs/guide/fr/pipeline/3-reviewing-a-delivery.md +43 -0
  450. package/docs/guide/fr/pipeline/4-picking-an-engine-per-rail.md +2 -2
  451. package/docs/guide/fr/pipeline/5-the-loop-builder.md +1 -1
  452. package/docs/guide/fr/settings/1-themes.md +1 -1
  453. package/docs/guide/fr/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
  454. package/docs/guide/fr/settings/5-project-environment.md +1 -1
  455. package/docs/guide/fr/settings/6-updates.md +24 -0
  456. package/docs/guide/fr/settings/7-existing-projects.md +33 -0
  457. package/docs/guide/fr/settings/8-accessibility.md +23 -0
  458. package/docs/guide/fr/specs/1-specs-and-the-backlog.md +41 -3
  459. package/docs/guide/fr/specs/2-add-spec-quick-mode.md +1 -1
  460. package/docs/guide/fr/specs/3-add-spec-explore-mode.md +1 -1
  461. package/docs/guide/it/agents/1-meet-the-agents.md +1 -1
  462. package/docs/guide/it/getting-started/2-installing-and-first-run.md +2 -0
  463. package/docs/guide/it/getting-started/3-try-the-sample-project.md +35 -0
  464. package/docs/guide/it/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
  465. package/docs/guide/it/getting-started/6-universal-search.md +34 -0
  466. package/docs/guide/it/insights/1-analytics-and-cost-tracking.md +18 -4
  467. package/docs/guide/it/insights/2-the-integrated-terminal.md +1 -1
  468. package/docs/guide/it/insights/3-code-explorer.md +1 -1
  469. package/docs/guide/it/integrations/1-ai-providers.md +1 -1
  470. package/docs/guide/it/integrations/2-plugins.md +1 -1
  471. package/docs/guide/it/integrations/3-jira-integration.md +3 -3
  472. package/docs/guide/it/integrations/4-mobile-companion.md +1 -1
  473. package/docs/guide/it/integrations/5-mcp-server.md +1 -1
  474. package/docs/guide/it/integrations/6-agent-chat.md +11 -4
  475. package/docs/guide/it/integrations/8-flow-mode.md +69 -0
  476. package/docs/guide/it/pipeline/1-rails-and-jobs.md +21 -1
  477. package/docs/guide/it/pipeline/2-the-job-detail-view.md +12 -0
  478. package/docs/guide/it/pipeline/3-reviewing-a-delivery.md +43 -0
  479. package/docs/guide/it/pipeline/4-picking-an-engine-per-rail.md +2 -2
  480. package/docs/guide/it/pipeline/5-the-loop-builder.md +1 -1
  481. package/docs/guide/it/settings/1-themes.md +1 -1
  482. package/docs/guide/it/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
  483. package/docs/guide/it/settings/5-project-environment.md +1 -1
  484. package/docs/guide/it/settings/6-updates.md +24 -0
  485. package/docs/guide/it/settings/7-existing-projects.md +33 -0
  486. package/docs/guide/it/settings/8-accessibility.md +23 -0
  487. package/docs/guide/it/specs/1-specs-and-the-backlog.md +41 -3
  488. package/docs/guide/it/specs/2-add-spec-quick-mode.md +1 -1
  489. package/docs/guide/it/specs/3-add-spec-explore-mode.md +1 -1
  490. package/docs/guide/ja/agents/1-meet-the-agents.md +1 -1
  491. package/docs/guide/ja/getting-started/2-installing-and-first-run.md +2 -0
  492. package/docs/guide/ja/getting-started/3-try-the-sample-project.md +35 -0
  493. package/docs/guide/ja/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
  494. package/docs/guide/ja/getting-started/6-universal-search.md +34 -0
  495. package/docs/guide/ja/insights/1-analytics-and-cost-tracking.md +18 -4
  496. package/docs/guide/ja/insights/2-the-integrated-terminal.md +1 -1
  497. package/docs/guide/ja/insights/3-code-explorer.md +1 -1
  498. package/docs/guide/ja/integrations/1-ai-providers.md +1 -1
  499. package/docs/guide/ja/integrations/2-plugins.md +1 -1
  500. package/docs/guide/ja/integrations/3-jira-integration.md +3 -3
  501. package/docs/guide/ja/integrations/4-mobile-companion.md +1 -1
  502. package/docs/guide/ja/integrations/5-mcp-server.md +1 -1
  503. package/docs/guide/ja/integrations/6-agent-chat.md +11 -4
  504. package/docs/guide/ja/integrations/8-flow-mode.md +69 -0
  505. package/docs/guide/ja/pipeline/1-rails-and-jobs.md +21 -1
  506. package/docs/guide/ja/pipeline/2-the-job-detail-view.md +12 -0
  507. package/docs/guide/ja/pipeline/3-reviewing-a-delivery.md +43 -0
  508. package/docs/guide/ja/pipeline/4-picking-an-engine-per-rail.md +2 -2
  509. package/docs/guide/ja/pipeline/5-the-loop-builder.md +1 -1
  510. package/docs/guide/ja/settings/1-themes.md +1 -1
  511. package/docs/guide/ja/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
  512. package/docs/guide/ja/settings/5-project-environment.md +1 -1
  513. package/docs/guide/ja/settings/6-updates.md +24 -0
  514. package/docs/guide/ja/settings/7-existing-projects.md +33 -0
  515. package/docs/guide/ja/settings/8-accessibility.md +23 -0
  516. package/docs/guide/ja/specs/1-specs-and-the-backlog.md +41 -3
  517. package/docs/guide/ja/specs/2-add-spec-quick-mode.md +1 -1
  518. package/docs/guide/ja/specs/3-add-spec-explore-mode.md +1 -1
  519. package/docs/guide/pt/agents/1-meet-the-agents.md +1 -1
  520. package/docs/guide/pt/getting-started/2-installing-and-first-run.md +2 -0
  521. package/docs/guide/pt/getting-started/3-try-the-sample-project.md +35 -0
  522. package/docs/guide/pt/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
  523. package/docs/guide/pt/getting-started/6-universal-search.md +34 -0
  524. package/docs/guide/pt/insights/1-analytics-and-cost-tracking.md +18 -4
  525. package/docs/guide/pt/insights/2-the-integrated-terminal.md +1 -1
  526. package/docs/guide/pt/insights/3-code-explorer.md +1 -1
  527. package/docs/guide/pt/integrations/1-ai-providers.md +1 -1
  528. package/docs/guide/pt/integrations/2-plugins.md +1 -1
  529. package/docs/guide/pt/integrations/3-jira-integration.md +3 -3
  530. package/docs/guide/pt/integrations/4-mobile-companion.md +1 -1
  531. package/docs/guide/pt/integrations/5-mcp-server.md +1 -1
  532. package/docs/guide/pt/integrations/6-agent-chat.md +12 -5
  533. package/docs/guide/pt/integrations/8-flow-mode.md +69 -0
  534. package/docs/guide/pt/pipeline/1-rails-and-jobs.md +21 -1
  535. package/docs/guide/pt/pipeline/2-the-job-detail-view.md +12 -0
  536. package/docs/guide/pt/pipeline/3-reviewing-a-delivery.md +43 -0
  537. package/docs/guide/pt/pipeline/4-picking-an-engine-per-rail.md +2 -2
  538. package/docs/guide/pt/pipeline/5-the-loop-builder.md +1 -1
  539. package/docs/guide/pt/settings/1-themes.md +1 -1
  540. package/docs/guide/pt/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
  541. package/docs/guide/pt/settings/5-project-environment.md +1 -1
  542. package/docs/guide/pt/settings/6-updates.md +24 -0
  543. package/docs/guide/pt/settings/7-existing-projects.md +33 -0
  544. package/docs/guide/pt/settings/8-accessibility.md +23 -0
  545. package/docs/guide/pt/specs/1-specs-and-the-backlog.md +41 -3
  546. package/docs/guide/pt/specs/2-add-spec-quick-mode.md +1 -1
  547. package/docs/guide/pt/specs/3-add-spec-explore-mode.md +1 -1
  548. package/docs/guide/zh/agents/1-meet-the-agents.md +1 -1
  549. package/docs/guide/zh/getting-started/2-installing-and-first-run.md +2 -0
  550. package/docs/guide/zh/getting-started/3-try-the-sample-project.md +35 -0
  551. package/docs/guide/zh/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
  552. package/docs/guide/zh/getting-started/6-universal-search.md +34 -0
  553. package/docs/guide/zh/insights/1-analytics-and-cost-tracking.md +18 -4
  554. package/docs/guide/zh/insights/2-the-integrated-terminal.md +1 -1
  555. package/docs/guide/zh/insights/3-code-explorer.md +1 -1
  556. package/docs/guide/zh/integrations/1-ai-providers.md +1 -1
  557. package/docs/guide/zh/integrations/2-plugins.md +1 -1
  558. package/docs/guide/zh/integrations/3-jira-integration.md +3 -3
  559. package/docs/guide/zh/integrations/4-mobile-companion.md +1 -1
  560. package/docs/guide/zh/integrations/5-mcp-server.md +1 -1
  561. package/docs/guide/zh/integrations/6-agent-chat.md +11 -4
  562. package/docs/guide/zh/integrations/8-flow-mode.md +69 -0
  563. package/docs/guide/zh/pipeline/1-rails-and-jobs.md +21 -1
  564. package/docs/guide/zh/pipeline/2-the-job-detail-view.md +12 -0
  565. package/docs/guide/zh/pipeline/3-reviewing-a-delivery.md +43 -0
  566. package/docs/guide/zh/pipeline/4-picking-an-engine-per-rail.md +2 -2
  567. package/docs/guide/zh/pipeline/5-the-loop-builder.md +1 -1
  568. package/docs/guide/zh/settings/1-themes.md +1 -1
  569. package/docs/guide/zh/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
  570. package/docs/guide/zh/settings/5-project-environment.md +1 -1
  571. package/docs/guide/zh/settings/6-updates.md +24 -0
  572. package/docs/guide/zh/settings/7-existing-projects.md +33 -0
  573. package/docs/guide/zh/settings/8-accessibility.md +23 -0
  574. package/docs/guide/zh/specs/1-specs-and-the-backlog.md +41 -3
  575. package/docs/guide/zh/specs/2-add-spec-quick-mode.md +1 -1
  576. package/docs/guide/zh/specs/3-add-spec-explore-mode.md +1 -1
  577. package/docs/internals/README.md +8 -0
  578. package/docs/internals/adding-a-provider.md +19 -2
  579. package/docs/internals/agent-actions-audit.md +101 -0
  580. package/docs/internals/agent-sessions.md +36 -1
  581. package/docs/internals/api-reference.md +190 -45
  582. package/docs/internals/architecture.md +53 -47
  583. package/docs/internals/companion-inbox-decisions.md +42 -0
  584. package/docs/internals/companion-rails-as-loops-contract.md +17 -6
  585. package/docs/internals/configuration.md +140 -9
  586. package/docs/internals/core-runtime-updates.md +4 -4
  587. package/docs/internals/existing-project-anchoring.md +168 -0
  588. package/docs/internals/flow-mode.md +668 -0
  589. package/docs/internals/legacy-implementation-notes.md +13 -0
  590. package/docs/internals/local-testing-feedback-2026-10.md +210 -0
  591. package/docs/internals/mcp-mission-audit.md +4 -0
  592. package/docs/internals/mission-rail-cards.md +10 -5
  593. package/docs/internals/mission-read-only-policy.md +152 -0
  594. package/docs/internals/modal-standard.md +181 -0
  595. package/docs/internals/openspec-workflow.md +32 -0
  596. package/docs/internals/operations-runbook.md +30 -0
  597. package/docs/internals/profiles.md +6 -3
  598. package/docs/internals/programmatic-agent-runtime.md +8 -0
  599. package/docs/internals/project-builder.md +1 -1
  600. package/docs/internals/review-packet.md +161 -9
  601. package/docs/internals/safe-pr-review-flow.md +135 -6
  602. package/docs/internals/source-map.md +413 -18
  603. package/docs/internals/spec-addenda.md +10 -0
  604. package/docs/internals/spec-triage.md +140 -0
  605. package/docs/internals/visual-design-audit.md +15 -2
  606. package/docs/local-providers.md +3 -0
  607. package/docs/mcp.md +21 -3
  608. package/docs/platforms/macos.md +1 -1
  609. package/docs/platforms/windows.md +2 -2
  610. package/docs/running-pipelines.md +22 -6
  611. package/docs/tracking-cost.md +54 -10
  612. package/local-runner/dist/specrails-local-runner.js +3851 -1178
  613. package/mcp-bridge/dist/specrails-mcp.js +3864 -1143
  614. package/package.json +10 -9
  615. package/server/dist/agent-mcp-config.js +37 -1
  616. package/server/dist/api-version.js +19 -0
  617. package/server/dist/command-resolver.js +4 -2
  618. package/server/dist/core-compat.js +1 -1
  619. package/server/dist/core-execution.js +2 -1
  620. package/server/dist/core-update-manager.js +71 -13
  621. package/server/dist/db/job-search.js +248 -0
  622. package/server/dist/db/jobs.js +6 -0
  623. package/server/dist/db/migrations.js +239 -0
  624. package/server/dist/db.js +9 -2
  625. package/server/dist/desktop-db.js +99 -5
  626. package/server/dist/desktop-router.js +126 -13
  627. package/server/dist/docs-router.js +67 -1
  628. package/server/dist/feature-flags.js +22 -0
  629. package/server/dist/index.js +30 -15
  630. package/server/dist/jira/jira-adf.js +13 -1
  631. package/server/dist/jira/jira-clarifications.js +146 -0
  632. package/server/dist/jira/jira-client.js +8 -1
  633. package/server/dist/jira/jira-db.js +41 -0
  634. package/server/dist/jira/jira-sync-manager.js +328 -25
  635. package/server/dist/mcp/guide.js +17 -7
  636. package/server/dist/mcp/tools/agents.js +1 -1
  637. package/server/dist/mcp/tools/analytics.js +15 -3
  638. package/server/dist/mcp/tools/app-settings.js +14 -1
  639. package/server/dist/mcp/tools/chat.js +1 -1
  640. package/server/dist/mcp/tools/env.js +4 -2
  641. package/server/dist/mcp/tools/jobs.js +96 -7
  642. package/server/dist/mcp/tools/loops.js +1 -1
  643. package/server/dist/mcp/tools/meta.js +10 -13
  644. package/server/dist/mcp/tools/rails.js +15 -1
  645. package/server/dist/mcp/tools/setup.js +1 -1
  646. package/server/dist/mcp/tools/specs.js +8 -5
  647. package/server/dist/mcp/tools/support.js +6 -3
  648. package/server/dist/mcp/tools/types.js +38 -1
  649. package/server/dist/mobile/mobile-admin-router.js +0 -16
  650. package/server/dist/mobile/mobile-gateway.js +0 -18
  651. package/server/dist/mobile/mobile-inbox.js +240 -0
  652. package/server/dist/mobile/mobile-missions.js +6 -8
  653. package/server/dist/mobile/mobile-router.js +9 -9
  654. package/server/dist/mobile/mobile-webrtc-peer.js +4 -54
  655. package/server/dist/mobile/mobile-ws.js +27 -4
  656. package/server/dist/modules/accounting/runtime/ai-invocations.js +4 -0
  657. package/server/dist/modules/accounting/runtime/decision-times.js +102 -0
  658. package/server/dist/modules/accounting/runtime/loop-economics.js +284 -0
  659. package/server/dist/modules/accounting/runtime/spending.js +7 -2
  660. package/server/dist/modules/accounting/runtime/what-if.js +87 -0
  661. package/server/dist/modules/agent-runtime/runtime/agent-runtime-bridge.js +86 -5
  662. package/server/dist/modules/agent-runtime/runtime/agent-runtime-controls.js +28 -2
  663. package/server/dist/modules/agent-runtime/runtime/agent-runtime-metrics.js +15 -2
  664. package/server/dist/modules/agent-runtime/runtime/agent-runtime-settings-router.js +21 -2
  665. package/server/dist/modules/agent-runtime/runtime/core-capabilities.js +55 -0
  666. package/server/dist/modules/agent-sessions/adapters/host-process.js +1 -1
  667. package/server/dist/modules/agent-sessions/domain/availability.js +16 -0
  668. package/server/dist/modules/agent-sessions/domain/protocol.js +8 -1
  669. package/server/dist/modules/agent-sessions/index.js +3 -1
  670. package/server/dist/modules/agent-sessions/runtime/core-sessions-availability.js +16 -0
  671. package/server/dist/modules/agents/runtime/agent-refine-manager.js +3 -1
  672. package/server/dist/modules/agents/runtime/agent-store.js +60 -73
  673. package/server/dist/modules/audit/adapters/http.js +66 -0
  674. package/server/dist/modules/audit/adapters/runtime.js +60 -0
  675. package/server/dist/modules/audit/adapters/sqlite.js +73 -0
  676. package/server/dist/modules/audit/application.js +190 -0
  677. package/server/dist/modules/audit/domain.js +434 -0
  678. package/server/dist/modules/audit/index.js +27 -0
  679. package/server/dist/modules/audit/ports.js +2 -0
  680. package/server/dist/modules/browser/runtime/browser-capture-manager.js +18 -141
  681. package/server/dist/modules/browser/runtime/browser-capture-types.js +1 -10
  682. package/server/dist/modules/browser/runtime/browser-playwright.js +0 -19
  683. package/server/dist/modules/code/runtime/file-provenance.js +23 -0
  684. package/server/dist/modules/conversations/runtime/chat-manager.js +5 -2
  685. package/server/dist/modules/delivery/adapters/decisions/chains.js +1 -0
  686. package/server/dist/modules/delivery/adapters/decisions/create.js +19 -1
  687. package/server/dist/modules/delivery/adapters/decisions/discard.js +2 -0
  688. package/server/dist/modules/delivery/adapters/decisions/local-changes.js +427 -0
  689. package/server/dist/modules/delivery/adapters/decisions/merge-local.js +80 -6
  690. package/server/dist/modules/delivery/adapters/decisions/observations.js +5 -0
  691. package/server/dist/modules/delivery/adapters/decisions/ownership.js +2 -1
  692. package/server/dist/modules/delivery/adapters/decisions/transitions.js +9 -0
  693. package/server/dist/modules/delivery/adapters/review-wip-store.js +37 -0
  694. package/server/dist/modules/delivery/domain/review-wip.js +71 -0
  695. package/server/dist/modules/delivery/index.js +9 -1
  696. package/server/dist/modules/delivery/runtime/delivery-changes.js +355 -0
  697. package/server/dist/modules/delivery/runtime/delivery-evidence.js +249 -8
  698. package/server/dist/modules/delivery/runtime/flow-review-legacy.js +99 -0
  699. package/server/dist/modules/delivery/runtime/flow-review-outcome.js +107 -0
  700. package/server/dist/modules/delivery/runtime/flow-worktree-handoff.js +32 -0
  701. package/server/dist/modules/delivery/runtime/flow-worktree-return.js +87 -0
  702. package/server/dist/modules/delivery/runtime/isolated-worktree.js +380 -0
  703. package/server/dist/modules/delivery/runtime/local-restore-branch.js +325 -0
  704. package/server/dist/modules/delivery/runtime/local-restore-resolver.js +48 -0
  705. package/server/dist/modules/delivery/runtime/local-stash.js +423 -0
  706. package/server/dist/modules/delivery/runtime/multi-repo-execution.js +27 -1
  707. package/server/dist/modules/delivery/runtime/phase3-harvest.js +40 -0
  708. package/server/dist/modules/delivery/runtime/pr-body.js +50 -0
  709. package/server/dist/modules/delivery/runtime/rail-isolated-launch.js +169 -166
  710. package/server/dist/modules/delivery/runtime/rail-launch-parser.js +5 -2
  711. package/server/dist/modules/delivery/runtime/rail-pr-decision.js +7 -1
  712. package/server/dist/modules/delivery/runtime/rail-pr-store.js +193 -12
  713. package/server/dist/modules/delivery/runtime/rails-router.js +267 -5
  714. package/server/dist/modules/delivery/runtime/review-brief.js +208 -0
  715. package/server/dist/modules/delivery/runtime/review-packet.js +41 -2
  716. package/server/dist/modules/delivery/runtime/review-wip-gate.js +67 -0
  717. package/server/dist/modules/delivery/runtime/run-records.js +267 -0
  718. package/server/dist/modules/delivery/runtime/run-review-diagnosis.js +102 -0
  719. package/server/dist/modules/execution/adapters/budget-storage.js +76 -0
  720. package/server/dist/modules/execution/application/enforce-budget.js +17 -2
  721. package/server/dist/modules/execution/domain/agent-env.js +98 -0
  722. package/server/dist/modules/execution/domain/daily-budget.js +36 -0
  723. package/server/dist/modules/execution/domain/spend-caps.js +166 -0
  724. package/server/dist/modules/execution/index.js +34 -1
  725. package/server/dist/modules/execution/runtime/budget-overview.js +76 -0
  726. package/server/dist/modules/execution/runtime/daily-budget-gate.js +86 -0
  727. package/server/dist/modules/execution/runtime/interactive-job-session.js +8 -0
  728. package/server/dist/modules/execution/runtime/launch-forecast.js +33 -0
  729. package/server/dist/modules/execution/runtime/queue-manager.js +54 -15
  730. package/server/dist/modules/execution/runtime/run-duration-stats.js +31 -13
  731. package/server/dist/modules/flow/adapters/bindings.js +1089 -0
  732. package/server/dist/modules/flow/adapters/http.js +147 -0
  733. package/server/dist/modules/flow/adapters/sqlite.js +121 -0
  734. package/server/dist/modules/flow/application.js +805 -0
  735. package/server/dist/modules/flow/domain.js +790 -0
  736. package/server/dist/modules/flow/index.js +34 -0
  737. package/server/dist/modules/flow/ports.js +2 -0
  738. package/server/dist/modules/inbox/adapters/http.js +21 -0
  739. package/server/dist/modules/inbox/adapters/project-source.js +233 -0
  740. package/server/dist/modules/inbox/application.js +28 -0
  741. package/server/dist/modules/inbox/domain.js +43 -0
  742. package/server/dist/modules/inbox/index.js +10 -0
  743. package/server/dist/modules/inbox/ports.js +2 -0
  744. package/server/dist/modules/loops/runtime/loop-definition-run.js +9 -0
  745. package/server/dist/modules/loops/runtime/loop-definition.js +5 -2
  746. package/server/dist/modules/loops/runtime/loop-executors.js +90 -9
  747. package/server/dist/modules/loops/runtime/loop-factory.js +30 -2
  748. package/server/dist/modules/loops/runtime/loop-flow-spec-recipe.js +166 -0
  749. package/server/dist/modules/loops/runtime/loop-graph.js +1 -1
  750. package/server/dist/modules/loops/runtime/loop-role-engines.js +4 -1
  751. package/server/dist/modules/loops/runtime/loop-run-manager.js +267 -10
  752. package/server/dist/modules/loops/runtime/loop-runs-store.js +21 -5
  753. package/server/dist/modules/loops/runtime/loop-templates.js +55 -12
  754. package/server/dist/modules/missions/runtime/agent-chat-manager.js +283 -20
  755. package/server/dist/modules/missions/runtime/agent-chat-router.js +96 -21
  756. package/server/dist/modules/missions/runtime/agent-failure-briefing.js +11 -3
  757. package/server/dist/modules/missions/runtime/agent-fence-promotion.js +9 -1
  758. package/server/dist/modules/missions/runtime/agent-flow-prompt.js +64 -0
  759. package/server/dist/modules/missions/runtime/agent-input-store.js +9 -4
  760. package/server/dist/modules/missions/runtime/agent-operator-prompt.js +100 -14
  761. package/server/dist/modules/missions/runtime/agent-session-store.js +88 -27
  762. package/server/dist/modules/missions/runtime/core-session-runner.js +89 -9
  763. package/server/dist/modules/missions/runtime/flow-turn-context.js +17 -0
  764. package/server/dist/modules/missions/runtime/mission-core-sessions.js +295 -55
  765. package/server/dist/modules/missions/runtime/mission-run-notify.js +2 -0
  766. package/server/dist/modules/missions/runtime/mission-session-projector.js +56 -19
  767. package/server/dist/modules/missions/runtime/mission-tool-policy.js +47 -0
  768. package/server/dist/modules/onboarding/adapters/http.js +78 -0
  769. package/server/dist/modules/onboarding/adapters/providers.js +41 -0
  770. package/server/dist/modules/onboarding/adapters/runtime.js +130 -0
  771. package/server/dist/modules/onboarding/application.js +133 -0
  772. package/server/dist/modules/onboarding/catalog.js +217 -0
  773. package/server/dist/modules/onboarding/domain.js +102 -0
  774. package/server/dist/modules/onboarding/index.js +20 -0
  775. package/server/dist/modules/onboarding/ports.js +2 -0
  776. package/server/dist/modules/project-rules/adapters/http.js +91 -0
  777. package/server/dist/modules/project-rules/domain.js +122 -0
  778. package/server/dist/modules/project-rules/runtime/rules-inventory-runs.js +97 -0
  779. package/server/dist/modules/project-rules/runtime/rules-store.js +109 -0
  780. package/server/dist/modules/project-settings/adapters/http.js +13 -0
  781. package/server/dist/modules/project-settings/adapters/sqlite.js +78 -8
  782. package/server/dist/modules/project-settings/domain.js +47 -1
  783. package/server/dist/modules/project-settings/index.js +7 -1
  784. package/server/dist/modules/recovery/adapters/sqlite.js +28 -0
  785. package/server/dist/modules/recovery/domain.js +162 -0
  786. package/server/dist/modules/recovery/index.js +16 -0
  787. package/server/dist/modules/specs/adapters/timeline-http.js +101 -0
  788. package/server/dist/modules/specs/domain/handoff-labels.js +371 -0
  789. package/server/dist/modules/specs/domain/handoff.js +260 -0
  790. package/server/dist/modules/specs/domain/non-goals.js +101 -0
  791. package/server/dist/modules/specs/domain/timeline.js +164 -0
  792. package/server/dist/modules/specs/domain/triage.js +320 -0
  793. package/server/dist/modules/specs/runtime/contract-refine-runner.js +3 -2
  794. package/server/dist/modules/specs/runtime/generated-spec-parser.js +75 -0
  795. package/server/dist/modules/specs/runtime/proposal-manager.js +4 -3
  796. package/server/dist/modules/specs/runtime/smash-runner.js +2 -1
  797. package/server/dist/modules/specs/runtime/spec-addenda.js +31 -0
  798. package/server/dist/modules/specs/runtime/spec-draft-parser.js +6 -1
  799. package/server/dist/modules/specs/runtime/spec-generation.js +431 -0
  800. package/server/dist/modules/specs/runtime/spec-handoff.js +103 -0
  801. package/server/dist/modules/specs/runtime/spec-history.js +376 -0
  802. package/server/dist/modules/specs/runtime/spec-launcher-manager.js +4 -3
  803. package/server/dist/modules/specs/runtime/spec-search.js +117 -0
  804. package/server/dist/modules/specs/runtime/ticket-store.js +47 -2
  805. package/server/dist/modules/specs/runtime/ticket-trash-service.js +62 -0
  806. package/server/dist/modules/specs/runtime/ticket-trash.js +193 -0
  807. package/server/dist/modules/specs/runtime/triage-runner.js +171 -0
  808. package/server/dist/modules/specs/runtime/triage.js +365 -0
  809. package/server/dist/modules/terminals/domain/app-urls.js +96 -0
  810. package/server/dist/modules/terminals/runtime/app-urls.js +77 -0
  811. package/server/dist/modules/terminals/runtime/background-process-service.js +25 -28
  812. package/server/dist/project-env.js +60 -0
  813. package/server/dist/project-git.js +65 -0
  814. package/server/dist/project-registry.js +264 -27
  815. package/server/dist/project-router-background-processes.js +27 -3
  816. package/server/dist/project-router-git.js +30 -0
  817. package/server/dist/project-router-helpers.js +5 -30
  818. package/server/dist/project-router-jobs.js +49 -1
  819. package/server/dist/project-router-loop-runs.js +72 -2
  820. package/server/dist/project-router-rules.js +54 -0
  821. package/server/dist/project-router-search.js +52 -0
  822. package/server/dist/project-router-settings.js +6 -0
  823. package/server/dist/project-router-setup.js +1 -1
  824. package/server/dist/project-router-spending.js +138 -0
  825. package/server/dist/project-router-tickets.js +246 -427
  826. package/server/dist/project-router.js +7 -0
  827. package/server/dist/providers/claude-adapter.js +25 -3
  828. package/server/dist/providers/codex-adapter.js +9 -1
  829. package/server/dist/providers/gemini-adapter.js +6 -1
  830. package/server/dist/providers/kimi-adapter.js +2 -0
  831. package/server/dist/providers/local-adapter.js +2 -0
  832. package/server/dist/providers/runtime.js +8 -0
  833. package/server/dist/schemas/agent-runtime.schema.json +3 -1
  834. package/server/dist/schemas/workflow-definition.schema.json +1 -0
  835. package/server/dist/setup-manager.js +19 -1
  836. package/server/dist/transient-children.js +25 -8
  837. package/server/dist/update-channel.js +21 -0
  838. package/server/dist/util/search-snippet.js +74 -0
  839. package/server/dist/worktree-manager.js +19 -8
  840. package/client/dist/assets/ActivityFeedPage-Dtp7EyHc.js +0 -1
  841. package/client/dist/assets/AgentBrowserCapture-CLqlEFw8.js +0 -1
  842. package/client/dist/assets/AgentModeAnalyticsPane-B8_hM3Tw.js +0 -2
  843. package/client/dist/assets/AgentModeCodePane-CNF8ZNjE.js +0 -2
  844. package/client/dist/assets/AgentModeJobsPane-CJpJbO9m.js +0 -1
  845. package/client/dist/assets/AgentsPage-BC8XSR79.js +0 -120
  846. package/client/dist/assets/AnalyticsPage-Cdv4jLtW.js +0 -1
  847. package/client/dist/assets/BarChart-BDMqVFJy.js +0 -55
  848. package/client/dist/assets/CodePage-DI1kegAr.js +0 -3
  849. package/client/dist/assets/DesktopAnalyticsPage-Bdp8E8U6.js +0 -1
  850. package/client/dist/assets/DocsDialog-Bm4RS7FX.js +0 -11
  851. package/client/dist/assets/DocsPage-DihYcU8r.js +0 -11
  852. package/client/dist/assets/ExportDropdown-Bb1lHx3r.js +0 -1
  853. package/client/dist/assets/IntegrationsPage-EAipiDWm.js +0 -1
  854. package/client/dist/assets/InteractiveJobComposer-BO6ASN-2.js +0 -19
  855. package/client/dist/assets/JobDetailModal-CuPYq7tP.js +0 -1
  856. package/client/dist/assets/JobDetailPage-BusMjJi9.js +0 -1
  857. package/client/dist/assets/JobsPage-C0QbsF2d.js +0 -1
  858. package/client/dist/assets/LoopBuilderPage-B7TlU4iS.js +0 -1
  859. package/client/dist/assets/LoopPreviewModal-BRWtXOD2.js +0 -1
  860. package/client/dist/assets/LoopsPage-C4q1DmCE.js +0 -2
  861. package/client/dist/assets/MinimizedChatsContext-DHfigjHS.js +0 -1
  862. package/client/dist/assets/PluginsPage-Z1JHSMdR.js +0 -2
  863. package/client/dist/assets/ProjectSettingsDialog-BUNj0tvN.js +0 -1
  864. package/client/dist/assets/RepositoryDeliveries-B4ybHOyB.js +0 -5
  865. package/client/dist/assets/ReviewPacketPage-hwfPNjyy.js +0 -4
  866. package/client/dist/assets/TemplatePreviewModal-V7FpMWuw.js +0 -1
  867. package/client/dist/assets/TicketDetailModalContext-Dkwo2cDs.js +0 -16
  868. package/client/dist/assets/Trans-BbFxRFtR.js +0 -1
  869. package/client/dist/assets/activity-B-rp4h_v.js +0 -1
  870. package/client/dist/assets/activity-C6kJpm9q.js +0 -1
  871. package/client/dist/assets/activity-CGx4kb_j.js +0 -1
  872. package/client/dist/assets/activity-CnoX2bH7.js +0 -1
  873. package/client/dist/assets/activity-DAyekdlt.js +0 -1
  874. package/client/dist/assets/activity-DCxtpT7j.js +0 -1
  875. package/client/dist/assets/activity-DiyjsgQV.js +0 -1
  876. package/client/dist/assets/activity-JzwRaWPD.js +0 -1
  877. package/client/dist/assets/addspec-BOvgmcgk.js +0 -1
  878. package/client/dist/assets/addspec-Clmyfn_R.js +0 -1
  879. package/client/dist/assets/addspec-CsNaBpHp.js +0 -1
  880. package/client/dist/assets/addspec-D2tvWmmV.js +0 -1
  881. package/client/dist/assets/addspec-D3nFwvD0.js +0 -1
  882. package/client/dist/assets/addspec-DVLEhK3w.js +0 -1
  883. package/client/dist/assets/addspec-DXbK-tb0.js +0 -1
  884. package/client/dist/assets/addspec-OHG8DFEn.js +0 -1
  885. package/client/dist/assets/agent-5bSixVzz.js +0 -1
  886. package/client/dist/assets/agent-BR4EHfhq.js +0 -1
  887. package/client/dist/assets/agent-C0IKkJP8.js +0 -1
  888. package/client/dist/assets/agent-C7li9ayC.js +0 -1
  889. package/client/dist/assets/agent-D0dRmEen.js +0 -1
  890. package/client/dist/assets/agent-DZVGHm7H.js +0 -1
  891. package/client/dist/assets/agent-Dip4h2YE.js +0 -1
  892. package/client/dist/assets/agent-Pp-P-n1p.js +0 -1
  893. package/client/dist/assets/agentRuntime-BxF81z52.js +0 -1
  894. package/client/dist/assets/agentRuntime-BxYS5V7u.js +0 -1
  895. package/client/dist/assets/agentRuntime-Dc9HG3BA.js +0 -1
  896. package/client/dist/assets/agents-B6ZsnARo.js +0 -1
  897. package/client/dist/assets/agents-BORdhe0K.js +0 -1
  898. package/client/dist/assets/agents-C6aq9Oqs.js +0 -1
  899. package/client/dist/assets/agents-Cbsc4bcX.js +0 -1
  900. package/client/dist/assets/agents-D0uYR6hq.js +0 -1
  901. package/client/dist/assets/agents-Doe1sHY5.js +0 -1
  902. package/client/dist/assets/agents-DyNi_I9m.js +0 -1
  903. package/client/dist/assets/agents-StKxiTg0.js +0 -1
  904. package/client/dist/assets/agentstudio-7cYCXn-L.js +0 -1
  905. package/client/dist/assets/agentstudio-BHWQh8G3.js +0 -1
  906. package/client/dist/assets/agentstudio-BjnWHyRs.js +0 -1
  907. package/client/dist/assets/agentstudio-BkV8vcK4.js +0 -1
  908. package/client/dist/assets/agentstudio-BzugqB_N.js +0 -1
  909. package/client/dist/assets/agentstudio-CWbp7KvH.js +0 -1
  910. package/client/dist/assets/agentstudio-DG6plf5o.js +0 -1
  911. package/client/dist/assets/agentstudio-DkZVF-Cc.js +0 -1
  912. package/client/dist/assets/analytics-B1DIQd4m.js +0 -1
  913. package/client/dist/assets/analytics-BAIZ9vE_.js +0 -1
  914. package/client/dist/assets/analytics-BTqgmgBd.js +0 -1
  915. package/client/dist/assets/analytics-BWynXPEm.js +0 -1
  916. package/client/dist/assets/analytics-DGcUsQ44.js +0 -1
  917. package/client/dist/assets/analytics-GnSnpJ4W.js +0 -1
  918. package/client/dist/assets/analytics-TWgYaoO0.js +0 -1
  919. package/client/dist/assets/analytics-kJy6Tuko.js +0 -1
  920. package/client/dist/assets/atom-one-dark-qiGhVQxg.js +0 -1
  921. package/client/dist/assets/builder-B9gorTnT.js +0 -1
  922. package/client/dist/assets/builder-Bvw5s3Mi.js +0 -1
  923. package/client/dist/assets/builder-CL5l4dU3.js +0 -1
  924. package/client/dist/assets/builder-CVDTVrQX.js +0 -1
  925. package/client/dist/assets/builder-CpS9liE9.js +0 -1
  926. package/client/dist/assets/builder-DNctIL9Q.js +0 -1
  927. package/client/dist/assets/builder-De2NxX6o.js +0 -1
  928. package/client/dist/assets/builder-DeYT7Y-m.js +0 -1
  929. package/client/dist/assets/button-4FS1ZDTp.js +0 -1
  930. package/client/dist/assets/chat-D_I7nU5K.js +0 -1
  931. package/client/dist/assets/chevron-up-6EFqEHBj.js +0 -1
  932. package/client/dist/assets/chunk-OB3PAWPO-B1EMk45A.js +0 -3
  933. package/client/dist/assets/clsx-CjueKrWZ.js +0 -1
  934. package/client/dist/assets/code-B37GRg9C.js +0 -1
  935. package/client/dist/assets/code-BBOEZbf9.js +0 -1
  936. package/client/dist/assets/code-BRm-jcyx.js +0 -1
  937. package/client/dist/assets/code-CF7w62CR.js +0 -1
  938. package/client/dist/assets/code-CLuvJt2r.js +0 -1
  939. package/client/dist/assets/code-D0RCm59f.js +0 -1
  940. package/client/dist/assets/code-DaZ-ZwCT.js +0 -1
  941. package/client/dist/assets/code-iIHkGaCL.js +0 -1
  942. package/client/dist/assets/commands-0XjAftla.js +0 -1
  943. package/client/dist/assets/commands-BAWSYHjQ.js +0 -1
  944. package/client/dist/assets/commands-BBwowgiE.js +0 -1
  945. package/client/dist/assets/commands-BacjIZLN.js +0 -1
  946. package/client/dist/assets/commands-Bs62IAZ3.js +0 -1
  947. package/client/dist/assets/commands-CLPdh-Hh.js +0 -1
  948. package/client/dist/assets/commands-DlbFzgrp.js +0 -1
  949. package/client/dist/assets/commands-LjPSsi5F.js +0 -1
  950. package/client/dist/assets/common-Bdi0qN4S.js +0 -1
  951. package/client/dist/assets/common-Bhb9zN1P.js +0 -1
  952. package/client/dist/assets/common-BykKlZg1.js +0 -1
  953. package/client/dist/assets/common-CvnNNSJA.js +0 -1
  954. package/client/dist/assets/common-D5zk_mqq.js +0 -1
  955. package/client/dist/assets/common-DQNO_al5.js +0 -1
  956. package/client/dist/assets/common-Dax30Vmp.js +0 -1
  957. package/client/dist/assets/common-DkllpVSb.js +0 -1
  958. package/client/dist/assets/core-B3mKBIh5.js +0 -1
  959. package/client/dist/assets/dashboard-B1ndRHuC.js +0 -1
  960. package/client/dist/assets/dashboard-BX7KXiqA.js +0 -1
  961. package/client/dist/assets/dashboard-B_BSNxcN.js +0 -1
  962. package/client/dist/assets/dashboard-CCeFN7-V.js +0 -1
  963. package/client/dist/assets/dashboard-CRl0WtFJ.js +0 -1
  964. package/client/dist/assets/dashboard-XGdQ5mjw.js +0 -1
  965. package/client/dist/assets/dashboard-_oltA6Jd.js +0 -1
  966. package/client/dist/assets/dashboard-bAuf5KVk.js +0 -1
  967. package/client/dist/assets/dialog-DtdR05v1.js +0 -45
  968. package/client/dist/assets/dist-js-CJ_2XX1Y.js +0 -1
  969. package/client/dist/assets/event-Bt7f3wXe.js +0 -1
  970. package/client/dist/assets/explore-BG99VGpL.js +0 -1
  971. package/client/dist/assets/explore-C0TjprJW.js +0 -1
  972. package/client/dist/assets/explore-C2dgEo7q.js +0 -1
  973. package/client/dist/assets/explore-C8NDHbob.js +0 -1
  974. package/client/dist/assets/explore-CWWgzQGR.js +0 -1
  975. package/client/dist/assets/explore-CcQXpdtS.js +0 -1
  976. package/client/dist/assets/explore-DgBACn39.js +0 -1
  977. package/client/dist/assets/explore-DsXAgnmJ.js +0 -1
  978. package/client/dist/assets/file-text-C0blZHLh.js +0 -1
  979. package/client/dist/assets/formatDistanceToNow-NjPHBLfB.js +0 -1
  980. package/client/dist/assets/getTimezoneOffsetInMilliseconds-vJ7qUoqN.js +0 -1
  981. package/client/dist/assets/git-branch-yf6LE1Bw.js +0 -1
  982. package/client/dist/assets/index-BgbCbIua.css +0 -2
  983. package/client/dist/assets/index-Ce4yZtKf.js +0 -83
  984. package/client/dist/assets/integrations-BkpRUbvp.js +0 -1
  985. package/client/dist/assets/integrations-Bo8qbJf4.js +0 -1
  986. package/client/dist/assets/integrations-CmSrKzZb.js +0 -1
  987. package/client/dist/assets/integrations-DGtq26Rr.js +0 -1
  988. package/client/dist/assets/integrations-De38GFnQ.js +0 -1
  989. package/client/dist/assets/integrations-Dw6zdtb-.js +0 -1
  990. package/client/dist/assets/integrations-Dwl9KQp0.js +0 -1
  991. package/client/dist/assets/integrations-Refg_d2I.js +0 -1
  992. package/client/dist/assets/jira-B6OYw4CJ.js +0 -1
  993. package/client/dist/assets/jira-BTF6RaOe.js +0 -1
  994. package/client/dist/assets/jira-CEetIB2q.js +0 -1
  995. package/client/dist/assets/jira-CIzsZLw5.js +0 -1
  996. package/client/dist/assets/jira-Daw9tmpI.js +0 -1
  997. package/client/dist/assets/jira-FXr7u2lh.js +0 -1
  998. package/client/dist/assets/jira-LaNQn7yl.js +0 -1
  999. package/client/dist/assets/jira-api-Cabj-H0J.js +0 -1
  1000. package/client/dist/assets/job-time-BCL7wee9.js +0 -1
  1001. package/client/dist/assets/jobs-ARwD85B9.js +0 -1
  1002. package/client/dist/assets/jobs-BMF1w4WT.js +0 -1
  1003. package/client/dist/assets/jobs-CBfzGLwm.js +0 -1
  1004. package/client/dist/assets/jobs-CPjiluBY.js +0 -1
  1005. package/client/dist/assets/jobs-CQQd58pY.js +0 -1
  1006. package/client/dist/assets/jobs-De3EqaO0.js +0 -1
  1007. package/client/dist/assets/jobs-Du9-Ei9a.js +0 -1
  1008. package/client/dist/assets/jobs-qMHbnxwC.js +0 -1
  1009. package/client/dist/assets/layers-BCLTgHXO.js +0 -1
  1010. package/client/dist/assets/loader-circle-BqV9xYGf.js +0 -1
  1011. package/client/dist/assets/loop-layout-CyXj9223.js +0 -7
  1012. package/client/dist/assets/loops-B2PhQLKR.js +0 -1
  1013. package/client/dist/assets/loops-BqbF46st.js +0 -1
  1014. package/client/dist/assets/loops-CINnHbfI.js +0 -1
  1015. package/client/dist/assets/loops-D-3XhH04.js +0 -1
  1016. package/client/dist/assets/loops-DKkEEjZ_.js +0 -1
  1017. package/client/dist/assets/loops-DzWR5-v6.js +0 -1
  1018. package/client/dist/assets/loops-WyWDkhok.js +0 -1
  1019. package/client/dist/assets/loops-scD5fIBf.js +0 -1
  1020. package/client/dist/assets/mcp-6rMoZfEO.js +0 -1
  1021. package/client/dist/assets/mcp-BD8sL5mP.js +0 -1
  1022. package/client/dist/assets/mcp-BkcA3I5s.js +0 -1
  1023. package/client/dist/assets/mcp-CCpSelOh.js +0 -1
  1024. package/client/dist/assets/mcp-CUAN6ORK.js +0 -1
  1025. package/client/dist/assets/mcp-CqbRxRTE.js +0 -1
  1026. package/client/dist/assets/mcp-DP2YfVhO.js +0 -1
  1027. package/client/dist/assets/mcp-DUVQamDz.js +0 -1
  1028. package/client/dist/assets/narration-BEKMVxGm.js +0 -1
  1029. package/client/dist/assets/narration-CjLwGKap.js +0 -1
  1030. package/client/dist/assets/narration-DANWuGsW.js +0 -1
  1031. package/client/dist/assets/narration-DGeEDWiT.js +0 -1
  1032. package/client/dist/assets/narration-DJgpGwIP.js +0 -1
  1033. package/client/dist/assets/narration-DbHnz0qV.js +0 -1
  1034. package/client/dist/assets/narration-bZSsTZG8.js +0 -1
  1035. package/client/dist/assets/narration-i6aKJKEc.js +0 -1
  1036. package/client/dist/assets/nav--u7iPYlS.js +0 -1
  1037. package/client/dist/assets/nav-C5Jgfaby.js +0 -1
  1038. package/client/dist/assets/nav-CAna_Wpt.js +0 -1
  1039. package/client/dist/assets/nav-CCLqeyHo.js +0 -1
  1040. package/client/dist/assets/nav-Cf3c90Jk.js +0 -1
  1041. package/client/dist/assets/nav-DMYQaQjR.js +0 -1
  1042. package/client/dist/assets/nav-Df_PkZ9F.js +0 -1
  1043. package/client/dist/assets/nav-VyNGBJwj.js +0 -1
  1044. package/client/dist/assets/packet-8nn9RsU7.js +0 -1
  1045. package/client/dist/assets/packet-B0H15elv.js +0 -1
  1046. package/client/dist/assets/packet-BQvBgrwh.js +0 -1
  1047. package/client/dist/assets/packet-BR7mO0-a.js +0 -1
  1048. package/client/dist/assets/packet-BgcQ6q_K.js +0 -1
  1049. package/client/dist/assets/packet-D2s92Jnn.js +0 -1
  1050. package/client/dist/assets/packet-YbtcD1HS.js +0 -1
  1051. package/client/dist/assets/packet-c0Qj_9eX.js +0 -1
  1052. package/client/dist/assets/project-repositories-Cnnuj9Ia.js +0 -1
  1053. package/client/dist/assets/rotate-ccw-DalJAQQX.js +0 -1
  1054. package/client/dist/assets/settings-B1NV8Ow9.js +0 -1
  1055. package/client/dist/assets/settings-BQ8XFZeE.js +0 -1
  1056. package/client/dist/assets/settings-BRkxfBbO.js +0 -1
  1057. package/client/dist/assets/settings-C_CcU1dP.js +0 -1
  1058. package/client/dist/assets/settings-Cto9n0eL.js +0 -1
  1059. package/client/dist/assets/settings-Pyw8uYtL.js +0 -1
  1060. package/client/dist/assets/settings-b3HVCNNd.js +0 -1
  1061. package/client/dist/assets/settings-hdive4u6.js +0 -1
  1062. package/client/dist/assets/setup-Be485n2u.js +0 -1
  1063. package/client/dist/assets/setup-CKGUxKr-.js +0 -1
  1064. package/client/dist/assets/setup-Ck1Uwd7_.js +0 -1
  1065. package/client/dist/assets/setup-Cm774a6v.js +0 -1
  1066. package/client/dist/assets/setup-DIqMQpxt.js +0 -1
  1067. package/client/dist/assets/setup-DfCsoNFL.js +0 -1
  1068. package/client/dist/assets/setup-DkeE8mP0.js +0 -1
  1069. package/client/dist/assets/setup-xVntVaz1.js +0 -1
  1070. package/client/dist/assets/specs-Bqvtz2kz.js +0 -1
  1071. package/client/dist/assets/specs-CKes-kz6.js +0 -1
  1072. package/client/dist/assets/specs-CfXxPDNB.js +0 -1
  1073. package/client/dist/assets/specs-CyF9HuTI.js +0 -1
  1074. package/client/dist/assets/specs-DMj035Mt.js +0 -1
  1075. package/client/dist/assets/specs-DfIdoU5L.js +0 -1
  1076. package/client/dist/assets/specs-j5pGLQeU.js +0 -1
  1077. package/client/dist/assets/specs-xW5pkkB7.js +0 -1
  1078. package/client/dist/assets/spending-CQnrWiR3.js +0 -1
  1079. package/client/dist/assets/square-D0JTbRSR.js +0 -1
  1080. package/client/dist/assets/tauri-shell-DE6LfGPw.js +0 -2
  1081. package/client/dist/assets/terminal-BAzpHtpY.js +0 -1
  1082. package/client/dist/assets/terminal-C7dHeR3x.js +0 -1
  1083. package/client/dist/assets/terminal-CMla5Qsz.js +0 -1
  1084. package/client/dist/assets/terminal-CdNXH-n9.js +0 -1
  1085. package/client/dist/assets/terminal-Cw5bZsmV.js +0 -1
  1086. package/client/dist/assets/terminal-DFUP4eNv.js +0 -1
  1087. package/client/dist/assets/terminal-DGqljeK_.js +0 -1
  1088. package/client/dist/assets/terminal-cU70NodO.js +0 -1
  1089. package/client/dist/assets/tickets--tiSOCcn.js +0 -1
  1090. package/client/dist/assets/tickets-BUJ3DMWU.js +0 -1
  1091. package/client/dist/assets/tickets-C1WNPODq.js +0 -1
  1092. package/client/dist/assets/tickets-CDjhWmiE.js +0 -1
  1093. package/client/dist/assets/tickets-CLgPC3uO.js +0 -1
  1094. package/client/dist/assets/tickets-D41ZMQpf.js +0 -1
  1095. package/client/dist/assets/tickets-DEaQC06P.js +0 -1
  1096. package/client/dist/assets/tickets-kcMzbLCp.js +0 -1
  1097. package/client/dist/assets/trash-D8zYUmTg.js +0 -1
  1098. package/client/dist/assets/useDesktop-BjLT0_EE.js +0 -1
  1099. package/client/dist/assets/useRuntimeRuns-C97qEqMg.js +0 -1
  1100. package/client/dist/assets/useSharedWebSocket-Bj4LMp7b.js +0 -2
  1101. package/client/dist/assets/utils-BC4DHlz2.js +0 -1
  1102. package/docs/guide/en/getting-started/4-the-dashboard-tour.md +0 -48
  1103. package/docs/guide/es/getting-started/4-the-dashboard-tour.md +0 -48
  1104. package/server/dist/mobile/mobile-preview-channel.js +0 -179
  1105. package/server/dist/mobile/mobile-preview.js +0 -366
  1106. package/server/dist/modules/browser/domain/preview-origins.js +0 -117
  1107. package/server/dist/modules/browser/runtime/preview-targets.js +0 -80
  1108. /package/client/dist/assets/{atom-one-dark-B-oHczHB.css → DocView-B-oHczHB.css} +0 -0
  1109. /package/docs/guide/de/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
  1110. /package/docs/guide/en/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
  1111. /package/docs/guide/es/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
  1112. /package/docs/guide/fr/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
  1113. /package/docs/guide/it/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
  1114. /package/docs/guide/ja/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
  1115. /package/docs/guide/pt/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
  1116. /package/docs/guide/zh/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
@@ -0,0 +1,2 @@
1
+ import{a as e}from"./rolldown-runtime-CNC7AqOf.js";import{n as t,t as n}from"./jsx-runtime-BbYvbtY8.js";import{l as r}from"./chunk-OB3PAWPO-BBaq6pUk.js";import{s as i}from"./api-DOGbyfTO.js";import{n as a,t as o}from"./createLucideIcon-DtODIU64.js";import{n as s}from"./notify-error-BsWANx1T.js";import{_ as c,s as l,t as u,u as d}from"./provider-capabilities-DtwcTme4.js";import{t as f}from"./HelpHint-Crf9_uoR.js";import{t as p}from"./copy-DOPlLymH.js";import{t as m}from"./download-C9wP_42h.js";import{a as h,i as g,n as _,o as v,r as y,s as b,t as x}from"./dropdown-menu-Bfp2CK6H.js";import{t as S}from"./external-link-CZ6Q-v1-.js";import{n as C}from"./square-Co6h5vZg.js";import{n as w,t as T}from"./confirm-dialog-ChZdHL3Q.js";import{t as E}from"./pencil-CxrRbDwb.js";import{t as D}from"./plus-fHDdjBk1.js";import{t as O}from"./sparkles-CCfUdFGY.js";import{t as k}from"./upload-CCHvUkRs.js";import{a as A,c as j,d as M,i as N,l as P,p as F,u as I}from"./dialog-C23lB2iP.js";import{t as L}from"./utils-ELimjS2Y.js";import{n as R,r as ee}from"./useDesktop-BuOp2-MR.js";import{t as z}from"./button-CHPkroew.js";import{t as B}from"./RepositoryScopeSelector-DcxbKI9w.js";import{At as V,Ct as te,Fn as ne,In as re,St as ie,_n as ae,bt as oe,it as se,lt as ce,rt as le,ut as ue,xt as H,yn as de,yt as fe}from"./index-DHzB0T26.js";import{t as pe}from"./page-header-BStSHkP8.js";import{n as me}from"./TemplatePreviewModal-C23SYCTm.js";var U={name:`file-up`,size:24,node:[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M12 12v6`,key:`3ahymv`}],[`path`,{d:`m15 15-3-3-3 3`,key:`15xj92`}]]};U.node;var he=o(U),W=e(t(),1),G=n(),K=[`invalid`,`needs_attention`,`convertible`,`running`,`current`];function ge({onConvert:e}){let{t}=a(`loops`),[n,r]=(0,W.useState)(null),[i,o]=(0,W.useState)(!1),[s,c]=(0,W.useState)(``),l=(0,W.useRef)(!0);(0,W.useEffect)(()=>(l.current=!0,()=>{l.current=!1}),[]);async function u(){o(!0),c(``),r(null);try{let e=await H.migration();l.current&&r(e)}catch(e){l.current&&c(e instanceof Error&&e.message?e.message:t(`migration.failed`))}finally{l.current&&o(!1)}}let d=n?n.loops.filter(e=>e.state!==`current`):[];return(0,G.jsxs)(`section`,{className:`rounded-lg border border-border p-3 space-y-2`,"aria-label":t(`migration.title`),children:[(0,G.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`h2`,{className:`text-sm font-medium text-foreground`,children:t(`migration.title`)}),(0,G.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:t(`migration.description`)})]}),(0,G.jsx)(z,{size:`sm`,variant:`secondary`,disabled:i,onClick:()=>void u(),children:t(i?`migration.checking`:`migration.check`)})]}),s&&(0,G.jsx)(`p`,{role:`alert`,className:`text-xs text-destructive`,children:s}),n&&(0,G.jsxs)(`div`,{role:`status`,className:`space-y-2 text-xs`,children:[(0,G.jsx)(`p`,{children:K.filter(e=>n.summary[e]>0).map(e=>t(`migration.states.${e}`)+`: `+n.summary[e]).join(` · `)||t(`migration.empty`)}),d.length===0&&n.loops.length>0&&(0,G.jsx)(`p`,{className:`text-muted-foreground`,children:t(`migration.allCurrent`)}),(0,G.jsx)(`ul`,{className:`space-y-1`,children:d.map(n=>(0,G.jsxs)(`li`,{className:`flex flex-wrap items-center gap-2`,children:[(0,G.jsx)(`span`,{className:`font-medium`,children:n.name}),(0,G.jsxs)(`span`,{className:`text-muted-foreground`,children:[t(`migration.states.${n.state}`),n.status===`published`?` · ${t(`status.published`)}`:``]}),n.issues.slice(0,3).map((e,t)=>(0,G.jsx)(`span`,{className:`text-destructive`,children:e.message},t)),n.state===`convertible`&&(0,G.jsx)(z,{size:`sm`,variant:`ghost`,onClick:()=>e(n.id),children:t(`actions.convert`)})]},n.id))})]})]})}function _e(e){return{specrailsLoops:1,loops:e.map(e=>({name:e.name,description:e.description,graph:e.graph}))}}function q(e){let t=e;return!!t&&typeof t.name==`string`&&!!t.graph&&typeof t.graph==`object`}function ve(e){let t;try{t=JSON.parse(e)}catch{throw Error(`invalid-json`)}let n=(Array.isArray(t)?t:Array.isArray(t?.loops)?t.loops:q(t)?[t]:[]).filter(q);if(n.length===0)throw Error(`no-loops`);return n.map(e=>({name:e.name,description:e.description??null,graph:e.graph}))}function ye(e){return e.length===1?`${e[0].name.trim().toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``)||`loop`}.loop.json`:`specrails-loops-${e.length}.json`}var J=[`API`,`Automation`,`CI`,`Database`,`Debugging`,`DevOps`,`Docs`,`Git`,`Maintenance`,`Performance`,`Planning`,`Quality`,`Review`,`Security`,`Testing`];function be(e,t){let n=t.query.trim().toLowerCase(),r=t.categories;return e.filter(e=>r.length>0&&!(e.category&&r.includes(e.category))?!1:!n||`${e.name} ${e.description} ${e.tags.join(` `)} ${e.category??``} ${e.searchTerms??``}`.toLowerCase().includes(n))}function xe(e){let t=new Map;for(let n of e)n.category&&t.set(n.category,(t.get(n.category)??0)+1);let n=[];for(let e of J){let r=t.get(e);r&&(n.push({category:e,count:r}),t.delete(e))}for(let e of[...t.keys()].sort())n.push({category:e,count:t.get(e)});return n}function Se({loop:e,projects:t,onClose:n,onExecute:r}){let{t:i}=a(`loops`),o=e!==null,[s,p]=(0,W.useState)(``),[m,h]=(0,W.useState)(``),[g,_]=(0,W.useState)(``),[v,y]=(0,W.useState)(``),[b,x]=(0,W.useState)(),[S,w]=(0,W.useState)(``),T=t.find(e=>e.id===(s||t[0]?.id)),E=(0,W.useMemo)(()=>T?.providers??(T?.provider?[T.provider]:[]),[T]),D=m||E[0]||``,O=(0,W.useMemo)(()=>te(D),[D]),k=d(D),L=g&&(O.some(e=>e.value===g)||k&&se(g))?g:ie(D),R=c(D,L),ee=R.includes(v)?v:u(D,L)??``,V=R.length>0,ne=ce(T?.id&&e?.id&&D?{projectId:T.id,loopId:e.id,provider:D}:null),re=()=>{let e=s||t[0]?.id;if(!e)return;let n=parseFloat(S);r({projectId:e,...S.trim()!==``&&Number.isFinite(n)&&n>0?{runCapUsd:n}:{},...b?{repositoryIds:b}:{},provider:E.length>1?D:void 0,model:O.length>0?L:void 0,effort:V?ee:void 0})};return(0,G.jsx)(N,{open:o,onOpenChange:e=>{e||n()},children:(0,G.jsx)(j,{size:`form`,showCloseButton:!1,children:e&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(M,{children:[(0,G.jsx)(F,{children:i(`run.title`,{name:e.name})}),(0,G.jsx)(P,{children:i(`run.subtitle`)}),(0,G.jsx)(f,{topic:`loopBuilder`,variant:`link`,className:`mt-1`})]}),(0,G.jsxs)(A,{className:`space-y-2`,children:[(0,G.jsx)(`label`,{className:`block text-label text-muted-foreground`,children:i(`run.project`)}),t.length===0?(0,G.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:i(`run.noProjects`)}):(0,G.jsx)(`select`,{"aria-label":i(`run.project`),"data-testid":`run-project-select`,value:s||t[0]?.id,onChange:e=>{p(e.target.value),h(``),_(``),y(``),x(void 0)},className:`w-full text-xs rounded border border-border bg-transparent px-2 py-1 text-foreground focus:outline-none focus:ring-1 focus:ring-accent-primary/40`,children:t.map(e=>(0,G.jsx)(`option`,{value:e.id,children:e.name},e.id))}),(0,G.jsx)(B,{repositories:T?.repositories??[],value:b,onChange:x}),E.length>1&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`label`,{className:`block text-label text-muted-foreground`,children:i(`run.provider`)}),(0,G.jsx)(`select`,{"aria-label":i(`run.provider`),value:D,onChange:e=>{h(e.target.value),_(``),y(``)},className:`w-full text-xs rounded border border-border bg-transparent px-2 py-1 text-foreground focus:outline-none focus:ring-1 focus:ring-accent-primary/40`,children:E.map(e=>(0,G.jsx)(`option`,{value:e,children:l(e)},e))})]}),O.length>0&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`label`,{className:`block text-label text-muted-foreground`,children:i(`run.model`)}),k?(0,G.jsx)(le,{value:L,options:O,ariaLabel:i(`run.model`),testId:`run-model-select`,className:`w-full px-2 py-1 text-xs`,onCommit:e=>{_(e),y(u(D,e)??``)}}):(0,G.jsx)(`select`,{"aria-label":i(`run.model`),"data-testid":`run-model-select`,value:L,onChange:e=>{let t=e.target.value;_(t),y(u(D,t)??``)},className:`w-full text-xs rounded border border-border bg-transparent px-2 py-1 text-foreground focus:outline-none focus:ring-1 focus:ring-accent-primary/40`,children:O.map(e=>(0,G.jsx)(`option`,{value:e.value,children:e.label},e.value))})]}),V&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`label`,{className:`block text-label text-muted-foreground`,children:i(`run.effort`)}),(0,G.jsx)(`select`,{"aria-label":i(`run.effort`),value:ee,onChange:e=>y(e.target.value),className:`w-full text-xs rounded border border-border bg-transparent px-2 py-1 text-foreground focus:outline-none focus:ring-1 focus:ring-accent-primary/40`,children:R.map(e=>(0,G.jsx)(`option`,{value:e,children:e},e))})]}),(0,G.jsx)(`label`,{className:`block text-label text-muted-foreground`,children:i(`run.runCap`)}),(0,G.jsx)(`input`,{type:`number`,min:`0`,step:`0.01`,inputMode:`decimal`,"aria-label":i(`run.runCap`),"data-testid":`run-cap-input`,value:S,onChange:e=>w(e.target.value),placeholder:i(`run.runCapPlaceholder`),className:`num w-full text-xs rounded border border-border bg-transparent px-2 py-1 text-foreground focus:outline-none focus:ring-1 focus:ring-accent-primary/40`}),(0,G.jsx)(`p`,{className:`text-caption text-muted-foreground`,children:i(`run.runCapHint`)}),(0,G.jsx)(ue,{projectId:T?.id,loopId:e.id,provider:D||null,className:`pt-1`})]}),ne.dialog,(0,G.jsxs)(I,{children:[(0,G.jsx)(z,{variant:`ghost`,onClick:n,children:i(`common:actions.cancel`)}),(0,G.jsxs)(z,{onClick:()=>ne.guard(re),disabled:t.length===0,children:[(0,G.jsx)(C,{className:`w-3.5 h-3.5 mr-1.5`}),i(`run.execute`)]})]})]})})})}function Ce({loop:e,projects:t,onClose:n,onConverted:r}){let{t:i}=a(`loops`),[o,s]=(0,W.useState)(``),[c,l]=(0,W.useState)(!1),[u,d]=(0,W.useState)(``),f=e.graph.nodes.some(e=>e.type===`shell`&&!e.data?.repositoryId),p=t.flatMap(e=>(e.repositories??[]).map(t=>({key:JSON.stringify([e.id,t.id]),id:t.id,label:`${e.name} / ${t.name}`}))),m=p.find(e=>e.key===o);async function h(){l(!0),d(``);try{r((await H.convert(e.id,m?.id)).loop)}catch(e){d(e instanceof oe?e.errors.map(e=>`${e.nodeId?e.nodeId+`: `:``}${e.message}`).join(`
2
+ `):e instanceof Error&&e.message===`engine_unsupported`?i(`conversion.coreRequired`):e instanceof Error?i(`conversion.error`)+`: `+e.message:i(`conversion.error`))}finally{l(!1)}}return(0,G.jsx)(N,{open:!0,onOpenChange:e=>{!e&&!c&&n()},children:(0,G.jsxs)(j,{size:`form`,showCloseButton:!1,children:[(0,G.jsxs)(M,{children:[(0,G.jsx)(F,{children:i(`conversion.title`,{name:e.name})}),(0,G.jsx)(P,{children:i(`conversion.description`)})]}),(0,G.jsxs)(A,{className:`space-y-3`,children:[f&&(0,G.jsxs)(`label`,{className:`flex flex-col gap-2 text-sm`,children:[i(`conversion.repository`),(0,G.jsxs)(`select`,{className:`rounded border border-border bg-background p-2`,value:o,onChange:e=>s(e.target.value),disabled:c,children:[(0,G.jsx)(`option`,{value:``,children:i(`conversion.selectRepository`)}),p.map(e=>(0,G.jsx)(`option`,{value:e.key,children:e.label},e.key))]})]}),u&&(0,G.jsx)(`p`,{role:`alert`,className:`whitespace-pre-wrap text-sm text-destructive`,children:u})]}),(0,G.jsxs)(I,{children:[(0,G.jsx)(z,{variant:`ghost`,disabled:c,onClick:n,children:i(`common:actions.cancel`)}),(0,G.jsx)(z,{disabled:c||f&&!m,onClick:()=>void h(),children:i(c?`conversion.pending`:`conversion.submit`)})]})]})})}var Y={draft:`bg-accent-secondary/15 text-accent-secondary ring-accent-secondary/40`,published:`bg-accent-success/15 text-accent-success ring-accent-success/40`};function we({status:e}){let{t}=a(`loops`);return(0,G.jsx)(`span`,{"data-chip":``,className:L(`inline-flex h-5 items-center px-1.5 rounded text-caption font-medium ring-1 ring-inset`,Y[e]),children:t(`status.${e}`)})}function X({onOpenBuilder:e,onWindowOpened:t,inDialog:n=!1}={}){let{t:o}=a(`loops`),c=r(),l=(0,W.useCallback)(e=>e.replace(/:/g,`_`),[]),u=(0,W.useCallback)((e,t)=>o(`catalog.${l(e)}.name`,{defaultValue:t}),[o,l]),d=(0,W.useCallback)((e,t)=>o(`catalog.${l(e)}.description`,{defaultValue:t}),[o,l]),[f,p]=(0,W.useState)([]),[h,g]=(0,W.useState)([]),[_,v]=(0,W.useState)(!0),[y,b]=(0,W.useState)(null),[x,C]=(0,W.useState)(null),[w,E]=(0,W.useState)(null),[k,A]=(0,W.useState)(null),[j,M]=(0,W.useState)(null),[N,P]=(0,W.useState)(new Set),F=`specrails-desktop:loop-template-filter`,I=(()=>{try{let e=localStorage.getItem(F),t=e?JSON.parse(e):null;return{query:typeof t?.query==`string`?t.query:``,categories:Array.isArray(t?.categories)?t.categories:[]}}catch{return{query:``,categories:[]}}})(),[z,B]=(0,W.useState)(I.query),[V,te]=(0,W.useState)(I.categories);(0,W.useEffect)(()=>{try{localStorage.setItem(F,JSON.stringify({query:z,categories:V}))}catch{}},[z,V]);let ie=(0,W.useCallback)(e=>{te(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])},[]),se=(0,W.useCallback)(()=>{B(``),te([])},[]),ce=(0,W.useRef)(null),{projects:le,activeProjectId:ue,setActiveProjectId:U}=ee(),K=(0,W.useCallback)(e=>{P(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),q=(0,W.useCallback)(e=>{if(e.length===0)return;let t=new Blob([JSON.stringify(_e(e),null,2)],{type:`application/json`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=ye(e),r.click(),URL.revokeObjectURL(n)},[]),J=(0,W.useCallback)(async e=>{try{let t=await H.legacyGraph(e.id);q([{...e,name:o(`actions.originalCopyName`,{name:e.name}),graph:t.graph}])}catch{s(o(`errors.exportLegacy`),{retry:()=>void J(e)})}},[q,o]),Y=(0,W.useCallback)(async()=>{try{let[e,t]=await Promise.all([H.list(),H.templates()]);p(e),g(t)}catch{s(o(`errors.load`),{retry:()=>void Y()})}finally{v(!1)}},[o]);(0,W.useEffect)(()=>{Y()},[Y]);let we=(0,W.useCallback)(async e=>{try{let t=ve(await e.text()),{imported:n,skipped:r}=await H.importLoops(t);await Y(),n.length&&i.success(o(`import.done`,{count:n.length})),r.length&&i.warning(o(`import.skipped`,{count:r.length,names:r.join(`, `)})),!n.length&&!r.length&&i.warning(o(`import.invalid`))}catch(t){let n=t instanceof Error?t.message:``;n===`invalid-json`||n===`no-loops`?s(o(`import.invalid`)):s(o(`errors.save`),{retry:()=>void we(e)})}},[Y,o]),X=(0,W.useCallback)(t=>{e?e(t):c(`/loops/${t}/edit`)},[e,c]),Q=(0,W.useCallback)(async()=>{try{let e=await H.create({name:o(`newLoopName`)});X(e.id)}catch{s(o(`errors.save`),{retry:()=>void Q()})}},[o,X]),Ee=(0,W.useCallback)(async e=>{try{let t=await H.fromTemplate(e);X(t.id)}catch{s(o(`errors.save`),{retry:()=>void Ee(e)})}},[o,X]),De=(0,W.useCallback)(async({projectId:e,provider:t,model:n,effort:r,repositoryIds:a,runCapUsd:l})=>{let u=k;if(u){A(null);try{let{loopRunId:s}=await H.runStandalone(e,u.id,{aiEngine:t,model:n,reasoning_effort:r,...a?{repositoryIds:a}:{},...l===void 0?{}:{runCapUsd:l}});U(e),c(`/jobs/${s}`),i.success(o(`run.launched`,{name:u.name}))}catch{s(o(`errors.save`),{retry:()=>void De({projectId:e,provider:t,model:n,effort:r,repositoryIds:a,runCapUsd:l})})}}},[k,c,U,o]),Oe=(0,W.useCallback)(async e=>{try{await H.publish(e),await Y()}catch(t){t instanceof oe?s(o(`errors.publishInvalid`)):s(o(`errors.save`),{retry:()=>void Oe(e)})}},[o,Y]),ke=(0,W.useCallback)(async e=>{try{await H.unpublish(e),await Y()}catch{s(o(`errors.save`),{retry:()=>void ke(e)})}},[o,Y]),$=(0,W.useCallback)(async e=>{try{await H.duplicate(e),await Y()}catch{s(o(`errors.save`),{retry:()=>void $(e)})}},[o,Y]),Ae=(0,W.useCallback)(async()=>{let e=w;if(e){E(null);try{await H.restoreBuiltin(e),await Y(),i.success(o(`builder.builtin.restored`))}catch{s(o(`errors.save`),{retry:()=>void Ae()})}}},[w,o,Y]),je=(0,W.useCallback)(e=>b(e),[]),Me=(0,W.useCallback)(async()=>{let e=y;if(e){b(null);try{await H.remove(e),await Y()}catch{s(o(`errors.save`),{retry:()=>void Me()})}}},[y,o,Y]),Ne=(0,W.useCallback)(async()=>{try{await re(ue),t?.()}catch(e){s(o(`window.openFailed`),{detail:e instanceof Error?e.message:void 0,retry:()=>void Ne()})}},[ue,t,o]),Pe=f.filter(e=>e.builtinId),Fe=f.filter(e=>!e.builtinId),Ie=Fe.filter(e=>e.status===`draft`),Le=Fe.filter(e=>e.status===`published`),Re=xe(h),ze=be(h.map(e=>({...e,searchTerms:`${u(e.id,e.name)} ${d(e.id,e.description)} ${e.category?o(`categories.${e.category}`,{defaultValue:e.category}):``}`})),{query:z,categories:V}),Be=z.trim()!==``||V.length>0;return(0,G.jsxs)(`div`,{className:`h-full overflow-y-auto`,children:[(0,G.jsxs)(`div`,{className:`max-w-6xl mx-auto px-4 py-6`,children:[(0,G.jsx)(pe,{className:`mb-6`,titleHidden:n,title:o(`title`),description:o(`subtitle`),actions:(0,G.jsxs)(G.Fragment,{children:[!ne()&&(0,G.jsxs)(`button`,{type:`button`,onClick:()=>void Ne(),className:`inline-flex items-center gap-1.5 h-8 px-3 rounded-md text-xs border border-border hover:bg-muted`,children:[(0,G.jsx)(S,{className:`w-3.5 h-3.5`}),o(`window.open`)]}),N.size>0&&(0,G.jsxs)(`button`,{type:`button`,onClick:()=>q(f.filter(e=>N.has(e.id))),className:`inline-flex items-center gap-1.5 h-8 px-3 rounded-md text-label border border-border text-foreground hover:bg-muted`,children:[(0,G.jsx)(ae,{className:`w-3.5 h-3.5`}),o(`actions.export`),` (`,N.size,`)`]}),(0,G.jsxs)(`button`,{type:`button`,onClick:()=>ce.current?.click(),className:`inline-flex items-center gap-1.5 h-8 px-3 rounded-md text-label border border-border text-foreground hover:bg-muted`,children:[(0,G.jsx)(he,{className:`w-3.5 h-3.5`}),o(`actions.import`)]}),(0,G.jsx)(`input`,{ref:ce,type:`file`,accept:`application/json,.json`,className:`hidden`,onChange:e=>{let t=e.target.files?.[0];t&&we(t),e.target.value=``}}),(0,G.jsxs)(`button`,{type:`button`,onClick:Q,className:`inline-flex items-center gap-1.5 h-8 px-3 rounded-md text-label bg-primary text-primary-foreground hover:bg-primary/90`,children:[(0,G.jsx)(D,{className:`w-3.5 h-3.5`}),o(`newLoop`)]})]})}),_?(0,G.jsxs)(`div`,{role:`status`,"aria-busy":`true`,"aria-label":o(`common:states.loading`),className:`space-y-3`,"data-testid":`loops-loading`,children:[(0,G.jsx)(`div`,{className:`h-3 w-24 rounded bg-muted/40 motion-safe:animate-pulse`}),(0,G.jsx)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3`,children:[0,1,2].map(e=>(0,G.jsx)(`div`,{className:`h-28 rounded-lg border border-border bg-card motion-safe:animate-pulse`},e))})]}):(0,G.jsxs)(`div`,{className:`space-y-8`,children:[f.length===0&&(0,G.jsxs)(`div`,{className:`rounded-lg border border-dashed border-border p-8 text-center`,children:[(0,G.jsx)(`p`,{className:`text-sm font-medium text-foreground`,children:o(`empty.title`)}),(0,G.jsx)(`p`,{className:`text-xs text-muted-foreground mt-1`,children:o(`empty.body`)})]}),f.some(e=>!e.graph.nodes.some(e=>e.type===`core`))&&(0,G.jsx)(ge,{onConvert:e=>{let t=f.find(t=>t.id===e);t&&M(t)}}),Le.length>0&&(0,G.jsx)(Te,{title:o(`sections.published`),children:Le.map(e=>(0,G.jsx)(Z,{loop:e,selected:N.has(e.id),onToggleSelect:()=>K(e.id),onEdit:()=>X(e.id),onUnpublish:()=>ke(e.id),onDuplicate:()=>$(e.id),onExport:()=>q([e]),onExportLegacy:e.hasLegacyGraph?()=>void J(e):void 0,onConvert:e.graph.nodes.some(e=>e.type===`core`)?void 0:()=>M(e),onDelete:()=>je(e.id),onRun:fe(e.graph)?void 0:()=>A(e)},e.id))}),Ie.length>0&&(0,G.jsx)(Te,{title:o(`sections.drafts`),children:Ie.map(e=>(0,G.jsx)(Z,{loop:e,selected:N.has(e.id),onToggleSelect:()=>K(e.id),onEdit:()=>X(e.id),onPublish:()=>Oe(e.id),onDuplicate:()=>$(e.id),onExport:()=>q([e]),onExportLegacy:e.hasLegacyGraph?()=>void J(e):void 0,onConvert:e.graph.nodes.some(e=>e.type===`core`)?void 0:()=>M(e),onDelete:()=>je(e.id)},e.id))}),Pe.length>0&&(0,G.jsx)(Te,{title:o(`sections.builtIn`),children:Pe.map(e=>(0,G.jsx)(Z,{loop:{...e,name:e.builtinModified?e.name:u(e.id,e.name)},builtIn:!0,selected:N.has(e.id),onToggleSelect:()=>K(e.id),onEdit:()=>X(e.id),onPublish:e.status===`draft`?()=>Oe(e.id):void 0,onDuplicate:()=>$(e.id),onExport:()=>q([e]),onRestore:e.builtinModified?()=>E(e.id):void 0},e.id))}),h.length>0&&(0,G.jsxs)(`section`,{children:[(0,G.jsxs)(`div`,{className:`flex items-center justify-between gap-3 mb-2 flex-wrap`,children:[(0,G.jsx)(`h2`,{className:`text-xs font-semibold text-muted-foreground`,children:o(`sections.templates`)}),(0,G.jsx)(`input`,{type:`search`,value:z,onChange:e=>B(e.target.value),placeholder:o(`gallery.search`),"aria-label":o(`gallery.search`),"data-testid":`template-search`,className:`h-7 w-48 max-w-full rounded-md border border-border bg-surface/40 px-2.5 text-xs text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-accent-primary`})]}),(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5 mb-3`,"data-testid":`category-chips`,children:[Re.map(({category:e,count:t})=>{let n=V.includes(e);return(0,G.jsxs)(`button`,{type:`button`,"aria-pressed":n,onClick:()=>ie(e),className:L(`inline-flex items-center gap-1 h-6 px-2 rounded-full text-xs border transition-colors`,n?`border-accent-primary bg-accent-primary/15 text-accent-primary`:`border-border bg-surface/40 text-muted-foreground hover:text-foreground hover:bg-muted`),children:[o(`categories.${e}`,{defaultValue:e}),(0,G.jsx)(`span`,{className:`opacity-60 tabular-nums`,children:t})]},e)}),Be&&(0,G.jsx)(`button`,{type:`button`,onClick:se,className:`inline-flex items-center h-6 px-2 rounded-full text-xs text-accent-primary hover:underline`,children:o(`gallery.clearFilter`)})]}),ze.length===0?(0,G.jsxs)(`div`,{className:`rounded-lg border border-dashed border-border p-6 text-center`,"data-testid":`template-empty`,children:[(0,G.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:o(`gallery.noResults`)}),(0,G.jsx)(`button`,{type:`button`,onClick:se,className:`mt-2 text-xs text-accent-primary hover:underline`,children:o(`gallery.clearFilter`)})]}):(0,G.jsx)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3`,children:ze.map(e=>(0,G.jsxs)(`div`,{className:`rounded-lg border border-border bg-card p-3 flex flex-col gap-2`,"data-testid":`template-card`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(O,{className:`w-3.5 h-3.5 text-muted-foreground flex-shrink-0`}),(0,G.jsx)(`span`,{className:`text-sm font-medium text-foreground truncate`,children:u(e.id,e.name)}),e.category&&(0,G.jsx)(`span`,{"data-chip":``,className:`ml-auto inline-flex h-5 items-center px-1.5 rounded text-caption bg-accent-info/15 text-accent-info flex-shrink-0`,children:o(`categories.${e.category}`,{defaultValue:e.category})})]}),(0,G.jsx)(`p`,{className:`text-xs text-muted-foreground flex-1`,children:d(e.id,e.description)}),(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1`,children:[fe(e.graph)?(0,G.jsxs)(`span`,{title:o(`gallery.needsSpecHint`),"data-chip":``,className:`inline-flex h-5 items-center px-1.5 rounded text-caption bg-muted text-muted-foreground`,children:[o(`gallery.needsSpec`),(0,G.jsxs)(`span`,{className:`sr-only`,children:[` (`,o(`gallery.needsSpecHint`),`)`]})]}):(0,G.jsxs)(`span`,{title:o(`gallery.standaloneHint`),"data-chip":``,className:`inline-flex h-5 items-center px-1.5 rounded text-caption bg-accent-success/15 text-accent-success`,children:[o(`gallery.standalone`),(0,G.jsxs)(`span`,{className:`sr-only`,children:[` (`,o(`gallery.standaloneHint`),`)`]})]}),e.tags.map(e=>(0,G.jsx)(`span`,{"data-chip":``,className:`inline-flex h-5 items-center px-1.5 rounded text-caption bg-muted text-muted-foreground`,children:e},e))]}),(0,G.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,G.jsxs)(`button`,{type:`button`,onClick:()=>C({...e,name:u(e.id,e.name),description:d(e.id,e.description)}),className:`inline-flex items-center gap-1.5 h-7 px-2.5 rounded-md text-xs border border-border hover:bg-muted text-foreground`,children:[(0,G.jsx)(de,{className:`w-3 h-3`}),o(`actions.preview`)]}),(0,G.jsxs)(`button`,{type:`button`,onClick:()=>Ee(e.id),className:`inline-flex items-center gap-1.5 h-7 px-2.5 rounded-md text-xs border border-border hover:bg-muted text-foreground`,children:[(0,G.jsx)(m,{className:`w-3 h-3`}),o(`actions.use`)]})]})]},e.id))})]})]})]}),(0,G.jsx)(T,{open:y!==null,onOpenChange:e=>{e||b(null)},title:o(`confirmDeleteTitle`,{name:f.find(e=>e.id===y)?.name??``}),description:o(`confirmDelete`),confirmLabel:o(`confirmDeleteAction`),confirmTestId:`confirm-delete-loop`,onConfirm:()=>Me()}),(0,G.jsx)(T,{open:w!==null,onOpenChange:e=>{e||E(null)},title:o(`builder.builtin.confirmTitle`),description:o(`builder.builtin.confirmBody`),confirmLabel:o(`actions.restoreBuiltin`),tone:`default`,confirmTestId:`confirm-restore-builtin`,onConfirm:()=>Ae()}),(0,G.jsx)(me,{template:x,onClose:()=>C(null),onUse:e=>{C(null),Ee(e)}}),j&&(0,G.jsx)(Ce,{loop:j,projects:le,onClose:()=>M(null),onConverted:e=>{p(t=>t.map(t=>t.id===e.id?e:t)),M(null),X(e.id)}},j.id),(0,G.jsx)(Se,{loop:k?{id:k.id,name:k.name}:null,projects:le.map(e=>({id:e.id,name:e.name,providers:R(e),repositories:e.repositories})),onClose:()=>A(null),onExecute:De})]})}function Te({title:e,children:t}){return(0,G.jsxs)(`section`,{children:[(0,G.jsx)(`h2`,{className:`text-xs font-semibold text-muted-foreground mb-2`,children:e}),(0,G.jsx)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3`,children:t})]})}function Z({loop:e,builtIn:t=!1,selected:n,onToggleSelect:r,onEdit:i,onPublish:o,onUnpublish:s,onDuplicate:c,onExport:l,onExportLegacy:u,onConvert:d,onDelete:f,onRun:S,onRestore:T}){let{t:D}=a(`loops`),O=e.graph?.nodes?.length??0;return(0,G.jsxs)(`div`,{className:`rounded-lg border border-border bg-card p-3 flex flex-col gap-2`,"data-testid":t?`builtin-loop-card`:`loop-card`,children:[(0,G.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[(0,G.jsx)(`input`,{type:`checkbox`,checked:n,onChange:r,"aria-label":D(`actions.select`,{name:e.name}),className:`accent-accent-primary flex-shrink-0`}),(0,G.jsx)(`span`,{className:`text-sm font-medium text-foreground truncate`,children:e.name})]}),(0,G.jsxs)(`div`,{className:`flex items-center gap-1 flex-shrink-0`,children:[t&&(0,G.jsx)(`span`,{"data-chip":``,className:`inline-flex h-5 items-center px-1.5 rounded text-caption bg-muted text-muted-foreground`,"data-testid":`builtin-badge`,children:D(`builtInBadge`)}),(0,G.jsx)(we,{status:e.status})]})]}),(0,G.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[D(`card.nodes`,{count:O}),t&&e.builtinModified&&(0,G.jsxs)(`span`,{className:`ml-1.5 text-accent-secondary`,children:[`· `,D(`card.builtinModified`)]})]}),(0,G.jsxs)(`div`,{className:`flex items-center gap-1`,children:[S&&(0,G.jsx)(Q,{icon:C,label:D(`actions.run`),onClick:S}),(0,G.jsx)(Q,{icon:E,label:D(`actions.edit`),onClick:i}),(0,G.jsxs)(x,{children:[(0,G.jsx)(h,{"aria-label":D(`actions.more`),title:D(`actions.more`),className:`ml-auto inline-flex items-center justify-center w-7 h-7 rounded-md text-muted-foreground hover:text-foreground hover:bg-muted transition-colors`,children:(0,G.jsx)(b,{className:`w-3.5 h-3.5`,"aria-hidden":!0})}),(0,G.jsxs)(_,{align:`end`,children:[o&&(0,G.jsxs)(y,{onSelect:o,children:[(0,G.jsx)(k,{className:`w-3.5 h-3.5`,"aria-hidden":!0}),D(`actions.publish`)]}),s&&(0,G.jsxs)(y,{onSelect:s,children:[(0,G.jsx)(m,{className:`w-3.5 h-3.5`,"aria-hidden":!0}),D(`actions.unpublish`)]}),(0,G.jsxs)(y,{onSelect:c,children:[(0,G.jsx)(p,{className:`w-3.5 h-3.5`,"aria-hidden":!0}),D(`actions.duplicate`)]}),(0,G.jsxs)(y,{onSelect:l,children:[(0,G.jsx)(ae,{className:`w-3.5 h-3.5`,"aria-hidden":!0}),D(`actions.export`)]}),u&&(0,G.jsxs)(y,{onSelect:u,children:[(0,G.jsx)(ae,{className:`w-3.5 h-3.5`,"aria-hidden":!0}),D(`actions.exportLegacy`)]}),d&&(0,G.jsxs)(y,{onSelect:d,children:[(0,G.jsx)(V,{className:`w-3.5 h-3.5`,"aria-hidden":!0}),D(`actions.convert`)]}),T&&(0,G.jsxs)(y,{onSelect:T,children:[(0,G.jsx)(v,{className:`w-3.5 h-3.5`,"aria-hidden":!0}),D(`actions.restoreBuiltin`)]}),f&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(g,{}),(0,G.jsxs)(y,{destructive:!0,onSelect:f,children:[(0,G.jsx)(w,{className:`w-3.5 h-3.5`,"aria-hidden":!0}),D(`actions.delete`)]})]})]})]})]})]})}function Q({icon:e,label:t,onClick:n}){return(0,G.jsxs)(z,{type:`button`,variant:`ghost`,size:`sm`,onClick:n,className:`h-7 gap-1.5 px-2 text-xs text-muted-foreground hover:text-foreground`,children:[(0,G.jsx)(e,{className:`w-3.5 h-3.5`,"aria-hidden":!0}),t]})}export{X as default};
@@ -0,0 +1 @@
1
+ import{a as e}from"./rolldown-runtime-CNC7AqOf.js";import{n as t,t as n}from"./jsx-runtime-BbYvbtY8.js";import{t as r}from"./react-dom-DDD8FYaU.js";import{l as i}from"./chunk-OB3PAWPO-BBaq6pUk.js";import{a}from"./api-DOGbyfTO.js";import{n as o,t as s}from"./createLucideIcon-DtODIU64.js";import{t as c}from"./chevron-up-BAMuP0XD.js";import{t as l}from"./sparkles-CCfUdFGY.js";import{t as u}from"./x-Bu7X_eR2.js";import{_ as d}from"./dialog-C23lB2iP.js";import{r as ee}from"./useDesktop-BuOp2-MR.js";var f={name:`arrow-up`,size:24,node:[[`path`,{d:`m5 12 7-7 7 7`,key:`hav0vg`}],[`path`,{d:`M12 19V5`,key:`x0mq9r`}]]};f.node;var p=s(f),m={name:`globe`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20`,key:`13o1zl`}],[`path`,{d:`M2 12h20`,key:`9i4pu4`}]]};m.node;var h=s(m),g={name:`list-checks`,size:24,node:[[`path`,{d:`M13 5h8`,key:`a7qcls`}],[`path`,{d:`M13 12h8`,key:`h98zly`}],[`path`,{d:`M13 19h8`,key:`c3s6r1`}],[`path`,{d:`m3 17 2 2 4-4`,key:`1jhpwq`}],[`path`,{d:`m3 7 2 2 4-4`,key:`1obspn`}]]};g.node;var _=s(g),v={name:`message-square`,size:24,node:[[`path`,{d:`M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z`,key:`18887p`}]]};v.node;var y=s(v),b={name:`messages-square`,size:24,node:[[`path`,{d:`M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z`,key:`1n2ejm`}],[`path`,{d:`M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1`,key:`1qfcsi`}]]};b.node;var x=s(b),S={name:`scroll-text`,size:24,node:[[`path`,{d:`M15 12h-5`,key:`r7krc0`}],[`path`,{d:`M15 8h-5`,key:`1khuty`}],[`path`,{d:`M19 17V5a2 2 0 0 0-2-2H4`,key:`zz82l3`}],[`path`,{d:`M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3`,key:`1ph1d7`}]]};S.node;var C=s(S),w=`⌘⇧I`;function T(e,t=typeof navigator>`u`?``:navigator.platform){return/Mac|iPhone|iPad/i.test(t)?e:e===w?`Ctrl+Alt+I`:e.replace(/⌥/g,`Alt+`).replace(/⌘/g,`Ctrl+`).replace(/⇧/g,`Shift+`).replace(/[⏎↵]/g,`Enter`)}function E(e=typeof navigator>`u`?``:navigator.platform){return/Mac|iPhone|iPad/i.test(e)}function D(e){return T(w,e)}function O(e){return E(e)?`Meta+Shift+I`:`Control+Alt+I`}var k=e(t(),1),A=[`title`,`description`,`labels`,`priority`,`acceptanceCriteria`,`nonGoals`,`repositoryIds`],j={title:``,description:``,labels:[],priority:`medium`,acceptanceCriteria:[],nonGoals:[]};function M(e){return!e||typeof e!=`object`?!1:e.type===`spec_draft.update`}var te=e(r(),1),N=n(),P=42;function F(e){let t=e.replace(/\s+/g,` `).trim();return t.length<=P?t:t.slice(0,P-1).trimEnd()+`…`}function I({chat:e,projectName:t,onRestore:n,onClose:r}){let{t:i}=o(`chat`),a=F(e.label);return(0,N.jsxs)(`div`,{"data-testid":`minimized-chat-chip-${e.id}`,className:`grid items-start gap-2 w-full max-w-full`,style:{gridTemplateColumns:`auto minmax(0, 1fr) auto`},children:[(0,N.jsx)(L,{kind:e.kind}),(0,N.jsxs)(`button`,{type:`button`,onClick:n,className:`min-w-0 text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent-primary/50 rounded overflow-hidden`,"aria-label":i(`chip.restore`,{label:e.label}),title:e.label,children:[(0,N.jsx)(`div`,{className:`text-sm font-medium text-foreground truncate`,children:a}),(0,N.jsx)(`div`,{className:`text-caption text-muted-foreground mt-0.5 truncate`,children:i(`chip.continueEditing`,{projectName:t})})]}),(0,N.jsx)(`button`,{type:`button`,onClick:r,className:`flex items-center justify-center w-6 h-6 rounded text-muted-foreground hover:text-foreground hover:bg-accent/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent-primary/50`,"aria-label":i(`chip.close`,{label:e.label}),children:(0,N.jsx)(u,{className:`w-3.5 h-3.5`})})]})}function L({kind:e}){let{t}=o(`chat`);return(0,N.jsx)(e===`ai-edit`?l:x,{className:`w-4 h-4 text-accent-primary flex-shrink-0 mt-0.5`,"aria-label":t(e===`ai-edit`?`chip.kindAiEdit`:`chip.kindExploreSpec`)})}function R({chats:e,projects:t,hidden:n,onRestore:r,onClose:i}){let{t:a}=o(`chat`),s=(0,k.useMemo)(()=>{let e=new Map;for(let n of t)e.set(n.id,n.name);return e},[t]),l=(0,k.useMemo)(()=>[...e].sort((e,t)=>t.createdAt-e.createdAt),[e]);return n||l.length===0?null:(0,te.createPortal)((0,N.jsxs)(`div`,{"data-testid":`minimized-chats-dock`,"aria-label":a(`dock.minimizedSessions`,{count:l.length}),className:`fixed bottom-4 right-14 ${d.dock} flex flex-col-reverse gap-2 w-[320px] max-w-[calc(100vw-15rem)] max-h-[70vh] overflow-y-auto pointer-events-none`,children:[l.map(e=>(0,N.jsx)(`div`,{className:`pointer-events-auto glass-card border border-border/30 rounded-lg p-3 shadow-lg w-full`,children:(0,N.jsx)(I,{chat:e,projectName:s.get(e.projectId)??a(`dock.unknownProject`),onRestore:()=>r(e.id),onClose:()=>i(e.id)})},e.id)),l.length>1&&(0,N.jsxs)(`div`,{className:`pointer-events-auto self-end inline-flex items-center gap-1 rounded-full bg-card/80 border border-border/40 px-2 py-0.5 text-caption text-muted-foreground`,children:[(0,N.jsx)(c,{className:`w-3 h-3`}),a(`dock.minimizedCount`,{count:l.length})]})]}),document.body)}var z=(0,k.createContext)(null),B=`specrails-desktop:minimized-chats`,V=`specrails-desktop:minimized-chats-pending`,H=50,U=8e3;function W(){return q(B)}function G(e){Y(B,e)}function ne(){return q(V)}function K(e){Y(V,e)}function q(e){if(typeof window>`u`)return[];try{let t=window.localStorage.getItem(e);if(!t)return[];let n=JSON.parse(t);return Array.isArray(n)?n.filter(re):[]}catch{return[]}}function J(e){return e.length<=H?e:[...e].sort((e,t)=>e.createdAt-t.createdAt).slice(e.length-H)}function Y(e,t){if(!(typeof window>`u`))try{window.localStorage.setItem(e,JSON.stringify(J(t)))}catch{}}function re(e){if(!e||typeof e!=`object`)return!1;let t=e;return!(typeof t.id!=`string`||typeof t.projectId!=`string`||typeof t.label!=`string`||typeof t.restoreRoute!=`string`||typeof t.createdAt!=`number`||t.kind!==`explore-spec`&&t.kind!==`ai-edit`||!t.params||typeof t.params!=`object`)}function X(){return typeof crypto<`u`&&`randomUUID`in crypto?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function Z(e){return e.kind===`explore-spec`?e.params.resumeConversationId??`pending:${e.params.pendingSpecId}`:e.params.resumeRefineId??`agent:${e.params.agentId}`}function Q(e,t){return e.kind!==t.kind||e.projectId!==t.projectId?!1:Z(e)===Z(t)}function ie({children:e}){let{projects:t,activeProjectId:n,setActiveProjectId:r}=ee(),o=i(),{registerHandler:s,unregisterHandler:c}=a(),[l,u]=(0,k.useState)(()=>W()),[d,f]=(0,k.useState)([]),p=(0,k.useRef)(l);p.current=l;let m=(0,k.useRef)(d);m.current=d;let h=(0,k.useRef)(new Map),g=(0,k.useRef)(t);g.current=t;let _=(0,k.useRef)(!1);(0,k.useEffect)(()=>{if(_.current)return;_.current=!0;let e=ne();K([]),e.length!==0&&u(t=>{let n=[...t];for(let t of e)n.some(e=>e.id===t.id||Q(e,t))||n.push(t);return G(n),p.current=n,n})},[]),(0,k.useEffect)(()=>{let e=h.current;return()=>{for(let t of e.values())clearTimeout(t);e.clear()}},[]),(0,k.useEffect)(()=>{G(l)},[l]),(0,k.useEffect)(()=>{K(d)},[d]);let v=(0,k.useRef)(()=>{}),y=(0,k.useRef)(()=>{});(0,k.useEffect)(()=>{let e=`minimized-chats:spec-draft`;return s(e,e=>{if(!M(e))return;let t=e.conversationId,n=p.current.find(e=>e.kind===`explore-spec`&&e.params.resumeConversationId===t);if(!n)return;let r=e.draft;r.title?.trim()&&v.current(n.id,r.title);let i={};r.title!==void 0&&(i.title=r.title),r.description!==void 0&&(i.description=r.description),r.priority!==void 0&&(i.priority=r.priority),r.labels!==void 0&&(i.labels=r.labels),r.repositoryIds!==void 0&&(i.repositoryIds=r.repositoryIds),r.acceptanceCriteria!==void 0&&(i.acceptanceCriteria=r.acceptanceCriteria),Object.keys(i).length>0&&y.current(n.id,i)}),()=>c(e)},[s,c]),(0,k.useEffect)(()=>{if(t.length===0)return;let e=new Set(t.map(e=>e.id));u(t=>{let n=t.filter(t=>e.has(t.projectId));return n.length===t.length?t:(G(n),p.current=n,n)}),f(t=>{let n=t.filter(t=>e.has(t.projectId));return n.length===t.length?t:(K(n),m.current=n,n)})},[t]);let b=(0,k.useCallback)(e=>{let t=X(),n={...e,id:t,createdAt:Date.now()};if(u(e=>{let t=J([...e.filter(e=>!Q(e,n)),n]);return G(t),p.current=t,t}),e.kind===`explore-spec`){let t=e.params.resumeConversationId;t&&fetch(`/api/projects/${e.projectId}/chat/conversations/${t}/minimize`,{method:`POST`}).catch(()=>{})}return t},[]),x=(0,k.useCallback)(e=>{let t=h.current.get(e);t&&(clearTimeout(t),h.current.delete(e))},[]),S=(0,k.useCallback)(e=>{x(e),u(t=>{let n=t.filter(t=>t.id!==e);return G(n),p.current=n,n}),f(t=>{let n=t.filter(t=>t.id!==e);return n.length===t.length?t:(K(n),m.current=n,n)})},[x]),C=(0,k.useCallback)((e,t)=>{let n=t.trim();n&&u(t=>{let r=t.map(t=>t.id===e&&t.label!==n?{...t,label:n}:t);return r===t?t:(p.current=r,r)})},[]),w=(0,k.useCallback)((e,t)=>{u(n=>{let r=n.map(n=>{if(n.id!==e||n.kind!==`explore-spec`)return n;let r={...n.params.draftOverrides??{},...t};return{...n,params:{...n.params,draftOverrides:r}}});return p.current=r,r})},[]),T=(0,k.useCallback)(e=>{let t=p.current.find(t=>t.id===e);if(!t||g.current.length>0&&!g.current.some(e=>e.id===t.projectId))return;if(t.kind===`explore-spec`){let e=t.params.resumeConversationId;e&&fetch(`/api/projects/${t.projectId}/chat/conversations/${e}/restore`,{method:`POST`}).catch(()=>{})}n!==t.projectId&&r(t.projectId),o(t.restoreRoute),f(n=>{let r=[...n.filter(t=>t.id!==e),t];return K(r),m.current=r,r}),u(t=>{let n=t.filter(t=>t.id!==e);return G(n),p.current=n,n}),x(e);let i=setTimeout(()=>{h.current.delete(e),m.current.some(t=>t.id===e)&&(f(t=>{let n=t.filter(t=>t.id!==e);return K(n),m.current=n,n}),u(n=>{if(n.some(n=>n.id===e||Q(n,t)))return n;let r=[...n,t];return G(r),p.current=r,r}))},U);h.current.set(e,i)},[n,r,o,x]),E=(0,k.useRef)(T);E.current=T;let D=(0,k.useRef)(S);D.current=S,v.current=C,y.current=w;let O=(0,k.useCallback)((e,t)=>{let n=m.current,r=n.findIndex(n=>n.kind===e&&n.projectId===t);if(r===-1)return null;let i=n[r];return x(i.id),f(e=>{let t=e.filter(e=>e.id!==i.id);return K(t),t}),m.current=n.filter(e=>e.id!==i.id),i},[x]),A=(0,k.useCallback)(e=>{let t=X(),i={...e,id:t,createdAt:Date.now()};n!==e.projectId&&r(e.projectId),o(e.restoreRoute),f(e=>{let t=[...e,i];return K(t),m.current=t,t}),x(t);let a=setTimeout(()=>{h.current.delete(t),m.current.some(e=>e.id===t)&&(f(e=>{let n=e.filter(e=>e.id!==t);return K(n),m.current=n,n}),u(e=>{if(e.some(e=>e.id===t||Q(e,i)))return e;let n=[...e,i];return G(n),p.current=n,n}))},U);h.current.set(t,a)},[n,r,o,x]),j=(0,k.useMemo)(()=>({chats:l,pendingRestores:d,minimize:b,updateLabel:C,patchExploreSpecDraft:w,close:S,restore:T,takePendingRestore:O,triggerResume:A}),[l,d,b,C,w,S,T,O,A]);return(0,N.jsxs)(z.Provider,{value:j,children:[e,(0,N.jsx)(R,{chats:l,projects:t,hidden:!1,onRestore:T,onClose:S})]})}function $(){return(0,k.useContext)(z)||{chats:[],pendingRestores:[],minimize:()=>``,updateLabel:()=>{},patchExploreSpecDraft:()=>{},close:()=>{},restore:()=>{},takePendingRestore:()=>null,triggerResume:()=>{}}}function ae(e,t,n){let{pendingRestores:r,takePendingRestore:i}=$(),a=(0,k.useRef)(n);a.current=n,(0,k.useEffect)(()=>{if(!t)return;let n=i(e,t);n&&a.current(n)},[r,e,t,i])}export{A as a,D as c,C as d,x as f,p as g,h,j as i,E as l,_ as m,$ as n,M as o,y as p,ae as r,O as s,ie as t,T as u};
@@ -0,0 +1,2 @@
1
+ import{a as e}from"./rolldown-runtime-CNC7AqOf.js";import{n as t,t as n}from"./jsx-runtime-BbYvbtY8.js";import{a as r,r as i,s as a}from"./api-DOGbyfTO.js";import{n as o,t as s}from"./createLucideIcon-DtODIU64.js";import{t as c}from"./origin-03nTuaOb.js";import{n as l}from"./notify-error-BsWANx1T.js";import{s as u}from"./provider-capabilities-DtwcTme4.js";import{r as d}from"./chevron-up-BAMuP0XD.js";import{t as f}from"./download-C9wP_42h.js";import{t as p}from"./external-link-CZ6Q-v1-.js";import{n as m,r as h,t as g}from"./confirm-dialog-ChZdHL3Q.js";import{t as _}from"./search-BDVp3fkH.js";import{t as v}from"./triangle-alert-Cxpn8bqr.js";import{t as y}from"./wrench-Br2n1Lxd.js";import{a as b,c as x,d as S,i as C,l as w,p as T}from"./dialog-C23lB2iP.js";import{t as E}from"./utils-ELimjS2Y.js";import{n as D,r as O}from"./useDesktop-BuOp2-MR.js";import{t as k}from"./button-CHPkroew.js";import{a as A,i as j,n as M,r as N,t as P}from"./select-xA3pSmqE.js";import{t as ee}from"./empty-state-D5w9OWj-.js";import{t as F}from"./RailTrack-BfLmBzBh.js";import{t as I}from"./jira-api-DHme7Upx.js";import{Bt as L,Cn as R,It as te,Jt as ne,Ln as re,Pt as ie,Rn as ae,Rt as oe,Tn as z,U as B,Xt as V,m as H}from"./index-DHzB0T26.js";import{t as se}from"./page-header-BStSHkP8.js";var U={name:`earth`,size:24,node:[[`path`,{d:`M21.54 15H17a2 2 0 0 0-2 2v4.54`,key:`1djwo0`}],[`path`,{d:`M7 3.34V5a3 3 0 0 0 3 3a2 2 0 0 1 2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2c0-1.1.9-2 2-2h3.17`,key:`1tzkfa`}],[`path`,{d:`M11 21.95V18a2 2 0 0 0-2-2a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05`,key:`14pb5j`}],[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]],aliases:[`globe-2`]};U.node;var ce=s(U),W={name:`folder-kanban`,size:24,node:[[`path`,{d:`M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z`,key:`1fr9dc`}],[`path`,{d:`M8 10v4`,key:`tgpxqk`}],[`path`,{d:`M12 10v2`,key:`hh53o1`}],[`path`,{d:`M16 10v6`,key:`1d6xys`}]]};W.node;var le=s(W),ue={name:`power`,size:24,node:[[`path`,{d:`M12 2v10`,key:`mnfbl`}],[`path`,{d:`M18.4 6.6a9 9 0 1 1-12.77.04`,key:`obofu9`}]]};ue.node;var G=s(ue),K=e(t(),1),q=n(),J=`__jira-empty__`;function Y({id:e,value:t,onChange:n,statuses:r,emptyLabel:i,className:a,disabled:o,"aria-label":s,"data-testid":c}){let l=r.map(e=>e.name),u=t!==``&&!l.includes(t);return(0,q.jsxs)(P,{value:t===``?J:t,onValueChange:e=>n(e===J?``:e),disabled:o,children:[(0,q.jsx)(j,{id:e,className:E(`h-8 text-sm`,a),"aria-label":s,"data-testid":c,children:(0,q.jsx)(A,{})}),(0,q.jsxs)(M,{children:[(0,q.jsx)(N,{value:J,children:i}),r.map(e=>(0,q.jsx)(N,{value:e.name,children:e.name},e.id)),u&&(0,q.jsx)(N,{value:t,children:t})]})]})}var de=[`todo`,`in_progress`,`on_review`,`done`,`cancelled`],fe={todo:`todo`,in_progress:`inProgress`,on_review:`onReview`,done:`done`,cancelled:`cancelled`};function pe(e){let{activeProjectId:t}=O();return(0,q.jsx)(me,{...e},e.apiBase??t??`legacy`)}function me({onConnected:e,onSkip:t,apiBase:n}){let{t:r}=o(`jira`),[i,s]=(0,K.useState)(1),[c,u]=(0,K.useState)(``),[f,p]=(0,K.useState)(``),[m,h]=(0,K.useState)(``),[g,_]=(0,K.useState)(`idle`),[v,y]=(0,K.useState)(null),[b,x]=(0,K.useState)(null),[S,C]=(0,K.useState)(`cloud`),[w,T]=(0,K.useState)([]),[E,D]=(0,K.useState)(``),[O,A]=(0,K.useState)(``),[j,M]=(0,K.useState)(``),[N,P]=(0,K.useState)(!1),[ee,F]=(0,K.useState)([]),[L,R]=(0,K.useState)({}),[te,ne]=(0,K.useState)(``),[re,ie]=(0,K.useState)(!1),[ae,oe]=(0,K.useState)(!1),z=(0,K.useRef)(0),V=(0,K.useRef)(!0);(0,K.useEffect)(()=>(V.current=!0,()=>{V.current=!1,z.current++}),[]);let[H,se]=(0,K.useState)(!1),U=()=>({baseUrl:c.trim(),accountEmail:f.trim()||null,token:m});async function ce(){_(`testing`),y(null);try{let e=await I.test(U(),n);if(!V.current)return;_(`ok`),x(e.displayName),C(e.deployment)}catch(e){if(!V.current)return;_(`error`),y(e instanceof Error?e.message:r(`errors.generic`))}}async function W(){s(2),P(!0);try{let{projects:e}=await I.discoverProjects({...U(),query:E.trim()||void 0},n);if(!V.current)return;T(e)}catch(e){V.current&&l(r(`errors.generic`),{detail:e instanceof Error?e.message:void 0})}finally{V.current&&P(!1)}}async function le(){s(3),await ue()}async function ue(){if(!O)return;let e=++z.current;ie(!0);try{let{statuses:t}=await I.discoverStatuses({...U(),projectKey:O},n);if(!V.current||e!==z.current)return;F(t),oe(!1)}catch{V.current&&e===z.current&&oe(!0)}finally{V.current&&e===z.current&&ie(!1)}}function G(e,t){e!==O&&(z.current++,F([]),R({}),ne(``),oe(!1),ie(!1)),A(e),M(t)}async function J(){se(!0);try{let t=Object.fromEntries(Object.entries(L).filter(([,e])=>e));if(await I.connect({...U(),jiraProjectKey:O.trim(),statusMap:Object.keys(t).length?t:null,discardStatus:te.trim()||null},n),!V.current)return;a.success(r(`status.connected`,{key:O.trim()})),e()}catch(e){V.current&&l(r(`errors.generic`),{detail:e instanceof Error?e.message:void 0})}finally{V.current&&se(!1)}}return(0,q.jsxs)(`div`,{className:`space-y-4`,"data-testid":`jira-wizard`,children:[(0,q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:r(`wizard.step`,{current:i,total:4})}),t&&(0,q.jsx)(`button`,{type:`button`,onClick:t,className:`rounded-sm text-xs text-muted-foreground hover:text-foreground hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`,"data-testid":`jira-later`,children:r(`wizard.later`)})]}),i===1&&(0,q.jsxs)(`div`,{className:`space-y-3`,children:[(0,q.jsx)(`h3`,{className:`text-sm font-semibold`,children:r(`wizard.step1Title`)}),(0,q.jsx)(X,{label:r(`creds.baseUrlLabel`),help:r(`creds.baseUrlHelp`),children:(0,q.jsx)(B,{value:c,onChange:e=>{u(e.target.value),_(`idle`)},placeholder:r(`creds.baseUrlPlaceholder`)})}),(0,q.jsx)(X,{label:r(`creds.emailLabel`),help:r(`creds.emailHelp`),children:(0,q.jsx)(B,{value:f,onChange:e=>{p(e.target.value),_(`idle`)},placeholder:r(`creds.emailPlaceholder`)})}),(0,q.jsx)(X,{label:r(`creds.tokenLabel`),help:r(`creds.tokenHelp`),children:(0,q.jsx)(B,{type:`password`,autoComplete:`off`,value:m,onChange:e=>{h(e.target.value),_(`idle`),y(null)},"aria-invalid":g===`error`||void 0,"aria-describedby":v?`jira-token-error`:void 0})}),g===`error`&&v&&(0,q.jsx)(`p`,{id:`jira-token-error`,role:`alert`,className:`text-xs text-destructive`,"data-testid":`jira-test-error`,children:v}),(0,q.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,q.jsx)(k,{size:`sm`,variant:`outline`,onClick:ce,disabled:!c.trim()||!m.trim()||g===`testing`,children:r(g===`testing`?`creds.testing`:g===`ok`?`creds.retest`:`creds.test`)}),g===`ok`&&(0,q.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-xs text-accent-success`,"data-testid":`jira-test-ok`,children:[(0,q.jsx)(d,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),r(`creds.testOk`,{name:b??``}),` · `,r(S===`cloud`?`review.cloud`:`review.dc`)]})]}),(0,q.jsx)(`div`,{className:`flex justify-end`,children:(0,q.jsx)(k,{size:`sm`,onClick:W,disabled:g!==`ok`,children:r(`wizard.next`)})})]}),i===2&&(0,q.jsxs)(`div`,{className:`space-y-3`,children:[(0,q.jsx)(`h3`,{className:`text-sm font-semibold`,children:r(`wizard.step2Title`)}),(0,q.jsxs)(`div`,{className:`flex gap-2`,children:[(0,q.jsx)(B,{value:E,onChange:e=>D(e.target.value),placeholder:r(`project.searchPlaceholder`)}),(0,q.jsx)(k,{size:`sm`,variant:`outline`,onClick:W,children:r(`project.search`)})]}),N?(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:r(`project.loading`)}):w.length===0?(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:r(`project.none`)}):(0,q.jsx)(`div`,{className:`max-h-48 space-y-1 overflow-y-auto`,"data-testid":`jira-project-list`,children:w.map(e=>(0,q.jsxs)(`button`,{type:`button`,onClick:()=>G(e.key,e.name),"aria-pressed":O===e.key,className:`flex w-full items-center justify-between rounded px-2 py-1.5 text-left text-sm hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring ${O===e.key?`bg-muted`:``}`,children:[(0,q.jsx)(`span`,{className:`font-medium`,children:e.key}),(0,q.jsx)(`span`,{className:`truncate text-xs text-muted-foreground`,children:e.name})]},e.id))}),(0,q.jsx)(X,{label:r(`project.manualLabel`),children:(0,q.jsx)(B,{value:O,onChange:e=>G(e.target.value.toUpperCase(),``),placeholder:r(`project.manualPlaceholder`)})}),(0,q.jsxs)(`div`,{className:`flex justify-between`,children:[(0,q.jsx)(k,{size:`sm`,variant:`ghost`,onClick:()=>s(1),children:r(`wizard.back`)}),(0,q.jsx)(k,{size:`sm`,onClick:le,disabled:!O.trim(),children:r(`wizard.next`)})]})]}),i===3&&(0,q.jsxs)(`div`,{className:`space-y-3`,children:[(0,q.jsx)(`h3`,{className:`text-sm font-semibold`,children:r(`wizard.step3Title`)}),(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:r(`mapping.intro`)}),ae&&(0,q.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,q.jsx)(`p`,{role:`alert`,className:`text-xs text-accent-warning`,children:r(`mapping.loadFailed`)}),(0,q.jsx)(k,{size:`sm`,variant:`outline`,disabled:re,onClick:()=>void ue(),children:r(`mapping.retry`)})]}),re&&(0,q.jsx)(`p`,{role:`status`,className:`text-xs text-muted-foreground`,children:r(`mapping.loading`)}),de.map(e=>(0,q.jsx)(X,{label:r(`mapping.${fe[e]}`),children:(0,q.jsx)(Y,{value:L[e]??``,onChange:t=>R(n=>({...n,[e]:t||void 0})),statuses:ee,emptyLabel:r(`mapping.auto`),"aria-label":r(`mapping.${fe[e]}`),"data-testid":`jira-wizard-statusmap-${e}`})},e)),(0,q.jsx)(X,{label:r(`discard.configLabel`),help:r(`discard.configHelp`),children:(0,q.jsx)(Y,{value:te,onChange:ne,statuses:ee,emptyLabel:r(`discard.configNone`),"aria-label":r(`discard.configLabel`),"data-testid":`jira-discard-status-select`})}),(0,q.jsxs)(`div`,{className:`flex justify-between`,children:[(0,q.jsx)(k,{size:`sm`,variant:`ghost`,onClick:()=>s(2),children:r(`wizard.back`)}),(0,q.jsx)(k,{size:`sm`,onClick:()=>s(4),children:r(`wizard.next`)})]})]}),i===4&&(0,q.jsxs)(`div`,{className:`space-y-3`,children:[(0,q.jsx)(`h3`,{className:`text-sm font-semibold`,children:r(`wizard.step4Title`)}),(0,q.jsxs)(`dl`,{className:`space-y-1 text-sm`,children:[(0,q.jsx)(Z,{label:r(`review.site`),value:c}),(0,q.jsx)(Z,{label:r(`review.project`),value:j?`${O} — ${j}`:O}),(0,q.jsx)(Z,{label:r(`review.account`),value:b??f}),(0,q.jsx)(Z,{label:r(`review.type`),value:r(S===`cloud`?`review.cloud`:`review.dc`)}),(0,q.jsx)(Z,{label:r(`discard.reviewLabel`),value:te||r(`discard.configNone`)})]}),(0,q.jsxs)(`div`,{className:`flex justify-between`,children:[(0,q.jsx)(k,{size:`sm`,variant:`ghost`,onClick:()=>s(3),children:r(`wizard.back`)}),(0,q.jsx)(k,{size:`sm`,onClick:J,disabled:H,children:r(H?`wizard.connecting`:`wizard.connect`)})]})]})]})}function X({label:e,help:t,children:n}){return(0,q.jsxs)(`label`,{className:`block space-y-1`,children:[(0,q.jsx)(`span`,{className:`text-xs font-medium text-foreground`,children:e}),n,t&&(0,q.jsx)(`span`,{className:`block text-xs text-muted-foreground`,children:t})]})}function Z({label:e,value:t}){return(0,q.jsxs)(`div`,{className:`flex justify-between gap-4`,children:[(0,q.jsx)(`dt`,{className:`text-muted-foreground`,children:e}),(0,q.jsx)(`dd`,{className:`truncate text-right font-medium`,children:t})]})}var he={pending:0,inflight:0,done:0,dead:0};function ge({projectId:e,baseUrl:t,apiBase:n,initialCounts:r,refreshToken:a}){let{t:s}=o(`jira`),[c,u]=(0,K.useState)(null),[d,f]=(0,K.useState)(!1),[p,m]=(0,K.useState)(()=>new Set),h=(0,K.useRef)(!0),g=(0,K.useRef)(0),_=(0,K.useContext)(i),v=(0,K.useId)(),y=(0,K.useCallback)(async()=>{if(!h.current)return;let e=++g.current;try{let t=n?await I.listOutbox(`dead`,n):await I.listOutbox(`dead`);if(!h.current||e!==g.current)return;u({...t,ops:t.ops.filter(e=>e.state===`dead`)}),f(!1)}catch{h.current&&e===g.current&&f(!0)}},[n]);(0,K.useEffect)(()=>(h.current=!0,y(),()=>{h.current=!1,g.current++}),[y,a,r?.dead,r?.pending,r?.inflight,r?.done,r?.superseded]),(0,K.useEffect)(()=>{if(_)return _.registerHandler(v,t=>{if(!t||typeof t!=`object`)return;let n=t;n.type===`jira.outbox_changed`&&n.projectId===e&&y()}),()=>_.unregisterHandler(v)},[_,v,e,y]);async function b(e){if(!p.has(e)){m(t=>new Set(t).add(e));try{n?await I.retryOutbox(e,n):await I.retryOutbox(e),h.current&&await y()}catch(e){h.current&&l(s(`errors.generic`),{detail:e instanceof Error?e.message:void 0})}finally{h.current&&m(t=>{let n=new Set(t);return n.delete(e),n})}}}let x=c?.counts??r??he,S=x.pending+x.inflight;return(0,q.jsxs)(`div`,{className:`rounded-md border border-border p-3`,"data-testid":`jira-outbox`,children:[(0,q.jsx)(`p`,{className:`text-sm font-medium`,children:s(`outbox.title`)}),(0,q.jsx)(`p`,{className:`mt-1 text-xs ${x.dead>0?`text-accent-warning`:`text-muted-foreground`}`,children:x.dead>0?s(`outbox.dead`,{count:x.dead}):S>0?s(`outbox.pending`,{count:S}):s(x.superseded?`outbox.nonePending`:`outbox.allSynced`)}),d&&(0,q.jsxs)(`div`,{className:`mt-2 flex items-center justify-between gap-2`,children:[(0,q.jsx)(`p`,{role:`alert`,className:`text-xs text-accent-warning`,children:s(`outbox.loadFailed`)}),(0,q.jsx)(k,{variant:`outline`,size:`sm`,onClick:()=>void y(),children:s(`outbox.retry`)})]}),!!c?.ops.length&&(0,q.jsxs)(`div`,{className:`mt-2 space-y-2`,children:[(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:s(`outbox.deadHelp`)}),c.ops.map(e=>{let n=e.targetStatus||(e.logicalState?s(`mapping.${_e(e.logicalState)}`):null),r=e.deadReason??e.lastError??``;return(0,q.jsxs)(`div`,{className:`flex items-start justify-between gap-2 rounded border border-border/60 px-2 py-2`,children:[(0,q.jsxs)(`div`,{className:`min-w-0 space-y-1 text-xs`,children:[(0,q.jsxs)(`p`,{className:`break-words`,children:[e.jiraKey?(0,q.jsx)(`a`,{href:`${t.replace(/\/$/,``)}/browse/${encodeURIComponent(e.jiraKey)}`,target:`_blank`,rel:`noreferrer`,className:`font-medium text-accent-primary hover:underline`,children:e.jiraKey}):(0,q.jsx)(`span`,{className:`font-medium`,children:s(`outbox.issueFallback`,{id:e.jiraIssueId})}),` · `,s(e.opType===`transition`?`outbox.opTransition`:e.opType===`comment`?`outbox.opComment`:e.opType===`update`?`outbox.opUpdate`:`outbox.opCreate`)]}),n&&(0,q.jsx)(`p`,{className:`break-words text-muted-foreground`,children:s(`outbox.target`,{status:n})}),(0,q.jsx)(`p`,{className:`max-h-32 overflow-y-auto whitespace-pre-wrap break-words text-muted-foreground`,children:r})]}),(0,q.jsx)(k,{className:`shrink-0`,variant:`outline`,size:`sm`,disabled:p.has(e.id),onClick:()=>void b(e.id),children:s(p.has(e.id)?`outbox.retrying`:`outbox.retry`)})]},e.id)})]})]})}function _e(e){return e===`in_progress`?`inProgress`:e===`on_review`?`onReview`:e}var ve=[`todo`,`in_progress`,`on_review`,`done`,`cancelled`],ye={todo:`todo`,in_progress:`inProgress`,on_review:`onReview`,done:`done`,cancelled:`cancelled`};function be(e){let{activeProjectId:t}=O(),n=`${e.apiBase??t??``}:${e.state.connection.projectId}`;return(0,q.jsx)(xe,{...e},n)}function xe({state:e,onChanged:t,apiBase:n}){let{t:r}=o(`jira`),i=e.connection,[s,c]=(0,K.useState)(i.enabled),[u,d]=(0,K.useState)(!1),[f,p]=(0,K.useState)(!1),[m,h]=(0,K.useState)(!1),[_,v]=(0,K.useState)(0),[y,b]=(0,K.useState)([]),[x,S]=(0,K.useState)(i.discardStatus??``),[C,w]=(0,K.useState)(i.statusMap??{}),[T,E]=(0,K.useState)(!1),[D,O]=(0,K.useState)(!1),A=(0,K.useRef)(0),j=(0,K.useRef)(!0),M=(0,K.useCallback)(async()=>{let e=++A.current;O(!0);try{let{statuses:t}=await I.listStatuses(n);if(!j.current||e!==A.current)return;b(t),E(!1)}catch{j.current&&e===A.current&&E(!0)}finally{j.current&&e===A.current&&O(!1)}},[n]);(0,K.useEffect)(()=>(j.current=!0,M(),()=>{j.current=!1,A.current++}),[M]);async function N(e){let i=x;S(e);try{if(n?await I.patchConnection({discardStatus:e||null},n):await I.patchConnection({discardStatus:e||null}),!j.current)return;t()}catch(e){if(!j.current)return;S(i),l(r(`errors.generic`),{detail:e instanceof Error?e.message:void 0})}}async function P(e,i){let a=C,o={...C,[e]:i||void 0};w(o);let s=Object.fromEntries(Object.entries(o).filter(([,e])=>e));try{if(n?await I.patchConnection({statusMap:Object.keys(s).length?s:null},n):await I.patchConnection({statusMap:Object.keys(s).length?s:null}),!j.current)return;v(e=>e+1),t()}catch(e){if(!j.current)return;w(a),l(r(`errors.generic`),{detail:e instanceof Error?e.message:void 0})}}async function ee(){let e=!s;c(e),p(!0);try{n?await I.setEnabled(e,n):await I.setEnabled(e)}catch(t){if(!j.current)return;c(!e),l(r(`errors.generic`),{detail:t instanceof Error?t.message:void 0})}finally{j.current&&p(!1)}}async function F(){d(!0);try{let e=n?await I.syncNow(n):await I.syncNow();if(!j.current)return;a.success(r(`status.syncedToast`,{count:e.upserted})),v(e=>e+1)}catch(e){j.current&&l(r(`errors.generic`),{detail:e instanceof Error?e.message:void 0})}finally{j.current&&d(!1)}}async function L(){p(!0);try{if(n?await I.disconnect(n):await I.disconnect(),!j.current)return;a.success(r(`status.disconnectedToast`)),t()}catch(e){j.current&&l(r(`errors.generic`),{detail:e instanceof Error?e.message:void 0})}finally{j.current&&p(!1)}}return(0,q.jsxs)(`div`,{className:`space-y-4`,"data-testid":`jira-connected`,children:[(0,q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`p`,{className:`text-sm font-medium text-foreground`,children:r(`status.connected`,{key:i.jiraProjectKey})}),(0,q.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[i.baseUrl,` · `,i.deployment===`cloud`?r(`review.cloud`):r(`review.dc`)]})]}),(0,q.jsx)(`a`,{href:`${i.baseUrl}/browse/${i.jiraProjectKey}`,target:`_blank`,rel:`noreferrer`,className:`text-xs text-accent-primary hover:underline`,children:r(`badge.openInJira`)})]}),(0,q.jsxs)(`div`,{className:`flex items-center justify-between rounded-md border border-border p-3`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`p`,{className:`text-sm font-medium`,children:r(`status.enabledLabel`)}),(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:r(s?`status.enabledHelp`:`status.pausedHelp`)})]}),(0,q.jsx)(H,{checked:s,onCheckedChange:()=>void ee(),onClassName:`bg-accent-success`,"aria-label":r(`status.enabledLabel`),disabled:f})]}),(0,q.jsxs)(`div`,{className:`rounded-md border border-border p-3`,"data-testid":`jira-status-map`,children:[(0,q.jsx)(`p`,{className:`text-sm font-medium`,children:r(`wizard.step3Title`)}),(0,q.jsx)(`p`,{className:`mt-0.5 mb-2 text-xs text-muted-foreground`,children:r(`mapping.intro`)}),T&&(0,q.jsxs)(`div`,{className:`mb-2 flex items-center justify-between gap-2`,children:[(0,q.jsx)(`p`,{role:`alert`,className:`text-xs text-accent-warning`,children:r(`mapping.loadFailed`)}),(0,q.jsx)(k,{variant:`outline`,size:`sm`,disabled:D,onClick:()=>void M(),children:r(`mapping.retry`)})]}),D&&(0,q.jsx)(`p`,{role:`status`,className:`mb-2 text-xs text-muted-foreground`,children:r(`mapping.loading`)}),(0,q.jsx)(`div`,{className:`space-y-2`,children:ve.map(e=>(0,q.jsxs)(`label`,{className:`flex items-center justify-between gap-3`,children:[(0,q.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:r(`mapping.${ye[e]}`)}),(0,q.jsx)(Y,{value:C[e]??``,onChange:t=>void P(e,t),statuses:y,emptyLabel:r(`mapping.auto`),className:`w-44`,"aria-label":r(`mapping.${ye[e]}`),"data-testid":`jira-statusmap-${e}`})]},e))})]}),(0,q.jsxs)(`div`,{className:`rounded-md border border-border p-3`,children:[(0,q.jsx)(`p`,{className:`text-sm font-medium`,children:r(`discard.configLabel`)}),(0,q.jsx)(`p`,{className:`mt-0.5 mb-2 text-xs text-muted-foreground`,children:r(`discard.configHelp`)}),(0,q.jsx)(Y,{value:x,onChange:e=>void N(e),statuses:y,emptyLabel:r(`discard.configNone`),"aria-label":r(`discard.configLabel`),"data-testid":`jira-discard-status-select`})]}),(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsx)(k,{variant:`outline`,size:`sm`,onClick:F,disabled:u,children:r(u?`status.syncing`:`status.syncNow`)}),(0,q.jsx)(k,{variant:`ghost`,size:`sm`,onClick:()=>h(!0),disabled:f,className:`text-destructive`,children:r(`status.disconnect`)})]}),(0,q.jsx)(ge,{projectId:i.projectId,baseUrl:i.baseUrl,apiBase:n,initialCounts:e.outbox,refreshToken:_}),(0,q.jsx)(g,{open:m,onOpenChange:h,title:r(`status.disconnectConfirmTitle`),description:r(`status.disconnectConfirm`),confirmLabel:r(`status.disconnect`),onConfirm:()=>{h(!1),L()}})]})}var Se=new Set([`claude`,`codex`,`kimi`]);function Ce(e){return{provider:e,label:e===`codex`?`Codex`:`Claude`,active:!1,available:!1,detectedRoute:!1,requests:0,inputTokens:0,inputTokensSaved:0,outputTokens:0,outputTokensSaved:0,outputSavingsPercent:0,outputSavingsMethod:`none`,outputSavingsAllocated:!1}}function we(){return{updatedAt:null,proxyStatsAvailable:!1,durableSavingsAvailable:!1,outputSavingsAvailable:!1,outputSavingsMethod:null,outputConfidence:null,providers:{codex:Ce(`codex`),claude:Ce(`claude`)},lastIssue:null}}var Te={installed:!1,installSource:null,version:null,executablePath:null,uvPath:null,port:8787,phase:`idle`,activeProviders:{codex:!1,claude:!1},availableProviders:{codex:!1,claude:!1},detectedRoutes:{codex:!1,claude:!1},proxyRunning:!1,proxyPid:null,learning:{enabled:!1,baselineReady:!1,baselineSamples:0,updatedAt:null,lastIssue:null},metrics:we(),lastIssue:null,updatedAt:null};function Ee(e){let t=e?.metrics??we();return{...Te,...e,activeProviders:{...Te.activeProviders,...e?.activeProviders},availableProviders:{...Te.availableProviders,...e?.availableProviders},detectedRoutes:{...Te.detectedRoutes,...e?.detectedRoutes},learning:{...Te.learning,...e?.learning},metrics:{...we(),...t,providers:{codex:{...Ce(`codex`),...t.providers?.codex},claude:{...Ce(`claude`),...t.providers?.claude}}}}}async function Q(e){let t=await e.text(),n=t?JSON.parse(t):{};if(!e.ok){let t=n.issue;throw Object.assign(Error(t?.title??n.error??`HTTP ${e.status}`),{payload:n})}return n}function De(e){return`${c}/api/projects/${e}`}function Oe(e,t=`en`){if(!Number.isFinite(e))return`0`;try{return Intl.NumberFormat(t,{notation:`compact`,maximumFractionDigits:1}).format(Math.max(0,e))}catch{return Intl.NumberFormat(`en`,{notation:`compact`,maximumFractionDigits:1}).format(Math.max(0,e))}}function $(e,t,n){return`${Oe(e,t)} ${n}`}function ke({onWindowOpened:e,inDialog:t=!1}={}){let{t:n}=o(`integrations`),{projects:i}=O(),{registerHandler:a,unregisterHandler:s}=r(),[u,d]=(0,K.useState)(``),[f,m]=(0,K.useState)(`all`),[h,g]=(0,K.useState)(Te),[y,D]=(0,K.useState)(!0),[k,A]=(0,K.useState)(null),[j,M]=(0,K.useState)([]),[N,P]=(0,K.useState)(!1),[ee,F]=(0,K.useState)(!1),[I,L]=(0,K.useState)(null),[R,z]=(0,K.useState)({jira:0,serena:0,projects:0}),B=(0,K.useCallback)(async()=>{try{let e=await fetch(`${c}/api/global-plugins/headroom`).then(e=>Q(e));g(Ee(e.state))}finally{D(!1)}},[]);(0,K.useEffect)(()=>{B()},[B]),(0,K.useEffect)(()=>(a(`plugins-page`,e=>{let t=e;t.type===`plugin.headroom_progress`&&(t.line&&M(e=>[...e.slice(-80),t.line]),B())}),()=>s(`plugins-page`)),[a,s,B]),(0,K.useEffect)(()=>{let e=!1;async function t(){let t=await Promise.all(i.map(async e=>{let[t,n]=await Promise.all([fetch(`${De(e.id)}/jira/connection`).then(e=>Q(e)).catch(()=>({connected:!1})),fetch(`${De(e.id)}/plugins`).then(e=>Q(e)).catch(()=>({plugins:[]}))]),r=n.plugins.find(e=>e.name===`serena`);return{jira:+!!t.connected,serena:r&&r.status!==`not-installed`&&r.status!==`orphan`?1:0}}));e||z({jira:t.reduce((e,t)=>e+t.jira,0),serena:t.reduce((e,t)=>e+t.serena,0),projects:i.length})}return t(),()=>{e=!0}},[i]);async function H(e,t){A(e),M([]);try{let e=(await t()).state;e&&g(Ee(e))}catch(e){let t=e.payload;t?.state&&g(Ee(t.state))}finally{A(null),B()}}let U=(0,K.useMemo)(()=>[{id:`headroom-ai`,title:`Headroom AI`,scope:`global`,icon:V,description:n(`plugins.catalog.headroom.description`),installed:h.installed,status:h.lastIssue?`attention`:h.installed?h.activeProviders.codex||h.activeProviders.claude?h.installSource===`system`?`external-active`:`active`:h.installSource===`system`?`external`:`installed`:`available`,statusLabel:h.lastIssue?n(`plugins.status.attention`):h.installed?h.activeProviders.codex||h.activeProviders.claude?h.installSource===`system`?n(`plugins.status.externalActive`):n(`plugins.status.active`):h.installSource===`system`?n(`plugins.status.external`):n(`plugins.status.installed`):n(`plugins.status.available`),actionKind:h.lastIssue?`review`:h.installed?`manage`:`install`,actionLabel:h.lastIssue?n(`plugins.actions.review`):h.installed?n(`plugins.actions.manage`):n(`plugins.actions.install`),busy:k===`install`,action:()=>{if(h.lastIssue||h.installed){P(!0);return}H(`install`,()=>fetch(`${c}/api/global-plugins/headroom/install`,{method:`POST`}).then(e=>Q(e)))}}],[h,k,n]),ce=(0,K.useMemo)(()=>[{id:`jira`,title:`Jira`,scope:`project`,icon:le,description:n(`plugins.catalog.jira.description`),installed:R.jira>0,status:R.jira>0?`configured`:`available`,statusLabel:R.jira>0?n(`plugins.status.configuredCount`,{count:R.jira}):n(`plugins.status.available`),actionKind:R.jira>0?`manage`:`install`,actionLabel:R.jira>0?n(`plugins.actions.manage`):n(`plugins.actions.install`),action:()=>L(`jira`)},{id:`serena`,title:`Serena`,scope:`project`,icon:ie,description:n(`plugins.catalog.serena.description`),installed:R.serena>0,status:R.serena>0?`installed`:`available`,statusLabel:R.serena>0?n(`plugins.status.installedCount`,{count:R.serena}):n(`plugins.status.available`),actionKind:R.serena>0?`manage`:`install`,actionLabel:R.serena>0?n(`plugins.actions.manage`):n(`plugins.actions.install`),action:()=>L(`serena`)}],[R,n]),W=u.trim().toLowerCase(),ue=e=>`${e.title} ${e.description} ${e.statusLabel} ${n(`plugins.scope.${e.scope}`)}`.toLowerCase().includes(W),G=[...U,...ce].filter(e=>f!==`all`&&e.scope!==f?!1:ue(e)),J=G.filter(e=>e.scope===`global`&&e.installed),Y=G.filter(e=>e.scope===`project`&&e.installed),de=G.filter(e=>e.scope===`global`&&!e.installed),fe=G.filter(e=>e.scope===`project`&&!e.installed),pe=J.length>0||Y.length>0,me=de.length>0||fe.length>0,X=[h.installed,R.jira>0,R.serena>0].filter(Boolean).length,Z=h.installed&&h.lastIssue?1:0,he=Math.max(0,X-Z);return(0,q.jsxs)(`div`,{className:`flex h-full flex-col bg-background`,children:[(0,q.jsxs)(`div`,{className:`border-b border-border px-4 py-4`,children:[(0,q.jsx)(se,{titleHidden:t,title:n(`plugins.page.title`),description:n(`plugins.page.subtitle`),actions:(0,q.jsxs)(q.Fragment,{children:[!re()&&(0,q.jsxs)(`button`,{type:`button`,onClick:()=>void ae().then(()=>e?.()).catch(e=>l(n(`plugins.page.openWindowFailed`),{detail:e instanceof Error?e.message:void 0})),className:`inline-flex items-center gap-1.5 rounded-md border border-border px-3 py-2 text-xs hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`,children:[(0,q.jsx)(p,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),n(`plugins.page.openWindow`)]}),(0,q.jsxs)(`div`,{className:`flex items-center gap-2 rounded-lg border border-border bg-card/60 px-3 py-2 text-xs`,children:[(0,q.jsx)(oe,{className:`h-3.5 w-3.5 text-accent-success`}),(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:n(`plugins.page.readyCount`,{count:he})})]}),Z>0&&(0,q.jsxs)(`div`,{className:`flex items-center gap-2 rounded-lg border border-border bg-card/60 px-3 py-2 text-xs`,"data-testid":`plugins-attention-count`,children:[(0,q.jsx)(v,{className:`h-3.5 w-3.5 text-accent-warning`,"aria-hidden":!0}),(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:n(`plugins.page.attentionCount`,{count:Z})})]})]})}),(0,q.jsxs)(`div`,{className:`mt-4 flex flex-col gap-3 md:flex-row md:items-center`,children:[(0,q.jsxs)(`label`,{className:`relative flex-1`,children:[(0,q.jsx)(_,{className:`pointer-events-none absolute left-3 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground`}),(0,q.jsx)(`input`,{value:u,onChange:e=>d(e.target.value),placeholder:n(`plugins.search.placeholder`),"aria-label":n(`plugins.search.placeholder`),className:`h-9 w-full rounded-lg border border-border bg-background pl-9 pr-3 text-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`})]}),(0,q.jsx)(`div`,{role:`radiogroup`,"aria-label":n(`plugins.filters.label`),className:`inline-flex h-9 rounded-lg border border-border bg-card p-1`,onKeyDown:e=>{let t=[`all`,`global`,`project`],n=t.indexOf(f),r=e.key===`ArrowRight`||e.key===`ArrowDown`?1:e.key===`ArrowLeft`||e.key===`ArrowUp`?-1:0;if(!r)return;e.preventDefault();let i=t[(n+r+t.length)%t.length];m(i),document.getElementById(`plugins-scope-${i}`)?.focus()},children:[`all`,`global`,`project`].map(e=>(0,q.jsx)(`button`,{id:`plugins-scope-${e}`,type:`button`,role:`radio`,"aria-checked":f===e,tabIndex:f===e?0:-1,onClick:()=>m(e),className:E(`rounded-md px-3 text-xs transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`,f===e?`bg-muted text-foreground`:`text-muted-foreground hover:text-foreground`),children:n(`plugins.filters.${e}`)},e))})]})]}),(0,q.jsxs)(`div`,{className:`flex-1 overflow-auto px-4 py-5`,children:[(0,q.jsxs)(`section`,{className:`mb-6`,children:[(0,q.jsxs)(`h2`,{className:`mb-3 flex items-center gap-2 text-strong`,children:[(0,q.jsx)(te,{className:`h-3.5 w-3.5 text-muted-foreground`,"aria-hidden":!0}),n(`plugins.sections.installed`)]}),pe?(0,q.jsx)(Ae,{globalPlugins:J,projectPlugins:Y}):(0,q.jsx)(je,{text:n(W?`plugins.empty.installedSearch`:`plugins.empty.installed`)})]}),(0,q.jsxs)(`section`,{children:[(0,q.jsxs)(`h2`,{className:`mb-3 flex items-center gap-2 text-strong`,children:[(0,q.jsx)(ne,{className:`h-3.5 w-3.5 text-muted-foreground`,"aria-hidden":!0}),n(`plugins.sections.available`)]}),me?(0,q.jsx)(Ae,{globalPlugins:de,projectPlugins:fe}):(0,q.jsx)(je,{text:n(W?`plugins.empty.availableSearch`:`plugins.empty.allInstalled`)})]})]}),(0,q.jsx)(C,{open:N,onOpenChange:P,children:(0,q.jsxs)(x,{size:`wide`,children:[(0,q.jsxs)(S,{children:[(0,q.jsx)(T,{children:n(`plugins.headroom.title`)}),(0,q.jsx)(w,{children:n(`plugins.headroom.dialogDescription`)})]}),(0,q.jsx)(b,{className:`overflow-x-hidden`,children:(0,q.jsx)(Fe,{state:h,loading:y,busy:k,logs:j,onInstall:()=>H(`install`,()=>fetch(`${c}/api/global-plugins/headroom/install`,{method:`POST`}).then(e=>Q(e))),onToggleProvider:(e,t)=>H(`${t?`deactivate`:`activate`}-${e}`,()=>fetch(`${c}/api/global-plugins/headroom/${t?`deactivate`:`activate`}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({provider:e})}).then(e=>Q(e))),onDeactivateAll:()=>H(`deactivate-all`,async()=>{let e={state:h};for(let t of[`codex`,`claude`])h.activeProviders[t]&&(e=await fetch(`${c}/api/global-plugins/headroom/deactivate`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({provider:t})}).then(e=>Q(e)));return e}),onUninstall:()=>H(`uninstall`,()=>fetch(`${c}/api/global-plugins/headroom/uninstall`,{method:`POST`}).then(e=>Q(e))),onSetPort:e=>H(`port`,()=>fetch(`${c}/api/global-plugins/headroom/port`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({port:e})}).then(e=>Q(e))),onOpenDiagnostics:()=>F(!0)})})]})}),(0,q.jsx)(He,{plugin:I,projects:i,onClose:()=>L(null)}),(0,q.jsx)(Ge,{open:ee,onClose:()=>F(!1)})]})}function Ae({globalPlugins:e,projectPlugins:t}){let{t:n}=o(`integrations`);return(0,q.jsxs)(`div`,{className:E(`grid grid-cols-1 gap-4`,e.length>0&&t.length>0&&`xl:grid-cols-2`),children:[e.length>0&&(0,q.jsxs)(`section`,{children:[(0,q.jsx)(Me,{title:n(`plugins.groups.global.title`),detail:n(`plugins.groups.global.detail`),scope:`global`}),(0,q.jsx)(`div`,{className:`grid grid-cols-[repeat(auto-fill,minmax(260px,320px))] justify-start gap-3`,children:e.map(e=>(0,q.jsx)(Pe,{plugin:e},e.id))})]}),t.length>0&&(0,q.jsxs)(`section`,{children:[(0,q.jsx)(Me,{title:n(`plugins.groups.project.title`),detail:n(`plugins.groups.project.detail`),scope:`project`}),(0,q.jsx)(`div`,{className:`grid grid-cols-[repeat(auto-fill,minmax(260px,320px))] justify-start gap-3`,children:t.map(e=>(0,q.jsx)(Pe,{plugin:e},e.id))})]})]})}function je({text:e}){return(0,q.jsx)(ee,{title:e,className:`max-w-[320px] py-5 bg-card/35`})}function Me({title:e,detail:t,scope:n}){return(0,q.jsxs)(`div`,{className:`mb-2 flex items-center gap-2`,children:[(0,q.jsx)(`div`,{className:E(`h-px flex-1`,n===`global`?`bg-accent-primary/30`:`bg-accent-info/30`)}),(0,q.jsxs)(`div`,{className:`flex items-center gap-2 rounded-md border border-border bg-card/70 px-2 py-1`,children:[(0,q.jsx)(`span`,{className:`text-label`,children:e}),(0,q.jsx)(`span`,{className:`hidden text-xs text-muted-foreground sm:inline`,children:t})]}),(0,q.jsx)(`div`,{className:E(`h-px flex-1`,n===`global`?`bg-accent-primary/30`:`bg-accent-info/30`)})]})}var Ne={install:`plugins.actions.installBusy`,manage:`plugins.actions.configureBusy`,review:`plugins.actions.reviewBusy`};function Pe({plugin:e}){let{t}=o(`integrations`),n=e.icon,r=e.scope===`global`,i=e.status===`attention`,a=e.busy?h:e.actionKind===`install`?f:e.actionKind===`review`?v:L,s=E(`inline-flex h-5 shrink-0 items-center rounded border px-1.5 text-caption leading-none`,i?`border-accent-warning/30 bg-accent-warning/10 text-accent-warning`:e.installed?`border-accent-success/25 bg-accent-success/10 text-accent-success`:`border-border bg-muted text-muted-foreground`);return(0,q.jsxs)(`article`,{className:`grid h-[88px] w-full grid-cols-[38px_minmax(0,1fr)_auto] items-center gap-3 rounded-lg border border-border bg-card/70 px-3 transition-colors hover:border-accent-primary/35 hover:bg-card`,children:[(0,q.jsx)(`div`,{className:E(`grid h-[38px] w-[38px] shrink-0 place-items-center rounded-lg border`,r?`border-accent-primary/25 bg-accent-primary/10 text-accent-primary`:`border-accent-info/25 bg-accent-info/10 text-accent-info`),children:(0,q.jsx)(n,{className:`h-4 w-4`})}),(0,q.jsxs)(`div`,{className:`min-w-0`,children:[(0,q.jsx)(`h3`,{className:`truncate text-strong leading-5`,children:e.title}),(0,q.jsx)(`p`,{className:`mt-1 line-clamp-2 text-xs leading-4 text-muted-foreground`,children:e.description}),(0,q.jsx)(`div`,{className:`mt-1.5 flex items-center gap-1.5`,children:(0,q.jsx)(`span`,{"data-chip":``,className:s,children:e.statusLabel})})]}),(0,q.jsxs)(`button`,{type:`button`,disabled:e.busy,onClick:e.action,className:`flex h-7 shrink-0 items-center gap-1.5 rounded-md border border-border bg-background px-2.5 text-label transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50`,children:[(0,q.jsx)(a,{className:E(`h-3.5 w-3.5`,e.busy&&`motion-safe:animate-spin`),"aria-hidden":!0}),e.busy?t(Ne[e.actionKind]):e.actionLabel]})]})}function Fe({state:e,loading:t,busy:n,logs:r,onInstall:i,onToggleProvider:a,onDeactivateAll:s,onUninstall:c,onSetPort:l,onOpenDiagnostics:u}){let{t:d}=o(`integrations`),[p,g]=(0,K.useState)(String(e.port)),[_,v]=(0,K.useState)(!1);(0,K.useEffect)(()=>g(String(e.port)),[e.port]),(0,K.useEffect)(()=>{e.installed||v(!1)},[e.installed]);let b=e.activeProviders.codex||e.activeProviders.claude,x=e.installSource===`system`;return(0,q.jsxs)(`aside`,{className:`w-full min-w-0 overflow-hidden rounded-lg border border-border bg-card/80 p-4`,children:[(0,q.jsxs)(`div`,{className:`mb-4 flex items-start gap-3`,children:[(0,q.jsx)(`div`,{className:`grid h-10 w-10 place-items-center rounded-lg border border-accent-primary/25 bg-accent-primary/10 text-accent-primary`,children:(0,q.jsx)(V,{className:`h-4 w-4`})}),(0,q.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,q.jsx)(`h2`,{className:`text-strong`,children:d(`plugins.headroom.title`)}),(0,q.jsx)(`p`,{className:`mt-1 text-xs leading-relaxed text-muted-foreground`,children:d(`plugins.headroom.panelDescription`)})]})]}),(0,q.jsxs)(`div`,{className:`mb-4 grid grid-cols-3 gap-2 text-xs`,children:[(0,q.jsx)(Ie,{label:d(`plugins.headroom.metrics.install`),value:t?d(`plugins.headroom.metrics.checking`):e.installed?d(`plugins.headroom.metrics.ready`):d(`plugins.headroom.metrics.missing`),good:e.installed}),(0,q.jsx)(Ie,{label:d(`plugins.headroom.metrics.source`),value:e.installSource===`system`?d(`plugins.headroom.metrics.system`):e.installSource===`managed`?d(`plugins.headroom.metrics.specrails`):d(`plugins.headroom.metrics.none`),good:e.installed}),(0,q.jsx)(Ie,{label:d(`plugins.headroom.metrics.proxy`),value:e.proxyRunning?`:${e.port}`:d(b?`plugins.headroom.metrics.starting`:`plugins.headroom.metrics.off`),good:e.proxyRunning||!b})]}),e.lastIssue&&(0,q.jsx)(Le,{issue:e.lastIssue}),e.installed?(0,q.jsxs)(`div`,{className:`mb-4 space-y-2`,children:[(0,q.jsx)(Ve,{provider:`codex`,active:e.activeProviders.codex,available:e.availableProviders.codex,detectedRoute:e.detectedRoutes.codex,busy:n===`activate-codex`||n===`deactivate-codex`,onClick:()=>a(`codex`,e.activeProviders.codex)}),(0,q.jsx)(Ve,{provider:`claude`,active:e.activeProviders.claude,available:e.availableProviders.claude,detectedRoute:e.detectedRoutes.claude,busy:n===`activate-claude`||n===`deactivate-claude`,onClick:()=>a(`claude`,e.activeProviders.claude)}),b&&(0,q.jsxs)(`button`,{type:`button`,disabled:!!n,onClick:s,className:`flex h-8 w-full items-center justify-center gap-2 rounded-lg border border-border bg-background/45 text-xs hover:bg-muted/50 disabled:opacity-50`,children:[n===`deactivate-all`?(0,q.jsx)(h,{className:`h-3.5 w-3.5 animate-spin`}):(0,q.jsx)(G,{className:`h-3.5 w-3.5`}),d(`plugins.headroom.actions.disableAllRoutes`)]})]}):(0,q.jsxs)(`button`,{type:`button`,disabled:!!n,onClick:i,className:`mb-3 flex h-9 w-full items-center justify-center gap-2 rounded-lg bg-primary px-3 text-label text-primary-foreground transition-colors hover:bg-primary/90 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50`,children:[n===`install`?(0,q.jsx)(h,{className:`h-3.5 w-3.5 animate-spin`}):(0,q.jsx)(f,{className:`h-3.5 w-3.5`}),d(`plugins.headroom.actions.installWithUv`)]}),e.installed&&(0,q.jsx)(Re,{state:e}),(0,q.jsxs)(`div`,{className:`mb-4 rounded-lg border border-border bg-background/45 p-3`,children:[(0,q.jsx)(`label`,{className:`mb-1 block text-label text-muted-foreground`,children:d(`plugins.headroom.port.label`)}),(0,q.jsxs)(`div`,{className:`flex gap-2`,children:[(0,q.jsx)(`input`,{value:p,onChange:e=>g(e.target.value),className:`h-8 min-w-0 flex-1 rounded-md border border-border bg-background px-2 text-sm`}),(0,q.jsx)(`button`,{type:`button`,disabled:!!n||Number(p)===e.port,onClick:()=>l(Number(p)),className:`rounded-md border border-border px-2 text-xs hover:bg-muted disabled:opacity-50`,children:d(`plugins.headroom.port.apply`)})]})]}),r.length>0&&(0,q.jsx)(`pre`,{className:`mb-3 max-h-32 overflow-y-auto overflow-x-hidden whitespace-pre-wrap break-words rounded-lg border border-border bg-background/60 p-2 text-xs text-muted-foreground`,children:r.join(`
2
+ `)}),(0,q.jsxs)(`button`,{type:`button`,onClick:u,className:`mb-2 flex h-8 w-full items-center justify-center gap-2 rounded-lg border border-border text-xs hover:bg-muted/50`,children:[(0,q.jsx)(y,{className:`h-3.5 w-3.5`}),d(`plugins.headroom.actions.viewDiagnostics`)]}),e.installed&&(0,q.jsx)(`div`,{className:`rounded-lg border border-destructive/25 bg-destructive/5 p-3`,children:_?(0,q.jsxs)(`div`,{className:`space-y-2`,children:[(0,q.jsx)(`p`,{className:`text-xs leading-relaxed text-muted-foreground`,children:d(x?`plugins.headroom.confirmDetach`:`plugins.headroom.confirmUninstall`)}),(0,q.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,q.jsx)(`button`,{type:`button`,disabled:!!n,onClick:()=>v(!1),className:`h-8 rounded-md border border-border text-xs hover:bg-muted/50 disabled:opacity-50`,children:d(`plugins.actions.cancel`)}),(0,q.jsxs)(`button`,{type:`button`,disabled:!!n,onClick:c,className:`flex h-8 items-center justify-center gap-2 rounded-md bg-destructive px-2 text-label text-destructive-foreground disabled:opacity-50`,children:[n===`uninstall`?(0,q.jsx)(h,{className:`h-3.5 w-3.5 animate-spin`}):(0,q.jsx)(m,{className:`h-3.5 w-3.5`}),d(x?`plugins.headroom.actions.detach`:`plugins.headroom.actions.uninstall`)]})]})]}):(0,q.jsxs)(`button`,{type:`button`,disabled:!!n,onClick:()=>v(!0),className:`flex h-8 w-full items-center justify-center gap-2 rounded-md text-label text-destructive hover:bg-destructive/10 disabled:opacity-50`,children:[(0,q.jsx)(m,{className:`h-3.5 w-3.5`}),d(x?`plugins.headroom.actions.detachHeadroom`:`plugins.headroom.actions.uninstallHeadroom`)]})})]})}function Ie({label:e,value:t,good:n}){return(0,q.jsxs)(`div`,{className:`rounded-lg border border-border bg-background/45 p-2`,children:[(0,q.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:e}),(0,q.jsx)(`div`,{className:E(`mt-0.5 font-medium`,n?`text-foreground`:`text-accent-warning`),children:t})]})}function Le({issue:e}){let{t}=o(`integrations`),n=`plugins.headroom.issues.${e.code}`,r=t(`${n}.title`,{defaultValue:e.title}),i=t(`${n}.guidance`,{defaultValue:e.guidance});return(0,q.jsx)(`div`,{className:`mb-3 rounded-lg border border-accent-warning/35 bg-accent-warning/10 p-3`,children:(0,q.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,q.jsx)(v,{className:`mt-0.5 h-3.5 w-3.5 shrink-0 text-accent-warning`}),(0,q.jsxs)(`div`,{className:`min-w-0`,children:[(0,q.jsx)(`div`,{className:`text-label`,children:r}),(0,q.jsx)(`p`,{className:`mt-1 text-xs leading-relaxed text-muted-foreground`,children:i}),(0,q.jsx)(`div`,{className:`mt-1 text-xs text-muted-foreground`,children:t(`plugins.headroom.issueCode`,{code:e.code})})]})]})})}function Re({state:e}){let{t,i18n:n}=o(`integrations`),r=e.metrics,i=r.outputSavingsAvailable,a=[`codex`,`claude`].map(e=>({provider:e,metric:r.providers[e]})),s=t(`plugins.headroom.savings.tokens`),c=a.reduce((e,{metric:t})=>({inputTokens:e.inputTokens+t.inputTokens,inputTokensSaved:e.inputTokensSaved+t.inputTokensSaved,outputTokens:e.outputTokens+t.outputTokens,outputTokensSaved:e.outputTokensSaved+t.outputTokensSaved}),{inputTokens:0,inputTokensSaved:0,outputTokens:0,outputTokensSaved:0}),l=a.some(({metric:e})=>e.inputTokensSaved>0),u=a.some(({metric:e})=>e.active),d=t(i?`plugins.headroom.savings.statusInputOutput`:l?`plugins.headroom.savings.statusInputOnly`:u?`plugins.headroom.savings.statusRouting`:`plugins.headroom.savings.statusInactive`),f=i||l;return(0,q.jsxs)(`div`,{className:`mb-4 rounded-lg border border-border bg-background/45 p-3`,children:[(0,q.jsxs)(`div`,{className:`mb-2 flex items-center justify-between gap-2`,children:[(0,q.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,q.jsx)(z,{className:`h-3.5 w-3.5 text-accent-primary`}),(0,q.jsx)(`div`,{className:`truncate text-label`,children:t(`plugins.headroom.savings.title`)})]}),(0,q.jsx)(`span`,{"data-chip":``,className:E(`inline-flex h-5 shrink-0 items-center rounded border px-1.5 text-caption`,f?`border-accent-success/25 bg-accent-success/10 text-accent-success`:u?`border-accent-primary/25 bg-accent-primary/10 text-accent-primary`:`border-border bg-muted text-muted-foreground`),children:d})]}),(0,q.jsxs)(`div`,{className:`mb-2 rounded-md bg-muted/35 px-2.5 py-2`,children:[(0,q.jsx)(`div`,{className:`mb-1.5 text-label text-muted-foreground`,children:t(`plugins.headroom.savings.totals`)}),(0,q.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[(0,q.jsx)(ze,{label:t(`plugins.headroom.savings.input`),processed:c.inputTokens>0?$(c.inputTokens,n.language,s):t(`plugins.headroom.savings.noData`),saved:$(c.inputTokensSaved,n.language,s)}),(0,q.jsx)(ze,{align:`right`,label:t(`plugins.headroom.savings.output`),processed:c.outputTokens>0?$(c.outputTokens,n.language,s):t(`plugins.headroom.savings.noData`),saved:i?$(c.outputTokensSaved,n.language,s):t(`plugins.headroom.savings.noData`)})]})]}),(0,q.jsx)(`div`,{className:`grid gap-2`,children:a.map(({provider:e,metric:t})=>(0,q.jsx)(Be,{metric:t,outputAvailable:r.outputSavingsAvailable},e))}),(0,q.jsx)(`div`,{className:`mt-2 flex items-center justify-end gap-2 text-xs text-muted-foreground`,children:r.updatedAt?t(`plugins.headroom.savings.updatedLive`):t(`plugins.headroom.savings.baselineSamples`,{count:e.learning.baselineSamples})})]})}function ze({label:e,processed:t,saved:n,detail:r,align:i=`left`}){let{t:a}=o(`integrations`);return(0,q.jsxs)(`div`,{className:E(`min-w-0`,i===`right`&&`text-right`),children:[(0,q.jsx)(`div`,{className:`text-label text-muted-foreground`,children:e}),(0,q.jsxs)(`div`,{className:`mt-1 space-y-0.5 text-xs`,children:[(0,q.jsxs)(`div`,{className:`flex min-w-0 items-baseline justify-between gap-2`,children:[(0,q.jsx)(`span`,{className:`shrink-0 text-muted-foreground`,children:a(`plugins.headroom.savings.processed`)}),(0,q.jsx)(`span`,{className:`truncate font-semibold tabular-nums text-foreground`,children:t})]}),(0,q.jsxs)(`div`,{className:`flex min-w-0 items-baseline justify-between gap-2`,children:[(0,q.jsx)(`span`,{className:`shrink-0 text-muted-foreground`,children:a(`plugins.headroom.savings.saved`)}),(0,q.jsx)(`span`,{className:`truncate font-semibold tabular-nums text-foreground`,children:n})]})]}),r&&(0,q.jsx)(`div`,{className:`mt-1 truncate text-xs text-muted-foreground`,children:r})]})}function Be({metric:e,outputAvailable:t}){let{t:n,i18n:r}=o(`integrations`),i=!e.available,a=i||!e.active,s=n(`plugins.headroom.savings.tokens`),c=e.inputTokens>0?$(e.inputTokens,r.language,s):n(`plugins.headroom.savings.noData`),l=$(e.inputTokensSaved,r.language,s),u=e.outputTokens>0?$(e.outputTokens,r.language,s):n(`plugins.headroom.savings.noData`),d=t?$(e.outputTokensSaved,r.language,s):e.active?n(`plugins.headroom.savings.noData`):n(`plugins.headroom.savings.off`),f=e.requests>0?n(`plugins.headroom.savings.requestCount`,{count:Oe(e.requests,r.language)}):i?n(`plugins.headroom.provider.noProjectUsesProvider`):e.active?n(`plugins.headroom.savings.inputSavingsActive`):n(`plugins.headroom.savings.routeDisabled`);return(0,q.jsxs)(`div`,{className:E(`rounded-md border border-border bg-card/45 px-2.5 py-2`,a&&`opacity-70`),children:[(0,q.jsxs)(`div`,{className:`flex min-w-0 items-center gap-1.5`,children:[(0,q.jsx)(`span`,{className:`text-label`,children:e.label}),e.detectedRoute&&(0,q.jsx)(`span`,{"data-chip":``,className:`inline-flex h-5 items-center rounded bg-accent-primary/10 px-1.5 text-caption font-medium text-accent-primary`,children:n(`plugins.headroom.savings.detected`)})]}),(0,q.jsx)(`div`,{className:`mt-0.5 truncate text-xs text-muted-foreground`,children:f}),(0,q.jsxs)(`div`,{className:`mt-2 grid grid-cols-2 gap-3`,children:[(0,q.jsx)(ze,{label:n(`plugins.headroom.savings.input`),processed:c,saved:l}),(0,q.jsx)(ze,{align:`right`,label:n(`plugins.headroom.savings.output`),processed:u,saved:d})]})]})}function Ve({provider:e,active:t,available:n,detectedRoute:r,busy:i,onClick:a}){let{t:s}=o(`integrations`),c=s(n?t?`plugins.headroom.provider.routedThroughHeadroom`:r?`plugins.headroom.provider.detectedExternalRoute`:`plugins.headroom.provider.notRouted`:`plugins.headroom.provider.noProjectUsesProvider`),l=`headroom-provider-${e}-label`,u=`headroom-provider-${e}-status`;return(0,q.jsxs)(`div`,{className:E(`flex w-full items-center gap-3 rounded-lg border border-border bg-background/45 p-3 text-left`,(i||!n)&&`opacity-50`),children:[(0,q.jsx)(`div`,{className:E(`grid h-8 w-8 place-items-center rounded-md`,t?`bg-accent-success/15 text-accent-success`:`bg-muted text-muted-foreground`),children:i?(0,q.jsx)(h,{className:`h-3.5 w-3.5 animate-spin`}):(0,q.jsx)(ce,{className:`h-3.5 w-3.5`})}),(0,q.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,q.jsx)(`div`,{id:l,className:`text-label capitalize`,children:e}),(0,q.jsx)(`div`,{id:u,className:`text-xs text-muted-foreground`,children:c})]}),(0,q.jsx)(H,{checked:t,onCheckedChange:()=>a(),disabled:i||!n,"aria-labelledby":l,"aria-describedby":u,onClassName:`bg-accent-success`,className:`disabled:opacity-100`})]})}function He({plugin:e,projects:t,onClose:n}){let{t:r}=o(`integrations`),[i,a]=(0,K.useState)(``);(0,K.useEffect)(()=>a(``),[e]);let s=t.find(e=>e.id===i)??null;return(0,q.jsx)(C,{open:!!e,onOpenChange:e=>{e||n()},children:(0,q.jsxs)(x,{size:`workspace`,children:[(0,q.jsxs)(S,{children:[(0,q.jsx)(T,{children:r(e===`jira`?`plugins.projectWizard.configureJira`:`plugins.projectWizard.installSerena`)}),(0,q.jsx)(w,{children:r(`plugins.projectWizard.description`)})]}),(0,q.jsx)(b,{className:`overflow-x-hidden`,children:(0,q.jsxs)(`div`,{className:`grid gap-4 md:grid-cols-[260px_minmax(0,1fr)]`,children:[(0,q.jsxs)(`div`,{className:`rounded-lg border border-border bg-card/70 p-3`,children:[(0,q.jsx)(`div`,{className:`mb-2 text-label text-muted-foreground`,children:r(`plugins.projectWizard.chooseProject`)}),(0,q.jsx)(`div`,{className:`max-h-[52vh] space-y-1 overflow-auto`,children:t.map(t=>{let n=e===`serena`&&!D(t).some(e=>Se.has(e));return(0,q.jsxs)(`button`,{type:`button`,disabled:n,onClick:()=>a(t.id),className:E(`w-full rounded-md px-2 py-2 text-left transition-colors`,t.id===i?`bg-muted text-foreground`:`text-muted-foreground hover:bg-muted/45 hover:text-foreground`,n&&`cursor-not-allowed opacity-45`),children:[(0,q.jsx)(`div`,{className:`truncate text-label`,children:t.name}),(0,q.jsx)(`div`,{className:`truncate text-xs`,children:n?r(`plugins.projectWizard.requiresSupportedProvider`):t.path})]},t.id)})})]}),(0,q.jsx)(`div`,{className:`min-h-[360px] rounded-lg border border-border bg-card/70 p-4`,children:s?e===`jira`?(0,q.jsx)(Ue,{project:s,onDone:n}):(0,q.jsx)(We,{project:s,onDone:n}):(0,q.jsx)(`div`,{className:`flex h-full items-center justify-center text-sm text-muted-foreground`,children:r(`plugins.projectWizard.selectProjectToContinue`)})})]})})]})})}function Ue({project:e,onDone:t}){let{t:n}=o(`integrations`),r=De(e.id),[i,a]=(0,K.useState)(null),[s,c]=(0,K.useState)(!0),[l,u]=(0,K.useState)(null),d=(0,K.useCallback)(async()=>{c(!0),u(null);try{let e=await fetch(`${r}/jira/connection`).then(e=>Q(e));a(e)}catch(e){a({connected:!1}),u(e.message)}finally{c(!1)}},[r]);return(0,K.useEffect)(()=>{d()},[d]),s?(0,q.jsxs)(`div`,{className:`flex h-full items-center justify-center text-sm text-muted-foreground`,children:[(0,q.jsx)(F,{running:!0,className:`w-16 shrink-0`}),n(`plugins.jira.loading`)]}):i?.connected&&i.connection?(0,q.jsxs)(`div`,{className:`space-y-4`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`h3`,{className:`text-strong`,children:n(`plugins.jira.titleForProject`,{name:e.name})}),(0,q.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:n(`plugins.jira.configuredDescription`)})]}),(0,q.jsx)(be,{state:i,apiBase:r,onChanged:()=>{d()}})]}):(0,q.jsxs)(`div`,{className:`space-y-4`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`h3`,{className:`text-strong`,children:n(`plugins.jira.titleForProject`,{name:e.name})}),(0,q.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:l?n(`plugins.jira.loadFailed`,{message:l}):n(`plugins.jira.notConfiguredDescription`)})]}),(0,q.jsx)(pe,{apiBase:r,onConnected:()=>{d()},onSkip:t})]})}function We({project:e,onDone:t}){let{t:n}=o(`integrations`),r=(0,K.useMemo)(()=>D(e).filter(e=>Se.has(e)),[e]),i=r.includes(e.provider)?e.provider:r[0]??e.provider,[a,s]=(0,K.useState)(i),[c,l]=(0,K.useState)(null),[d,p]=(0,K.useState)(null),[m,g]=(0,K.useState)(!1),[_,y]=(0,K.useState)(null),b=(0,K.useRef)(0);(0,K.useEffect)(()=>{s(i),l(null),p(null)},[e.id,i]);let x=(0,K.useCallback)(async()=>{let t=++b.current;y(null);try{let n=`?provider=${encodeURIComponent(a)}`,r=await fetch(`${De(e.id)}/plugins${n}`).then(e=>Q(e));if(t!==b.current)return;let i=r.plugins.find(e=>e.name===`serena`)??null;if(l(i),p(null),i?.status===`not-installed`){let r=await fetch(`${De(e.id)}/plugins/serena/preview-install${n}`).then(e=>Q(e));t===b.current&&p(r)}}catch(e){t===b.current&&y(e.message)}},[e.id,a]);(0,K.useEffect)(()=>{x()},[x]);async function S(){g(!0),y(null);try{await fetch(`${De(e.id)}/plugins/serena/install`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({provider:a})}).then(e=>Q(e)),await x(),t()}catch(e){y(e.message)}finally{g(!1)}}let C=(d?.requirements??[]).every(e=>e.installed&&e.executable&&e.meetsMinimum),w=c?n(`plugins.projectStatus.${c.status}`,{defaultValue:c.status}):``,T=c?.name===`serena`?n(`plugins.catalog.serena.description`):c?.description;return!c&&!_?(0,q.jsxs)(`div`,{className:`flex h-full items-center justify-center text-sm text-muted-foreground`,children:[(0,q.jsx)(F,{running:!0,className:`w-16 shrink-0`}),` `,n(`plugins.serena.loading`)]}):(0,q.jsxs)(`div`,{className:`space-y-4`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`h3`,{className:`text-strong`,children:n(`plugins.serena.titleForProject`,{name:e.name})}),(0,q.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:n(`plugins.serena.description`)})]}),(0,q.jsxs)(`label`,{className:`block space-y-1`,children:[(0,q.jsx)(`span`,{className:`text-label`,children:n(`plugins.serena.provider`)}),(0,q.jsx)(`select`,{"aria-label":n(`plugins.serena.provider`),value:a,disabled:m,onChange:e=>{l(null),p(null),s(e.target.value)},className:`w-full rounded-md border border-border bg-background px-2 py-1.5 text-xs`,children:r.map(e=>(0,q.jsx)(`option`,{value:e,children:u(e)},e))})]}),c&&(0,q.jsxs)(`div`,{className:`rounded-lg border border-border bg-background/45 p-3`,children:[(0,q.jsx)(`div`,{className:`text-label`,children:n(`plugins.serena.status`,{status:w})}),T&&(0,q.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:T})]}),d&&(0,q.jsxs)(`div`,{className:`space-y-3`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`div`,{className:`mb-1 text-label`,children:n(`plugins.serena.files`)}),(0,q.jsx)(`ul`,{className:`space-y-1 text-xs font-mono`,children:d.files.map(e=>(0,q.jsxs)(`li`,{className:e.op===`create`?`text-accent-success`:`text-accent-info`,children:[e.op===`create`?`+ `:`~ `,e.path]},e.path))})]}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`div`,{className:`mb-1 text-label`,children:n(`plugins.serena.prerequisites`)}),(0,q.jsx)(`ul`,{className:`space-y-1 text-xs`,children:d.requirements.map(e=>(0,q.jsxs)(`li`,{className:`flex items-center gap-2`,children:[e.installed&&e.executable&&e.meetsMinimum?(0,q.jsx)(R,{className:`h-3 w-3 text-accent-success`}):(0,q.jsx)(v,{className:`h-3 w-3 text-accent-warning`}),(0,q.jsxs)(`span`,{children:[e.name,e.minVersion?` >= ${e.minVersion}`:``]}),e.version&&(0,q.jsxs)(`span`,{className:`text-muted-foreground`,children:[`(`,e.version,`)`]})]},e.name))})]})]}),_&&(0,q.jsx)(`div`,{className:`rounded-lg border border-destructive/30 bg-destructive/10 p-3 text-xs text-destructive`,children:_}),(0,q.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,q.jsx)(`button`,{type:`button`,onClick:t,className:`rounded-md border border-border px-3 py-1.5 text-xs`,children:n(`plugins.actions.cancel`)}),(0,q.jsxs)(k,{type:`button`,disabled:m||c?.status!==`not-installed`||!C,onClick:S,className:`gap-2`,children:[m?(0,q.jsx)(h,{className:`h-3.5 w-3.5 animate-spin`}):(0,q.jsx)(f,{className:`h-3.5 w-3.5`}),n(`plugins.actions.install`)]})]})]})}function Ge({open:e,onClose:t}){let{t:n}=o(`integrations`),[r,i]=(0,K.useState)(null);return(0,K.useEffect)(()=>{e&&fetch(`${c}/api/global-plugins/headroom/diagnostics`).then(e=>Q(e)).then(i).catch(e=>i({error:e.message}))},[e]),(0,q.jsx)(C,{open:e,onOpenChange:e=>{e||t()},children:(0,q.jsxs)(x,{size:`wide`,children:[(0,q.jsxs)(S,{icon:(0,q.jsx)(L,{}),children:[(0,q.jsx)(T,{children:n(`plugins.diagnostics.title`)}),(0,q.jsx)(w,{children:n(`plugins.diagnostics.description`)})]}),(0,q.jsx)(b,{children:(0,q.jsx)(`pre`,{className:`overflow-x-hidden whitespace-pre-wrap break-words rounded-lg border border-border bg-background p-3 text-xs`,children:JSON.stringify(r,null,2)})})]})})}export{ke as default};
@@ -0,0 +1 @@
1
+ import{t as e}from"./jsx-runtime-BbYvbtY8.js";import{t}from"./utils-ELimjS2Y.js";var n=e(),r={pending:`bg-border`,active:`bg-accent-primary`,done:`bg-accent-success`,failed:`bg-destructive`};function i({progress:e,stations:i,running:a=!1,orientation:o=`horizontal`,className:s,"aria-label":c}){let l=o===`vertical`,u=typeof e==`number`,d=u?Math.min(1,Math.max(0,e))*100:0,f=a&&!u;return(0,n.jsxs)(`div`,{role:u?`progressbar`:`status`,"aria-label":c,"aria-valuemin":u?0:void 0,"aria-valuemax":u?100:void 0,"aria-valuenow":u?Math.round(d):void 0,"data-testid":`rail-track`,"data-orientation":o,className:t(`relative [container-type:inline-size]`,l?`h-full w-3 min-h-8`:`h-3 w-full min-w-8`,s),children:[(0,n.jsx)(`div`,{className:t(`absolute bg-border`,l?`left-1/2 top-0 bottom-0 w-px -translate-x-1/2`:`top-1/2 left-0 right-0 h-px -translate-y-1/2`),"aria-hidden":!0}),(u||f)&&(0,n.jsx)(`div`,{"aria-hidden":!0,"data-testid":`rail-track-pill`,className:t(`absolute rounded-full bg-gradient-to-r from-accent-primary to-[var(--color-rail-end)]`,l?`left-1/2 -translate-x-1/2 w-1.5 h-4`:`top-1/2 -translate-y-1/2 h-1.5 w-8`,f&&!l&&`left-0 animate-rail-travel [--rail-distance:calc(100cqw-2rem)]`,f&&l&&`top-0`),style:u?l?{top:`calc(${d}% - ${d/100} * 1rem)`,transition:`top var(--duration-base, 200ms) var(--ease-rail, ease-out)`}:{left:`calc(${d}% - ${d/100} * 2rem)`,transition:`left var(--duration-base, 200ms) var(--ease-rail, ease-out)`}:void 0}),i?.map((e,a)=>{let o=i.length>1?a/(i.length-1)*100:0;return(0,n.jsx)(`span`,{title:e.label,"data-state":e.state,className:t(`absolute h-1.5 w-1.5 rounded-full ring-2 ring-background`,r[e.state],l?`left-1/2 -translate-x-1/2 -translate-y-1/2`:`top-1/2 -translate-x-1/2 -translate-y-1/2`),style:l?{top:`${o}%`}:{left:`${o}%`},children:(0,n.jsx)(`span`,{className:`sr-only`,children:`${e.label}: ${e.state}`})},e.id)})]})}export{i as t};
@@ -1,2 +1,2 @@
1
- import{t as e}from"./jsx-runtime-BbYvbtY8.js";import{n as t}from"./createLucideIcon-DtODIU64.js";import{r as n}from"./useDesktop-BjLT0_EE.js";import{t as r}from"./project-repositories-Cnnuj9Ia.js";var i=e();function a({value:e,onChange:a,disabled:o=!1,repositories:s,workspaceOnly:c=!1,workspaceSelection:l,onWorkspaceChange:u,showSingle:d=!1,label:f,hint:p}){let{t:m}=t(`common`),{activeProjectId:h,projects:g}=n(),_=s??r(g.find(e=>e.id===h)),v=_.find(e=>e.isPrimary),y=e??(v?[v.id]:[]),b=y.some(e=>!_.some(t=>t.id===e));if(c){let e=_.filter(e=>y.includes(e.id)&&(e.workspacePaths?.length||e.workspacePath));return e.length?(0,i.jsxs)(`fieldset`,{className:`space-y-2`,disabled:o,children:[(0,i.jsx)(`legend`,{className:`text-xs font-medium`,children:m(`repositories.launchWorkspaces`)}),(0,i.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:m(`repositories.launchWorkspaceHint`)}),e.map(e=>{let t=e.workspacePaths??[e.workspacePath],n=l?.[e.id]??t;return(0,i.jsxs)(`div`,{className:`space-y-1`,children:[(0,i.jsx)(`span`,{className:`text-xs font-medium`,children:e.name}),t.map(t=>(0,i.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,title:t,children:[(0,i.jsx)(`input`,{type:`checkbox`,"data-agent-interactive":!0,checked:n.includes(t),disabled:o||n.length===1&&n[0]===t,onChange:r=>u?.({...Object.fromEntries(Object.entries(l??{}).filter(([e])=>y.includes(e))),[e.id]:r.target.checked?[...n,t]:n.filter(e=>e!==t)})}),(0,i.jsx)(`span`,{className:`break-all`,children:t})]},t))]},e.id)})]}):null}return!d&&_.length<=1&&!b?null:(0,i.jsxs)(`fieldset`,{className:`space-y-2`,disabled:o,children:[(0,i.jsx)(`legend`,{className:`mb-1 text-xs font-medium`,children:f??m(`repositories.specScope`)}),(0,i.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:p??m(`repositories.scopeHint`)}),(0,i.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[_.map(e=>(0,i.jsxs)(`label`,{title:e.workspacePaths?.join(`
1
+ import{t as e}from"./jsx-runtime-BbYvbtY8.js";import{n as t}from"./createLucideIcon-DtODIU64.js";import{r as n}from"./useDesktop-BuOp2-MR.js";import{t as r}from"./project-repositories-DJPeAVBK.js";var i=e();function a({value:e,onChange:a,disabled:o=!1,repositories:s,workspaceOnly:c=!1,workspaceSelection:l,onWorkspaceChange:u,showSingle:d=!1,label:f,hint:p}){let{t:m}=t(`common`),{activeProjectId:h,projects:g}=n(),_=s??r(g.find(e=>e.id===h)),v=_.find(e=>e.isPrimary),y=e??(v?[v.id]:[]),b=y.some(e=>!_.some(t=>t.id===e));if(c){let e=_.filter(e=>y.includes(e.id)&&(e.workspacePaths?.length||e.workspacePath));return e.length?(0,i.jsxs)(`fieldset`,{className:`space-y-2`,disabled:o,children:[(0,i.jsx)(`legend`,{className:`text-label`,children:m(`repositories.launchWorkspaces`)}),(0,i.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:m(`repositories.launchWorkspaceHint`)}),e.map(e=>{let t=e.workspacePaths??[e.workspacePath],n=l?.[e.id]??t;return(0,i.jsxs)(`div`,{className:`space-y-1`,children:[(0,i.jsx)(`span`,{className:`text-label`,children:e.name}),t.map(t=>(0,i.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,title:t,children:[(0,i.jsx)(`input`,{type:`checkbox`,"data-agent-interactive":!0,checked:n.includes(t),disabled:o||n.length===1&&n[0]===t,onChange:r=>u?.({...Object.fromEntries(Object.entries(l??{}).filter(([e])=>y.includes(e))),[e.id]:r.target.checked?[...n,t]:n.filter(e=>e!==t)})}),(0,i.jsx)(`span`,{className:`break-all`,children:t})]},t))]},e.id)})]}):null}return!d&&_.length<=1&&!b?null:(0,i.jsxs)(`fieldset`,{className:`space-y-2`,disabled:o,children:[(0,i.jsx)(`legend`,{className:`mb-1 text-label`,children:f??m(`repositories.specScope`)}),(0,i.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:p??m(`repositories.scopeHint`)}),(0,i.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[_.map(e=>(0,i.jsxs)(`label`,{title:e.workspacePaths?.join(`
2
2
  `)??e.workspacePath??e.path,className:`flex items-center gap-2 rounded border border-border px-2 py-1.5 text-xs`,children:[(0,i.jsx)(`input`,{type:`checkbox`,"data-agent-interactive":!0,checked:y.includes(e.id),"aria-label":e.available===!1?`${m(`repositories.unavailable`)}: ${e.name}`:void 0,disabled:o||(e.available===!1||e.kind===`folder`&&!e.isPrimary)&&!y.includes(e.id)||y.length===1&&y[0]===e.id,onChange:t=>a(t.target.checked?[...y,e.id]:y.filter(t=>t!==e.id))}),(0,i.jsx)(`span`,{children:e.name}),e.available===!1&&(0,i.jsxs)(`span`,{className:`text-destructive`,children:[` `,m(`repositories.unavailable`)]}),e.workspacePaths?.map(e=>(0,i.jsx)(`span`,{className:`text-muted-foreground`,children:e},e)),!e.workspacePaths&&e.workspacePath&&(0,i.jsx)(`span`,{className:`text-muted-foreground`,children:e.workspacePath}),e.kind===`folder`&&!e.isPrimary&&(0,i.jsx)(`span`,{className:`text-muted-foreground`,children:m(`repositories.contextOnly`)})]},e.id)),y.filter(e=>!_.some(t=>t.id===e)).map(e=>(0,i.jsxs)(`label`,{className:`flex items-center gap-2 rounded border border-destructive px-2 py-1.5 text-xs`,children:[(0,i.jsx)(`input`,{type:`checkbox`,"data-agent-interactive":!0,checked:!0,disabled:o||y.length===1,onChange:()=>a(y.filter(t=>t!==e))}),m(`repositories.unavailable`),`: `,e]},e))]}),b&&(0,i.jsx)(`p`,{role:`alert`,className:`text-xs text-destructive`,children:m(`repositories.invalidSelection`)})]})}export{a as t};
@@ -0,0 +1,7 @@
1
+ import{a as e}from"./rolldown-runtime-CNC7AqOf.js";import{n as t,t as n}from"./jsx-runtime-BbYvbtY8.js";import{f as r,l as i,p as a}from"./chunk-OB3PAWPO-BBaq6pUk.js";import{s as o,t as s}from"./api-DOGbyfTO.js";import{n as c,t as l}from"./createLucideIcon-DtODIU64.js";import{Ct as u,Nt as d,Ot as f,Qt as p,Z as m,en as h,n as ee}from"./TicketDetailModalContext-B-Gtm6Ob.js";import{n as g}from"./notify-error-BsWANx1T.js";import{n as _}from"./save-LmPSfsvZ.js";import{h as v,m as y,p as te}from"./MinimizedChatsContext-742ypO8n.js";import{t as ne}from"./ban-wqfdzoXt.js";import{n as b,r as re}from"./chevron-up-BAMuP0XD.js";import{t as x}from"./chevron-right-CwMAj0w_.js";import{t as ie}from"./download-C9wP_42h.js";import{t as ae}from"./external-link-CZ6Q-v1-.js";import{t as S}from"./file-text-CNXzL3wj.js";import{t as oe}from"./git-compare-arrows-Cu6tICCq.js";import{r as C,t as se}from"./confirm-dialog-ChZdHL3Q.js";import{t as ce}from"./refresh-cw-DfyTkbsf.js";import{t as w}from"./sparkles-CCfUdFGY.js";import{t as T}from"./triangle-alert-Cxpn8bqr.js";import{t as E}from"./x-Bu7X_eR2.js";import{t as D}from"./utils-ELimjS2Y.js";import{r as le}from"./useDesktop-BuOp2-MR.js";import{n as O,t as k}from"./lib-DWJfei6y.js";import{t as A}from"./button-CHPkroew.js";import{a as ue,i as de,n as fe,r as pe,t as me}from"./select-xA3pSmqE.js";import{t as he}from"./format-BODoFIw6.js";import{t as ge}from"./RailTrack-BfLmBzBh.js";import{$ as _e,D as j,Gt as ve,Pt as M,Q as ye,Rt as N,Ut as be,Yt as xe,Z as Se,fn as P,ft as Ce,i as we,n as Te,r as F,vn as I,vt as L,yn as R}from"./index-DHzB0T26.js";import{t as z}from"./esm-BKF6CE7v.js";var B={name:`circle-dollar-sign`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8`,key:`1h4pet`}],[`path`,{d:`M12 18V6`,key:`zqpxq5`}]]};B.node;var Ee=l(B),De={name:`file-check-corner`,size:24,node:[[`path`,{d:`M10.5 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v6`,key:`g5mvt7`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`m14 20 2 2 4-4`,key:`15kota`}]],aliases:[`file-check-2`]};De.node;var Oe=l(De),V={name:`file-exclamation-point`,size:24,node:[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]],aliases:[`file-warning`]};V.node;var ke=l(V),H={name:`landmark`,size:24,node:[[`path`,{d:`M10 18v-7`,key:`wt116b`}],[`path`,{d:`M11.119 2.205a2 2 0 0 1 1.762 0l7.84 3.846A.5.5 0 0 1 20.5 7h-17a.5.5 0 0 1-.22-.949z`,key:`yxxwt6`}],[`path`,{d:`M14 18v-7`,key:`vav6t3`}],[`path`,{d:`M18 18v-7`,key:`aexdmj`}],[`path`,{d:`M3 22h18`,key:`8prr45`}],[`path`,{d:`M6 18v-7`,key:`1ivflk`}]]};H.node;var U=l(H),Ae={name:`message-square-quote`,size:24,node:[[`path`,{d:`M14 14a2 2 0 0 0 2-2V8h-2`,key:`1r06pg`}],[`path`,{d:`M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z`,key:`18887p`}],[`path`,{d:`M8 14a2 2 0 0 0 2-2V8H8`,key:`1jzu5j`}]]};Ae.node;var je=l(Ae),Me={name:`pencil-line`,size:24,node:[[`path`,{d:`M13 21h8`,key:`1jsn5i`}],[`path`,{d:`m15 5 4 4`,key:`1mk7zo`}],[`path`,{d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z`,key:`1a8usu`}]]};Me.node;var Ne=l(Me),W={name:`rows-2`,size:24,node:[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M3 12h18`,key:`1i2n21`}]],aliases:[`rows`]};W.node;var G=l(W),K=e(t(),1),q=n();function J(e){return e.split(/\n{2,}/).map(e=>{if(e.includes(`
2
+ `))return e;let t=e.match(/(?:^|\s)(\d{1,2})\.\s+(?=\S)/g);return!t||t.length<3?e:e.replace(/\s+(\d{1,2})\.\s+(?=\S)/g,(e,t,n)=>n===0?e:`\n${t}. `)}).join(`
3
+
4
+ `)}function Pe({children:e,muted:t=!1,className:n}){let r=(0,K.useMemo)(()=>({a:({href:e,children:t})=>(0,q.jsx)(`a`,{href:e,target:`_blank`,rel:`noreferrer`,className:`text-accent-primary underline decoration-accent-primary/40 underline-offset-2 hover:decoration-accent-primary`,children:t}),img:()=>null,code:({className:e,children:t})=>e?(0,q.jsx)(`code`,{className:e,children:t}):(0,q.jsx)(`code`,{className:`rounded-md border border-border/50 bg-background-deep/60 px-1.5 py-px font-mono text-[0.85em] text-accent-info`,children:t})}),[]);return(0,q.jsx)(`div`,{"data-testid":`packet-markdown`,className:D(`prose prose-invert prose-sm max-w-none leading-relaxed`,`prose-p:my-1.5 prose-headings:mt-3 prose-headings:mb-1 prose-headings:text-sm prose-headings:font-semibold`,`prose-strong:text-foreground prose-ul:my-1.5 prose-ol:my-1.5 prose-li:my-0.5 prose-li:marker:text-accent-primary`,`prose-pre:my-2 prose-pre:rounded-lg prose-pre:border prose-pre:border-border/50 prose-pre:bg-background-deep/60 prose-pre:text-xs`,`prose-blockquote:border-accent-primary/40 prose-blockquote:text-muted-foreground prose-hr:border-border/50`,t?`text-muted-foreground`:`text-foreground`,n),children:(0,q.jsx)(O,{remarkPlugins:[k],skipHtml:!0,components:r,children:J(e)})})}var Y=[`read`,`write`,`exec`,`mcp`,`network`],Fe={read:S,write:Ne,exec:M,mcp:xe,network:v};function Ie({actions:e}){let{t}=c(`packet`),[n,r]=(0,K.useState)(null);async function i(e,n){let i=`${e}:${n}`;r(i);try{let t=await fetch(`${s()}/jobs/${encodeURIComponent(e)}/audit?format=${n}`);if(!t.ok)throw Error(`HTTP ${t.status}`);let r=await t.blob(),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=`agent-actions-${e}.${n}`,document.body.appendChild(a),a.click(),a.remove(),URL.revokeObjectURL(i)}catch(e){g(t(`agentActions.downloadFailed`),{detail:e.message})}finally{r(null)}}return(0,q.jsxs)(`div`,{className:`space-y-3`,"data-testid":`packet-agent-actions`,children:[(0,q.jsx)(`ul`,{className:`flex flex-wrap gap-2`,"aria-label":t(`agentActions.countsLabel`),children:Y.map(n=>{let r=Fe[n],i=e.counts[n]??0;return(0,q.jsxs)(`li`,{className:`inline-flex items-center gap-1.5 rounded-full border px-2.5 py-1 text-xs ${i>0?`border-border bg-background-deep/50 text-foreground`:`border-border/50 text-muted-foreground`}`,"data-testid":`packet-agent-actions-${n}`,children:[(0,q.jsx)(r,{className:`size-3.5`,"aria-hidden":!0}),(0,q.jsx)(`span`,{className:`tabular-nums font-medium`,children:i}),(0,q.jsx)(`span`,{children:t(`agentActions.kinds.${n}`,{count:i})})]},n)})}),(0,q.jsx)(`p`,{className:`text-caption text-muted-foreground`,children:t(`agentActions.caveat`)}),(0,q.jsx)(`ul`,{className:`space-y-1.5`,children:e.runIds.map(e=>(0,q.jsxs)(`li`,{className:`flex flex-wrap items-center gap-2 text-xs`,children:[(0,q.jsx)(`span`,{className:`font-mono text-muted-foreground`,title:e,children:t(`agentActions.run`,{id:e.slice(0,8)})}),[`jsonl`,`csv`].map(r=>(0,q.jsxs)(`button`,{type:`button`,onClick:()=>void i(e,r),disabled:n!==null,className:`inline-flex items-center gap-1 rounded-md border border-border px-2 py-0.5 text-xs text-foreground transition-colors hover:bg-background-deep/60 disabled:opacity-50`,"data-testid":`packet-agent-actions-download-${r}`,children:[(0,q.jsx)(ie,{className:`size-3`,"aria-hidden":!0}),t(`agentActions.download`,{format:r.toUpperCase()})]},r))]},e))})]})}var X=12;function Le({derivation:e,settlement:t}){let{t:n}=c(`packet`),r=t?.specRewrite===`failed`;if(e.status===`unavailable`)return(0,q.jsxs)(`section`,{className:`rounded-lg border border-border/60 bg-surface/40 p-4`,"data-testid":`packet-derivation`,"aria-labelledby":`packet-derivation-title`,children:[(0,q.jsxs)(`h2`,{id:`packet-derivation-title`,className:`mb-1 flex items-center gap-1.5 text-sm font-medium text-foreground`,children:[(0,q.jsx)(oe,{className:`size-4 text-accent-info`,"aria-hidden":!0}),n(`derivation.title`)]}),(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:n(`derivation.unavailable`)}),r?(0,q.jsx)(`p`,{className:`mt-2 text-xs text-accent-warning`,"data-testid":`packet-derivation-rewrite-failed`,children:n(`derivation.rewriteFailed`)}):null]});let i=e.unexplainedFiles.length+e.unexplainedOmitted,a=e.files>0&&i===0,o=e.unexplainedFiles.slice(0,X),s=i-o.length;return(0,q.jsxs)(`section`,{className:`rounded-lg border p-4 ${a?`border-accent-success/30 bg-accent-success/5`:`border-accent-warning/30 bg-accent-warning/5`}`,"data-testid":`packet-derivation`,"aria-labelledby":`packet-derivation-title`,children:[(0,q.jsxs)(`h2`,{id:`packet-derivation-title`,className:`mb-2 flex items-center gap-1.5 text-sm font-medium text-foreground`,children:[(0,q.jsx)(oe,{className:`size-4 ${a?`text-accent-success`:`text-accent-warning`}`,"aria-hidden":!0}),n(`derivation.title`)]}),(0,q.jsx)(`p`,{className:`text-sm text-foreground`,"data-testid":`packet-derivation-coverage`,children:n(`derivation.coverage`,{explained:e.explained,files:e.files})}),(0,q.jsxs)(`dl`,{className:`mt-2 grid gap-x-3 gap-y-0.5 text-xs text-muted-foreground sm:grid-cols-[auto_1fr]`,children:[e.change?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`dt`,{className:`font-medium`,children:n(`derivation.change`)}),(0,q.jsx)(`dd`,{className:`font-mono`,children:e.change})]}):null,(0,q.jsx)(`dt`,{className:`font-medium`,children:n(`derivation.requirements`)}),(0,q.jsx)(`dd`,{children:n(`derivation.requirementsValue`,{added:e.requirementsAdded,modified:e.requirementsModified})}),(0,q.jsx)(`dt`,{className:`font-medium`,children:n(`derivation.confidence`)}),(0,q.jsx)(`dd`,{children:e.confidence?n(`derivation.confidenceLevel.${e.confidence}`):n(`derivation.confidenceUnknown`)})]}),(0,q.jsx)(`p`,{className:`mt-1 text-caption text-muted-foreground`,children:n(`derivation.caveat`)}),i>0?(0,q.jsxs)(`div`,{className:`mt-3`,children:[(0,q.jsx)(`h3`,{className:`text-label text-accent-warning`,children:n(`derivation.unexplainedTitle`,{count:i})}),(0,q.jsx)(`ul`,{className:`mt-1 space-y-0.5`,"data-testid":`packet-derivation-unexplained`,children:o.map(e=>(0,q.jsx)(`li`,{className:`font-mono text-caption text-foreground`,children:e},e))}),s>0?(0,q.jsx)(`p`,{className:`mt-1 text-caption text-muted-foreground`,children:n(`derivation.more`,{count:s})}):null]}):null,r?(0,q.jsx)(`p`,{className:`mt-2 text-xs text-accent-warning`,"data-testid":`packet-derivation-rewrite-failed`,children:n(`derivation.rewriteFailed`)}):null]})}var Z=8;function Re({section:e,multiTicket:t}){let{t:n}=c(`packet`),[r,i]=(0,K.useState)(!1),a=e.undemonstratedList.filter(e=>e.touched).length,o=e.total>0&&e.demonstrated===e.total,s=a>0?`warning`:o?`success`:`info`,l=s===`warning`?`border-accent-warning/30 bg-accent-warning/5`:s===`success`?`border-accent-success/30 bg-accent-success/5`:`border-border/60 bg-surface/40`,u=s===`warning`?`text-accent-warning`:s===`success`?`text-accent-success`:`text-accent-info`,d=r?e.undemonstratedList:e.undemonstratedList.slice(0,Z),f=r?e.demonstratedList:e.demonstratedList.slice(0,Z),p=e.undemonstratedList.length-d.length+e.demonstratedList.length-f.length,m=e=>t?(0,q.jsxs)(`span`,{className:`ml-1 text-caption text-muted-foreground`,children:[`#`,e]}):null;return(0,q.jsxs)(`section`,{className:`rounded-lg border p-4 ${l}`,"data-testid":`packet-requirements`,"aria-labelledby":`packet-requirements-title`,children:[(0,q.jsxs)(`h2`,{id:`packet-requirements-title`,className:`mb-1 flex items-center gap-1.5 text-sm font-medium text-foreground`,children:[(0,q.jsx)(y,{className:`size-4 ${u}`,"aria-hidden":!0}),n(`requirements.title`,{demonstrated:e.demonstrated,total:e.total})]}),e.touched>0?(0,q.jsx)(`p`,{className:`text-xs text-foreground`,"data-testid":`packet-requirements-touched`,children:n(`requirements.touched`,{demonstrated:e.touchedDemonstrated,total:e.touched})}):null,(0,q.jsx)(`p`,{className:`mt-1 text-caption text-muted-foreground`,children:e.withoutReceipt?n(`requirements.caveatNoReceipt`):n(`requirements.caveat`)}),d.length>0?(0,q.jsxs)(`div`,{className:`mt-3`,children:[(0,q.jsx)(`h3`,{className:`text-label text-foreground`,children:n(`requirements.undemonstratedTitle`,{count:e.undemonstratedList.length})}),(0,q.jsx)(`ul`,{className:`mt-1 space-y-1`,"data-testid":`packet-requirements-undemonstrated`,children:d.map(e=>(0,q.jsxs)(`li`,{className:`flex flex-wrap items-baseline gap-x-1.5 text-xs`,children:[(0,q.jsx)(`span`,{className:`font-mono text-caption ${e.touched?`text-accent-warning`:`text-foreground`}`,children:e.id}),(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:n(`requirements.reason.${e.reason}`)}),e.touched?(0,q.jsx)(`span`,{className:`rounded-full border border-accent-warning/40 px-1.5 text-caption text-accent-warning`,children:n(`requirements.touchedBadge`)}):null,m(e.ticketId)]},`${e.ticketId}:${e.id}`))})]}):null,f.length>0?(0,q.jsxs)(`div`,{className:`mt-3`,children:[(0,q.jsx)(`h3`,{className:`text-label text-foreground`,children:n(`requirements.demonstratedTitle`,{count:e.demonstratedList.length})}),(0,q.jsx)(`ul`,{className:`mt-1 space-y-1`,"data-testid":`packet-requirements-demonstrated`,children:f.map(e=>(0,q.jsxs)(`li`,{className:`text-xs`,children:[(0,q.jsx)(`span`,{className:`font-mono text-caption text-accent-success`,children:e.id}),e.tests[0]?(0,q.jsxs)(`span`,{className:`ml-1.5 font-mono text-caption text-muted-foreground`,children:[e.tests[0].file,e.tests[0].line===null?``:`:${e.tests[0].line}`]}):null,m(e.ticketId)]},`${e.ticketId}:${e.id}`))})]}):null,e.untaggedList.length>0?(0,q.jsx)(`p`,{className:`mt-3 text-caption text-muted-foreground`,"data-testid":`packet-requirements-untagged`,children:n(`requirements.untagged`,{count:e.untaggedList.length,tags:e.untaggedList.slice(0,3).map(e=>e.tag).join(`, `)})}):null,p>0||r?(0,q.jsx)(`button`,{type:`button`,className:`mt-2 text-caption text-accent-primary hover:underline`,onClick:()=>i(e=>!e),children:r?n(`requirements.showLess`):n(`requirements.showAll`,{count:p})}):null]})}var ze=6;function Be(e){return e===null?null:he(e)}function Ve({entries:e,multiTicket:t}){let{t:n}=c(`packet`);return(0,q.jsxs)(`section`,{className:`rounded-lg border border-border/60 bg-surface/40 p-4`,"data-testid":`packet-baseline`,"aria-labelledby":`packet-baseline-title`,children:[(0,q.jsxs)(`h2`,{id:`packet-baseline-title`,className:`mb-2 flex items-center gap-1.5 text-sm font-medium text-foreground`,children:[(0,q.jsx)(U,{className:`size-4 text-accent-info`,"aria-hidden":!0}),n(`baseline.title`)]}),(0,q.jsx)(`ul`,{className:`space-y-3`,children:e.map(e=>{let r=e.status===`failed`||e.status===`violated`,i=e.capabilities.reduce((e,t)=>e+t.requirements,0),a=e.uncovered.slice(0,ze),o=e.cost?Be(e.cost.costUsd):null;return(0,q.jsxs)(`li`,{className:`space-y-1`,"data-testid":`packet-baseline-${e.status}`,children:[(0,q.jsxs)(`p`,{className:`text-sm ${r?`text-accent-warning`:`text-foreground`}`,children:[n(`baseline.status.${e.status}`,{requirements:i,tests:e.tests.length}),t?(0,q.jsxs)(`span`,{className:`ml-1 text-caption text-muted-foreground`,children:[`#`,e.ticketId]}):null]}),a.length>0?(0,q.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[n(`baseline.module`),` `,(0,q.jsx)(`span`,{className:`font-mono text-caption text-foreground`,children:a.join(`, `)}),e.uncovered.length>a.length?` ${n(`baseline.more`,{count:e.uncovered.length-a.length})}`:``]}):null,e.capabilities.length>0?(0,q.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[n(`baseline.spec`),` `,e.capabilities.map(e=>(0,q.jsx)(`span`,{className:`mr-2 font-mono text-caption text-foreground`,children:n(`baseline.capability`,{capability:e.capability,requirements:e.requirements,demonstrated:e.demonstrated})},e.capability))]}):null,r&&e.reason?(0,q.jsx)(`p`,{className:`text-xs text-accent-warning`,"data-testid":`packet-baseline-reason`,children:e.reason}):null,(0,q.jsx)(`p`,{className:`text-caption text-muted-foreground`,"data-testid":`packet-baseline-cost`,children:o?n(`baseline.cost`,{amount:o,turns:e.cost?.invocations??0}):n(`baseline.costUnknown`)})]},`${e.ticketId}:${e.change??``}`)})}),(0,q.jsx)(`p`,{className:`mt-2 text-caption text-muted-foreground`,children:n(`baseline.caveat`)})]})}function He({rules:e}){let{t}=c(`packet`);return(0,q.jsxs)(`section`,{className:`rounded-lg border border-accent-highlight/30 bg-accent-highlight/5 p-4`,"data-testid":`packet-human-eyes`,"aria-labelledby":`packet-human-eyes-title`,children:[(0,q.jsxs)(`h2`,{id:`packet-human-eyes-title`,className:`mb-1 flex items-center gap-1.5 text-sm font-medium text-foreground`,children:[(0,q.jsx)(R,{className:`size-4 text-accent-highlight`,"aria-hidden":!0}),t(`humanEyes.title`,{count:e.length})]}),(0,q.jsx)(`p`,{className:`mb-2 text-caption text-muted-foreground`,children:t(`humanEyes.caveat`)}),(0,q.jsx)(`ul`,{className:`space-y-1`,children:e.map((e,t)=>(0,q.jsxs)(`li`,{className:`flex items-start gap-2 text-xs text-foreground`,children:[(0,q.jsx)(`span`,{"aria-hidden":!0,className:`mt-[5px] h-1 w-1 shrink-0 rounded-full bg-accent-highlight`}),(0,q.jsxs)(`span`,{className:`min-w-0 break-words`,children:[e.text,e.source?(0,q.jsx)(`span`,{className:`ml-1.5 font-mono text-caption text-muted-foreground`,children:e.source}):null]})]},`${t}:${e.text}`))})]})}function Ue(e,t){return{name:e,path:t,dirs:new Map,files:[]}}function We(e){let t=Ue(``,``);for(let n of e){let e=n.path.split(`/`),r=t;for(let t=0;t<e.length-1;t++){let n=e.slice(0,t+1).join(`/`),i=r.dirs.get(e[t]);i||(i=Ue(e[t],n),r.dirs.set(e[t],i)),r=i}r.files.push(n)}return t}function Ge(e){let t=e.files.length;for(let n of e.dirs.values())t+=Ge(n);return t}function Ke(e,t){let n=[],r=(e,i)=>{let a=[...e.dirs.values()].sort((e,t)=>e.name.localeCompare(t.name));for(let e of a){let a=e,o=a.name;for(;a.files.length===0&&a.dirs.size===1;)a=[...a.dirs.values()][0],o=`${o}/${a.name}`;n.push({kind:`dir`,path:a.path,name:o,depth:i,fileCount:Ge(a)}),t.has(a.path)||r(a,i+1)}for(let t of[...e.files].sort((e,t)=>e.path.localeCompare(t.path)))n.push({kind:`file`,path:t.path,name:t.path.slice(t.path.lastIndexOf(`/`)+1),depth:i,file:t})};return r(We(e),0),n}function qe(e){return Ke(e,new Set).filter(e=>e.kind===`file`).map(e=>e.file)}function Je(e){let t=e.split(`/`);return t.slice(0,-1).map((e,n)=>t.slice(0,n+1).join(`/`))}function Ye(e,t,n){return n===0?-1:e<0?t>0?0:n-1:Math.min(n-1,Math.max(0,e+t))}function Xe(e){let t=[],n=[];for(let r of e.hunks)n.push(t.length),t.push(...r.lines);return{lines:t,hunkStarts:n}}function Ze(e,t,n){let r={byLine:new Map,fileLevel:[]};for(let i of n){if(i.location?.path!==e)continue;let n=i.location.line,a=i.location.endLine??n,o=-1;if(t&&n!==null&&a!==null)for(let e=0;e<t.lines.length;e++){let r=t.lines[e].newNo;r!==null&&r>=n&&r<=a&&(o=e)}o<0?r.fileLevel.push(i):r.byLine.set(o,[...r.byLine.get(o)??[],i])}return r}function Qe(e,t){let n=new Set(e.map(e=>e.path)),r=new Map,i=[];for(let e of t){let t=e.location;t&&n.has(t.path)?r.set(t.path,[...r.get(t.path)??[],e]):i.push(e)}return{forFile:r,unanchored:i}}function $e(e,t){let n=new Map(qe(e).map((e,t)=>[e.path,t]));return t.filter(e=>e.location&&n.has(e.location.path)).sort((e,t)=>n.get(e.location.path)-n.get(t.location.path)||(e.location.line??0)-(t.location.line??0))}function et(e,t){let n=[],r=0;return e.hunks.forEach((e,i)=>{n.push({kind:`hunk`,key:`h${i}`,header:e.header});for(let i of e.lines){n.push({kind:`line`,key:`l${r}`,index:r,line:i});let e=t.byLine.get(r);e&&n.push({kind:`annotations`,key:`a${r}`,annotations:e}),r++}}),n}function tt(e,t){let n=[],r=0;return e.hunks.forEach((e,i)=>{n.push({kind:`hunk`,key:`h${i}`,header:e.header});let a=e.lines,o=0,s=e=>{let r=e.flatMap(e=>t.byLine.get(e)??[]);r.length&&n.push({kind:`annotations`,key:`a${e[0]}`,annotations:r})};for(;o<a.length;){let e=a[o];if(e.type===`context`){n.push({kind:`pair`,key:`p${r}`,left:{index:r,line:e},right:{index:r,line:e}}),s([r]),r++,o++;continue}let t=[],i=[];for(;o<a.length&&a[o].type===`delete`;)t.push({index:r,line:a[o]}),r++,o++;for(;o<a.length&&a[o].type===`add`;)i.push({index:r,line:a[o]}),r++,o++;let c=Math.max(t.length,i.length);for(let e=0;e<c;e++){let r=t[e]??null,a=i[e]??null;n.push({kind:`pair`,key:`p${(r??a).index}`,left:r,right:a}),a&&s([a.index])}}}),n}function nt(e){return e.from<=e.to?e:{...e,from:e.to,to:e.from}}function rt(e,t,n,r){return!r||!e||e.side!==t?{side:t,from:n,to:n}:nt({side:t,from:e.from,to:n})}function it(e,t,n){if(!e||n===null||e.side!==t)return!1;let{from:r,to:i}=nt(e);return n>=r&&n<=i}function at(e,t){let{from:n,to:r}=nt(t),i=e=>t.side===`new`?e.newNo:e.oldNo;return e.lines.filter(e=>{let a=i(e);return a!==null&&a>=n&&a<=r&&(t.side===`new`?e.type!==`delete`:e.type!==`add`)}).map(e=>e.text).join(`
5
+ `)}function ot(e){let t=Math.min(e.from,e.to),n=Math.max(e.from,e.to);return t===n?String(t):`${t}-${n}`}var st=8e3,ct=2500,lt=3500,ut=200;function dt(e){let t=e.selection?ot(e.selection):null,n=e.path?t?`${e.path}:${t}`:e.path:null,r=e.note.trim().slice(0,lt),i=[n?`Requested in review of this delivery: \`${n}\`${e.selection?` (lines ${t}, ${e.selection.side===`old`?`before the change`:`after the change`})`:``}.`:`Requested in review of this delivery.`],a=e.snippet.length>ct?`${e.snippet.slice(0,ct)}\n…`:e.snippet;if(a){let e="```";for(;a.includes(e);)e+="`";i.push(``,`${e}\n${a}\n${e}`)}return i.push(``,r),{kind:`review-feedback`,title:(n?`Review: ${n}`:`Review: ${r.split(`
6
+ `)[0].slice(0,80)}`).slice(0,ut),body:i.join(`
7
+ `).slice(0,st)}}var ft=(e,t)=>`specrails-desktop:review-viewed:${e}:${t}`;function pt(e,t){try{let n=localStorage.getItem(ft(e,t));if(!n)return{};let r=JSON.parse(n);return!r||typeof r!=`object`||Array.isArray(r)?{}:Object.fromEntries(Object.entries(r).filter(e=>typeof e[1]==`string`))}catch{return{}}}function mt(e,t,n){try{localStorage.setItem(ft(e,t),JSON.stringify(n))}catch{}}function ht(e,t){return e[t.path]===t.hash}function gt(e,t){return t.path in e&&e[t.path]!==t.hash}function _t(e,t){return t.reduce((t,n)=>t+ +!!ht(e,n),0)}function vt(e,t,n,r){let i={...n};return ht(n,r)?delete i[r.path]:i[r.path]=r.hash,mt(e,t,i),i}var yt=`specrails-desktop:review-diff-mode`;function bt(){try{return localStorage.getItem(yt)===`split`?`split`:`unified`}catch{return`unified`}}function xt(e){try{localStorage.setItem(yt,e)}catch{}}var St={"reviewer-finding":w,"review-risk":u,"review-untested":ke,"follow-up-comment":je},Ct={high:`border-destructive/40 bg-destructive/5`,medium:`border-accent-warning/40 bg-accent-warning/5`,low:`border-border bg-surface/60`};function wt(e){return e.line===null?e.path:`${e.path}:${e.endLine?`${e.line}-${e.endLine}`:e.line}`}function Tt({annotation:e,active:t,showLocation:n,indented:r,onAsk:i,askDisabled:a}){let{t:o}=c(`packet`),s=St[e.source],l=o(`changes.annotations.source.${e.source}`);return(0,q.jsxs)(`div`,{role:`group`,tabIndex:0,"aria-label":`${l}${e.location?` — ${wt(e.location)}`:``}`,"data-annotation-id":e.id,"data-active":t?`true`:void 0,className:D(`my-1 mr-3 flex max-w-3xl flex-col gap-1 rounded-card border px-3 py-2 text-body outline-none`,`focus-visible:ring-2 focus-visible:ring-ring data-[active=true]:ring-2 data-[active=true]:ring-ring`,r&&`ml-24`,e.severity?Ct[e.severity]:`border-border bg-surface/60`),children:[(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 text-caption text-muted-foreground`,children:[(0,q.jsx)(s,{className:`size-3.5 shrink-0`,"aria-hidden":!0}),(0,q.jsx)(`span`,{className:`font-medium text-foreground`,children:l}),e.severity?(0,q.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,q.jsx)(T,{className:`size-3`,"aria-hidden":!0}),o(`changes.annotations.severity.${e.severity}`)]}):null,e.author?(0,q.jsx)(`span`,{children:e.author}):null,n&&e.location?(0,q.jsx)(`code`,{className:`font-mono`,children:wt(e.location)}):null]}),e.text?(0,q.jsx)(`p`,{className:`whitespace-pre-wrap break-words text-foreground`,children:e.text}):null,i?(0,q.jsx)(`button`,{type:`button`,onClick:()=>i(e),disabled:a,className:`w-fit rounded-control border border-border px-2 py-0.5 text-caption text-foreground hover:bg-surface disabled:opacity-50`,children:o(`changes.annotations.ask`)}):null]})}function Et({path:e,selection:t,tickets:n,initialNote:r,busy:i,onSubmit:a,onCancel:o}){let{t:s}=c([`packet`,`common`]),[l,u]=(0,K.useState)(r??``),[d,f]=(0,K.useState)(n[0]?.ticketId??0),p=(0,K.useRef)(null),m=(0,K.useId)();(0,K.useEffect)(()=>{p.current?.focus()},[]);let h=l.trim().length>0&&d>0&&!i;return(0,q.jsxs)(`form`,{className:`flex flex-col gap-2 rounded-card border border-border/70 bg-background-deep/40 p-3`,"data-testid":`changes-ask-form`,onSubmit:e=>{e.preventDefault(),h&&a(d,l)},children:[(0,q.jsxs)(`label`,{htmlFor:m,className:`text-label text-foreground`,children:[s(`packet:changes.ask.title`),` `,e?(0,q.jsxs)(`code`,{className:`font-mono text-caption text-muted-foreground`,children:[e,t?`:${ot(t)}`:``]}):null]}),(0,q.jsx)(`textarea`,{id:m,ref:p,value:l,onChange:e=>u(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.metaKey||e.ctrlKey)&&h&&(e.preventDefault(),a(d,l))},rows:3,placeholder:s(`packet:changes.ask.placeholder`),className:`resize-y rounded-control border border-border bg-surface px-2 py-1.5 text-body text-foreground placeholder:text-muted-foreground`}),n.length>1?(0,q.jsxs)(`div`,{className:`flex items-center gap-2 text-caption text-muted-foreground`,children:[(0,q.jsx)(`span`,{id:`${m}-ticket`,children:s(`packet:changes.ask.ticket`)}),(0,q.jsxs)(me,{value:String(d),onValueChange:e=>f(Number(e)),children:[(0,q.jsx)(de,{"aria-labelledby":`${m}-ticket`,className:`h-7 w-auto min-w-[10rem] text-caption`,children:(0,q.jsx)(ue,{})}),(0,q.jsx)(fe,{children:n.map(e=>(0,q.jsx)(pe,{value:String(e.ticketId),children:e.label},e.ticketId))})]})]}):null,(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,q.jsxs)(A,{type:`submit`,disabled:!h,className:`gap-1.5`,"data-testid":`changes-ask-submit`,children:[i?(0,q.jsx)(C,{className:`size-4 animate-spin`,"aria-hidden":!0}):(0,q.jsx)(be,{className:`size-4`,"aria-hidden":!0}),s(`packet:changes.ask.submit`)]}),(0,q.jsx)(`button`,{type:`button`,onClick:o,className:`rounded-control border border-border px-3 py-1.5 text-body text-foreground hover:bg-surface`,children:s(`common:actions.cancel`)}),(0,q.jsx)(`span`,{className:`text-caption text-muted-foreground`,children:s(`packet:changes.ask.hint`)})]})]})}function Dt(e){let t=e.fallbackHeight??600;return z({count:e.count,getScrollElement:()=>e.parentRef.current,estimateSize:e.estimateSize,overscan:e.overscan??12,initialRect:{width:600,height:t},observeElementRect:(e,n)=>{let r=e.scrollElement;if(!r)return()=>{};let i=()=>{let e=r.getBoundingClientRect();n({width:e.width||r.clientWidth||600,height:e.height||r.clientHeight||t})};if(i(),typeof ResizeObserver>`u`)return()=>{};let a=new ResizeObserver(i);return a.observe(r),()=>a.disconnect()},...e.measure?{measureElement:t=>{let n=t.getBoundingClientRect().height;return n>0?n:e.estimateSize(Number(t.dataset.index??0))}}:{}})}var Ot=28,kt={added:{letter:`A`,tone:`text-accent-success`},modified:{letter:`M`,tone:`text-muted-foreground`},deleted:{letter:`D`,tone:`text-destructive`},renamed:{letter:`R`,tone:`text-muted-foreground`},copied:{letter:`C`,tone:`text-muted-foreground`},typechange:{letter:`T`,tone:`text-muted-foreground`}};function At({files:e,collapsed:t,onToggleDir:n,selectedPath:r,onSelectFile:i,viewed:a,onToggleViewed:o}){let{t:s}=c(`packet`),l=(0,K.useRef)(null),u=(0,K.useMemo)(()=>Ke(e,t),[e,t]),d=Dt({count:u.length,parentRef:l,estimateSize:()=>Ot,overscan:12,fallbackHeight:480}),f=e=>{let t=Math.min(u.length-1,Math.max(0,e));d.scrollToIndex(t),requestAnimationFrame(()=>l.current?.querySelector(`[data-row-index="${t}"]`)?.focus())},p=u.findIndex(e=>e.kind===`file`&&e.path===r),m=(e,r,a)=>{switch(e.key){case`ArrowDown`:e.preventDefault(),f(a+1);break;case`ArrowUp`:e.preventDefault(),f(a-1);break;case`Home`:e.preventDefault(),f(0);break;case`End`:e.preventDefault(),f(u.length-1);break;case`ArrowRight`:r.kind===`dir`&&t.has(r.path)&&(e.preventDefault(),n(r.path));break;case`ArrowLeft`:r.kind===`dir`&&!t.has(r.path)&&(e.preventDefault(),n(r.path));break;case`Enter`:case` `:e.preventDefault(),r.kind===`dir`?n(r.path):i(r.path);break;default:}};return(0,q.jsx)(`div`,{ref:l,role:`tree`,"aria-label":s(`changes.tree.label`),"aria-multiselectable":!1,"data-testid":`changes-tree`,className:`h-[70vh] min-h-64 overflow-auto rounded-card border border-border/60 bg-surface/40`,children:(0,q.jsx)(`div`,{style:{height:d.getTotalSize(),position:`relative`},children:d.getVirtualItems().map(e=>{let c=u[e.index];if(!c)return null;let l=c.kind===`dir`,d=l&&!t.has(c.path),f=c.file,h=!l&&c.path===r,ee=!!f&&ht(a,f),g=!!f&&gt(a,f),_=f?kt[f.status]:null;return(0,q.jsx)(`div`,{role:`treeitem`,"aria-level":c.depth+1,"aria-selected":l?void 0:h,"aria-expanded":l?d:void 0,tabIndex:h||p<0&&e.index===0?0:-1,"data-row-index":e.index,"data-path":c.path,onKeyDown:t=>m(t,c,e.index),onClick:()=>l?n(c.path):i(c.path),style:{position:`absolute`,top:0,left:0,width:`100%`,height:Ot,transform:`translateY(${e.start}px)`,paddingLeft:8+c.depth*14},className:D(`flex cursor-pointer items-center gap-1.5 pr-2 text-body outline-none hover:bg-muted/30 focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring`,h&&`bg-primary/15`),children:l?(0,q.jsxs)(q.Fragment,{children:[d?(0,q.jsx)(b,{className:`size-3.5 shrink-0 text-muted-foreground`,"aria-hidden":!0}):(0,q.jsx)(x,{className:`size-3.5 shrink-0 text-muted-foreground`,"aria-hidden":!0}),(0,q.jsx)(P,{className:`size-3.5 shrink-0 text-muted-foreground`,"aria-hidden":!0}),(0,q.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-muted-foreground`,children:c.name})]}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`span`,{"aria-hidden":!0,className:D(`w-3.5 shrink-0 text-center text-caption font-medium`,_?.tone),children:_?.letter}),(0,q.jsxs)(`span`,{className:D(`min-w-0 flex-1 truncate`,ee?`text-muted-foreground`:`text-foreground`),title:f?.oldPath?s(`changes.renamedFrom`,{path:f.oldPath}):c.path,children:[(0,q.jsxs)(`span`,{className:`sr-only`,children:[s(`changes.status.${f.status}`),`: `]}),c.name]}),f.binary?(0,q.jsx)(`span`,{className:`text-caption text-muted-foreground`,children:s(`changes.binaryShort`)}):(0,q.jsxs)(`span`,{className:`shrink-0 text-caption tabular-nums`,children:[(0,q.jsxs)(`span`,{className:`text-accent-success`,children:[`+`,f.additions??0]}),` `,(0,q.jsxs)(`span`,{className:`text-destructive`,children:[`−`,f.deletions??0]})]}),(0,q.jsx)(`button`,{type:`button`,tabIndex:-1,"aria-pressed":ee,"aria-label":s(g?`changes.viewed.changedSince`:ee?`changes.viewed.unmark`:`changes.viewed.mark`),title:g?s(`changes.viewed.changedSince`):void 0,onClick:e=>{e.stopPropagation(),o(f)},className:D(`flex size-5 shrink-0 items-center justify-center rounded-control border`,ee?`border-accent-success/50 bg-accent-success/15 text-accent-success`:g?`border-accent-warning/50 text-accent-warning`:`border-border text-transparent hover:text-muted-foreground`),children:g?(0,q.jsx)(`span`,{"aria-hidden":!0,className:`text-caption`,children:`!`}):(0,q.jsx)(re,{className:`size-3`,"aria-hidden":!0})})]})},c.path+c.kind)})})})}var jt=20,Mt=24,Nt=84,Pt={add:`bg-accent-success/10`,delete:`bg-destructive/10`,context:``},Ft={add:`+`,delete:`−`,context:` `};function It(e,t){return e.kind===`line`?t===`old`?e.line.oldNo:e.line.newNo:e.kind===`pair`?(t===`old`?e.left?.line.oldNo:e.right?.line.newNo)??null:null}var Q=(e,t)=>`${e}:${t}`;function Lt({no:e,side:t,selected:n,onSelect:r,label:i,id:a,tabStop:o}){return e===null?(0,q.jsx)(`span`,{"aria-hidden":!0,className:`w-12 shrink-0`}):(0,q.jsx)(`button`,{type:`button`,"aria-label":i,"aria-pressed":n,tabIndex:o?0:-1,"data-gutter-key":a,"data-gutter-side":t,onClick:n=>r(t,e,n.shiftKey),className:D(`w-12 shrink-0 select-none px-1 text-right text-caption tabular-nums text-muted-foreground outline-none`,`hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring`,n&&`bg-primary/20 text-foreground`),children:e})}function Rt({line:e,selected:t}){let{t:n}=c(`packet`);return(0,q.jsxs)(`span`,{className:D(`flex-1 whitespace-pre px-2 font-mono text-caption leading-5`,t&&`bg-primary/10`),children:[(0,q.jsx)(`span`,{"aria-hidden":!0,className:`mr-2 select-none text-muted-foreground`,children:Ft[e.type]}),e.type!==`context`&&(0,q.jsxs)(`span`,{className:`sr-only`,children:[n(e.type===`add`?`changes.line.added`:`changes.line.removed`),` `]}),e.text,e.noNewline?(0,q.jsx)(`span`,{"aria-hidden":!0,className:`ml-2 select-none text-muted-foreground`,children:`⏎̸`}):null]})}function zt({diff:e,mode:t,annotations:n,selection:r,onSelect:i,focusAnnotationId:a,onAsk:o,askDisabled:s}){let{t:l}=c(`packet`),u=(0,K.useRef)(null),d=(0,K.useMemo)(()=>Xe(e),[e]),f=(0,K.useMemo)(()=>Ze(e.path,d,n),[e.path,d,n]),p=(0,K.useMemo)(()=>t===`split`?tt(e,f):et(e,f),[e,f,t]),m=Dt({count:p.length,parentRef:u,estimateSize:e=>p[e]?.kind===`annotations`?Nt:p[e]?.kind===`hunk`?Mt:jt,overscan:20,measure:!0}),[h,ee]=(0,K.useState)(null),g=m.getVirtualItems(),_=new Set,v=null;for(let e of g){let t=p[e.index];if(t)for(let e of[`new`,`old`]){if(It(t,e)===null)continue;let n=Q(t.key,e);_.add(n),v||=n}}let y=h&&_.has(h)?h:v,te=(0,K.useRef)(null),ne=(0,K.useCallback)(e=>{let t=u.current?.querySelector(`[data-gutter-key="${CSS.escape(e)}"]`);return t?(t.focus(),!0):!1},[]),b=e=>{if(e.key!==`ArrowDown`&&e.key!==`ArrowUp`)return;let t=e.target.closest(`[data-gutter-key]`);if(!t)return;let n=t.dataset.gutterSide===`old`?`old`:`new`,r=p.findIndex(e=>Q(e.key,n)===t.dataset.gutterKey);if(r<0)return;let i=e.key===`ArrowDown`?1:-1;for(let t=r+i;t>=0&&t<p.length;t+=i){if(It(p[t],n)===null)continue;e.preventDefault();let r=Q(p[t].key,n);ee(r),ne(r)||(te.current=r,m.scrollToIndex(t,{align:`auto`}));return}};(0,K.useEffect)(()=>{let e=te.current;e&&ne(e)&&(te.current=null)}),(0,K.useEffect)(()=>{if(!a)return;let e=p.findIndex(e=>e.kind===`annotations`&&e.annotations.some(e=>e.id===a));if(e<0)return;m.scrollToIndex(e,{align:`center`});let t=requestAnimationFrame(()=>{(u.current?.querySelector(`[data-annotation-id="${CSS.escape(a)}"]`))?.focus({preventScroll:!0})});return()=>cancelAnimationFrame(t)},[a,p]);let re=e=>{if(e.kind===`hunk`)return(0,q.jsx)(`div`,{className:`flex h-6 items-center bg-muted/30 px-3 font-mono text-caption text-muted-foreground`,children:e.header});if(e.kind===`annotations`)return(0,q.jsx)(`div`,{children:e.annotations.map(e=>(0,q.jsx)(Tt,{annotation:e,indented:!0,active:e.id===a,onAsk:o,askDisabled:s},e.id))});if(e.kind===`line`){let{line:t}=e,n=it(r,`old`,t.oldNo),a=it(r,`new`,t.newNo);return(0,q.jsxs)(`div`,{className:D(`flex h-5 items-stretch`,Pt[t.type]),children:[(0,q.jsx)(Lt,{no:t.oldNo,side:`old`,selected:n,onSelect:i,label:l(`changes.line.selectOld`,{n:t.oldNo??0}),id:Q(e.key,`old`),tabStop:y===Q(e.key,`old`)}),(0,q.jsx)(Lt,{no:t.newNo,side:`new`,selected:a,onSelect:i,label:l(`changes.line.select`,{n:t.newNo??0}),id:Q(e.key,`new`),tabStop:y===Q(e.key,`new`)}),(0,q.jsx)(Rt,{line:t,selected:n||a})]})}let t=(t,n)=>{if(!n)return(0,q.jsx)(`div`,{className:`flex h-5 min-w-0 items-stretch bg-muted/10`,"aria-hidden":!0});let a=t===`old`?n.line.oldNo:n.line.newNo,o=it(r,t,a);return(0,q.jsxs)(`div`,{className:D(`flex h-5 min-w-0 items-stretch overflow-hidden`,n.line.type===`context`?``:t===`old`?`bg-destructive/10`:`bg-accent-success/10`),children:[(0,q.jsx)(Lt,{no:a,side:t,selected:o,onSelect:i,label:l(t===`old`?`changes.line.selectOld`:`changes.line.select`,{n:a??0}),id:Q(e.key,t),tabStop:y===Q(e.key,t)}),(0,q.jsx)(Rt,{line:n.line,selected:o})]})};return(0,q.jsxs)(`div`,{className:`grid h-5 grid-cols-2 divide-x divide-border/40`,children:[t(`old`,e.left),t(`new`,e.right)]})};return e.hunks.length===0?null:(0,q.jsx)(`div`,{ref:u,role:`region`,"aria-label":l(`changes.diff.region`,{path:e.path}),"data-testid":`changes-diff`,onKeyDown:b,className:`relative h-[70vh] min-h-64 overflow-auto rounded-card border border-border/60 bg-background-deep/40`,children:(0,q.jsx)(`div`,{style:{height:m.getTotalSize(),position:`relative`,minWidth:`100%`,width:t===`split`?`100%`:`max-content`},children:m.getVirtualItems().map(e=>{let n=p[e.index];return n?(0,q.jsx)(`div`,{"data-index":e.index,ref:m.measureElement,style:{position:`absolute`,top:0,left:0,minWidth:`100%`,width:t===`split`?`100%`:`max-content`,transform:`translateY(${e.start}px)`},children:re(n)},n.key):null})})})}function Bt(e){let t=e;if(!t)return!1;let n=t.tagName;return n===`INPUT`||n===`TEXTAREA`||n===`SELECT`||t.isContentEditable===!0}var Vt={added:`text-accent-success`,modified:`text-muted-foreground`,deleted:`text-destructive`,renamed:`text-muted-foreground`,copied:`text-muted-foreground`,typechange:`text-muted-foreground`},Ht=e=>e===`openspec`||e.startsWith(`openspec/`);function Ut(e){return Ke(e,new Set).filter(e=>e.kind===`dir`&&e.depth===0&&(e.name===`openspec`||e.name.startsWith(`openspec/`))).map(e=>e.path)}function Wt(e,t){return(e.find(e=>(t.get(e.path)?.length??0)>0)??e.find(e=>!Ht(e.path))??e[0])?.path??null}function Gt({prDeliveryId:e,repositoryId:t,tickets:n,active:r}){let{t:i}=c([`packet`,`common`,`settings`]),{activeProjectId:a}=le(),{openTicketDetail:l}=ee(),u=we(),[f,p]=(0,K.useState)(null),m=JSON.stringify([a,e,t,f]),[h,_]=(0,K.useState)(null),[v,y]=(0,K.useState)({}),[te,ne]=(0,K.useState)(new Set),[b,re]=(0,K.useState)(null),[x,ie]=(0,K.useState)(new Set),[S,oe]=(0,K.useState)(bt),[C,se]=(0,K.useState)({}),[w,T]=(0,K.useState)(null),[O,k]=(0,K.useState)(null),[A,he]=(0,K.useState)(!1),[_e,ve]=(0,K.useState)(null),M=(0,K.useRef)(0),ye=a??``;(0,K.useEffect)(()=>{se(pt(ye,e))},[ye,e]);let N=(0,K.useCallback)(e=>{let n=new URLSearchParams(e);t&&n.set(`repositoryId`,t),f&&n.set(`source`,f);let r=n.toString();return r?`?${r}`:``},[t,f]),be=(0,K.useCallback)(async()=>{if(!a)return;let t=++M.current;_(e=>({key:m,value:e?.key===m&&e.value.status===`ready`?e.value:{status:`loading`}}));try{let n=await fetch(`${s()}/rails/pr-deliveries/${encodeURIComponent(e)}/changes${N({})}`);if(M.current!==t)return;if(!n.ok){_({key:m,value:{status:`error`}});return}let r=await n.json();if(M.current!==t)return;y({}),ne(new Set),_({key:m,value:{status:`ready`,data:r.changes}})}catch{M.current===t&&_({key:m,value:{status:`error`}})}},[a,e,N,m]),xe=(0,K.useRef)(!1);r&&(xe.current=!0),(0,K.useEffect)(()=>{if(xe.current)return be(),()=>{M.current++}},[be,r]);let Se=h?.key===m?h.value:null,P=Se?.status===`ready`?Se.data:null,I=P?.available?P:null,L=(0,K.useMemo)(()=>I?.files??[],[I]),R=(0,K.useMemo)(()=>qe(L),[L]),z=P?.annotations??[],{forFile:B,unanchored:Ee}=(0,K.useMemo)(()=>Qe(L,z),[L,z]),De=(0,K.useMemo)(()=>$e(L,z),[L,z]);(0,K.useEffect)(()=>{if(!I||b&&L.some(e=>e.path===b))return;let e=Wt(R,B);re(e),T(null);let t=R.some(e=>!Ht(e.path)),n=e?Je(e):[];ie(new Set(t?Ut(L).filter(e=>!n.includes(e)):[]))},[I,L,R,b,B]);let V=L.find(e=>e.path===b)??null,ke=!!V&&te.has(V.path),H=V?`${m}|${V.path}|${ke?`full`:`cap`}|${V.hash}`:null,U=H?v[H]:void 0;(0,K.useEffect)(()=>{if(!V||!H||!r||V.binary||v[H])return;let t=H,n=M.current;y(e=>({...e,[t]:{status:`loading`}})),(async()=>{try{let r=await fetch(`${s()}/rails/pr-deliveries/${encodeURIComponent(e)}/changes/file${N({path:V.path,...ke?{full:`1`}:{}})}`);if(M.current!==n)return;if(!r.ok){y(e=>({...e,[t]:{status:`error`}}));return}let i=await r.json();y(e=>({...e,[t]:{status:`ready`,data:i.diff}}))}catch{M.current===n&&y(e=>({...e,[t]:{status:`error`}}))}})()},[V,H,r,v,ke,e,N]);let Ae=U?.status===`ready`?U.data:V?.binary?{path:V.path,oldPath:V.oldPath,status:V.status,binary:!0,hunks:[],truncated:!1,totalLines:0}:null,je=(0,K.useMemo)(()=>Ae?Xe(Ae):null,[Ae]),Me=(0,K.useMemo)(()=>V?B.get(V.path)??[]:[],[V,B]),Ne=(0,K.useMemo)(()=>V?Ze(V.path,je,Me).fileLevel:[],[V,je,Me]),W=(0,K.useCallback)(e=>{re(e),T(null),k(null),ie(t=>{let n=Je(e).filter(e=>t.has(e));if(n.length===0)return t;let r=new Set(t);for(let e of n)r.delete(e);return r})},[]),J=(0,K.useCallback)(e=>{ie(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),Pe=(0,K.useCallback)(t=>{se(n=>vt(ye,e,n,t))},[ye,e]),Y=e=>{oe(e),xt(e)};(0,K.useEffect)(()=>{if(!r)return;let e=e=>{if(e.defaultPrevented||e.metaKey||e.ctrlKey||e.altKey||Bt(e.target))return;let t=e.key;if(t===`j`||t===`k`){let n=Ye(R.findIndex(e=>e.path===b),t===`j`?1:-1,R.length);n>=0&&(e.preventDefault(),W(R[n].path),ve(null))}else if(t===`n`||t===`p`){let n=Ye(De.findIndex(e=>e.id===_e),t===`n`?1:-1,De.length);if(n>=0){e.preventDefault();let t=De[n];t.location&&t.location.path!==b&&W(t.location.path),ve(t.id)}}else t===`v`&&V&&(e.preventDefault(),Pe(V))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[r,R,b,De,_e,V,W,Pe]);let Fe=e=>{let t=e.location;t&&t.path!==b&&L.some(e=>e.path===t.path)&&W(t.path),T(t&&t.line!==null?{side:`new`,from:t.line,to:t.endLine??t.line}:null),k({note:e.text,annotationId:e.id})},Ie=async(e,t)=>{let n=O?.annotationId?z.find(e=>e.id===O.annotationId):null,r=n?n.location?.path??null:V?.path??null,a=r?L.find(e=>e.path===r):null,c=a&&a.path===V?.path?je:null,u=dt({path:r,selection:w,note:t,snippet:w&&c?at(c,w):``});he(!0);try{if(!(await fetch(`${s()}/tickets/${e}/addenda`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(u)})).ok){g(i(`packet:changes.ask.failed`));return}o.success(i(`packet:changes.ask.created`,{id:e}),{action:{label:i(`packet:changes.ask.open`),onClick:()=>l(e)}}),k(null),T(null)}catch{g(i(`packet:changes.ask.failed`))}finally{he(!1)}},X=async e=>{if(!I||!V||V.status===`deleted`)return;let t=i(`packet:changes.editor.names.${u}`);await F(u,Te(I.root,V.path),e).catch(()=>!1)||g(i(`packet:changes.editor.failed`,{editor:t}),{action:{label:i(`settings:openSettings`),onClick:()=>Ce(`code`,`editor`)}})};if(!Se||Se.status===`loading`)return(0,q.jsxs)(`div`,{role:`status`,className:`flex flex-col items-start gap-2 p-6 text-body text-muted-foreground`,"data-testid":`changes-loading`,children:[(0,q.jsx)(ge,{running:!0,className:`w-24`}),i(`packet:changes.loading`)]});if(Se.status===`error`)return(0,q.jsxs)(`div`,{className:`flex flex-col items-start gap-2 p-6 text-body text-muted-foreground`,children:[(0,q.jsx)(`p`,{children:i(`packet:changes.error`)}),(0,q.jsx)(`button`,{type:`button`,onClick:()=>void be(),className:`rounded-control border border-border px-3 py-1 text-foreground hover:bg-surface`,children:i(`common:actions.retry`)})]});if(!I)return(0,q.jsxs)(`div`,{className:`flex flex-col gap-3 p-6`,"data-testid":`changes-unavailable`,children:[(0,q.jsx)(`p`,{className:`text-body text-muted-foreground`,children:i(`packet:changes.unavailable.${P&&!P.available?P.reason:`git_failed`}`,{defaultValue:i(`packet:changes.unavailable.git_failed`)})}),Ee.length>0?(0,q.jsx)(Kt,{annotations:Ee,onAsk:Fe}):null]});let Le=_t(C,L),Z=Ae,Re=I.rootKind===`repository`?i(`packet:changes.editor.rootRepository`):void 0,ze=w&&V?`:${ot(w)}`:null;return(0,q.jsxs)(`section`,{"aria-label":i(`packet:changes.tab`),className:`flex flex-col gap-3`,"data-testid":`changes-tab`,children:[(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-4 gap-y-2 text-body`,children:[(0,q.jsx)(`span`,{className:`text-strong text-foreground`,children:i(`packet:changes.summary`,{count:I.totals.files})}),(0,q.jsxs)(`span`,{className:`tabular-nums`,children:[(0,q.jsxs)(`span`,{className:`text-accent-success`,children:[`+`,I.totals.additions]}),` `,(0,q.jsxs)(`span`,{className:`text-destructive`,children:[`−`,I.totals.deletions]})]}),(0,q.jsx)(`span`,{className:`text-muted-foreground`,"data-testid":`changes-viewed-count`,children:i(`packet:changes.viewedCount`,{viewed:Le,total:L.length})}),(0,q.jsxs)(`span`,{className:`text-caption text-muted-foreground`,children:[(0,q.jsx)(`code`,{className:`font-mono`,children:I.head}),` ← `,(0,q.jsx)(`code`,{className:`font-mono`,children:I.base})]}),(0,q.jsx)(`span`,{className:`flex-1`}),I.sources.length>1?(0,q.jsxs)(`div`,{className:`flex items-center gap-2 text-caption`,children:[(0,q.jsx)(`span`,{id:`changes-source-label`,className:`text-muted-foreground`,children:i(`packet:changes.source`)}),(0,q.jsxs)(me,{value:I.source,onValueChange:e=>{p(e),re(null)},children:[(0,q.jsx)(de,{"aria-labelledby":`changes-source-label`,className:`h-7 w-auto min-w-[8rem] text-caption`,children:(0,q.jsx)(ue,{})}),(0,q.jsx)(fe,{children:I.sources.map(e=>(0,q.jsx)(pe,{value:e.id,children:e.ticketId===null?i(`packet:changes.sourceDelivery`):i(`packet:changes.sourceTicket`,{id:e.ticketId})},e.id))})]})]}):null,(0,q.jsx)(`div`,{role:`radiogroup`,"aria-label":i(`packet:changes.mode.label`),className:`inline-flex overflow-hidden rounded-control border border-border`,children:[`unified`,`split`].map(e=>(0,q.jsxs)(`button`,{type:`button`,role:`radio`,"aria-checked":S===e,onClick:()=>Y(e),className:D(`flex items-center gap-1 px-2 py-1 text-caption`,S===e?`bg-primary/15 text-foreground`:`text-muted-foreground hover:bg-surface`),children:[e===`unified`?(0,q.jsx)(G,{className:`size-3.5`,"aria-hidden":!0}):(0,q.jsx)(d,{className:`size-3.5`,"aria-hidden":!0}),i(`packet:changes.mode.${e}`)]},e))}),(0,q.jsx)(`button`,{type:`button`,onClick:()=>void be(),"aria-label":i(`packet:changes.refresh`),title:i(`packet:changes.refresh`),className:`rounded-control border border-border p-1.5 text-muted-foreground hover:bg-surface hover:text-foreground`,children:(0,q.jsx)(ce,{className:`size-3.5`,"aria-hidden":!0})})]}),I.truncated?(0,q.jsx)(`p`,{className:`text-caption text-accent-warning`,children:i(`packet:changes.truncatedList`,{count:L.length})}):null,Ee.length>0?(0,q.jsx)(Kt,{annotations:Ee,onAsk:Fe,askDisabled:A}):null,L.length===0?(0,q.jsx)(`p`,{className:`p-4 text-body text-muted-foreground`,children:i(`packet:changes.empty`)}):(0,q.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-[18rem_minmax(0,1fr)]`,children:[(0,q.jsx)(At,{files:L,collapsed:x,onToggleDir:J,selectedPath:b,onSelectFile:e=>{W(e),ve(null)},viewed:C,onToggleViewed:Pe}),(0,q.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-2`,children:[V?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,q.jsx)(`code`,{className:`min-w-0 flex-1 truncate font-mono text-body text-foreground`,title:V.path,children:V.path}),(0,q.jsx)(`span`,{className:D(`text-caption font-medium`,Vt[V.status]),children:i(`packet:changes.status.${V.status}`)}),V.oldPath?(0,q.jsx)(`span`,{className:`text-caption text-muted-foreground`,children:i(`packet:changes.renamedFrom`,{path:V.oldPath})}):null,(0,q.jsxs)(`button`,{type:`button`,onClick:()=>Pe(V),"aria-pressed":C[V.path]===V.hash,className:D(`inline-flex items-center gap-1 rounded-control border px-2 py-1 text-caption`,C[V.path]===V.hash?`border-accent-success/50 bg-accent-success/10 text-accent-success`:`border-border text-foreground hover:bg-surface`),"data-testid":`changes-mark-viewed`,children:[(0,q.jsx)(Oe,{className:`size-3.5`,"aria-hidden":!0}),C[V.path]===V.hash?i(`packet:changes.viewed.unmark`):V.path in C?i(`packet:changes.viewed.changedSince`):i(`packet:changes.viewed.mark`)]}),(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{X(w?.side===`new`?Math.min(w.from,w.to):null)},disabled:V.status===`deleted`,title:Re,className:`inline-flex items-center gap-1 rounded-control border border-border px-2 py-1 text-caption text-foreground hover:bg-surface disabled:opacity-50`,"data-testid":`changes-open-editor`,children:[(0,q.jsx)(ae,{className:`size-3.5`,"aria-hidden":!0}),i(`packet:changes.editor.open`,{editor:i(`packet:changes.editor.names.${u}`)})]})]}),w&&!O?(0,q.jsx)(`div`,{className:`sticky top-0 z-10 h-0`,"data-testid":`changes-selection-layer`,children:(0,q.jsxs)(`div`,{className:`absolute inset-x-0 top-1 flex flex-wrap items-center gap-2 rounded-card border border-primary/40 bg-popover px-3 py-1.5 text-body shadow-2`,"data-testid":`changes-selection-bar`,children:[(0,q.jsx)(`code`,{className:`font-mono text-caption text-foreground`,children:ze}),(0,q.jsx)(`button`,{type:`button`,onClick:()=>k({note:``,annotationId:null}),className:`rounded-control bg-primary px-2.5 py-1 text-caption font-medium text-primary-foreground hover:bg-primary/90`,"data-testid":`changes-ask-button`,children:i(`packet:changes.ask.button`)}),(0,q.jsx)(`button`,{type:`button`,onClick:()=>T(null),"aria-label":i(`packet:changes.selection.clear`),className:`rounded-control p-1 text-muted-foreground hover:text-foreground`,children:(0,q.jsx)(E,{className:`size-3.5`,"aria-hidden":!0})})]})}):null,O?(0,q.jsx)(Et,{path:O.annotationId?z.find(e=>e.id===O.annotationId)?.location?.path??null:V.path,selection:w,tickets:n,initialNote:O.note,busy:A,onSubmit:(e,t)=>void Ie(e,t),onCancel:()=>k(null)},O.annotationId??`selection`):null,Ne.map(e=>(0,q.jsx)(Tt,{annotation:e,active:e.id===_e,onAsk:Fe,askDisabled:A},e.id)),V.binary?(0,q.jsx)(`p`,{className:`rounded-card border border-border/60 p-4 text-body text-muted-foreground`,"data-testid":`changes-binary`,children:i(`packet:changes.binary`)}):!U||U.status===`loading`?(0,q.jsxs)(`div`,{role:`status`,className:`flex flex-col items-start gap-2 p-4 text-body text-muted-foreground`,children:[(0,q.jsx)(ge,{running:!0,className:`w-24`}),i(`packet:changes.loading`)]}):U.status===`error`?(0,q.jsx)(`p`,{className:`p-4 text-body text-muted-foreground`,children:i(`packet:changes.fileError`)}):Z&&Z.hunks.length===0?(0,q.jsx)(`p`,{className:`rounded-card border border-border/60 p-4 text-body text-muted-foreground`,children:i(`packet:changes.noTextChanges`)}):Z?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(zt,{diff:Z,mode:S,annotations:Me,selection:w,onSelect:(e,t,n)=>T(r=>rt(r,e,t,n)),focusAnnotationId:_e,onAsk:Fe,askDisabled:A}),Z.truncated?(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 text-caption text-accent-warning`,"data-testid":`changes-truncated`,children:[i(`packet:changes.largeDiff`,{shown:Z.hunks.reduce((e,t)=>e+t.lines.length,0),total:Z.totalLines}),(0,q.jsx)(`button`,{type:`button`,onClick:()=>ne(e=>new Set(e).add(V.path)),className:`rounded-control border border-border px-2 py-0.5 text-foreground hover:bg-surface`,children:i(`packet:changes.loadFull`)})]}):null]}):null]}):null,(0,q.jsxs)(`p`,{className:`flex flex-wrap items-center gap-x-3 gap-y-1 text-caption text-muted-foreground`,"data-testid":`changes-key-hint`,children:[(0,q.jsxs)(`span`,{children:[(0,q.jsx)(j,{children:`j`}),` `,(0,q.jsx)(j,{children:`k`}),` `,i(`packet:changes.keys.files`)]}),(0,q.jsxs)(`span`,{children:[(0,q.jsx)(j,{children:`n`}),` `,(0,q.jsx)(j,{children:`p`}),` `,i(`packet:changes.keys.annotations`)]}),(0,q.jsxs)(`span`,{children:[(0,q.jsx)(j,{children:`v`}),` `,i(`packet:changes.keys.viewed`)]})]})]})]})]})}function Kt({annotations:e,onAsk:t,askDisabled:n}){let{t:r}=c(`packet`);return(0,q.jsxs)(`section`,{"aria-label":r(`changes.annotations.title`,{count:e.length}),"data-testid":`changes-unanchored`,children:[(0,q.jsx)(`h3`,{className:`mb-1 text-label text-foreground`,children:r(`changes.annotations.title`,{count:e.length})}),(0,q.jsx)(`div`,{className:`flex flex-col`,children:e.map(e=>(0,q.jsx)(Tt,{annotation:e,showLocation:!0,onAsk:t,askDisabled:n},e.id))})]})}var $=(e={})=>({verbs:[],acceptMeaning:null,fineControlOnly:!1,inFlight:!1,terminal:!1,requiresIrreversibleConfirm:!1,...e});function qt(e){let{decision:t,presentation:n,prUrl:r,canCreatePr:i}=e;if(t===`building`)return $({inFlight:!0});if(t===`merged`||t===`discarded`||n.superseded)return $({terminal:!0});if(n.manualRecovery||n.recoveryUnavailable||n.recoveryRecheck||n.retryablePush||n.retryablePrCreation||n.closed||n.deliveryBlocked&&!n.implementationFailed)return $({fineControlOnly:!0});if(n.noChanges)return $({verbs:[`accept`,`request-changes`],acceptMeaning:`mark-done`});if(n.implementationFailed)return $({verbs:n.succeededCount>0?[`request-changes`,`discard`]:[`discard`]});if(t===`pr_draft`)return $(r?{verbs:[`accept`,`request-changes`,`discard`],acceptMeaning:`publish`}:{fineControlOnly:!0});if(t===`pr_ready`)return $({verbs:[`request-changes`,`discard`]});if(t===`on_review`){let e=i?`create-pr`:`merge-local`;return $({verbs:[`accept`,`request-changes`,`discard`],acceptMeaning:e,requiresIrreversibleConfirm:e===`merge-local`})}return $({fineControlOnly:!0})}function Jt(e,t){if(e===`discard`)return`discard`;if(e===`request-changes`)return null;switch(t.acceptMeaning){case`create-pr`:return`create-pr`;case`publish`:return`publish`;case`merge-local`:return`merge-local`;case`mark-done`:return`acknowledge-no-changes`;default:return null}}var Yt=[`app-verified`,`ai-reported`,`reviewer-score`],Xt={"app-verified":N,"ai-reported":w,"reviewer-score":I},Zt={"app-verified":`text-accent-success border-accent-success/30 bg-accent-success/5`,"ai-reported":`text-accent-highlight border-accent-highlight/30 bg-accent-highlight/5`,"reviewer-score":`text-accent-info border-accent-info/30 bg-accent-info/5`};function Qt({item:e}){let{t}=c(`packet`);return(0,q.jsxs)(`li`,{className:`flex flex-col gap-1 py-1.5`,children:[(0,q.jsx)(`span`,{className:`text-sm text-foreground`,children:t(e.code,{...e.values??{},defaultValue:e.code})}),e.rawExcerpt?(0,q.jsx)(`pre`,{className:`max-h-32 overflow-auto rounded border border-border/60 bg-background-deep/60 p-2 text-xs leading-relaxed text-muted-foreground whitespace-pre-wrap`,children:e.rawExcerpt}):null]})}function $t(e){return e.implementationOutcome===`failed`?`failed`:e.deliveryOutcome===`no_changes`||e.implementationOutcome===`succeeded`&&e.changed===!1?`noChanges`:e.deliveryOutcome===`not_started`?`notStarted`:e.implementationOutcome===`succeeded`?`succeeded`:`unknown`}var en={resolved:`border-accent-success/40 bg-accent-success/10 text-accent-success`,partial:`border-accent-warning/40 bg-accent-warning/10 text-accent-warning`,blocked:`border-destructive/40 bg-destructive/10 text-destructive`,unreported:`border-border bg-background-deep/50 text-muted-foreground`},tn={succeeded:`border-accent-success/40 bg-accent-success/10 text-accent-success`,noChanges:`border-accent-info/40 bg-accent-info/10 text-accent-info`,failed:`border-destructive/40 bg-destructive/10 text-destructive`,notStarted:`border-border bg-background-deep/50 text-muted-foreground`,unknown:`border-border bg-background-deep/50 text-muted-foreground`};function nn({title:e,children:t,defaultOpen:n=!1,badge:r}){let[i,a]=(0,K.useState)(n);return(0,q.jsxs)(`div`,{className:`rounded-lg border border-border/60 bg-surface/40`,children:[(0,q.jsxs)(`button`,{type:`button`,onClick:()=>a(e=>!e),className:`flex w-full items-center gap-2 px-4 py-3 text-left`,"aria-expanded":i,children:[i?(0,q.jsx)(b,{className:`size-4 shrink-0 text-muted-foreground`,"aria-hidden":!0}):(0,q.jsx)(x,{className:`size-4 shrink-0 text-muted-foreground`,"aria-hidden":!0}),(0,q.jsx)(`span`,{className:`flex-1 text-sm font-medium text-foreground`,children:e}),r]}),i?(0,q.jsx)(`div`,{className:`border-t border-border/60 px-4 py-3`,children:t}):null]})}var rn=`__all__`;function an(e={}){let t=r(),n=e.prDeliveryId??t.prDeliveryId,{t:o}=c([`packet`,`common`]),l=i(),[u,d]=a(),g=u.get(`repositoryId`),v=u.get(`tab`)===`changes`?`changes`:`overview`,y=(0,K.useRef)(0),b=e.onClose??(()=>l(`/`)),{activeProjectId:x}=le(),ie=_e(x),ae=n?ie.has(n):!1,{act:S,checkout:oe}=m(),{openTicketDetail:w}=ee(),E=JSON.stringify([x,n,g]),D=(0,K.useRef)({key:E,epoch:0});D.current.key!==E&&(D.current={key:E,epoch:D.current.epoch+1});let O=D.current.epoch,k=(0,K.useRef)(!0);(0,K.useEffect)(()=>(k.current=!0,()=>{k.current=!1}),[]);let j=(0,K.useCallback)(()=>k.current&&D.current.key===E&&D.current.epoch===O,[E,O]),[M,N]=(0,K.useState)(null),xe=M?.key===E&&M.epoch===O?M:null,P=xe?.data??null,Ce=xe?.loading??!0,we=xe?.error??null,[Te,F]=(0,K.useState)(null),[I,R]=(0,K.useState)(!1),[z,B]=(0,K.useState)(!1),[De,Oe]=(0,K.useState)(null),[V,ke]=(0,K.useState)(``),[H,U]=(0,K.useState)(!1),[Ae,je]=(0,K.useState)(null),[Me,Ne]=(0,K.useState)(!1),W=(0,K.useCallback)(async()=>{if(!n||!x||!j())return;let e=++y.current,t=()=>j()&&y.current===e;N(e=>({key:E,epoch:O,data:e?.key===E&&e.epoch===O?e.data:null,loading:!0,error:null}));try{let e=g?`?repositoryId=${encodeURIComponent(g)}`:``,r=await fetch(`${s()}/rails/pr-deliveries/${n}/packet${e}`);if(!t())return;if(!r.ok){N({key:E,epoch:O,data:null,loading:!1,error:r.status===404?`notFound`:`loadFailed`});return}let i=await r.json();if(!t())return;N({key:E,epoch:O,data:i,loading:!1,error:null})}catch{if(!t())return;N({key:E,epoch:O,data:null,loading:!1,error:`loadFailed`})}},[n,x,g,E,O,j]);(0,K.useEffect)(()=>(W(),R(!1),Ne(!1),F(null),Oe(null),je(null),U(!1),ke(``),()=>{y.current++}),[W]);let G=(0,K.useMemo)(()=>p(P?.snapshot),[P?.snapshot]),J=P?.packet??null,Y=Ce||Te!==null||H||!!G?.operation,Fe=P?.acceptCapability??null,X=(0,K.useMemo)(()=>{if(!J)return null;let e=h({decision:J.decision,ticketIds:J.ticketIds,prState:J.prUrl?`pr-created`:`none`,statusCode:J.statusCode,prUrl:J.prUrl,runIds:J.runIds});return qt({decision:J.decision,presentation:e,prUrl:J.prUrl,canCreatePr:Fe?.target===`create-pr`})},[J,Fe]),Z=(0,K.useCallback)(async e=>{if(!J||!X||Y||!j())return;let t=Jt(e,X);if(t){Oe(null),F(e);try{let e=await(g&&G?S(G.railIndex,t,G.decision,G.prDeliveryId,g):S(J.railIndex,t,J.decision,J.prDeliveryId));if(!j())return;e.ok?x&&L(x):Oe(e.status===409&&e.error===`stale_decision`?`alreadyResolved`:`actionFailed`),await W()}finally{j()&&(F(null),R(!1))}}},[S,x,W,J,X,G,g,Y,j]),ze=(0,K.useCallback)(async()=>{if(!(!J||!V.trim()||!x||Y||!j())){je(null),U(!0);try{let t=await fetch(`${s()}/rails/${J.railIndex}/launch`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({loopId:`factory:sdd-quick-openspec`,revisionOfDeliveryId:G?.prDeliveryId??J.prDeliveryId,revisionNote:V.trim(),...G?.executionManifest?{repositoryIds:G.executionManifest.selectedRepositoryIds}:{}})});if(!j())return;if(!t.ok){let e=await t.json().catch(()=>null);if(!j())return;je(e?.error===`invalid_revision_target`?`revisionStale`:e?.error===`daily_budget_exceeded`?`revisionBudget`:`revisionFailed`);return}ke(``),Ne(!1);let r=await t.json().catch(()=>null);if(!j())return;r?.prDeliveryId&&r.prDeliveryId!==n?e.onClose?e.onClose():l(`/review/${encodeURIComponent(r.prDeliveryId)}`):await W()}catch{j()&&je(`revisionFailed`)}finally{j()&&U(!1)}}},[x,W,J,V,G,Y,j,n,e.onClose,l]);if(Ce&&!J)return(0,q.jsxs)(`div`,{role:`status`,className:`flex h-full items-center justify-center text-muted-foreground`,children:[(0,q.jsx)(ge,{running:!0,className:`mr-3 w-16 shrink-0`}),o(`common:states.loading`)]});if(we||!J||!X)return(0,q.jsxs)(`div`,{className:`mx-auto flex max-w-2xl flex-col items-center gap-4 p-10 text-center`,children:[(0,q.jsx)(T,{className:`size-6 text-accent-warning`,"aria-hidden":!0}),(0,q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:o(we===`notFound`?`error.notFound`:`error.loadFailed`)}),(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[we!==`notFound`&&(0,q.jsxs)(A,{type:`button`,onClick:()=>void W(),className:`gap-1.5`,children:[(0,q.jsx)(ce,{className:`size-3.5`,"aria-hidden":!0}),o(`common:actions.retry`)]}),(0,q.jsx)(A,{type:`button`,variant:`outline`,onClick:b,children:o(`backToBoard`)})]})]});let Be=Yt.map(e=>({tier:e,items:J.proof.filter(t=>t.tier===e)})).filter(e=>e.items.length>0),Ue=(J.baseline??[]).map(e=>e.cost?.costUsd??null),We=Ue.length>0&&Ue.every(e=>e!==null)?Ue.reduce((e,t)=>e+(t??0),0):null,Ge=J.cost.totalUsd===null?`—`:`${J.cost.estimated?`~`:``}${he(J.cost.totalUsd)}`;return(0,q.jsxs)(`article`,{"aria-labelledby":`review-packet-headline`,className:`mx-auto flex w-full max-w-7xl flex-col gap-4 p-6`,children:[(0,q.jsxs)(`button`,{type:`button`,onClick:b,className:`flex w-fit items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground`,children:[(0,q.jsx)(_,{className:`size-3.5`,"aria-hidden":!0}),o(`backToBoard`)]}),G?.repositoryDeliveries?.length?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-2 text-xs`,children:[(0,q.jsx)(`span`,{id:`review-packet-repository-label`,children:o(`common:repositories.select`)}),(0,q.jsxs)(me,{value:g??rn,onValueChange:e=>{let t=new URLSearchParams(u);e===rn?t.delete(`repositoryId`):t.set(`repositoryId`,e),d(t,{replace:!0})},children:[(0,q.jsx)(de,{"aria-labelledby":`review-packet-repository-label`,className:`h-7 w-auto min-w-[10rem] text-xs`,children:(0,q.jsx)(ue,{})}),(0,q.jsxs)(fe,{children:[(0,q.jsx)(pe,{value:rn,children:o(`common:repositories.all`)}),G.repositoryDeliveries.map(e=>(0,q.jsx)(pe,{value:e.repositoryId,children:e.name},e.repositoryId))]})]})]}),(0,q.jsx)(ye,{deliveryId:G.prDeliveryId,repositories:G.repositoryDeliveries,busy:Y,onAct:async(e,t)=>{if(!(Y||!j())){F(`accept`);try{let n=await S(G.railIndex,e,G.decision,G.prDeliveryId,t);if(!j())return;n.ok||Oe(`actionFailed`),await W()}finally{j()&&F(null)}}},onCheckout:async e=>{if(!(Y||!j())){F(`accept`);try{let t=await oe(G.railIndex,G.prDeliveryId,e);if(!j())return;t.ok||Oe(`actionFailed`),await W()}finally{j()&&F(null)}}}})]}):null,(0,q.jsxs)(`div`,{className:`rounded-xl border border-border/70 bg-surface/60 p-5 shadow-sm`,children:[(0,q.jsx)(`h1`,{id:`review-packet-headline`,className:`text-lg font-semibold text-foreground`,children:o(J.headlineCode,{count:J.totalCount,succeeded:J.succeededCount,total:J.totalCount,defaultValue:o(`headline.generic`)})}),(0,q.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-2 text-xs`,children:[J.confidence?.overall!==null&&J.confidence?.overall!==void 0?(0,q.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded-full border border-accent-info/30 bg-accent-info/10 px-2 py-0.5 text-accent-info`,title:o(`confidence.tooltip`),children:[o(`confidence.pill`,{overall:J.confidence.overall}),(0,q.jsxs)(`span`,{className:`sr-only`,children:[` (`,o(`confidence.tooltip`),`)`]})]}):(0,q.jsx)(`span`,{className:`inline-flex items-center gap-1 rounded-full border border-border bg-background-deep/50 px-2 py-0.5 text-muted-foreground`,children:o(`confidence.unavailable`)}),(0,q.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-muted-foreground`,children:[(0,q.jsx)(Ee,{className:`size-3.5`,"aria-hidden":!0}),o(`cost.thisBuild`,{amount:Ge}),We===null?null:(0,q.jsx)(`span`,{className:`text-muted-foreground`,"data-testid":`packet-cost-baseline`,children:o(`cost.baselinePart`,{amount:he(We)})})]}),J.prUrl?(0,q.jsxs)(`a`,{href:J.prUrl,target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-1 text-accent-info hover:underline`,children:[(0,q.jsx)(f,{className:`size-3.5`,"aria-hidden":!0}),o(`openPr`,{number:J.prNumber??``})]}):null]}),X.fineControlOnly?(0,q.jsx)(`p`,{className:`mt-4 rounded-md border border-accent-warning/30 bg-accent-warning/5 px-3 py-2 text-xs text-accent-warning`,children:o(`fineControlOnly`)}):X.inFlight?(0,q.jsxs)(`p`,{className:`mt-4 flex items-center gap-2 text-sm text-muted-foreground`,children:[(0,q.jsx)(ge,{running:!0,className:`w-12 shrink-0`}),o(`stillWorking`)]}):X.terminal?(0,q.jsx)(`p`,{className:`mt-4 text-sm text-muted-foreground`,children:o(`alreadyResolved`)}):(0,q.jsxs)(`div`,{className:`mt-4 flex flex-wrap items-center gap-2`,children:[X.verbs.includes(`accept`)&&(!G?.repositoryDeliveries?.length||g)?I?(0,q.jsxs)(`div`,{className:`flex w-full flex-col gap-2 rounded-md border border-destructive/40 bg-destructive/5 p-3`,children:[(0,q.jsx)(`p`,{className:`text-xs text-foreground`,children:o(`accept.irreversibleWarning`)}),(0,q.jsxs)(`div`,{className:`flex gap-2`,children:[(0,q.jsx)(A,{type:`button`,variant:`destructive`,onClick:()=>void Z(`accept`),disabled:Y,className:`text-sm`,"data-testid":`packet-accept-confirm`,children:o(`accept.irreversibleConfirm`)}),(0,q.jsx)(`button`,{type:`button`,onClick:()=>R(!1),className:`rounded-md border border-border px-3 py-1.5 text-sm text-foreground`,children:o(`common:actions.cancel`)})]})]}):(0,q.jsxs)(A,{type:`button`,onClick:()=>{X.requiresIrreversibleConfirm?R(!0):Z(`accept`)},disabled:Y,className:`gap-1.5 text-sm bg-accent-success text-background hover:bg-accent-success/90`,"data-testid":`packet-accept`,children:[Te===`accept`?(0,q.jsx)(C,{className:`size-4 animate-spin`,"aria-hidden":!0}):(0,q.jsx)(re,{className:`size-4`,"aria-hidden":!0}),o(`accept.${X.acceptMeaning??`generic`}`)]}):null,X.verbs.includes(`request-changes`)?(0,q.jsxs)(`button`,{type:`button`,onClick:()=>Ne(e=>!e),disabled:Y||H,"aria-expanded":Me,className:`inline-flex items-center gap-1.5 rounded-md border border-border px-3 py-1.5 text-sm text-foreground hover:bg-surface disabled:opacity-50`,"data-testid":`packet-request-changes`,children:[(0,q.jsx)(te,{className:`size-4`,"aria-hidden":!0}),o(`requestChanges.label`)]}):null,X.verbs.includes(`discard`)?(0,q.jsxs)(`button`,{type:`button`,onClick:()=>B(!0),disabled:Y,className:`inline-flex items-center gap-1.5 rounded-md border border-border px-3 py-1.5 text-sm text-foreground hover:bg-surface disabled:opacity-50`,"data-testid":`packet-discard`,children:[Te===`discard`?(0,q.jsx)(C,{className:`size-4 animate-spin`,"aria-hidden":!0}):(0,q.jsx)(ne,{className:`size-4`,"aria-hidden":!0}),o(`discard.label`)]}):null]}),ae&&X.verbs.includes(`discard`)?(0,q.jsx)(`p`,{className:`mt-3 rounded-md border border-accent-warning/40 bg-accent-warning/10 px-3 py-2 text-xs text-accent-warning`,"data-testid":`packet-discard-stacked-note`,children:o(`discard.stackedNote`)}):null,De?(0,q.jsx)(`p`,{className:`mt-3 text-xs text-accent-warning`,children:o(`error.${De}`)}):null,(0,q.jsx)(se,{open:z,onOpenChange:B,title:o(`discard.confirmTitle`),description:(0,q.jsxs)(q.Fragment,{children:[o(`discard.confirmBody`),ae?(0,q.jsx)(`span`,{className:`mt-2 block`,children:o(`discard.stackedNote`)}):null]}),confirmLabel:o(`discard.label`),busy:Y,onConfirm:()=>{B(!1),Z(`discard`)}}),Me?(0,q.jsxs)(`div`,{className:`mt-4 flex flex-col gap-2 rounded-md border border-border/70 bg-background-deep/40 p-3`,children:[(0,q.jsx)(`label`,{htmlFor:`packet-revision-note`,className:`text-label text-foreground`,children:o(`requestChanges.prompt`)}),(0,q.jsx)(`textarea`,{id:`packet-revision-note`,value:V,onChange:e=>ke(e.target.value),rows:2,placeholder:o(`requestChanges.placeholder`),className:`resize-y rounded-md border border-border bg-surface px-2 py-1.5 text-sm text-foreground placeholder:text-muted-foreground`,"data-testid":`packet-revision-input`}),(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsxs)(A,{type:`button`,variant:`default`,onClick:()=>void ze(),disabled:Y||V.trim().length===0,className:`gap-1.5 text-sm`,"data-testid":`packet-revision-submit`,children:[H?(0,q.jsx)(C,{className:`size-4 animate-spin`,"aria-hidden":!0}):(0,q.jsx)(be,{className:`size-4`,"aria-hidden":!0}),o(`requestChanges.submit`)]}),(0,q.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:o(`requestChanges.hint`)})]}),Ae?(0,q.jsx)(`p`,{className:`text-xs text-accent-warning`,children:o(`error.${Ae}`)}):null]}):null]}),(0,q.jsx)(`div`,{role:`tablist`,"aria-label":o(`tabs.label`),className:`flex gap-1 border-b border-border/60`,"data-testid":`packet-tabs`,children:[`overview`,`changes`].map(e=>(0,q.jsx)(`button`,{type:`button`,role:`tab`,id:`packet-tab-${e}`,"aria-selected":v===e,"aria-controls":`packet-panel-${e}`,tabIndex:v===e?0:-1,onClick:()=>{let t=new URLSearchParams(u);e===`changes`?t.set(`tab`,`changes`):t.delete(`tab`),d(t,{replace:!0})},onKeyDown:t=>{if(t.key!==`ArrowRight`&&t.key!==`ArrowLeft`)return;t.preventDefault();let n=new URLSearchParams(u);e===`overview`?n.set(`tab`,`changes`):n.delete(`tab`),d(n,{replace:!0}),requestAnimationFrame(()=>document.getElementById(`packet-tab-${e===`overview`?`changes`:`overview`}`)?.focus())},className:`-mb-px border-b-2 px-3 py-2 text-label ${v===e?`border-primary text-foreground`:`border-transparent text-muted-foreground hover:text-foreground`}`,children:o(`tabs.${e}`)},e))}),(0,q.jsx)(`div`,{id:`packet-panel-changes`,role:`tabpanel`,"aria-labelledby":`packet-tab-changes`,hidden:v!==`changes`,children:(0,q.jsx)(Gt,{prDeliveryId:G?.prDeliveryId??J.prDeliveryId,repositoryId:g,active:v===`changes`,tickets:J.ticketIds.map(e=>{let t=J.sections.find(t=>t.ticketId===e)?.title;return{ticketId:e,label:t?`#${e} ${t}`:`#${e}`}})})}),(0,q.jsxs)(`div`,{id:`packet-panel-overview`,role:`tabpanel`,"aria-labelledby":`packet-tab-overview`,className:v===`changes`?`hidden`:`mx-auto flex w-full max-w-3xl flex-col gap-4`,"data-testid":`packet-overview-panel`,children:[J.whatToLookAt?(0,q.jsx)(Se,{brief:J.whatToLookAt,multiTicket:J.ticketIds.length>1}):null,J.needsHumanEyes?.length?(0,q.jsx)(He,{rules:J.needsHumanEyes}):null,J.requirementsDemonstrated?(0,q.jsx)(Re,{section:J.requirementsDemonstrated,multiTicket:J.ticketIds.length>1}):null,J.baseline?.length?(0,q.jsx)(Ve,{entries:J.baseline,multiTicket:J.ticketIds.length>1}):null,J.driftNudges.length>0?(0,q.jsxs)(`div`,{className:`rounded-lg border border-accent-highlight/30 bg-accent-highlight/5 p-4`,"data-testid":`packet-drift-nudges`,children:[(0,q.jsx)(`h2`,{className:`mb-1 text-sm font-medium text-accent-highlight`,children:o(`drift.title`)}),(0,q.jsx)(`ul`,{className:`space-y-1 text-xs text-foreground`,children:J.driftNudges.map(e=>(0,q.jsx)(`li`,{children:o(e.code,{...e.values,defaultValue:e.code})},e.code))}),(0,q.jsx)(`p`,{className:`mt-2 text-xs text-muted-foreground`,children:o(`drift.advisory`)})]}):null,J.versions.length>1?(0,q.jsxs)(nn,{title:o(`versions.title`,{count:J.versions.length}),badge:(0,q.jsx)(ve,{className:`size-3.5 text-muted-foreground`,"aria-hidden":!0}),children:[(0,q.jsx)(`ol`,{className:`space-y-2`,"data-testid":`packet-versions`,children:J.versions.map(e=>(0,q.jsxs)(`li`,{className:`flex flex-col gap-0.5 text-sm`,children:[(0,q.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,q.jsx)(`span`,{className:e.current?`font-medium text-foreground`:`text-muted-foreground`,children:o(`versions.label`,{version:e.version})}),e.current?(0,q.jsx)(`span`,{"data-chip":``,className:`inline-flex h-5 items-center rounded-full border border-accent-primary/40 bg-accent-primary/10 px-1.5 text-caption text-accent-primary`,children:o(`versions.current`)}):null,(0,q.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e.costUsd===null?`—`:`${e.costEstimated?`~`:``}${he(e.costUsd)}`})]}),(0,q.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e.revisionNote??o(`versions.originalBuild`)})]},e.prDeliveryId))}),(0,q.jsx)(`p`,{className:`mt-3 text-xs text-muted-foreground`,children:o(`cost.allVersions`,{amount:J.chainCostUsd===null?`—`:`${J.chainCostEstimated?`~`:``}${he(J.chainCostUsd)}`})})]}):null,J.derivation?(0,q.jsx)(Le,{derivation:J.derivation,settlement:J.flowSettlement}):null,J.watchOut.length>0?(0,q.jsxs)(`div`,{className:`rounded-lg border border-accent-warning/30 bg-accent-warning/5 p-4`,children:[(0,q.jsxs)(`h2`,{className:`mb-2 flex items-center gap-1.5 text-sm font-medium text-accent-warning`,children:[(0,q.jsx)(T,{className:`size-4`,"aria-hidden":!0}),o(`watchOut.title`)]}),(0,q.jsx)(`ul`,{className:`space-y-1`,children:J.watchOut.map((e,t)=>(0,q.jsx)(Qt,{item:e},`${e.code}-${t}`))})]}):null,(0,q.jsx)(nn,{title:o(`sections.whatYouAsked`),defaultOpen:!0,children:(0,q.jsx)(`ul`,{className:`space-y-3`,children:J.sections.map(e=>(0,q.jsxs)(`li`,{className:`text-sm`,children:[(0,q.jsxs)(`button`,{type:`button`,onClick:()=>w(e.ticketId),className:`text-accent-primary hover:underline`,children:[`#`,e.ticketId,` `,e.title??``]}),e.problem?(0,q.jsx)(Pe,{muted:!0,className:`mt-1`,children:e.problem}):null]},e.ticketId))})}),J.followUp&&(0,q.jsxs)(nn,{title:o(`followUp.title`,{count:J.followUp.comments.length}),defaultOpen:!0,children:[(0,q.jsx)(`p`,{className:`mb-2 text-xs text-muted-foreground`,children:o(`followUp.caveat`)}),(0,q.jsx)(`ul`,{className:`space-y-3`,"data-testid":`packet-follow-up`,children:J.followUp.comments.map(e=>{let t=J.followUpReport?.find(t=>t.commentId===e.id)??null,n=t?t.verdict:`unreported`;return(0,q.jsxs)(`li`,{className:`rounded-md border border-border/50 bg-background-deep/30 px-3 py-2 text-sm`,children:[(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,q.jsx)(`span`,{"data-chip":``,className:`inline-flex h-5 items-center rounded bg-surface/70 px-1 font-mono text-caption text-muted-foreground`,children:e.id}),e.path?(0,q.jsxs)(`span`,{className:`font-mono text-xs text-accent-info`,children:[e.path,e.line?`:${e.line}`:``]}):null,(0,q.jsx)(`span`,{"data-chip":``,className:`inline-flex h-5 items-center rounded-full border px-2 text-caption font-medium ${en[n]}`,"data-testid":`packet-follow-up-verdict`,children:o(`followUp.verdict.${n}`)}),(0,q.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[o(`followUp.source.${e.source===`github`?`github`:`pasted`}`),e.author?` · ${e.author}`:``]})]}),(0,q.jsx)(Pe,{muted:!0,className:`mt-1`,children:e.body}),t?(0,q.jsxs)(`dl`,{className:`mt-1 grid gap-x-3 gap-y-0.5 text-xs text-muted-foreground sm:grid-cols-[auto_1fr]`,children:[t.files?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`dt`,{className:`font-medium`,children:o(`followUp.files`)}),(0,q.jsx)(`dd`,{className:`font-mono`,children:t.files})]}):null,t.tests?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`dt`,{className:`font-medium`,children:o(`followUp.tests`)}),(0,q.jsx)(`dd`,{children:t.tests})]}):null,t.notes?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`dt`,{className:`font-medium`,children:o(`followUp.notes`)}),(0,q.jsx)(`dd`,{children:t.notes})]}):null]}):(0,q.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:o(`followUp.noReport`)})]},e.id)})}),J.followUp.scope.excludedChanges.length>0&&(0,q.jsxs)(`p`,{className:`mt-2 text-xs text-muted-foreground`,children:[(0,q.jsxs)(`span`,{className:`font-medium`,children:[o(`followUp.excluded`),`:`]}),` `,J.followUp.scope.excludedChanges.join(` · `)]})]}),J.specAddenda&&J.specAddenda.length>0&&(0,q.jsxs)(nn,{title:o(`addenda.title`,{count:J.specAddenda.length}),defaultOpen:!0,children:[(0,q.jsx)(`p`,{className:`mb-2 text-xs text-muted-foreground`,children:o(`addenda.caveat`)}),(0,q.jsx)(`ul`,{className:`space-y-2`,"data-testid":`packet-addenda`,children:J.specAddenda.map(e=>{let t=J.specAddendaReport?.find(t=>t.addendumId===e.id)??null,n=t?t.verdict:`unreported`,r=n===`applied`?en.resolved:en[n];return(0,q.jsxs)(`li`,{className:`rounded-md border border-border/50 bg-background-deep/30 px-3 py-2 text-sm`,children:[(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,q.jsxs)(`span`,{className:`font-mono text-xs text-accent-primary`,children:[`#`,e.ticketId]}),(0,q.jsx)(`span`,{"data-chip":``,className:`inline-flex h-5 items-center rounded-full border border-border/50 px-1.5 text-caption text-muted-foreground`,children:o(`addenda.kind.${e.kind}`)}),(0,q.jsx)(`span`,{className:`font-medium`,children:e.title}),(0,q.jsx)(`span`,{"data-chip":``,className:`inline-flex h-5 items-center rounded-full border px-2 text-caption font-medium ${r}`,"data-testid":`packet-addenda-verdict`,children:o(`addenda.verdict.${n}`)})]}),t?(0,q.jsxs)(`dl`,{className:`mt-1 grid gap-x-3 gap-y-0.5 text-xs text-muted-foreground sm:grid-cols-[auto_1fr]`,children:[t.files?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`dt`,{className:`font-medium`,children:o(`followUp.files`)}),(0,q.jsx)(`dd`,{className:`font-mono`,children:t.files})]}):null,t.tests?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`dt`,{className:`font-medium`,children:o(`followUp.tests`)}),(0,q.jsx)(`dd`,{children:t.tests})]}):null,t.notes?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`dt`,{className:`font-medium`,children:o(`followUp.notes`)}),(0,q.jsx)(`dd`,{children:t.notes})]}):null]}):(0,q.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:o(`addenda.noReport`)})]},e.id)})})]}),(0,q.jsx)(nn,{title:o(`sections.whatIDid`),children:(0,q.jsx)(`ul`,{className:`space-y-3`,children:J.sections.map(e=>(0,q.jsxs)(`li`,{className:`text-sm`,"data-testid":`packet-done-${e.ticketId}`,children:[(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,q.jsxs)(`span`,{className:`font-medium text-foreground`,children:[`#`,e.ticketId]}),e.title?(0,q.jsx)(`span`,{className:`text-foreground`,children:e.title}):null,(()=>{let t=$t(e);return(0,q.jsx)(`span`,{"data-chip":``,className:`inline-flex h-5 items-center rounded-full border px-2 text-caption font-medium ${tn[t]}`,"data-testid":`packet-outcome-pill`,children:o(`outcome.${t}`)})})()]}),e.churn?(0,q.jsxs)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:[o(`churn.line`,{files:e.churn.filesTouched,added:e.churn.addedLines,removed:e.churn.removedLines}),` · `,e.churn.testFilesTouched.length>0?o(`churn.testFiles`,{count:e.churn.testFilesTouched.length}):o(`churn.noTestFiles`)]}):(0,q.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:o(`churn.batchNotSplittable`)}),e.solution?(0,q.jsxs)(`details`,{className:`group mt-2 rounded-md border border-border/50 bg-background-deep/30 px-3 py-2`,children:[(0,q.jsx)(`summary`,{className:`cursor-pointer select-none text-label text-muted-foreground group-open:text-foreground`,children:o(`planned.title`)}),(0,q.jsx)(`p`,{className:`mt-1 text-xs italic text-muted-foreground`,children:o(`planned.caveat`)}),(0,q.jsx)(Pe,{className:`mt-2`,children:e.solutionOverflow??e.solution})]}):(0,q.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:o(`noSolutionRecorded`)})]},e.ticketId))})}),J.agentActions&&J.agentActions.total>0?(0,q.jsx)(nn,{title:o(`sections.whatTheAgentDid`),badge:(0,q.jsx)(`span`,{"data-chip":``,className:`inline-flex h-5 items-center rounded-full border border-border bg-background-deep/50 px-2 text-caption tabular-nums text-muted-foreground`,children:o(`agentActions.total`,{count:J.agentActions.total})}),children:(0,q.jsx)(Ie,{actions:J.agentActions})}):null,(0,q.jsx)(nn,{title:o(`sections.howItWasChecked`),badge:J.evidenceUnavailable?(0,q.jsx)(`span`,{"data-chip":``,className:`inline-flex h-5 items-center rounded-full border border-border bg-background-deep/50 px-2 text-caption text-muted-foreground`,children:o(`proof.evidenceUnavailable`)}):void 0,children:(0,q.jsx)(`div`,{className:`space-y-4`,children:Be.map(({tier:e,items:t})=>{let n=Xt[e];return(0,q.jsxs)(`div`,{className:`rounded-md border px-3 py-2 ${Zt[e]}`,children:[(0,q.jsxs)(`h3`,{className:`mb-1 flex items-center gap-1.5 text-label`,children:[(0,q.jsx)(n,{className:`size-3.5`,"aria-hidden":!0}),o(`tier.${e}.title`)]}),(0,q.jsx)(`p`,{className:`mb-2 text-xs`,children:o(`tier.${e}.caveat`)}),(0,q.jsx)(`ul`,{className:`space-y-1`,children:t.map((e,t)=>(0,q.jsx)(Qt,{item:e},`${e.code}-${t}`))})]},e)})})})]})]})}export{an as default};
@@ -0,0 +1 @@
1
+ import{t as e}from"./jsx-runtime-BbYvbtY8.js";import{n as t}from"./createLucideIcon-DtODIU64.js";import{t as n}from"./download-C9wP_42h.js";import{n as r,r as i,t as a}from"./square-Co6h5vZg.js";import{a as o,c as s,d as c,i as l,l as u,p as d,u as f}from"./dialog-C23lB2iP.js";import{t as p}from"./button-CHPkroew.js";import{Dn as m,Mt as h,yt as g}from"./index-DHzB0T26.js";var _=e(),v={core:m,start:r,"ai-step":m,shell:h,decider:i,condition:i,end:a};function y(e){if(e.type===`core`){let t=e.data?.params;return t?String(t.text??t.prompt??t.goal??t.expr??t.question??t.message??t.ref??t.body??t.outcome??JSON.stringify(t,null,2)):null}return e.type===`ai-step`?typeof e.data?.prompt==`string`?e.data.prompt:null:e.type===`shell`?typeof e.data?.command==`string`?e.data.command:null:e.type===`decider`?typeof e.data?.goal==`string`?e.data.goal:null:e.type===`end`?e.data?.outcome===`failure`?`failure`:`success`:null}function b({template:e,onClose:r,onUse:i}){let{t:h}=t(`loops`);return(0,_.jsx)(l,{open:e!==null,onOpenChange:e=>{e||r()},children:(0,_.jsx)(s,{size:`wide`,showCloseButton:!1,children:e&&(0,_.jsxs)(_.Fragment,{children:[(0,_.jsxs)(c,{icon:(0,_.jsx)(m,{className:`text-accent-highlight`}),children:[(0,_.jsx)(d,{children:e.name}),(0,_.jsx)(u,{children:e.description})]}),(0,_.jsxs)(o,{className:`space-y-3`,children:[(0,_.jsxs)(`div`,{className:`flex flex-wrap gap-1.5`,children:[g(e.graph)?(0,_.jsxs)(`span`,{title:h(`gallery.needsSpecHint`),"data-chip":``,className:`inline-flex h-5 items-center px-1.5 rounded text-caption bg-muted text-muted-foreground`,children:[h(`gallery.needsSpec`),(0,_.jsxs)(`span`,{className:`sr-only`,children:[` (`,h(`gallery.needsSpecHint`),`)`]})]}):(0,_.jsxs)(`span`,{title:h(`gallery.standaloneHint`),"data-chip":``,className:`inline-flex h-5 items-center px-1.5 rounded text-caption bg-accent-success/15 text-accent-success`,children:[h(`gallery.standalone`),(0,_.jsxs)(`span`,{className:`sr-only`,children:[` (`,h(`gallery.standaloneHint`),`)`]})]}),e.category&&(0,_.jsx)(`span`,{"data-chip":``,className:`inline-flex h-5 items-center px-1.5 rounded text-caption bg-accent-info/15 text-accent-info`,children:h(`categories.${e.category}`,{defaultValue:e.category})}),e.tags.map(e=>(0,_.jsx)(`span`,{"data-chip":``,className:`inline-flex h-5 items-center px-1.5 rounded text-caption bg-muted text-muted-foreground`,children:e},e))]}),(0,_.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e.graph.config.timeoutMinutes>0?h(`preview.limits`,{iterations:e.graph.config.maxIterations,timeout:e.graph.config.timeoutMinutes}):h(`preview.limitsNoTimeout`,{iterations:e.graph.config.maxIterations})}),(0,_.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,_.jsx)(`span`,{className:`block text-label text-muted-foreground`,children:h(`preview.steps`)}),e.graph.nodes.map((e,t)=>{let n=v[e.type]??a,r=y(e);return(0,_.jsxs)(`div`,{className:`rounded border border-border bg-surface/30 p-2`,children:[(0,_.jsxs)(`div`,{className:`flex items-center gap-1.5 text-label text-foreground`,children:[(0,_.jsxs)(`span`,{className:`text-xs text-muted-foreground tabular-nums`,children:[t+1,`.`]}),(0,_.jsx)(n,{className:`w-3.5 h-3.5 text-accent-primary`}),h(e.type===`core`?`builder.core.pieces.${e.data?.kind}`:`builder.nodes.${e.type}`)]}),r&&(0,_.jsx)(`pre`,{className:`mt-1 whitespace-pre-wrap break-words text-xs text-muted-foreground font-mono`,children:r})]},e.id)})]})]}),(0,_.jsxs)(f,{children:[(0,_.jsx)(p,{variant:`ghost`,onClick:r,children:h(`common:actions.cancel`)}),(0,_.jsxs)(p,{onClick:()=>i(e.id),children:[(0,_.jsx)(n,{className:`w-3.5 h-3.5 mr-1.5`}),h(`actions.use`)]})]})]})})})}export{b as n,y as r,v as t};