specrails-desktop 2.46.0 → 2.48.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 (259) hide show
  1. package/README.md +2 -0
  2. package/client/dist/assets/{ActivityFeedPage-CsHQPpvl.js → ActivityFeedPage-CGq6QhP5.js} +1 -1
  3. package/client/dist/assets/AgentBrowserCapture-C4GZ-kdf.js +1 -0
  4. package/client/dist/assets/AgentModeAnalyticsPane-_IPmL0ZS.js +2 -0
  5. package/client/dist/assets/AgentModeCodePane-B5WG5DOP.js +2 -0
  6. package/client/dist/assets/{AgentModeJobsPane-rnD-EPMd.js → AgentModeJobsPane-w1N_HIXh.js} +1 -1
  7. package/client/dist/assets/AgentsPage-CmwnnT46.js +87 -0
  8. package/client/dist/assets/AnalyticsPage-BUMsKtsJ.js +1 -0
  9. package/client/dist/assets/CodePage-PjgywJPS.js +3 -0
  10. package/client/dist/assets/DesktopAnalyticsPage-BXY1pH4y.js +1 -0
  11. package/client/dist/assets/DocsDialog-ccQETHKB.js +11 -0
  12. package/client/dist/assets/DocsPage-DzEgplB3.js +11 -0
  13. package/client/dist/assets/{ExportDropdown-pWZGYCv3.js → ExportDropdown-B8bBGopr.js} +1 -1
  14. package/client/dist/assets/InteractiveJobComposer-CEwGkJ8F.js +19 -0
  15. package/client/dist/assets/JobDetailModal-BYXmuTDe.js +1 -0
  16. package/client/dist/assets/JobDetailPage-CWp6MwJj.js +1 -0
  17. package/client/dist/assets/JobsPage-D1O1uyG8.js +1 -0
  18. package/client/dist/assets/{LoopBuilderPage-CtmOE4-b.js → LoopBuilderPage-DQE-7Vby.js} +2 -2
  19. package/client/dist/assets/{LoopPreviewModal-BYeLjQbr.js → LoopPreviewModal-Bk7zIXD5.js} +1 -1
  20. package/client/dist/assets/LoopsPage-CqG7mx56.js +1 -0
  21. package/client/dist/assets/MinimizedChatsContext-UpnqccPx.js +1 -0
  22. package/client/dist/assets/PluginsPage-CjgVvmpW.js +2 -0
  23. package/client/dist/assets/{ProjectSettingsDialog-DsCRIc4v.js → ProjectSettingsDialog-D6vBCoay.js} +1 -1
  24. package/client/dist/assets/{RepositoryDeliveries-BQm_3TO8.js → RepositoryDeliveries-C36ipKp_.js} +1 -1
  25. package/client/dist/assets/{RepositoryScopeSelector-DnAFtjTz.js → RepositoryScopeSelector-0Gz_fR1E.js} +1 -1
  26. package/client/dist/assets/ReviewPacketPage-Dr9RYs7q.js +1 -0
  27. package/client/dist/assets/TemplatePreviewModal-sCMHYFJo.js +1 -0
  28. package/client/dist/assets/TicketDetailModalContext-C5GgJlEt.js +14 -0
  29. package/client/dist/assets/{Trans-BwLgX6n7.js → Trans-9pHTy2fH.js} +1 -1
  30. package/client/dist/assets/{addspec-D2YIQ0GU.js → addspec-BOvgmcgk.js} +1 -1
  31. package/client/dist/assets/{addspec-B_TPJt-R.js → addspec-Clmyfn_R.js} +1 -1
  32. package/client/dist/assets/{addspec-A1lDQa4M.js → addspec-CsNaBpHp.js} +1 -1
  33. package/client/dist/assets/{addspec-CQBjzt24.js → addspec-D2tvWmmV.js} +1 -1
  34. package/client/dist/assets/{addspec-CLYLvaVP.js → addspec-D3nFwvD0.js} +1 -1
  35. package/client/dist/assets/{addspec-BPpZ_olp.js → addspec-DVLEhK3w.js} +1 -1
  36. package/client/dist/assets/{addspec-iFdQ6D99.js → addspec-DXbK-tb0.js} +1 -1
  37. package/client/dist/assets/{addspec-BHZd0N5F.js → addspec-OHG8DFEn.js} +1 -1
  38. package/client/dist/assets/agentRuntime-BUimiX__.js +1 -0
  39. package/client/dist/assets/agentRuntime-BcN97sAB.js +1 -0
  40. package/client/dist/assets/agentRuntime-Ckyg-ahT.js +1 -0
  41. package/client/dist/assets/agentRuntime-DJCwyX4t.js +1 -0
  42. package/client/dist/assets/agentRuntime-DVzPJOl0.js +1 -0
  43. package/client/dist/assets/agentRuntime-V9AZTG3c.js +1 -0
  44. package/client/dist/assets/agentRuntime-bAAjw1vw.js +1 -0
  45. package/client/dist/assets/agentRuntime-v4qKAYH-.js +1 -0
  46. package/client/dist/assets/{agents-45GbINfh.js → agents-CA5eT1d0.js} +1 -1
  47. package/client/dist/assets/{agents-DMKFStHL.js → agents-CAgy-5uS.js} +1 -1
  48. package/client/dist/assets/{agents-IUOgqT5t.js → agents-CNm6Qzlv.js} +1 -1
  49. package/client/dist/assets/{agents-ms7TwG16.js → agents-CTwbx-fb.js} +1 -1
  50. package/client/dist/assets/{agents-DaYcxAr1.js → agents-DEGV1Vao.js} +1 -1
  51. package/client/dist/assets/{agents-BHp0_FQt.js → agents-HsDF1aQU.js} +1 -1
  52. package/client/dist/assets/{agents-Bvyi3y6R.js → agents-IQjdA-z9.js} +1 -1
  53. package/client/dist/assets/{agents-rzPnqoBR.js → agents-RkGoteXh.js} +1 -1
  54. package/client/dist/assets/analytics-BNgZ1Nj7.js +1 -0
  55. package/client/dist/assets/analytics-BlypLLR6.js +1 -0
  56. package/client/dist/assets/analytics-CoEzWPx4.js +1 -0
  57. package/client/dist/assets/analytics-DFh5lSOl.js +1 -0
  58. package/client/dist/assets/analytics-DZp-DS2U.js +1 -0
  59. package/client/dist/assets/analytics-DjLlE7jS.js +1 -0
  60. package/client/dist/assets/analytics-jzCkOec3.js +1 -0
  61. package/client/dist/assets/analytics-nZIjjtCc.js +1 -0
  62. package/client/dist/assets/{dashboard-BK_mez-z.js → dashboard-C29Qwa-L.js} +1 -1
  63. package/client/dist/assets/{dashboard-BwkjxI6H.js → dashboard-CSJzf5OT.js} +1 -1
  64. package/client/dist/assets/{dashboard-C3bDKf7s.js → dashboard-CTfEtkqX.js} +1 -1
  65. package/client/dist/assets/{dashboard-Bt0cCzeG.js → dashboard-Cr4D8oMn.js} +1 -1
  66. package/client/dist/assets/{dashboard-fRrP0Kv0.js → dashboard-Csf1yGSN.js} +1 -1
  67. package/client/dist/assets/{dashboard-CdvjGfog.js → dashboard-D40HP2ks.js} +1 -1
  68. package/client/dist/assets/dashboard-DBAP2_SQ.js +1 -0
  69. package/client/dist/assets/{dashboard-B14uYXkG.js → dashboard-DMklepmz.js} +1 -1
  70. package/client/dist/assets/file-text-CFT-xXKN.js +1 -0
  71. package/client/dist/assets/{formatDistanceToNow-CeZv93iR.js → formatDistanceToNow-w_2U5pm0.js} +1 -1
  72. package/client/dist/assets/{getTimezoneOffsetInMilliseconds-DxAkjvJb.js → getTimezoneOffsetInMilliseconds-BRymg1Kk.js} +1 -1
  73. package/client/dist/assets/index-D0ScFZvR.css +2 -0
  74. package/client/dist/assets/index-DORCrgbI.js +77 -0
  75. package/client/dist/assets/jira-api-BqHbSdxK.js +1 -0
  76. package/client/dist/assets/jobs-C6qmvUAi.js +1 -0
  77. package/client/dist/assets/jobs-C9j2PuwW.js +1 -0
  78. package/client/dist/assets/jobs-DLHdDkHc.js +1 -0
  79. package/client/dist/assets/jobs-DSp9DoD_.js +1 -0
  80. package/client/dist/assets/jobs-DTQO08nJ.js +1 -0
  81. package/client/dist/assets/jobs-DoFaEl9g.js +1 -0
  82. package/client/dist/assets/jobs-Dpw6AEOP.js +1 -0
  83. package/client/dist/assets/jobs-DrF8Do8s.js +1 -0
  84. package/client/dist/assets/{narration-BSldQfjd.js → narration--hUhjM5v.js} +1 -1
  85. package/client/dist/assets/{narration-DKLjXIFI.js → narration-CHI06czm.js} +1 -1
  86. package/client/dist/assets/{narration-4OSg0b5-.js → narration-DjKB3pQZ.js} +1 -1
  87. package/client/dist/assets/{narration-BPMOQPFe.js → narration-DtCYvRLM.js} +1 -1
  88. package/client/dist/assets/{narration-D-e9ssxA.js → narration-DvLQBW9U.js} +1 -1
  89. package/client/dist/assets/{narration-DnrKC3mF.js → narration-eSx3gR0W.js} +1 -1
  90. package/client/dist/assets/{narration-Dypjxeel.js → narration-n3hOA7LY.js} +1 -1
  91. package/client/dist/assets/{narration-CvQdWdR5.js → narration-thJOeT2-.js} +1 -1
  92. package/client/dist/assets/packet-BNW8ODQw.js +1 -0
  93. package/client/dist/assets/packet-CXYvfdjy.js +1 -0
  94. package/client/dist/assets/packet-CtIlB8YE.js +1 -0
  95. package/client/dist/assets/packet-DA1SJkMH.js +1 -0
  96. package/client/dist/assets/packet-DYcWfBip.js +1 -0
  97. package/client/dist/assets/packet-DseX9yKC.js +1 -0
  98. package/client/dist/assets/packet-_m5aOy_d.js +1 -0
  99. package/client/dist/assets/packet-qOemUAm3.js +1 -0
  100. package/client/dist/assets/{project-repositories-BvBj9XH9.js → project-repositories-BsCs1PPA.js} +1 -1
  101. package/client/dist/assets/provider-capabilities-Vi1ZGvAK.js +1 -0
  102. package/client/dist/assets/settings-BsehKpty.js +1 -0
  103. package/client/dist/assets/settings-CQWob3SB.js +1 -0
  104. package/client/dist/assets/settings-CgCl0hzy.js +1 -0
  105. package/client/dist/assets/settings-DLRLd22L.js +1 -0
  106. package/client/dist/assets/settings-Dn5prAFl.js +1 -0
  107. package/client/dist/assets/settings-HZSu-K4l.js +1 -0
  108. package/client/dist/assets/{settings-DEgcA0jd.js → settings-p4OVIyRh.js} +1 -1
  109. package/client/dist/assets/settings-rddaldUp.js +1 -0
  110. package/client/dist/assets/setup-B5FHuxvB.js +1 -0
  111. package/client/dist/assets/setup-BihzXadx.js +1 -0
  112. package/client/dist/assets/setup-BtC6Hg4K.js +1 -0
  113. package/client/dist/assets/setup-C9Fy9PKQ.js +1 -0
  114. package/client/dist/assets/setup-CROyqD5N.js +1 -0
  115. package/client/dist/assets/setup-DpqzaEEA.js +1 -0
  116. package/client/dist/assets/setup-Dwzt5nO1.js +1 -0
  117. package/client/dist/assets/setup-zLEDnG7N.js +1 -0
  118. package/client/dist/assets/{spending-DNM6NAoA.js → spending-hcgxHP4O.js} +1 -1
  119. package/client/dist/assets/{useDesktop-mxHVQOdx.js → useDesktop-CAisjKWC.js} +1 -1
  120. package/client/dist/assets/{useSharedWebSocket-DnxHj8jP.js → useSharedWebSocket-BHIfW4QT.js} +2 -2
  121. package/client/dist/assets/wrench-BfmNO9Vw.js +1 -0
  122. package/client/dist/index.html +27 -26
  123. package/docs/guide/de/integrations/7-local-engines.md +37 -0
  124. package/docs/guide/en/integrations/7-local-engines.md +37 -0
  125. package/docs/guide/es/integrations/7-local-engines.md +37 -0
  126. package/docs/guide/fr/integrations/7-local-engines.md +37 -0
  127. package/docs/guide/it/integrations/7-local-engines.md +37 -0
  128. package/docs/guide/ja/integrations/7-local-engines.md +37 -0
  129. package/docs/guide/pt/integrations/7-local-engines.md +37 -0
  130. package/docs/guide/zh/integrations/7-local-engines.md +37 -0
  131. package/docs/internals/adding-a-provider.md +12 -0
  132. package/docs/internals/local-agent-runner.md +153 -0
  133. package/docs/internals/review-packet.md +8 -0
  134. package/docs/local-providers.md +215 -0
  135. package/docs/plans/implementation-efficiency-artifact.json +18 -0
  136. package/docs/plans/implementation-efficiency-evaluation.json +1817 -0
  137. package/docs/plans/implementation-efficiency-evaluation.md +41 -0
  138. package/docs/plans/implementation-efficiency-progress.md +48 -0
  139. package/docs/plans/implementation-efficiency-release.md +41 -0
  140. package/docs/plans/implementation-efficiency.md +124 -0
  141. package/local-runner/dist/specrails-local-runner.js +15815 -0
  142. package/package.json +7 -5
  143. package/server/dist/agent-chat-manager.js +8 -1
  144. package/server/dist/agent-chat-router.js +5 -2
  145. package/server/dist/agent-fence-promotion.js +53 -0
  146. package/server/dist/agent-mcp-config.js +4 -1
  147. package/server/dist/agent-runtime-bridge.js +35 -26
  148. package/server/dist/agent-runtime-controls-router.js +20 -1
  149. package/server/dist/agent-runtime-controls.js +94 -12
  150. package/server/dist/agent-runtime-effective-config.js +53 -0
  151. package/server/dist/agent-runtime-events.js +46 -0
  152. package/server/dist/agent-runtime-history.js +47 -0
  153. package/server/dist/agent-runtime-loader.js +84 -5
  154. package/server/dist/agent-runtime-metrics.js +77 -1
  155. package/server/dist/agent-runtime-package.js +205 -0
  156. package/server/dist/agent-runtime-settings-router.js +96 -5
  157. package/server/dist/agent-runtime-settings.js +163 -7
  158. package/server/dist/agent-spec-framing.js +10 -4
  159. package/server/dist/binary-probe.js +12 -0
  160. package/server/dist/blueprint-router.js +3 -2
  161. package/server/dist/chat-manager.js +5 -1
  162. package/server/dist/desktop-router.js +87 -4
  163. package/server/dist/index.js +13 -0
  164. package/server/dist/interactive-job-session.js +3 -1
  165. package/server/dist/local-engine-detection.js +118 -0
  166. package/server/dist/loop-executors.js +4 -3
  167. package/server/dist/loop-role-engines.js +129 -0
  168. package/server/dist/loop-run-manager.js +14 -6
  169. package/server/dist/mcp/tools/app-settings.js +30 -4
  170. package/server/dist/mcp/tools/rails.js +2 -1
  171. package/server/dist/pr-body.js +11 -2
  172. package/server/dist/pricing.js +15 -0
  173. package/server/dist/provider-detection.js +63 -1
  174. package/server/dist/provider-selection.js +26 -1
  175. package/server/dist/providers/index.js +4 -1
  176. package/server/dist/providers/local-adapter-registry.js +56 -0
  177. package/server/dist/providers/local-adapter.js +426 -0
  178. package/server/dist/providers/registry.js +39 -4
  179. package/server/dist/rail-isolated-launch.js +4 -3
  180. package/server/dist/rails-router.js +90 -8
  181. package/server/dist/result-event.js +17 -0
  182. package/server/dist/review-packet.js +1 -0
  183. package/server/dist/schemas/agent-runtime.schema.json +28 -3
  184. package/server/dist/schemas/fixtures/runtime-efficiency-summary.v1.json +790 -0
  185. package/server/dist/setup-manager.js +5 -1
  186. package/server/dist/spec-models.js +14 -2
  187. package/server/dist/worktree-node-modules.js +97 -65
  188. package/client/dist/assets/AgentBrowserCapture-BVcCK7x0.js +0 -1
  189. package/client/dist/assets/AgentModeAnalyticsPane-C5F3m29G.js +0 -2
  190. package/client/dist/assets/AgentModeCodePane-C5QuKsu0.js +0 -2
  191. package/client/dist/assets/AgentsPage-DiyJWZcU.js +0 -87
  192. package/client/dist/assets/AnalyticsPage-Dkmb0dnd.js +0 -1
  193. package/client/dist/assets/CodePage-C0dH99-t.js +0 -3
  194. package/client/dist/assets/DesktopAnalyticsPage-DuTjr2n8.js +0 -1
  195. package/client/dist/assets/DocsDialog-BVZJZHVR.js +0 -11
  196. package/client/dist/assets/DocsPage-D6KHTv8V.js +0 -11
  197. package/client/dist/assets/InteractiveJobComposer-Ck3PQxjN.js +0 -19
  198. package/client/dist/assets/JobDetailModal-DkoMH3ie.js +0 -1
  199. package/client/dist/assets/JobDetailPage-CBVivcl2.js +0 -1
  200. package/client/dist/assets/JobsPage-CzxEeca9.js +0 -1
  201. package/client/dist/assets/LoopsPage-6iW7g25k.js +0 -1
  202. package/client/dist/assets/MinimizedChatsContext-B6wVevPq.js +0 -1
  203. package/client/dist/assets/PluginsPage-Bf1z3WPF.js +0 -2
  204. package/client/dist/assets/ReviewPacketPage-CaXAwtR7.js +0 -1
  205. package/client/dist/assets/TemplatePreviewModal-9aRFpJ_J.js +0 -1
  206. package/client/dist/assets/TicketDetailModalContext-B1X5glzV.js +0 -14
  207. package/client/dist/assets/agentRuntime-BUagD2I_.js +0 -1
  208. package/client/dist/assets/agentRuntime-BkL70WtX.js +0 -1
  209. package/client/dist/assets/agentRuntime-CWXVqgqE.js +0 -1
  210. package/client/dist/assets/agentRuntime-CvNBdUAe.js +0 -1
  211. package/client/dist/assets/agentRuntime-D4RmeuNY.js +0 -1
  212. package/client/dist/assets/agentRuntime-DTidBWKg.js +0 -1
  213. package/client/dist/assets/agentRuntime-DhKYfyaU.js +0 -1
  214. package/client/dist/assets/agentRuntime-LL8_GLx9.js +0 -1
  215. package/client/dist/assets/analytics-47pYygtV.js +0 -1
  216. package/client/dist/assets/analytics-B0vt1g5U.js +0 -1
  217. package/client/dist/assets/analytics-BMzCvrCU.js +0 -1
  218. package/client/dist/assets/analytics-BlFN3Zwx.js +0 -1
  219. package/client/dist/assets/analytics-CZYzL-nR.js +0 -1
  220. package/client/dist/assets/analytics-DAsb9MJ8.js +0 -1
  221. package/client/dist/assets/analytics-FXQlQ2Yt.js +0 -1
  222. package/client/dist/assets/analytics-RnFCNkah.js +0 -1
  223. package/client/dist/assets/dashboard-BfBir_6o.js +0 -1
  224. package/client/dist/assets/file-text-BcLCfcWZ.js +0 -1
  225. package/client/dist/assets/index-Cfh9aaep.css +0 -2
  226. package/client/dist/assets/index-DYoyDWim.js +0 -76
  227. package/client/dist/assets/jira-api-ChjVGJx_.js +0 -1
  228. package/client/dist/assets/jobs-5PQJbdOf.js +0 -1
  229. package/client/dist/assets/jobs-B2B08Oy9.js +0 -1
  230. package/client/dist/assets/jobs-BJZtBbwb.js +0 -1
  231. package/client/dist/assets/jobs-BlWEsQb7.js +0 -1
  232. package/client/dist/assets/jobs-ConfD8xD.js +0 -1
  233. package/client/dist/assets/jobs-DMPU64ms.js +0 -1
  234. package/client/dist/assets/jobs-DojASiTp.js +0 -1
  235. package/client/dist/assets/jobs-kVHkNpB-.js +0 -1
  236. package/client/dist/assets/packet-BQ2tXfJI.js +0 -1
  237. package/client/dist/assets/packet-BdpOJ1Cy.js +0 -1
  238. package/client/dist/assets/packet-C3Ievb9R.js +0 -1
  239. package/client/dist/assets/packet-C4zJIG0Y.js +0 -1
  240. package/client/dist/assets/packet-Cx-zRuWn.js +0 -1
  241. package/client/dist/assets/packet-DUTGX52M.js +0 -1
  242. package/client/dist/assets/packet-DhsKtUPB.js +0 -1
  243. package/client/dist/assets/packet-z3LJ8Zyy.js +0 -1
  244. package/client/dist/assets/provider-capabilities-CXipwrXJ.js +0 -1
  245. package/client/dist/assets/settings-B3rWEwOx.js +0 -1
  246. package/client/dist/assets/settings-BcVoiMyw.js +0 -1
  247. package/client/dist/assets/settings-BlYvaQ7w.js +0 -1
  248. package/client/dist/assets/settings-CD5uEBiL.js +0 -1
  249. package/client/dist/assets/settings-CyhS0DLJ.js +0 -1
  250. package/client/dist/assets/settings-DCMFUGDs.js +0 -1
  251. package/client/dist/assets/settings-DmbYKyMJ.js +0 -1
  252. package/client/dist/assets/setup-2xGgu4Sk.js +0 -1
  253. package/client/dist/assets/setup-Ba11l2JA.js +0 -1
  254. package/client/dist/assets/setup-BzW4kMok.js +0 -1
  255. package/client/dist/assets/setup-COzwYhkJ.js +0 -1
  256. package/client/dist/assets/setup-CRVULhtF.js +0 -1
  257. package/client/dist/assets/setup-DgvlxwpE.js +0 -1
  258. package/client/dist/assets/setup-Dw_wYeEY.js +0 -1
  259. package/client/dist/assets/setup-ZPtEeJPW.js +0 -1
@@ -1 +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`,launchTicketCap:`Dieses Rail hat {{count}} Specs — ein Start erlaubt höchstens {{max}} pro Rail. Verteile sie auf mehrere Rails.`,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=JSON.parse(`{"operation":{"inProgress":"Aktion läuft…","create-pr":"PR wird erstellt…","publish":"Wird veröffentlicht…","discard":"Wird verworfen…","dismiss":"Fortsetzung wird geschlossen…","poll-merge":"Merge wird geprüft…","reopen":"Wird erneut geöffnet…","merge-local":"Wird lokal integriert…","recover-and-retry":"Gesichertes Ergebnis wird committet und erneut gepusht…","acknowledge-no-changes":"Wird als erledigt markiert…"},"markDone":"Als erledigt markieren","refine":"Verfeinern","completedToast":"Bestätigt — Specs nach Erledigt verschoben","markDoneConfirmTitle":"Diese Specs als erledigt markieren?","markDoneConfirmBody":"Die Implementierung hat bestätigt, dass keine Codeänderungen nötig sind. Die Specs werden nach Erledigt verschoben und der unveränderte Worktree wird bereinigt.","refineConfirmTitle":"Diese Specs verfeinern?","refineConfirmBody":"Das Ergebnis ohne Änderungen wird geschlossen und die Specs kehren zur Verfeinerung in den Backlog zurück. Die Ausführungsprotokolle bleiben verfügbar.","localOnly":"Änderungen sind lokal verfügbar","localOnlyHint":"Die Implementierung ist abgeschlossen, aber die Änderungen wurden nicht gepusht. Integriere sie lokal oder veröffentliche sie erneut, sobald das Remote verfügbar ist.","noChanges":"Keine Änderungen erforderlich","partial":"{{succeeded}} von {{total}} Implementierungen bereit","createPartialPr":"PR mit {{count}} erstellen","deliveryBlocked":"Implementierung abgeschlossen — Bereitstellung erfordert Aufmerksamkeit","updateFailed":"Implementierung abgeschlossen — Aktualisierung fehlgeschlagen","retryPush":"Push wiederholen","retryPushVerified":"Push verifiziert · Commit {{sha}} ist in der PR","commitAlreadyVerified":"Commit {{sha}} ist bereits in der PR verifiziert","deliveryCommit":"Commit {{sha}}","prClosed":"PR ohne Merge geschlossen","reopen":"Erneut öffnen","dismiss":"Fortsetzung schließen","discardLocalResult":"Lokales Ergebnis verwerfen","dismissConfirmTitle":"Diese Fortsetzung schließen?","dismissConfirmBody":"Diese Fortsetzungskarte wird geschlossen. Ihr zugehöriger Worktree wird nur entfernt, wenn dies weiterhin sicher ist; andernfalls bleibt er mit einer Warnung erhalten. Der bestehende PR, sein Branch und der Review-Status bleiben unverändert.","discardLocalConfirmTitle":"Lokales Ergebnis verwerfen?","discardLocalConfirmBody":"Die wiederherstellbare lokale Iteration wird nur entfernt, wenn dies weiterhin sicher ist; wurde sie verändert, bleibt sie mit einer Warnung erhalten. Ein vorhandener PR und sein Branch bleiben unverändert. Ein entferntes Ergebnis kann nicht wiederhergestellt werden.","viewRunLog":"Ausführungsprotokoll für {{ref}} anzeigen","cleanupIncomplete_one":"Bereinigung unvollständig ({{count}} Warnung)","cleanupIncomplete_other":"Bereinigung unvollständig ({{count}} Warnungen)","cleanupIncompleteHint":"Lokale Wiederherstellungsdaten wurden beibehalten. Prüfe diese Details, bevor du etwas manuell entfernst.","copyCleanupDetails":"Wiederherstellungsdetails kopieren","safetyArchiveTitle":"Sicherheitsarchiv ({{count}})","safetyArchiveHint":"Temporäre Workspace-Dateien wurden vorsichtshalber außerhalb des PR aufbewahrt. Du kannst sie prüfen oder manuell entfernen.","copySafetyArchive":"Pfade kopieren","unit":{"failed":"Implementierung fehlgeschlagen","blocked":"Bereitstellung blockiert","noChanges":"keine Änderungen","succeeded":"bereit"},"readyForReview":"Bereit zur Prüfung","openReview":"Prüfen","openReviewTooltip":"Die Prüfung in klarer Sprache öffnen","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":"Branch auschecken","checkoutTooltip":"Den Hauptordner des Projekts auf {{branch}} auschecken","checkoutSuccess":"{{branch}} ausgecheckt","checkoutFailed":"Die Implementierungsbranch konnte nicht ausgecheckt werden","checkoutDirtyTitle":"Checkout zum Schutz deiner Änderungen blockiert","checkoutDirtyBody":"Der Hauptordner des Projekts enthält nicht committete Änderungen. Committe oder stashe sie und versuche es erneut. Es wurde nichts verändert.","checkoutSafetyUnknownTitle":"Checkout pausiert, da die Sicherheit nicht geprüft werden konnte","checkoutSafetyUnknownBody":"Specrails konnte den Git-Status des Projekt-Hauptordners nicht lesen. Es wurde nichts freigegeben oder verändert. Versuche es erneut, sobald Git verfügbar ist.","checkoutNotDeliverableTitle":"Diese Branch enthält nicht die gesicherte Implementierung","checkoutNotDeliverableBody":"Der exakte Liefer-Commit wurde noch nicht verifiziert. Prüfe oder stelle stattdessen das lokale Ergebnis wieder her.","inspectLocalResult":"Lokales Ergebnis prüfen","inspectLocalResultTooltip":"Den gesicherten isolierten Worktree anzeigen und seinen Pfad kopieren","localResultPathCopied":"Pfad des lokalen Ergebnisses kopiert","localResultPath":"Gesichertes lokales Ergebnis","localResultUnavailableHere":"Auf diesem Computer ist kein wiederherstellbarer Worktree verfügbar. Prüfe das Run-Protokoll auf dem Computer, auf dem der Lauf ausgeführt wurde.","recoverAndRetry":"Committen und Push wiederholen","recoverAndRetryConfirmTitle":"Das gesicherte Ergebnis committen und pushen?","recoverAndRetryConfirmBody":"Specrails verwendet ausschließlich den isolierten Worktree oder den aufgezeichneten Fast-Forward-Branch für {{branch}}. Falls nötig, werden die lieferbaren Dateien committet. Anschließend wird nur dieser exakte Commit gepusht und auch nur dann, wenn der PR noch mit den erwarteten Quell- und Ziel-Branches geöffnet ist. Der Hauptordner deines Projekts und seine nicht committeten Änderungen bleiben unberührt.","recoverAndRetryVerified":"Der wiederhergestellte Commit {{sha}} wurde im PR verifiziert","recoveryStillBlocked":"Die lokale Wiederherstellung erfordert noch Aufmerksamkeit","recheckRecovery":"Erneut prüfen","recheckRecoveryConfirmTitle":"Diesen Computer erneut prüfen?","recheckRecoveryConfirmBody":"Specrails durchsucht in diesem Klon erneut den zur Lieferung gehörenden Worktree, Branch, Refs, Reflogs und verwaiste Git-Objekte für {{branch}}. Wird genau ein Ergebnis bewiesen, kann Specrails isolierte Änderungen committen und den exakten Push wiederholen. Der Hauptprojektordner bleibt unberührt.","recoveryUnavailable":"Die Wiederherstellung konnte auf diesem Computer nicht verifiziert werden","recoveryUnavailableBody":"Specrails konnte in diesem Klon nicht sicher genau ein zur Lieferung gehörendes Ergebnis nachweisen. Nichts wurde geändert oder entfernt. Prüfe das Stufendetail und die Run-Protokolle. Wenn der Run auf einem anderen Computer lief, öffne Specrails dort und prüfe erneut.","recoveryDetailSummary":"Technisches Wiederherstellungsdetail","discard":"Verwerfen","discardTooltip":"Schließt die Lieferung und schickt ihre Tickets zurück zu Specs; geänderte lokale Arbeit bleibt erhalten","retryPr":"PR erneut versuchen","retry":"Erneut versuchen","checkMerge":"Merge prüfen","verifyPr":"PR verifizieren","verifyPrTooltip":"Den exakten Commit in GitHub und den Merge-Status der PR prüfen","checkMergeTooltip":"Bei GitHub nachfragen, ob die PR gemergt wurde","prLinkFallback":"PR","openPrTitle":"PR auf GitHub öffnen","notMergedYet":"Noch nicht gemergt","commitMissingRetry":"Der Liefer-Commit ist nicht mehr in der PR enthalten. Der Push kann erneut versucht werden.","prVerifiedWaiting":"Commit {{sha}} verifiziert · wartet auf Merge","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":"Der PR wird geschlossen, ohne seinen Remote-Branch zu löschen. Nur lokale Branches und Worktrees, die SpecRails gehören und noch auf dem aufgezeichneten Commit stehen, werden entfernt; alles Veränderte bleibt mit einer Warnung erhalten. Die Tickets kehren in den Specs-Backlog zurück. Entfernte lokale Ressourcen können nicht wiederhergestellt werden.","implementationFailedDiscardTitle":"Diese fehlgeschlagene Lieferung verwerfen?","implementationFailedDiscardBody":"Die Karte wird geschlossen und ihre Tickets kehren zu Specs zurück. Lokale Arbeit und Branches bleiben zur Prüfung erhalten. Nur nachweislich sicher bereinigbare Ressourcen dürfen entfernt 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. Vorhandene Änderungen bleiben erhalten; überlappende Änderungen müssen gegebenenfalls vor der Integration aufgelöst werden.","mergeLocalBlockedDirty":"Integration nicht möglich: Lokale Änderungen auf {{base}} überschneiden sich mit der Lieferung. Committe oder stashe diese Änderungen 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","discardStackedNote":"Spätere Rails dieses Meilensteins bauen auf dieser Lieferung auf. Sie zu verwerfen pausiert die Meilenstein-Kette; die späteren Rails behalten ihre Arbeit."}`),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 – der gewählte Anbieter 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 {{provider}}-Autonomie.`,autonomyBody:`{{provider}} arbeitet eigenständig mit nativen Agenten und dynamischen Workflows.`,costTitle:`Variable Kosten.`,costBody:`Die Ausgaben hängen davon ab, was {{provider}} entscheidet – sie können höher ausfallen als erwartet.`,continue:`Weiter`},c={fetchFailed:`Rails konnten nicht geladen werden: {{status}}`},l={chipNew:`Neuer PR`,chipTitle:`In einen bestehenden PR liefern`,clear:`PR-Ziel entfernen`,newPr:`Neuer PR (Standard)`,loading:`Offene PRs werden geladen…`,none:`Keine offenen PRs gefunden`,fork:`Fork — kein Push möglich`,manualPlaceholder:`PR-Nummer`,manualUse:`Verwenden`,confirmTitle:`In bestehenden PR liefern?`,confirmBody:`Dieser Lauf arbeitet auf dem Head-Branch des PR und pusht hinein — es wird kein neuer PR erstellt.`,confirmBranch:`Head-Branch`,confirmLaunch:`In PR #{{number}} starten`,errors:{invalid_target_pr:`Ungültige PR-Nummer`,target_pr_requires_pr_mode:`Die Lieferung in einen bestehenden PR erfordert den isolierten PR-Flow`,target_pr_not_found:`PR in diesem Repository nicht gefunden`,target_pr_not_open:`Dieser PR ist nicht mehr offen`,target_pr_fork:`Dieser PR stammt aus einem Fork und kann nicht gepusht werden`,target_pr_invalid:`Die Branches des PR sind als Lieferziel unbrauchbar`,target_pr_unfetchable:`Der Head-Branch des PR konnte nicht geholt werden`}},u={toasts:e,railPr:t,railsBoard:n,launchAll:r,launchAllDialog:i,railControls:a,railRow:o,freestyleDialog:s,useRails:c,targetPr:l};export{u as default,s as freestyleDialog,r as launchAll,i as launchAllDialog,a as railControls,t as railPr,o as railRow,n as railsBoard,l as targetPr,e as toasts,c as useRails};
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`,launchTicketCap:`Dieses Rail hat {{count}} Specs — ein Start erlaubt höchstens {{max}} pro Rail. Verteile sie auf mehrere Rails.`,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=JSON.parse(`{"operation":{"inProgress":"Aktion läuft…","create-pr":"PR wird erstellt…","publish":"Wird veröffentlicht…","discard":"Wird verworfen…","dismiss":"Fortsetzung wird geschlossen…","poll-merge":"Merge wird geprüft…","reopen":"Wird erneut geöffnet…","merge-local":"Wird lokal integriert…","recover-and-retry":"Gesichertes Ergebnis wird committet und erneut gepusht…","acknowledge-no-changes":"Wird als erledigt markiert…"},"markDone":"Als erledigt markieren","refine":"Verfeinern","completedToast":"Bestätigt — Specs nach Erledigt verschoben","markDoneConfirmTitle":"Diese Specs als erledigt markieren?","markDoneConfirmBody":"Die Implementierung hat bestätigt, dass keine Codeänderungen nötig sind. Die Specs werden nach Erledigt verschoben und der unveränderte Worktree wird bereinigt.","refineConfirmTitle":"Diese Specs verfeinern?","refineConfirmBody":"Das Ergebnis ohne Änderungen wird geschlossen und die Specs kehren zur Verfeinerung in den Backlog zurück. Die Ausführungsprotokolle bleiben verfügbar.","localOnly":"Änderungen sind lokal verfügbar","localOnlyHint":"Die Implementierung ist abgeschlossen, aber die Änderungen wurden nicht gepusht. Integriere sie lokal oder veröffentliche sie erneut, sobald das Remote verfügbar ist.","noChanges":"Keine Änderungen erforderlich","partial":"{{succeeded}} von {{total}} Implementierungen bereit","createPartialPr":"PR mit {{count}} erstellen","deliveryBlocked":"Implementierung abgeschlossen — Bereitstellung erfordert Aufmerksamkeit","updateFailed":"Implementierung abgeschlossen — Aktualisierung fehlgeschlagen","retryPush":"Push wiederholen","retryPushVerified":"Push verifiziert · Commit {{sha}} ist in der PR","commitAlreadyVerified":"Commit {{sha}} ist bereits in der PR verifiziert","deliveryCommit":"Commit {{sha}}","prClosed":"PR ohne Merge geschlossen","reopen":"Erneut öffnen","dismiss":"Fortsetzung schließen","discardLocalResult":"Lokales Ergebnis verwerfen","dismissConfirmTitle":"Diese Fortsetzung schließen?","dismissConfirmBody":"Diese Fortsetzungskarte wird geschlossen. Ihr zugehöriger Worktree wird nur entfernt, wenn dies weiterhin sicher ist; andernfalls bleibt er mit einer Warnung erhalten. Der bestehende PR, sein Branch und der Review-Status bleiben unverändert.","discardLocalConfirmTitle":"Lokales Ergebnis verwerfen?","discardLocalConfirmBody":"Die wiederherstellbare lokale Iteration wird nur entfernt, wenn dies weiterhin sicher ist; wurde sie verändert, bleibt sie mit einer Warnung erhalten. Ein vorhandener PR und sein Branch bleiben unverändert. Ein entferntes Ergebnis kann nicht wiederhergestellt werden.","viewRunLog":"Ausführungsprotokoll für {{ref}} anzeigen","cleanupIncomplete_one":"Bereinigung unvollständig ({{count}} Warnung)","cleanupIncomplete_other":"Bereinigung unvollständig ({{count}} Warnungen)","cleanupIncompleteHint":"Lokale Wiederherstellungsdaten wurden beibehalten. Prüfe diese Details, bevor du etwas manuell entfernst.","copyCleanupDetails":"Wiederherstellungsdetails kopieren","safetyArchiveTitle":"Sicherheitsarchiv ({{count}})","safetyArchiveHint":"Temporäre Workspace-Dateien wurden vorsichtshalber außerhalb des PR aufbewahrt. Du kannst sie prüfen oder manuell entfernen.","copySafetyArchive":"Pfade kopieren","unit":{"failed":"Implementierung fehlgeschlagen","blocked":"Bereitstellung blockiert","noChanges":"keine Änderungen","succeeded":"bereit"},"readyForReview":"Bereit zur Prüfung","openReview":"Prüfen","openReviewTooltip":"Die Prüfung in klarer Sprache öffnen","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":"Branch auschecken","checkoutTooltip":"Den Hauptordner des Projekts auf {{branch}} auschecken","checkoutSuccess":"{{branch}} ausgecheckt","checkoutFailed":"Die Implementierungsbranch konnte nicht ausgecheckt werden","checkoutDirtyTitle":"Checkout zum Schutz deiner Änderungen blockiert","checkoutDirtyBody":"Der Hauptordner des Projekts enthält nicht committete Änderungen. Committe oder stashe sie und versuche es erneut. Es wurde nichts verändert.","checkoutSafetyUnknownTitle":"Checkout pausiert, da die Sicherheit nicht geprüft werden konnte","checkoutSafetyUnknownBody":"Specrails konnte den Git-Status des Projekt-Hauptordners nicht lesen. Es wurde nichts freigegeben oder verändert. Versuche es erneut, sobald Git verfügbar ist.","checkoutNotDeliverableTitle":"Diese Branch enthält nicht die gesicherte Implementierung","checkoutNotDeliverableBody":"Der exakte Liefer-Commit wurde noch nicht verifiziert. Prüfe oder stelle stattdessen das lokale Ergebnis wieder her.","inspectLocalResult":"Lokales Ergebnis prüfen","inspectLocalResultTooltip":"Den gesicherten isolierten Worktree anzeigen und seinen Pfad kopieren","localResultPathCopied":"Pfad des lokalen Ergebnisses kopiert","localResultPath":"Gesichertes lokales Ergebnis","localResultUnavailableHere":"Auf diesem Computer ist kein wiederherstellbarer Worktree verfügbar. Prüfe das Run-Protokoll auf dem Computer, auf dem der Lauf ausgeführt wurde.","recoverAndRetry":"Committen und Push wiederholen","recoverAndRetryConfirmTitle":"Das gesicherte Ergebnis committen und pushen?","recoverAndRetryConfirmBody":"Specrails verwendet ausschließlich den isolierten Worktree oder den aufgezeichneten Fast-Forward-Branch für {{branch}}. Falls nötig, werden die lieferbaren Dateien committet. Anschließend wird nur dieser exakte Commit gepusht und auch nur dann, wenn der PR noch mit den erwarteten Quell- und Ziel-Branches geöffnet ist. Der Hauptordner deines Projekts und seine nicht committeten Änderungen bleiben unberührt.","recoverAndRetryVerified":"Der wiederhergestellte Commit {{sha}} wurde im PR verifiziert","recoveryStillBlocked":"Die lokale Wiederherstellung erfordert noch Aufmerksamkeit","recheckRecovery":"Erneut prüfen","recheckRecoveryConfirmTitle":"Diesen Computer erneut prüfen?","recheckRecoveryConfirmBody":"Specrails durchsucht in diesem Klon erneut den zur Lieferung gehörenden Worktree, Branch, Refs, Reflogs und verwaiste Git-Objekte für {{branch}}. Wird genau ein Ergebnis bewiesen, kann Specrails isolierte Änderungen committen und den exakten Push wiederholen. Der Hauptprojektordner bleibt unberührt.","recoveryUnavailable":"Die Wiederherstellung konnte auf diesem Computer nicht verifiziert werden","recoveryUnavailableBody":"Specrails konnte in diesem Klon nicht sicher genau ein zur Lieferung gehörendes Ergebnis nachweisen. Nichts wurde geändert oder entfernt. Prüfe das Stufendetail und die Run-Protokolle. Wenn der Run auf einem anderen Computer lief, öffne Specrails dort und prüfe erneut.","recoveryDetailSummary":"Technisches Wiederherstellungsdetail","discard":"Verwerfen","discardTooltip":"Schließt die Lieferung und schickt ihre Tickets zurück zu Specs; geänderte lokale Arbeit bleibt erhalten","retryPr":"PR erneut versuchen","retry":"Erneut versuchen","checkMerge":"Merge prüfen","verifyPr":"PR verifizieren","verifyPrTooltip":"Den exakten Commit in GitHub und den Merge-Status der PR prüfen","checkMergeTooltip":"Bei GitHub nachfragen, ob die PR gemergt wurde","prLinkFallback":"PR","openPrTitle":"PR auf GitHub öffnen","notMergedYet":"Noch nicht gemergt","commitMissingRetry":"Der Liefer-Commit ist nicht mehr in der PR enthalten. Der Push kann erneut versucht werden.","prVerifiedWaiting":"Commit {{sha}} verifiziert · wartet auf Merge","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":"Der PR wird geschlossen, ohne seinen Remote-Branch zu löschen. Nur lokale Branches und Worktrees, die SpecRails gehören und noch auf dem aufgezeichneten Commit stehen, werden entfernt; alles Veränderte bleibt mit einer Warnung erhalten. Die Tickets kehren in den Specs-Backlog zurück. Entfernte lokale Ressourcen können nicht wiederhergestellt werden.","implementationFailedDiscardTitle":"Diese fehlgeschlagene Lieferung verwerfen?","implementationFailedDiscardBody":"Die Karte wird geschlossen und ihre Tickets kehren zu Specs zurück. Lokale Arbeit und Branches bleiben zur Prüfung erhalten. Nur nachweislich sicher bereinigbare Ressourcen dürfen entfernt 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. Vorhandene Änderungen bleiben erhalten; überlappende Änderungen müssen gegebenenfalls vor der Integration aufgelöst werden.","mergeLocalBlockedDirty":"Integration nicht möglich: Lokale Änderungen auf {{base}} überschneiden sich mit der Lieferung. Committe oder stashe diese Änderungen 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","discardStackedNote":"Spätere Rails dieses Meilensteins bauen auf dieser Lieferung auf. Sie zu verwerfen pausiert die Meilenstein-Kette; die späteren Rails behalten ihre Arbeit."}`),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 – der gewählte Anbieter 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 {{provider}}-Autonomie.`,autonomyBody:`{{provider}} arbeitet eigenständig mit nativen Agenten und dynamischen Workflows.`,costTitle:`Variable Kosten.`,costBody:`Die Ausgaben hängen davon ab, was {{provider}} entscheidet – sie können höher ausfallen als erwartet.`,continue:`Weiter`},c={fetchFailed:`Rails konnten nicht geladen werden: {{status}}`},l={chipNew:`Neuer PR`,chipTitle:`In einen bestehenden PR liefern`,clear:`PR-Ziel entfernen`,newPr:`Neuer PR (Standard)`,loading:`Offene PRs werden geladen…`,none:`Keine offenen PRs gefunden`,fork:`Fork — kein Push möglich`,manualPlaceholder:`PR-Nummer`,manualUse:`Verwenden`,confirmTitle:`In bestehenden PR liefern?`,confirmBody:`Dieser Lauf arbeitet auf dem Head-Branch des PR und pusht hinein — es wird kein neuer PR erstellt.`,confirmBranch:`Head-Branch`,confirmLaunch:`In PR #{{number}} starten`,errors:{invalid_target_pr:`Ungültige PR-Nummer`,target_pr_requires_pr_mode:`Die Lieferung in einen bestehenden PR erfordert den isolierten PR-Flow`,target_pr_not_found:`PR in diesem Repository nicht gefunden`,target_pr_not_open:`Dieser PR ist nicht mehr offen`,target_pr_fork:`Dieser PR stammt aus einem Fork und kann nicht gepusht werden`,target_pr_invalid:`Die Branches des PR sind als Lieferziel unbrauchbar`,target_pr_unfetchable:`Der Head-Branch des PR konnte nicht geholt werden`}},u={rolesNoFreestyle:`Freestyle braucht einen einzelnen Anbieter – wähle Implement oder einen Loop, bevor du dieses Rail auf Engines pro Rolle umstellst.`},d={toasts:e,railPr:t,railsBoard:n,launchAll:r,launchAllDialog:i,railControls:a,railRow:o,freestyleDialog:s,useRails:c,targetPr:l,rail:u};export{d as default,s as freestyleDialog,r as launchAll,i as launchAllDialog,u as rail,a as railControls,t as railPr,o as railRow,n as railsBoard,l as targetPr,e as toasts,c as useRails};
@@ -0,0 +1 @@
1
+ import{t as e}from"./createLucideIcon-Bjbbp_KS.js";var t=e(`file-text`,[[`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:`M10 9H8`,key:`b1mrlr`}],[`path`,{d:`M16 13H8`,key:`t4e002`}],[`path`,{d:`M16 17H8`,key:`z1uh3a`}]]);export{t};
@@ -1 +1 @@
1
- import{A as e,C as t,S as n,k as r,w as i,x as a,y as o}from"./useSharedWebSocket-DnxHj8jP.js";import{t as s}from"./getTimezoneOffsetInMilliseconds-DxAkjvJb.js";function c(e,t){let n=a(e)-+a(t);return n<0?-1:n>0?1:n}function l(e){return i(e,Date.now())}function u(e,n,r){let[i,a]=t(r?.in,e,n),o=i.getFullYear()-a.getFullYear(),s=i.getMonth()-a.getMonth();return o*12+s}function d(e){return t=>{let n=(e?Math[e]:Math.trunc)(t);return n===0?0:n}}function f(e,t){return a(e)-+a(t)}function p(e,t){let n=a(e,t?.in);return n.setHours(23,59,59,999),n}function m(e,t){let n=a(e,t?.in),r=n.getMonth();return n.setFullYear(n.getFullYear(),r+1,0),n.setHours(23,59,59,999),n}function h(e,t){let n=a(e,t?.in);return+p(n,t)==+m(n,t)}function g(e,n,r){let[i,a,o]=t(r?.in,e,e,n),s=c(a,o),l=Math.abs(u(a,o));if(l<1)return 0;a.getMonth()===1&&a.getDate()>27&&a.setDate(30),a.setMonth(a.getMonth()-s*l);let d=c(a,o)===-s;h(i)&&l===1&&c(i,o)===1&&(d=!1);let f=s*(l-+d);return f===0?0:f}function _(e,t,n){let r=f(e,t)/1e3;return d(n?.roundingMethod)(r)}function v(i,a,l){let u=n(),d=l?.locale??u.locale??o,f=c(i,a);if(isNaN(f))throw RangeError(`Invalid time value`);let p=Object.assign({},l,{addSuffix:l?.addSuffix,comparison:f}),[m,h]=t(l?.in,...f>0?[a,i]:[i,a]),v=_(h,m),y=(s(h)-s(m))/1e3,b=Math.round((v-y)/60),x;if(b<2)return l?.includeSeconds?v<5?d.formatDistance(`lessThanXSeconds`,5,p):v<10?d.formatDistance(`lessThanXSeconds`,10,p):v<20?d.formatDistance(`lessThanXSeconds`,20,p):v<40?d.formatDistance(`halfAMinute`,0,p):v<60?d.formatDistance(`lessThanXMinutes`,1,p):d.formatDistance(`xMinutes`,1,p):b===0?d.formatDistance(`lessThanXMinutes`,1,p):d.formatDistance(`xMinutes`,b,p);if(b<45)return d.formatDistance(`xMinutes`,b,p);if(b<90)return d.formatDistance(`aboutXHours`,1,p);if(b<1440){let e=Math.round(b/60);return d.formatDistance(`aboutXHours`,e,p)}else if(b<2520)return d.formatDistance(`xDays`,1,p);else if(b<43200){let e=Math.round(b/r);return d.formatDistance(`xDays`,e,p)}else if(b<43200*2)return x=Math.round(b/e),d.formatDistance(`aboutXMonths`,x,p);if(x=g(h,m),x<12){let t=Math.round(b/e);return d.formatDistance(`xMonths`,t,p)}else{let e=x%12,t=Math.trunc(x/12);return e<3?d.formatDistance(`aboutXYears`,t,p):e<9?d.formatDistance(`overXYears`,t,p):d.formatDistance(`almostXYears`,t+1,p)}}function y(e,t){return v(e,l(e),t)}export{y as t};
1
+ import{A as e,C as t,S as n,k as r,w as i,x as a,y as o}from"./useSharedWebSocket-BHIfW4QT.js";import{t as s}from"./getTimezoneOffsetInMilliseconds-BRymg1Kk.js";function c(e,t){let n=a(e)-+a(t);return n<0?-1:n>0?1:n}function l(e){return i(e,Date.now())}function u(e,n,r){let[i,a]=t(r?.in,e,n),o=i.getFullYear()-a.getFullYear(),s=i.getMonth()-a.getMonth();return o*12+s}function d(e){return t=>{let n=(e?Math[e]:Math.trunc)(t);return n===0?0:n}}function f(e,t){return a(e)-+a(t)}function p(e,t){let n=a(e,t?.in);return n.setHours(23,59,59,999),n}function m(e,t){let n=a(e,t?.in),r=n.getMonth();return n.setFullYear(n.getFullYear(),r+1,0),n.setHours(23,59,59,999),n}function h(e,t){let n=a(e,t?.in);return+p(n,t)==+m(n,t)}function g(e,n,r){let[i,a,o]=t(r?.in,e,e,n),s=c(a,o),l=Math.abs(u(a,o));if(l<1)return 0;a.getMonth()===1&&a.getDate()>27&&a.setDate(30),a.setMonth(a.getMonth()-s*l);let d=c(a,o)===-s;h(i)&&l===1&&c(i,o)===1&&(d=!1);let f=s*(l-+d);return f===0?0:f}function _(e,t,n){let r=f(e,t)/1e3;return d(n?.roundingMethod)(r)}function v(i,a,l){let u=n(),d=l?.locale??u.locale??o,f=c(i,a);if(isNaN(f))throw RangeError(`Invalid time value`);let p=Object.assign({},l,{addSuffix:l?.addSuffix,comparison:f}),[m,h]=t(l?.in,...f>0?[a,i]:[i,a]),v=_(h,m),y=(s(h)-s(m))/1e3,b=Math.round((v-y)/60),x;if(b<2)return l?.includeSeconds?v<5?d.formatDistance(`lessThanXSeconds`,5,p):v<10?d.formatDistance(`lessThanXSeconds`,10,p):v<20?d.formatDistance(`lessThanXSeconds`,20,p):v<40?d.formatDistance(`halfAMinute`,0,p):v<60?d.formatDistance(`lessThanXMinutes`,1,p):d.formatDistance(`xMinutes`,1,p):b===0?d.formatDistance(`lessThanXMinutes`,1,p):d.formatDistance(`xMinutes`,b,p);if(b<45)return d.formatDistance(`xMinutes`,b,p);if(b<90)return d.formatDistance(`aboutXHours`,1,p);if(b<1440){let e=Math.round(b/60);return d.formatDistance(`aboutXHours`,e,p)}else if(b<2520)return d.formatDistance(`xDays`,1,p);else if(b<43200){let e=Math.round(b/r);return d.formatDistance(`xDays`,e,p)}else if(b<43200*2)return x=Math.round(b/e),d.formatDistance(`aboutXMonths`,x,p);if(x=g(h,m),x<12){let t=Math.round(b/e);return d.formatDistance(`xMonths`,t,p)}else{let e=x%12,t=Math.trunc(x/12);return e<3?d.formatDistance(`aboutXYears`,t,p):e<9?d.formatDistance(`overXYears`,t,p):d.formatDistance(`almostXYears`,t+1,p)}}function y(e,t){return v(e,l(e),t)}export{y as t};
@@ -1 +1 @@
1
- import{x as e}from"./useSharedWebSocket-DnxHj8jP.js";function t(t){let n=e(t),r=new Date(Date.UTC(n.getFullYear(),n.getMonth(),n.getDate(),n.getHours(),n.getMinutes(),n.getSeconds(),n.getMilliseconds()));return r.setUTCFullYear(n.getFullYear()),t-+r}export{t};
1
+ import{x as e}from"./useSharedWebSocket-BHIfW4QT.js";function t(t){let n=e(t),r=new Date(Date.UTC(n.getFullYear(),n.getMonth(),n.getDate(),n.getHours(),n.getMinutes(),n.getSeconds(),n.getMilliseconds()));return r.setUTCFullYear(n.getFullYear()),t-+r}export{t};