specrails-desktop 2.26.2 → 2.28.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 (319) hide show
  1. package/client/dist/assets/{ActivityFeedPage-bDe4VitF.js → ActivityFeedPage-DcMmDAP3.js} +1 -1
  2. package/client/dist/assets/AgentBrowserCapture-CZ3oc1UL.js +1 -0
  3. package/client/dist/assets/AgentIntegrationsModal-DkqooCFn.js +1 -0
  4. package/client/dist/assets/{AgentModeCodePane-Ci39DcOo.js → AgentModeCodePane-CM77ljte.js} +2 -2
  5. package/client/dist/assets/AgentModeJobsPane-DbZzogbi.js +1 -0
  6. package/client/dist/assets/AgentsPage-BZIml7eL.js +86 -0
  7. package/client/dist/assets/{AnalyticsPage-Da21wWWw.js → AnalyticsPage-B4qflNxi.js} +1 -1
  8. package/client/dist/assets/{BarChart-BiLTq3uC.js → BarChart-Ckstq9fl.js} +1 -1
  9. package/client/dist/assets/CodePage-DFZXLbI1.js +2 -0
  10. package/client/dist/assets/{DesktopAnalyticsPage-COkzgMmd.js → DesktopAnalyticsPage-DbgMa8OO.js} +1 -1
  11. package/client/dist/assets/DocsDialog-BQc9Kwev.js +11 -0
  12. package/client/dist/assets/DocsPage-OsV44ECy.js +11 -0
  13. package/client/dist/assets/{ExportDropdown-DDhJH-Jr.js → ExportDropdown-a43XHO3Y.js} +1 -1
  14. package/client/dist/assets/IntegrationsPage-C3E8hZhB.js +1 -0
  15. package/client/dist/assets/InteractiveJobComposer-zj8SrOAl.js +19 -0
  16. package/client/dist/assets/JobDetailModal-Cm6ZeVoh.js +1 -0
  17. package/client/dist/assets/JobDetailPage-DN67LsdX.js +1 -0
  18. package/client/dist/assets/JobsPage-DF9wKGbw.js +1 -0
  19. package/client/dist/assets/{LoopBuilderPage-DsLLrtHa.js → LoopBuilderPage-RJ6GGjli.js} +2 -2
  20. package/client/dist/assets/{LoopPreviewModal-C-fDEgnu.js → LoopPreviewModal-B2wmifF6.js} +1 -1
  21. package/client/dist/assets/LoopsPage-DdlvH-dJ.js +1 -0
  22. package/client/dist/assets/PluginsPage-9DI0a6jI.js +2 -0
  23. package/client/dist/assets/ProjectSettingsDialog-dgy5hqPd.js +1 -0
  24. package/client/dist/assets/{TemplatePreviewModal-DcHFbLA8.js → TemplatePreviewModal-CERf1IYB.js} +1 -1
  25. package/client/dist/assets/agent-BRJCESkc2.js +1 -0
  26. package/client/dist/assets/agent-BuYz6fJd.js +1 -0
  27. package/client/dist/assets/agent-CxnRzL6Z.js +1 -0
  28. package/client/dist/assets/agent-D4JAuEGN2.js +1 -0
  29. package/client/dist/assets/agent-DNQlI8EN.js +1 -0
  30. package/client/dist/assets/agent-DyzUH89R.js +1 -0
  31. package/client/dist/assets/agent-MaTxBlg5.js +1 -0
  32. package/client/dist/assets/agent-ostmMYNz2.js +1 -0
  33. package/client/dist/assets/{brain-BBNUUrUI.js → brain-BPbhM1Jx.js} +1 -1
  34. package/client/dist/assets/dashboard-5C2FOZQX.js +1 -0
  35. package/client/dist/assets/{dashboard-C6w0rICe.js → dashboard-B6iQ-IL_.js} +1 -1
  36. package/client/dist/assets/dashboard-BFfnCtq52.js +1 -0
  37. package/client/dist/assets/dashboard-BIC8KtRf2.js +1 -0
  38. package/client/dist/assets/dashboard-CEgg9NAr.js +1 -0
  39. package/client/dist/assets/dashboard-CiOyDh9L.js +1 -0
  40. package/client/dist/assets/dashboard-D6x5OnNj2.js +1 -0
  41. package/client/dist/assets/dashboard-DBuLfWo9.js +1 -0
  42. package/client/dist/assets/{dist-js-BxjTIvdT.js → dist-js-Byjcju1W.js} +1 -1
  43. package/client/dist/assets/{dist-js-DdP_Gl3p.js → dist-js-Dh-9lbLD.js} +1 -1
  44. package/client/dist/assets/index-89SuhD4Y.js +158 -0
  45. package/client/dist/assets/index-DOGzWJhO.css +2 -0
  46. package/client/dist/assets/integrations-By80EBkf.js +1 -0
  47. package/client/dist/assets/integrations-CAjq5tdW2.js +1 -0
  48. package/client/dist/assets/integrations-CG2dp3Kd.js +1 -0
  49. package/client/dist/assets/integrations-CP_aiV_8.js +1 -0
  50. package/client/dist/assets/integrations-CUNe3t9l2.js +1 -0
  51. package/client/dist/assets/integrations-CWjh5VRk.js +1 -0
  52. package/client/dist/assets/integrations-JOHSCvB3.js +1 -0
  53. package/client/dist/assets/integrations-RJfzXkPx2.js +1 -0
  54. package/client/dist/assets/{lib-BviHZ_gK.js → lib-yKyTNJ1c.js} +1 -1
  55. package/client/dist/assets/nav-B2_ToNqS.js +1 -0
  56. package/client/dist/assets/nav-BAMkVEId.js +1 -0
  57. package/client/dist/assets/nav-BTg8s-cD.js +1 -0
  58. package/client/dist/assets/nav-BY_4EWRv.js +1 -0
  59. package/client/dist/assets/nav-CVXtv0wX2.js +1 -0
  60. package/client/dist/assets/nav-D0Erv9ZJ2.js +1 -0
  61. package/client/dist/assets/nav-DUuw9VIU2.js +1 -0
  62. package/client/dist/assets/nav-S4HM94vW.js +1 -0
  63. package/client/dist/assets/settings-BYCMtxOz.js +1 -0
  64. package/client/dist/assets/{settings-BHdPchJP.js → settings-B_v3zgJf.js} +1 -1
  65. package/client/dist/assets/{settings-BeCczBFS2.js → settings-BemR_e3F.js} +1 -1
  66. package/client/dist/assets/{settings-D54_cgl12.js → settings-Bp24JHlv2.js} +1 -1
  67. package/client/dist/assets/{settings-C_nY14Yz.js → settings-BvIwQ3A1.js} +1 -1
  68. package/client/dist/assets/{settings-BlLi719f.js → settings-Bx2ObkTR2.js} +1 -1
  69. package/client/dist/assets/{settings-CaZ26a0S.js → settings-C_T0-j9d.js} +1 -1
  70. package/client/dist/assets/{settings-cn0tbve62.js → settings-DhaFKpcw2.js} +1 -1
  71. package/client/dist/assets/{upload-CRuuzzvp.js → upload-Qh1NE3xi.js} +1 -1
  72. package/client/dist/assets/{value-CIr5hDMt.js → value-BMPeyInx.js} +1 -1
  73. package/client/dist/index.html +29 -29
  74. package/package.json +1 -1
  75. package/server/dist/agent-chat-router.js +2 -0
  76. package/server/dist/agent-operator-prompt.js +17 -1
  77. package/server/dist/db.js +51 -2
  78. package/server/dist/dev-ports.js +35 -0
  79. package/server/dist/global-plugins-router.js +62 -0
  80. package/server/dist/headroom-manager.js +971 -0
  81. package/server/dist/headroom-routing.js +53 -0
  82. package/server/dist/index.js +9 -6
  83. package/server/dist/mcp/guide.js +3 -0
  84. package/server/dist/mcp/tools/catalog.js +2 -0
  85. package/server/dist/mcp/tools/env.js +72 -0
  86. package/server/dist/mcp/tools/jobs.js +110 -2
  87. package/server/dist/path-resolver.js +84 -18
  88. package/server/dist/project-env.js +30 -0
  89. package/server/dist/project-registry.js +4 -2
  90. package/server/dist/project-router-jobs.js +126 -0
  91. package/server/dist/project-router-settings.js +10 -1
  92. package/server/dist/queue-manager.js +9 -1
  93. package/server/dist/rail-isolated-launch.js +5 -4
  94. package/server/dist/rail-pr-decision.js +27 -17
  95. package/server/dist/rail-pr-store.js +36 -0
  96. package/server/dist/rails-router.js +7 -1
  97. package/server/dist/setup-manager.js +32 -29
  98. package/server/dist/setup-prerequisites.js +3 -1
  99. package/server/dist/transient-children.js +266 -9
  100. package/server/dist/util/cli-prompt.js +3 -0
  101. package/server/dist/workspace-resolution.js +3 -3
  102. package/server/dist/worktree-env-discovery.js +172 -0
  103. package/client/dist/assets/AgentBrowserCapture-DQyeEm2V.js +0 -1
  104. package/client/dist/assets/AgentModeJobsPane-C-g1WNVG.js +0 -1
  105. package/client/dist/assets/AgentsPage-BWgglK7V.js +0 -86
  106. package/client/dist/assets/CodePage-BUcAp7SC.js +0 -2
  107. package/client/dist/assets/DocsDialog-PZHMN18B.js +0 -11
  108. package/client/dist/assets/DocsPage-D3fChfkj.js +0 -11
  109. package/client/dist/assets/IntegrationsPage-F87uxxVH.js +0 -3
  110. package/client/dist/assets/InteractiveJobComposer-DqDCiCa0.js +0 -19
  111. package/client/dist/assets/JobDetailModal-BWJR60fi.js +0 -1
  112. package/client/dist/assets/JobDetailPage-CjWE_jyd.js +0 -1
  113. package/client/dist/assets/JobsPage-LmnXkyCa.js +0 -1
  114. package/client/dist/assets/LoopsPage-DDNO9h9T.js +0 -1
  115. package/client/dist/assets/ProjectSettingsDialog-CX854C8e.js +0 -1
  116. package/client/dist/assets/agent-BI6vr-To.js +0 -1
  117. package/client/dist/assets/agent-BUGXI3Ok2.js +0 -1
  118. package/client/dist/assets/agent-Bph_-xt7.js +0 -1
  119. package/client/dist/assets/agent-Bvy2Csyd.js +0 -1
  120. package/client/dist/assets/agent-Bwkyg2oX2.js +0 -1
  121. package/client/dist/assets/agent-CLCyDaZh.js +0 -1
  122. package/client/dist/assets/agent-Cqs14QMr2.js +0 -1
  123. package/client/dist/assets/agent-DJ0EBUuP.js +0 -1
  124. package/client/dist/assets/dashboard-BjjS1OrL.js +0 -1
  125. package/client/dist/assets/dashboard-Bk6oSk1H2.js +0 -1
  126. package/client/dist/assets/dashboard-BrH-GdOg2.js +0 -1
  127. package/client/dist/assets/dashboard-BurhUI8_.js +0 -1
  128. package/client/dist/assets/dashboard-CAUnfDQL2.js +0 -1
  129. package/client/dist/assets/dashboard-C_ljpeYO.js +0 -1
  130. package/client/dist/assets/dashboard-D6OqDdj6.js +0 -1
  131. package/client/dist/assets/index-C695aPdV.css +0 -2
  132. package/client/dist/assets/index-Dw1N2-ci.js +0 -156
  133. package/client/dist/assets/integrations-4KZnYECp.js +0 -1
  134. package/client/dist/assets/integrations-7W266oqF2.js +0 -1
  135. package/client/dist/assets/integrations-BNuauK3o.js +0 -1
  136. package/client/dist/assets/integrations-CHy8tnpV.js +0 -1
  137. package/client/dist/assets/integrations-Cl_wD5AI.js +0 -1
  138. package/client/dist/assets/integrations-CuWnMR5L.js +0 -1
  139. package/client/dist/assets/integrations-Cy8nZ_dv2.js +0 -1
  140. package/client/dist/assets/integrations-zMqY4VU12.js +0 -1
  141. package/client/dist/assets/nav-40HzpIFb.js +0 -1
  142. package/client/dist/assets/nav-8yPhBn00.js +0 -1
  143. package/client/dist/assets/nav-B6PkGfTk2.js +0 -1
  144. package/client/dist/assets/nav-BHqMLrS72.js +0 -1
  145. package/client/dist/assets/nav-CGy4yx3C.js +0 -1
  146. package/client/dist/assets/nav-CXEDcRdv2.js +0 -1
  147. package/client/dist/assets/nav-CzKzuwH8.js +0 -1
  148. package/client/dist/assets/nav-EI_OhEAo.js +0 -1
  149. package/client/dist/assets/settings-D9bDDe2O.js +0 -1
  150. /package/client/dist/assets/{activity-BZNfOdiS.js → activity-BZZlEG3a.js} +0 -0
  151. /package/client/dist/assets/{activity--iN4Ad2R2.js → activity-BbWiDfn-2.js} +0 -0
  152. /package/client/dist/assets/{activity-CIOLxGvh.js → activity-D3Ic-HTS.js} +0 -0
  153. /package/client/dist/assets/{activity-DtxrAUMo2.js → activity-DFbvNqhE2.js} +0 -0
  154. /package/client/dist/assets/{activity-D8vQJrpW.js → activity-Dbl71S-E.js} +0 -0
  155. /package/client/dist/assets/{activity-BuVo5sPB.js → activity-DtzRy92x.js} +0 -0
  156. /package/client/dist/assets/{activity-6hM_ZSg9.js → activity-DvECTYGt.js} +0 -0
  157. /package/client/dist/assets/{activity-D2r2h3SE2.js → activity-FleOlK0l2.js} +0 -0
  158. /package/client/dist/assets/{addspec-D-JLDsUV.js → addspec-BKrH2Ucz.js} +0 -0
  159. /package/client/dist/assets/{addspec-DfhDbg5c.js → addspec-B_LQMHW3.js} +0 -0
  160. /package/client/dist/assets/{addspec-bsNDdqRm2.js → addspec-Bw_YQwo62.js} +0 -0
  161. /package/client/dist/assets/{addspec-BMtLZLW62.js → addspec-CFxGvmJR2.js} +0 -0
  162. /package/client/dist/assets/{addspec-mgPOt5q02.js → addspec-CR8MB5Fr2.js} +0 -0
  163. /package/client/dist/assets/{addspec-CP0HRuxY.js → addspec-DaA-CbTt.js} +0 -0
  164. /package/client/dist/assets/{addspec-DxW6oPsk.js → addspec-DrXqP8ip.js} +0 -0
  165. /package/client/dist/assets/{addspec-CRuvWn8d.js → addspec-NBbcTbLc.js} +0 -0
  166. /package/client/dist/assets/{agents-BpoUaoW92.js → agents-B9pFSJQI2.js} +0 -0
  167. /package/client/dist/assets/{agents-78bTZGZh.js → agents-BHgn--3j.js} +0 -0
  168. /package/client/dist/assets/{agents-BUdEi3-N.js → agents-B_qGaB0F.js} +0 -0
  169. /package/client/dist/assets/{agents-Cev2oFfX.js → agents-CGDn_3kB.js} +0 -0
  170. /package/client/dist/assets/{agents-bvyRLczL.js → agents-CP8_ezYG.js} +0 -0
  171. /package/client/dist/assets/{agents-BLhWCmDS2.js → agents-CV-_xBvX2.js} +0 -0
  172. /package/client/dist/assets/{agents-CWo-KyAB.js → agents-HFCqQH0Z.js} +0 -0
  173. /package/client/dist/assets/{agents-DDtCJ5M02.js → agents-VsyFhGOS2.js} +0 -0
  174. /package/client/dist/assets/{agentstudio-BMQxc_bz.js → agentstudio-BEp7Sb46.js} +0 -0
  175. /package/client/dist/assets/{agentstudio-Dtq3dGYk.js → agentstudio-BOjG6tgJ.js} +0 -0
  176. /package/client/dist/assets/{agentstudio-C_Jq8Tl4.js → agentstudio-Br3WD7Xs.js} +0 -0
  177. /package/client/dist/assets/{agentstudio-sI27TpBu2.js → agentstudio-CuTt3ZGe2.js} +0 -0
  178. /package/client/dist/assets/{agentstudio-CWgXG5W52.js → agentstudio-D2A5peWV2.js} +0 -0
  179. /package/client/dist/assets/{agentstudio-CZm2rOzt.js → agentstudio-Dxe_94PK.js} +0 -0
  180. /package/client/dist/assets/{agentstudio-COZriimI2.js → agentstudio-RfZavULt2.js} +0 -0
  181. /package/client/dist/assets/{agentstudio-jKMTdT70.js → agentstudio-RsxnZtUA.js} +0 -0
  182. /package/client/dist/assets/{aiedit-igmw-ZoZ2.js → aiedit-26p5A_HY2.js} +0 -0
  183. /package/client/dist/assets/{aiedit-6CHdb_iv2.js → aiedit-CV520D4W2.js} +0 -0
  184. /package/client/dist/assets/{aiedit-pc5JDUq1.js → aiedit-CcugGPbS.js} +0 -0
  185. /package/client/dist/assets/{aiedit-eMN4eQPF.js → aiedit-D0Syl-mC.js} +0 -0
  186. /package/client/dist/assets/{aiedit-hknZlly82.js → aiedit-DnBzjlVz2.js} +0 -0
  187. /package/client/dist/assets/{aiedit-B03pD_Na.js → aiedit-DrIjSojo.js} +0 -0
  188. /package/client/dist/assets/{aiedit-DYtnZU9H.js → aiedit-DrfHQnlz.js} +0 -0
  189. /package/client/dist/assets/{aiedit-BtRqRxML.js → aiedit-a-Z-g5iC.js} +0 -0
  190. /package/client/dist/assets/{analytics-C5dpiS0o.js → analytics-4-eskbtX.js} +0 -0
  191. /package/client/dist/assets/{analytics-CR1TJqUi2.js → analytics-4HvXb0Vn2.js} +0 -0
  192. /package/client/dist/assets/{analytics-rmHuJv0V.js → analytics-Bd9rHGjV.js} +0 -0
  193. /package/client/dist/assets/{analytics-BWMUZ2Pq2.js → analytics-Bpe41fnX2.js} +0 -0
  194. /package/client/dist/assets/{analytics-Bj-SmKHa.js → analytics-CpSTNfui.js} +0 -0
  195. /package/client/dist/assets/{analytics-Ce-sPORu.js → analytics-CxDYcBl9.js} +0 -0
  196. /package/client/dist/assets/{analytics-CCprAqk3.js → analytics-DEe5BMz8.js} +0 -0
  197. /package/client/dist/assets/{analytics-DfNdXR0y2.js → analytics-DcOITHla2.js} +0 -0
  198. /package/client/dist/assets/{attachments-BjyMmrwE.js → attachments-CA2f3qL3.js} +0 -0
  199. /package/client/dist/assets/{attachments-DCZOL1RU.js → attachments-CHDbhKeH.js} +0 -0
  200. /package/client/dist/assets/{attachments-rNn1ekRy2.js → attachments-CKAY5aYG2.js} +0 -0
  201. /package/client/dist/assets/{attachments-BgBNSqQd.js → attachments-CgOQ9K-6.js} +0 -0
  202. /package/client/dist/assets/{attachments-DPCmkFZu2.js → attachments-D2jwJXQ42.js} +0 -0
  203. /package/client/dist/assets/{attachments-C9GTTJsx2.js → attachments-DlEQu56g2.js} +0 -0
  204. /package/client/dist/assets/{attachments-Ci6_42Kh.js → attachments-DvxQbBTC.js} +0 -0
  205. /package/client/dist/assets/{attachments-DL-bPy9E.js → attachments-jVdKzAXn.js} +0 -0
  206. /package/client/dist/assets/{auth-Cvsb7-Ek.js → auth-DpZq5p1e.js} +0 -0
  207. /package/client/dist/assets/{browser-Cvg-QHvd2.js → browser-BQFDxrRq.js} +0 -0
  208. /package/client/dist/assets/{browser-rWKj-RR_2.js → browser-BbJ_q_OT2.js} +0 -0
  209. /package/client/dist/assets/{browser-Cc0iDqUi.js → browser-C4VJ5CW12.js} +0 -0
  210. /package/client/dist/assets/{browser-BPkhILSJ.js → browser-Cl-FwPXs.js} +0 -0
  211. /package/client/dist/assets/{browser-CdS6O1Qb.js → browser-DM8G151q.js} +0 -0
  212. /package/client/dist/assets/{browser-FRv8P02E.js → browser-Do2jf8_N.js} +0 -0
  213. /package/client/dist/assets/{browser-BqLqJVVT.js → browser-JsiohNmW.js} +0 -0
  214. /package/client/dist/assets/{browser-BijVYG0Y2.js → browser-kA31eYhu2.js} +0 -0
  215. /package/client/dist/assets/{chat-VMflhzxn.js → chat-0dg5hOo_.js} +0 -0
  216. /package/client/dist/assets/{chat-DdwZjT8K2.js → chat-BMWD_Rx12.js} +0 -0
  217. /package/client/dist/assets/{chat-Bom6bqK3.js → chat-BalviUAD.js} +0 -0
  218. /package/client/dist/assets/{chat-DsbwJhus.js → chat-CJddjN3D2.js} +0 -0
  219. /package/client/dist/assets/{chat-Dnwg-NpQ.js → chat-D5xEtsf3.js} +0 -0
  220. /package/client/dist/assets/{chat-vylxqR0P2.js → chat-Ds8GvCnv.js} +0 -0
  221. /package/client/dist/assets/{chat-BgL3zv6x2.js → chat-SaG-ng1x2.js} +0 -0
  222. /package/client/dist/assets/{chat-Bh3NdgJs.js → chat-n43nZGvn.js} +0 -0
  223. /package/client/dist/assets/{code-thSEptMx.js → code-B62fClk-.js} +0 -0
  224. /package/client/dist/assets/{code-DzC1rMk12.js → code-Bit_z2Xd2.js} +0 -0
  225. /package/client/dist/assets/{code-BRcDlze52.js → code-BotxM43N2.js} +0 -0
  226. /package/client/dist/assets/{code-UPVvmAKM2.js → code-C9U6M5-e2.js} +0 -0
  227. /package/client/dist/assets/{code-BdMy3Ffq.js → code-CIPmDEd0.js} +0 -0
  228. /package/client/dist/assets/{code-DgeHz9CB.js → code-DUe1Bouz.js} +0 -0
  229. /package/client/dist/assets/{code-CwnBPPyA.js → code-F_KjccGf.js} +0 -0
  230. /package/client/dist/assets/{code-CeQ0FZpC.js → code-HDK4P6Rx.js} +0 -0
  231. /package/client/dist/assets/{commands-DkU0qliq.js → commands-BFQZc9AG.js} +0 -0
  232. /package/client/dist/assets/{commands-u-4eEHCN.js → commands-BMkC5-ki.js} +0 -0
  233. /package/client/dist/assets/{commands-CSDs9q_2.js → commands-BllkJauO.js} +0 -0
  234. /package/client/dist/assets/{commands-xHDDGfcP2.js → commands-CWX9WmDX2.js} +0 -0
  235. /package/client/dist/assets/{commands-C4Y3C-PF2.js → commands-CzFSoIiq2.js} +0 -0
  236. /package/client/dist/assets/{commands-CckaBWdV.js → commands-DCJ-R9E4.js} +0 -0
  237. /package/client/dist/assets/{commands-JWMfGDmr.js → commands-KBbhsnw8.js} +0 -0
  238. /package/client/dist/assets/{commands-RHOchN4n2.js → commands-cKTaLwwV2.js} +0 -0
  239. /package/client/dist/assets/{common-DmqBPwZG.js → common-BfQD173j.js} +0 -0
  240. /package/client/dist/assets/{common-DhWTkocg.js → common-CF8iGXrG.js} +0 -0
  241. /package/client/dist/assets/{common-Bwafujnc2.js → common-Cfmwcrl52.js} +0 -0
  242. /package/client/dist/assets/{common-C-vU-j-I.js → common-D2cimsul.js} +0 -0
  243. /package/client/dist/assets/{common-C5HKSbbz.js → common-DH7fjyL1.js} +0 -0
  244. /package/client/dist/assets/{common-CYaT2yHp.js → common-DXrmj6WD.js} +0 -0
  245. /package/client/dist/assets/{common-BM3LFLCE2.js → common-DZbXlmq72.js} +0 -0
  246. /package/client/dist/assets/{common-DiPTT7V_2.js → common-DtXmzX2o2.js} +0 -0
  247. /package/client/dist/assets/{explore-UvW1jEMa.js → explore-BEpIs343.js} +0 -0
  248. /package/client/dist/assets/{explore-CNBzrEPS.js → explore-BO_OinBD.js} +0 -0
  249. /package/client/dist/assets/{explore-C0k8HrkN.js → explore-Bhy7WWXv.js} +0 -0
  250. /package/client/dist/assets/{explore-B7fblXBb2.js → explore-CAc8Qzu32.js} +0 -0
  251. /package/client/dist/assets/{explore-D_mWBYCS2.js → explore-DCZL9gRN2.js} +0 -0
  252. /package/client/dist/assets/{explore-Dahc1lOx.js → explore-DW_YTkQh.js} +0 -0
  253. /package/client/dist/assets/{explore-BHtEpoNN2.js → explore-ELbrSZyQ2.js} +0 -0
  254. /package/client/dist/assets/{explore-BKVV5JSu.js → explore-_XyU5e7R.js} +0 -0
  255. /package/client/dist/assets/{format-command-CuWuRvka.js → format-command-Db1viey1.js} +0 -0
  256. /package/client/dist/assets/{jira-uNH1gETL2.js → jira-B5wszJ1-2.js} +0 -0
  257. /package/client/dist/assets/{jira-BHAKtc4B.js → jira-C5UjxHE4.js} +0 -0
  258. /package/client/dist/assets/{jira-D5efgwp_.js → jira-CQ7mrZde.js} +0 -0
  259. /package/client/dist/assets/{jira-bDs7Im2C.js → jira-DIRkZk9U.js} +0 -0
  260. /package/client/dist/assets/{jira-CPpgA-5z2.js → jira-DTYu3hJi2.js} +0 -0
  261. /package/client/dist/assets/{jira-B3613-gj.js → jira-DeIjwCK3.js} +0 -0
  262. /package/client/dist/assets/{jira-DS7ownDy.js → jira-DtZpokjJ.js} +0 -0
  263. /package/client/dist/assets/{jira-Be369RIR2.js → jira-ZdKb-50F2.js} +0 -0
  264. /package/client/dist/assets/{jobs-CE8qeIYj.js → jobs-BFIdeDTw.js} +0 -0
  265. /package/client/dist/assets/{jobs-BgQzB0Sx2.js → jobs-BJ-Gcao22.js} +0 -0
  266. /package/client/dist/assets/{jobs-1GV2-4zd2.js → jobs-DAGiPVIS2.js} +0 -0
  267. /package/client/dist/assets/{jobs-26F9gGcE.js → jobs-DAU8C_tZ.js} +0 -0
  268. /package/client/dist/assets/{jobs-BqWui9_f.js → jobs-Da0GaaSc.js} +0 -0
  269. /package/client/dist/assets/{jobs-D5sZzgLs.js → jobs-DrYmsKy5.js} +0 -0
  270. /package/client/dist/assets/{jobs-Wh7dn28q2.js → jobs-P3unxtxo2.js} +0 -0
  271. /package/client/dist/assets/{jobs-DzeuASRf.js → jobs-p360zdf1.js} +0 -0
  272. /package/client/dist/assets/{loops-CvOWsi5r.js → loops-Bi4ywYGn.js} +0 -0
  273. /package/client/dist/assets/{loops-BvqQ-bHR2.js → loops-BjK8lmoZ2.js} +0 -0
  274. /package/client/dist/assets/{loops-Brnx4Fji.js → loops-CO6q75W8.js} +0 -0
  275. /package/client/dist/assets/{loops-K5_HXfJa.js → loops-D3wdUkZV.js} +0 -0
  276. /package/client/dist/assets/{loops-D6D3XHjj.js → loops-DDs4KPu_.js} +0 -0
  277. /package/client/dist/assets/{loops-LIgO_-eM.js → loops-DKzYFcq6.js} +0 -0
  278. /package/client/dist/assets/{loops-DJNhp17p2.js → loops-Du-bNVpc2.js} +0 -0
  279. /package/client/dist/assets/{loops-vhJdbcz92.js → loops-DvGbSfxw2.js} +0 -0
  280. /package/client/dist/assets/{mcp-XJNRfxVp2.js → mcp-BG-OCJca2.js} +0 -0
  281. /package/client/dist/assets/{mcp-DtbxuH3V2.js → mcp-CbJ04oFS2.js} +0 -0
  282. /package/client/dist/assets/{mcp-sRmWE8WJ.js → mcp-CrWdq5db.js} +0 -0
  283. /package/client/dist/assets/{mcp-H-gnQUdN.js → mcp-Dd844F5_.js} +0 -0
  284. /package/client/dist/assets/{mcp-Dcl-XxkR.js → mcp-DfmzoT5t.js} +0 -0
  285. /package/client/dist/assets/{mcp-CjVKXAhD2.js → mcp-DyULurYS2.js} +0 -0
  286. /package/client/dist/assets/{mcp-CIH0pH1K.js → mcp-HwBbQDk0.js} +0 -0
  287. /package/client/dist/assets/{mcp-N1nzp8oL.js → mcp-zSJ2TsJj.js} +0 -0
  288. /package/client/dist/assets/{setup-BuQNKztt2.js → setup-1vN48B-m2.js} +0 -0
  289. /package/client/dist/assets/{setup-BwMovM9z2.js → setup-BmJ0Kx16.js} +0 -0
  290. /package/client/dist/assets/{setup-RiUHzq7E.js → setup-D2CmgAro.js} +0 -0
  291. /package/client/dist/assets/{setup-BXpw07r-.js → setup-DQWsu2TR.js} +0 -0
  292. /package/client/dist/assets/{setup-D84y3wx-.js → setup-JeBwoXoM.js} +0 -0
  293. /package/client/dist/assets/{setup-DU0ULX8q2.js → setup-T_ApeQDV2.js} +0 -0
  294. /package/client/dist/assets/{setup-BiduSX9d.js → setup-mXnzww4f.js} +0 -0
  295. /package/client/dist/assets/{setup-7J8TjG4O.js → setup-q0wRHUp1.js} +0 -0
  296. /package/client/dist/assets/{specs-CWtKcVDC.js → specs-BGRKhM8t.js} +0 -0
  297. /package/client/dist/assets/{specs-CBDvEYKv.js → specs-C6J2zrLM.js} +0 -0
  298. /package/client/dist/assets/{specs-D2clrt2c2.js → specs-CT8exGOy2.js} +0 -0
  299. /package/client/dist/assets/{specs-C9Sd7BhH2.js → specs-Ce5y2iFc2.js} +0 -0
  300. /package/client/dist/assets/{specs-CIPr9reA2.js → specs-DZDoZsDq.js} +0 -0
  301. /package/client/dist/assets/{specs-PozUNhqb.js → specs-DbtIzV8a.js} +0 -0
  302. /package/client/dist/assets/{specs-DTplt2XM.js → specs-GkiL-snY.js} +0 -0
  303. /package/client/dist/assets/{specs-CmEZY57v.js → specs-PGIOzMtc.js} +0 -0
  304. /package/client/dist/assets/{terminal-xGbCZJHg.js → terminal-BNSg2lR7.js} +0 -0
  305. /package/client/dist/assets/{terminal-De2Brd23.js → terminal-BTpE7iki.js} +0 -0
  306. /package/client/dist/assets/{terminal-DFPNRLKp.js → terminal-CFt56A5f.js} +0 -0
  307. /package/client/dist/assets/{terminal-BRm03iFA2.js → terminal-Cvabyzm42.js} +0 -0
  308. /package/client/dist/assets/{terminal-DxQWCqSD2.js → terminal-D0z12_sJ2.js} +0 -0
  309. /package/client/dist/assets/{terminal-Z7KsDM_n.js → terminal-DDk_bTw0.js} +0 -0
  310. /package/client/dist/assets/{terminal-cqfd3EDV.js → terminal-DEyt0prF.js} +0 -0
  311. /package/client/dist/assets/{terminal-WSAvHXoU.js → terminal-a6Uq8B0p.js} +0 -0
  312. /package/client/dist/assets/{tickets-CkfbISuK.js → tickets-BHv3ewvq.js} +0 -0
  313. /package/client/dist/assets/{tickets-C3b8cHhd2.js → tickets-BIxU86j12.js} +0 -0
  314. /package/client/dist/assets/{tickets-SuX_HkK4.js → tickets-C2BhwzwR.js} +0 -0
  315. /package/client/dist/assets/{tickets-DTHo9c3C.js → tickets-D1IeX2EW.js} +0 -0
  316. /package/client/dist/assets/{tickets-BoXom7l8.js → tickets-DZut8Ryt.js} +0 -0
  317. /package/client/dist/assets/{tickets-CWYFvx1W2.js → tickets-LfK6LzKl2.js} +0 -0
  318. /package/client/dist/assets/{tickets-CFXnJsYF.js → tickets-dQfsc7Ph.js} +0 -0
  319. /package/client/dist/assets/{tickets-B7zT4IRf.js → tickets-sVun0I6v.js} +0 -0
@@ -1 +1 @@
1
- import{a as e}from"./chunk-BNv3lrIs.js";import{t}from"./brain-BBNUUrUI.js";import{Cn as n,Gn as r,Hn as i,Kn as a,Nt as o,Rn as s,ft as c,kt as l,nt as u,rt as d}from"./index-Dw1N2-ci.js";import{r as f,t as p}from"./TemplatePreviewModal-DcHFbLA8.js";var m=e(a(),1),h=e(r(),1),g=n();function _({loop:e,onClose:n}){let{t:r}=s(`loops`),a=i();return(0,m.useEffect)(()=>{let e=e=>{e.key===`Escape`&&n()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[n]),(0,h.createPortal)((0,g.jsxs)(`div`,{"data-testid":`loop-preview-modal`,className:`fixed inset-0 z-[65] flex items-center justify-center p-4`,children:[(0,g.jsx)(`div`,{className:`absolute inset-0 bg-black/60 backdrop-blur-sm`,onClick:n,"aria-hidden":!0}),(0,g.jsxs)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-label":e.name,className:`relative flex max-h-[80vh] w-full max-w-lg flex-col gap-4 overflow-hidden rounded-xl border border-border/30 bg-popover p-6 shadow-xl backdrop-blur-md`,children:[(0,g.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,g.jsxs)(`div`,{className:`flex items-center gap-2 pr-6`,children:[(0,g.jsx)(t,{className:`h-4 w-4 shrink-0 text-accent-highlight`}),(0,g.jsx)(`span`,{className:`min-w-0 truncate text-base font-semibold text-foreground`,children:e.name}),(0,g.jsxs)(`span`,{className:d(`inline-flex shrink-0 items-center gap-1 rounded-full border px-1.5 py-px text-[10px] font-medium uppercase tracking-wide`,e.locked?`border-accent-info/40 bg-accent-info/10 text-accent-info`:e.status===`published`?`border-accent-success/40 bg-accent-success/10 text-accent-success`:`border-border/60 bg-surface/60 text-foreground/60`),children:[e.locked&&(0,g.jsx)(o,{className:`h-2.5 w-2.5`}),e.locked?r(`preview.builtin`):r(`status.${e.status??`draft`}`,{defaultValue:e.status??``})]})]}),e.description&&(0,g.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:e.description})]}),(0,g.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:r(`preview.limits`,{iterations:e.graph.config.maxIterations,timeout:e.graph.config.timeoutMinutes})}),(0,g.jsxs)(`div`,{className:`min-h-0 space-y-1.5 overflow-y-auto pr-1`,children:[(0,g.jsx)(`span`,{className:`block text-[10px] font-medium uppercase tracking-wide text-muted-foreground`,children:r(`preview.steps`)}),e.graph.nodes.map((e,t)=>{let n=p[e.type]??c,i=f(e);return(0,g.jsxs)(`div`,{className:`rounded border border-border bg-surface/30 p-2`,children:[(0,g.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs font-medium text-foreground`,children:[(0,g.jsxs)(`span`,{className:`text-[10px] tabular-nums text-muted-foreground`,children:[t+1,`.`]}),(0,g.jsx)(n,{className:`h-3.5 w-3.5 text-accent-primary`}),r(`builder.nodes.${e.type}`)]}),i&&(0,g.jsx)(`pre`,{className:`mt-1 whitespace-pre-wrap break-words font-mono text-[11px] text-muted-foreground`,children:i})]},e.id)})]}),(0,g.jsxs)(`div`,{className:`flex shrink-0 items-center justify-end gap-2`,children:[(0,g.jsx)(u,{variant:`ghost`,onClick:n,children:r(`common:actions.close`)}),!e.locked&&(0,g.jsxs)(u,{"data-testid":`loop-preview-open-builder`,onClick:()=>{n(),a(`/loops/${encodeURIComponent(e.id)}/edit`)},children:[(0,g.jsx)(l,{className:`mr-1.5 h-3.5 w-3.5`}),r(`preview.openInBuilder`)]})]})]})]}),document.body)}export{_ as LoopPreviewModal};
1
+ import{a as e}from"./chunk-BNv3lrIs.js";import{t}from"./brain-BPbhM1Jx.js";import{$t as n,Bn as r,Gn as i,Jn as a,Yn as o,Yt as s,jt as c,lt as l,nt as u,tt as d}from"./index-89SuhD4Y.js";import{r as f,t as p}from"./TemplatePreviewModal-CERf1IYB.js";var m=e(o(),1),h=e(a(),1),g=l();function _({loop:e,onClose:a}){let{t:o}=r(`loops`),l=i();return(0,m.useEffect)(()=>{let e=e=>{e.key===`Escape`&&a()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[a]),(0,h.createPortal)((0,g.jsxs)(`div`,{"data-testid":`loop-preview-modal`,className:`fixed inset-0 z-[65] flex items-center justify-center p-4`,children:[(0,g.jsx)(`div`,{className:`absolute inset-0 bg-black/60 backdrop-blur-sm`,onClick:a,"aria-hidden":!0}),(0,g.jsxs)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-label":e.name,className:`relative flex max-h-[80vh] w-full max-w-lg flex-col gap-4 overflow-hidden rounded-xl border border-border/30 bg-popover p-6 shadow-xl backdrop-blur-md`,children:[(0,g.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,g.jsxs)(`div`,{className:`flex items-center gap-2 pr-6`,children:[(0,g.jsx)(t,{className:`h-4 w-4 shrink-0 text-accent-highlight`}),(0,g.jsx)(`span`,{className:`min-w-0 truncate text-base font-semibold text-foreground`,children:e.name}),(0,g.jsxs)(`span`,{className:u(`inline-flex shrink-0 items-center gap-1 rounded-full border px-1.5 py-px text-[10px] font-medium uppercase tracking-wide`,e.locked?`border-accent-info/40 bg-accent-info/10 text-accent-info`:e.status===`published`?`border-accent-success/40 bg-accent-success/10 text-accent-success`:`border-border/60 bg-surface/60 text-foreground/60`),children:[e.locked&&(0,g.jsx)(n,{className:`h-2.5 w-2.5`}),e.locked?o(`preview.builtin`):o(`status.${e.status??`draft`}`,{defaultValue:e.status??``})]})]}),e.description&&(0,g.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:e.description})]}),(0,g.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:o(`preview.limits`,{iterations:e.graph.config.maxIterations,timeout:e.graph.config.timeoutMinutes})}),(0,g.jsxs)(`div`,{className:`min-h-0 space-y-1.5 overflow-y-auto pr-1`,children:[(0,g.jsx)(`span`,{className:`block text-[10px] font-medium uppercase tracking-wide text-muted-foreground`,children:o(`preview.steps`)}),e.graph.nodes.map((e,t)=>{let n=p[e.type]??c,r=f(e);return(0,g.jsxs)(`div`,{className:`rounded border border-border bg-surface/30 p-2`,children:[(0,g.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs font-medium text-foreground`,children:[(0,g.jsxs)(`span`,{className:`text-[10px] tabular-nums text-muted-foreground`,children:[t+1,`.`]}),(0,g.jsx)(n,{className:`h-3.5 w-3.5 text-accent-primary`}),o(`builder.nodes.${e.type}`)]}),r&&(0,g.jsx)(`pre`,{className:`mt-1 whitespace-pre-wrap break-words font-mono text-[11px] text-muted-foreground`,children:r})]},e.id)})]}),(0,g.jsxs)(`div`,{className:`flex shrink-0 items-center justify-end gap-2`,children:[(0,g.jsx)(d,{variant:`ghost`,onClick:a,children:o(`common:actions.close`)}),!e.locked&&(0,g.jsxs)(d,{"data-testid":`loop-preview-open-builder`,onClick:()=>{a(),l(`/loops/${encodeURIComponent(e.id)}/edit`)},children:[(0,g.jsx)(s,{className:`mr-1.5 h-3.5 w-3.5`}),o(`preview.openInBuilder`)]})]})]})]}),document.body)}export{_ as LoopPreviewModal};
@@ -0,0 +1 @@
1
+ import{a as e}from"./chunk-BNv3lrIs.js";import{t}from"./upload-Qh1NE3xi.js";import{Bn as n,D as r,E as i,G as a,Gn as o,J as s,K as c,Kt as l,Nt as u,O as d,Ot as f,Rn as p,T as m,Tt as h,W as g,Y as _,Yn as v,Yt as y,_n as b,hn as x,it as S,k as C,lt as w,nt as T,q as ee,qt as E,rt as D,tt as O,vn as k,z as A,zn as j}from"./index-89SuhD4Y.js";import{n as te}from"./TemplatePreviewModal-CERf1IYB.js";var ne=p(`file-down`,[[`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 18v-6`,key:`17g6i2`}],[`path`,{d:`m9 15 3 3 3-3`,key:`1npd3o`}]]),re=p(`file-up`,[[`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`}]]),M=e(v(),1);function ie(e){return{specrailsLoops:1,loops:e.map(e=>({name:e.name,description:e.description,graph:e.graph}))}}function N(e){let t=e;return!!t&&typeof t.name==`string`&&!!t.graph&&typeof t.graph==`object`}function ae(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:N(t)?[t]:[]).filter(N);if(n.length===0)throw Error(`no-loops`);return n.map(e=>({name:e.name,description:e.description??null,graph:e.graph}))}function oe(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 P=[`API`,`Automation`,`CI`,`Database`,`Debugging`,`DevOps`,`Docs`,`Git`,`Maintenance`,`Performance`,`Planning`,`Quality`,`Review`,`Security`,`Testing`];function se(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):!0)}function ce(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 P){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}var F=w();function le({loop:e,projects:t,onClose:r,onExecute:o}){let{t:l}=n(`loops`),u=e!==null,[d,f]=(0,M.useState)(``),[p,h]=(0,M.useState)(``),[v,y]=(0,M.useState)(``),[b,x]=(0,M.useState)(`medium`),S=t.find(e=>e.id===(d||t[0]?.id)),C=(0,M.useMemo)(()=>S?.providers??(S?.provider?[S.provider]:[]),[S]),w=p||C[0]||``,T=(0,M.useMemo)(()=>i(w),[w]),D=v||m(w),k=w?A(w):!1;return(0,F.jsx)(g,{open:u,onOpenChange:e=>{e||r()},children:(0,F.jsx)(a,{movableResizable:!0,className:`max-w-sm`,children:e&&(0,F.jsxs)(F.Fragment,{children:[(0,F.jsxs)(s,{children:[(0,F.jsx)(_,{children:l(`run.title`,{name:e.name})}),(0,F.jsx)(c,{children:l(`run.subtitle`)})]}),(0,F.jsx)(`label`,{className:`block text-[11px] font-medium text-muted-foreground`,children:l(`run.project`)}),t.length===0?(0,F.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:l(`run.noProjects`)}):(0,F.jsx)(`select`,{"aria-label":l(`run.project`),"data-testid":`run-project-select`,value:d||t[0]?.id,onChange:e=>{f(e.target.value),h(``),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:t.map(e=>(0,F.jsx)(`option`,{value:e.id,children:e.name},e.id))}),C.length>1&&(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)(`label`,{className:`block text-[11px] font-medium text-muted-foreground`,children:l(`run.provider`)}),(0,F.jsx)(`select`,{"aria-label":l(`run.provider`),value:w,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:C.map(e=>(0,F.jsx)(`option`,{value:e,children:e},e))})]}),T.length>0&&(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)(`label`,{className:`block text-[11px] font-medium text-muted-foreground`,children:l(`run.model`)}),(0,F.jsx)(`select`,{"aria-label":l(`run.model`),"data-testid":`run-model-select`,value:D,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:T.map(e=>(0,F.jsx)(`option`,{value:e.value,children:e.label},e.value))})]}),k&&(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)(`label`,{className:`block text-[11px] font-medium text-muted-foreground`,children:l(`run.effort`)}),(0,F.jsxs)(`select`,{"aria-label":l(`run.effort`),value:b,onChange:e=>x(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:[(0,F.jsx)(`option`,{value:`low`,children:`low`}),(0,F.jsx)(`option`,{value:`medium`,children:`medium`}),(0,F.jsx)(`option`,{value:`high`,children:`high`})]})]}),(0,F.jsxs)(ee,{children:[(0,F.jsx)(O,{variant:`ghost`,onClick:r,children:l(`common:actions.cancel`)}),(0,F.jsxs)(O,{onClick:()=>{let e=d||t[0]?.id;e&&o({projectId:e,provider:C.length>1?w:void 0,model:T.length>0?D:void 0,effort:k?b:void 0})},disabled:t.length===0,children:[(0,F.jsx)(E,{className:`w-3.5 h-3.5 mr-1.5`}),l(`run.execute`)]})]})]})})})}var ue={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 I({status:e}){let{t}=n(`loops`);return(0,F.jsx)(`span`,{className:T(`inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-medium ring-1 ring-inset`,ue[e]),children:t(`status.${e}`)})}function L(){let{t:e}=n(`loops`),t=o(),i=(0,M.useCallback)(e=>e.replace(/:/g,`_`),[]),p=(0,M.useCallback)((t,n)=>e(`catalog.${i(t)}.name`,{defaultValue:n}),[e,i]),m=(0,M.useCallback)((t,n)=>e(`catalog.${i(t)}.description`,{defaultValue:n}),[e,i]),[v,y]=(0,M.useState)([]),[w,E]=(0,M.useState)([]),[A,N]=(0,M.useState)([]),[P,ue]=(0,M.useState)(!0),[I,L]=(0,M.useState)(null),[B,V]=(0,M.useState)(null),[H,U]=(0,M.useState)(`use`),[W,G]=(0,M.useState)(null),[K,de]=(0,M.useState)(new Set),fe=`specrails-desktop:loop-template-filter`,pe=(()=>{try{let e=localStorage.getItem(fe),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:[]}}})(),[q,me]=(0,M.useState)(pe.query),[J,he]=(0,M.useState)(pe.categories);(0,M.useEffect)(()=>{try{localStorage.setItem(fe,JSON.stringify({query:q,categories:J}))}catch{}},[q,J]);let ge=(0,M.useCallback)(e=>{he(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])},[]),_e=(0,M.useCallback)(()=>{me(``),he([])},[]),ve=(0,M.useRef)(null),{projects:ye,setActiveProjectId:be}=S(),xe=(0,M.useCallback)(e=>{de(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),Y=(0,M.useCallback)(e=>{if(e.length===0)return;let t=new Blob([JSON.stringify(ie(e),null,2)],{type:`application/json`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=oe(e),r.click(),URL.revokeObjectURL(n)},[]),X=(0,M.useCallback)(async()=>{try{let[e,t]=await Promise.all([C.list(),C.templates()]);y(e),E(t)}catch{j.error(e(`errors.load`))}finally{ue(!1)}try{N(await C.factoryLoops())}catch{N([])}},[e]);(0,M.useEffect)(()=>{X()},[X]);let Se=(0,M.useCallback)(async t=>{try{let n=ae(await t.text()),{imported:r,skipped:i}=await C.importLoops(n);await X(),r.length&&j.success(e(`import.done`,{count:r.length})),i.length&&j.warning(e(`import.skipped`,{count:i.length,names:i.join(`, `)})),!r.length&&!i.length&&j.warning(e(`import.invalid`))}catch(t){let n=t instanceof Error?t.message:``;j.error(e(n===`invalid-json`||n===`no-loops`?`import.invalid`:`errors.save`))}},[X,e]),Z=(0,M.useCallback)(e=>t(`/loops/${e}/edit`),[t]),Ce=(0,M.useCallback)(async()=>{try{Z((await C.create({name:e(`newLoopName`)})).id)}catch{j.error(e(`errors.save`))}},[e,Z]),we=(0,M.useCallback)(async t=>{try{Z((await C.fromTemplate(t)).id)}catch{j.error(e(`errors.save`))}},[e,Z]),Te=(0,M.useCallback)(async t=>{try{Z((await C.forkFactory(t)).id)}catch{j.error(e(`errors.save`))}},[e,Z]),Ee=(0,M.useCallback)(async({projectId:n,provider:r,model:i,effort:a})=>{let o=W;if(o){G(null);try{let{loopRunId:s}=await C.runStandalone(n,o.id,{aiEngine:r,model:i,reasoning_effort:a});be(n),t(`/jobs/${s}`),j.success(e(`run.launched`,{name:o.name}))}catch{j.error(e(`errors.save`))}}},[W,t,be,e]),De=(0,M.useCallback)(e=>{U(`fork`),V({id:e.id,name:p(e.id,e.name),description:m(e.id,e.description),tags:e.claudeOnly?[`claude-only`]:[],graph:e.graph})},[p,m]),Oe=(0,M.useCallback)(async t=>{try{await C.publish(t),await X()}catch(t){t instanceof d?j.error(e(`errors.publishInvalid`)):j.error(e(`errors.save`))}},[e,X]),ke=(0,M.useCallback)(async t=>{try{await C.unpublish(t),await X()}catch{j.error(e(`errors.save`))}},[e,X]),Ae=(0,M.useCallback)(async t=>{try{await C.duplicate(t),await X()}catch{j.error(e(`errors.save`))}},[e,X]),je=(0,M.useCallback)(e=>L(e),[]),Me=(0,M.useCallback)(async()=>{let t=I;if(t){L(null);try{await C.remove(t),await X()}catch{j.error(e(`errors.save`))}}},[I,e,X]),Q=v.filter(e=>e.status===`draft`),$=v.filter(e=>e.status===`published`),Ne=ce(w),Pe=se(w.map(t=>({...t,searchTerms:`${p(t.id,t.name)} ${m(t.id,t.description)} ${t.category?e(`categories.${t.category}`,{defaultValue:t.category}):``}`})),{query:q,categories:J}),Fe=q.trim()!==``||J.length>0;return(0,F.jsxs)(`div`,{className:`h-full overflow-y-auto`,children:[(0,F.jsxs)(`div`,{className:`max-w-5xl mx-auto px-6 py-6`,children:[(0,F.jsxs)(`div`,{className:`flex items-start justify-between mb-6`,children:[(0,F.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[(0,F.jsx)(h,{className:`w-5 h-5 text-accent-primary`}),(0,F.jsxs)(`div`,{children:[(0,F.jsx)(`h1`,{className:`text-lg font-semibold text-foreground`,children:e(`title`)}),(0,F.jsx)(`p`,{className:`text-xs text-muted-foreground mt-0.5`,children:e(`subtitle`)})]})]}),(0,F.jsxs)(`div`,{className:`flex items-center gap-2`,children:[K.size>0&&(0,F.jsxs)(`button`,{type:`button`,onClick:()=>Y(v.filter(e=>K.has(e.id))),className:`inline-flex items-center gap-1.5 h-8 px-3 rounded-md text-xs font-medium border border-border text-foreground hover:bg-muted`,children:[(0,F.jsx)(ne,{className:`w-3.5 h-3.5`}),e(`actions.export`),` (`,K.size,`)`]}),(0,F.jsxs)(`button`,{type:`button`,onClick:()=>ve.current?.click(),className:`inline-flex items-center gap-1.5 h-8 px-3 rounded-md text-xs font-medium border border-border text-foreground hover:bg-muted`,children:[(0,F.jsx)(re,{className:`w-3.5 h-3.5`}),e(`actions.import`)]}),(0,F.jsx)(`input`,{ref:ve,type:`file`,accept:`application/json,.json`,className:`hidden`,onChange:e=>{let t=e.target.files?.[0];t&&Se(t),e.target.value=``}}),(0,F.jsxs)(`button`,{type:`button`,onClick:Ce,className:`inline-flex items-center gap-1.5 h-8 px-3 rounded-md text-xs font-medium bg-accent-primary text-white hover:bg-accent-primary/90`,children:[(0,F.jsx)(l,{className:`w-3.5 h-3.5`}),e(`newLoop`)]})]})]}),P?(0,F.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`…`}):(0,F.jsxs)(`div`,{className:`space-y-8`,children:[Q.length===0&&$.length===0&&(0,F.jsxs)(`div`,{className:`rounded-lg border border-dashed border-border p-8 text-center`,children:[(0,F.jsx)(`p`,{className:`text-sm font-medium text-foreground`,children:e(`empty.title`)}),(0,F.jsx)(`p`,{className:`text-xs text-muted-foreground mt-1`,children:e(`empty.body`)})]}),$.length>0&&(0,F.jsx)(R,{title:e(`sections.published`),children:$.map(e=>(0,F.jsx)(z,{loop:e,selected:K.has(e.id),onToggleSelect:()=>xe(e.id),onEdit:()=>Z(e.id),onUnpublish:()=>ke(e.id),onDuplicate:()=>Ae(e.id),onExport:()=>Y([e]),onDelete:()=>je(e.id),onRun:r(e.graph)?void 0:()=>G(e)},e.id))}),Q.length>0&&(0,F.jsx)(R,{title:e(`sections.drafts`),children:Q.map(e=>(0,F.jsx)(z,{loop:e,selected:K.has(e.id),onToggleSelect:()=>xe(e.id),onEdit:()=>Z(e.id),onPublish:()=>Oe(e.id),onDuplicate:()=>Ae(e.id),onExport:()=>Y([e]),onDelete:()=>je(e.id)},e.id))}),A.length>0&&(0,F.jsx)(R,{title:e(`sections.builtIn`),children:A.map(t=>(0,F.jsxs)(`div`,{className:`rounded-lg border border-border bg-card p-3 flex flex-col gap-2`,"data-testid":`factory-loop-card`,children:[(0,F.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,F.jsx)(h,{className:`w-3.5 h-3.5 text-accent-primary`}),(0,F.jsx)(`span`,{className:`text-sm font-medium text-foreground`,children:p(t.id,t.name)}),(0,F.jsx)(`span`,{className:`ml-auto px-1.5 py-0.5 rounded text-[10px] bg-muted text-muted-foreground`,children:e(`builtInBadge`)})]}),(0,F.jsx)(`p`,{className:`text-xs text-muted-foreground flex-1`,children:m(t.id,t.description)}),(0,F.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,F.jsxs)(`button`,{type:`button`,onClick:()=>De(t),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,F.jsx)(x,{className:`w-3 h-3`}),e(`actions.preview`)]}),(0,F.jsxs)(`button`,{type:`button`,onClick:()=>void Te(t.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,F.jsx)(k,{className:`w-3 h-3`}),e(`actions.fork`)]})]})]},t.id))}),w.length>0&&(0,F.jsxs)(`section`,{children:[(0,F.jsxs)(`div`,{className:`flex items-center justify-between gap-3 mb-2 flex-wrap`,children:[(0,F.jsx)(`h2`,{className:`text-xs font-semibold uppercase tracking-wide text-muted-foreground`,children:e(`sections.templates`)}),(0,F.jsx)(`input`,{type:`search`,value:q,onChange:e=>me(e.target.value),placeholder:e(`gallery.search`),"aria-label":e(`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/70 focus:outline-none focus:ring-1 focus:ring-accent-primary`})]}),(0,F.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5 mb-3`,"data-testid":`category-chips`,children:[Ne.map(({category:t,count:n})=>{let r=J.includes(t);return(0,F.jsxs)(`button`,{type:`button`,"aria-pressed":r,onClick:()=>ge(t),className:T(`inline-flex items-center gap-1 h-6 px-2 rounded-full text-[11px] border transition-colors`,r?`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:[e(`categories.${t}`,{defaultValue:t}),(0,F.jsx)(`span`,{className:`opacity-60 tabular-nums`,children:n})]},t)}),Fe&&(0,F.jsx)(`button`,{type:`button`,onClick:_e,className:`inline-flex items-center h-6 px-2 rounded-full text-[11px] text-accent-primary hover:underline`,children:e(`gallery.clearFilter`)})]}),Pe.length===0?(0,F.jsxs)(`div`,{className:`rounded-lg border border-dashed border-border p-6 text-center`,"data-testid":`template-empty`,children:[(0,F.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e(`gallery.noResults`)}),(0,F.jsx)(`button`,{type:`button`,onClick:_e,className:`mt-2 text-xs text-accent-primary hover:underline`,children:e(`gallery.clearFilter`)})]}):(0,F.jsx)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3`,children:Pe.map(t=>(0,F.jsxs)(`div`,{className:`rounded-lg border border-border bg-card p-3 flex flex-col gap-2`,"data-testid":`template-card`,children:[(0,F.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,F.jsx)(u,{className:`w-3.5 h-3.5 text-accent-highlight flex-shrink-0`}),(0,F.jsx)(`span`,{className:`text-sm font-medium text-foreground truncate`,children:p(t.id,t.name)}),t.category&&(0,F.jsx)(`span`,{className:`ml-auto px-1.5 py-0.5 rounded text-[10px] bg-accent-info/15 text-accent-info flex-shrink-0`,children:e(`categories.${t.category}`,{defaultValue:t.category})})]}),(0,F.jsx)(`p`,{className:`text-xs text-muted-foreground flex-1`,children:m(t.id,t.description)}),(0,F.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1`,children:[r(t.graph)?(0,F.jsx)(`span`,{title:e(`gallery.needsSpecHint`),className:`px-1.5 py-0.5 rounded text-[10px] bg-accent-secondary/15 text-accent-secondary`,children:e(`gallery.needsSpec`)}):(0,F.jsx)(`span`,{title:e(`gallery.standaloneHint`),className:`px-1.5 py-0.5 rounded text-[10px] bg-accent-success/15 text-accent-success`,children:e(`gallery.standalone`)}),t.tags.map(e=>(0,F.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-[10px] bg-muted text-muted-foreground`,children:e},e))]}),(0,F.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,F.jsxs)(`button`,{type:`button`,onClick:()=>{U(`use`),V({...t,name:p(t.id,t.name),description:m(t.id,t.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,F.jsx)(x,{className:`w-3 h-3`}),e(`actions.preview`)]}),(0,F.jsxs)(`button`,{type:`button`,onClick:()=>we(t.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,F.jsx)(b,{className:`w-3 h-3`}),e(`actions.use`)]})]})]},t.id))})]})]})]}),(0,F.jsx)(g,{open:I!==null,onOpenChange:e=>{e||L(null)},children:(0,F.jsxs)(a,{className:`max-w-sm`,children:[(0,F.jsxs)(s,{children:[(0,F.jsxs)(_,{className:`flex items-center gap-2`,children:[(0,F.jsx)(f,{className:`w-4 h-4 text-destructive`}),v.find(e=>e.id===I)?.name??e(`actions.delete`)]}),(0,F.jsx)(c,{children:e(`confirmDelete`)})]}),(0,F.jsxs)(ee,{children:[(0,F.jsx)(O,{variant:`ghost`,onClick:()=>L(null),children:e(`common:actions.cancel`)}),(0,F.jsx)(O,{variant:`destructive`,onClick:()=>void Me(),children:e(`common:actions.delete`)})]})]})}),(0,F.jsx)(te,{template:B,mode:H,onClose:()=>V(null),onUse:e=>{V(null),H===`fork`?Te(e):we(e)}}),(0,F.jsx)(le,{loop:W?{id:W.id,name:W.name}:null,projects:ye.map(e=>({id:e.id,name:e.name,providers:D(e)})),onClose:()=>G(null),onExecute:Ee})]})}function R({title:e,children:t}){return(0,F.jsxs)(`section`,{children:[(0,F.jsx)(`h2`,{className:`text-xs font-semibold uppercase tracking-wide text-muted-foreground mb-2`,children:e}),(0,F.jsx)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3`,children:t})]})}function z({loop:e,selected:r,onToggleSelect:i,onEdit:a,onPublish:o,onUnpublish:s,onDuplicate:c,onExport:l,onDelete:u,onRun:d}){let{t:p}=n(`loops`),m=e.graph?.nodes?.length??0;return(0,F.jsxs)(`div`,{className:`rounded-lg border border-border bg-card p-3 flex flex-col gap-2`,"data-testid":`loop-card`,children:[(0,F.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,F.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[(0,F.jsx)(`input`,{type:`checkbox`,checked:r,onChange:i,"aria-label":p(`actions.select`,{name:e.name}),className:`accent-accent-primary flex-shrink-0`}),(0,F.jsx)(`span`,{className:`text-sm font-medium text-foreground truncate`,children:e.name})]}),(0,F.jsx)(I,{status:e.status})]}),(0,F.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:p(`card.nodes`,{count:m})}),(0,F.jsxs)(`div`,{className:`flex items-center gap-1 flex-wrap`,children:[d&&(0,F.jsx)(B,{icon:E,label:p(`actions.run`),onClick:d}),(0,F.jsx)(B,{icon:y,label:p(`actions.edit`),onClick:a}),o&&(0,F.jsx)(B,{icon:t,label:p(`actions.publish`),onClick:o}),s&&(0,F.jsx)(B,{icon:b,label:p(`actions.unpublish`),onClick:s}),(0,F.jsx)(B,{icon:k,label:p(`actions.duplicate`),onClick:c}),(0,F.jsx)(B,{icon:ne,label:p(`actions.export`),onClick:l}),(0,F.jsx)(B,{icon:f,label:p(`actions.delete`),onClick:u,danger:!0})]})]})}function B({icon:e,label:t,onClick:n,danger:r}){return(0,F.jsx)(`button`,{type:`button`,onClick:n,title:t,"aria-label":t,className:T(`inline-flex items-center justify-center w-7 h-7 rounded-md transition-colors`,r?`text-muted-foreground hover:text-destructive hover:bg-destructive/10`:`text-muted-foreground hover:text-foreground hover:bg-muted`),children:(0,F.jsx)(e,{className:`w-3.5 h-3.5`})})}export{L as default};
@@ -0,0 +1,2 @@
1
+ import{a as e}from"./chunk-BNv3lrIs.js";import{a as t}from"./auth-DpZq5p1e.js";import{Bn as n,Cn as r,Dt as i,Ft as a,G as o,Gt as s,J as c,K as l,Lt as u,Mt as d,Ot as f,Pt as p,Rn as m,W as h,Y as g,Yn as _,_n as v,c as y,ct as ee,en as b,it as te,kn as x,lt as S,nt as C,rt as w,zt as ne}from"./index-89SuhD4Y.js";var T=m(`earth`,[[`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`}]]),re=m(`folder-kanban`,[[`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`}]]),E=m(`plug-zap`,[[`path`,{d:`M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z`,key:`goz73y`}],[`path`,{d:`m2 22 3-3`,key:`19mgm9`}],[`path`,{d:`M7.5 13.5 10 11`,key:`7xgeeb`}],[`path`,{d:`M10.5 16.5 13 14`,key:`10btkg`}],[`path`,{d:`m18 3-4 4h6l-4 4`,key:`16psg9`}]]),D=m(`power`,[[`path`,{d:`M12 2v10`,key:`mnfbl`}],[`path`,{d:`M18.4 6.6a9 9 0 1 1-12.77.04`,key:`obofu9`}]]),O=m(`wrench`,[[`path`,{d:`M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z`,key:`1ngwbx`}]]),k=e(_(),1),A=S();function j(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 M(){return{updatedAt:null,proxyStatsAvailable:!1,durableSavingsAvailable:!1,outputSavingsAvailable:!1,outputSavingsMethod:null,outputConfidence:null,providers:{codex:j(`codex`),claude:j(`claude`)},lastIssue:null}}var N={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:M(),lastIssue:null,updatedAt:null};function P(e){let t=e?.metrics??M();return{...N,...e,activeProviders:{...N.activeProviders,...e?.activeProviders},availableProviders:{...N.availableProviders,...e?.availableProviders},detectedRoutes:{...N.detectedRoutes,...e?.detectedRoutes},learning:{...N.learning,...e?.learning},metrics:{...M(),...t,providers:{codex:{...j(`codex`),...t.providers?.codex},claude:{...j(`claude`),...t.providers?.claude}}}}}async function F(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 I(e){return`${t}/api/projects/${e}`}function L(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 R(e,t,n){return`${L(e,t)} ${n}`}function z(){let{t:e}=n(`integrations`),{projects:r}=te(),{registerHandler:i,unregisterHandler:u}=ee(),[f,m]=(0,k.useState)(``),[_,v]=(0,k.useState)(`all`),[y,b]=(0,k.useState)(N),[x,S]=(0,k.useState)(!0),[w,T]=(0,k.useState)(null),[D,O]=(0,k.useState)([]),[j,M]=(0,k.useState)(!1),[L,R]=(0,k.useState)(!1),[z,H]=(0,k.useState)(null),[U,W]=(0,k.useState)({jira:0,serena:0,projects:0}),G=(0,k.useCallback)(async()=>{try{b(P((await fetch(`${t}/api/global-plugins/headroom`).then(e=>F(e))).state))}finally{S(!1)}},[]);(0,k.useEffect)(()=>{G()},[G]),(0,k.useEffect)(()=>(i(`plugins-page`,e=>{let t=e;t.type===`plugin.headroom_progress`&&(t.line&&O(e=>[...e.slice(-80),t.line]),G())}),()=>u(`plugins-page`)),[i,u,G]),(0,k.useEffect)(()=>{let e=!1;async function t(){let t=await Promise.all(r.map(async e=>{let[t,n]=await Promise.all([fetch(`${I(e.id)}/jira/connection`).then(e=>F(e)).catch(()=>({connected:!1})),fetch(`${I(e.id)}/plugins`).then(e=>F(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||W({jira:t.reduce((e,t)=>e+t.jira,0),serena:t.reduce((e,t)=>e+t.serena,0),projects:r.length})}return t(),()=>{e=!0}},[r]);async function K(e,t){T(e),O([]);try{let e=(await t()).state;e&&b(P(e))}catch(e){let t=e.payload;t?.state&&b(P(t.state))}finally{T(null),G()}}let q=(0,k.useMemo)(()=>[{id:`headroom-ai`,title:`Headroom AI`,scope:`global`,icon:E,description:e(`plugins.catalog.headroom.description`),installed:y.installed,status:y.lastIssue?`attention`:y.installed?y.activeProviders.codex||y.activeProviders.claude?y.installSource===`system`?`external-active`:`active`:y.installSource===`system`?`external`:`installed`:`available`,statusLabel:y.lastIssue?e(`plugins.status.attention`):y.installed?y.activeProviders.codex||y.activeProviders.claude?y.installSource===`system`?e(`plugins.status.externalActive`):e(`plugins.status.active`):y.installSource===`system`?e(`plugins.status.external`):e(`plugins.status.installed`):e(`plugins.status.available`),actionKind:y.lastIssue?`review`:y.installed?`manage`:`install`,actionLabel:y.lastIssue?e(`plugins.actions.review`):y.installed?e(`plugins.actions.manage`):e(`plugins.actions.install`),busy:w===`install`,action:()=>{if(y.lastIssue||y.installed){M(!0);return}K(`install`,()=>fetch(`${t}/api/global-plugins/headroom/install`,{method:`POST`}).then(e=>F(e)))}}],[y,w,e]),J=(0,k.useMemo)(()=>[{id:`jira`,title:`Jira`,scope:`project`,icon:re,description:e(`plugins.catalog.jira.description`),installed:U.jira>0,status:U.jira>0?`configured`:`available`,statusLabel:U.jira>0?e(`plugins.status.configuredCount`,{count:U.jira}):e(`plugins.status.available`),actionKind:U.jira>0?`manage`:`install`,actionLabel:U.jira>0?e(`plugins.actions.manage`):e(`plugins.actions.install`),action:()=>H(`jira`)},{id:`serena`,title:`Serena`,scope:`project`,icon:d,description:e(`plugins.catalog.serena.description`),installed:U.serena>0,status:U.serena>0?`installed`:`available`,statusLabel:U.serena>0?e(`plugins.status.installedCount`,{count:U.serena}):e(`plugins.status.available`),actionKind:U.serena>0?`manage`:`install`,actionLabel:U.serena>0?e(`plugins.actions.manage`):e(`plugins.actions.install`),action:()=>H(`serena`)}],[U,e]),Y=f.trim().toLowerCase(),X=t=>`${t.title} ${t.description} ${t.statusLabel} ${e(`plugins.scope.${t.scope}`)}`.toLowerCase().includes(Y),Z=[...q,...J].filter(e=>_!==`all`&&e.scope!==_?!1:X(e)),Q=Z.filter(e=>e.scope===`global`&&e.installed),$=Z.filter(e=>e.scope===`project`&&e.installed),se=Z.filter(e=>e.scope===`global`&&!e.installed),ce=Z.filter(e=>e.scope===`project`&&!e.installed),le=Q.length>0||$.length>0,ue=se.length>0||ce.length>0,de=[y.installed,U.jira>0,U.serena>0].filter(Boolean).length;return(0,A.jsxs)(`div`,{className:`flex h-full flex-col bg-background`,children:[(0,A.jsxs)(`div`,{className:`border-b border-border px-6 py-4`,children:[(0,A.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,A.jsx)(`div`,{className:`grid h-9 w-9 place-items-center rounded-lg border border-accent-primary/25 bg-accent-primary/10 text-accent-primary`,children:(0,A.jsx)(s,{className:`h-4 w-4`})}),(0,A.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,A.jsx)(`h1`,{className:`text-lg font-semibold tracking-normal`,children:e(`plugins.page.title`)}),(0,A.jsx)(`p`,{className:`mt-0.5 text-xs text-muted-foreground`,children:e(`plugins.page.subtitle`)})]}),(0,A.jsxs)(`div`,{className:`mr-12 flex items-center gap-2 rounded-lg border border-border bg-card/60 px-3 py-2 text-xs`,children:[(0,A.jsx)(a,{className:`h-3.5 w-3.5 text-accent-success`}),(0,A.jsx)(`span`,{className:`text-muted-foreground`,children:e(`plugins.page.readyCount`,{count:de})})]})]}),(0,A.jsxs)(`div`,{className:`mt-4 flex flex-col gap-3 md:flex-row md:items-center`,children:[(0,A.jsxs)(`label`,{className:`relative flex-1`,children:[(0,A.jsx)(ne,{className:`pointer-events-none absolute left-3 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground`}),(0,A.jsx)(`input`,{value:f,onChange:e=>m(e.target.value),placeholder:e(`plugins.search.placeholder`),className:`h-9 w-full rounded-lg border border-border bg-background pl-9 pr-3 text-sm outline-none transition-colors focus:border-accent-primary/60`})]}),(0,A.jsx)(`div`,{className:`inline-flex h-9 rounded-lg border border-border bg-card p-1`,children:[`all`,`global`,`project`].map(t=>(0,A.jsx)(`button`,{type:`button`,onClick:()=>v(t),className:C(`rounded-md px-3 text-xs capitalize transition-colors`,_===t?`bg-muted text-foreground`:`text-muted-foreground hover:text-foreground`),children:e(`plugins.filters.${t}`)},t))})]})]}),(0,A.jsxs)(`div`,{className:`flex-1 overflow-auto px-6 py-5`,children:[(0,A.jsxs)(`section`,{className:`mb-6`,children:[(0,A.jsxs)(`div`,{className:`mb-3 flex items-center gap-2 text-xs font-medium text-muted-foreground`,children:[(0,A.jsx)(p,{className:`h-3.5 w-3.5`}),e(`plugins.sections.installed`)]}),le?(0,A.jsx)(B,{globalPlugins:Q,projectPlugins:$}):(0,A.jsx)(V,{text:e(Y?`plugins.empty.installedSearch`:`plugins.empty.installed`)})]}),(0,A.jsxs)(`section`,{children:[(0,A.jsxs)(`div`,{className:`mb-3 flex items-center gap-2 text-xs font-medium text-muted-foreground`,children:[(0,A.jsx)(s,{className:`h-3.5 w-3.5`}),e(`plugins.sections.available`)]}),ue?(0,A.jsx)(B,{globalPlugins:se,projectPlugins:ce}):(0,A.jsx)(V,{text:e(Y?`plugins.empty.availableSearch`:`plugins.empty.allInstalled`)})]})]}),(0,A.jsx)(h,{open:j,onOpenChange:M,children:(0,A.jsxs)(o,{className:`w-[calc(100vw-2rem)] max-w-xl overflow-x-hidden p-4 sm:p-6`,children:[(0,A.jsxs)(c,{children:[(0,A.jsx)(g,{children:e(`plugins.headroom.title`)}),(0,A.jsx)(l,{children:e(`plugins.headroom.dialogDescription`)})]}),(0,A.jsx)(ie,{state:y,loading:x,busy:w,logs:D,onInstall:()=>K(`install`,()=>fetch(`${t}/api/global-plugins/headroom/install`,{method:`POST`}).then(e=>F(e))),onToggleProvider:(e,n)=>K(`${n?`deactivate`:`activate`}-${e}`,()=>fetch(`${t}/api/global-plugins/headroom/${n?`deactivate`:`activate`}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({provider:e})}).then(e=>F(e))),onDeactivateAll:()=>K(`deactivate-all`,async()=>{let e={state:y};for(let n of[`codex`,`claude`])y.activeProviders[n]&&(e=await fetch(`${t}/api/global-plugins/headroom/deactivate`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({provider:n})}).then(e=>F(e)));return e}),onUninstall:()=>K(`uninstall`,()=>fetch(`${t}/api/global-plugins/headroom/uninstall`,{method:`POST`}).then(e=>F(e))),onSetPort:e=>K(`port`,()=>fetch(`${t}/api/global-plugins/headroom/port`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({port:e})}).then(e=>F(e))),onOpenDiagnostics:()=>R(!0)})]})}),(0,A.jsx)(ae,{plugin:z,projects:r,onClose:()=>H(null)}),(0,A.jsx)(oe,{open:L,onClose:()=>R(!1)})]})}function B({globalPlugins:e,projectPlugins:t}){let{t:r}=n(`integrations`);return(0,A.jsxs)(`div`,{className:C(`grid grid-cols-1 gap-4`,e.length>0&&t.length>0&&`xl:grid-cols-2`),children:[e.length>0&&(0,A.jsxs)(`section`,{children:[(0,A.jsx)(U,{title:r(`plugins.groups.global.title`),detail:r(`plugins.groups.global.detail`),scope:`global`}),(0,A.jsx)(`div`,{className:`grid grid-cols-[repeat(auto-fill,minmax(260px,320px))] justify-start gap-3`,children:e.map(e=>(0,A.jsx)(W,{plugin:e},e.id))})]}),t.length>0&&(0,A.jsxs)(`section`,{children:[(0,A.jsx)(U,{title:r(`plugins.groups.project.title`),detail:r(`plugins.groups.project.detail`),scope:`project`}),(0,A.jsx)(`div`,{className:`grid grid-cols-[repeat(auto-fill,minmax(260px,320px))] justify-start gap-3`,children:t.map(e=>(0,A.jsx)(W,{plugin:e},e.id))})]})]})}function V({text:e}){return(0,A.jsx)(`div`,{className:`flex h-[74px] max-w-[320px] items-center rounded-lg border border-dashed border-border bg-card/35 px-3 text-xs text-muted-foreground`,children:e})}function H({scope:e}){let{t}=n(`integrations`);return(0,A.jsx)(`span`,{className:C(`rounded px-1.5 py-0.5 text-[10px] uppercase tracking-wide`,e===`global`?`bg-accent-primary/10 text-accent-primary`:`bg-accent-info/10 text-accent-info`),children:t(`plugins.scope.${e}`)})}function U({title:e,detail:t,scope:n}){return(0,A.jsxs)(`div`,{className:`mb-2 flex items-center gap-2`,children:[(0,A.jsx)(`div`,{className:C(`h-px flex-1`,n===`global`?`bg-accent-primary/30`:`bg-accent-info/30`)}),(0,A.jsxs)(`div`,{className:`flex items-center gap-2 rounded-md border border-border bg-card/70 px-2 py-1`,children:[(0,A.jsx)(H,{scope:n}),(0,A.jsx)(`span`,{className:`text-xs font-medium`,children:e}),(0,A.jsx)(`span`,{className:`hidden text-[11px] text-muted-foreground sm:inline`,children:t})]}),(0,A.jsx)(`div`,{className:C(`h-px flex-1`,n===`global`?`bg-accent-primary/30`:`bg-accent-info/30`)})]})}function W({plugin:e}){let{t}=n(`integrations`),r=e.icon,a=e.scope===`global`,o=e.status===`attention`,s=e.busy?b:e.actionKind===`install`?v:e.actionKind===`review`?i:u,c=C(`shrink-0 rounded border px-1.5 py-0.5 text-[10px] leading-none`,o?`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,A.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,A.jsx)(`div`,{className:C(`grid h-[38px] w-[38px] shrink-0 place-items-center rounded-lg border`,a?`border-accent-primary/25 bg-accent-primary/10 text-accent-primary`:`border-accent-info/25 bg-accent-info/10 text-accent-info`),children:(0,A.jsx)(r,{className:`h-4 w-4`})}),(0,A.jsxs)(`div`,{className:`min-w-0`,children:[(0,A.jsx)(`h2`,{className:`truncate text-sm font-semibold leading-5`,children:e.title}),(0,A.jsx)(`p`,{className:`mt-1 truncate text-[11px] leading-4 text-muted-foreground`,children:e.description}),(0,A.jsxs)(`div`,{className:`mt-1.5 flex items-center gap-1.5`,children:[(0,A.jsx)(H,{scope:e.scope}),(0,A.jsx)(`span`,{className:c,children:e.statusLabel})]})]}),(0,A.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-xs font-medium transition-colors hover:bg-muted disabled:opacity-50`,children:[(0,A.jsx)(s,{className:C(`h-3.5 w-3.5`,e.busy&&`animate-spin`)}),e.busy?t(`plugins.actions.installing`):e.actionLabel]})]})}function ie({state:e,loading:t,busy:r,logs:i,onInstall:a,onToggleProvider:o,onDeactivateAll:s,onUninstall:c,onSetPort:l,onOpenDiagnostics:u}){let{t:d}=n(`integrations`),[p,m]=(0,k.useState)(String(e.port)),[h,g]=(0,k.useState)(!1);(0,k.useEffect)(()=>m(String(e.port)),[e.port]),(0,k.useEffect)(()=>{e.installed||g(!1)},[e.installed]);let _=e.activeProviders.codex||e.activeProviders.claude,y=e.installSource===`system`;return(0,A.jsxs)(`aside`,{className:`w-full min-w-0 overflow-hidden rounded-lg border border-border bg-card/80 p-4`,children:[(0,A.jsxs)(`div`,{className:`mb-4 flex items-start gap-3`,children:[(0,A.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,A.jsx)(E,{className:`h-4 w-4`})}),(0,A.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,A.jsx)(`h2`,{className:`text-sm font-semibold`,children:d(`plugins.headroom.title`)}),(0,A.jsx)(`p`,{className:`mt-1 text-xs leading-relaxed text-muted-foreground`,children:d(`plugins.headroom.panelDescription`)})]})]}),(0,A.jsxs)(`div`,{className:`mb-4 grid grid-cols-3 gap-2 text-xs`,children:[(0,A.jsx)(G,{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,A.jsx)(G,{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,A.jsx)(G,{label:d(`plugins.headroom.metrics.proxy`),value:e.proxyRunning?`:${e.port}`:d(_?`plugins.headroom.metrics.starting`:`plugins.headroom.metrics.off`),good:e.proxyRunning||!_})]}),e.lastIssue&&(0,A.jsx)(K,{issue:e.lastIssue}),e.installed?(0,A.jsxs)(`div`,{className:`mb-4 space-y-2`,children:[(0,A.jsx)(X,{provider:`codex`,active:e.activeProviders.codex,available:e.availableProviders.codex,detectedRoute:e.detectedRoutes.codex,busy:r===`activate-codex`||r===`deactivate-codex`,onClick:()=>o(`codex`,e.activeProviders.codex)}),(0,A.jsx)(X,{provider:`claude`,active:e.activeProviders.claude,available:e.availableProviders.claude,detectedRoute:e.detectedRoutes.claude,busy:r===`activate-claude`||r===`deactivate-claude`,onClick:()=>o(`claude`,e.activeProviders.claude)}),_&&(0,A.jsxs)(`button`,{type:`button`,disabled:!!r,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:[r===`deactivate-all`?(0,A.jsx)(b,{className:`h-3.5 w-3.5 animate-spin`}):(0,A.jsx)(D,{className:`h-3.5 w-3.5`}),d(`plugins.headroom.actions.disableAllRoutes`)]})]}):(0,A.jsxs)(`button`,{type:`button`,disabled:!!r,onClick:a,className:`mb-3 flex h-9 w-full items-center justify-center gap-2 rounded-lg bg-accent-primary px-3 text-xs font-medium text-white disabled:opacity-50`,children:[r===`install`?(0,A.jsx)(b,{className:`h-3.5 w-3.5 animate-spin`}):(0,A.jsx)(v,{className:`h-3.5 w-3.5`}),d(`plugins.headroom.actions.installWithUv`)]}),e.installed&&(0,A.jsx)(q,{state:e}),(0,A.jsxs)(`div`,{className:`mb-4 rounded-lg border border-border bg-background/45 p-3`,children:[(0,A.jsx)(`label`,{className:`mb-1 block text-[11px] font-medium text-muted-foreground`,children:d(`plugins.headroom.port.label`)}),(0,A.jsxs)(`div`,{className:`flex gap-2`,children:[(0,A.jsx)(`input`,{value:p,onChange:e=>m(e.target.value),className:`h-8 min-w-0 flex-1 rounded-md border border-border bg-background px-2 text-sm`}),(0,A.jsx)(`button`,{type:`button`,disabled:!!r||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`)})]})]}),i.length>0&&(0,A.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-[10px] text-muted-foreground`,children:i.join(`
2
+ `)}),(0,A.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,A.jsx)(O,{className:`h-3.5 w-3.5`}),d(`plugins.headroom.actions.viewDiagnostics`)]}),e.installed&&(0,A.jsx)(`div`,{className:`rounded-lg border border-destructive/25 bg-destructive/5 p-3`,children:h?(0,A.jsxs)(`div`,{className:`space-y-2`,children:[(0,A.jsx)(`p`,{className:`text-[11px] leading-relaxed text-muted-foreground`,children:d(y?`plugins.headroom.confirmDetach`:`plugins.headroom.confirmUninstall`)}),(0,A.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,A.jsx)(`button`,{type:`button`,disabled:!!r,onClick:()=>g(!1),className:`h-8 rounded-md border border-border text-xs hover:bg-muted/50 disabled:opacity-50`,children:d(`plugins.actions.cancel`)}),(0,A.jsxs)(`button`,{type:`button`,disabled:!!r,onClick:c,className:`flex h-8 items-center justify-center gap-2 rounded-md bg-destructive px-2 text-xs font-medium text-destructive-foreground disabled:opacity-50`,children:[r===`uninstall`?(0,A.jsx)(b,{className:`h-3.5 w-3.5 animate-spin`}):(0,A.jsx)(f,{className:`h-3.5 w-3.5`}),d(y?`plugins.headroom.actions.detach`:`plugins.headroom.actions.uninstall`)]})]})]}):(0,A.jsxs)(`button`,{type:`button`,disabled:!!r,onClick:()=>g(!0),className:`flex h-8 w-full items-center justify-center gap-2 rounded-md text-xs font-medium text-destructive hover:bg-destructive/10 disabled:opacity-50`,children:[(0,A.jsx)(f,{className:`h-3.5 w-3.5`}),d(y?`plugins.headroom.actions.detachHeadroom`:`plugins.headroom.actions.uninstallHeadroom`)]})})]})}function G({label:e,value:t,good:n}){return(0,A.jsxs)(`div`,{className:`rounded-lg border border-border bg-background/45 p-2`,children:[(0,A.jsx)(`div`,{className:`text-[10px] text-muted-foreground`,children:e}),(0,A.jsx)(`div`,{className:C(`mt-0.5 font-medium`,n?`text-foreground`:`text-accent-warning`),children:t})]})}function K({issue:e}){let{t}=n(`integrations`),r=`plugins.headroom.issues.${e.code}`,a=t(`${r}.title`,{defaultValue:e.title}),o=t(`${r}.guidance`,{defaultValue:e.guidance});return(0,A.jsx)(`div`,{className:`mb-3 rounded-lg border border-accent-warning/35 bg-accent-warning/10 p-3`,children:(0,A.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,A.jsx)(i,{className:`mt-0.5 h-3.5 w-3.5 shrink-0 text-accent-warning`}),(0,A.jsxs)(`div`,{className:`min-w-0`,children:[(0,A.jsx)(`div`,{className:`text-xs font-medium`,children:a}),(0,A.jsx)(`p`,{className:`mt-1 text-[11px] leading-relaxed text-muted-foreground`,children:o}),(0,A.jsx)(`div`,{className:`mt-1 text-[10px] text-muted-foreground`,children:t(`plugins.headroom.issueCode`,{code:e.code})})]})]})})}function q({state:e}){let{t,i18n:r}=n(`integrations`),i=e.metrics,a=i.outputSavingsAvailable,o=[`codex`,`claude`].map(e=>({provider:e,metric:i.providers[e]})),s=t(`plugins.headroom.savings.tokens`),c=o.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=o.some(({metric:e})=>e.inputTokensSaved>0),u=o.some(({metric:e})=>e.active),d=t(a?`plugins.headroom.savings.statusInputOutput`:l?`plugins.headroom.savings.statusInputOnly`:u?`plugins.headroom.savings.statusRouting`:`plugins.headroom.savings.statusInactive`),f=a||l;return(0,A.jsxs)(`div`,{className:`mb-4 rounded-lg border border-border bg-background/45 p-3`,children:[(0,A.jsxs)(`div`,{className:`mb-2 flex items-center justify-between gap-2`,children:[(0,A.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,A.jsx)(x,{className:`h-3.5 w-3.5 text-accent-primary`}),(0,A.jsx)(`div`,{className:`truncate text-xs font-medium`,children:t(`plugins.headroom.savings.title`)})]}),(0,A.jsx)(`span`,{className:C(`shrink-0 rounded border px-1.5 py-0.5 text-[10px]`,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,A.jsxs)(`div`,{className:`mb-2 rounded-md bg-muted/35 px-2.5 py-2`,children:[(0,A.jsx)(`div`,{className:`mb-1.5 text-[10px] font-medium uppercase text-muted-foreground`,children:t(`plugins.headroom.savings.totals`)}),(0,A.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[(0,A.jsx)(J,{label:t(`plugins.headroom.savings.input`),processed:c.inputTokens>0?R(c.inputTokens,r.language,s):t(`plugins.headroom.savings.noData`),saved:R(c.inputTokensSaved,r.language,s)}),(0,A.jsx)(J,{align:`right`,label:t(`plugins.headroom.savings.output`),processed:c.outputTokens>0?R(c.outputTokens,r.language,s):t(`plugins.headroom.savings.noData`),saved:a?R(c.outputTokensSaved,r.language,s):t(`plugins.headroom.savings.noData`)})]})]}),(0,A.jsx)(`div`,{className:`grid gap-2`,children:o.map(({provider:e,metric:t})=>(0,A.jsx)(Y,{metric:t,outputAvailable:i.outputSavingsAvailable},e))}),(0,A.jsx)(`div`,{className:`mt-2 flex items-center justify-end gap-2 text-[10px] text-muted-foreground`,children:i.updatedAt?t(`plugins.headroom.savings.updatedLive`):t(`plugins.headroom.savings.baselineSamples`,{count:e.learning.baselineSamples})})]})}function J({label:e,processed:t,saved:r,detail:i,align:a=`left`}){let{t:o}=n(`integrations`);return(0,A.jsxs)(`div`,{className:C(`min-w-0`,a===`right`&&`text-right`),children:[(0,A.jsx)(`div`,{className:`text-[10px] font-medium uppercase text-muted-foreground`,children:e}),(0,A.jsxs)(`div`,{className:`mt-1 space-y-0.5 text-[11px]`,children:[(0,A.jsxs)(`div`,{className:`flex min-w-0 items-baseline justify-between gap-2`,children:[(0,A.jsx)(`span`,{className:`shrink-0 text-muted-foreground`,children:o(`plugins.headroom.savings.processed`)}),(0,A.jsx)(`span`,{className:`truncate font-semibold tabular-nums text-foreground`,children:t})]}),(0,A.jsxs)(`div`,{className:`flex min-w-0 items-baseline justify-between gap-2`,children:[(0,A.jsx)(`span`,{className:`shrink-0 text-muted-foreground`,children:o(`plugins.headroom.savings.saved`)}),(0,A.jsx)(`span`,{className:`truncate font-semibold tabular-nums text-foreground`,children:r})]})]}),i&&(0,A.jsx)(`div`,{className:`mt-1 truncate text-[10px] text-muted-foreground`,children:i})]})}function Y({metric:e,outputAvailable:t}){let{t:r,i18n:i}=n(`integrations`),a=!e.available,o=a||!e.active,s=r(`plugins.headroom.savings.tokens`),c=e.inputTokens>0?R(e.inputTokens,i.language,s):r(`plugins.headroom.savings.noData`),l=R(e.inputTokensSaved,i.language,s),u=e.outputTokens>0?R(e.outputTokens,i.language,s):r(`plugins.headroom.savings.noData`),d=t?R(e.outputTokensSaved,i.language,s):e.active?r(`plugins.headroom.savings.noData`):r(`plugins.headroom.savings.off`),f=e.requests>0?r(`plugins.headroom.savings.requestCount`,{count:L(e.requests,i.language)}):a?r(`plugins.headroom.provider.noProjectUsesProvider`):e.active?r(`plugins.headroom.savings.inputSavingsActive`):r(`plugins.headroom.savings.routeDisabled`);return(0,A.jsxs)(`div`,{className:C(`rounded-md border border-border bg-card/45 px-2.5 py-2`,o&&`opacity-70`),children:[(0,A.jsxs)(`div`,{className:`flex min-w-0 items-center gap-1.5`,children:[(0,A.jsx)(`span`,{className:`text-xs font-medium`,children:e.label}),e.detectedRoute&&(0,A.jsx)(`span`,{className:`rounded bg-accent-primary/10 px-1.5 py-0.5 text-[9px] uppercase text-accent-primary`,children:r(`plugins.headroom.savings.detected`)})]}),(0,A.jsx)(`div`,{className:`mt-0.5 truncate text-[10px] text-muted-foreground`,children:f}),(0,A.jsxs)(`div`,{className:`mt-2 grid grid-cols-2 gap-3`,children:[(0,A.jsx)(J,{label:r(`plugins.headroom.savings.input`),processed:c,saved:l}),(0,A.jsx)(J,{align:`right`,label:r(`plugins.headroom.savings.output`),processed:u,saved:d})]})]})}function X({provider:e,active:t,available:r,detectedRoute:i,busy:a,onClick:o}){let{t:s}=n(`integrations`),c=s(r?t?`plugins.headroom.provider.routedThroughHeadroom`:i?`plugins.headroom.provider.detectedExternalRoute`:`plugins.headroom.provider.notRouted`:`plugins.headroom.provider.noProjectUsesProvider`);return(0,A.jsxs)(`button`,{type:`button`,onClick:o,disabled:a||!r,className:`flex w-full items-center gap-3 rounded-lg border border-border bg-background/45 p-3 text-left hover:bg-muted/35 disabled:opacity-50`,children:[(0,A.jsx)(`div`,{className:C(`grid h-8 w-8 place-items-center rounded-md`,t?`bg-accent-success/15 text-accent-success`:`bg-muted text-muted-foreground`),children:a?(0,A.jsx)(b,{className:`h-3.5 w-3.5 animate-spin`}):(0,A.jsx)(T,{className:`h-3.5 w-3.5`})}),(0,A.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,A.jsx)(`div`,{className:`text-xs font-medium capitalize`,children:e}),(0,A.jsx)(`div`,{className:`text-[11px] text-muted-foreground`,children:c})]}),(0,A.jsx)(`span`,{className:C(`h-5 w-9 rounded-full p-0.5 transition-colors`,t?`bg-accent-success`:`bg-muted`),children:(0,A.jsx)(`span`,{className:C(`block h-4 w-4 rounded-full bg-white shadow transition-transform`,t&&`translate-x-4`)})})]})}function ae({plugin:e,projects:t,onClose:r}){let{t:i}=n(`integrations`),[a,s]=(0,k.useState)(``);(0,k.useEffect)(()=>s(``),[e]);let u=t.find(e=>e.id===a)??null;return(0,A.jsx)(h,{open:!!e,onOpenChange:e=>{e||r()},children:(0,A.jsxs)(o,{className:`w-[calc(100vw-2rem)] max-w-3xl overflow-x-hidden p-4 sm:p-6`,children:[(0,A.jsxs)(c,{children:[(0,A.jsx)(g,{children:i(e===`jira`?`plugins.projectWizard.configureJira`:`plugins.projectWizard.installSerena`)}),(0,A.jsx)(l,{children:i(`plugins.projectWizard.description`)})]}),(0,A.jsxs)(`div`,{className:`grid gap-4 md:grid-cols-[260px_minmax(0,1fr)]`,children:[(0,A.jsxs)(`div`,{className:`rounded-lg border border-border bg-card/70 p-3`,children:[(0,A.jsx)(`div`,{className:`mb-2 text-xs font-medium text-muted-foreground`,children:i(`plugins.projectWizard.chooseProject`)}),(0,A.jsx)(`div`,{className:`max-h-[52vh] space-y-1 overflow-auto`,children:t.map(t=>{let n=e===`serena`&&!w(t).includes(`claude`);return(0,A.jsxs)(`button`,{type:`button`,disabled:n,onClick:()=>s(t.id),className:C(`w-full rounded-md px-2 py-2 text-left transition-colors`,t.id===a?`bg-muted text-foreground`:`text-muted-foreground hover:bg-muted/45 hover:text-foreground`,n&&`cursor-not-allowed opacity-45`),children:[(0,A.jsx)(`div`,{className:`truncate text-xs font-medium`,children:t.name}),(0,A.jsx)(`div`,{className:`truncate text-[10px]`,children:n?i(`plugins.projectWizard.requiresClaudeProvider`):t.path})]},t.id)})})]}),(0,A.jsx)(`div`,{className:`min-h-[360px] rounded-lg border border-border bg-card/70 p-4`,children:u?e===`jira`?(0,A.jsx)(y,{apiBase:I(u.id),onConnected:r,onSkip:r}):(0,A.jsx)(Z,{project:u,onDone:r}):(0,A.jsx)(`div`,{className:`flex h-full items-center justify-center text-sm text-muted-foreground`,children:i(`plugins.projectWizard.selectProjectToContinue`)})})]})]})})}function Z({project:e,onDone:t}){let{t:a}=n(`integrations`),[o,s]=(0,k.useState)(null),[c,l]=(0,k.useState)(null),[u,d]=(0,k.useState)(!1),[f,p]=(0,k.useState)(null),m=(0,k.useCallback)(async()=>{p(null);let t=(await fetch(`${I(e.id)}/plugins`).then(e=>F(e))).plugins.find(e=>e.name===`serena`)??null;s(t),t?.status===`not-installed`&&l(await fetch(`${I(e.id)}/plugins/serena/preview-install`).then(e=>F(e)))},[e.id]);(0,k.useEffect)(()=>{m().catch(e=>p(e.message))},[m]);async function h(){d(!0),p(null);try{await fetch(`${I(e.id)}/plugins/serena/install`,{method:`POST`}).then(e=>F(e)),await m(),t()}catch(e){p(e.message)}finally{d(!1)}}let g=(c?.requirements??[]).every(e=>e.installed&&e.executable&&e.meetsMinimum),_=o?a(`plugins.projectStatus.${o.status}`,{defaultValue:o.status}):``,y=o?.name===`serena`?a(`plugins.catalog.serena.description`):o?.description;return!o&&!f?(0,A.jsxs)(`div`,{className:`flex h-full items-center justify-center text-sm text-muted-foreground`,children:[(0,A.jsx)(b,{className:`mr-2 h-4 w-4 animate-spin`}),` `,a(`plugins.serena.loading`)]}):(0,A.jsxs)(`div`,{className:`space-y-4`,children:[(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`h3`,{className:`text-sm font-semibold`,children:a(`plugins.serena.titleForProject`,{name:e.name})}),(0,A.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:a(`plugins.serena.description`)})]}),o&&(0,A.jsxs)(`div`,{className:`rounded-lg border border-border bg-background/45 p-3`,children:[(0,A.jsx)(`div`,{className:`text-xs font-medium`,children:a(`plugins.serena.status`,{status:_})}),y&&(0,A.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:y})]}),c&&(0,A.jsxs)(`div`,{className:`space-y-3`,children:[(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`div`,{className:`mb-1 text-xs font-medium`,children:a(`plugins.serena.files`)}),(0,A.jsx)(`ul`,{className:`space-y-1 text-xs font-mono`,children:c.files.map(e=>(0,A.jsxs)(`li`,{className:e.op===`create`?`text-accent-success`:`text-accent-info`,children:[e.op===`create`?`+ `:`~ `,e.path]},e.path))})]}),(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`div`,{className:`mb-1 text-xs font-medium`,children:a(`plugins.serena.prerequisites`)}),(0,A.jsx)(`ul`,{className:`space-y-1 text-xs`,children:c.requirements.map(e=>(0,A.jsxs)(`li`,{className:`flex items-center gap-2`,children:[e.installed&&e.executable&&e.meetsMinimum?(0,A.jsx)(r,{className:`h-3 w-3 text-accent-success`}):(0,A.jsx)(i,{className:`h-3 w-3 text-accent-warning`}),(0,A.jsxs)(`span`,{children:[e.name,e.minVersion?` >= ${e.minVersion}`:``]}),e.version&&(0,A.jsxs)(`span`,{className:`text-muted-foreground`,children:[`(`,e.version,`)`]})]},e.name))})]})]}),f&&(0,A.jsx)(`div`,{className:`rounded-lg border border-destructive/30 bg-destructive/10 p-3 text-xs text-destructive`,children:f}),(0,A.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,A.jsx)(`button`,{type:`button`,onClick:t,className:`rounded-md border border-border px-3 py-1.5 text-xs`,children:a(`plugins.actions.cancel`)}),(0,A.jsxs)(`button`,{type:`button`,disabled:u||o?.status!==`not-installed`||!g,onClick:h,className:`flex items-center gap-2 rounded-md bg-accent-primary px-3 py-1.5 text-xs text-white disabled:opacity-50`,children:[u?(0,A.jsx)(b,{className:`h-3.5 w-3.5 animate-spin`}):(0,A.jsx)(v,{className:`h-3.5 w-3.5`}),a(`plugins.actions.install`)]})]})]})}function oe({open:e,onClose:r}){let{t:i}=n(`integrations`),[a,s]=(0,k.useState)(null);return(0,k.useEffect)(()=>{e&&fetch(`${t}/api/global-plugins/headroom/diagnostics`).then(e=>F(e)).then(s).catch(e=>s({error:e.message}))},[e]),(0,A.jsx)(h,{open:e,onOpenChange:e=>{e||r()},children:(0,A.jsxs)(o,{className:`max-w-3xl`,children:[(0,A.jsxs)(c,{children:[(0,A.jsxs)(g,{className:`flex items-center gap-2`,children:[(0,A.jsx)(u,{className:`h-4 w-4`}),` `,i(`plugins.diagnostics.title`)]}),(0,A.jsx)(l,{children:i(`plugins.diagnostics.description`)})]}),(0,A.jsx)(`pre`,{className:`max-h-[62vh] overflow-y-auto overflow-x-hidden whitespace-pre-wrap break-words rounded-lg border border-border bg-background p-3 text-xs`,children:JSON.stringify(a,null,2)})]})})}export{z as default};
@@ -0,0 +1 @@
1
+ import{a as e}from"./chunk-BNv3lrIs.js";import{Bn as t,Et as n,G as r,It as i,J as a,K as o,Ln as s,Mt as c,Pt as l,Rn as u,W as d,Y as f,Yn as p,d as m,f as h,h as g,it as _,lt as v,m as y,nt as b,p as x}from"./index-89SuhD4Y.js";var S=u(`key-round`,[[`path`,{d:`M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z`,key:`1s6t7t`}],[`circle`,{cx:`16.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`w0ekpg`}]]),C=e(p(),1),w=v(),T=[{id:`general`,icon:l,labelKey:`projectDialog.nav.general`},{id:`environment`,icon:S,labelKey:`projectDialog.nav.environment`},{id:`budget`,icon:n,labelKey:`projectDialog.nav.budget`},{id:`telemetry`,icon:s,labelKey:`projectDialog.nav.telemetry`},{id:`terminal`,icon:c,labelKey:`projectDialog.nav.terminal`}];function E({open:e,onClose:n}){let{t:s}=t(`settings`),{activeProjectId:c,projects:l}=_(),u=l.find(e=>e.id===c),[p,v]=(0,C.useState)(`general`),S=e=>b(`space-y-5`,p===e?``:`hidden`);return(0,w.jsx)(d,{open:e,onOpenChange:e=>{e||n()},children:(0,w.jsxs)(r,{movableResizable:!0,className:`flex max-w-5xl w-[92vw] h-[82vh] flex-col overflow-hidden`,children:[(0,w.jsxs)(a,{children:[(0,w.jsxs)(f,{className:`flex items-center gap-2`,children:[(0,w.jsx)(i,{className:`w-4 h-4`}),u?s(`projectDialog.title`,{name:u.name}):s(`page.title`)]}),(0,w.jsx)(o,{children:s(`projectDialog.description`)})]}),(0,w.jsxs)(`div`,{className:`flex min-h-0 flex-1 gap-5 py-2`,children:[(0,w.jsx)(`nav`,{className:`w-40 shrink-0 space-y-0.5 overflow-y-auto border-r border-border pr-2`,children:T.map(e=>{let t=e.icon;return(0,w.jsxs)(`button`,{type:`button`,onClick:()=>v(e.id),className:b(`flex w-full items-center gap-2 rounded-lg px-2.5 py-1.5 text-left text-xs transition-colors`,p===e.id?`bg-accent-primary/15 font-medium text-foreground`:`text-muted-foreground hover:bg-muted/40 hover:text-foreground`),children:[(0,w.jsx)(t,{className:`w-3.5 h-3.5 shrink-0`}),(0,w.jsx)(`span`,{className:`truncate`,children:s(e.labelKey)})]},e.id)})}),(0,w.jsxs)(`div`,{className:`min-w-0 flex-1 overflow-y-auto pr-1`,children:[(0,w.jsx)(`div`,{className:S(`general`),children:(0,w.jsx)(h,{})}),(0,w.jsx)(`div`,{className:S(`environment`),children:(0,w.jsx)(y,{})}),(0,w.jsx)(`div`,{className:S(`budget`),children:(0,w.jsx)(m,{})}),(0,w.jsx)(`div`,{className:S(`telemetry`),children:(0,w.jsx)(x,{})}),(0,w.jsx)(`div`,{className:S(`terminal`),children:(0,w.jsx)(g,{mode:`project`})})]})]})]})})}export{E as ProjectSettingsDialog};
@@ -1 +1 @@
1
- import{t as e}from"./brain-BBNUUrUI.js";import{Cn as t,Dt as n,E as r,G as i,J as a,K as o,Rn as s,Vt as c,X as l,Xt as u,Y as d,Zt as f,ft as p,nt as m,q as h,ut as g}from"./index-Dw1N2-ci.js";var _=t(),v={start:n,"ai-step":e,shell:g,decider:c,condition:c,end:p};function y(e){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:t,onClose:n,onUse:c,mode:g=`use`}){let{t:b}=s(`loops`);return(0,_.jsx)(i,{open:t!==null,onOpenChange:e=>{e||n()},children:(0,_.jsx)(o,{movableResizable:!0,className:`max-w-lg`,children:t&&(0,_.jsxs)(_.Fragment,{children:[(0,_.jsxs)(d,{children:[(0,_.jsxs)(l,{className:`flex items-center gap-2`,children:[(0,_.jsx)(e,{className:`w-4 h-4 text-accent-highlight`}),t.name]}),(0,_.jsx)(h,{children:t.description})]}),(0,_.jsxs)(`div`,{className:`flex flex-wrap gap-1.5`,children:[r(t.graph)?(0,_.jsx)(`span`,{title:b(`gallery.needsSpecHint`),className:`px-1.5 py-0.5 rounded text-[10px] bg-accent-secondary/15 text-accent-secondary`,children:b(`gallery.needsSpec`)}):(0,_.jsx)(`span`,{title:b(`gallery.standaloneHint`),className:`px-1.5 py-0.5 rounded text-[10px] bg-accent-success/15 text-accent-success`,children:b(`gallery.standalone`)}),t.category&&(0,_.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-[10px] bg-accent-info/15 text-accent-info`,children:b(`categories.${t.category}`,{defaultValue:t.category})}),t.tags.map(e=>(0,_.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-[10px] bg-muted text-muted-foreground`,children:e},e))]}),(0,_.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:b(`preview.limits`,{iterations:t.graph.config.maxIterations,timeout:t.graph.config.timeoutMinutes})}),(0,_.jsxs)(`div`,{className:`max-h-[50vh] overflow-y-auto space-y-1.5 pr-1`,children:[(0,_.jsx)(`span`,{className:`block text-[10px] font-medium uppercase tracking-wide text-muted-foreground`,children:b(`preview.steps`)}),t.graph.nodes.map((e,t)=>{let n=v[e.type]??p,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-xs font-medium text-foreground`,children:[(0,_.jsxs)(`span`,{className:`text-[10px] text-muted-foreground tabular-nums`,children:[t+1,`.`]}),(0,_.jsx)(n,{className:`w-3.5 h-3.5 text-accent-primary`}),b(`builder.nodes.${e.type}`)]}),r&&(0,_.jsx)(`pre`,{className:`mt-1 whitespace-pre-wrap break-words text-[11px] text-muted-foreground font-mono`,children:r})]},e.id)})]}),(0,_.jsxs)(a,{children:[(0,_.jsx)(m,{variant:`ghost`,onClick:n,children:b(`common:actions.cancel`)}),(0,_.jsxs)(m,{onClick:()=>c(t.id),children:[g===`fork`?(0,_.jsx)(f,{className:`w-3.5 h-3.5 mr-1.5`}):(0,_.jsx)(u,{className:`w-3.5 h-3.5 mr-1.5`}),b(g===`fork`?`actions.fork`:`actions.use`)]})]})]})})})}export{b as n,y as r,v as t};
1
+ import{t as e}from"./brain-BPbhM1Jx.js";import{Bn as t,D as n,G as r,J as i,K as a,W as o,Y as s,_n as c,jt as l,kt as u,lt as d,q as f,qt as p,sn as m,tt as h,vn as g}from"./index-89SuhD4Y.js";var _=d(),v={start:p,"ai-step":e,shell:u,decider:m,condition:m,end:l};function y(e){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:u,onClose:d,onUse:p,mode:m=`use`}){let{t:b}=t(`loops`);return(0,_.jsx)(o,{open:u!==null,onOpenChange:e=>{e||d()},children:(0,_.jsx)(r,{movableResizable:!0,className:`max-w-lg`,children:u&&(0,_.jsxs)(_.Fragment,{children:[(0,_.jsxs)(i,{children:[(0,_.jsxs)(s,{className:`flex items-center gap-2`,children:[(0,_.jsx)(e,{className:`w-4 h-4 text-accent-highlight`}),u.name]}),(0,_.jsx)(a,{children:u.description})]}),(0,_.jsxs)(`div`,{className:`flex flex-wrap gap-1.5`,children:[n(u.graph)?(0,_.jsx)(`span`,{title:b(`gallery.needsSpecHint`),className:`px-1.5 py-0.5 rounded text-[10px] bg-accent-secondary/15 text-accent-secondary`,children:b(`gallery.needsSpec`)}):(0,_.jsx)(`span`,{title:b(`gallery.standaloneHint`),className:`px-1.5 py-0.5 rounded text-[10px] bg-accent-success/15 text-accent-success`,children:b(`gallery.standalone`)}),u.category&&(0,_.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-[10px] bg-accent-info/15 text-accent-info`,children:b(`categories.${u.category}`,{defaultValue:u.category})}),u.tags.map(e=>(0,_.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-[10px] bg-muted text-muted-foreground`,children:e},e))]}),(0,_.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:b(`preview.limits`,{iterations:u.graph.config.maxIterations,timeout:u.graph.config.timeoutMinutes})}),(0,_.jsxs)(`div`,{className:`max-h-[50vh] overflow-y-auto space-y-1.5 pr-1`,children:[(0,_.jsx)(`span`,{className:`block text-[10px] font-medium uppercase tracking-wide text-muted-foreground`,children:b(`preview.steps`)}),u.graph.nodes.map((e,t)=>{let n=v[e.type]??l,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-xs font-medium text-foreground`,children:[(0,_.jsxs)(`span`,{className:`text-[10px] text-muted-foreground tabular-nums`,children:[t+1,`.`]}),(0,_.jsx)(n,{className:`w-3.5 h-3.5 text-accent-primary`}),b(`builder.nodes.${e.type}`)]}),r&&(0,_.jsx)(`pre`,{className:`mt-1 whitespace-pre-wrap break-words text-[11px] text-muted-foreground font-mono`,children:r})]},e.id)})]}),(0,_.jsxs)(f,{children:[(0,_.jsx)(h,{variant:`ghost`,onClick:d,children:b(`common:actions.cancel`)}),(0,_.jsxs)(h,{onClick:()=>p(u.id),children:[m===`fork`?(0,_.jsx)(g,{className:`w-3.5 h-3.5 mr-1.5`}):(0,_.jsx)(c,{className:`w-3.5 h-3.5 mr-1.5`}),b(m===`fork`?`actions.fork`:`actions.use`)]})]})]})})})}export{b as n,y as r,v as t};
@@ -0,0 +1 @@
1
+ var e=`Control de misiones`,t=`Maneja Specrails conversando`,n=`Control de misiones`,r=`Pídele al agente lo que necesites…`,i=`Enviar`,a=`Detener`,o=`Copiar`,s={openPreview:`Previsualizar {{name}}`,openDownload:`Descargar {{name}}`,previewTitle:`Vista previa de {{name}}`,downloadTitle:`¿Descargar archivo?`,downloadPrompt:`Este archivo no se puede previsualizar aquí. ¿Quieres descargarlo?`,download:`Descargar`,cancelDownload:`Ahora no`,loading:`Preparando archivo…`,loadFailed:`No se pudo cargar el adjunto`,loadError:`No se pudo cargar el adjunto: {{error}}`},c=`Maximizar`,l=`Restaurar`,u=`Minimizar`,d=`Cerrar`,f=`Nueva misión`,p=`¿Cuál es la misión?`,m=`Elige un proyecto y luego pregunta. El tablero se actualiza en vivo mientras el agente trabaja.`,h=`Pensando…`,g=`Conectando…`,_=`Consultando la app…`,v={compact:`Compacto`,comfortable:`Cómodo`,max:`Maximizar`},y={label:`Modelo`},b={hint:`Explorando historial de prompts — escribe para editar, ↑↓ para navegar`},x={queued:`En cola`,send:`Enviar a la cola`,sendHint:`El agente sigue trabajando — este mensaje se pondrá en cola y se ejecutará después`,placeholder:`Añade más mientras el agente trabaja — se pondrá en cola…`},S={editing:`Editando mensaje en cola {{n}} de {{m}}`,hint:`↑↓ para navegar · Enter guarda · Esc cancela`,save:`Guardar mensaje en cola`,cancel:`Cancelar edición`,dispatched:`Ese mensaje en cola ya se envió — tu texto se conserva como borrador`,saveFailed:`No se pudo guardar el mensaje en cola`},C={branch:`Rama`,detached:`(detached)`,dirty:`Cambios sin commitear`,switched:`Cambiado a {{branch}}`,switchFailed:`No se pudo cambiar de rama`,lockedWhileWorking:`Rama bloqueada mientras el agente trabaja`,searchPlaceholder:`Buscar ramas…`,noMatches:`Ninguna rama coincide`,worktrees:`Worktrees`,worktreePathCopied:`Ruta del worktree copiada`,copyWorktreePath:`Copiar ruta del worktree`},w={label:`Proveedor`,claude:`Claude`,codex:`Codex`,gemini:`Gemini`},T={cycleHint:`⇧⇥ para cambiar`,observe:{name:`Observa`,desc:`Solo lectura — nada cambia`},edit:{name:`Edita`,desc:`Crear y editar (reversible)`},operate:{name:`Opera`,desc:`Lanzar IA — tiene coste`},autonomous:{name:`Autónomo`,desc:`Borrar y detener — irreversible`},lockedTitle:`Necesita un nivel superior`,lockedBody:`Esa acción necesita el nivel «{{level}}». Estás en «{{current}}».`,raiseHint:`⇧⇥ para subir el nivel, o pídelo de otra forma.`},E={title:`Confirmar acción`,costAction:`{{action}} · ~{{cost}} · {{tier}}`,approve:`Aprobar`,cancel:`Cancelar`,dontAskAgain:`No volver a preguntar en esta sesión`,approved:`Aprobado`,cancelled:`Cancelado`},D={home:`Inicio`,searchPlaceholder:`Habla con Specrails…`,recents:`Recientes`,allProjects:`Todos los proyectos`,searchAll:`Buscar en todos los proyectos`,addProject:`Añadir proyecto…`,homeHint:`Ningún proyecto seleccionado — operando en todos los proyectos.`,askCreateOrSearch:`No hay ningún proyecto seleccionado. ¿Quieres crear un proyecto nuevo o buscar en todos los proyectos?`},O={remove:`Quitar {{label}}`,addContextAction:`Añadir contexto o acción`,filtering:`Filtrando "{{query}}"`,keyboard:`↑↓ Enter Esc`,noMatches:`Sin resultados`,noMatchesFor:`Sin resultados para "{{query}}"`,mode:{reference:{title:`Referencia`,hint:`@ proyectos, especificaciones, misiones`},trace:{title:`Traza`,hint:`# jobs, ejecuciones, IDs`},action:{title:`Acción`,hint:`/ comandos para este contexto`}},plus:{reference:`Referencia`,referenceHint:`Proyectos, especificaciones, misiones`,trace:`Traza`,traceHint:`Jobs, ejecuciones, IDs`,action:`Acción`,actionHint:`Crear, lanzar, inspeccionar`,fileAttachment:`Archivo adjunto`,fileAttachmentHint:`Añadir docs, imágenes, logs`,browserCapture:`Captura del navegador`,browserCaptureHint:`Disponible desde el navegador del workspace`}},k={label:`Cambiar de misión`,untitled:`Nueva misión`,new:`Nueva misión`,searchPlaceholder:`Buscar misiones…`,noMatches:`Ninguna misión coincide`,working:`El agente está trabajando`,queuedBadge:`{{n}} en cola`,delete:`Eliminar misión "{{title}}"`,deleteConfirm:`¿Eliminar?`,deleteLiveConfirm:`El agente está trabajando — ¿eliminar igualmente?`,confirmDelete:`Confirmar eliminación`,cancelDelete:`Conservar misión`,deleteFailed:`No se pudo eliminar la misión`},A={title:`No hay ningún proveedor de IA instalado`,body:`El agente necesita Claude, Codex o Gemini en tu máquina. Instala uno y vuelve a abrir el agente para empezar a chatear.`,placeholder:`Instala un proveedor de IA para usar el agente…`},j={title:`El MCP de Specrails está apagado`,body:`El agente necesita el servidor MCP integrado para manejar la app.`,enable:`Activar el MCP de Specrails`,enabling:`Activando…`,enabled:`MCP activado`},M={live:`en vivo`,queued:`en cola`,running:`en curso`,done:`hecho`,failed:`fallido`},N={generic:`Algo salió mal. Inténtalo de nuevo.`,busy:`El agente está ocupado. Inténtalo de nuevo en un momento.`},P={kindAgent:`Misión del agente`},F=`Nueva misión`,I=`Cambiar a Control de misiones`,L=`Cambiar al tablero`,R=`Buscar`,z=`Inicio`,B=`Misiones favoritas`,V=`Sin título`,H={title:`En el workspace`,terminal:`Terminal`,files:`Archivos`,browser:`Navegador`,requiresProject:`Selecciona un proyecto para usar esta herramienta`,resizeCode:`Redimensionar panel de código`,closeFiles:`Cerrar código`,browserConfirm:`Añadir al agente`,browserCaptured:`Captura añadida`,uploadFailed:`Error al subir`,requiresConversation:`Inicia una misión para usar esta herramienta`,jobs:`Jobs`,closeJobs:`Cerrar jobs`,resizeJobs:`Redimensionar panel de jobs`,noJobs:`Aún no hay jobs — pide al agente que lance uno`},U=`Adjuntar archivo`,W=`Borrar «{{title}}»`,G=`Confirmar borrado de «{{title}}»`,K=`Añadir «{{title}}» a favoritas`,q=`Quitar «{{title}}» de favoritas`,J=`¿confirmar?`,Y=`Este proveedor aún no lee imágenes — adjunta archivos de texto`,X={label:`Esfuerzo`,minimal:`Mínimo`,low:`Bajo`,medium:`Medio`,high:`Alto`,xhigh:`Extra alto`},Z={rail:`Rail {{index}}`,specCount_one:`{{count}} spec`,specCount_other:`{{count}} specs`,base:`Rama base`,openPr:`Abrir PR`,existingPr:`PR existente`,title:{building:`Implementando en un worktree aislado…`,buildingExistingPr:`Aplicando cambios sobre una PR existente…`,on_review:`Implementación lista para revisar`,pr_draft:`PR en borrador creada`,pr_draft_degraded:`Entrega de la PR incompleta`,pr_ready:`PR lista para el merge`,implementation_failed:`La implementación ha fallado`,pr_failed:`No se pudo crear la PR`,merged:`Merge de la PR completado`,discarded:`Descartada`},buildingHint:`Cuando termine, se te preguntará si crear la PR.`,buildingExistingPrHint:`Specrails está trabajando sobre la rama de la PR existente y subirá los cambios de revisión a esa misma PR.`,createPr:`Crear PR`,publish:`Publicar`,checkout:`Checkout`,checkoutTooltip:`Cambia la carpeta principal del proyecto a {{branch}}`,checkoutSuccess:`Checkout en {{branch}}`,checkoutFailed:`No se pudo hacer checkout de la rama de la PR`,retry:`Reintentar`,retryPr:`Reintentar PR`,checkMerge:`Comprobar merge`,discard:`Descartar`,confirmDiscard:`¿Confirmar descarte?`,mergedNote:`Merge completado — las specs han pasado a Hecho`,discardedNote:`Descartada — las specs han vuelto al backlog`,implementationFailedNote:`El run de implementación falló antes de generar algo entregable. Abre el log del run para revisar el fallo y descarta esta card antes de relanzar.`,degraded:{pushed:`La rama se subió pero no se pudo crear la PR — reintenta para terminar.`,localOnly:`Los cambios se ensamblaron en local pero no se subieron — reintenta para publicar la PR.`},alreadyResolved:`Ya resuelta en otro sitio`,actionFailed:`La acción falló`,notMergedYet:`Aún sin merge`,viewLog:`Ver el registro de ejecución de {{ref}}`,runElapsedAria:`{{elapsed}} transcurridos`,runCostAria:`{{cost}} gastados`,pinned:{label:`Fijada`,marker:`Tarjeta de implementación — fijada arriba`,collapse:`Minimizar tarjeta fijada`,expand:`Expandir tarjeta fijada`,expandCard:`Expandir esta tarjeta`,collapseCard:`Minimizar esta tarjeta`,collapsed_one:`Tarjeta de implementación`,collapsed_other:`{{count}} tarjetas de implementación`,state:{building:`En curso`,on_review:`Revisión`,pr_draft:`PR borrador`,pr_ready:`Publicada`,implementation_failed:`Fallida`,pr_failed:`Fallida`,merged:`Fusionada`,discarded:`Descartada`}},mergeLocal:`Integrar en local`,mergeLocalTooltip:`Fusiona las ramas entregadas en {{base}} en tu checkout local (sin necesidad de GitHub)`,mergeLocalBlockedDirty:`No se puede integrar: tu árbol de trabajo en {{base}} tiene cambios sin commitear. Haz commit o stash y reintenta.`,mergeLocalBlockedBranch:`No se puede integrar: tu checkout está en {{current}}, no en {{base}}. Cambia a {{base}} y reintenta.`,mergedLocally:`Integrado en {{base}} en local`},Q={heading:`Borrador de spec`,drafting:`Actualizando borrador…`,acceptanceCriteria:`Criterios de aceptación`,untitled:`Spec sin título`,expand:`Ver descripción completa`,collapse:`Contraer descripción`},$={openTicket:`Abrir spec #{{id}}`,openPullRequest:`Abrir PR #{{id}}`,openJob:`Abrir job {{id}}`,openLoop:`Abrir loop {{id}}`,ticketNotFound:`Spec #{{id}} no encontrada — puede haber sido eliminada`,pullRequestUrlMissing:`La PR #{{id}} se mencionó sin URL`,pullRequestNotFound:`No se pudo encontrar la PR #{{id}} en este proyecto`,jobNotFound:`Job no encontrado — puede haber sido eliminado`,loopNotFound:`Loop no encontrado — puede haber sido eliminado`,lookupFailed:`No se pudo verificar la referencia — inténtalo de nuevo`},ee={untitled:`Misión sin título`,menu:`Menú de la misión`,rename:`Renombrar`,renamePlaceholder:`Nombre de la misión`,renameHint:`Doble clic para renombrar`,renameFailed:`No se pudo renombrar`,addFavorite:`Añadir a favoritas`,removeFavorite:`Quitar de favoritas`,copyName:`Copiar nombre de la misión`,copyId:`Copiar ID de la misión`,copyProject:`Copiar nombre del proyecto`,copyProjectPath:`Copiar ruta del proyecto`,copyFailed:`No se pudo copiar`,copyTranscript:`Copiar transcripción`,copyTranscriptSuccess:`Transcripción copiada`,copyTranscriptFailed:`No se pudo copiar la transcripción`,exportTranscript:`Exportar transcripción (.txt)`,exportTranscriptSuccess:`Exportación de transcripción iniciada`,exportTranscriptFailed:`No se pudo exportar la transcripción`,delete:`Borrar misión`,deleteConfirm:`¿Borrar esta misión? No se puede deshacer.`,deleteFailed:`No se pudo borrar la misión`},te=`¿Qué construimos ahora?`,ne={title:e,subtitle:t,trigger:n,composerPlaceholder:r,send:i,stop:a,copy:o,attachment:s,maximize:c,restore:l,minimize:u,close:d,newConversation:f,emptyTitle:p,emptyHint:m,thinking:h,connecting:g,consultingCode:_,size:v,model:y,history:b,queue:x,queueEdit:S,git:C,provider:w,tier:T,approval:E,project:D,palette:O,mission:k,noProvider:A,degraded:j,toolCard:M,error:N,chip:P,newAgent:F,switchToAgent:I,switchToKanban:L,search:R,home:z,favoriteMissions:B,untitled:V,workspace:H,attachFile:U,deleteConversation:W,confirmDeleteConversation:G,addFavoriteConversation:K,removeFavoriteConversation:q,confirmShort:J,imagesUnsupported:Y,effort:X,prCard:Z,specDraft:Q,refs:$,header:ee,emptyTitleCodeRain:te};export{K as addFavoriteConversation,E as approval,U as attachFile,s as attachment,P as chip,d as close,r as composerPlaceholder,G as confirmDeleteConversation,J as confirmShort,g as connecting,_ as consultingCode,o as copy,ne as default,j as degraded,W as deleteConversation,X as effort,m as emptyHint,p as emptyTitle,te as emptyTitleCodeRain,N as error,B as favoriteMissions,C as git,ee as header,b as history,z as home,Y as imagesUnsupported,c as maximize,u as minimize,k as mission,y as model,F as newAgent,f as newConversation,A as noProvider,O as palette,Z as prCard,D as project,w as provider,x as queue,S as queueEdit,$ as refs,q as removeFavoriteConversation,l as restore,R as search,i as send,v as size,Q as specDraft,a as stop,t as subtitle,I as switchToAgent,L as switchToKanban,h as thinking,T as tier,e as title,M as toolCard,n as trigger,V as untitled,H as workspace};
@@ -0,0 +1 @@
1
+ var e=`Contrôle des missions`,t=`Pilotez Specrails en discutant`,n=`Contrôle des missions`,r=`Demandez à l'agent ce que vous voulez…`,i=`Envoyer`,a=`Arrêter`,o=`Copier`,s={openPreview:`Prévisualiser {{name}}`,openDownload:`Télécharger {{name}}`,previewTitle:`Aperçu de {{name}}`,downloadTitle:`Télécharger le fichier ?`,downloadPrompt:`Ce fichier ne peut pas être prévisualisé ici. Voulez-vous le télécharger ?`,download:`Télécharger`,cancelDownload:`Pas maintenant`,loading:`Préparation du fichier…`,loadFailed:`Impossible de charger la pièce jointe`,loadError:`Impossible de charger la pièce jointe : {{error}}`},c=`Agrandir`,l=`Restaurer`,u=`Réduire`,d=`Fermer`,f=`Nouvelle mission`,p=`Quelle est la mission ?`,m=`Choisissez un projet, puis demandez. Le tableau se met à jour en direct pendant que l'agent travaille.`,h=`Réflexion…`,g=`Connexion…`,_=`Consultation de l'app…`,v={compact:`Compact`,comfortable:`Confortable`,max:`Agrandir`},y={label:`Modèle`},b={hint:`Parcours de l'historique — tapez pour modifier, ↑↓ pour naviguer`},x={queued:`En file`,send:`Envoyer dans la file`,sendHint:`L'agent travaille encore — ce message sera mis en file puis traité`,placeholder:`Ajoutez-en pendant que l'agent travaille — mis en file…`},S={editing:`Modification du message en file {{n}} sur {{m}}`,hint:`↑↓ pour naviguer · Entrée enregistre · Échap annule`,save:`Enregistrer le message en file`,cancel:`Annuler la modification`,dispatched:`Ce message en file a déjà été envoyé — votre texte est conservé comme brouillon`,saveFailed:`Impossible d'enregistrer le message en file`},C={branch:`Branche`,detached:`(détaché)`,dirty:`Modifications non commitées`,switched:`Basculé sur {{branch}}`,switchFailed:`Impossible de changer de branche`,lockedWhileWorking:`Branche verrouillée pendant que l'agent travaille`,searchPlaceholder:`Rechercher des branches…`,noMatches:`Aucune branche ne correspond`,worktrees:`Worktrees`,worktreePathCopied:`Chemin du worktree copié`,copyWorktreePath:`Copier le chemin du worktree`},w={label:`Fournisseur`,claude:`Claude`,codex:`Codex`,gemini:`Gemini`},T={cycleHint:`⇧⇥ pour changer`,observe:{name:`Observer`,desc:`Lecture seule — rien ne change`},edit:{name:`Modifier`,desc:`Créer et modifier (réversible)`},operate:{name:`Opérer`,desc:`Lancer l'IA — c'est payant`},autonomous:{name:`Autonome`,desc:`Supprimer et arrêter — irréversible`},lockedTitle:`Nécessite un niveau supérieur`,lockedBody:`Cette action nécessite le niveau « {{level}} ». Vous êtes sur « {{current}} ».`,raiseHint:`⇧⇥ pour augmenter le niveau, ou demandez autrement.`},E={title:`Confirmer l'action`,costAction:`{{action}} · ~{{cost}} · {{tier}}`,approve:`Approuver`,cancel:`Annuler`,dontAskAgain:`Ne plus demander durant cette session`,approved:`Approuvé`,cancelled:`Annulé`},D={home:`Accueil`,searchPlaceholder:`Parlez à Specrails…`,recents:`Récents`,allProjects:`Tous les projets`,searchAll:`Rechercher dans tous les projets`,addProject:`Ajouter un projet…`,homeHint:`Aucun projet sélectionné — opération sur tous les projets.`,askCreateOrSearch:`Aucun projet n'est sélectionné. Voulez-vous créer un nouveau projet ou rechercher dans tous les projets ?`},O={remove:`Retirer {{label}}`,addContextAction:`Ajouter un contexte ou une action`,filtering:`Filtrage de "{{query}}"`,keyboard:`↑↓ Enter Esc`,noMatches:`Aucun résultat`,noMatchesFor:`Aucun résultat pour "{{query}}"`,mode:{reference:{title:`Référence`,hint:`@ projets, specs, missions`},trace:{title:`Trace`,hint:`# jobs, exécutions, IDs`},action:{title:`Action`,hint:`/ commandes pour ce contexte`}},plus:{reference:`Référence`,referenceHint:`Projets, specs, missions`,trace:`Trace`,traceHint:`Jobs, exécutions, IDs`,action:`Action`,actionHint:`Créer, lancer, inspecter`,fileAttachment:`Pièce jointe`,fileAttachmentHint:`Ajouter docs, images, logs`,browserCapture:`Capture navigateur`,browserCaptureHint:`Disponible depuis le navigateur du workspace`}},k={label:`Changer de mission`,untitled:`Nouvelle mission`,new:`Nouvelle mission`,searchPlaceholder:`Rechercher des missions…`,noMatches:`Aucune mission ne correspond`,working:`L'agent travaille`,queuedBadge:`{{n}} en file`,delete:`Supprimer la mission "{{title}}"`,deleteConfirm:`Supprimer ?`,deleteLiveConfirm:`L'agent travaille — supprimer quand même ?`,confirmDelete:`Confirmer la suppression`,cancelDelete:`Garder la mission`,deleteFailed:`Impossible de supprimer la mission`},A={title:`Aucun fournisseur d'IA installé`,body:`L'agent a besoin de Claude, Codex ou Gemini sur votre machine. Installez-en un, puis rouvrez l'agent pour discuter.`,placeholder:`Installez un fournisseur d'IA pour utiliser l'agent…`},j={title:`Le MCP Specrails est désactivé`,body:`L'agent a besoin du serveur MCP intégré pour piloter l'app.`,enable:`Activer le MCP Specrails`,enabling:`Activation…`,enabled:`MCP activé`},M={live:`en direct`,queued:`en file`,running:`en cours`,done:`terminé`,failed:`échoué`},N={generic:`Une erreur est survenue. Réessayez.`,busy:`L'agent est occupé. Réessayez dans un instant.`},P={kindAgent:`Mission de l'agent`},F=`Nouvelle mission`,I=`Passer au Contrôle des missions`,L=`Passer au tableau`,R=`Rechercher`,z=`Accueil`,B=`Missions favorites`,V=`Sans titre`,H={title:`Espace de travail`,terminal:`Terminal`,files:`Fichiers`,browser:`Navigateur`,requiresProject:`Sélectionnez un projet pour utiliser cet outil`,resizeCode:`Redimensionner le volet de code`,closeFiles:`Fermer le code`,browserConfirm:`Ajouter à l'agent`,browserCaptured:`Capture ajoutée`,uploadFailed:`Échec du téléversement`,requiresConversation:`Lancez une mission pour utiliser cet outil`,jobs:`Jobs`,closeJobs:`Fermer les jobs`,resizeJobs:`Redimensionner le panneau des jobs`,noJobs:`Aucun job pour l'instant — demandez à l'agent d'en lancer un`},U=`Joindre un fichier`,W=`Supprimer «\xA0{{title}}\xA0»`,G=`Confirmer la suppression de «\xA0{{title}}\xA0»`,K=`Ajouter «\xA0{{title}}\xA0» aux favorites`,q=`Retirer «\xA0{{title}}\xA0» des favorites`,J=`confirmer\xA0?`,Y=`Ce fournisseur ne lit pas encore les images — joignez plutôt des fichiers texte`,X={label:`Effort`,minimal:`Minimal`,low:`Faible`,medium:`Moyen`,high:`Élevé`,xhigh:`Très élevé`},Z={rail:`Rail {{index}}`,specCount_one:`{{count}} spec`,specCount_other:`{{count}} specs`,base:`Branche de base`,openPr:`Ouvrir la PR`,existingPr:`PR existante`,title:{building:`Implémentation dans un worktree isolé…`,buildingExistingPr:`Application des changements sur une PR existante…`,on_review:`Implémentation prête pour la revue`,pr_draft:`PR en brouillon créée`,pr_draft_degraded:`Livraison de la PR incomplète`,pr_ready:`PR prête à être fusionnée`,implementation_failed:`Échec de l’implémentation`,pr_failed:`Échec de la création de la PR`,merged:`PR fusionnée`,discarded:`Abandonnée`},buildingHint:`À la fin, il vous sera proposé de créer la PR.`,buildingExistingPrHint:`Specrails travaille sur la branche de la PR existante et poussera les changements de revue vers cette même PR.`,createPr:`Créer la PR`,publish:`Publier`,checkout:`Checkout`,checkoutTooltip:`Basculer le dossier principal du projet sur {{branch}}`,checkoutSuccess:`Checkout effectué sur {{branch}}`,checkoutFailed:`Impossible de faire le checkout de la branche de la PR`,retry:`Réessayer`,retryPr:`Réessayer la PR`,checkMerge:`Vérifier le merge`,discard:`Abandonner`,confirmDiscard:`Confirmer l'abandon ?`,mergedNote:`Fusionnée — specs passées en Terminé`,discardedNote:`Abandonnée — specs renvoyées vers le backlog`,implementationFailedNote:`Le run d’implémentation a échoué avant de produire quelque chose de livrable. Ouvrez le journal du run pour inspecter l’échec, puis abandonnez cette carte avant de relancer.`,degraded:{pushed:`La branche a été poussée mais la PR n'a pas pu être créée — réessayez pour terminer.`,localOnly:`Les modifications ont été assemblées en local mais pas poussées — réessayez pour publier la PR.`},alreadyResolved:`Déjà résolue ailleurs`,actionFailed:`L'action a échoué`,notMergedYet:`Pas encore fusionnée`,viewLog:`Voir le journal d'exécution de {{ref}}`,runElapsedAria:`{{elapsed}} écoulées`,runCostAria:`{{cost}} dépensés`,pinned:{label:`Épinglée`,marker:`Carte d’implémentation — épinglée ci-dessus`,collapse:`Réduire la carte épinglée`,expand:`Déployer la carte épinglée`,expandCard:`Développer cette carte`,collapseCard:`Réduire cette carte`,collapsed_one:`Carte d’implémentation`,collapsed_other:`{{count}} cartes d’implémentation`,state:{building:`En cours`,on_review:`Revue`,pr_draft:`PR brouillon`,pr_ready:`Publiée`,implementation_failed:`Échec`,pr_failed:`Échec`,merged:`Fusionnée`,discarded:`Abandonnée`}},mergeLocal:`Intégrer en local`,mergeLocalTooltip:`Fusionne les branches livrées dans {{base}} dans votre checkout local (sans GitHub)`,mergeLocalBlockedDirty:`Impossible d'intégrer : votre arbre de travail sur {{base}} contient des changements non commités. Commitez ou stashez-les, puis réessayez.`,mergeLocalBlockedBranch:`Impossible d'intégrer : votre checkout est sur {{current}}, pas sur {{base}}. Passez sur {{base}}, puis réessayez.`,mergedLocally:`Intégré dans {{base}} en local`},Q={heading:`Brouillon de spec`,drafting:`Mise à jour du brouillon…`,acceptanceCriteria:`Critères d'acceptation`,untitled:`Spec sans titre`,expand:`Afficher la description complète`,collapse:`Réduire la description`},$={openTicket:`Ouvrir la spec #{{id}}`,openPullRequest:`Ouvrir la PR #{{id}}`,openJob:`Ouvrir le job {{id}}`,openLoop:`Ouvrir la boucle {{id}}`,ticketNotFound:`Spec #{{id}} introuvable — elle a peut-être été supprimée`,pullRequestUrlMissing:`La PR #{{id}} est mentionnée sans URL`,pullRequestNotFound:`PR #{{id}} introuvable dans ce projet`,jobNotFound:`Job introuvable — il a peut-être été supprimé`,loopNotFound:`Boucle introuvable — elle a peut-être été supprimée`,lookupFailed:`Impossible de vérifier la référence — réessayez`},ee={untitled:`Mission sans titre`,menu:`Menu de la mission`,rename:`Renommer`,renamePlaceholder:`Nom de la mission`,renameHint:`Double-clic pour renommer`,renameFailed:`Renommage impossible`,addFavorite:`Ajouter aux favorites`,removeFavorite:`Retirer des favorites`,copyName:`Copier le nom de la mission`,copyId:`Copier l'ID de la mission`,copyProject:`Copier le nom du projet`,copyProjectPath:`Copier le chemin du projet`,copyFailed:`Copie impossible`,copyTranscript:`Copier la transcription`,copyTranscriptSuccess:`Transcription copiée`,copyTranscriptFailed:`Impossible de copier la transcription`,exportTranscript:`Exporter la transcription (.txt)`,exportTranscriptSuccess:`Export de la transcription lancé`,exportTranscriptFailed:`Impossible d'exporter la transcription`,delete:`Supprimer la mission`,deleteConfirm:`Supprimer cette mission ? Action irréversible.`,deleteFailed:`Impossible de supprimer la mission`},te=`Que doit-on construire maintenant ?`,ne={title:e,subtitle:t,trigger:n,composerPlaceholder:r,send:i,stop:a,copy:o,attachment:s,maximize:c,restore:l,minimize:u,close:d,newConversation:f,emptyTitle:p,emptyHint:m,thinking:h,connecting:g,consultingCode:_,size:v,model:y,history:b,queue:x,queueEdit:S,git:C,provider:w,tier:T,approval:E,project:D,palette:O,mission:k,noProvider:A,degraded:j,toolCard:M,error:N,chip:P,newAgent:F,switchToAgent:I,switchToKanban:L,search:R,home:z,favoriteMissions:B,untitled:V,workspace:H,attachFile:U,deleteConversation:W,confirmDeleteConversation:G,addFavoriteConversation:K,removeFavoriteConversation:q,confirmShort:J,imagesUnsupported:Y,effort:X,prCard:Z,specDraft:Q,refs:$,header:ee,emptyTitleCodeRain:te};export{K as addFavoriteConversation,E as approval,U as attachFile,s as attachment,P as chip,d as close,r as composerPlaceholder,G as confirmDeleteConversation,J as confirmShort,g as connecting,_ as consultingCode,o as copy,ne as default,j as degraded,W as deleteConversation,X as effort,m as emptyHint,p as emptyTitle,te as emptyTitleCodeRain,N as error,B as favoriteMissions,C as git,ee as header,b as history,z as home,Y as imagesUnsupported,c as maximize,u as minimize,k as mission,y as model,F as newAgent,f as newConversation,A as noProvider,O as palette,Z as prCard,D as project,w as provider,x as queue,S as queueEdit,$ as refs,q as removeFavoriteConversation,l as restore,R as search,i as send,v as size,Q as specDraft,a as stop,t as subtitle,I as switchToAgent,L as switchToKanban,h as thinking,T as tier,e as title,M as toolCard,n as trigger,V as untitled,H as workspace};
@@ -0,0 +1 @@
1
+ var e=`Controllo missioni`,t=`Gestisci Specrails chattando`,n=`Controllo missioni`,r=`Chiedi all'agente qualsiasi cosa…`,i=`Invia`,a=`Ferma`,o=`Copia`,s={openPreview:`Anteprima di {{name}}`,openDownload:`Scarica {{name}}`,previewTitle:`Anteprima di {{name}}`,downloadTitle:`Scaricare il file?`,downloadPrompt:`Questo file non può essere visualizzato qui. Vuoi scaricarlo?`,download:`Scarica`,cancelDownload:`Non ora`,loading:`Preparazione del file…`,loadFailed:`Impossibile caricare l'allegato`,loadError:`Impossibile caricare l'allegato: {{error}}`},c=`Massimizza`,l=`Ripristina`,u=`Riduci a icona`,d=`Chiudi`,f=`Nuova missione`,p=`Qual è la missione?`,m=`Scegli un progetto, poi chiedi. La board si aggiorna in tempo reale mentre l'agente lavora.`,h=`Sto pensando…`,g=`Connessione…`,_=`Consulto l'app…`,v={compact:`Compatto`,comfortable:`Comodo`,max:`Ingrandisci`},y={label:`Modello`},b={hint:`Cronologia prompt — scrivi per modificare, ↑↓ per navigare`},x={queued:`In coda`,send:`Invia in coda`,sendHint:`L'agente sta ancora lavorando — questo messaggio verrà messo in coda ed eseguito dopo`,placeholder:`Aggiungi altro mentre l'agente lavora — verrà messo in coda…`},S={editing:`Modifica del messaggio in coda {{n}} di {{m}}`,hint:`↑↓ per navigare · Invio salva · Esc annulla`,save:`Salva messaggio in coda`,cancel:`Annulla modifica`,dispatched:`Quel messaggio in coda è già stato inviato — il tuo testo è conservato come bozza`,saveFailed:`Impossibile salvare il messaggio in coda`},C={branch:`Branch`,detached:`(detached)`,dirty:`Modifiche non committate`,switched:`Passato a {{branch}}`,switchFailed:`Impossibile cambiare branch`,lockedWhileWorking:`Branch bloccato mentre l'agente lavora`,searchPlaceholder:`Cerca branch…`,noMatches:`Nessun branch corrisponde`,worktrees:`Worktree`,worktreePathCopied:`Percorso del worktree copiato`,copyWorktreePath:`Copia percorso del worktree`},w={label:`Provider`,claude:`Claude`,codex:`Codex`,gemini:`Gemini`},T={cycleHint:`⇧⇥ per cambiare`,observe:{name:`Osserva`,desc:`Solo lettura — niente cambia`},edit:{name:`Modifica`,desc:`Crea e modifica (reversibile)`},operate:{name:`Opera`,desc:`Avvia l'IA — ha un costo`},autonomous:{name:`Autonomo`,desc:`Elimina e arresta — irreversibile`},lockedTitle:`Serve un livello superiore`,lockedBody:`Quell'azione richiede il livello «{{level}}». Sei su «{{current}}».`,raiseHint:`⇧⇥ per alzare il livello, o chiedi in un altro modo.`},E={title:`Conferma azione`,costAction:`{{action}} · ~{{cost}} · {{tier}}`,approve:`Approva`,cancel:`Annulla`,dontAskAgain:`Non chiedere più in questa sessione`,approved:`Approvato`,cancelled:`Annullato`},D={home:`Home`,searchPlaceholder:`Parla con Specrails…`,recents:`Recenti`,allProjects:`Tutti i progetti`,searchAll:`Cerca in tutti i progetti`,addProject:`Aggiungi progetto…`,homeHint:`Nessun progetto selezionato — operando su tutti i progetti.`,askCreateOrSearch:`Nessun progetto è selezionato. Vuoi creare un nuovo progetto o cercare in tutti i progetti?`},O={remove:`Rimuovi {{label}}`,addContextAction:`Aggiungi contesto o azione`,filtering:`Filtro "{{query}}"`,keyboard:`↑↓ Enter Esc`,noMatches:`Nessun risultato`,noMatchesFor:`Nessun risultato per "{{query}}"`,mode:{reference:{title:`Riferimento`,hint:`@ progetti, spec, missioni`},trace:{title:`Traccia`,hint:`# job, esecuzioni, ID`},action:{title:`Azione`,hint:`/ comandi per questo contesto`}},plus:{reference:`Riferimento`,referenceHint:`Progetti, spec, missioni`,trace:`Traccia`,traceHint:`Job, esecuzioni, ID`,action:`Azione`,actionHint:`Crea, avvia, ispeziona`,fileAttachment:`File allegato`,fileAttachmentHint:`Aggiungi doc, immagini, log`,browserCapture:`Cattura browser`,browserCaptureHint:`Disponibile dal browser del workspace`}},k={label:`Cambia missione`,untitled:`Nuova missione`,new:`Nuova missione`,searchPlaceholder:`Cerca missioni…`,noMatches:`Nessuna missione corrisponde`,working:`L'agente sta lavorando`,queuedBadge:`{{n}} in coda`,delete:`Elimina missione "{{title}}"`,deleteConfirm:`Eliminare?`,deleteLiveConfirm:`L'agente sta lavorando — eliminare comunque?`,confirmDelete:`Conferma eliminazione`,cancelDelete:`Mantieni missione`,deleteFailed:`Impossibile eliminare la missione`},A={title:`Nessun provider IA installato`,body:`L'agente richiede Claude, Codex o Gemini sul tuo computer. Installane uno e riapri l'agente per iniziare a chattare.`,placeholder:`Installa un provider IA per usare l'agente…`},j={title:`L'MCP di Specrails è spento`,body:`L'agente ha bisogno del server MCP integrato per gestire l'app.`,enable:`Attiva l'MCP di Specrails`,enabling:`Attivazione…`,enabled:`MCP attivato`},M={live:`in diretta`,queued:`in coda`,running:`in corso`,done:`completato`,failed:`fallito`},N={generic:`Qualcosa è andato storto. Riprova.`,busy:`L'agente è occupato. Riprova tra un momento.`},P={kindAgent:`Missione dell'agente`},F=`Nuova missione`,I=`Passa al Controllo missioni`,L=`Passa alla board`,R=`Cerca`,z=`Home`,B=`Missioni preferite`,V=`Senza titolo`,H={title:`Nel workspace`,terminal:`Terminale`,files:`File`,browser:`Browser`,requiresProject:`Seleziona un progetto per usare questo strumento`,resizeCode:`Ridimensiona pannello codice`,closeFiles:`Chiudi codice`,browserConfirm:`Aggiungi all'agente`,browserCaptured:`Cattura aggiunta`,uploadFailed:`Caricamento non riuscito`,requiresConversation:`Avvia una missione per usare questo strumento`,jobs:`Jobs`,closeJobs:`Chiudi jobs`,resizeJobs:`Ridimensiona pannello jobs`,noJobs:`Ancora nessun job — chiedi all'agente di lanciarne uno`},U=`Allega file`,W=`Elimina «{{title}}»`,G=`Conferma eliminazione di «{{title}}»`,K=`Aggiungi «{{title}}» ai preferiti`,q=`Rimuovi «{{title}}» dai preferiti`,J=`confermare?`,Y=`Questo provider non legge ancora le immagini — allega file di testo`,X={label:`Sforzo`,minimal:`Minimo`,low:`Basso`,medium:`Medio`,high:`Alto`,xhigh:`Extra alto`},Z={rail:`Rail {{index}}`,specCount_one:`{{count}} spec`,specCount_other:`{{count}} spec`,base:`Ramo base`,openPr:`Apri PR`,existingPr:`PR esistente`,title:{building:`Implementazione in un worktree isolato…`,buildingExistingPr:`Applicazione delle modifiche su una PR esistente…`,on_review:`Implementazione pronta per la revisione`,pr_draft:`PR in bozza creata`,pr_draft_degraded:`Consegna della PR incompleta`,pr_ready:`PR pronta per il merge`,implementation_failed:`Implementazione non riuscita`,pr_failed:`Creazione della PR non riuscita`,merged:`Merge della PR effettuato`,discarded:`Scartata`},buildingHint:`Al termine ti verrà chiesto se creare la PR.`,buildingExistingPrHint:`Specrails sta lavorando sul branch della PR esistente e invierà le modifiche di review a quella stessa PR.`,createPr:`Crea PR`,publish:`Pubblica`,checkout:`Checkout`,checkoutTooltip:`Esegui il checkout di {{branch}} nella cartella principale del progetto`,checkoutSuccess:`Checkout eseguito su {{branch}}`,checkoutFailed:`Impossibile eseguire il checkout del branch della PR`,retry:`Riprova`,retryPr:`Riprova PR`,checkMerge:`Verifica merge`,discard:`Scarta`,confirmDiscard:`Confermare lo scarto?`,mergedNote:`Merge effettuato — le spec sono passate a Completato`,discardedNote:`Scartata — le spec sono tornate nel backlog`,implementationFailedNote:`Il run di implementazione non è riuscito prima di produrre qualcosa di consegnabile. Apri il log del run per controllare l'errore, poi scarta questa scheda prima di rilanciare.`,degraded:{pushed:`Il ramo è stato inviato ma non è stato possibile creare la PR — riprova per completare.`,localOnly:`Le modifiche sono state assemblate in locale ma non inviate — riprova per pubblicare la PR.`},alreadyResolved:`Già risolta altrove`,actionFailed:`Azione non riuscita`,notMergedYet:`Ancora nessun merge`,viewLog:`Vedi il log di esecuzione di {{ref}}`,runElapsedAria:`{{elapsed}} trascorsi`,runCostAria:`{{cost}} spesi`,pinned:{label:`Fissata`,marker:`Scheda di implementazione — fissata sopra`,collapse:`Riduci la scheda fissata`,expand:`Espandi la scheda fissata`,expandCard:`Espandi questa scheda`,collapseCard:`Riduci questa scheda`,collapsed_one:`Scheda di implementazione`,collapsed_other:`{{count}} schede di implementazione`,state:{building:`In corso`,on_review:`Revisione`,pr_draft:`PR bozza`,pr_ready:`Pubblicata`,implementation_failed:`Fallita`,pr_failed:`Fallita`,merged:`Unita`,discarded:`Scartata`}},mergeLocal:`Integra in locale`,mergeLocalTooltip:`Unisce i branch consegnati in {{base}} nel tuo checkout locale (senza GitHub)`,mergeLocalBlockedDirty:`Impossibile integrare: il tuo albero di lavoro su {{base}} ha modifiche non committate. Fai commit o stash e riprova.`,mergeLocalBlockedBranch:`Impossibile integrare: il tuo checkout è su {{current}}, non su {{base}}. Passa a {{base}} e riprova.`,mergedLocally:`Integrato in {{base}} in locale`},Q={heading:`Bozza della spec`,drafting:`Aggiornamento della bozza…`,acceptanceCriteria:`Criteri di accettazione`,untitled:`Spec senza titolo`,expand:`Mostra descrizione completa`,collapse:`Comprimi descrizione`},$={openTicket:`Apri la spec #{{id}}`,openPullRequest:`Apri PR #{{id}}`,openJob:`Apri il job {{id}}`,openLoop:`Apri loop {{id}}`,ticketNotFound:`Spec #{{id}} non trovata — potrebbe essere stata eliminata`,pullRequestUrlMissing:`La PR #{{id}} è stata citata senza URL`,pullRequestNotFound:`La PR #{{id}} non è stata trovata in questo progetto`,jobNotFound:`Job non trovato — potrebbe essere stato eliminato`,loopNotFound:`Loop non trovato — potrebbe essere stato eliminato`,lookupFailed:`Impossibile verificare il riferimento — riprova`},ee={untitled:`Missione senza titolo`,menu:`Menu della missione`,rename:`Rinomina`,renamePlaceholder:`Nome della missione`,renameHint:`Doppio clic per rinominare`,renameFailed:`Impossibile rinominare`,addFavorite:`Aggiungi ai preferiti`,removeFavorite:`Rimuovi dai preferiti`,copyName:`Copia nome missione`,copyId:`Copia ID missione`,copyProject:`Copia nome progetto`,copyProjectPath:`Copia percorso progetto`,copyFailed:`Impossibile copiare`,copyTranscript:`Copia trascrizione`,copyTranscriptSuccess:`Trascrizione copiata`,copyTranscriptFailed:`Impossibile copiare la trascrizione`,exportTranscript:`Esporta trascrizione (.txt)`,exportTranscriptSuccess:`Esportazione della trascrizione avviata`,exportTranscriptFailed:`Impossibile esportare la trascrizione`,delete:`Elimina missione`,deleteConfirm:`Eliminare questa missione? Non è reversibile.`,deleteFailed:`Impossibile eliminare la missione`},te=`Cosa costruiamo adesso?`,ne={title:e,subtitle:t,trigger:n,composerPlaceholder:r,send:i,stop:a,copy:o,attachment:s,maximize:c,restore:l,minimize:u,close:d,newConversation:f,emptyTitle:p,emptyHint:m,thinking:h,connecting:g,consultingCode:_,size:v,model:y,history:b,queue:x,queueEdit:S,git:C,provider:w,tier:T,approval:E,project:D,palette:O,mission:k,noProvider:A,degraded:j,toolCard:M,error:N,chip:P,newAgent:F,switchToAgent:I,switchToKanban:L,search:R,home:z,favoriteMissions:B,untitled:V,workspace:H,attachFile:U,deleteConversation:W,confirmDeleteConversation:G,addFavoriteConversation:K,removeFavoriteConversation:q,confirmShort:J,imagesUnsupported:Y,effort:X,prCard:Z,specDraft:Q,refs:$,header:ee,emptyTitleCodeRain:te};export{K as addFavoriteConversation,E as approval,U as attachFile,s as attachment,P as chip,d as close,r as composerPlaceholder,G as confirmDeleteConversation,J as confirmShort,g as connecting,_ as consultingCode,o as copy,ne as default,j as degraded,W as deleteConversation,X as effort,m as emptyHint,p as emptyTitle,te as emptyTitleCodeRain,N as error,B as favoriteMissions,C as git,ee as header,b as history,z as home,Y as imagesUnsupported,c as maximize,u as minimize,k as mission,y as model,F as newAgent,f as newConversation,A as noProvider,O as palette,Z as prCard,D as project,w as provider,x as queue,S as queueEdit,$ as refs,q as removeFavoriteConversation,l as restore,R as search,i as send,v as size,Q as specDraft,a as stop,t as subtitle,I as switchToAgent,L as switchToKanban,h as thinking,T as tier,e as title,M as toolCard,n as trigger,V as untitled,H as workspace};
@@ -0,0 +1 @@
1
+ var e=`ミッションセンター`,t=`チャットで Specrails を操作`,n=`ミッションセンター`,r=`エージェントに何でも頼んでください…`,i=`送信`,a=`停止`,o=`コピー`,s={openPreview:`{{name}}をプレビュー`,openDownload:`{{name}}をダウンロード`,previewTitle:`{{name}}のプレビュー`,downloadTitle:`ファイルをダウンロードしますか?`,downloadPrompt:`このファイルはここではプレビューできません。ダウンロードしますか?`,download:`ダウンロード`,cancelDownload:`今はしない`,loading:`ファイルを準備中…`,loadFailed:`添付ファイルを読み込めませんでした`,loadError:`添付ファイルを読み込めませんでした: {{error}}`},c=`最大化`,l=`元に戻す`,u=`最小化`,d=`閉じる`,f=`新しいミッション`,p=`ミッションは何ですか?`,m=`プロジェクトを選んでから尋ねてください。エージェントの作業中、ボードはリアルタイムで更新されます。`,h=`考え中…`,g=`接続中…`,_=`アプリを確認中…`,v={compact:`コンパクト`,comfortable:`快適`,max:`最大化`},y={label:`モデル`},b={hint:`プロンプト履歴を表示中 — 入力で編集、↑↓ で移動`},x={queued:`待機中`,send:`キューに送信`,sendHint:`エージェントは作業中です — このメッセージはキューに入り、次に実行されます`,placeholder:`エージェントの作業中に追加できます — キューに入ります…`},S={editing:`キュー内メッセージを編集中({{m}} 件中 {{n}} 件目)`,hint:`↑↓ で移動 · Enter で保存 · Esc でキャンセル`,save:`キュー内メッセージを保存`,cancel:`編集をキャンセル`,dispatched:`そのキュー内メッセージは既に送信されました — 入力したテキストは下書きとして保持されます`,saveFailed:`キュー内メッセージを保存できませんでした`},C={branch:`ブランチ`,detached:`(detached)`,dirty:`未コミットの変更あり`,switched:`{{branch}} に切り替えました`,switchFailed:`ブランチを切り替えられませんでした`,lockedWhileWorking:`エージェントの作業中はブランチをロックしています`,searchPlaceholder:`ブランチを検索…`,noMatches:`一致するブランチがありません`,worktrees:`ワークツリー`,worktreePathCopied:`ワークツリーのパスをコピーしました`,copyWorktreePath:`ワークツリーのパスをコピー`},w={label:`プロバイダー`,claude:`Claude`,codex:`Codex`,gemini:`Gemini`},T={cycleHint:`⇧⇥ で変更`,observe:{name:`観察`,desc:`読み取り専用 — 何も変更しません`},edit:{name:`編集`,desc:`作成と編集(取り消し可能)`},operate:{name:`操作`,desc:`AI を起動 — 費用がかかります`},autonomous:{name:`自律`,desc:`削除と停止 — 取り消し不可`},lockedTitle:`より高いレベルが必要です`,lockedBody:`その操作には「{{level}}」レベルが必要です。現在は「{{current}}」です。`,raiseHint:`⇧⇥ でレベルを上げるか、別の方法で尋ねてください。`},E={title:`操作を確認`,costAction:`{{action}} · ~{{cost}} · {{tier}}`,approve:`承認`,cancel:`キャンセル`,dontAskAgain:`このセッションでは今後確認しない`,approved:`承認しました`,cancelled:`キャンセルしました`},D={home:`ホーム`,searchPlaceholder:`Specrails に話しかける…`,recents:`最近`,allProjects:`すべてのプロジェクト`,searchAll:`すべてのプロジェクトを検索`,addProject:`プロジェクトを追加…`,homeHint:`プロジェクトが未選択 — すべてのプロジェクトを横断して操作中。`,askCreateOrSearch:`プロジェクトが選択されていません。新しいプロジェクトを作成しますか、それともすべてのプロジェクトを検索しますか?`},O={remove:`{{label}} を削除`,addContextAction:`コンテキストまたはアクションを追加`,filtering:`"{{query}}" で絞り込み`,keyboard:`↑↓ Enter Esc`,noMatches:`一致なし`,noMatchesFor:`"{{query}}" の一致なし`,mode:{reference:{title:`参照`,hint:`@ プロジェクト、仕様、ミッション`},trace:{title:`トレース`,hint:`# ジョブ、実行、ID`},action:{title:`アクション`,hint:`/ このコンテキストのコマンド`}},plus:{reference:`参照`,referenceHint:`プロジェクト、仕様、ミッション`,trace:`トレース`,traceHint:`ジョブ、実行、ID`,action:`アクション`,actionHint:`作成、起動、確認`,fileAttachment:`ファイル添付`,fileAttachmentHint:`ドキュメント、画像、ログを追加`,browserCapture:`ブラウザーキャプチャ`,browserCaptureHint:`ワークスペースブラウザーから利用可能`}},k={label:`ミッションを切り替え`,untitled:`新しいミッション`,new:`新しいミッション`,searchPlaceholder:`ミッションを検索…`,noMatches:`一致するミッションがありません`,working:`エージェントが作業中`,queuedBadge:`{{n}} 件キュー中`,delete:`ミッション "{{title}}" を削除`,deleteConfirm:`削除しますか?`,deleteLiveConfirm:`エージェントが作業中です — それでも削除しますか?`,confirmDelete:`削除を確定`,cancelDelete:`ミッションを残す`,deleteFailed:`ミッションを削除できませんでした`},A={title:`AIプロバイダーが未インストール`,body:`エージェントには Claude、Codex、Gemini のいずれかが必要です。インストールしてからエージェントを再度開いてください。`,placeholder:`AIプロバイダーをインストールしてエージェントを利用…`},j={title:`Specrails MCP がオフです`,body:`エージェントがアプリを操作するには、組み込みの MCP サーバーが必要です。`,enable:`Specrails MCP を有効化`,enabling:`有効化中…`,enabled:`MCP を有効化しました`},M={live:`ライブ`,queued:`待機中`,running:`実行中`,done:`完了`,failed:`失敗`},N={generic:`問題が発生しました。もう一度お試しください。`,busy:`エージェントは処理中です。しばらくしてからお試しください。`},P={kindAgent:`エージェントのミッション`},F=`新しいミッション`,I=`ミッションセンターに切り替え`,L=`ボードに切り替え`,R=`検索`,z=`ホーム`,B=`お気に入りミッション`,V=`無題`,H={title:`ワークスペース`,terminal:`ターミナル`,files:`ファイル`,browser:`ブラウザ`,requiresProject:`このツールを使うにはプロジェクトを選択してください`,resizeCode:`コードペインをリサイズ`,closeFiles:`コードを閉じる`,browserConfirm:`エージェントに追加`,browserCaptured:`キャプチャを追加しました`,uploadFailed:`アップロードに失敗しました`,requiresConversation:`このツールを使うにはミッションを開始してください`,jobs:`ジョブ`,closeJobs:`ジョブを閉じる`,resizeJobs:`ジョブパネルのサイズ変更`,noJobs:`まだジョブがありません — エージェントに実行を頼んでみましょう`},U=`ファイルを添付`,W=`「{{title}}」を削除`,G=`「{{title}}」の削除を確認`,K=`「{{title}}」をお気に入りに追加`,q=`「{{title}}」をお気に入りから削除`,J=`削除しますか?`,Y=`このプロバイダーはまだ画像を読み取れません — テキストファイルを添付してください`,X={label:`エフォート`,minimal:`最小`,low:`低`,medium:`中`,high:`高`,xhigh:`最高`},Z={rail:`レール {{index}}`,specCount_one:`スペック {{count}} 件`,specCount_other:`スペック {{count}} 件`,base:`ベースブランチ`,openPr:`PR を開く`,existingPr:`既存の PR`,title:{building:`分離されたワークツリーで実装中…`,buildingExistingPr:`既存の PR に変更を適用中…`,on_review:`実装のレビュー準備完了`,pr_draft:`ドラフト PR を作成しました`,pr_draft_degraded:`PR の公開が未完了`,pr_ready:`PR のマージ準備完了`,implementation_failed:`実装に失敗しました`,pr_failed:`PR の作成に失敗しました`,merged:`PR がマージされました`,discarded:`破棄済み`},buildingHint:`完了すると PR を作成するか確認します。`,buildingExistingPrHint:`Specrails は既存 PR のブランチで作業しており、レビュー変更を同じ PR に push します。`,createPr:`PR を作成`,publish:`公開`,checkout:`Checkout`,checkoutTooltip:`プロジェクトのメインフォルダで {{branch}} をチェックアウト`,checkoutSuccess:`{{branch}} をチェックアウトしました`,checkoutFailed:`PR ブランチをチェックアウトできませんでした`,retry:`再試行`,retryPr:`PR を再試行`,checkMerge:`マージを確認`,discard:`破棄`,confirmDiscard:`破棄しますか?`,mergedNote:`マージ済み — スペックは完了に移動しました`,discardedNote:`破棄済み — スペックはバックログに戻されました`,implementationFailedNote:`実装の実行は、配信可能な成果物が生成される前に失敗しました。実行ログで失敗内容を確認し、再実行する前にこのカードを破棄してください。`,degraded:{pushed:`ブランチはプッシュされましたが、PR を作成できませんでした — 再試行して完了してください。`,localOnly:`変更はローカルで組み立てられましたが、プッシュされていません — 再試行して PR を公開してください。`},alreadyResolved:`すでに他の場所で解決済み`,actionFailed:`操作に失敗しました`,notMergedYet:`まだマージされていません`,viewLog:`{{ref}} の実行ログを表示`,runElapsedAria:`経過時間 {{elapsed}}`,runCostAria:`消費コスト {{cost}}`,pinned:{label:`ピン留め`,marker:`実装カード — 上部にピン留め中`,collapse:`ピン留めカードを最小化`,expand:`ピン留めカードを展開`,expandCard:`このカードを展開`,collapseCard:`このカードを最小化`,collapsed_one:`実装カード`,collapsed_other:`{{count}} 件の実装カード`,state:{building:`実装中`,on_review:`レビュー`,pr_draft:`ドラフト PR`,pr_ready:`公開済み`,implementation_failed:`失敗`,pr_failed:`失敗`,merged:`マージ済み`,discarded:`破棄済み`}},mergeLocal:`ローカルに統合`,mergeLocalTooltip:`配信されたブランチをローカルチェックアウトの {{base}} にマージします(GitHub 不要)`,mergeLocalBlockedDirty:`統合できません:{{base}} のワークツリーに未コミットの変更があります。コミットまたはスタッシュして再試行してください。`,mergeLocalBlockedBranch:`統合できません:チェックアウトは {{current}} で、{{base}} ではありません。{{base}} に切り替えて再試行してください。`,mergedLocally:`ローカルで {{base}} に統合しました`},Q={heading:`スペック下書き`,drafting:`下書きを更新中…`,acceptanceCriteria:`受け入れ基準`,untitled:`無題のスペック`,expand:`説明をすべて表示`,collapse:`説明を折りたたむ`},$={openTicket:`スペック #{{id}} を開く`,openPullRequest:`PR #{{id}} を開く`,openJob:`ジョブ {{id}} を開く`,openLoop:`ループ {{id}} を開く`,ticketNotFound:`スペック #{{id}} が見つかりません — 削除された可能性があります`,pullRequestUrlMissing:`PR #{{id}} は URL なしで参照されました`,pullRequestNotFound:`このプロジェクトで PR #{{id}} が見つかりません`,jobNotFound:`ジョブが見つかりません — 削除された可能性があります`,loopNotFound:`ループが見つかりません — 削除された可能性があります`,lookupFailed:`参照を確認できませんでした — もう一度お試しください`},ee={untitled:`無題のミッション`,menu:`ミッションメニュー`,rename:`名前を変更`,renamePlaceholder:`ミッション名`,renameHint:`ダブルクリックで名前を変更`,renameFailed:`名前を変更できませんでした`,addFavorite:`お気に入りに追加`,removeFavorite:`お気に入りから削除`,copyName:`ミッション名をコピー`,copyId:`ミッション ID をコピー`,copyProject:`プロジェクト名をコピー`,copyProjectPath:`プロジェクトパスをコピー`,copyFailed:`コピーできませんでした`,copyTranscript:`トランスクリプトをコピー`,copyTranscriptSuccess:`トランスクリプトをコピーしました`,copyTranscriptFailed:`トランスクリプトをコピーできませんでした`,exportTranscript:`トランスクリプトをエクスポート (.txt)`,exportTranscriptSuccess:`トランスクリプトのエクスポートを開始しました`,exportTranscriptFailed:`トランスクリプトをエクスポートできませんでした`,delete:`ミッションを削除`,deleteConfirm:`このミッションを削除しますか?元に戻せません。`,deleteFailed:`ミッションを削除できませんでした`},te=`次に何を作りますか?`,ne={title:e,subtitle:t,trigger:n,composerPlaceholder:r,send:i,stop:a,copy:o,attachment:s,maximize:c,restore:l,minimize:u,close:d,newConversation:f,emptyTitle:p,emptyHint:m,thinking:h,connecting:g,consultingCode:_,size:v,model:y,history:b,queue:x,queueEdit:S,git:C,provider:w,tier:T,approval:E,project:D,palette:O,mission:k,noProvider:A,degraded:j,toolCard:M,error:N,chip:P,newAgent:F,switchToAgent:I,switchToKanban:L,search:R,home:z,favoriteMissions:B,untitled:V,workspace:H,attachFile:U,deleteConversation:W,confirmDeleteConversation:G,addFavoriteConversation:K,removeFavoriteConversation:q,confirmShort:J,imagesUnsupported:Y,effort:X,prCard:Z,specDraft:Q,refs:$,header:ee,emptyTitleCodeRain:te};export{K as addFavoriteConversation,E as approval,U as attachFile,s as attachment,P as chip,d as close,r as composerPlaceholder,G as confirmDeleteConversation,J as confirmShort,g as connecting,_ as consultingCode,o as copy,ne as default,j as degraded,W as deleteConversation,X as effort,m as emptyHint,p as emptyTitle,te as emptyTitleCodeRain,N as error,B as favoriteMissions,C as git,ee as header,b as history,z as home,Y as imagesUnsupported,c as maximize,u as minimize,k as mission,y as model,F as newAgent,f as newConversation,A as noProvider,O as palette,Z as prCard,D as project,w as provider,x as queue,S as queueEdit,$ as refs,q as removeFavoriteConversation,l as restore,R as search,i as send,v as size,Q as specDraft,a as stop,t as subtitle,I as switchToAgent,L as switchToKanban,h as thinking,T as tier,e as title,M as toolCard,n as trigger,V as untitled,H as workspace};
@@ -0,0 +1 @@
1
+ var e=`Controle de missões`,t=`Opere o Specrails conversando`,n=`Controle de missões`,r=`Peça ao agente o que quiser…`,i=`Enviar`,a=`Parar`,o=`Copiar`,s={openPreview:`Pré-visualizar {{name}}`,openDownload:`Transferir {{name}}`,previewTitle:`Pré-visualização de {{name}}`,downloadTitle:`Transferir ficheiro?`,downloadPrompt:`Este ficheiro não pode ser pré-visualizado aqui. Queres transferi-lo?`,download:`Transferir`,cancelDownload:`Agora não`,loading:`A preparar ficheiro…`,loadFailed:`Não foi possível carregar o anexo`,loadError:`Não foi possível carregar o anexo: {{error}}`},c=`Maximizar`,l=`Restaurar`,u=`Minimizar`,d=`Fechar`,f=`Nova missão`,p=`Qual é a missão?`,m=`Escolha um projeto e depois pergunte. O quadro é atualizado ao vivo enquanto o agente trabalha.`,h=`Pensando…`,g=`Conectando…`,_=`Consultando o app…`,v={compact:`Compacto`,comfortable:`Confortável`,max:`Maximizar`},y={label:`Modelo`},b={hint:`Explorando histórico — escreva para editar, ↑↓ para navegar`},x={queued:`Na fila`,send:`Enviar para a fila`,sendHint:`O agente ainda está trabalhando — esta mensagem entrará na fila e será executada em seguida`,placeholder:`Adicione mais enquanto o agente trabalha — entrará na fila…`},S={editing:`Editando mensagem na fila {{n}} de {{m}}`,hint:`↑↓ para navegar · Enter salva · Esc cancela`,save:`Salvar mensagem na fila`,cancel:`Cancelar edição`,dispatched:`Essa mensagem na fila já foi enviada — seu texto foi mantido como rascunho`,saveFailed:`Não foi possível salvar a mensagem na fila`},C={branch:`Branch`,detached:`(detached)`,dirty:`Alterações sem commit`,switched:`Mudou para {{branch}}`,switchFailed:`Não foi possível trocar de branch`,lockedWhileWorking:`Branch bloqueada enquanto o agente trabalha`,searchPlaceholder:`Buscar branches…`,noMatches:`Nenhuma branch corresponde`,worktrees:`Worktrees`,worktreePathCopied:`Caminho do worktree copiado`,copyWorktreePath:`Copiar caminho do worktree`},w={label:`Provedor`,claude:`Claude`,codex:`Codex`,gemini:`Gemini`},T={cycleHint:`⇧⇥ para mudar`,observe:{name:`Observa`,desc:`Somente leitura — nada muda`},edit:{name:`Edita`,desc:`Criar e editar (reversível)`},operate:{name:`Opera`,desc:`Lançar IA — tem custo`},autonomous:{name:`Autônomo`,desc:`Excluir e encerrar — irreversível`},lockedTitle:`Precisa de um nível superior`,lockedBody:`Essa ação precisa do nível "{{level}}". Você está no "{{current}}".`,raiseHint:`⇧⇥ para aumentar o nível, ou peça de outra forma.`},E={title:`Confirmar ação`,costAction:`{{action}} · ~{{cost}} · {{tier}}`,approve:`Aprovar`,cancel:`Cancelar`,dontAskAgain:`Não perguntar de novo nesta sessão`,approved:`Aprovado`,cancelled:`Cancelado`},D={home:`Início`,searchPlaceholder:`Fale com o Specrails…`,recents:`Recentes`,allProjects:`Todos os projetos`,searchAll:`Buscar em todos os projetos`,addProject:`Adicionar projeto…`,homeHint:`Nenhum projeto selecionado — operando em todos os projetos.`,askCreateOrSearch:`Nenhum projeto está selecionado. Você quer criar um novo projeto ou buscar em todos os projetos?`},O={remove:`Remover {{label}}`,addContextAction:`Adicionar contexto ou ação`,filtering:`Filtrando "{{query}}"`,keyboard:`↑↓ Enter Esc`,noMatches:`Sem resultados`,noMatchesFor:`Sem resultados para "{{query}}"`,mode:{reference:{title:`Referência`,hint:`@ projetos, specs, missões`},trace:{title:`Traço`,hint:`# jobs, execuções, IDs`},action:{title:`Ação`,hint:`/ comandos para este contexto`}},plus:{reference:`Referência`,referenceHint:`Projetos, specs, missões`,trace:`Traço`,traceHint:`Jobs, execuções, IDs`,action:`Ação`,actionHint:`Criar, lançar, inspecionar`,fileAttachment:`Anexo de arquivo`,fileAttachmentHint:`Adicionar docs, imagens, logs`,browserCapture:`Captura do navegador`,browserCaptureHint:`Disponível no navegador do workspace`}},k={label:`Trocar de missão`,untitled:`Nova missão`,new:`Nova missão`,searchPlaceholder:`Pesquisar missões…`,noMatches:`Nenhuma missão corresponde`,working:`O agente está trabalhando`,queuedBadge:`{{n}} na fila`,delete:`Excluir missão "{{title}}"`,deleteConfirm:`Excluir?`,deleteLiveConfirm:`O agente está trabalhando — excluir mesmo assim?`,confirmDelete:`Confirmar exclusão`,cancelDelete:`Manter missão`,deleteFailed:`Não foi possível excluir a missão`},A={title:`Nenhum provedor de IA instalado`,body:`O agente precisa de Claude, Codex ou Gemini na sua máquina. Instale um e reabra o agente para começar a conversar.`,placeholder:`Instale um provedor de IA para usar o agente…`},j={title:`O MCP do Specrails está desligado`,body:`O agente precisa do servidor MCP integrado para operar o app.`,enable:`Ativar o MCP do Specrails`,enabling:`Ativando…`,enabled:`MCP ativado`},M={live:`ao vivo`,queued:`na fila`,running:`em execução`,done:`concluído`,failed:`falhou`},N={generic:`Algo deu errado. Tente novamente.`,busy:`O agente está ocupado. Tente novamente em um instante.`},P={kindAgent:`Missão do agente`},F=`Nova missão`,I=`Mudar para o Controle de missões`,L=`Mudar para o quadro`,R=`Buscar`,z=`Início`,B=`Missões favoritas`,V=`Sem título`,H={title:`No workspace`,terminal:`Terminal`,files:`Arquivos`,browser:`Navegador`,requiresProject:`Selecione um projeto para usar esta ferramenta`,resizeCode:`Redimensionar painel de código`,closeFiles:`Fechar código`,browserConfirm:`Adicionar ao agente`,browserCaptured:`Captura adicionada`,uploadFailed:`Falha no upload`,requiresConversation:`Inicie uma missão para usar esta ferramenta`,jobs:`Jobs`,closeJobs:`Fechar jobs`,resizeJobs:`Redimensionar painel de jobs`,noJobs:`Ainda não há jobs — peça ao agente para lançar um`},U=`Anexar arquivo`,W=`Excluir "{{title}}"`,G=`Confirmar exclusão de "{{title}}"`,K=`Adicionar "{{title}}" aos favoritos`,q=`Remover "{{title}}" dos favoritos`,J=`confirmar?`,Y=`Este provedor ainda não lê imagens — anexe arquivos de texto`,X={label:`Esforço`,minimal:`Mínimo`,low:`Baixo`,medium:`Médio`,high:`Alto`,xhigh:`Extra alto`},Z={rail:`Rail {{index}}`,specCount_one:`{{count}} spec`,specCount_other:`{{count}} specs`,base:`Ramo base`,openPr:`Abrir PR`,existingPr:`PR existente`,title:{building:`A implementar num worktree isolado…`,buildingExistingPr:`A aplicar alterações numa PR existente…`,on_review:`Implementação pronta para revisão`,pr_draft:`PR em rascunho criada`,pr_draft_degraded:`Entrega da PR incompleta`,pr_ready:`PR pronta para merge`,implementation_failed:`Implementação falhou`,pr_failed:`Falha ao criar a PR`,merged:`Merge da PR concluído`,discarded:`Descartada`},buildingHint:`Quando terminar, ser-lhe-á perguntado se quer criar a PR.`,buildingExistingPrHint:`O Specrails está a trabalhar no ramo da PR existente e irá enviar as alterações de revisão para essa mesma PR.`,createPr:`Criar PR`,publish:`Publicar`,checkout:`Checkout`,checkoutTooltip:`Fazer checkout de {{branch}} na pasta principal do projeto`,checkoutSuccess:`Checkout feito em {{branch}}`,checkoutFailed:`Não foi possível fazer checkout do ramo da PR`,retry:`Tentar novamente`,retryPr:`Tentar PR novamente`,checkMerge:`Verificar merge`,discard:`Descartar`,confirmDiscard:`Confirmar descarte?`,mergedNote:`Merge concluído — specs movidas para Concluído`,discardedNote:`Descartada — specs devolvidas ao backlog`,implementationFailedNote:`A execução de implementação falhou antes de produzir algo entregável. Abra o log da execução para inspecionar a falha e descarte este cartão antes de relançar.`,degraded:{pushed:`O ramo foi enviado mas não foi possível criar a PR — tente novamente para concluir.`,localOnly:`As alterações foram montadas localmente mas não enviadas — tente novamente para publicar a PR.`},alreadyResolved:`Já resolvida noutro lugar`,actionFailed:`A ação falhou`,notMergedYet:`Ainda sem merge`,viewLog:`Ver o registro de execução de {{ref}}`,runElapsedAria:`{{elapsed}} decorridos`,runCostAria:`{{cost}} gastos`,pinned:{label:`Fixada`,marker:`Cartão de implementação — fixado acima`,collapse:`Minimizar cartão fixado`,expand:`Expandir cartão fixado`,expandCard:`Expandir este cartão`,collapseCard:`Minimizar este cartão`,collapsed_one:`Cartão de implementação`,collapsed_other:`{{count}} cartões de implementação`,state:{building:`Em curso`,on_review:`Revisão`,pr_draft:`PR rascunho`,pr_ready:`Publicada`,implementation_failed:`Falhou`,pr_failed:`Falhou`,merged:`Integrada`,discarded:`Descartada`}},mergeLocal:`Integrar localmente`,mergeLocalTooltip:`Faz merge dos branches entregues em {{base}} no seu checkout local (sem GitHub)`,mergeLocalBlockedDirty:`Não é possível integrar: sua árvore de trabalho em {{base}} tem mudanças sem commit. Faça commit ou stash e tente de novo.`,mergeLocalBlockedBranch:`Não é possível integrar: seu checkout está em {{current}}, não em {{base}}. Mude para {{base}} e tente de novo.`,mergedLocally:`Integrado em {{base}} localmente`},Q={heading:`Rascunho da spec`,drafting:`Atualizando rascunho…`,acceptanceCriteria:`Critérios de aceitação`,untitled:`Spec sem título`,expand:`Ver descrição completa`,collapse:`Recolher descrição`},$={openTicket:`Abrir spec #{{id}}`,openPullRequest:`Abrir PR #{{id}}`,openJob:`Abrir job {{id}}`,openLoop:`Abrir loop {{id}}`,ticketNotFound:`Spec #{{id}} não encontrada — pode ter sido excluída`,pullRequestUrlMissing:`A PR #{{id}} foi mencionada sem URL`,pullRequestNotFound:`A PR #{{id}} não foi encontrada neste projeto`,jobNotFound:`Job não encontrado — pode ter sido excluído`,loopNotFound:`Loop não encontrado — pode ter sido excluído`,lookupFailed:`Não foi possível verificar a referência — tente novamente`},ee={untitled:`Missão sem título`,menu:`Menu da missão`,rename:`Renomear`,renamePlaceholder:`Nome da missão`,renameHint:`Duplo clique para renomear`,renameFailed:`Não foi possível renomear`,addFavorite:`Adicionar aos favoritos`,removeFavorite:`Remover dos favoritos`,copyName:`Copiar nome da missão`,copyId:`Copiar ID da missão`,copyProject:`Copiar nome do projeto`,copyProjectPath:`Copiar caminho do projeto`,copyFailed:`Não foi possível copiar`,copyTranscript:`Copiar transcrição`,copyTranscriptSuccess:`Transcrição copiada`,copyTranscriptFailed:`Não foi possível copiar a transcrição`,exportTranscript:`Exportar transcrição (.txt)`,exportTranscriptSuccess:`Exportação da transcrição iniciada`,exportTranscriptFailed:`Não foi possível exportar a transcrição`,delete:`Excluir missão`,deleteConfirm:`Excluir esta missão? Não pode ser desfeito.`,deleteFailed:`Não foi possível excluir a missão`},te=`O que devemos construir agora?`,ne={title:e,subtitle:t,trigger:n,composerPlaceholder:r,send:i,stop:a,copy:o,attachment:s,maximize:c,restore:l,minimize:u,close:d,newConversation:f,emptyTitle:p,emptyHint:m,thinking:h,connecting:g,consultingCode:_,size:v,model:y,history:b,queue:x,queueEdit:S,git:C,provider:w,tier:T,approval:E,project:D,palette:O,mission:k,noProvider:A,degraded:j,toolCard:M,error:N,chip:P,newAgent:F,switchToAgent:I,switchToKanban:L,search:R,home:z,favoriteMissions:B,untitled:V,workspace:H,attachFile:U,deleteConversation:W,confirmDeleteConversation:G,addFavoriteConversation:K,removeFavoriteConversation:q,confirmShort:J,imagesUnsupported:Y,effort:X,prCard:Z,specDraft:Q,refs:$,header:ee,emptyTitleCodeRain:te};export{K as addFavoriteConversation,E as approval,U as attachFile,s as attachment,P as chip,d as close,r as composerPlaceholder,G as confirmDeleteConversation,J as confirmShort,g as connecting,_ as consultingCode,o as copy,ne as default,j as degraded,W as deleteConversation,X as effort,m as emptyHint,p as emptyTitle,te as emptyTitleCodeRain,N as error,B as favoriteMissions,C as git,ee as header,b as history,z as home,Y as imagesUnsupported,c as maximize,u as minimize,k as mission,y as model,F as newAgent,f as newConversation,A as noProvider,O as palette,Z as prCard,D as project,w as provider,x as queue,S as queueEdit,$ as refs,q as removeFavoriteConversation,l as restore,R as search,i as send,v as size,Q as specDraft,a as stop,t as subtitle,I as switchToAgent,L as switchToKanban,h as thinking,T as tier,e as title,M as toolCard,n as trigger,V as untitled,H as workspace};
@@ -0,0 +1 @@
1
+ var e=`Missionszentrale`,t=`Specrails per Chat bedienen`,n=`Missionszentrale`,r=`Bitte den Agenten um alles…`,i=`Senden`,a=`Stopp`,o=`Kopieren`,s={openPreview:`{{name}} anzeigen`,openDownload:`{{name}} herunterladen`,previewTitle:`Vorschau von {{name}}`,downloadTitle:`Datei herunterladen?`,downloadPrompt:`Diese Datei kann hier nicht in der Vorschau angezeigt werden. Möchtest du sie herunterladen?`,download:`Herunterladen`,cancelDownload:`Jetzt nicht`,loading:`Datei wird vorbereitet…`,loadFailed:`Anhang konnte nicht geladen werden`,loadError:`Anhang konnte nicht geladen werden: {{error}}`},c=`Maximieren`,l=`Wiederherstellen`,u=`Minimieren`,d=`Schließen`,f=`Neue Mission`,p=`Wie lautet die Mission?`,m=`Wähle ein Projekt und frag dann. Das Board aktualisiert sich live, während der Agent arbeitet.`,h=`Denkt nach…`,g=`Verbinden…`,_=`App wird abgefragt…`,v={compact:`Kompakt`,comfortable:`Komfortabel`,max:`Maximieren`},y={label:`Modell`},b={hint:`Verlauf durchsuchen — tippen zum Bearbeiten, ↑↓ zum Navigieren`},x={queued:`In Warteschlange`,send:`In Warteschlange senden`,sendHint:`Der Agent arbeitet noch — diese Nachricht wird eingereiht und danach ausgeführt`,placeholder:`Mehr hinzufügen, während der Agent arbeitet — wird eingereiht…`},S={editing:`Bearbeite eingereihte Nachricht {{n}} von {{m}}`,hint:`↑↓ zum Navigieren · Enter speichert · Esc bricht ab`,save:`Eingereihte Nachricht speichern`,cancel:`Bearbeitung abbrechen`,dispatched:`Diese eingereihte Nachricht wurde bereits gesendet — dein Text bleibt als Entwurf erhalten`,saveFailed:`Eingereihte Nachricht konnte nicht gespeichert werden`},C={branch:`Branch`,detached:`(detached)`,dirty:`Nicht committete Änderungen`,switched:`Zu {{branch}} gewechselt`,switchFailed:`Branch-Wechsel fehlgeschlagen`,lockedWhileWorking:`Branch gesperrt, während der Agent arbeitet`,searchPlaceholder:`Branches durchsuchen…`,noMatches:`Keine passenden Branches`,worktrees:`Worktrees`,worktreePathCopied:`Worktree-Pfad kopiert`,copyWorktreePath:`Worktree-Pfad kopieren`},w={label:`Anbieter`,claude:`Claude`,codex:`Codex`,gemini:`Gemini`},T={cycleHint:`⇧⇥ zum Wechseln`,observe:{name:`Beobachten`,desc:`Nur lesen — nichts ändert sich`},edit:{name:`Bearbeiten`,desc:`Erstellen und bearbeiten (umkehrbar)`},operate:{name:`Ausführen`,desc:`KI starten — kostet Geld`},autonomous:{name:`Autonom`,desc:`Löschen und beenden — unumkehrbar`},lockedTitle:`Höhere Stufe erforderlich`,lockedBody:`Diese Aktion erfordert die Stufe „{{level}}“. Du bist auf „{{current}}“.`,raiseHint:`⇧⇥ um die Stufe zu erhöhen, oder frag anders.`},E={title:`Aktion bestätigen`,costAction:`{{action}} · ~{{cost}} · {{tier}}`,approve:`Genehmigen`,cancel:`Abbrechen`,dontAskAgain:`In dieser Sitzung nicht mehr fragen`,approved:`Genehmigt`,cancelled:`Abgebrochen`},D={home:`Start`,searchPlaceholder:`Mit Specrails sprechen…`,recents:`Zuletzt verwendet`,allProjects:`Alle Projekte`,searchAll:`In allen Projekten suchen`,addProject:`Projekt hinzufügen…`,homeHint:`Kein Projekt ausgewählt — über alle Projekte hinweg.`,askCreateOrSearch:`Es ist kein Projekt ausgewählt. Möchtest du ein neues Projekt erstellen oder über alle Projekte hinweg suchen?`},O={remove:`{{label}} entfernen`,addContextAction:`Kontext oder Aktion hinzufügen`,filtering:`Filtere "{{query}}"`,keyboard:`↑↓ Enter Esc`,noMatches:`Keine Treffer`,noMatchesFor:`Keine Treffer für "{{query}}"`,mode:{reference:{title:`Referenz`,hint:`@ Projekte, Specs, Missionen`},trace:{title:`Trace`,hint:`# Jobs, Läufe, IDs`},action:{title:`Aktion`,hint:`/ Befehle für diesen Kontext`}},plus:{reference:`Referenz`,referenceHint:`Projekte, Specs, Missionen`,trace:`Trace`,traceHint:`Jobs, Läufe, IDs`,action:`Aktion`,actionHint:`Erstellen, starten, prüfen`,fileAttachment:`Dateianhang`,fileAttachmentHint:`Docs, Bilder, Logs hinzufügen`,browserCapture:`Browser-Aufnahme`,browserCaptureHint:`Im Workspace-Browser verfügbar`}},k={label:`Mission wechseln`,untitled:`Neue Mission`,new:`Neue Mission`,searchPlaceholder:`Missionen durchsuchen…`,noMatches:`Keine Mission gefunden`,working:`Agent arbeitet`,queuedBadge:`{{n}} in Warteschlange`,delete:`Mission "{{title}}" löschen`,deleteConfirm:`Löschen?`,deleteLiveConfirm:`Der Agent arbeitet — trotzdem löschen?`,confirmDelete:`Löschen bestätigen`,cancelDelete:`Mission behalten`,deleteFailed:`Mission konnte nicht gelöscht werden`},A={title:`Kein KI-Anbieter installiert`,body:`Der Agent benötigt Claude, Codex oder Gemini auf deinem Rechner. Installiere einen und öffne den Agenten erneut, um zu chatten.`,placeholder:`Installiere einen KI-Anbieter, um den Agenten zu nutzen…`},j={title:`Specrails MCP ist aus`,body:`Der Agent braucht den eingebetteten MCP-Server, um die App zu bedienen.`,enable:`Specrails MCP aktivieren`,enabling:`Wird aktiviert…`,enabled:`MCP aktiviert`},M={live:`live`,queued:`in Warteschlange`,running:`läuft`,done:`fertig`,failed:`fehlgeschlagen`},N={generic:`Etwas ist schiefgelaufen. Versuch es erneut.`,busy:`Der Agent ist beschäftigt. Versuch es gleich noch einmal.`},P={kindAgent:`Agenten-Mission`},F=`Neue Mission`,I=`Zur Missionszentrale wechseln`,L=`Zum Board wechseln`,R=`Suchen`,z=`Start`,B=`Lieblingsmissionen`,V=`Ohne Titel`,H={title:`Im Workspace`,terminal:`Terminal`,files:`Dateien`,browser:`Browser`,requiresProject:`Wähle ein Projekt, um dieses Tool zu nutzen`,resizeCode:`Code-Bereich anpassen`,closeFiles:`Code schließen`,browserConfirm:`Zum Agenten hinzufügen`,browserCaptured:`Aufnahme hinzugefügt`,uploadFailed:`Upload fehlgeschlagen`,requiresConversation:`Starte eine Mission, um dieses Werkzeug zu nutzen`,jobs:`Jobs`,closeJobs:`Jobs schließen`,resizeJobs:`Jobs-Bereich anpassen`,noJobs:`Noch keine Jobs — bitte den Agenten, einen zu starten`},U=`Datei anhängen`,W=`„{{title}}“ löschen`,G=`Löschen von „{{title}}“ bestätigen`,K=`„{{title}}“ zu Favoriten hinzufügen`,q=`„{{title}}“ aus Favoriten entfernen`,J=`bestätigen?`,Y=`Dieser Anbieter kann noch keine Bilder lesen — hänge stattdessen Textdateien an`,X={label:`Aufwand`,minimal:`Minimal`,low:`Niedrig`,medium:`Mittel`,high:`Hoch`,xhigh:`Sehr hoch`},Z={rail:`Rail {{index}}`,specCount_one:`{{count}} Spec`,specCount_other:`{{count}} Specs`,base:`Basis-Branch`,openPr:`PR öffnen`,existingPr:`Bestehender PR`,title:{building:`Implementierung in einem isolierten Worktree…`,buildingExistingPr:`Änderungen werden auf einen bestehenden PR angewendet…`,on_review:`Implementierung bereit zur Prüfung`,pr_draft:`Entwurfs-PR erstellt`,pr_draft_degraded:`PR-Auslieferung unvollständig`,pr_ready:`PR bereit zum Merge`,implementation_failed:`Implementierung fehlgeschlagen`,pr_failed:`PR-Erstellung fehlgeschlagen`,merged:`PR gemergt`,discarded:`Verworfen`},buildingHint:`Nach Abschluss wirst du gefragt, ob der PR erstellt werden soll.`,buildingExistingPrHint:`Specrails arbeitet auf dem Branch des bestehenden PRs und pusht die Review-Änderungen zurück in denselben PR.`,createPr:`PR erstellen`,publish:`Veröffentlichen`,checkout:`Checkout`,checkoutTooltip:`Den Hauptordner des Projekts auf {{branch}} auschecken`,checkoutSuccess:`{{branch}} ausgecheckt`,checkoutFailed:`PR-Branch konnte nicht ausgecheckt werden`,retry:`Erneut versuchen`,retryPr:`PR erneut versuchen`,checkMerge:`Merge prüfen`,discard:`Verwerfen`,confirmDiscard:`Verwerfen bestätigen?`,mergedNote:`Gemergt — Specs nach Fertig verschoben`,discardedNote:`Verworfen — Specs zurück ins Backlog`,implementationFailedNote:`Der Implementierungslauf ist fehlgeschlagen, bevor etwas Auslieferbares entstanden ist. Öffne das Run-Protokoll, um den Fehler zu prüfen, und verwirf diese Karte vor einem erneuten Start.`,degraded:{pushed:`Der Branch wurde gepusht, aber die PR konnte nicht erstellt werden — erneut versuchen, um abzuschließen.`,localOnly:`Die Änderungen wurden lokal zusammengeführt, aber nicht gepusht — erneut versuchen, um die PR zu veröffentlichen.`},alreadyResolved:`Bereits anderweitig erledigt`,actionFailed:`Aktion fehlgeschlagen`,notMergedYet:`Noch nicht gemergt`,viewLog:`Ausführungsprotokoll für {{ref}} anzeigen`,runElapsedAria:`{{elapsed}} vergangen`,runCostAria:`{{cost}} ausgegeben`,pinned:{label:`Angeheftet`,marker:`Implementierungskarte — oben angeheftet`,collapse:`Angeheftete Karte minimieren`,expand:`Angeheftete Karte ausklappen`,expandCard:`Diese Karte ausklappen`,collapseCard:`Diese Karte minimieren`,collapsed_one:`Implementierungskarte`,collapsed_other:`{{count}} Implementierungskarten`,state:{building:`Läuft`,on_review:`Review`,pr_draft:`Entwurfs-PR`,pr_ready:`Veröffentlicht`,implementation_failed:`Fehlgeschlagen`,pr_failed:`Fehlgeschlagen`,merged:`Gemerged`,discarded:`Verworfen`}},mergeLocal:`Lokal integrieren`,mergeLocalTooltip:`Führt die gelieferten Branches lokal in {{base}} zusammen (ohne GitHub)`,mergeLocalBlockedDirty:`Integration nicht möglich: dein Arbeitsverzeichnis auf {{base}} hat uncommittete Änderungen. Committe oder stashe sie und versuche es erneut.`,mergeLocalBlockedBranch:`Integration nicht möglich: dein Checkout steht auf {{current}}, nicht auf {{base}}. Wechsle zu {{base}} und versuche es erneut.`,mergedLocally:`Lokal in {{base}} integriert`},Q={heading:`Spec-Entwurf`,drafting:`Entwurf wird aktualisiert…`,acceptanceCriteria:`Akzeptanzkriterien`,untitled:`Spec ohne Titel`,expand:`Vollständige Beschreibung anzeigen`,collapse:`Beschreibung einklappen`},$={openTicket:`Spec #{{id}} öffnen`,openPullRequest:`PR #{{id}} öffnen`,openJob:`Job {{id}} öffnen`,openLoop:`Loop {{id}} öffnen`,ticketNotFound:`Spec #{{id}} nicht gefunden — möglicherweise gelöscht`,pullRequestUrlMissing:`PR #{{id}} wurde ohne URL erwähnt`,pullRequestNotFound:`PR #{{id}} wurde in diesem Projekt nicht gefunden`,jobNotFound:`Job nicht gefunden — möglicherweise gelöscht`,loopNotFound:`Loop nicht gefunden — er wurde möglicherweise gelöscht`,lookupFailed:`Referenz konnte nicht geprüft werden — bitte erneut versuchen`},ee={untitled:`Unbenannte Mission`,menu:`Missionsmenü`,rename:`Umbenennen`,renamePlaceholder:`Name der Mission`,renameHint:`Zum Umbenennen doppelklicken`,renameFailed:`Umbenennen fehlgeschlagen`,addFavorite:`Zu Favoriten hinzufügen`,removeFavorite:`Aus Favoriten entfernen`,copyName:`Missionsname kopieren`,copyId:`Missions-ID kopieren`,copyProject:`Projektname kopieren`,copyProjectPath:`Projektpfad kopieren`,copyFailed:`Kopieren fehlgeschlagen`,copyTranscript:`Transkript kopieren`,copyTranscriptSuccess:`Transkript kopiert`,copyTranscriptFailed:`Transkript konnte nicht kopiert werden`,exportTranscript:`Transkript exportieren (.txt)`,exportTranscriptSuccess:`Transkriptexport gestartet`,exportTranscriptFailed:`Transkript konnte nicht exportiert werden`,delete:`Mission löschen`,deleteConfirm:`Diese Mission löschen? Kann nicht rückgängig gemacht werden.`,deleteFailed:`Mission konnte nicht gelöscht werden`},te=`Was sollen wir als Nächstes bauen?`,ne={title:e,subtitle:t,trigger:n,composerPlaceholder:r,send:i,stop:a,copy:o,attachment:s,maximize:c,restore:l,minimize:u,close:d,newConversation:f,emptyTitle:p,emptyHint:m,thinking:h,connecting:g,consultingCode:_,size:v,model:y,history:b,queue:x,queueEdit:S,git:C,provider:w,tier:T,approval:E,project:D,palette:O,mission:k,noProvider:A,degraded:j,toolCard:M,error:N,chip:P,newAgent:F,switchToAgent:I,switchToKanban:L,search:R,home:z,favoriteMissions:B,untitled:V,workspace:H,attachFile:U,deleteConversation:W,confirmDeleteConversation:G,addFavoriteConversation:K,removeFavoriteConversation:q,confirmShort:J,imagesUnsupported:Y,effort:X,prCard:Z,specDraft:Q,refs:$,header:ee,emptyTitleCodeRain:te};export{K as addFavoriteConversation,E as approval,U as attachFile,s as attachment,P as chip,d as close,r as composerPlaceholder,G as confirmDeleteConversation,J as confirmShort,g as connecting,_ as consultingCode,o as copy,ne as default,j as degraded,W as deleteConversation,X as effort,m as emptyHint,p as emptyTitle,te as emptyTitleCodeRain,N as error,B as favoriteMissions,C as git,ee as header,b as history,z as home,Y as imagesUnsupported,c as maximize,u as minimize,k as mission,y as model,F as newAgent,f as newConversation,A as noProvider,O as palette,Z as prCard,D as project,w as provider,x as queue,S as queueEdit,$ as refs,q as removeFavoriteConversation,l as restore,R as search,i as send,v as size,Q as specDraft,a as stop,t as subtitle,I as switchToAgent,L as switchToKanban,h as thinking,T as tier,e as title,M as toolCard,n as trigger,V as untitled,H as workspace};
@@ -0,0 +1 @@
1
+ import{r as ee}from"./chunk-BNv3lrIs.js";var te=ee({addFavoriteConversation:()=>G,approval:()=>E,attachFile:()=>H,attachment:()=>s,chip:()=>N,close:()=>d,composerPlaceholder:()=>r,confirmDeleteConversation:()=>W,confirmShort:()=>q,connecting:()=>g,consultingCode:()=>_,copy:()=>o,default:()=>ie,degraded:()=>A,deleteConversation:()=>U,effort:()=>Y,emptyHint:()=>m,emptyTitle:()=>p,emptyTitleCodeRain:()=>re,error:()=>M,favoriteMissions:()=>z,git:()=>C,header:()=>$,history:()=>b,home:()=>R,imagesUnsupported:()=>J,maximize:()=>c,minimize:()=>u,mission:()=>O,model:()=>y,newAgent:()=>P,newConversation:()=>f,noProvider:()=>k,palette:()=>D,prCard:()=>X,project:()=>ne,provider:()=>w,queue:()=>x,queueEdit:()=>S,refs:()=>Q,removeFavoriteConversation:()=>K,restore:()=>l,search:()=>L,send:()=>i,size:()=>v,specDraft:()=>Z,stop:()=>a,subtitle:()=>t,switchToAgent:()=>F,switchToKanban:()=>I,thinking:()=>h,tier:()=>T,title:()=>e,toolCard:()=>j,trigger:()=>n,untitled:()=>B,workspace:()=>V}),e=`Mission Control`,t=`Operate Specrails by chatting`,n=`Mission Control`,r=`Ask the agent to do anything…`,i=`Send`,a=`Stop`,o=`Copy`,s={openPreview:`Preview {{name}}`,openDownload:`Download {{name}}`,previewTitle:`Preview {{name}}`,downloadTitle:`Download file?`,downloadPrompt:`This file cannot be previewed here. Do you want to download it?`,download:`Download`,cancelDownload:`Not now`,loading:`Preparing file…`,loadFailed:`Could not load attachment`,loadError:`Could not load attachment: {{error}}`},c=`Maximize`,l=`Restore`,u=`Minimize`,d=`Close`,f=`New mission`,p=`What's the mission?`,m=`Pick a project, then ask. The board updates live as the agent works.`,h=`Thinking…`,g=`Connecting…`,_=`Consulting the app…`,v={compact:`Compact`,comfortable:`Comfortable`,max:`Maximize`},y={label:`Model`},b={hint:`Browsing prompt history — type to edit, ↑↓ to navigate`},x={queued:`Queued`,send:`Send to queue`,sendHint:`The agent is still working — this message will queue and run next`,placeholder:`Add more while the agent works — it will queue…`},S={editing:`Editing queued message {{n}} of {{m}}`,hint:`↑↓ to navigate · Enter saves · Esc cancels`,save:`Save queued message`,cancel:`Cancel editing`,dispatched:`That queued message was already sent — your text is kept as a draft`,saveFailed:`Couldn't save the queued message`},C={branch:`Branch`,detached:`(detached)`,dirty:`Uncommitted changes`,switched:`Switched to {{branch}}`,switchFailed:`Couldn't switch branch`,lockedWhileWorking:`Branch locked while the agent works`,searchPlaceholder:`Search branches…`,noMatches:`No branches match`,worktrees:`Worktrees`,worktreePathCopied:`Worktree path copied`,copyWorktreePath:`Copy worktree path`},w={label:`Provider`,claude:`Claude`,codex:`Codex`,gemini:`Gemini`},T={cycleHint:`⇧⇥ to change`,observe:{name:`Observe`,desc:`Read only — nothing changes`},edit:{name:`Edit`,desc:`Create and edit (reversible)`},operate:{name:`Operate`,desc:`Launch AI — costs money`},autonomous:{name:`Autonomous`,desc:`Delete and kill — irreversible`},lockedTitle:`Needs a higher level`,lockedBody:`That action needs the "{{level}}" level. You're on "{{current}}".`,raiseHint:`⇧⇥ to raise the level, or ask another way.`},E={title:`Confirm action`,costAction:`{{action}} · ~{{cost}} · {{tier}}`,approve:`Approve`,cancel:`Cancel`,dontAskAgain:`Don't ask again this session`,approved:`Approved`,cancelled:`Cancelled`},ne={home:`Home`,searchPlaceholder:`Talk to Specrails…`,recents:`Recents`,allProjects:`All projects`,searchAll:`Search across all projects`,addProject:`Add project…`,homeHint:`No project selected — operating across all projects.`,askCreateOrSearch:`No project is selected. Do you want to create a new project, or search across all projects?`},D={remove:`Remove {{label}}`,addContextAction:`Add context or action`,filtering:`Filtering "{{query}}"`,keyboard:`↑↓ Enter Esc`,noMatches:`No matches`,noMatchesFor:`No matches for "{{query}}"`,mode:{reference:{title:`Reference`,hint:`@ projects, specs, missions`},trace:{title:`Trace`,hint:`# jobs, runs, IDs`},action:{title:`Action`,hint:`/ commands for this context`}},plus:{reference:`Reference`,referenceHint:`Projects, specs, missions`,trace:`Trace`,traceHint:`Jobs, runs, IDs`,action:`Action`,actionHint:`Create, launch, inspect`,fileAttachment:`File attachment`,fileAttachmentHint:`Add docs, images, logs`,browserCapture:`Browser capture`,browserCaptureHint:`Available from workspace browser`}},O={label:`Switch mission`,untitled:`New mission`,new:`New mission`,searchPlaceholder:`Search missions…`,noMatches:`No missions match`,working:`Agent working`,queuedBadge:`{{n}} queued`,delete:`Delete mission "{{title}}"`,deleteConfirm:`Delete?`,deleteLiveConfirm:`Agent is working — delete anyway?`,confirmDelete:`Confirm delete`,cancelDelete:`Keep mission`,deleteFailed:`Couldn't delete the mission`},k={title:`No AI provider installed`,body:`The agent needs Claude, Codex or Gemini on your machine. Install one, then reopen the agent to start chatting.`,placeholder:`Install an AI provider to use the agent…`},A={title:`Specrails MCP is off`,body:`The agent needs the embedded MCP server to operate the app.`,enable:`Enable Specrails MCP`,enabling:`Enabling…`,enabled:`MCP enabled`},j={live:`live`,queued:`queued`,running:`running`,done:`done`,failed:`failed`},M={generic:`Something went wrong. Try again.`,busy:`The agent is busy. Try again in a moment.`},N={kindAgent:`Agent mission`},P=`New Mission`,F=`Switch to Mission Control`,I=`Switch to Board`,L=`Search`,R=`Home`,z=`Favorite missions`,B=`Untitled`,V={title:`On workspace`,terminal:`Terminal`,files:`Files`,browser:`Browser`,requiresProject:`Select a project to use this tool`,resizeCode:`Resize code pane`,closeFiles:`Close code`,browserConfirm:`Add to agent`,browserCaptured:`Capture added`,uploadFailed:`Upload failed`,requiresConversation:`Start a mission to use this tool`,jobs:`Jobs`,closeJobs:`Close jobs`,resizeJobs:`Resize jobs pane`,noJobs:`No jobs yet — ask the agent to launch one`},H=`Attach file`,U=`Delete "{{title}}"`,W=`Confirm delete "{{title}}"`,G=`Add "{{title}}" to favorites`,K=`Remove "{{title}}" from favorites`,q=`confirm?`,J=`This provider can't read images yet — attach text files instead`,Y={label:`Effort`,minimal:`Minimal`,low:`Low`,medium:`Medium`,high:`High`,xhigh:`Extra high`},X={rail:`Rail {{index}}`,specCount_one:`{{count}} spec`,specCount_other:`{{count}} specs`,base:`Base branch`,openPr:`Open PR`,existingPr:`Existing PR`,title:{building:`Implementing in an isolated worktree…`,buildingExistingPr:`Applying changes to an existing PR…`,on_review:`Implementation ready for review`,pr_draft:`Draft PR created`,pr_draft_degraded:`PR delivery incomplete`,pr_ready:`PR ready for merge`,implementation_failed:`Implementation failed`,pr_failed:`PR creation failed`,merged:`PR merged`,discarded:`Discarded`},buildingHint:`You'll be asked to create the PR when it settles.`,buildingExistingPrHint:`Specrails is working on the existing PR branch and will push the review changes back to that PR.`,createPr:`Create PR`,publish:`Publish`,checkout:`Checkout`,checkoutTooltip:`Check out {{branch}} in the main project folder`,checkoutSuccess:`Checked out {{branch}}`,checkoutFailed:`Could not check out the PR branch`,retry:`Retry`,retryPr:`Retry PR`,checkMerge:`Check merge`,discard:`Discard`,confirmDiscard:`Confirm discard?`,mergedNote:`Merged — specs moved to Done`,discardedNote:`Discarded — specs returned to the backlog`,implementationFailedNote:`The implementation run failed before there was anything deliverable. Open the run log to inspect the failure, then discard this card before relaunching.`,degraded:{pushed:`The branch was pushed but the PR could not be created — retry to finish.`,localOnly:`The changes were assembled locally but not pushed — retry to publish the PR.`},alreadyResolved:`Already resolved elsewhere`,actionFailed:`Action failed`,notMergedYet:`Not merged yet`,viewLog:`View run log for {{ref}}`,runElapsedAria:`{{elapsed}} elapsed`,runCostAria:`{{cost}} spent`,pinned:{label:`Pinned`,marker:`Implementation card — pinned above`,collapse:`Minimize pinned card`,expand:`Expand pinned card`,expandCard:`Expand this card`,collapseCard:`Minimize this card`,collapsed_one:`Implementation card`,collapsed_other:`{{count}} implementation cards`,state:{building:`Building`,on_review:`Review`,pr_draft:`Draft PR`,pr_ready:`Published`,implementation_failed:`Failed`,pr_failed:`Failed`,merged:`Merged`,discarded:`Discarded`}},mergeLocal:`Integrate locally`,mergeLocalTooltip:`Merge the delivered branches into {{base}} in your local checkout (no GitHub needed)`,mergeLocalBlockedDirty:`Cannot integrate: your working tree on {{base}} has uncommitted changes. Commit or stash them, then retry.`,mergeLocalBlockedBranch:`Cannot integrate: your checkout is on {{current}}, not {{base}}. Check out {{base}}, then retry.`,mergedLocally:`Integrated into {{base}} locally`},Z={heading:`Spec draft`,drafting:`Updating draft…`,acceptanceCriteria:`Acceptance criteria`,untitled:`Untitled spec`,expand:`Show full description`,collapse:`Collapse description`},Q={openTicket:`Open spec #{{id}}`,openPullRequest:`Open PR #{{id}}`,openJob:`Open job {{id}}`,openLoop:`Open loop {{id}}`,ticketNotFound:`Spec #{{id}} not found — it may have been deleted`,pullRequestUrlMissing:`PR #{{id}} was referenced without a URL`,pullRequestNotFound:`PR #{{id}} could not be found in this project`,jobNotFound:`Job not found — it may have been deleted`,loopNotFound:`Loop not found — it may have been deleted`,lookupFailed:`Couldn't verify the reference — try again`},$={untitled:`Untitled mission`,menu:`Mission menu`,rename:`Rename`,renamePlaceholder:`Mission name`,renameHint:`Double-click to rename`,renameFailed:`Could not rename`,addFavorite:`Add to favorites`,removeFavorite:`Remove from favorites`,copyName:`Copy mission name`,copyId:`Copy mission ID`,copyProject:`Copy project name`,copyProjectPath:`Copy project path`,copyFailed:`Couldn't copy`,copyTranscript:`Copy transcript`,copyTranscriptSuccess:`Transcript copied`,copyTranscriptFailed:`Could not copy transcript`,exportTranscript:`Export transcript (.txt)`,exportTranscriptSuccess:`Transcript export started`,exportTranscriptFailed:`Could not export transcript`,delete:`Delete mission`,deleteConfirm:`Delete this mission? This cannot be undone.`,deleteFailed:`Could not delete the mission`},re=`What should we build next?`,ie={title:e,subtitle:t,trigger:n,composerPlaceholder:r,send:i,stop:a,copy:o,attachment:s,maximize:c,restore:l,minimize:u,close:d,newConversation:f,emptyTitle:p,emptyHint:m,thinking:h,connecting:g,consultingCode:_,size:v,model:y,history:b,queue:x,queueEdit:S,git:C,provider:w,tier:T,approval:E,project:ne,palette:D,mission:O,noProvider:k,degraded:A,toolCard:j,error:M,chip:N,newAgent:P,switchToAgent:F,switchToKanban:I,search:L,home:R,favoriteMissions:z,untitled:B,workspace:V,attachFile:H,deleteConversation:U,confirmDeleteConversation:W,addFavoriteConversation:G,removeFavoriteConversation:K,confirmShort:q,imagesUnsupported:J,effort:Y,prCard:X,specDraft:Z,refs:Q,header:$,emptyTitleCodeRain:re};export{te as t};
@@ -0,0 +1 @@
1
+ var e=`任务中心`,t=`通过对话操作 Specrails`,n=`任务中心`,r=`让智能体做任何事…`,i=`发送`,a=`停止`,o=`复制`,s={openPreview:`预览 {{name}}`,openDownload:`下载 {{name}}`,previewTitle:`{{name}} 预览`,downloadTitle:`下载文件?`,downloadPrompt:`此文件无法在此处预览。要下载它吗?`,download:`下载`,cancelDownload:`暂不`,loading:`正在准备文件…`,loadFailed:`无法加载附件`,loadError:`无法加载附件:{{error}}`},c=`最大化`,l=`还原`,u=`最小化`,d=`关闭`,f=`新任务`,p=`这次的任务是什么?`,m=`先选择一个项目,然后提问。智能体工作时看板会实时更新。`,h=`思考中…`,g=`连接中…`,_=`正在查询应用…`,v={compact:`紧凑`,comfortable:`舒适`,max:`最大化`},y={label:`模型`},b={hint:`浏览提示历史 — 输入以编辑,↑↓ 导航`},x={queued:`排队中`,send:`发送到队列`,sendHint:`智能体仍在工作——此消息将排队并在之后执行`,placeholder:`智能体工作时可继续输入——消息将排队…`},S={editing:`正在编辑排队消息 {{n}}/{{m}}`,hint:`↑↓ 导航 · 回车保存 · Esc 取消`,save:`保存排队消息`,cancel:`取消编辑`,dispatched:`该排队消息已发送——你的文本已保留为草稿`,saveFailed:`无法保存排队消息`},C={branch:`分支`,detached:`(分离头指针)`,dirty:`有未提交的更改`,switched:`已切换到 {{branch}}`,switchFailed:`无法切换分支`,lockedWhileWorking:`智能体工作时分支已锁定`,searchPlaceholder:`搜索分支…`,noMatches:`没有匹配的分支`,worktrees:`工作树`,worktreePathCopied:`已复制工作树路径`,copyWorktreePath:`复制工作树路径`},w={label:`提供方`,claude:`Claude`,codex:`Codex`,gemini:`Gemini`},T={cycleHint:`⇧⇥ 切换`,observe:{name:`观察`,desc:`只读 — 不做任何更改`},edit:{name:`编辑`,desc:`创建和编辑(可撤销)`},operate:{name:`操作`,desc:`启动 AI — 会产生费用`},autonomous:{name:`自主`,desc:`删除和终止 — 不可逆`},lockedTitle:`需要更高的级别`,lockedBody:`该操作需要「{{level}}」级别。你当前处于「{{current}}」。`,raiseHint:`⇧⇥ 提升级别,或换一种方式询问。`},E={title:`确认操作`,costAction:`{{action}} · ~{{cost}} · {{tier}}`,approve:`批准`,cancel:`取消`,dontAskAgain:`本次会话不再询问`,approved:`已批准`,cancelled:`已取消`},D={home:`主页`,searchPlaceholder:`与 Specrails 对话…`,recents:`最近`,allProjects:`所有项目`,searchAll:`在所有项目中搜索`,addProject:`添加项目…`,homeHint:`未选择项目 — 正在跨所有项目操作。`,askCreateOrSearch:`未选择任何项目。你想创建一个新项目,还是在所有项目中搜索?`},O={remove:`移除 {{label}}`,addContextAction:`添加上下文或操作`,filtering:`筛选 "{{query}}"`,keyboard:`↑↓ Enter Esc`,noMatches:`无匹配结果`,noMatchesFor:`没有 "{{query}}" 的匹配结果`,mode:{reference:{title:`引用`,hint:`@ 项目、规格、任务`},trace:{title:`追踪`,hint:`# 作业、运行、ID`},action:{title:`操作`,hint:`/ 此上下文的命令`}},plus:{reference:`引用`,referenceHint:`项目、规格、任务`,trace:`追踪`,traceHint:`作业、运行、ID`,action:`操作`,actionHint:`创建、启动、检查`,fileAttachment:`文件附件`,fileAttachmentHint:`添加文档、图片、日志`,browserCapture:`浏览器捕获`,browserCaptureHint:`可从工作区浏览器使用`}},k={label:`切换任务`,untitled:`新任务`,new:`新任务`,searchPlaceholder:`搜索任务…`,noMatches:`没有匹配的任务`,working:`代理正在工作`,queuedBadge:`{{n}} 条排队`,delete:`删除任务 "{{title}}"`,deleteConfirm:`删除?`,deleteLiveConfirm:`代理正在工作 — 仍要删除?`,confirmDelete:`确认删除`,cancelDelete:`保留任务`,deleteFailed:`无法删除任务`},A={title:`未安装 AI 提供方`,body:`智能体需要在你的机器上安装 Claude、Codex 或 Gemini。安装其中之一后重新打开智能体即可开始对话。`,placeholder:`请安装 AI 提供方以使用智能体…`},j={title:`Specrails MCP 已关闭`,body:`智能体需要内置的 MCP 服务器来操作应用。`,enable:`启用 Specrails MCP`,enabling:`正在启用…`,enabled:`MCP 已启用`},M={live:`实时`,queued:`排队中`,running:`运行中`,done:`已完成`,failed:`失败`},N={generic:`出了点问题。请重试。`,busy:`智能体正忙。请稍后重试。`},P={kindAgent:`智能体任务`},F=`新任务`,I=`切换到任务中心`,L=`切换到看板`,R=`搜索`,z=`主页`,B=`收藏任务`,V=`未命名`,H={title:`工作区`,terminal:`终端`,files:`文件`,browser:`浏览器`,requiresProject:`请选择一个项目以使用此工具`,resizeCode:`调整代码面板`,closeFiles:`关闭代码`,browserConfirm:`添加到智能体`,browserCaptured:`已添加捕获`,uploadFailed:`上传失败`,requiresConversation:`启动任务后才能使用此工具`,jobs:`作业`,closeJobs:`关闭作业`,resizeJobs:`调整作业面板大小`,noJobs:`还没有作业——让智能体启动一个吧`},U=`附加文件`,W=`删除「{{title}}」`,G=`确认删除「{{title}}」`,K=`将「{{title}}」添加到收藏`,q=`从收藏中移除「{{title}}」`,J=`确认?`,Y=`该提供商暂不支持读取图片 — 请附加文本文件`,X={label:`推理强度`,minimal:`最小`,low:`低`,medium:`中`,high:`高`,xhigh:`极高`},Z={rail:`Rail {{index}}`,specCount_one:`{{count}} 个 Spec`,specCount_other:`{{count}} 个 Spec`,base:`基础分支`,openPr:`打开 PR`,existingPr:`现有 PR`,title:{building:`正在隔离的 worktree 中实现…`,buildingExistingPr:`正在向现有 PR 应用更改…`,on_review:`实现已完成,待评审`,pr_draft:`已创建草稿 PR`,pr_draft_degraded:`PR 交付未完成`,pr_ready:`PR 已就绪,可合并`,implementation_failed:`实现失败`,pr_failed:`PR 创建失败`,merged:`PR 已合并`,discarded:`已丢弃`},buildingHint:`完成后会询问你是否创建 PR。`,buildingExistingPrHint:`Specrails 正在现有 PR 的分支上工作,并会把 review 更改推送回同一个 PR。`,createPr:`创建 PR`,publish:`发布`,checkout:`Checkout`,checkoutTooltip:`在项目主目录检出 {{branch}}`,checkoutSuccess:`已检出 {{branch}}`,checkoutFailed:`无法检出 PR 分支`,retry:`重试`,retryPr:`重试 PR`,checkMerge:`检查合并`,discard:`丢弃`,confirmDiscard:`确认丢弃?`,mergedNote:`已合并 — Spec 已移至完成`,discardedNote:`已丢弃 — Spec 已退回待办`,implementationFailedNote:`实现运行在生成可交付内容前失败。请打开运行日志查看失败原因,然后在重新启动前丢弃此卡片。`,degraded:{pushed:`分支已推送,但无法创建 PR — 请重试以完成。`,localOnly:`更改已在本地组装但未推送 — 请重试以发布 PR。`},alreadyResolved:`已在其他地方处理`,actionFailed:`操作失败`,notMergedYet:`尚未合并`,viewLog:`查看 {{ref}} 的运行日志`,runElapsedAria:`已运行 {{elapsed}}`,runCostAria:`已花费 {{cost}}`,pinned:{label:`已固定`,marker:`实现卡片 — 已固定在上方`,collapse:`最小化固定卡片`,expand:`展开固定卡片`,expandCard:`展开此卡片`,collapseCard:`最小化此卡片`,collapsed_one:`实现卡片`,collapsed_other:`{{count}} 张实现卡片`,state:{building:`构建中`,on_review:`待审阅`,pr_draft:`草稿 PR`,pr_ready:`已发布`,implementation_failed:`失败`,pr_failed:`失败`,merged:`已合并`,discarded:`已丢弃`}},mergeLocal:`本地集成`,mergeLocalTooltip:`将交付的分支合并到本地检出的 {{base}}(无需 GitHub)`,mergeLocalBlockedDirty:`无法集成:{{base}} 上的工作树有未提交的更改。请提交或暂存后重试。`,mergeLocalBlockedBranch:`无法集成:当前检出在 {{current}},而不是 {{base}}。请切换到 {{base}} 后重试。`,mergedLocally:`已在本地集成到 {{base}}`},Q={heading:`规格草稿`,drafting:`正在更新草稿…`,acceptanceCriteria:`验收标准`,untitled:`未命名规格`,expand:`显示完整描述`,collapse:`收起描述`},$={openTicket:`打开 Spec #{{id}}`,openPullRequest:`打开 PR #{{id}}`,openJob:`打开任务 {{id}}`,openLoop:`打开循环 {{id}}`,ticketNotFound:`未找到 Spec #{{id}} — 可能已被删除`,pullRequestUrlMissing:`PR #{{id}} 被引用但没有 URL`,pullRequestNotFound:`在此项目中找不到 PR #{{id}}`,jobNotFound:`未找到任务 — 可能已被删除`,loopNotFound:`未找到循环 — 可能已被删除`,lookupFailed:`无法验证该引用 — 请重试`},ee={untitled:`未命名任务`,menu:`任务菜单`,rename:`重命名`,renamePlaceholder:`任务名称`,renameHint:`双击重命名`,renameFailed:`无法重命名`,addFavorite:`添加到收藏`,removeFavorite:`从收藏中移除`,copyName:`复制任务名称`,copyId:`复制任务 ID`,copyProject:`复制项目名称`,copyProjectPath:`复制项目路径`,copyFailed:`无法复制`,copyTranscript:`复制转录`,copyTranscriptSuccess:`转录已复制`,copyTranscriptFailed:`无法复制转录`,exportTranscript:`导出转录 (.txt)`,exportTranscriptSuccess:`转录导出已开始`,exportTranscriptFailed:`无法导出转录`,delete:`删除任务`,deleteConfirm:`删除此任务?此操作无法撤销。`,deleteFailed:`无法删除任务`},te=`接下来要构建什么?`,ne={title:e,subtitle:t,trigger:n,composerPlaceholder:r,send:i,stop:a,copy:o,attachment:s,maximize:c,restore:l,minimize:u,close:d,newConversation:f,emptyTitle:p,emptyHint:m,thinking:h,connecting:g,consultingCode:_,size:v,model:y,history:b,queue:x,queueEdit:S,git:C,provider:w,tier:T,approval:E,project:D,palette:O,mission:k,noProvider:A,degraded:j,toolCard:M,error:N,chip:P,newAgent:F,switchToAgent:I,switchToKanban:L,search:R,home:z,favoriteMissions:B,untitled:V,workspace:H,attachFile:U,deleteConversation:W,confirmDeleteConversation:G,addFavoriteConversation:K,removeFavoriteConversation:q,confirmShort:J,imagesUnsupported:Y,effort:X,prCard:Z,specDraft:Q,refs:$,header:ee,emptyTitleCodeRain:te};export{K as addFavoriteConversation,E as approval,U as attachFile,s as attachment,P as chip,d as close,r as composerPlaceholder,G as confirmDeleteConversation,J as confirmShort,g as connecting,_ as consultingCode,o as copy,ne as default,j as degraded,W as deleteConversation,X as effort,m as emptyHint,p as emptyTitle,te as emptyTitleCodeRain,N as error,B as favoriteMissions,C as git,ee as header,b as history,z as home,Y as imagesUnsupported,c as maximize,u as minimize,k as mission,y as model,F as newAgent,f as newConversation,A as noProvider,O as palette,Z as prCard,D as project,w as provider,x as queue,S as queueEdit,$ as refs,q as removeFavoriteConversation,l as restore,R as search,i as send,v as size,Q as specDraft,a as stop,t as subtitle,I as switchToAgent,L as switchToKanban,h as thinking,T as tier,e as title,M as toolCard,n as trigger,V as untitled,H as workspace};
@@ -1 +1 @@
1
- import{gn as e}from"./index-Dw1N2-ci.js";var t=e(`brain`,[[`path`,{d:`M12 18V5`,key:`adv99a`}],[`path`,{d:`M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4`,key:`1e3is1`}],[`path`,{d:`M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5`,key:`1gqd8o`}],[`path`,{d:`M17.997 5.125a4 4 0 0 1 2.526 5.77`,key:`iwvgf7`}],[`path`,{d:`M18 18a4 4 0 0 0 2-7.464`,key:`efp6ie`}],[`path`,{d:`M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517`,key:`1gq6am`}],[`path`,{d:`M6 18a4 4 0 0 1-2-7.464`,key:`k1g0md`}],[`path`,{d:`M6.003 5.125a4 4 0 0 0-2.526 5.77`,key:`q97ue3`}]]);export{t};
1
+ import{Rn as e}from"./index-89SuhD4Y.js";var t=e(`brain`,[[`path`,{d:`M12 18V5`,key:`adv99a`}],[`path`,{d:`M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4`,key:`1e3is1`}],[`path`,{d:`M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5`,key:`1gqd8o`}],[`path`,{d:`M17.997 5.125a4 4 0 0 1 2.526 5.77`,key:`iwvgf7`}],[`path`,{d:`M18 18a4 4 0 0 0 2-7.464`,key:`efp6ie`}],[`path`,{d:`M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517`,key:`1gq6am`}],[`path`,{d:`M6 18a4 4 0 0 1-2-7.464`,key:`k1g0md`}],[`path`,{d:`M6.003 5.125a4 4 0 0 0-2.526 5.77`,key:`q97ue3`}]]);export{t};
@@ -0,0 +1 @@
1
+ var e={railAdded:`Rail {{n}} adicionado`,railRemoved:`{{rail}} removido`,railLimitReached:`Limite de rails atingido ({{max}} máx.)`,railDeleteFailed:`Não foi possível remover o rail — ele contém specs, está em execução ou tem uma decisão de PR pendente`,launchTicketsInFlight:`Uma spec deste rail já está sendo trabalhada por uma execução ativa`,launchAllSummary_one:`{{count}} rail lançado em paralelo`,launchAllSummary_other:`{{count}} rails lançados em paralelo`,launchAllNoneEligible:`Nenhum rail pronto para lançar — atribua specs a um rail livre primeiro`,launchAllFailed:`Nenhum rail pôde ser lançado`,railCompleted:`Rail {{n}} concluído`,railFailed:`Rail {{n}} falhou — specs devolvidas a Specs`,railEnded:`Rail {{n}} {{status}} — specs devolvidas a Specs`,alreadyOnRail:`Já está em {{rail}}`,movedToRail:`Movido para {{rail}}`,railRunningStopFirst:`{{rail}} está em execução — pare-o antes de remover`,removedFromRail:`Removido de {{rail}}`,queuedOnRail:`Em fila em {{rail}}`,queuedOnRailDescription:`O rail está atualmente em execução`,railStopped:`{{rail}} parado`,stopFailed:`Falha ao parar o rail`,syncTicketsFailed:`Falha ao sincronizar os tickets do rail`,launchFailed:`Falha ao lançar o rail`,launchNetworkError:`Erro de rede ao lançar o rail`,railLaunched:`{{rail}} lançado`,launchDescription_one:`{{mode}} com {{count}} spec`,launchDescription_other:`{{mode}} com {{count}} specs`,railWorktreeNeedsReview:`Rail {{n}}: a spec #{{ticket}} precisa de revisão após o merge`,railWorktreesNoGit:`Isolamento por worktree indisponível: este projeto não é um repositório git — executando em modo compartilhado.`,railWorktreesNoCommits:`Isolamento por worktree indisponível: o repositório ainda não tem commits — faça um commit inicial e relance.`,railWorktreesError:`O isolamento por worktrees falhou — esta execução continua SEM o fluxo de revisão por PR (sem cartão de implementação). Veja o detalhe do erro abaixo.`,onReviewCannotMoveToRail:`Esta spec aguarda revisão da PR — resolva primeiro a decisão da PR`,onReviewNotLaunchable:`Uma spec deste rail aguarda revisão da PR — resolva a decisão da PR antes de lançar`},t={readyForReview:`Pronto para revisão`,draftPr:`PR em rascunho`,branchPushed:`Ramo enviado — PR pendente`,branchPushedHint:`O ramo foi enviado mas não foi possível criar a PR (GitHub CLI indisponível). Tente novamente para a criar.`,iteratingPr:`A atualizar PR`,prReady:`PR pronta`,implementationFailed:`Implementação falhou`,implementationFailedHint:`A execução de implementação falhou. Abra o log da execução e descarte este cartão antes de relançar.`,prFailed:`PR falhou`,prFailedDetail:`PR falhou: {{detail}}`,createDegraded:`Não foi possível publicar a PR — {{detail}}. Tente novamente quando estiver resolvido.`,createPr:`Criar PR`,createPrTooltip:`→ {{base}}`,publish:`Publicar`,publishTooltip:`Abre a PR em rascunho para a revisão da equipa`,checkout:`Checkout`,checkoutTooltip:`Fazer checkout de {{branch}} na pasta principal do projeto`,checkoutSuccess:`Checkout feito em {{branch}}`,checkoutFailed:`Não foi possível fazer checkout do ramo da PR`,discard:`Descartar`,discardTooltip:`Elimina os ramos e devolve os tickets a Specs`,retryPr:`Tentar PR novamente`,retry:`Tentar novamente`,checkMerge:`Verificar merge`,checkMergeTooltip:`Pergunta ao GitHub se já foi feito merge da PR`,prLinkFallback:`PR`,openPrTitle:`Abrir a PR no GitHub`,notMergedYet:`Ainda sem merge`,alreadyResolved:`Já resolvida noutro lugar`,ghFailed:`GitHub CLI falhou: {{detail}}`,actionFailed:`Não foi possível aplicar a decisão da PR`,mergedToast:`Merge da PR concluído — tickets movidos para Concluído`,discardedToast:`PR descartada — tickets devolvidos a Specs`,decisionPending:`Este rail tem uma decisão de PR pendente — crie, publique ou descarte-a antes de relançar`,discardConfirmTitle:`Descartar esta entrega?`,discardConfirmBody:`Os ramos e worktrees do lançamento serão eliminados e os seus tickets voltarão a Specs. Esta ação não pode ser anulada.`,mergeLocal:`Integrar localmente`,mergeLocalTooltip:`Faz merge dos branches entregues em {{base}} no seu checkout local (sem GitHub)`,mergeLocalConfirmTitle:`Integrar localmente?`,mergeLocalConfirmBody:`Os branches entregues serão mesclados em {{base}} no seu checkout local. Seu checkout deve estar em {{base}} com a árvore de trabalho limpa.`,mergeLocalBlockedDirty:`Não é possível integrar: sua árvore de trabalho em {{base}} tem mudanças sem commit. Faça commit ou stash e tente de novo.`,mergeLocalBlockedBranch:`Não é possível integrar: seu checkout está em {{current}}, não em {{base}}. Mude para {{base}} e tente de novo.`,mergeLocalFailed:`O merge local falhou: {{detail}}`,mergedLocally:`Integrado em {{base}} localmente`},n={title:`Rails`,runningCount_one:`{{count}} em execução`,runningCount_other:`{{count}} em execução`,launchAll:`Lançar todos`,launchAllTitle:`Lança em paralelo todos os rails prontos — cada execução é isolada em seu próprio worktree do git`},r={skipRunning_one:`{{count}} já em execução`,skipRunning_other:`{{count}} já em execução`,skipEmpty_one:`{{count}} sem specs`,skipEmpty_other:`{{count}} sem specs`,skipPendingDecision_one:`{{count}} aguardando uma decisão de PR`,skipPendingDecision_other:`{{count}} aguardando uma decisão de PR`,skipOnReview_one:`{{count}} com specs em revisão`,skipOnReview_other:`{{count}} com specs em revisão`,skipInFlight_one:`{{count}} ignorado (spec já em andamento)`,skipInFlight_other:`{{count}} ignorados (specs já em andamento)`,failedCount_one:`{{count}} falhou`,failedCount_other:`{{count}} falharam`},i={title:`Lançar todos os rails`,railsCount_one:`{{count}} rail`,railsCount_other:`{{count}} rails`,specsCount_one:`{{count}} spec`,specsCount_other:`{{count}} specs`,isolationTitle:`Paralelo e isolado.`,isolationBody:`Cada rail roda em seu próprio worktree do git — lançamentos simultâneos nunca colidem.`,pipelinesTitle_one:`{{count}} pipeline de IA.`,pipelinesTitle_other:`{{count}} pipelines de IA.`,pipelinesBody:`Um lançamento por rail, cada um com seu modo, motor e perfil configurados.`,costTitle:`Custo multiplicado.`,costBody:`Cada rail gera sua própria execução de IA — o gasto escala com o número de rails.`,launch_one:`Lançar {{count}} rail`,launch_other:`Lançar {{count}} rails`},a={viewJobLog:`Ver log do job`,log:`Log`,implement:`Implementar`,batch:`Batch`,freestyle:`Freestyle`,freestyleTitle:`Freestyle — o Claude implementa a spec de forma autónoma, sem pipeline`,loop:`Loop`,loopTitle:`Loop — execute um loop de automação publicado nas specs do rail`,pickLoop:`Escolha um loop…`,effortTitle:`Esforço de raciocínio`,stop:`Parar`,play:`Iniciar`,failedRetry:`O job falhou — clique para repetir`,addSpecsFirst:`Adicione primeiro specs a este rail`,builtInLoops:`Integrados`,customLoops:`Loops personalizados`,worktreesMerged:`{{count}} mesclados`,worktreesNeedsReview:`{{count}} para revisar`,execSteps:`{{count}} passos`,execLines:`{{count}} linhas`,openspec:`OpenSpec`},o={moveToSpecs:`Mover para Specs`,deleteRail:`Eliminar {{label}}`,dropHere:`Largar aqui`,dropOnThisRail:`Largar neste rail`,dragSpecsHere:`Arraste specs para aqui`},s={title:`Lançar em modo Freestyle`,context_one:`{{rail}} · {{count}} spec`,context_other:`{{rail}} · {{count}} specs`,noPipelineTitle:`Sem pipeline OpenSpec.`,noPipelineBody:`O fluxo estruturado architect → developer → reviewer é totalmente ignorado.`,autonomyTitle:`Autonomia nativa do Claude.`,autonomyBody:`O Claude trabalha por conta própria com agentes nativos e workflows dinâmicos.`,costTitle:`Custo variável.`,costBody:`O gasto depende do que o Claude decidir fazer — pode ser superior ao esperado.`,continue:`Continuar`},c={fetchFailed:`Falha ao obter os rails: {{status}}`},l={toasts:e,railPr:t,railsBoard:n,launchAll:r,launchAllDialog:i,railControls:a,railRow:o,freestyleDialog:s,useRails:c};export{l as default,s as freestyleDialog,r as launchAll,i as launchAllDialog,a as railControls,t as railPr,o as railRow,n as railsBoard,e as toasts,c as useRails};
@@ -1 +1 @@
1
- var e={railAdded:`Rail {{n}} ajouté`,railRemoved:`{{rail}} supprimé`,railLimitReached:`Limite de rails atteinte ({{max}} max.)`,railDeleteFailed:`Impossible de supprimer le rail — il contient des specs, est en cours d'exécution ou a une décision de PR en attente`,launchTicketsInFlight:`Une spec de ce rail est déjà traitée par une exécution active`,launchAllSummary_one:`{{count}} rail lancé en parallèle`,launchAllSummary_other:`{{count}} rails lancés en parallèle`,launchAllNoneEligible:`Aucun rail prêt à lancer — assignez d'abord des specs à un rail libre`,launchAllFailed:`Aucun rail n'a pu être lancé`,railCompleted:`Rail {{n}} terminé`,railFailed:`Rail {{n}} en échec — specs renvoyées vers Specs`,railEnded:`Rail {{n}} {{status}} — specs renvoyées vers Specs`,alreadyOnRail:`Déjà sur {{rail}}`,movedToRail:`Déplacé vers {{rail}}`,railRunningStopFirst:`{{rail}} est en cours d'exécution — arrêtez-le avant de le supprimer`,removedFromRail:`Retiré de {{rail}}`,queuedOnRail:`Mis en file sur {{rail}}`,queuedOnRailDescription:`Le rail est en cours d'exécution`,railStopped:`{{rail}} arrêté`,stopFailed:`Échec de l'arrêt du rail`,syncTicketsFailed:`Échec de la synchronisation des tickets du rail`,launchFailed:`Échec du lancement du rail`,launchNetworkError:`Erreur réseau au lancement du rail`,railLaunched:`{{rail}} lancé`,launchDescription_one:`{{mode}} avec {{count}} spec`,launchDescription_other:`{{mode}} avec {{count}} specs`,railWorktreeNeedsReview:`Rail {{n}} : la spec #{{ticket}} nécessite une revue après le merge`,railWorktreesNoGit:`Isolation par worktree indisponible : ce projet n'est pas un dépôt git — exécution en mode partagé.`,railWorktreesNoCommits:`Isolation par worktree indisponible : le dépôt n'a pas encore de commit — faites un commit initial puis relancez.`,railWorktreesError:`L'isolation par worktrees a échoué — cette exécution continue SANS le flux de revue par PR (pas de carte d'implémentation). Voir le détail de l'erreur ci-dessous.`,onReviewCannotMoveToRail:`Cette spec attend une revue de PR — résolvez d'abord la décision de la PR`,onReviewNotLaunchable:`Une spec de ce rail attend une revue de PR — résolvez la décision de la PR avant de lancer`},t={readyForReview:`Prêt pour la revue`,draftPr:`PR en brouillon`,branchPushed:`Branche poussée — PR en attente`,branchPushedHint:`La branche a été poussée mais la PR n'a pas pu être créée (GitHub CLI indisponible). Réessayez pour la créer.`,iteratingPr:`Mise à jour de la PR`,prReady:`PR prête`,prFailed:`PR en échec`,prFailedDetail:`PR en échec : {{detail}}`,createDegraded:`Impossible de publier la PR — {{detail}}. Réessayez une fois le problème résolu.`,createPr:`Créer la PR`,createPrTooltip:`→ {{base}}`,publish:`Publier`,publishTooltip:`Ouvre la PR en brouillon pour la relecture de l'équipe`,checkout:`Checkout`,checkoutTooltip:`Basculer le dossier principal du projet sur {{branch}}`,checkoutSuccess:`Checkout effectué sur {{branch}}`,checkoutFailed:`Impossible de faire le checkout de la branche de la PR`,discard:`Abandonner`,discardTooltip:`Supprime les branches et renvoie les tickets vers Specs`,retryPr:`Réessayer la PR`,retry:`Réessayer`,checkMerge:`Vérifier le merge`,checkMergeTooltip:`Demande à GitHub si la PR a été fusionnée`,prLinkFallback:`PR`,openPrTitle:`Ouvrir la PR sur GitHub`,notMergedYet:`Pas encore fusionnée`,alreadyResolved:`Déjà résolue ailleurs`,ghFailed:`GitHub CLI a échoué : {{detail}}`,actionFailed:`Impossible d'appliquer la décision de la PR`,mergedToast:`PR fusionnée — tickets passés en Terminé`,discardedToast:`PR abandonnée — tickets renvoyés vers Specs`,decisionPending:`Ce rail a une décision de PR en attente — créez, publiez ou abandonnez-la avant de relancer`,discardConfirmTitle:`Abandonner cette livraison ?`,discardConfirmBody:`Les branches et worktrees du lancement seront supprimés et ses tickets retourneront vers Specs. Cette action est irréversible.`,mergeLocal:`Intégrer en local`,mergeLocalTooltip:`Fusionne les branches livrées dans {{base}} dans votre checkout local (sans GitHub)`,mergeLocalConfirmTitle:`Intégrer en local ?`,mergeLocalConfirmBody:`Les branches livrées seront fusionnées dans {{base}} dans votre checkout local. Votre checkout doit être sur {{base}} avec un arbre de travail propre.`,mergeLocalBlockedDirty:`Impossible d'intégrer : votre arbre de travail sur {{base}} contient des changements non commités. Commitez ou stashez-les, puis réessayez.`,mergeLocalBlockedBranch:`Impossible d'intégrer : votre checkout est sur {{current}}, pas sur {{base}}. Passez sur {{base}}, puis réessayez.`,mergeLocalFailed:`La fusion locale a échoué : {{detail}}`,mergedLocally:`Intégré dans {{base}} en local`},n={title:`Rails`,runningCount_one:`{{count}} en cours`,runningCount_other:`{{count}} en cours`,launchAll:`Tout lancer`,launchAllTitle:`Lance en parallèle tous les rails prêts — chaque exécution est isolée dans son propre worktree git`},r={skipRunning_one:`{{count}} déjà en cours`,skipRunning_other:`{{count}} déjà en cours`,skipEmpty_one:`{{count}} sans specs`,skipEmpty_other:`{{count}} sans specs`,skipPendingDecision_one:`{{count}} en attente d'une décision de PR`,skipPendingDecision_other:`{{count}} en attente d'une décision de PR`,skipOnReview_one:`{{count}} avec des specs en revue`,skipOnReview_other:`{{count}} avec des specs en revue`,skipInFlight_one:`{{count}} ignoré (spec déjà en cours)`,skipInFlight_other:`{{count}} ignorés (specs déjà en cours)`,failedCount_one:`{{count}} en échec`,failedCount_other:`{{count}} en échec`},i={title:`Lancer tous les rails`,railsCount_one:`{{count}} rail`,railsCount_other:`{{count}} rails`,specsCount_one:`{{count}} spec`,specsCount_other:`{{count}} specs`,isolationTitle:`Parallèle et isolé.`,isolationBody:`Chaque rail s'exécute dans son propre worktree git — les lancements simultanés n'entrent jamais en collision.`,pipelinesTitle_one:`{{count}} pipeline IA.`,pipelinesTitle_other:`{{count}} pipelines IA.`,pipelinesBody:`Un lancement par rail, chacun avec son mode, son moteur et son profil configurés.`,costTitle:`Coût multiplié.`,costBody:`Chaque rail génère sa propre exécution IA — la dépense augmente avec le nombre de rails.`,launch_one:`Lancer {{count}} rail`,launch_other:`Lancer {{count}} rails`},a={viewJobLog:`Voir le log du job`,log:`Log`,implement:`Implémenter`,batch:`Batch`,freestyle:`Freestyle`,freestyleTitle:`Freestyle — Claude implémente la spec en autonomie, sans pipeline`,loop:`Loop`,loopTitle:`Loop — exécute une boucle d'automatisation publiée sur les specs du rail`,pickLoop:`Choisir une boucle…`,effortTitle:`Effort de raisonnement`,stop:`Arrêter`,play:`Lancer`,failedRetry:`Job en échec — cliquez pour réessayer`,addSpecsFirst:`Ajoutez d'abord des specs à ce rail`,builtInLoops:`Intégrés`,customLoops:`Loops personnalisés`,worktreesMerged:`{{count}} fusionnés`,worktreesNeedsReview:`{{count}} à vérifier`,execSteps:`{{count}} étapes`,execLines:`{{count}} lignes`,openspec:`OpenSpec`},o={moveToSpecs:`Déplacer vers Specs`,deleteRail:`Supprimer {{label}}`,dropHere:`Déposer ici`,dropOnThisRail:`Déposer sur ce rail`,dragSpecsHere:`Glissez des specs ici`},s={title:`Lancer en mode Freestyle`,context_one:`{{rail}} · {{count}} spec`,context_other:`{{rail}} · {{count}} specs`,noPipelineTitle:`Pas de pipeline OpenSpec.`,noPipelineBody:`Le flux structuré architecte → développeur → reviewer est entièrement ignoré.`,autonomyTitle:`Autonomie native de Claude.`,autonomyBody:`Claude travaille seul avec ses agents natifs et des workflows dynamiques.`,costTitle:`Coût variable.`,costBody:`La dépense dépend de ce que Claude décide de faire — elle peut être plus élevée que prévu.`,continue:`Continuer`},c={fetchFailed:`Échec de la récupération des rails : {{status}}`},l={toasts:e,railPr:t,railsBoard:n,launchAll:r,launchAllDialog:i,railControls:a,railRow:o,freestyleDialog:s,useRails:c};export{l as default,s as freestyleDialog,r as launchAll,i as launchAllDialog,a as railControls,t as railPr,o as railRow,n as railsBoard,e as toasts,c as useRails};
1
+ var e={railAdded:`Rail {{n}} ajouté`,railRemoved:`{{rail}} supprimé`,railLimitReached:`Limite de rails atteinte ({{max}} max.)`,railDeleteFailed:`Impossible de supprimer le rail — il contient des specs, est en cours d'exécution ou a une décision de PR en attente`,launchTicketsInFlight:`Une spec de ce rail est déjà traitée par une exécution active`,launchAllSummary_one:`{{count}} rail lancé en parallèle`,launchAllSummary_other:`{{count}} rails lancés en parallèle`,launchAllNoneEligible:`Aucun rail prêt à lancer — assignez d'abord des specs à un rail libre`,launchAllFailed:`Aucun rail n'a pu être lancé`,railCompleted:`Rail {{n}} terminé`,railFailed:`Rail {{n}} en échec — specs renvoyées vers Specs`,railEnded:`Rail {{n}} {{status}} — specs renvoyées vers Specs`,alreadyOnRail:`Déjà sur {{rail}}`,movedToRail:`Déplacé vers {{rail}}`,railRunningStopFirst:`{{rail}} est en cours d'exécution — arrêtez-le avant de le supprimer`,removedFromRail:`Retiré de {{rail}}`,queuedOnRail:`Mis en file sur {{rail}}`,queuedOnRailDescription:`Le rail est en cours d'exécution`,railStopped:`{{rail}} arrêté`,stopFailed:`Échec de l'arrêt du rail`,syncTicketsFailed:`Échec de la synchronisation des tickets du rail`,launchFailed:`Échec du lancement du rail`,launchNetworkError:`Erreur réseau au lancement du rail`,railLaunched:`{{rail}} lancé`,launchDescription_one:`{{mode}} avec {{count}} spec`,launchDescription_other:`{{mode}} avec {{count}} specs`,railWorktreeNeedsReview:`Rail {{n}} : la spec #{{ticket}} nécessite une revue après le merge`,railWorktreesNoGit:`Isolation par worktree indisponible : ce projet n'est pas un dépôt git — exécution en mode partagé.`,railWorktreesNoCommits:`Isolation par worktree indisponible : le dépôt n'a pas encore de commit — faites un commit initial puis relancez.`,railWorktreesError:`L'isolation par worktrees a échoué — cette exécution continue SANS le flux de revue par PR (pas de carte d'implémentation). Voir le détail de l'erreur ci-dessous.`,onReviewCannotMoveToRail:`Cette spec attend une revue de PR — résolvez d'abord la décision de la PR`,onReviewNotLaunchable:`Une spec de ce rail attend une revue de PR — résolvez la décision de la PR avant de lancer`},t={readyForReview:`Prêt pour la revue`,draftPr:`PR en brouillon`,branchPushed:`Branche poussée — PR en attente`,branchPushedHint:`La branche a été poussée mais la PR n'a pas pu être créée (GitHub CLI indisponible). Réessayez pour la créer.`,iteratingPr:`Mise à jour de la PR`,prReady:`PR prête`,implementationFailed:`Échec de l’implémentation`,implementationFailedHint:`Le run d’implémentation a échoué. Ouvrez le journal du run, puis abandonnez cette carte avant de relancer.`,prFailed:`PR en échec`,prFailedDetail:`PR en échec : {{detail}}`,createDegraded:`Impossible de publier la PR — {{detail}}. Réessayez une fois le problème résolu.`,createPr:`Créer la PR`,createPrTooltip:`→ {{base}}`,publish:`Publier`,publishTooltip:`Ouvre la PR en brouillon pour la relecture de l'équipe`,checkout:`Checkout`,checkoutTooltip:`Basculer le dossier principal du projet sur {{branch}}`,checkoutSuccess:`Checkout effectué sur {{branch}}`,checkoutFailed:`Impossible de faire le checkout de la branche de la PR`,discard:`Abandonner`,discardTooltip:`Supprime les branches et renvoie les tickets vers Specs`,retryPr:`Réessayer la PR`,retry:`Réessayer`,checkMerge:`Vérifier le merge`,checkMergeTooltip:`Demande à GitHub si la PR a été fusionnée`,prLinkFallback:`PR`,openPrTitle:`Ouvrir la PR sur GitHub`,notMergedYet:`Pas encore fusionnée`,alreadyResolved:`Déjà résolue ailleurs`,ghFailed:`GitHub CLI a échoué : {{detail}}`,actionFailed:`Impossible d'appliquer la décision de la PR`,mergedToast:`PR fusionnée — tickets passés en Terminé`,discardedToast:`PR abandonnée — tickets renvoyés vers Specs`,decisionPending:`Ce rail a une décision de PR en attente — créez, publiez ou abandonnez-la avant de relancer`,discardConfirmTitle:`Abandonner cette livraison ?`,discardConfirmBody:`Les branches et worktrees du lancement seront supprimés et ses tickets retourneront vers Specs. Cette action est irréversible.`,mergeLocal:`Intégrer en local`,mergeLocalTooltip:`Fusionne les branches livrées dans {{base}} dans votre checkout local (sans GitHub)`,mergeLocalConfirmTitle:`Intégrer en local ?`,mergeLocalConfirmBody:`Les branches livrées seront fusionnées dans {{base}} dans votre checkout local. Votre checkout doit être sur {{base}} avec un arbre de travail propre.`,mergeLocalBlockedDirty:`Impossible d'intégrer : votre arbre de travail sur {{base}} contient des changements non commités. Commitez ou stashez-les, puis réessayez.`,mergeLocalBlockedBranch:`Impossible d'intégrer : votre checkout est sur {{current}}, pas sur {{base}}. Passez sur {{base}}, puis réessayez.`,mergeLocalFailed:`La fusion locale a échoué : {{detail}}`,mergedLocally:`Intégré dans {{base}} en local`},n={title:`Rails`,runningCount_one:`{{count}} en cours`,runningCount_other:`{{count}} en cours`,launchAll:`Tout lancer`,launchAllTitle:`Lance en parallèle tous les rails prêts — chaque exécution est isolée dans son propre worktree git`},r={skipRunning_one:`{{count}} déjà en cours`,skipRunning_other:`{{count}} déjà en cours`,skipEmpty_one:`{{count}} sans specs`,skipEmpty_other:`{{count}} sans specs`,skipPendingDecision_one:`{{count}} en attente d'une décision de PR`,skipPendingDecision_other:`{{count}} en attente d'une décision de PR`,skipOnReview_one:`{{count}} avec des specs en revue`,skipOnReview_other:`{{count}} avec des specs en revue`,skipInFlight_one:`{{count}} ignoré (spec déjà en cours)`,skipInFlight_other:`{{count}} ignorés (specs déjà en cours)`,failedCount_one:`{{count}} en échec`,failedCount_other:`{{count}} en échec`},i={title:`Lancer tous les rails`,railsCount_one:`{{count}} rail`,railsCount_other:`{{count}} rails`,specsCount_one:`{{count}} spec`,specsCount_other:`{{count}} specs`,isolationTitle:`Parallèle et isolé.`,isolationBody:`Chaque rail s'exécute dans son propre worktree git — les lancements simultanés n'entrent jamais en collision.`,pipelinesTitle_one:`{{count}} pipeline IA.`,pipelinesTitle_other:`{{count}} pipelines IA.`,pipelinesBody:`Un lancement par rail, chacun avec son mode, son moteur et son profil configurés.`,costTitle:`Coût multiplié.`,costBody:`Chaque rail génère sa propre exécution IA — la dépense augmente avec le nombre de rails.`,launch_one:`Lancer {{count}} rail`,launch_other:`Lancer {{count}} rails`},a={viewJobLog:`Voir le log du job`,log:`Log`,implement:`Implémenter`,batch:`Batch`,freestyle:`Freestyle`,freestyleTitle:`Freestyle — Claude implémente la spec en autonomie, sans pipeline`,loop:`Loop`,loopTitle:`Loop — exécute une boucle d'automatisation publiée sur les specs du rail`,pickLoop:`Choisir une boucle…`,effortTitle:`Effort de raisonnement`,stop:`Arrêter`,play:`Lancer`,failedRetry:`Job en échec — cliquez pour réessayer`,addSpecsFirst:`Ajoutez d'abord des specs à ce rail`,builtInLoops:`Intégrés`,customLoops:`Loops personnalisés`,worktreesMerged:`{{count}} fusionnés`,worktreesNeedsReview:`{{count}} à vérifier`,execSteps:`{{count}} étapes`,execLines:`{{count}} lignes`,openspec:`OpenSpec`},o={moveToSpecs:`Déplacer vers Specs`,deleteRail:`Supprimer {{label}}`,dropHere:`Déposer ici`,dropOnThisRail:`Déposer sur ce rail`,dragSpecsHere:`Glissez des specs ici`},s={title:`Lancer en mode Freestyle`,context_one:`{{rail}} · {{count}} spec`,context_other:`{{rail}} · {{count}} specs`,noPipelineTitle:`Pas de pipeline OpenSpec.`,noPipelineBody:`Le flux structuré architecte → développeur → reviewer est entièrement ignoré.`,autonomyTitle:`Autonomie native de Claude.`,autonomyBody:`Claude travaille seul avec ses agents natifs et des workflows dynamiques.`,costTitle:`Coût variable.`,costBody:`La dépense dépend de ce que Claude décide de faire — elle peut être plus élevée que prévu.`,continue:`Continuer`},c={fetchFailed:`Échec de la récupération des rails : {{status}}`},l={toasts:e,railPr:t,railsBoard:n,launchAll:r,launchAllDialog:i,railControls:a,railRow:o,freestyleDialog:s,useRails:c};export{l as default,s as freestyleDialog,r as launchAll,i as launchAllDialog,a as railControls,t as railPr,o as railRow,n as railsBoard,e as toasts,c as useRails};
@@ -0,0 +1 @@
1
+ var e={railAdded:`Rail {{n}} añadido`,railRemoved:`{{rail}} eliminado`,railLimitReached:`Límite de rails alcanzado ({{max}} máx.)`,railDeleteFailed:`No se pudo eliminar el rail — tiene specs, está en ejecución o tiene una decisión de PR pendiente`,launchTicketsInFlight:`Una spec de este rail ya está siendo trabajada por una ejecución activa`,launchAllSummary_one:`{{count}} rail lanzado en paralelo`,launchAllSummary_other:`{{count}} rails lanzados en paralelo`,launchAllNoneEligible:`No hay rails listos para lanzar — asigna specs a un rail libre primero`,launchAllFailed:`No se pudo lanzar ningún rail`,railCompleted:`Rail {{n}} completado`,railFailed:`Rail {{n}} fallido — las specs han vuelto a Specs`,railEnded:`Rail {{n}} {{status}} — las specs han vuelto a Specs`,alreadyOnRail:`Ya está en {{rail}}`,movedToRail:`Movida a {{rail}}`,railRunningStopFirst:`{{rail}} está en ejecución — detenlo antes de eliminarlo`,removedFromRail:`Quitada de {{rail}}`,queuedOnRail:`En cola en {{rail}}`,queuedOnRailDescription:`El rail está en ejecución`,railStopped:`{{rail}} detenido`,stopFailed:`No se pudo detener el rail`,syncTicketsFailed:`No se pudieron sincronizar los tickets del rail`,launchFailed:`No se pudo lanzar el rail`,launchNetworkError:`Error de red al lanzar el rail`,railLaunched:`{{rail}} lanzado`,launchDescription_one:`{{mode}} con {{count}} spec`,launchDescription_other:`{{mode}} con {{count}} specs`,railWorktreeNeedsReview:`Rail {{n}}: la spec #{{ticket}} necesita revisión tras el merge`,railWorktreesNoGit:`Aislamiento por worktrees no disponible: el proyecto no es un repositorio git — ejecutando en modo compartido.`,railWorktreesNoCommits:`Aislamiento por worktrees no disponible: el repositorio aún no tiene commits — haz un commit inicial y relanza.`,railWorktreesError:`La aislación por worktrees falló — este run continúa SIN el flujo de revisión por PR (sin tarjeta de implementación). Mira el detalle del error abajo.`,onReviewCannotMoveToRail:`Esta spec está pendiente de revisión de PR — resuelve primero la decisión de la PR`,onReviewNotLaunchable:`Una spec de este rail está pendiente de revisión de PR — resuelve la decisión de la PR antes de lanzar`},t={readyForReview:`Listo para revisión`,draftPr:`PR en borrador`,branchPushed:`Rama subida — PR pendiente`,branchPushedHint:`La rama se subió pero no se pudo crear la PR (GitHub CLI no disponible). Reintenta para crearla.`,iteratingPr:`Actualizando PR`,prReady:`PR lista`,implementationFailed:`Implementación fallida`,implementationFailedHint:`El run de implementación ha fallado. Abre el log del run y descarta esta card antes de relanzar.`,prFailed:`PR fallida`,prFailedDetail:`PR fallida: {{detail}}`,createDegraded:`No se pudo publicar la PR — {{detail}}. Reintenta cuando esté resuelto.`,createPr:`Crear PR`,createPrTooltip:`→ {{base}}`,publish:`Publicar`,publishTooltip:`Abre la PR en borrador para la revisión del equipo`,checkout:`Checkout`,checkoutTooltip:`Cambia la carpeta principal del proyecto a {{branch}}`,checkoutSuccess:`Checkout en {{branch}}`,checkoutFailed:`No se pudo hacer checkout de la rama de la PR`,discard:`Descartar`,discardTooltip:`Elimina las ramas y devuelve los tickets a Specs`,retryPr:`Reintentar PR`,retry:`Reintentar`,checkMerge:`Comprobar merge`,checkMergeTooltip:`Consulta a GitHub si ya se ha hecho merge de la PR`,prLinkFallback:`PR`,openPrTitle:`Abrir la PR en GitHub`,notMergedYet:`Aún sin merge`,alreadyResolved:`Ya resuelta en otro sitio`,ghFailed:`GitHub CLI falló: {{detail}}`,actionFailed:`No se pudo aplicar la decisión de la PR`,mergedToast:`Merge de la PR completado — los tickets han pasado a Hecho`,discardedToast:`PR descartada — los tickets han vuelto a Specs`,decisionPending:`Este rail tiene una decisión de PR pendiente — créala, publícala o descártala antes de relanzar`,discardConfirmTitle:`¿Descartar esta entrega?`,discardConfirmBody:`Se eliminarán las ramas y worktrees del lanzamiento y sus tickets volverán a Specs. Esta acción no se puede deshacer.`,mergeLocal:`Integrar en local`,mergeLocalTooltip:`Fusiona las ramas entregadas en {{base}} en tu checkout local (sin necesidad de GitHub)`,mergeLocalConfirmTitle:`¿Integrar en local?`,mergeLocalConfirmBody:`Las ramas entregadas se fusionarán en {{base}} en tu checkout local. Tu checkout debe estar en {{base}} con el árbol de trabajo limpio.`,mergeLocalBlockedDirty:`No se puede integrar: tu árbol de trabajo en {{base}} tiene cambios sin commitear. Haz commit o stash y reintenta.`,mergeLocalBlockedBranch:`No se puede integrar: tu checkout está en {{current}}, no en {{base}}. Cambia a {{base}} y reintenta.`,mergeLocalFailed:`La fusión local falló: {{detail}}`,mergedLocally:`Integrado en {{base}} en local`},n={title:`Rails`,runningCount_one:`{{count}} en ejecución`,runningCount_other:`{{count}} en ejecución`,launchAll:`Lanzar todos`,launchAllTitle:`Lanza en paralelo todos los rails listos — cada ejecución se aísla en su propio worktree de git`},r={skipRunning_one:`{{count}} ya en ejecución`,skipRunning_other:`{{count}} ya en ejecución`,skipEmpty_one:`{{count}} sin specs`,skipEmpty_other:`{{count}} sin specs`,skipPendingDecision_one:`{{count}} con decisión de PR pendiente`,skipPendingDecision_other:`{{count}} con decisión de PR pendiente`,skipOnReview_one:`{{count}} con specs en revisión`,skipOnReview_other:`{{count}} con specs en revisión`,skipInFlight_one:`{{count}} omitido (spec ya en curso)`,skipInFlight_other:`{{count}} omitidos (specs ya en curso)`,failedCount_one:`{{count}} fallido`,failedCount_other:`{{count}} fallidos`},i={title:`Lanzar todos los rails`,railsCount_one:`{{count}} rail`,railsCount_other:`{{count}} rails`,specsCount_one:`{{count}} spec`,specsCount_other:`{{count}} specs`,isolationTitle:`Paralelo y aislado.`,isolationBody:`Cada rail se ejecuta en su propio worktree de git — los lanzamientos simultáneos nunca colisionan.`,pipelinesTitle_one:`{{count}} pipeline de IA.`,pipelinesTitle_other:`{{count}} pipelines de IA.`,pipelinesBody:`Un lanzamiento por rail, cada uno con su modo, motor y perfil configurados.`,costTitle:`Coste multiplicado.`,costBody:`Cada rail genera su propia ejecución de IA — el gasto escala con el número de rails.`,launch_one:`Lanzar {{count}} rail`,launch_other:`Lanzar {{count}} rails`},a={viewJobLog:`Ver log del job`,log:`Log`,implement:`Implement`,batch:`Batch`,freestyle:`Freestyle`,freestyleTitle:`Freestyle — Claude implementa la spec de forma autónoma, sin pipeline`,loop:`Loop`,loopTitle:`Loop — ejecuta un bucle de automatización publicado sobre las specs del rail`,pickLoop:`Elige un bucle…`,effortTitle:`Esfuerzo de razonamiento`,stop:`Detener`,play:`Iniciar`,failedRetry:`El job ha fallado — haz clic para reintentar`,addSpecsFirst:`Añade primero specs a este rail`,builtInLoops:`Integrados`,customLoops:`Loops personalizados`,worktreesMerged:`{{count}} fusionados`,worktreesNeedsReview:`{{count}} a revisar`,execSteps:`{{count}} pasos`,execLines:`{{count}} líneas`,openspec:`OpenSpec`},o={moveToSpecs:`Mover a Specs`,deleteRail:`Eliminar {{label}}`,dropHere:`Suelta aquí`,dropOnThisRail:`Suelta en este rail`,dragSpecsHere:`Arrastra specs aquí`},s={title:`Lanzar en modo Freestyle`,context_one:`{{rail}} · {{count}} spec`,context_other:`{{rail}} · {{count}} specs`,noPipelineTitle:`Sin pipeline de OpenSpec.`,noPipelineBody:`El flujo estructurado architect → developer → reviewer se omite por completo.`,autonomyTitle:`Autonomía nativa de Claude.`,autonomyBody:`Claude trabaja por su cuenta con agentes nativos y flujos dinámicos.`,costTitle:`Coste variable.`,costBody:`El gasto depende de lo que Claude decida hacer — puede ser mayor de lo esperado.`,continue:`Continuar`},c={fetchFailed:`No se pudieron obtener los rails: {{status}}`},l={toasts:e,railPr:t,railsBoard:n,launchAll:r,launchAllDialog:i,railControls:a,railRow:o,freestyleDialog:s,useRails:c};export{l as default,s as freestyleDialog,r as launchAll,i as launchAllDialog,a as railControls,t as railPr,o as railRow,n as railsBoard,e as toasts,c as useRails};
@@ -0,0 +1 @@
1
+ var e={railAdded:`Rail {{n}} aggiunto`,railRemoved:`{{rail}} rimosso`,railLimitReached:`Limite di rail raggiunto ({{max}} max)`,railDeleteFailed:`Impossibile rimuovere il rail — contiene spec, è in esecuzione o ha una decisione PR in sospeso`,launchTicketsInFlight:`Una spec di questo rail è già in lavorazione da un'esecuzione attiva`,launchAllSummary_one:`{{count}} rail lanciato in parallelo`,launchAllSummary_other:`{{count}} rail lanciati in parallelo`,launchAllNoneEligible:`Nessun rail pronto al lancio — assegna prima le spec a un rail libero`,launchAllFailed:`Nessun rail è stato lanciato`,railCompleted:`Rail {{n}} completato`,railFailed:`Rail {{n}} non riuscito — le spec sono tornate in Specs`,railEnded:`Rail {{n}} {{status}} — le spec sono tornate in Specs`,alreadyOnRail:`Già su {{rail}}`,movedToRail:`Spostata su {{rail}}`,railRunningStopFirst:`{{rail}} è in esecuzione — fermalo prima di rimuoverlo`,removedFromRail:`Rimossa da {{rail}}`,queuedOnRail:`In coda su {{rail}}`,queuedOnRailDescription:`Il rail è attualmente in esecuzione`,railStopped:`{{rail}} fermato`,stopFailed:`Impossibile fermare il rail`,syncTicketsFailed:`Impossibile sincronizzare i ticket del rail`,launchFailed:`Impossibile avviare il rail`,launchNetworkError:`Errore di rete durante l'avvio del rail`,railLaunched:`{{rail}} avviato`,launchDescription_one:`{{mode}} con {{count}} spec`,launchDescription_other:`{{mode}} con {{count}} spec`,railWorktreeNeedsReview:`Rail {{n}}: la spec #{{ticket}} richiede revisione dopo il merge`,railWorktreesNoGit:`Isolamento con worktree non disponibile: il progetto non è un repository git — esecuzione in modalità condivisa.`,railWorktreesNoCommits:`Isolamento con worktree non disponibile: il repository non ha ancora commit — crea un commit iniziale e rilancia.`,railWorktreesError:`L'isolamento tramite worktree è fallito — questa esecuzione continua SENZA il flusso di revisione PR (nessuna scheda di implementazione). Vedi il dettaglio dell'errore sotto.`,onReviewCannotMoveToRail:`Questa spec è in attesa della revisione della PR — risolvi prima la decisione sulla PR`,onReviewNotLaunchable:`Una spec di questo rail è in attesa della revisione della PR — risolvi la decisione sulla PR prima di lanciare`},t={readyForReview:`Pronto per la revisione`,draftPr:`PR in bozza`,branchPushed:`Ramo inviato — PR in sospeso`,branchPushedHint:`Il ramo è stato inviato ma non è stato possibile creare la PR (GitHub CLI non disponibile). Riprova per crearla.`,iteratingPr:`Aggiornamento PR`,prReady:`PR pronta`,implementationFailed:`Implementazione non riuscita`,implementationFailedHint:`Il run di implementazione non è riuscito. Apri il log del run, poi scarta questa scheda prima di rilanciare.`,prFailed:`PR non riuscita`,prFailedDetail:`PR non riuscita: {{detail}}`,createDegraded:`Impossibile pubblicare la PR — {{detail}}. Riprova una volta risolto.`,createPr:`Crea PR`,createPrTooltip:`→ {{base}}`,publish:`Pubblica`,publishTooltip:`Apre la PR in bozza per la revisione del team`,checkout:`Checkout`,checkoutTooltip:`Esegui il checkout di {{branch}} nella cartella principale del progetto`,checkoutSuccess:`Checkout eseguito su {{branch}}`,checkoutFailed:`Impossibile eseguire il checkout del branch della PR`,discard:`Scarta`,discardTooltip:`Elimina i rami e riporta i ticket in Specs`,retryPr:`Riprova PR`,retry:`Riprova`,checkMerge:`Verifica merge`,checkMergeTooltip:`Chiede a GitHub se è stato fatto il merge della PR`,prLinkFallback:`PR`,openPrTitle:`Apri la PR su GitHub`,notMergedYet:`Ancora nessun merge`,alreadyResolved:`Già risolta altrove`,ghFailed:`GitHub CLI non riuscita: {{detail}}`,actionFailed:`Impossibile applicare la decisione sulla PR`,mergedToast:`Merge della PR effettuato — i ticket sono passati a Completato`,discardedToast:`PR scartata — i ticket sono tornati in Specs`,decisionPending:`Questo rail ha una decisione sulla PR in sospeso — creala, pubblicala o scartala prima di rilanciare`,discardConfirmTitle:`Scartare questa consegna?`,discardConfirmBody:`I rami e i worktree del lancio verranno eliminati e i loro ticket torneranno in Specs. L'operazione non può essere annullata.`,mergeLocal:`Integra in locale`,mergeLocalTooltip:`Unisce i branch consegnati in {{base}} nel tuo checkout locale (senza GitHub)`,mergeLocalConfirmTitle:`Integrare in locale?`,mergeLocalConfirmBody:`I branch consegnati verranno uniti in {{base}} nel tuo checkout locale. Il checkout deve essere su {{base}} con albero di lavoro pulito.`,mergeLocalBlockedDirty:`Impossibile integrare: il tuo albero di lavoro su {{base}} ha modifiche non committate. Fai commit o stash e riprova.`,mergeLocalBlockedBranch:`Impossibile integrare: il tuo checkout è su {{current}}, non su {{base}}. Passa a {{base}} e riprova.`,mergeLocalFailed:`Merge locale fallito: {{detail}}`,mergedLocally:`Integrato in {{base}} in locale`},n={title:`Rails`,runningCount_one:`{{count}} in esecuzione`,runningCount_other:`{{count}} in esecuzione`,launchAll:`Lancia tutti`,launchAllTitle:`Lancia in parallelo tutti i rail pronti — ogni esecuzione è isolata nel proprio worktree git`},r={skipRunning_one:`{{count}} già in esecuzione`,skipRunning_other:`{{count}} già in esecuzione`,skipEmpty_one:`{{count}} senza spec`,skipEmpty_other:`{{count}} senza spec`,skipPendingDecision_one:`{{count}} in attesa di una decisione PR`,skipPendingDecision_other:`{{count}} in attesa di una decisione PR`,skipOnReview_one:`{{count}} con spec in revisione`,skipOnReview_other:`{{count}} con spec in revisione`,skipInFlight_one:`{{count}} saltato (spec già in corso)`,skipInFlight_other:`{{count}} saltati (spec già in corso)`,failedCount_one:`{{count}} non riuscito`,failedCount_other:`{{count}} non riusciti`},i={title:`Lancia tutti i rail`,railsCount_one:`{{count}} rail`,railsCount_other:`{{count}} rail`,specsCount_one:`{{count}} spec`,specsCount_other:`{{count}} spec`,isolationTitle:`Parallelo e isolato.`,isolationBody:`Ogni rail gira nel proprio worktree git — i lanci simultanei non collidono mai.`,pipelinesTitle_one:`{{count}} pipeline IA.`,pipelinesTitle_other:`{{count}} pipeline IA.`,pipelinesBody:`Un lancio per rail, ciascuno con la propria modalità, engine e profilo configurati.`,costTitle:`Costo moltiplicato.`,costBody:`Ogni rail genera la propria esecuzione IA — la spesa cresce con il numero di rail.`,launch_one:`Lancia {{count}} rail`,launch_other:`Lancia {{count}} rail`},a={viewJobLog:`Visualizza log del job`,log:`Log`,implement:`Implementa`,batch:`Batch`,freestyle:`Freestyle`,freestyleTitle:`Freestyle — Claude implementa la spec in autonomia, senza pipeline`,loop:`Loop`,loopTitle:`Loop — esegui un loop di automazione pubblicato sulle spec del rail`,pickLoop:`Scegli un loop…`,effortTitle:`Sforzo di ragionamento`,stop:`Stop`,play:`Avvia`,failedRetry:`Job non riuscito — clicca per riprovare`,addSpecsFirst:`Aggiungi prima delle spec a questo rail`,builtInLoops:`Integrati`,customLoops:`Loop personalizzati`,worktreesMerged:`{{count}} uniti`,worktreesNeedsReview:`{{count}} da rivedere`,execSteps:`{{count}} passi`,execLines:`{{count}} righe`,openspec:`OpenSpec`},o={moveToSpecs:`Sposta in Specs`,deleteRail:`Elimina {{label}}`,dropHere:`Rilascia qui`,dropOnThisRail:`Rilascia su questo rail`,dragSpecsHere:`Trascina qui le spec`},s={title:`Avvia in modalità Freestyle`,context_one:`{{rail}} · {{count}} spec`,context_other:`{{rail}} · {{count}} spec`,noPipelineTitle:`Nessuna pipeline OpenSpec.`,noPipelineBody:`Il flusso strutturato architect → developer → reviewer viene saltato del tutto.`,autonomyTitle:`Autonomia nativa di Claude.`,autonomyBody:`Claude lavora in autonomia usando agenti nativi e workflow dinamici.`,costTitle:`Costo variabile.`,costBody:`La spesa dipende da cosa Claude decide di fare — può essere più alta del previsto.`,continue:`Continua`},c={fetchFailed:`Impossibile recuperare i rail: {{status}}`},l={toasts:e,railPr:t,railsBoard:n,launchAll:r,launchAllDialog:i,railControls:a,railRow:o,freestyleDialog:s,useRails:c};export{l as default,s as freestyleDialog,r as launchAll,i as launchAllDialog,a as railControls,t as railPr,o as railRow,n as railsBoard,e as toasts,c as useRails};
@@ -0,0 +1 @@
1
+ var e={railAdded:`Rail {{n}} hinzugefügt`,railRemoved:`{{rail}} entfernt`,railLimitReached:`Rail-Limit erreicht (max. {{max}})`,railDeleteFailed:`Rail konnte nicht entfernt werden – es enthält Specs, läuft gerade oder hat eine ausstehende PR-Entscheidung`,launchTicketsInFlight:`Eine Spec dieses Rails wird bereits von einem aktiven Lauf bearbeitet`,launchAllSummary_one:`{{count}} Rail parallel gestartet`,launchAllSummary_other:`{{count}} Rails parallel gestartet`,launchAllNoneEligible:`Keine Rails startbereit – weise zuerst Specs einem freien Rail zu`,launchAllFailed:`Es konnte kein Rail gestartet werden`,railCompleted:`Rail {{n}} abgeschlossen`,railFailed:`Rail {{n}} fehlgeschlagen – Specs zurück in Specs`,railEnded:`Rail {{n}} {{status}} – Specs zurück in Specs`,alreadyOnRail:`Bereits auf {{rail}}`,movedToRail:`Auf {{rail}} verschoben`,railRunningStopFirst:`{{rail}} läuft – vor dem Entfernen stoppen`,removedFromRail:`Von {{rail}} entfernt`,queuedOnRail:`Auf {{rail}} eingereiht`,queuedOnRailDescription:`Rail läuft gerade`,railStopped:`{{rail}} gestoppt`,stopFailed:`Rail konnte nicht gestoppt werden`,syncTicketsFailed:`Rail-Tickets konnten nicht synchronisiert werden`,launchFailed:`Rail konnte nicht gestartet werden`,launchNetworkError:`Netzwerkfehler beim Starten des Rails`,railLaunched:`{{rail}} gestartet`,launchDescription_one:`{{mode}} mit {{count}} Spec`,launchDescription_other:`{{mode}} mit {{count}} Specs`,railWorktreeNeedsReview:`Rail {{n}}: Spec #{{ticket}} muss nach dem Merge geprüft werden`,railWorktreesNoGit:`Worktree-Isolation nicht verfügbar: Dieses Projekt ist kein Git-Repository — Ausführung im gemeinsamen Modus.`,railWorktreesNoCommits:`Worktree-Isolation nicht verfügbar: Das Repository hat noch keine Commits — erstelle einen ersten Commit und starte neu.`,railWorktreesError:`Worktree-Isolation fehlgeschlagen — dieser Lauf läuft OHNE den PR-Review-Flow weiter (keine Implementierungskarte). Siehe Fehlerdetail unten.`,onReviewCannotMoveToRail:`Diese Spec wartet auf die PR-Prüfung — löse zuerst die PR-Entscheidung`,onReviewNotLaunchable:`Eine Spec auf diesem Rail wartet auf die PR-Prüfung — löse die PR-Entscheidung vor dem Start`},t={readyForReview:`Bereit zur Prüfung`,draftPr:`Entwurfs-PR`,branchPushed:`Branch gepusht — PR ausstehend`,branchPushedHint:`Der Branch wurde gepusht, aber die PR konnte nicht erstellt werden (GitHub CLI nicht verfügbar). Erneut versuchen, um sie zu erstellen.`,iteratingPr:`PR wird aktualisiert`,prReady:`PR bereit`,implementationFailed:`Implementierung fehlgeschlagen`,implementationFailedHint:`Der Implementierungslauf ist fehlgeschlagen. Öffne das Run-Protokoll und verwirf diese Karte vor einem erneuten Start.`,prFailed:`PR fehlgeschlagen`,prFailedDetail:`PR fehlgeschlagen: {{detail}}`,createDegraded:`PR konnte nicht veröffentlicht werden — {{detail}}. Nach Behebung erneut versuchen.`,createPr:`PR erstellen`,createPrTooltip:`→ {{base}}`,publish:`Veröffentlichen`,publishTooltip:`Öffnet den Entwurfs-PR für das Review des Teams`,checkout:`Checkout`,checkoutTooltip:`Den Hauptordner des Projekts auf {{branch}} auschecken`,checkoutSuccess:`{{branch}} ausgecheckt`,checkoutFailed:`PR-Branch konnte nicht ausgecheckt werden`,discard:`Verwerfen`,discardTooltip:`Verwirft die Branches und schickt die Tickets zurück zu Specs`,retryPr:`PR erneut versuchen`,retry:`Erneut versuchen`,checkMerge:`Merge prüfen`,checkMergeTooltip:`Bei GitHub nachfragen, ob die PR gemergt wurde`,prLinkFallback:`PR`,openPrTitle:`PR auf GitHub öffnen`,notMergedYet:`Noch nicht gemergt`,alreadyResolved:`Bereits anderweitig erledigt`,ghFailed:`GitHub CLI fehlgeschlagen: {{detail}}`,actionFailed:`PR-Entscheidung konnte nicht angewendet werden`,mergedToast:`PR gemergt — Tickets nach Fertig verschoben`,discardedToast:`PR verworfen — Tickets zurück in Specs`,decisionPending:`Dieser Rail hat eine ausstehende PR-Entscheidung — erstelle, veröffentliche oder verwirf sie, bevor du neu startest`,discardConfirmTitle:`Diese Lieferung verwerfen?`,discardConfirmBody:`Die Branches und Worktrees des Launches werden verworfen und die Tickets kehren zurück zu Specs. Das kann nicht rückgängig gemacht werden.`,mergeLocal:`Lokal integrieren`,mergeLocalTooltip:`Führt die gelieferten Branches lokal in {{base}} zusammen (ohne GitHub)`,mergeLocalConfirmTitle:`Lokal integrieren?`,mergeLocalConfirmBody:`Die gelieferten Branches werden lokal in {{base}} zusammengeführt. Dein Checkout muss auf {{base}} stehen und sauber sein.`,mergeLocalBlockedDirty:`Integration nicht möglich: dein Arbeitsverzeichnis auf {{base}} hat uncommittete Änderungen. Committe oder stashe sie und versuche es erneut.`,mergeLocalBlockedBranch:`Integration nicht möglich: dein Checkout steht auf {{current}}, nicht auf {{base}}. Wechsle zu {{base}} und versuche es erneut.`,mergeLocalFailed:`Lokaler Merge fehlgeschlagen: {{detail}}`,mergedLocally:`Lokal in {{base}} integriert`},n={title:`Rails`,runningCount_one:`{{count}} läuft`,runningCount_other:`{{count}} laufen`,launchAll:`Alle starten`,launchAllTitle:`Startet alle startbereiten Rails parallel – jeder Lauf ist in seinem eigenen Git-Worktree isoliert`},r={skipRunning_one:`{{count}} läuft bereits`,skipRunning_other:`{{count}} laufen bereits`,skipEmpty_one:`{{count}} ohne Specs`,skipEmpty_other:`{{count}} ohne Specs`,skipPendingDecision_one:`{{count}} wartet auf eine PR-Entscheidung`,skipPendingDecision_other:`{{count}} warten auf eine PR-Entscheidung`,skipOnReview_one:`{{count}} mit Specs im Review`,skipOnReview_other:`{{count}} mit Specs im Review`,skipInFlight_one:`{{count}} übersprungen (Spec bereits in Arbeit)`,skipInFlight_other:`{{count}} übersprungen (Specs bereits in Arbeit)`,failedCount_one:`{{count}} fehlgeschlagen`,failedCount_other:`{{count}} fehlgeschlagen`},i={title:`Alle Rails starten`,railsCount_one:`{{count}} Rail`,railsCount_other:`{{count}} Rails`,specsCount_one:`{{count}} Spec`,specsCount_other:`{{count}} Specs`,isolationTitle:`Parallel und isoliert.`,isolationBody:`Jedes Rail läuft in seinem eigenen Git-Worktree – gleichzeitige Starts kollidieren nie.`,pipelinesTitle_one:`{{count}} KI-Pipeline.`,pipelinesTitle_other:`{{count}} KI-Pipelines.`,pipelinesBody:`Ein Start pro Rail, jeweils mit dem konfigurierten Modus, Engine und Profil.`,costTitle:`Vervielfachte Kosten.`,costBody:`Jedes Rail erzeugt seinen eigenen KI-Lauf – die Ausgaben skalieren mit der Anzahl der Rails.`,launch_one:`{{count}} Rail starten`,launch_other:`{{count}} Rails starten`},a={viewJobLog:`Job-Log anzeigen`,log:`Log`,implement:`Implement`,batch:`Batch`,freestyle:`Freestyle`,freestyleTitle:`Freestyle – Claude implementiert die Spec autonom, ohne Pipeline`,loop:`Loop`,loopTitle:`Loop – eine veröffentlichte Automatisierungsschleife gegen die Specs des Rails ausführen`,pickLoop:`Schleife auswählen…`,effortTitle:`Denkaufwand`,stop:`Stopp`,play:`Start`,failedRetry:`Job fehlgeschlagen – zum Wiederholen klicken`,addSpecsFirst:`Füge zuerst Specs zu diesem Rail hinzu`,builtInLoops:`Integriert`,customLoops:`Eigene Loops`,worktreesMerged:`{{count}} zusammengeführt`,worktreesNeedsReview:`{{count}} zu prüfen`,execSteps:`{{count}} Schritte`,execLines:`{{count}} Zeilen`,openspec:`OpenSpec`},o={moveToSpecs:`Nach Specs verschieben`,deleteRail:`{{label}} löschen`,dropHere:`Hier ablegen`,dropOnThisRail:`Auf diesem Rail ablegen`,dragSpecsHere:`Specs hierher ziehen`},s={title:`Im Freestyle-Modus starten`,context_one:`{{rail}} · {{count}} Spec`,context_other:`{{rail}} · {{count}} Specs`,noPipelineTitle:`Keine OpenSpec-Pipeline.`,noPipelineBody:`Der strukturierte Flow Architect → Developer → Reviewer wird komplett übersprungen.`,autonomyTitle:`Native Claude-Autonomie.`,autonomyBody:`Claude arbeitet eigenständig mit nativen Agenten und dynamischen Workflows.`,costTitle:`Variable Kosten.`,costBody:`Die Ausgaben hängen davon ab, was Claude entscheidet – sie können höher ausfallen als erwartet.`,continue:`Weiter`},c={fetchFailed:`Rails konnten nicht geladen werden: {{status}}`},l={toasts:e,railPr:t,railsBoard:n,launchAll:r,launchAllDialog:i,railControls:a,railRow:o,freestyleDialog:s,useRails:c};export{l as default,s as freestyleDialog,r as launchAll,i as launchAllDialog,a as railControls,t as railPr,o as railRow,n as railsBoard,e as toasts,c as useRails};