specrails-desktop 2.64.2 → 2.65.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1116) hide show
  1. package/README.md +1 -1
  2. package/cli/dist/status.js +3 -0
  3. package/client/dist/assets/ActivityFeedPage-ByVKYII-.js +1 -0
  4. package/client/dist/assets/AgentBrowserCapture-BGUTjhUr.js +1 -0
  5. package/client/dist/assets/AgentModeAnalyticsPane-CtOLDDjB.js +2 -0
  6. package/client/dist/assets/AgentModeCodePane-CDhUKarT.js +2 -0
  7. package/client/dist/assets/AgentModeJobsPane-BAa_oEHJ.js +1 -0
  8. package/client/dist/assets/AgentsPage-D32hG4Ve.js +120 -0
  9. package/client/dist/assets/AnalyticsPage-BU50zeG6.js +5 -0
  10. package/client/dist/assets/BudgetCard-DP_jxwaD.js +55 -0
  11. package/client/dist/assets/CodePage-jiYnKGpp.js +3 -0
  12. package/client/dist/assets/CostValue-Bvn8674q.js +1 -0
  13. package/client/dist/assets/DesktopAnalyticsPage-CF__H4e3.js +1 -0
  14. package/client/dist/assets/DocView-RrAp70zp.js +11 -0
  15. package/client/dist/assets/DocsDialog-DkqHU-JF.js +1 -0
  16. package/client/dist/assets/DocsPage-C6X089zC.js +1 -0
  17. package/client/dist/assets/ExportDropdown-C5-o8y3K.js +1 -0
  18. package/client/dist/assets/HelpHint-Crf9_uoR.js +1 -0
  19. package/client/dist/assets/IntegrationsPage-aflU3KHK.js +1 -0
  20. package/client/dist/assets/InteractiveJobComposer-CEMMhyyJ.js +19 -0
  21. package/client/dist/assets/JobDetailModal-BVJ6hyRs.js +1 -0
  22. package/client/dist/assets/JobDetailPage-DHzBUmox.js +1 -0
  23. package/client/dist/assets/JobsPage-o-LAqkwC.js +1 -0
  24. package/client/dist/assets/LoopBuilderPage-DbSVmXBM.js +1 -0
  25. package/client/dist/assets/LoopPreviewModal-DbJcVyN1.js +1 -0
  26. package/client/dist/assets/{LoopWindowSurface-DE0v2K1p.js → LoopWindowSurface-Co1ZK26V.js} +1 -1
  27. package/client/dist/assets/LoopsPage-C4lgkPXB.js +2 -0
  28. package/client/dist/assets/MinimizedChatsContext-742ypO8n.js +1 -0
  29. package/client/dist/assets/PluginsPage-Acks9ges.js +2 -0
  30. package/client/dist/assets/RailTrack-BfLmBzBh.js +1 -0
  31. package/client/dist/assets/{RepositoryScopeSelector-2eSqR9WK.js → RepositoryScopeSelector-DcxbKI9w.js} +1 -1
  32. package/client/dist/assets/ReviewPacketPage-CAVSIOAJ.js +7 -0
  33. package/client/dist/assets/TemplatePreviewModal-C23SYCTm.js +1 -0
  34. package/client/dist/assets/TicketDetailModalContext-B-Gtm6Ob.js +23 -0
  35. package/client/dist/assets/Trans-C6J0cLyh.js +1 -0
  36. package/client/dist/assets/a11y-prefs-BqoP5goK.js +1 -0
  37. package/client/dist/assets/activity-BBWfoUOG.js +1 -0
  38. package/client/dist/assets/activity-BM_skann.js +1 -0
  39. package/client/dist/assets/activity-Cevl82ke.js +1 -0
  40. package/client/dist/assets/activity-CmACk5W5.js +1 -0
  41. package/client/dist/assets/activity-D9LBw3PQ.js +1 -0
  42. package/client/dist/assets/activity-Dspbb9lz.js +1 -0
  43. package/client/dist/assets/activity-FPjYIjv9.js +1 -0
  44. package/client/dist/assets/activity-nLCKMUKt.js +1 -0
  45. package/client/dist/assets/addspec-BI4jDMhA.js +1 -0
  46. package/client/dist/assets/addspec-BldTv7Tl.js +1 -0
  47. package/client/dist/assets/addspec-Cdq-2EcC.js +1 -0
  48. package/client/dist/assets/addspec-DH5M16BQ.js +1 -0
  49. package/client/dist/assets/addspec-DOFo9pD5.js +1 -0
  50. package/client/dist/assets/addspec-DPkwhdmL.js +1 -0
  51. package/client/dist/assets/addspec-Dzy12Pv3.js +1 -0
  52. package/client/dist/assets/addspec-skTs6EEW.js +1 -0
  53. package/client/dist/assets/agent-B_UEUy7Y.js +1 -0
  54. package/client/dist/assets/agent-BarjlhTA.js +1 -0
  55. package/client/dist/assets/agent-BfqIITo5.js +1 -0
  56. package/client/dist/assets/agent-Bt9a7Kyj.js +1 -0
  57. package/client/dist/assets/agent-C3689RwP.js +1 -0
  58. package/client/dist/assets/agent-CrmboTAi.js +1 -0
  59. package/client/dist/assets/agent-DcsoTnuE.js +1 -0
  60. package/client/dist/assets/agent-GDZoYwd4.js +1 -0
  61. package/client/dist/assets/{agentRuntime-es2ymSl-.js → agentRuntime-BYH70bKY.js} +1 -1
  62. package/client/dist/assets/agentRuntime-BijLh8I9.js +1 -0
  63. package/client/dist/assets/{agentRuntime-BzuwQQgn.js → agentRuntime-BvyuETPe.js} +1 -1
  64. package/client/dist/assets/{agentRuntime-BDvbJMmS.js → agentRuntime-C2WI6HQh.js} +1 -1
  65. package/client/dist/assets/{agentRuntime-BKJfv5YD.js → agentRuntime-CZPIlQsr.js} +1 -1
  66. package/client/dist/assets/{agentRuntime-DiCldqGG.js → agentRuntime-D2dDvCyJ.js} +1 -1
  67. package/client/dist/assets/agentRuntime-DWZedEbn.js +1 -0
  68. package/client/dist/assets/agentRuntime-DkIruUNw.js +1 -0
  69. package/client/dist/assets/agents-35_PDKx9.js +1 -0
  70. package/client/dist/assets/agents-8fZnHhEQ.js +1 -0
  71. package/client/dist/assets/agents-Bgimtw8z.js +1 -0
  72. package/client/dist/assets/agents-C4P160Us.js +1 -0
  73. package/client/dist/assets/agents-Clg67zbp.js +1 -0
  74. package/client/dist/assets/agents-DJfF4o6G.js +1 -0
  75. package/client/dist/assets/agents-Dc9-Y5cw.js +1 -0
  76. package/client/dist/assets/agents-EN1Zl4YZ.js +1 -0
  77. package/client/dist/assets/agentstudio-Bm4-NYaG.js +1 -0
  78. package/client/dist/assets/agentstudio-CD1fuj2o.js +1 -0
  79. package/client/dist/assets/agentstudio-CQGWFSst.js +1 -0
  80. package/client/dist/assets/agentstudio-CqVSb65S.js +1 -0
  81. package/client/dist/assets/agentstudio-DIE_HjsX.js +1 -0
  82. package/client/dist/assets/agentstudio-D_OmQK-k.js +1 -0
  83. package/client/dist/assets/agentstudio-Djz9aUfb.js +1 -0
  84. package/client/dist/assets/agentstudio-Qa3v9o5J.js +1 -0
  85. package/client/dist/assets/{aiedit-DNXxq_Dr.js → aiedit-1VzLs37W.js} +1 -1
  86. package/client/dist/assets/{aiedit-DCjA7jLJ.js → aiedit-BNp6GSik.js} +1 -1
  87. package/client/dist/assets/{aiedit-BoG24nlg.js → aiedit-BOY5xRPi.js} +1 -1
  88. package/client/dist/assets/{aiedit-iIjz2_Qk.js → aiedit-BrqMZvbc.js} +1 -1
  89. package/client/dist/assets/{aiedit-CjlSRQVP.js → aiedit-CVgtl7hm.js} +1 -1
  90. package/client/dist/assets/{aiedit-DQ-0_pvE.js → aiedit-CrFW9Jd2.js} +1 -1
  91. package/client/dist/assets/{aiedit-olnv3QSt.js → aiedit-YE2lILp7.js} +1 -1
  92. package/client/dist/assets/{aiedit-B0KUbpB6.js → aiedit-iA_R1AVQ.js} +1 -1
  93. package/client/dist/assets/analytics-3w0t-4ic.js +1 -0
  94. package/client/dist/assets/analytics-BRi4KQD6.js +1 -0
  95. package/client/dist/assets/analytics-BtjAqzke.js +1 -0
  96. package/client/dist/assets/analytics-COSQ1h47.js +1 -0
  97. package/client/dist/assets/analytics-CP2HjESk.js +1 -0
  98. package/client/dist/assets/analytics-DY65TC62.js +1 -0
  99. package/client/dist/assets/analytics-Den_vvxn.js +1 -0
  100. package/client/dist/assets/analytics-LmBS96O8.js +1 -0
  101. package/client/dist/assets/api-DOGbyfTO.js +2 -0
  102. package/client/dist/assets/builder-BMVvSr4v.js +1 -0
  103. package/client/dist/assets/builder-BN-MuLZt.js +1 -0
  104. package/client/dist/assets/builder-BQOZi4CF.js +1 -0
  105. package/client/dist/assets/builder-BjUPjsyu.js +1 -0
  106. package/client/dist/assets/builder-BoBtN18T.js +1 -0
  107. package/client/dist/assets/builder-C5g5NhxL.js +1 -0
  108. package/client/dist/assets/builder-RUHXw3yx.js +1 -0
  109. package/client/dist/assets/builder-fyS_AiyC.js +1 -0
  110. package/client/dist/assets/button-CHPkroew.js +1 -0
  111. package/client/dist/assets/chat-C9L5T7KI.js +1 -0
  112. package/client/dist/assets/chevron-right-CwMAj0w_.js +1 -0
  113. package/client/dist/assets/chevron-up-BAMuP0XD.js +1 -0
  114. package/client/dist/assets/chunk-OB3PAWPO-BBaq6pUk.js +3 -0
  115. package/client/dist/assets/code-4le5IIbf.js +1 -0
  116. package/client/dist/assets/code-B-jCVIbm.js +1 -0
  117. package/client/dist/assets/code-BRfrn5ix.js +1 -0
  118. package/client/dist/assets/code-CC9NCrDM.js +1 -0
  119. package/client/dist/assets/code-CK6pm8wY.js +1 -0
  120. package/client/dist/assets/code-DDiOzd6c.js +1 -0
  121. package/client/dist/assets/code-tGifiyf5.js +1 -0
  122. package/client/dist/assets/code-xkn8kQTg.js +1 -0
  123. package/client/dist/assets/commands-Bv1QshHR.js +1 -0
  124. package/client/dist/assets/commands-BvxTxboW.js +1 -0
  125. package/client/dist/assets/commands-C5ORR0fO.js +1 -0
  126. package/client/dist/assets/commands-CBKMFSTV.js +1 -0
  127. package/client/dist/assets/commands-CFJIRsJv.js +1 -0
  128. package/client/dist/assets/commands-D9o3ZcXl.js +1 -0
  129. package/client/dist/assets/commands-DNox0Edk.js +1 -0
  130. package/client/dist/assets/commands-DmIUMLdV.js +1 -0
  131. package/client/dist/assets/common-5H4TkaoI.js +1 -0
  132. package/client/dist/assets/common-9S3OdPjx.js +1 -0
  133. package/client/dist/assets/common-BqnwIcjs.js +1 -0
  134. package/client/dist/assets/common-CQP3VafS.js +1 -0
  135. package/client/dist/assets/common-CZnAfkB2.js +1 -0
  136. package/client/dist/assets/common-D5sNttV4.js +1 -0
  137. package/client/dist/assets/common-k_qX9nlv.js +1 -0
  138. package/client/dist/assets/common-s4HIi9XI.js +1 -0
  139. package/client/dist/assets/compass-B7guwBlY.js +1 -0
  140. package/client/dist/assets/confirm-dialog-ChZdHL3Q.js +1 -0
  141. package/client/dist/assets/copy-DOPlLymH.js +1 -0
  142. package/client/dist/assets/core-BozBzB6Y.js +1 -0
  143. package/client/dist/assets/dashboard-6zGLGcEz.js +1 -0
  144. package/client/dist/assets/dashboard-8Gi0FBDq.js +1 -0
  145. package/client/dist/assets/dashboard-B7E5YrSy.js +1 -0
  146. package/client/dist/assets/dashboard-BhdKV8xK.js +1 -0
  147. package/client/dist/assets/dashboard-Bu3zzH_s.js +1 -0
  148. package/client/dist/assets/dashboard-Ce_6rELA.js +1 -0
  149. package/client/dist/assets/dashboard-DWY-oz8P.js +1 -0
  150. package/client/dist/assets/dashboard-gUzlWk0o.js +1 -0
  151. package/client/dist/assets/date-input-Cdlr8kHz.js +1 -0
  152. package/client/dist/assets/dialog-C23lB2iP.js +5 -0
  153. package/client/dist/assets/dist-Di-oOFkX.js +1 -0
  154. package/client/dist/assets/dist-js-CBmS6MsJ.js +1 -0
  155. package/client/dist/assets/{dist-js-Rlh4FLH5.js → dist-js-DaJmKapi.js} +1 -1
  156. package/client/dist/assets/dropdown-menu-Bfp2CK6H.js +1 -0
  157. package/client/dist/assets/empty-state-D5w9OWj-.js +1 -0
  158. package/client/dist/assets/es2015-DfnECntk.js +41 -0
  159. package/client/dist/assets/esm-BKF6CE7v.js +1 -0
  160. package/client/dist/assets/event-BEnMLqAi.js +1 -0
  161. package/client/dist/assets/explore--NOz9LCN.js +1 -0
  162. package/client/dist/assets/explore-B2ulH6dO.js +1 -0
  163. package/client/dist/assets/explore-BD-QiLdg.js +1 -0
  164. package/client/dist/assets/explore-BOqd4_1j.js +1 -0
  165. package/client/dist/assets/explore-Be_Zh5zu.js +1 -0
  166. package/client/dist/assets/explore-CLjzPSKo.js +1 -0
  167. package/client/dist/assets/explore-D_-vHm29.js +1 -0
  168. package/client/dist/assets/explore-yEQTF6ro.js +1 -0
  169. package/client/dist/assets/file-text-CNXzL3wj.js +1 -0
  170. package/client/dist/assets/format-BODoFIw6.js +1 -0
  171. package/client/dist/assets/formatDistanceToNow-DLMIOS0N.js +1 -0
  172. package/client/dist/assets/getTimezoneOffsetInMilliseconds-O61feXch.js +1 -0
  173. package/client/dist/assets/git-compare-arrows-Cu6tICCq.js +1 -0
  174. package/client/dist/assets/humanise-command-CB4ybLwq.js +1 -0
  175. package/client/dist/assets/inbox-BLZ8cm6_.js +1 -0
  176. package/client/dist/assets/inbox-BQ3VmNYY.js +1 -0
  177. package/client/dist/assets/inbox-BdcXWCuT.js +1 -0
  178. package/client/dist/assets/inbox-CF1PHjns.js +1 -0
  179. package/client/dist/assets/inbox-CFNPDhso.js +1 -0
  180. package/client/dist/assets/inbox-DIttK_NW.js +1 -0
  181. package/client/dist/assets/inbox-Dfdv1Ykl.js +1 -0
  182. package/client/dist/assets/inbox-JS1inmeO.js +1 -0
  183. package/client/dist/assets/index-4UWY7Xyz.css +2 -0
  184. package/client/dist/assets/index-DHzB0T26.js +120 -0
  185. package/client/dist/assets/integrations-BcKgzgPD.js +1 -0
  186. package/client/dist/assets/integrations-BmX_XyJq.js +1 -0
  187. package/client/dist/assets/integrations-CHpwMjlY.js +1 -0
  188. package/client/dist/assets/integrations-CT3kr8e-.js +1 -0
  189. package/client/dist/assets/integrations-C_5XAkgz.js +1 -0
  190. package/client/dist/assets/integrations-Ct9zLX7N.js +1 -0
  191. package/client/dist/assets/integrations-DEYemxUv.js +1 -0
  192. package/client/dist/assets/integrations-DWvsB_WB.js +1 -0
  193. package/client/dist/assets/{jira-Cq6yvN4q.js → jira-B_ERkFRv.js} +1 -1
  194. package/client/dist/assets/jira-Bn-A5lwD.js +1 -0
  195. package/client/dist/assets/jira-C71Ybnhp.js +1 -0
  196. package/client/dist/assets/jira-CkwjeJz6.js +1 -0
  197. package/client/dist/assets/jira-D9pSLXjI.js +1 -0
  198. package/client/dist/assets/jira-DBRS_lcp.js +1 -0
  199. package/client/dist/assets/jira-DHS6CsKh.js +1 -0
  200. package/client/dist/assets/jira-MInHRUb1.js +1 -0
  201. package/client/dist/assets/jira-api-DHme7Upx.js +1 -0
  202. package/client/dist/assets/jobs-BMLTDo63.js +1 -0
  203. package/client/dist/assets/jobs-BO8q4Mi1.js +1 -0
  204. package/client/dist/assets/jobs-Ck8uOWMM.js +1 -0
  205. package/client/dist/assets/jobs-CyFfPCpg.js +1 -0
  206. package/client/dist/assets/jobs-DT5s4fZ6.js +1 -0
  207. package/client/dist/assets/jobs-DZAgVPcD.js +1 -0
  208. package/client/dist/assets/jobs-b5gPYaKr.js +1 -0
  209. package/client/dist/assets/jobs-xsZK1440.js +1 -0
  210. package/client/dist/assets/launch-forecast-BTa-p3RP.js +1 -0
  211. package/client/dist/assets/{loop-layout-DtxX27Jz.css → loop-layout-DLioOiRN.css} +1 -1
  212. package/client/dist/assets/loop-layout-Sl9cfTvs.js +7 -0
  213. package/client/dist/assets/loops-BEEOVJDR.js +1 -0
  214. package/client/dist/assets/loops-BcrQ2vk7.js +1 -0
  215. package/client/dist/assets/loops-BjWxzJIZ.js +1 -0
  216. package/client/dist/assets/loops-BogV595N.js +1 -0
  217. package/client/dist/assets/loops-CU0BLZiz.js +1 -0
  218. package/client/dist/assets/loops-CrNBgi1G.js +1 -0
  219. package/client/dist/assets/loops-CwalwS_i.js +1 -0
  220. package/client/dist/assets/loops-_TDVN-fX.js +1 -0
  221. package/client/dist/assets/mcp-BNs8gxoL.js +1 -0
  222. package/client/dist/assets/mcp-BvRh_xO5.js +1 -0
  223. package/client/dist/assets/mcp-C2F1pghi.js +1 -0
  224. package/client/dist/assets/mcp-D9RLKAs2.js +1 -0
  225. package/client/dist/assets/mcp-DAghcsR0.js +1 -0
  226. package/client/dist/assets/mcp-DWWAPi1G.js +1 -0
  227. package/client/dist/assets/mcp-DbGSFC3f.js +1 -0
  228. package/client/dist/assets/mcp-FelCicrv.js +1 -0
  229. package/client/dist/assets/narration-C3NBkAR4.js +1 -0
  230. package/client/dist/assets/narration-CkoJq-Lf.js +1 -0
  231. package/client/dist/assets/narration-Cr0NeW9K.js +1 -0
  232. package/client/dist/assets/narration-DJUXOs-W.js +1 -0
  233. package/client/dist/assets/narration-DgL8TMvN.js +1 -0
  234. package/client/dist/assets/narration-DjBafgv0.js +1 -0
  235. package/client/dist/assets/narration-Dle6Iv0c.js +1 -0
  236. package/client/dist/assets/narration-MYlfktga.js +1 -0
  237. package/client/dist/assets/nav-BSQ8KW1c.js +1 -0
  238. package/client/dist/assets/nav-BauVof8Z.js +1 -0
  239. package/client/dist/assets/nav-BfOAH1se.js +1 -0
  240. package/client/dist/assets/nav-D3bOsipX.js +1 -0
  241. package/client/dist/assets/nav-DOMMhlLx.js +1 -0
  242. package/client/dist/assets/nav-DPzVlgZU.js +1 -0
  243. package/client/dist/assets/nav-DZJbFbah.js +1 -0
  244. package/client/dist/assets/nav-D_5aojd2.js +1 -0
  245. package/client/dist/assets/notify-error-BsWANx1T.js +1 -0
  246. package/client/dist/assets/onboarding-BdZQnNm3.js +1 -0
  247. package/client/dist/assets/onboarding-CJQEv1vp.js +1 -0
  248. package/client/dist/assets/onboarding-CWJGYUW3.js +1 -0
  249. package/client/dist/assets/onboarding-ChfYN7dA.js +1 -0
  250. package/client/dist/assets/onboarding-CjvDUR3V.js +1 -0
  251. package/client/dist/assets/onboarding-I6vS-zTB.js +1 -0
  252. package/client/dist/assets/onboarding-dgC_9dTB.js +1 -0
  253. package/client/dist/assets/onboarding-mlXSyKzX.js +1 -0
  254. package/client/dist/assets/origin-03nTuaOb.js +1 -0
  255. package/client/dist/assets/packet-BjpyRnZr.js +1 -0
  256. package/client/dist/assets/packet-BwgG5mBt.js +1 -0
  257. package/client/dist/assets/packet-C3eAUFkV.js +1 -0
  258. package/client/dist/assets/packet-C8wZuSld.js +1 -0
  259. package/client/dist/assets/packet-CNXEy_85.js +1 -0
  260. package/client/dist/assets/packet-DsV5Aa_8.js +1 -0
  261. package/client/dist/assets/packet-aasskOE7.js +1 -0
  262. package/client/dist/assets/packet-phxCc2gJ.js +1 -0
  263. package/client/dist/assets/page-header-BStSHkP8.js +1 -0
  264. package/client/dist/assets/project-repositories-DJPeAVBK.js +1 -0
  265. package/client/dist/assets/{provider-capabilities-lePfeT_Y.js → provider-capabilities-DtwcTme4.js} +1 -1
  266. package/client/dist/assets/recovery-BPDOsC92.js +1 -0
  267. package/client/dist/assets/recovery-BluNHoXM.js +1 -0
  268. package/client/dist/assets/recovery-CRvEmB0C.js +1 -0
  269. package/client/dist/assets/recovery-CeIoRnkR.js +1 -0
  270. package/client/dist/assets/recovery-DHCo8KGi.js +1 -0
  271. package/client/dist/assets/recovery-OxAIpbBF.js +1 -0
  272. package/client/dist/assets/recovery-XXexYGOJ.js +1 -0
  273. package/client/dist/assets/recovery-pITlc--v.js +1 -0
  274. package/client/dist/assets/refresh-cw-DfyTkbsf.js +1 -0
  275. package/client/dist/assets/select-xA3pSmqE.js +1 -0
  276. package/client/dist/assets/settings--yzDbX9r.js +1 -0
  277. package/client/dist/assets/settings-5_heTv8s.js +1 -0
  278. package/client/dist/assets/settings-BSf27MDg.js +1 -0
  279. package/client/dist/assets/settings-BSj6FakR.js +1 -0
  280. package/client/dist/assets/settings-BZDo_8Nn.js +1 -0
  281. package/client/dist/assets/settings-BdWgmNc0.js +1 -0
  282. package/client/dist/assets/settings-DRouxKqb.js +1 -0
  283. package/client/dist/assets/settings-DnWFoY-F.js +1 -0
  284. package/client/dist/assets/setup-BJWy62ri.js +1 -0
  285. package/client/dist/assets/setup-BgKOIuzc.js +1 -0
  286. package/client/dist/assets/setup-BvVIyUlz.js +1 -0
  287. package/client/dist/assets/setup-BxCk2pe1.js +1 -0
  288. package/client/dist/assets/setup-C-xQTL7R.js +1 -0
  289. package/client/dist/assets/setup-CbaVoiwV.js +1 -0
  290. package/client/dist/assets/setup-DxTBkX3P.js +1 -0
  291. package/client/dist/assets/setup-oGoVAzOD.js +1 -0
  292. package/client/dist/assets/specs-7tAb4IKr.js +1 -0
  293. package/client/dist/assets/specs-BUcY4s5v.js +1 -0
  294. package/client/dist/assets/specs-Bk5LeBAA.js +1 -0
  295. package/client/dist/assets/specs-CAA4Lrlg.js +1 -0
  296. package/client/dist/assets/specs-CS091AnA.js +1 -0
  297. package/client/dist/assets/specs-DJ6gmFcK.js +1 -0
  298. package/client/dist/assets/specs-GfCcrBSC.js +1 -0
  299. package/client/dist/assets/specs-xQgyc7WL.js +1 -0
  300. package/client/dist/assets/spending-CVH8VREb.js +1 -0
  301. package/client/dist/assets/square-Co6h5vZg.js +1 -0
  302. package/client/dist/assets/tauri-shell-43ixPGfa.js +2 -0
  303. package/client/dist/assets/terminal-0v9sBylD.js +1 -0
  304. package/client/dist/assets/terminal-AbUAmCxE.js +1 -0
  305. package/client/dist/assets/terminal-BJayIbIP.js +1 -0
  306. package/client/dist/assets/terminal-C2RUlXyi.js +1 -0
  307. package/client/dist/assets/terminal-CMmSb_Nj.js +1 -0
  308. package/client/dist/assets/terminal-DKWjj7HJ.js +1 -0
  309. package/client/dist/assets/terminal-KlFu7_pV.js +1 -0
  310. package/client/dist/assets/terminal-i99yqFvm.js +1 -0
  311. package/client/dist/assets/tickets-846Oq3i3.js +1 -0
  312. package/client/dist/assets/tickets-B5LJTe_b.js +1 -0
  313. package/client/dist/assets/tickets-Bfo2GGmH.js +1 -0
  314. package/client/dist/assets/tickets-BhdZ1yY2.js +1 -0
  315. package/client/dist/assets/tickets-CgjWJHAW.js +1 -0
  316. package/client/dist/assets/tickets-Ct9DbDUR.js +1 -0
  317. package/client/dist/assets/tickets-rptLEJB1.js +1 -0
  318. package/client/dist/assets/tickets-xQ6DpYdu.js +1 -0
  319. package/client/dist/assets/trending-up-BGvb4zZt.js +1 -0
  320. package/client/dist/assets/undo-6zuS4-sL.js +1 -0
  321. package/client/dist/assets/undo-BeM4gDOP.js +1 -0
  322. package/client/dist/assets/undo-BeppX8xS.js +1 -0
  323. package/client/dist/assets/undo-BqvNZ5MG.js +1 -0
  324. package/client/dist/assets/undo-BzwEPf_k.js +1 -0
  325. package/client/dist/assets/undo-CJ9Cu1NN.js +1 -0
  326. package/client/dist/assets/undo-ds8nMFbX.js +1 -0
  327. package/client/dist/assets/undo-x_gA-knG.js +1 -0
  328. package/client/dist/assets/useDesktop-BuOp2-MR.js +1 -0
  329. package/client/dist/assets/useRuntimeRuns-BRS6ncnO.js +1 -0
  330. package/client/dist/assets/utils-ELimjS2Y.js +1 -0
  331. package/client/dist/assets/wrench-Br2n1Lxd.js +1 -0
  332. package/client/dist/index.html +75 -60
  333. package/docs/ci-cd.md +29 -1
  334. package/docs/cli.md +10 -31
  335. package/docs/codex.md +1 -1
  336. package/docs/creating-specs.md +15 -12
  337. package/docs/customizing.md +16 -13
  338. package/docs/getting-started.md +12 -11
  339. package/docs/guide/de/agents/1-meet-the-agents.md +1 -1
  340. package/docs/guide/de/getting-started/2-installing-and-first-run.md +2 -0
  341. package/docs/guide/de/getting-started/3-try-the-sample-project.md +35 -0
  342. package/docs/guide/de/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
  343. package/docs/guide/de/getting-started/6-universal-search.md +34 -0
  344. package/docs/guide/de/insights/1-analytics-and-cost-tracking.md +20 -6
  345. package/docs/guide/de/insights/2-the-integrated-terminal.md +1 -1
  346. package/docs/guide/de/insights/3-code-explorer.md +1 -1
  347. package/docs/guide/de/integrations/1-ai-providers.md +1 -1
  348. package/docs/guide/de/integrations/2-plugins.md +1 -1
  349. package/docs/guide/de/integrations/3-jira-integration.md +3 -3
  350. package/docs/guide/de/integrations/4-mobile-companion.md +1 -1
  351. package/docs/guide/de/integrations/5-mcp-server.md +1 -1
  352. package/docs/guide/de/integrations/6-agent-chat.md +12 -5
  353. package/docs/guide/de/integrations/8-flow-mode.md +69 -0
  354. package/docs/guide/de/pipeline/1-rails-and-jobs.md +21 -1
  355. package/docs/guide/de/pipeline/2-the-job-detail-view.md +12 -0
  356. package/docs/guide/de/pipeline/3-reviewing-a-delivery.md +43 -0
  357. package/docs/guide/de/pipeline/4-picking-an-engine-per-rail.md +2 -2
  358. package/docs/guide/de/pipeline/5-the-loop-builder.md +1 -1
  359. package/docs/guide/de/settings/1-themes.md +1 -1
  360. package/docs/guide/de/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
  361. package/docs/guide/de/settings/5-project-environment.md +1 -1
  362. package/docs/guide/de/settings/6-updates.md +24 -0
  363. package/docs/guide/de/settings/7-existing-projects.md +33 -0
  364. package/docs/guide/de/settings/8-accessibility.md +23 -0
  365. package/docs/guide/de/specs/1-specs-and-the-backlog.md +41 -3
  366. package/docs/guide/de/specs/2-add-spec-quick-mode.md +1 -1
  367. package/docs/guide/de/specs/3-add-spec-explore-mode.md +1 -1
  368. package/docs/guide/en/agents/1-meet-the-agents.md +1 -1
  369. package/docs/guide/en/getting-started/1-what-is-specrails.md +1 -1
  370. package/docs/guide/en/getting-started/2-installing-and-first-run.md +2 -0
  371. package/docs/guide/en/getting-started/3-try-the-sample-project.md +35 -0
  372. package/docs/guide/en/getting-started/5-the-dashboard-tour.md +52 -0
  373. package/docs/guide/en/getting-started/6-universal-search.md +34 -0
  374. package/docs/guide/en/insights/1-analytics-and-cost-tracking.md +24 -10
  375. package/docs/guide/en/insights/2-the-integrated-terminal.md +1 -1
  376. package/docs/guide/en/insights/3-code-explorer.md +5 -5
  377. package/docs/guide/en/integrations/1-ai-providers.md +1 -1
  378. package/docs/guide/en/integrations/2-plugins.md +1 -1
  379. package/docs/guide/en/integrations/3-jira-integration.md +4 -4
  380. package/docs/guide/en/integrations/4-mobile-companion.md +1 -1
  381. package/docs/guide/en/integrations/5-mcp-server.md +4 -4
  382. package/docs/guide/en/integrations/6-agent-chat.md +12 -5
  383. package/docs/guide/en/integrations/8-flow-mode.md +69 -0
  384. package/docs/guide/en/pipeline/1-rails-and-jobs.md +22 -3
  385. package/docs/guide/en/pipeline/2-the-job-detail-view.md +19 -7
  386. package/docs/guide/en/pipeline/3-reviewing-a-delivery.md +43 -0
  387. package/docs/guide/en/pipeline/4-picking-an-engine-per-rail.md +2 -2
  388. package/docs/guide/en/pipeline/5-the-loop-builder.md +2 -2
  389. package/docs/guide/en/settings/1-themes.md +1 -1
  390. package/docs/guide/en/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
  391. package/docs/guide/en/settings/5-project-environment.md +1 -1
  392. package/docs/guide/en/settings/6-updates.md +24 -0
  393. package/docs/guide/en/settings/7-existing-projects.md +33 -0
  394. package/docs/guide/en/settings/8-accessibility.md +23 -0
  395. package/docs/guide/en/specs/1-specs-and-the-backlog.md +42 -6
  396. package/docs/guide/en/specs/2-add-spec-quick-mode.md +1 -1
  397. package/docs/guide/en/specs/3-add-spec-explore-mode.md +2 -2
  398. package/docs/guide/es/agents/1-meet-the-agents.md +1 -1
  399. package/docs/guide/es/agents/2-profiles-and-the-balanced-default.md +1 -1
  400. package/docs/guide/es/agents/3-customizing-models-per-agent.md +2 -2
  401. package/docs/guide/es/agents/4-custom-agents-catalog.md +1 -1
  402. package/docs/guide/es/getting-started/1-what-is-specrails.md +3 -3
  403. package/docs/guide/es/getting-started/2-installing-and-first-run.md +2 -0
  404. package/docs/guide/es/getting-started/3-try-the-sample-project.md +35 -0
  405. package/docs/guide/es/getting-started/5-the-dashboard-tour.md +52 -0
  406. package/docs/guide/es/getting-started/6-universal-search.md +34 -0
  407. package/docs/guide/es/insights/1-analytics-and-cost-tracking.md +26 -12
  408. package/docs/guide/es/insights/2-the-integrated-terminal.md +1 -1
  409. package/docs/guide/es/insights/3-code-explorer.md +5 -5
  410. package/docs/guide/es/integrations/1-ai-providers.md +1 -1
  411. package/docs/guide/es/integrations/2-plugins.md +1 -1
  412. package/docs/guide/es/integrations/3-jira-integration.md +4 -4
  413. package/docs/guide/es/integrations/4-mobile-companion.md +1 -1
  414. package/docs/guide/es/integrations/5-mcp-server.md +4 -4
  415. package/docs/guide/es/integrations/6-agent-chat.md +14 -7
  416. package/docs/guide/es/integrations/7-local-engines.md +1 -1
  417. package/docs/guide/es/integrations/8-flow-mode.md +69 -0
  418. package/docs/guide/es/pipeline/1-rails-and-jobs.md +33 -13
  419. package/docs/guide/es/pipeline/2-the-job-detail-view.md +38 -26
  420. package/docs/guide/es/pipeline/3-reviewing-a-delivery.md +43 -0
  421. package/docs/guide/es/pipeline/4-picking-an-engine-per-rail.md +2 -2
  422. package/docs/guide/es/pipeline/5-the-loop-builder.md +4 -4
  423. package/docs/guide/es/settings/1-themes.md +1 -1
  424. package/docs/guide/es/settings/3-pipeline-telemetry-and-diagnostics.md +10 -10
  425. package/docs/guide/es/settings/5-project-environment.md +1 -1
  426. package/docs/guide/es/settings/6-updates.md +24 -0
  427. package/docs/guide/es/settings/7-existing-projects.md +33 -0
  428. package/docs/guide/es/settings/8-accessibility.md +23 -0
  429. package/docs/guide/es/specs/1-specs-and-the-backlog.md +43 -7
  430. package/docs/guide/es/specs/2-add-spec-quick-mode.md +1 -1
  431. package/docs/guide/es/specs/3-add-spec-explore-mode.md +3 -3
  432. package/docs/guide/fr/agents/1-meet-the-agents.md +1 -1
  433. package/docs/guide/fr/getting-started/2-installing-and-first-run.md +2 -0
  434. package/docs/guide/fr/getting-started/3-try-the-sample-project.md +35 -0
  435. package/docs/guide/fr/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
  436. package/docs/guide/fr/getting-started/6-universal-search.md +34 -0
  437. package/docs/guide/fr/insights/1-analytics-and-cost-tracking.md +18 -4
  438. package/docs/guide/fr/insights/2-the-integrated-terminal.md +1 -1
  439. package/docs/guide/fr/insights/3-code-explorer.md +1 -1
  440. package/docs/guide/fr/integrations/1-ai-providers.md +1 -1
  441. package/docs/guide/fr/integrations/2-plugins.md +1 -1
  442. package/docs/guide/fr/integrations/3-jira-integration.md +3 -3
  443. package/docs/guide/fr/integrations/4-mobile-companion.md +1 -1
  444. package/docs/guide/fr/integrations/5-mcp-server.md +1 -1
  445. package/docs/guide/fr/integrations/6-agent-chat.md +11 -4
  446. package/docs/guide/fr/integrations/8-flow-mode.md +69 -0
  447. package/docs/guide/fr/pipeline/1-rails-and-jobs.md +21 -1
  448. package/docs/guide/fr/pipeline/2-the-job-detail-view.md +12 -0
  449. package/docs/guide/fr/pipeline/3-reviewing-a-delivery.md +43 -0
  450. package/docs/guide/fr/pipeline/4-picking-an-engine-per-rail.md +2 -2
  451. package/docs/guide/fr/pipeline/5-the-loop-builder.md +1 -1
  452. package/docs/guide/fr/settings/1-themes.md +1 -1
  453. package/docs/guide/fr/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
  454. package/docs/guide/fr/settings/5-project-environment.md +1 -1
  455. package/docs/guide/fr/settings/6-updates.md +24 -0
  456. package/docs/guide/fr/settings/7-existing-projects.md +33 -0
  457. package/docs/guide/fr/settings/8-accessibility.md +23 -0
  458. package/docs/guide/fr/specs/1-specs-and-the-backlog.md +41 -3
  459. package/docs/guide/fr/specs/2-add-spec-quick-mode.md +1 -1
  460. package/docs/guide/fr/specs/3-add-spec-explore-mode.md +1 -1
  461. package/docs/guide/it/agents/1-meet-the-agents.md +1 -1
  462. package/docs/guide/it/getting-started/2-installing-and-first-run.md +2 -0
  463. package/docs/guide/it/getting-started/3-try-the-sample-project.md +35 -0
  464. package/docs/guide/it/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
  465. package/docs/guide/it/getting-started/6-universal-search.md +34 -0
  466. package/docs/guide/it/insights/1-analytics-and-cost-tracking.md +18 -4
  467. package/docs/guide/it/insights/2-the-integrated-terminal.md +1 -1
  468. package/docs/guide/it/insights/3-code-explorer.md +1 -1
  469. package/docs/guide/it/integrations/1-ai-providers.md +1 -1
  470. package/docs/guide/it/integrations/2-plugins.md +1 -1
  471. package/docs/guide/it/integrations/3-jira-integration.md +3 -3
  472. package/docs/guide/it/integrations/4-mobile-companion.md +1 -1
  473. package/docs/guide/it/integrations/5-mcp-server.md +1 -1
  474. package/docs/guide/it/integrations/6-agent-chat.md +11 -4
  475. package/docs/guide/it/integrations/8-flow-mode.md +69 -0
  476. package/docs/guide/it/pipeline/1-rails-and-jobs.md +21 -1
  477. package/docs/guide/it/pipeline/2-the-job-detail-view.md +12 -0
  478. package/docs/guide/it/pipeline/3-reviewing-a-delivery.md +43 -0
  479. package/docs/guide/it/pipeline/4-picking-an-engine-per-rail.md +2 -2
  480. package/docs/guide/it/pipeline/5-the-loop-builder.md +1 -1
  481. package/docs/guide/it/settings/1-themes.md +1 -1
  482. package/docs/guide/it/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
  483. package/docs/guide/it/settings/5-project-environment.md +1 -1
  484. package/docs/guide/it/settings/6-updates.md +24 -0
  485. package/docs/guide/it/settings/7-existing-projects.md +33 -0
  486. package/docs/guide/it/settings/8-accessibility.md +23 -0
  487. package/docs/guide/it/specs/1-specs-and-the-backlog.md +41 -3
  488. package/docs/guide/it/specs/2-add-spec-quick-mode.md +1 -1
  489. package/docs/guide/it/specs/3-add-spec-explore-mode.md +1 -1
  490. package/docs/guide/ja/agents/1-meet-the-agents.md +1 -1
  491. package/docs/guide/ja/getting-started/2-installing-and-first-run.md +2 -0
  492. package/docs/guide/ja/getting-started/3-try-the-sample-project.md +35 -0
  493. package/docs/guide/ja/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
  494. package/docs/guide/ja/getting-started/6-universal-search.md +34 -0
  495. package/docs/guide/ja/insights/1-analytics-and-cost-tracking.md +18 -4
  496. package/docs/guide/ja/insights/2-the-integrated-terminal.md +1 -1
  497. package/docs/guide/ja/insights/3-code-explorer.md +1 -1
  498. package/docs/guide/ja/integrations/1-ai-providers.md +1 -1
  499. package/docs/guide/ja/integrations/2-plugins.md +1 -1
  500. package/docs/guide/ja/integrations/3-jira-integration.md +3 -3
  501. package/docs/guide/ja/integrations/4-mobile-companion.md +1 -1
  502. package/docs/guide/ja/integrations/5-mcp-server.md +1 -1
  503. package/docs/guide/ja/integrations/6-agent-chat.md +11 -4
  504. package/docs/guide/ja/integrations/8-flow-mode.md +69 -0
  505. package/docs/guide/ja/pipeline/1-rails-and-jobs.md +21 -1
  506. package/docs/guide/ja/pipeline/2-the-job-detail-view.md +12 -0
  507. package/docs/guide/ja/pipeline/3-reviewing-a-delivery.md +43 -0
  508. package/docs/guide/ja/pipeline/4-picking-an-engine-per-rail.md +2 -2
  509. package/docs/guide/ja/pipeline/5-the-loop-builder.md +1 -1
  510. package/docs/guide/ja/settings/1-themes.md +1 -1
  511. package/docs/guide/ja/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
  512. package/docs/guide/ja/settings/5-project-environment.md +1 -1
  513. package/docs/guide/ja/settings/6-updates.md +24 -0
  514. package/docs/guide/ja/settings/7-existing-projects.md +33 -0
  515. package/docs/guide/ja/settings/8-accessibility.md +23 -0
  516. package/docs/guide/ja/specs/1-specs-and-the-backlog.md +41 -3
  517. package/docs/guide/ja/specs/2-add-spec-quick-mode.md +1 -1
  518. package/docs/guide/ja/specs/3-add-spec-explore-mode.md +1 -1
  519. package/docs/guide/pt/agents/1-meet-the-agents.md +1 -1
  520. package/docs/guide/pt/getting-started/2-installing-and-first-run.md +2 -0
  521. package/docs/guide/pt/getting-started/3-try-the-sample-project.md +35 -0
  522. package/docs/guide/pt/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
  523. package/docs/guide/pt/getting-started/6-universal-search.md +34 -0
  524. package/docs/guide/pt/insights/1-analytics-and-cost-tracking.md +18 -4
  525. package/docs/guide/pt/insights/2-the-integrated-terminal.md +1 -1
  526. package/docs/guide/pt/insights/3-code-explorer.md +1 -1
  527. package/docs/guide/pt/integrations/1-ai-providers.md +1 -1
  528. package/docs/guide/pt/integrations/2-plugins.md +1 -1
  529. package/docs/guide/pt/integrations/3-jira-integration.md +3 -3
  530. package/docs/guide/pt/integrations/4-mobile-companion.md +1 -1
  531. package/docs/guide/pt/integrations/5-mcp-server.md +1 -1
  532. package/docs/guide/pt/integrations/6-agent-chat.md +12 -5
  533. package/docs/guide/pt/integrations/8-flow-mode.md +69 -0
  534. package/docs/guide/pt/pipeline/1-rails-and-jobs.md +21 -1
  535. package/docs/guide/pt/pipeline/2-the-job-detail-view.md +12 -0
  536. package/docs/guide/pt/pipeline/3-reviewing-a-delivery.md +43 -0
  537. package/docs/guide/pt/pipeline/4-picking-an-engine-per-rail.md +2 -2
  538. package/docs/guide/pt/pipeline/5-the-loop-builder.md +1 -1
  539. package/docs/guide/pt/settings/1-themes.md +1 -1
  540. package/docs/guide/pt/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
  541. package/docs/guide/pt/settings/5-project-environment.md +1 -1
  542. package/docs/guide/pt/settings/6-updates.md +24 -0
  543. package/docs/guide/pt/settings/7-existing-projects.md +33 -0
  544. package/docs/guide/pt/settings/8-accessibility.md +23 -0
  545. package/docs/guide/pt/specs/1-specs-and-the-backlog.md +41 -3
  546. package/docs/guide/pt/specs/2-add-spec-quick-mode.md +1 -1
  547. package/docs/guide/pt/specs/3-add-spec-explore-mode.md +1 -1
  548. package/docs/guide/zh/agents/1-meet-the-agents.md +1 -1
  549. package/docs/guide/zh/getting-started/2-installing-and-first-run.md +2 -0
  550. package/docs/guide/zh/getting-started/3-try-the-sample-project.md +35 -0
  551. package/docs/guide/zh/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
  552. package/docs/guide/zh/getting-started/6-universal-search.md +34 -0
  553. package/docs/guide/zh/insights/1-analytics-and-cost-tracking.md +18 -4
  554. package/docs/guide/zh/insights/2-the-integrated-terminal.md +1 -1
  555. package/docs/guide/zh/insights/3-code-explorer.md +1 -1
  556. package/docs/guide/zh/integrations/1-ai-providers.md +1 -1
  557. package/docs/guide/zh/integrations/2-plugins.md +1 -1
  558. package/docs/guide/zh/integrations/3-jira-integration.md +3 -3
  559. package/docs/guide/zh/integrations/4-mobile-companion.md +1 -1
  560. package/docs/guide/zh/integrations/5-mcp-server.md +1 -1
  561. package/docs/guide/zh/integrations/6-agent-chat.md +11 -4
  562. package/docs/guide/zh/integrations/8-flow-mode.md +69 -0
  563. package/docs/guide/zh/pipeline/1-rails-and-jobs.md +21 -1
  564. package/docs/guide/zh/pipeline/2-the-job-detail-view.md +12 -0
  565. package/docs/guide/zh/pipeline/3-reviewing-a-delivery.md +43 -0
  566. package/docs/guide/zh/pipeline/4-picking-an-engine-per-rail.md +2 -2
  567. package/docs/guide/zh/pipeline/5-the-loop-builder.md +1 -1
  568. package/docs/guide/zh/settings/1-themes.md +1 -1
  569. package/docs/guide/zh/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
  570. package/docs/guide/zh/settings/5-project-environment.md +1 -1
  571. package/docs/guide/zh/settings/6-updates.md +24 -0
  572. package/docs/guide/zh/settings/7-existing-projects.md +33 -0
  573. package/docs/guide/zh/settings/8-accessibility.md +23 -0
  574. package/docs/guide/zh/specs/1-specs-and-the-backlog.md +41 -3
  575. package/docs/guide/zh/specs/2-add-spec-quick-mode.md +1 -1
  576. package/docs/guide/zh/specs/3-add-spec-explore-mode.md +1 -1
  577. package/docs/internals/README.md +8 -0
  578. package/docs/internals/adding-a-provider.md +19 -2
  579. package/docs/internals/agent-actions-audit.md +101 -0
  580. package/docs/internals/agent-sessions.md +36 -1
  581. package/docs/internals/api-reference.md +190 -45
  582. package/docs/internals/architecture.md +53 -47
  583. package/docs/internals/companion-inbox-decisions.md +42 -0
  584. package/docs/internals/companion-rails-as-loops-contract.md +17 -6
  585. package/docs/internals/configuration.md +140 -9
  586. package/docs/internals/core-runtime-updates.md +4 -4
  587. package/docs/internals/existing-project-anchoring.md +168 -0
  588. package/docs/internals/flow-mode.md +668 -0
  589. package/docs/internals/legacy-implementation-notes.md +13 -0
  590. package/docs/internals/local-testing-feedback-2026-10.md +210 -0
  591. package/docs/internals/mcp-mission-audit.md +4 -0
  592. package/docs/internals/mission-rail-cards.md +10 -5
  593. package/docs/internals/mission-read-only-policy.md +152 -0
  594. package/docs/internals/modal-standard.md +181 -0
  595. package/docs/internals/openspec-workflow.md +32 -0
  596. package/docs/internals/operations-runbook.md +30 -0
  597. package/docs/internals/profiles.md +6 -3
  598. package/docs/internals/programmatic-agent-runtime.md +8 -0
  599. package/docs/internals/project-builder.md +1 -1
  600. package/docs/internals/review-packet.md +161 -9
  601. package/docs/internals/safe-pr-review-flow.md +135 -6
  602. package/docs/internals/source-map.md +413 -18
  603. package/docs/internals/spec-addenda.md +10 -0
  604. package/docs/internals/spec-triage.md +140 -0
  605. package/docs/internals/visual-design-audit.md +15 -2
  606. package/docs/local-providers.md +3 -0
  607. package/docs/mcp.md +21 -3
  608. package/docs/platforms/macos.md +1 -1
  609. package/docs/platforms/windows.md +2 -2
  610. package/docs/running-pipelines.md +22 -6
  611. package/docs/tracking-cost.md +54 -10
  612. package/local-runner/dist/specrails-local-runner.js +3851 -1178
  613. package/mcp-bridge/dist/specrails-mcp.js +3864 -1143
  614. package/package.json +10 -9
  615. package/server/dist/agent-mcp-config.js +37 -1
  616. package/server/dist/api-version.js +19 -0
  617. package/server/dist/command-resolver.js +4 -2
  618. package/server/dist/core-compat.js +1 -1
  619. package/server/dist/core-execution.js +2 -1
  620. package/server/dist/core-update-manager.js +71 -13
  621. package/server/dist/db/job-search.js +248 -0
  622. package/server/dist/db/jobs.js +6 -0
  623. package/server/dist/db/migrations.js +239 -0
  624. package/server/dist/db.js +9 -2
  625. package/server/dist/desktop-db.js +99 -5
  626. package/server/dist/desktop-router.js +126 -13
  627. package/server/dist/docs-router.js +67 -1
  628. package/server/dist/feature-flags.js +22 -0
  629. package/server/dist/index.js +30 -15
  630. package/server/dist/jira/jira-adf.js +13 -1
  631. package/server/dist/jira/jira-clarifications.js +146 -0
  632. package/server/dist/jira/jira-client.js +8 -1
  633. package/server/dist/jira/jira-db.js +41 -0
  634. package/server/dist/jira/jira-sync-manager.js +328 -25
  635. package/server/dist/mcp/guide.js +17 -7
  636. package/server/dist/mcp/tools/agents.js +1 -1
  637. package/server/dist/mcp/tools/analytics.js +15 -3
  638. package/server/dist/mcp/tools/app-settings.js +14 -1
  639. package/server/dist/mcp/tools/chat.js +1 -1
  640. package/server/dist/mcp/tools/env.js +4 -2
  641. package/server/dist/mcp/tools/jobs.js +96 -7
  642. package/server/dist/mcp/tools/loops.js +1 -1
  643. package/server/dist/mcp/tools/meta.js +10 -13
  644. package/server/dist/mcp/tools/rails.js +15 -1
  645. package/server/dist/mcp/tools/setup.js +1 -1
  646. package/server/dist/mcp/tools/specs.js +8 -5
  647. package/server/dist/mcp/tools/support.js +6 -3
  648. package/server/dist/mcp/tools/types.js +38 -1
  649. package/server/dist/mobile/mobile-admin-router.js +0 -16
  650. package/server/dist/mobile/mobile-gateway.js +0 -18
  651. package/server/dist/mobile/mobile-inbox.js +240 -0
  652. package/server/dist/mobile/mobile-missions.js +6 -8
  653. package/server/dist/mobile/mobile-router.js +9 -9
  654. package/server/dist/mobile/mobile-webrtc-peer.js +4 -54
  655. package/server/dist/mobile/mobile-ws.js +27 -4
  656. package/server/dist/modules/accounting/runtime/ai-invocations.js +4 -0
  657. package/server/dist/modules/accounting/runtime/decision-times.js +102 -0
  658. package/server/dist/modules/accounting/runtime/loop-economics.js +284 -0
  659. package/server/dist/modules/accounting/runtime/spending.js +7 -2
  660. package/server/dist/modules/accounting/runtime/what-if.js +87 -0
  661. package/server/dist/modules/agent-runtime/runtime/agent-runtime-bridge.js +86 -5
  662. package/server/dist/modules/agent-runtime/runtime/agent-runtime-controls.js +28 -2
  663. package/server/dist/modules/agent-runtime/runtime/agent-runtime-metrics.js +15 -2
  664. package/server/dist/modules/agent-runtime/runtime/agent-runtime-settings-router.js +21 -2
  665. package/server/dist/modules/agent-runtime/runtime/core-capabilities.js +55 -0
  666. package/server/dist/modules/agent-sessions/adapters/host-process.js +1 -1
  667. package/server/dist/modules/agent-sessions/domain/availability.js +16 -0
  668. package/server/dist/modules/agent-sessions/domain/protocol.js +8 -1
  669. package/server/dist/modules/agent-sessions/index.js +3 -1
  670. package/server/dist/modules/agent-sessions/runtime/core-sessions-availability.js +16 -0
  671. package/server/dist/modules/agents/runtime/agent-refine-manager.js +3 -1
  672. package/server/dist/modules/agents/runtime/agent-store.js +60 -73
  673. package/server/dist/modules/audit/adapters/http.js +66 -0
  674. package/server/dist/modules/audit/adapters/runtime.js +60 -0
  675. package/server/dist/modules/audit/adapters/sqlite.js +73 -0
  676. package/server/dist/modules/audit/application.js +190 -0
  677. package/server/dist/modules/audit/domain.js +434 -0
  678. package/server/dist/modules/audit/index.js +27 -0
  679. package/server/dist/modules/audit/ports.js +2 -0
  680. package/server/dist/modules/browser/runtime/browser-capture-manager.js +18 -141
  681. package/server/dist/modules/browser/runtime/browser-capture-types.js +1 -10
  682. package/server/dist/modules/browser/runtime/browser-playwright.js +0 -19
  683. package/server/dist/modules/code/runtime/file-provenance.js +23 -0
  684. package/server/dist/modules/conversations/runtime/chat-manager.js +5 -2
  685. package/server/dist/modules/delivery/adapters/decisions/chains.js +1 -0
  686. package/server/dist/modules/delivery/adapters/decisions/create.js +19 -1
  687. package/server/dist/modules/delivery/adapters/decisions/discard.js +2 -0
  688. package/server/dist/modules/delivery/adapters/decisions/local-changes.js +427 -0
  689. package/server/dist/modules/delivery/adapters/decisions/merge-local.js +80 -6
  690. package/server/dist/modules/delivery/adapters/decisions/observations.js +5 -0
  691. package/server/dist/modules/delivery/adapters/decisions/ownership.js +2 -1
  692. package/server/dist/modules/delivery/adapters/decisions/transitions.js +9 -0
  693. package/server/dist/modules/delivery/adapters/review-wip-store.js +37 -0
  694. package/server/dist/modules/delivery/domain/review-wip.js +71 -0
  695. package/server/dist/modules/delivery/index.js +9 -1
  696. package/server/dist/modules/delivery/runtime/delivery-changes.js +355 -0
  697. package/server/dist/modules/delivery/runtime/delivery-evidence.js +249 -8
  698. package/server/dist/modules/delivery/runtime/flow-review-legacy.js +99 -0
  699. package/server/dist/modules/delivery/runtime/flow-review-outcome.js +107 -0
  700. package/server/dist/modules/delivery/runtime/flow-worktree-handoff.js +32 -0
  701. package/server/dist/modules/delivery/runtime/flow-worktree-return.js +87 -0
  702. package/server/dist/modules/delivery/runtime/isolated-worktree.js +380 -0
  703. package/server/dist/modules/delivery/runtime/local-restore-branch.js +325 -0
  704. package/server/dist/modules/delivery/runtime/local-restore-resolver.js +48 -0
  705. package/server/dist/modules/delivery/runtime/local-stash.js +423 -0
  706. package/server/dist/modules/delivery/runtime/multi-repo-execution.js +27 -1
  707. package/server/dist/modules/delivery/runtime/phase3-harvest.js +40 -0
  708. package/server/dist/modules/delivery/runtime/pr-body.js +50 -0
  709. package/server/dist/modules/delivery/runtime/rail-isolated-launch.js +169 -166
  710. package/server/dist/modules/delivery/runtime/rail-launch-parser.js +5 -2
  711. package/server/dist/modules/delivery/runtime/rail-pr-decision.js +7 -1
  712. package/server/dist/modules/delivery/runtime/rail-pr-store.js +193 -12
  713. package/server/dist/modules/delivery/runtime/rails-router.js +267 -5
  714. package/server/dist/modules/delivery/runtime/review-brief.js +208 -0
  715. package/server/dist/modules/delivery/runtime/review-packet.js +41 -2
  716. package/server/dist/modules/delivery/runtime/review-wip-gate.js +67 -0
  717. package/server/dist/modules/delivery/runtime/run-records.js +267 -0
  718. package/server/dist/modules/delivery/runtime/run-review-diagnosis.js +102 -0
  719. package/server/dist/modules/execution/adapters/budget-storage.js +76 -0
  720. package/server/dist/modules/execution/application/enforce-budget.js +17 -2
  721. package/server/dist/modules/execution/domain/agent-env.js +98 -0
  722. package/server/dist/modules/execution/domain/daily-budget.js +36 -0
  723. package/server/dist/modules/execution/domain/spend-caps.js +166 -0
  724. package/server/dist/modules/execution/index.js +34 -1
  725. package/server/dist/modules/execution/runtime/budget-overview.js +76 -0
  726. package/server/dist/modules/execution/runtime/daily-budget-gate.js +86 -0
  727. package/server/dist/modules/execution/runtime/interactive-job-session.js +8 -0
  728. package/server/dist/modules/execution/runtime/launch-forecast.js +33 -0
  729. package/server/dist/modules/execution/runtime/queue-manager.js +54 -15
  730. package/server/dist/modules/execution/runtime/run-duration-stats.js +31 -13
  731. package/server/dist/modules/flow/adapters/bindings.js +1089 -0
  732. package/server/dist/modules/flow/adapters/http.js +147 -0
  733. package/server/dist/modules/flow/adapters/sqlite.js +121 -0
  734. package/server/dist/modules/flow/application.js +805 -0
  735. package/server/dist/modules/flow/domain.js +790 -0
  736. package/server/dist/modules/flow/index.js +34 -0
  737. package/server/dist/modules/flow/ports.js +2 -0
  738. package/server/dist/modules/inbox/adapters/http.js +21 -0
  739. package/server/dist/modules/inbox/adapters/project-source.js +233 -0
  740. package/server/dist/modules/inbox/application.js +28 -0
  741. package/server/dist/modules/inbox/domain.js +43 -0
  742. package/server/dist/modules/inbox/index.js +10 -0
  743. package/server/dist/modules/inbox/ports.js +2 -0
  744. package/server/dist/modules/loops/runtime/loop-definition-run.js +9 -0
  745. package/server/dist/modules/loops/runtime/loop-definition.js +5 -2
  746. package/server/dist/modules/loops/runtime/loop-executors.js +90 -9
  747. package/server/dist/modules/loops/runtime/loop-factory.js +30 -2
  748. package/server/dist/modules/loops/runtime/loop-flow-spec-recipe.js +166 -0
  749. package/server/dist/modules/loops/runtime/loop-graph.js +1 -1
  750. package/server/dist/modules/loops/runtime/loop-role-engines.js +4 -1
  751. package/server/dist/modules/loops/runtime/loop-run-manager.js +267 -10
  752. package/server/dist/modules/loops/runtime/loop-runs-store.js +21 -5
  753. package/server/dist/modules/loops/runtime/loop-templates.js +55 -12
  754. package/server/dist/modules/missions/runtime/agent-chat-manager.js +283 -20
  755. package/server/dist/modules/missions/runtime/agent-chat-router.js +96 -21
  756. package/server/dist/modules/missions/runtime/agent-failure-briefing.js +11 -3
  757. package/server/dist/modules/missions/runtime/agent-fence-promotion.js +9 -1
  758. package/server/dist/modules/missions/runtime/agent-flow-prompt.js +64 -0
  759. package/server/dist/modules/missions/runtime/agent-input-store.js +9 -4
  760. package/server/dist/modules/missions/runtime/agent-operator-prompt.js +100 -14
  761. package/server/dist/modules/missions/runtime/agent-session-store.js +88 -27
  762. package/server/dist/modules/missions/runtime/core-session-runner.js +89 -9
  763. package/server/dist/modules/missions/runtime/flow-turn-context.js +17 -0
  764. package/server/dist/modules/missions/runtime/mission-core-sessions.js +295 -55
  765. package/server/dist/modules/missions/runtime/mission-run-notify.js +2 -0
  766. package/server/dist/modules/missions/runtime/mission-session-projector.js +56 -19
  767. package/server/dist/modules/missions/runtime/mission-tool-policy.js +47 -0
  768. package/server/dist/modules/onboarding/adapters/http.js +78 -0
  769. package/server/dist/modules/onboarding/adapters/providers.js +41 -0
  770. package/server/dist/modules/onboarding/adapters/runtime.js +130 -0
  771. package/server/dist/modules/onboarding/application.js +133 -0
  772. package/server/dist/modules/onboarding/catalog.js +217 -0
  773. package/server/dist/modules/onboarding/domain.js +102 -0
  774. package/server/dist/modules/onboarding/index.js +20 -0
  775. package/server/dist/modules/onboarding/ports.js +2 -0
  776. package/server/dist/modules/project-rules/adapters/http.js +91 -0
  777. package/server/dist/modules/project-rules/domain.js +122 -0
  778. package/server/dist/modules/project-rules/runtime/rules-inventory-runs.js +97 -0
  779. package/server/dist/modules/project-rules/runtime/rules-store.js +109 -0
  780. package/server/dist/modules/project-settings/adapters/http.js +13 -0
  781. package/server/dist/modules/project-settings/adapters/sqlite.js +78 -8
  782. package/server/dist/modules/project-settings/domain.js +47 -1
  783. package/server/dist/modules/project-settings/index.js +7 -1
  784. package/server/dist/modules/recovery/adapters/sqlite.js +28 -0
  785. package/server/dist/modules/recovery/domain.js +162 -0
  786. package/server/dist/modules/recovery/index.js +16 -0
  787. package/server/dist/modules/specs/adapters/timeline-http.js +101 -0
  788. package/server/dist/modules/specs/domain/handoff-labels.js +371 -0
  789. package/server/dist/modules/specs/domain/handoff.js +260 -0
  790. package/server/dist/modules/specs/domain/non-goals.js +101 -0
  791. package/server/dist/modules/specs/domain/timeline.js +164 -0
  792. package/server/dist/modules/specs/domain/triage.js +320 -0
  793. package/server/dist/modules/specs/runtime/contract-refine-runner.js +3 -2
  794. package/server/dist/modules/specs/runtime/generated-spec-parser.js +75 -0
  795. package/server/dist/modules/specs/runtime/proposal-manager.js +4 -3
  796. package/server/dist/modules/specs/runtime/smash-runner.js +2 -1
  797. package/server/dist/modules/specs/runtime/spec-addenda.js +31 -0
  798. package/server/dist/modules/specs/runtime/spec-draft-parser.js +6 -1
  799. package/server/dist/modules/specs/runtime/spec-generation.js +431 -0
  800. package/server/dist/modules/specs/runtime/spec-handoff.js +103 -0
  801. package/server/dist/modules/specs/runtime/spec-history.js +376 -0
  802. package/server/dist/modules/specs/runtime/spec-launcher-manager.js +4 -3
  803. package/server/dist/modules/specs/runtime/spec-search.js +117 -0
  804. package/server/dist/modules/specs/runtime/ticket-store.js +47 -2
  805. package/server/dist/modules/specs/runtime/ticket-trash-service.js +62 -0
  806. package/server/dist/modules/specs/runtime/ticket-trash.js +193 -0
  807. package/server/dist/modules/specs/runtime/triage-runner.js +171 -0
  808. package/server/dist/modules/specs/runtime/triage.js +365 -0
  809. package/server/dist/modules/terminals/domain/app-urls.js +96 -0
  810. package/server/dist/modules/terminals/runtime/app-urls.js +77 -0
  811. package/server/dist/modules/terminals/runtime/background-process-service.js +25 -28
  812. package/server/dist/project-env.js +60 -0
  813. package/server/dist/project-git.js +65 -0
  814. package/server/dist/project-registry.js +264 -27
  815. package/server/dist/project-router-background-processes.js +27 -3
  816. package/server/dist/project-router-git.js +30 -0
  817. package/server/dist/project-router-helpers.js +5 -30
  818. package/server/dist/project-router-jobs.js +49 -1
  819. package/server/dist/project-router-loop-runs.js +72 -2
  820. package/server/dist/project-router-rules.js +54 -0
  821. package/server/dist/project-router-search.js +52 -0
  822. package/server/dist/project-router-settings.js +6 -0
  823. package/server/dist/project-router-setup.js +1 -1
  824. package/server/dist/project-router-spending.js +138 -0
  825. package/server/dist/project-router-tickets.js +246 -427
  826. package/server/dist/project-router.js +7 -0
  827. package/server/dist/providers/claude-adapter.js +25 -3
  828. package/server/dist/providers/codex-adapter.js +9 -1
  829. package/server/dist/providers/gemini-adapter.js +6 -1
  830. package/server/dist/providers/kimi-adapter.js +2 -0
  831. package/server/dist/providers/local-adapter.js +2 -0
  832. package/server/dist/providers/runtime.js +8 -0
  833. package/server/dist/schemas/agent-runtime.schema.json +3 -1
  834. package/server/dist/schemas/workflow-definition.schema.json +1 -0
  835. package/server/dist/setup-manager.js +19 -1
  836. package/server/dist/transient-children.js +25 -8
  837. package/server/dist/update-channel.js +21 -0
  838. package/server/dist/util/search-snippet.js +74 -0
  839. package/server/dist/worktree-manager.js +19 -8
  840. package/client/dist/assets/ActivityFeedPage-Dtp7EyHc.js +0 -1
  841. package/client/dist/assets/AgentBrowserCapture-CLqlEFw8.js +0 -1
  842. package/client/dist/assets/AgentModeAnalyticsPane-B8_hM3Tw.js +0 -2
  843. package/client/dist/assets/AgentModeCodePane-CNF8ZNjE.js +0 -2
  844. package/client/dist/assets/AgentModeJobsPane-CJpJbO9m.js +0 -1
  845. package/client/dist/assets/AgentsPage-BC8XSR79.js +0 -120
  846. package/client/dist/assets/AnalyticsPage-Cdv4jLtW.js +0 -1
  847. package/client/dist/assets/BarChart-BDMqVFJy.js +0 -55
  848. package/client/dist/assets/CodePage-DI1kegAr.js +0 -3
  849. package/client/dist/assets/DesktopAnalyticsPage-Bdp8E8U6.js +0 -1
  850. package/client/dist/assets/DocsDialog-Bm4RS7FX.js +0 -11
  851. package/client/dist/assets/DocsPage-DihYcU8r.js +0 -11
  852. package/client/dist/assets/ExportDropdown-Bb1lHx3r.js +0 -1
  853. package/client/dist/assets/IntegrationsPage-EAipiDWm.js +0 -1
  854. package/client/dist/assets/InteractiveJobComposer-BO6ASN-2.js +0 -19
  855. package/client/dist/assets/JobDetailModal-CuPYq7tP.js +0 -1
  856. package/client/dist/assets/JobDetailPage-BusMjJi9.js +0 -1
  857. package/client/dist/assets/JobsPage-C0QbsF2d.js +0 -1
  858. package/client/dist/assets/LoopBuilderPage-B7TlU4iS.js +0 -1
  859. package/client/dist/assets/LoopPreviewModal-BRWtXOD2.js +0 -1
  860. package/client/dist/assets/LoopsPage-C4q1DmCE.js +0 -2
  861. package/client/dist/assets/MinimizedChatsContext-DHfigjHS.js +0 -1
  862. package/client/dist/assets/PluginsPage-Z1JHSMdR.js +0 -2
  863. package/client/dist/assets/ProjectSettingsDialog-BUNj0tvN.js +0 -1
  864. package/client/dist/assets/RepositoryDeliveries-B4ybHOyB.js +0 -5
  865. package/client/dist/assets/ReviewPacketPage-hwfPNjyy.js +0 -4
  866. package/client/dist/assets/TemplatePreviewModal-V7FpMWuw.js +0 -1
  867. package/client/dist/assets/TicketDetailModalContext-Dkwo2cDs.js +0 -16
  868. package/client/dist/assets/Trans-BbFxRFtR.js +0 -1
  869. package/client/dist/assets/activity-B-rp4h_v.js +0 -1
  870. package/client/dist/assets/activity-C6kJpm9q.js +0 -1
  871. package/client/dist/assets/activity-CGx4kb_j.js +0 -1
  872. package/client/dist/assets/activity-CnoX2bH7.js +0 -1
  873. package/client/dist/assets/activity-DAyekdlt.js +0 -1
  874. package/client/dist/assets/activity-DCxtpT7j.js +0 -1
  875. package/client/dist/assets/activity-DiyjsgQV.js +0 -1
  876. package/client/dist/assets/activity-JzwRaWPD.js +0 -1
  877. package/client/dist/assets/addspec-BOvgmcgk.js +0 -1
  878. package/client/dist/assets/addspec-Clmyfn_R.js +0 -1
  879. package/client/dist/assets/addspec-CsNaBpHp.js +0 -1
  880. package/client/dist/assets/addspec-D2tvWmmV.js +0 -1
  881. package/client/dist/assets/addspec-D3nFwvD0.js +0 -1
  882. package/client/dist/assets/addspec-DVLEhK3w.js +0 -1
  883. package/client/dist/assets/addspec-DXbK-tb0.js +0 -1
  884. package/client/dist/assets/addspec-OHG8DFEn.js +0 -1
  885. package/client/dist/assets/agent-5bSixVzz.js +0 -1
  886. package/client/dist/assets/agent-BR4EHfhq.js +0 -1
  887. package/client/dist/assets/agent-C0IKkJP8.js +0 -1
  888. package/client/dist/assets/agent-C7li9ayC.js +0 -1
  889. package/client/dist/assets/agent-D0dRmEen.js +0 -1
  890. package/client/dist/assets/agent-DZVGHm7H.js +0 -1
  891. package/client/dist/assets/agent-Dip4h2YE.js +0 -1
  892. package/client/dist/assets/agent-Pp-P-n1p.js +0 -1
  893. package/client/dist/assets/agentRuntime-BxF81z52.js +0 -1
  894. package/client/dist/assets/agentRuntime-BxYS5V7u.js +0 -1
  895. package/client/dist/assets/agentRuntime-Dc9HG3BA.js +0 -1
  896. package/client/dist/assets/agents-B6ZsnARo.js +0 -1
  897. package/client/dist/assets/agents-BORdhe0K.js +0 -1
  898. package/client/dist/assets/agents-C6aq9Oqs.js +0 -1
  899. package/client/dist/assets/agents-Cbsc4bcX.js +0 -1
  900. package/client/dist/assets/agents-D0uYR6hq.js +0 -1
  901. package/client/dist/assets/agents-Doe1sHY5.js +0 -1
  902. package/client/dist/assets/agents-DyNi_I9m.js +0 -1
  903. package/client/dist/assets/agents-StKxiTg0.js +0 -1
  904. package/client/dist/assets/agentstudio-7cYCXn-L.js +0 -1
  905. package/client/dist/assets/agentstudio-BHWQh8G3.js +0 -1
  906. package/client/dist/assets/agentstudio-BjnWHyRs.js +0 -1
  907. package/client/dist/assets/agentstudio-BkV8vcK4.js +0 -1
  908. package/client/dist/assets/agentstudio-BzugqB_N.js +0 -1
  909. package/client/dist/assets/agentstudio-CWbp7KvH.js +0 -1
  910. package/client/dist/assets/agentstudio-DG6plf5o.js +0 -1
  911. package/client/dist/assets/agentstudio-DkZVF-Cc.js +0 -1
  912. package/client/dist/assets/analytics-B1DIQd4m.js +0 -1
  913. package/client/dist/assets/analytics-BAIZ9vE_.js +0 -1
  914. package/client/dist/assets/analytics-BTqgmgBd.js +0 -1
  915. package/client/dist/assets/analytics-BWynXPEm.js +0 -1
  916. package/client/dist/assets/analytics-DGcUsQ44.js +0 -1
  917. package/client/dist/assets/analytics-GnSnpJ4W.js +0 -1
  918. package/client/dist/assets/analytics-TWgYaoO0.js +0 -1
  919. package/client/dist/assets/analytics-kJy6Tuko.js +0 -1
  920. package/client/dist/assets/atom-one-dark-qiGhVQxg.js +0 -1
  921. package/client/dist/assets/builder-B9gorTnT.js +0 -1
  922. package/client/dist/assets/builder-Bvw5s3Mi.js +0 -1
  923. package/client/dist/assets/builder-CL5l4dU3.js +0 -1
  924. package/client/dist/assets/builder-CVDTVrQX.js +0 -1
  925. package/client/dist/assets/builder-CpS9liE9.js +0 -1
  926. package/client/dist/assets/builder-DNctIL9Q.js +0 -1
  927. package/client/dist/assets/builder-De2NxX6o.js +0 -1
  928. package/client/dist/assets/builder-DeYT7Y-m.js +0 -1
  929. package/client/dist/assets/button-4FS1ZDTp.js +0 -1
  930. package/client/dist/assets/chat-D_I7nU5K.js +0 -1
  931. package/client/dist/assets/chevron-up-6EFqEHBj.js +0 -1
  932. package/client/dist/assets/chunk-OB3PAWPO-B1EMk45A.js +0 -3
  933. package/client/dist/assets/clsx-CjueKrWZ.js +0 -1
  934. package/client/dist/assets/code-B37GRg9C.js +0 -1
  935. package/client/dist/assets/code-BBOEZbf9.js +0 -1
  936. package/client/dist/assets/code-BRm-jcyx.js +0 -1
  937. package/client/dist/assets/code-CF7w62CR.js +0 -1
  938. package/client/dist/assets/code-CLuvJt2r.js +0 -1
  939. package/client/dist/assets/code-D0RCm59f.js +0 -1
  940. package/client/dist/assets/code-DaZ-ZwCT.js +0 -1
  941. package/client/dist/assets/code-iIHkGaCL.js +0 -1
  942. package/client/dist/assets/commands-0XjAftla.js +0 -1
  943. package/client/dist/assets/commands-BAWSYHjQ.js +0 -1
  944. package/client/dist/assets/commands-BBwowgiE.js +0 -1
  945. package/client/dist/assets/commands-BacjIZLN.js +0 -1
  946. package/client/dist/assets/commands-Bs62IAZ3.js +0 -1
  947. package/client/dist/assets/commands-CLPdh-Hh.js +0 -1
  948. package/client/dist/assets/commands-DlbFzgrp.js +0 -1
  949. package/client/dist/assets/commands-LjPSsi5F.js +0 -1
  950. package/client/dist/assets/common-Bdi0qN4S.js +0 -1
  951. package/client/dist/assets/common-Bhb9zN1P.js +0 -1
  952. package/client/dist/assets/common-BykKlZg1.js +0 -1
  953. package/client/dist/assets/common-CvnNNSJA.js +0 -1
  954. package/client/dist/assets/common-D5zk_mqq.js +0 -1
  955. package/client/dist/assets/common-DQNO_al5.js +0 -1
  956. package/client/dist/assets/common-Dax30Vmp.js +0 -1
  957. package/client/dist/assets/common-DkllpVSb.js +0 -1
  958. package/client/dist/assets/core-B3mKBIh5.js +0 -1
  959. package/client/dist/assets/dashboard-B1ndRHuC.js +0 -1
  960. package/client/dist/assets/dashboard-BX7KXiqA.js +0 -1
  961. package/client/dist/assets/dashboard-B_BSNxcN.js +0 -1
  962. package/client/dist/assets/dashboard-CCeFN7-V.js +0 -1
  963. package/client/dist/assets/dashboard-CRl0WtFJ.js +0 -1
  964. package/client/dist/assets/dashboard-XGdQ5mjw.js +0 -1
  965. package/client/dist/assets/dashboard-_oltA6Jd.js +0 -1
  966. package/client/dist/assets/dashboard-bAuf5KVk.js +0 -1
  967. package/client/dist/assets/dialog-DtdR05v1.js +0 -45
  968. package/client/dist/assets/dist-js-CJ_2XX1Y.js +0 -1
  969. package/client/dist/assets/event-Bt7f3wXe.js +0 -1
  970. package/client/dist/assets/explore-BG99VGpL.js +0 -1
  971. package/client/dist/assets/explore-C0TjprJW.js +0 -1
  972. package/client/dist/assets/explore-C2dgEo7q.js +0 -1
  973. package/client/dist/assets/explore-C8NDHbob.js +0 -1
  974. package/client/dist/assets/explore-CWWgzQGR.js +0 -1
  975. package/client/dist/assets/explore-CcQXpdtS.js +0 -1
  976. package/client/dist/assets/explore-DgBACn39.js +0 -1
  977. package/client/dist/assets/explore-DsXAgnmJ.js +0 -1
  978. package/client/dist/assets/file-text-C0blZHLh.js +0 -1
  979. package/client/dist/assets/formatDistanceToNow-NjPHBLfB.js +0 -1
  980. package/client/dist/assets/getTimezoneOffsetInMilliseconds-vJ7qUoqN.js +0 -1
  981. package/client/dist/assets/git-branch-yf6LE1Bw.js +0 -1
  982. package/client/dist/assets/index-BgbCbIua.css +0 -2
  983. package/client/dist/assets/index-Ce4yZtKf.js +0 -83
  984. package/client/dist/assets/integrations-BkpRUbvp.js +0 -1
  985. package/client/dist/assets/integrations-Bo8qbJf4.js +0 -1
  986. package/client/dist/assets/integrations-CmSrKzZb.js +0 -1
  987. package/client/dist/assets/integrations-DGtq26Rr.js +0 -1
  988. package/client/dist/assets/integrations-De38GFnQ.js +0 -1
  989. package/client/dist/assets/integrations-Dw6zdtb-.js +0 -1
  990. package/client/dist/assets/integrations-Dwl9KQp0.js +0 -1
  991. package/client/dist/assets/integrations-Refg_d2I.js +0 -1
  992. package/client/dist/assets/jira-B6OYw4CJ.js +0 -1
  993. package/client/dist/assets/jira-BTF6RaOe.js +0 -1
  994. package/client/dist/assets/jira-CEetIB2q.js +0 -1
  995. package/client/dist/assets/jira-CIzsZLw5.js +0 -1
  996. package/client/dist/assets/jira-Daw9tmpI.js +0 -1
  997. package/client/dist/assets/jira-FXr7u2lh.js +0 -1
  998. package/client/dist/assets/jira-LaNQn7yl.js +0 -1
  999. package/client/dist/assets/jira-api-Cabj-H0J.js +0 -1
  1000. package/client/dist/assets/job-time-BCL7wee9.js +0 -1
  1001. package/client/dist/assets/jobs-ARwD85B9.js +0 -1
  1002. package/client/dist/assets/jobs-BMF1w4WT.js +0 -1
  1003. package/client/dist/assets/jobs-CBfzGLwm.js +0 -1
  1004. package/client/dist/assets/jobs-CPjiluBY.js +0 -1
  1005. package/client/dist/assets/jobs-CQQd58pY.js +0 -1
  1006. package/client/dist/assets/jobs-De3EqaO0.js +0 -1
  1007. package/client/dist/assets/jobs-Du9-Ei9a.js +0 -1
  1008. package/client/dist/assets/jobs-qMHbnxwC.js +0 -1
  1009. package/client/dist/assets/layers-BCLTgHXO.js +0 -1
  1010. package/client/dist/assets/loader-circle-BqV9xYGf.js +0 -1
  1011. package/client/dist/assets/loop-layout-CyXj9223.js +0 -7
  1012. package/client/dist/assets/loops-B2PhQLKR.js +0 -1
  1013. package/client/dist/assets/loops-BqbF46st.js +0 -1
  1014. package/client/dist/assets/loops-CINnHbfI.js +0 -1
  1015. package/client/dist/assets/loops-D-3XhH04.js +0 -1
  1016. package/client/dist/assets/loops-DKkEEjZ_.js +0 -1
  1017. package/client/dist/assets/loops-DzWR5-v6.js +0 -1
  1018. package/client/dist/assets/loops-WyWDkhok.js +0 -1
  1019. package/client/dist/assets/loops-scD5fIBf.js +0 -1
  1020. package/client/dist/assets/mcp-6rMoZfEO.js +0 -1
  1021. package/client/dist/assets/mcp-BD8sL5mP.js +0 -1
  1022. package/client/dist/assets/mcp-BkcA3I5s.js +0 -1
  1023. package/client/dist/assets/mcp-CCpSelOh.js +0 -1
  1024. package/client/dist/assets/mcp-CUAN6ORK.js +0 -1
  1025. package/client/dist/assets/mcp-CqbRxRTE.js +0 -1
  1026. package/client/dist/assets/mcp-DP2YfVhO.js +0 -1
  1027. package/client/dist/assets/mcp-DUVQamDz.js +0 -1
  1028. package/client/dist/assets/narration-BEKMVxGm.js +0 -1
  1029. package/client/dist/assets/narration-CjLwGKap.js +0 -1
  1030. package/client/dist/assets/narration-DANWuGsW.js +0 -1
  1031. package/client/dist/assets/narration-DGeEDWiT.js +0 -1
  1032. package/client/dist/assets/narration-DJgpGwIP.js +0 -1
  1033. package/client/dist/assets/narration-DbHnz0qV.js +0 -1
  1034. package/client/dist/assets/narration-bZSsTZG8.js +0 -1
  1035. package/client/dist/assets/narration-i6aKJKEc.js +0 -1
  1036. package/client/dist/assets/nav--u7iPYlS.js +0 -1
  1037. package/client/dist/assets/nav-C5Jgfaby.js +0 -1
  1038. package/client/dist/assets/nav-CAna_Wpt.js +0 -1
  1039. package/client/dist/assets/nav-CCLqeyHo.js +0 -1
  1040. package/client/dist/assets/nav-Cf3c90Jk.js +0 -1
  1041. package/client/dist/assets/nav-DMYQaQjR.js +0 -1
  1042. package/client/dist/assets/nav-Df_PkZ9F.js +0 -1
  1043. package/client/dist/assets/nav-VyNGBJwj.js +0 -1
  1044. package/client/dist/assets/packet-8nn9RsU7.js +0 -1
  1045. package/client/dist/assets/packet-B0H15elv.js +0 -1
  1046. package/client/dist/assets/packet-BQvBgrwh.js +0 -1
  1047. package/client/dist/assets/packet-BR7mO0-a.js +0 -1
  1048. package/client/dist/assets/packet-BgcQ6q_K.js +0 -1
  1049. package/client/dist/assets/packet-D2s92Jnn.js +0 -1
  1050. package/client/dist/assets/packet-YbtcD1HS.js +0 -1
  1051. package/client/dist/assets/packet-c0Qj_9eX.js +0 -1
  1052. package/client/dist/assets/project-repositories-Cnnuj9Ia.js +0 -1
  1053. package/client/dist/assets/rotate-ccw-DalJAQQX.js +0 -1
  1054. package/client/dist/assets/settings-B1NV8Ow9.js +0 -1
  1055. package/client/dist/assets/settings-BQ8XFZeE.js +0 -1
  1056. package/client/dist/assets/settings-BRkxfBbO.js +0 -1
  1057. package/client/dist/assets/settings-C_CcU1dP.js +0 -1
  1058. package/client/dist/assets/settings-Cto9n0eL.js +0 -1
  1059. package/client/dist/assets/settings-Pyw8uYtL.js +0 -1
  1060. package/client/dist/assets/settings-b3HVCNNd.js +0 -1
  1061. package/client/dist/assets/settings-hdive4u6.js +0 -1
  1062. package/client/dist/assets/setup-Be485n2u.js +0 -1
  1063. package/client/dist/assets/setup-CKGUxKr-.js +0 -1
  1064. package/client/dist/assets/setup-Ck1Uwd7_.js +0 -1
  1065. package/client/dist/assets/setup-Cm774a6v.js +0 -1
  1066. package/client/dist/assets/setup-DIqMQpxt.js +0 -1
  1067. package/client/dist/assets/setup-DfCsoNFL.js +0 -1
  1068. package/client/dist/assets/setup-DkeE8mP0.js +0 -1
  1069. package/client/dist/assets/setup-xVntVaz1.js +0 -1
  1070. package/client/dist/assets/specs-Bqvtz2kz.js +0 -1
  1071. package/client/dist/assets/specs-CKes-kz6.js +0 -1
  1072. package/client/dist/assets/specs-CfXxPDNB.js +0 -1
  1073. package/client/dist/assets/specs-CyF9HuTI.js +0 -1
  1074. package/client/dist/assets/specs-DMj035Mt.js +0 -1
  1075. package/client/dist/assets/specs-DfIdoU5L.js +0 -1
  1076. package/client/dist/assets/specs-j5pGLQeU.js +0 -1
  1077. package/client/dist/assets/specs-xW5pkkB7.js +0 -1
  1078. package/client/dist/assets/spending-CQnrWiR3.js +0 -1
  1079. package/client/dist/assets/square-D0JTbRSR.js +0 -1
  1080. package/client/dist/assets/tauri-shell-DE6LfGPw.js +0 -2
  1081. package/client/dist/assets/terminal-BAzpHtpY.js +0 -1
  1082. package/client/dist/assets/terminal-C7dHeR3x.js +0 -1
  1083. package/client/dist/assets/terminal-CMla5Qsz.js +0 -1
  1084. package/client/dist/assets/terminal-CdNXH-n9.js +0 -1
  1085. package/client/dist/assets/terminal-Cw5bZsmV.js +0 -1
  1086. package/client/dist/assets/terminal-DFUP4eNv.js +0 -1
  1087. package/client/dist/assets/terminal-DGqljeK_.js +0 -1
  1088. package/client/dist/assets/terminal-cU70NodO.js +0 -1
  1089. package/client/dist/assets/tickets--tiSOCcn.js +0 -1
  1090. package/client/dist/assets/tickets-BUJ3DMWU.js +0 -1
  1091. package/client/dist/assets/tickets-C1WNPODq.js +0 -1
  1092. package/client/dist/assets/tickets-CDjhWmiE.js +0 -1
  1093. package/client/dist/assets/tickets-CLgPC3uO.js +0 -1
  1094. package/client/dist/assets/tickets-D41ZMQpf.js +0 -1
  1095. package/client/dist/assets/tickets-DEaQC06P.js +0 -1
  1096. package/client/dist/assets/tickets-kcMzbLCp.js +0 -1
  1097. package/client/dist/assets/trash-D8zYUmTg.js +0 -1
  1098. package/client/dist/assets/useDesktop-BjLT0_EE.js +0 -1
  1099. package/client/dist/assets/useRuntimeRuns-C97qEqMg.js +0 -1
  1100. package/client/dist/assets/useSharedWebSocket-Bj4LMp7b.js +0 -2
  1101. package/client/dist/assets/utils-BC4DHlz2.js +0 -1
  1102. package/docs/guide/en/getting-started/4-the-dashboard-tour.md +0 -48
  1103. package/docs/guide/es/getting-started/4-the-dashboard-tour.md +0 -48
  1104. package/server/dist/mobile/mobile-preview-channel.js +0 -179
  1105. package/server/dist/mobile/mobile-preview.js +0 -366
  1106. package/server/dist/modules/browser/domain/preview-origins.js +0 -117
  1107. package/server/dist/modules/browser/runtime/preview-targets.js +0 -80
  1108. /package/client/dist/assets/{atom-one-dark-B-oHczHB.css → DocView-B-oHczHB.css} +0 -0
  1109. /package/docs/guide/de/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
  1110. /package/docs/guide/en/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
  1111. /package/docs/guide/es/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
  1112. /package/docs/guide/fr/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
  1113. /package/docs/guide/it/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
  1114. /package/docs/guide/ja/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
  1115. /package/docs/guide/pt/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
  1116. /package/docs/guide/zh/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
@@ -0,0 +1 @@
1
+ var e={title:`项目构建器`,subtitle:`从想法到里程碑 1 的待办清单`,close:`关闭构建器`,emptyTitle:`描述你的应用想法`,emptyHint:`一两句话就够了——构建器会简短地采访你并提出完整的蓝图。你也可以让它替你决定一切。`,surpriseMe:`给我惊喜`,inputPlaceholder:`一个能……的应用`,createSpecs:`创建规格`,createSpecsHint:`里程碑 1 的规格通过审核后可用`,providerUnavailable:`项目构建器需要具备原生无工具或只读模式的提供商。此提供商在这里不可用。`},t={title:`蓝图`,product:`产品`,coreFlow:`核心流程`,platform:`平台`,stack:`技术栈`,milestones:`里程碑`,milestonesValue:`已规划 {{count}} 个`,assumptions:`假设`,m1Specs:`里程碑 1 规格({{count}})`,dependsOn:`依赖 #{{index}}`,criteriaCount:`{{count}} 条验收标准`,laterMilestones:`后续里程碑`,empty:`蓝图会在对话中逐步填充。`,specsComplete:`已完成`,specsInProgress:`进行中`,specWriting:`撰写中…`,specPendingBody:`尚未撰写`},n={title:`创建项目`,description:`确认之前不会写入磁盘。仓库保持纯净——Specrails 的产物存放在仓库之外。`,nameLabel:`项目名称`,locationLabel:`位置`,locationHint:`将在此创建一个新文件夹(必须为空或不存在)。`,providersLabel:`AI 提供商`,githubLabel:`创建私有 GitHub 仓库`,githubAuthHint:`请先登录:gh auth login`,back:`返回`,submit:`创建项目`,creating:`创建中…`,errors:{generic:`无法启动提交。请检查数值后重试。`,invalid_name:`项目名称为必填项。`,invalid_location:`位置为必填项。`,providers_required:`请至少选择一个提供商。`,unknown_provider:`所选提供商之一不可用。`,invalid_blueprint:`蓝图不完整——请返回并与构建器一起完成它。`,m1_specs_required:`蓝图还没有里程碑 1 的规格。`,m1_specs_over_cap:`里程碑 1 的规格太多(最多 10 个)。请让构建器精简。`,m1_spec_quality_invalid:`生成的规格尚未达到可实施质量。请返回构建器并完善所指出的项目。`,bundled_framework_missing:`缺少内置框架——请重新安装 Specrails 应用。`,location_not_empty:`该文件夹已存在且非空。请选择其他位置。`,location_already_registered:`该位置已属于一个已注册的项目。`,commit_failed:`项目创建失败——原因见步骤列表。`}},r={title:`正在创建你的项目…`,steps:{"create-dir":`创建项目文件夹`,"git-init":`初始化 git 仓库 + README`,assemble:`组装 Specrails 工作区(离线)`,blueprint:`写入蓝图`,tickets:`插入里程碑 1 规格`,register:`注册项目`,github:`创建 GitHub 仓库`},githubErrors:{gh_not_installed:`未安装 GitHub CLI(gh)— 未创建仓库`,gh_not_authenticated:`gh 未登录(请运行 gh auth login)— 未创建仓库`,gh_scope:`你的 gh 令牌无权创建仓库(缺少 repo 权限)`,gh_repo_exists:`你的账户中已存在同名仓库`,gh_network:`与 GitHub 通信时网络出错 — 未创建仓库`,generic:`创建 GitHub 仓库失败`}},i={title:`项目已创建`,description:`里程碑 1 的待办清单已在看板上,标签为 M1。`,launchM1:`启动里程碑 1`,openProject:`打开项目`,launchFailed:`无法启动里程碑 1`},a={title:`蓝图`,milestone:`M{{n}}`,launchM1:`启动里程碑 1`,generateNext:`生成 M{{n}}`,generateHint:`打开以蓝图为种子、扎根真实代码的规格会话`,generateUnavailable:`里程碑生成需要原生只读模式`},o={startFailed:`无法启动构建器对话。`,turnFailed:`构建器回合失败。`,commitFailed:`项目创建失败。`},s={title:`生成 {{label}}`,inputPlaceholder:`完善规格…`,commit:`将 {{count}} 个规格提交为 {{label}}`,commitToast:`{{count}} 个规格已作为 {{label}} 加入看板`,commitFailed:`无法提交里程碑`,providerUnavailable:`此提供商没有原生只读模式,因此无法生成里程碑。`,send:`发送`},c={title:`项目构建器`,subtitle:`智能体正在构建新项目`,exit:`退出`,exitConfirmTitle:`退出构建器?`,exitConfirmBody:`构建器现在停止。你的蓝图已保存——下次打开构建器时可在“从上次离开的地方继续”中恢复。`,exitConfirmCancel:`继续构建`,exitConfirmDiscard:`丢弃并退出`},l={surpriseMe:`给我惊喜——为蓝图的所有维度提出合理方案,保持 m1Specs 为空,并在生成详细规格前让我先批准计划。`,milestoneSeed:`为里程碑 {{label}}("{{title}}")生成详细规格。先阅读真实代码并验证完整批次,然后在一次 blueprint-draft 回复/快照中输出该里程碑的全部详细规格。`,milestoneSeedWithPlanned:`为里程碑 {{label}}("{{title}}")生成详细规格。计划的规格标题:{{planned}}。先阅读真实代码并验证完整批次,然后在一次 blueprint-draft 回复/快照中输出该里程碑的全部详细规格。`,repairSnapshot:`应用无法使用你上一个 blueprint-draft 块({{reason}})。请重新输出完整的快照,且必须是严格有效的 JSON(字符串内换行转义为 \\n,无尾随逗号,无嵌套代码块)——只输出该块。`,approve:`已批准 — 现在生成里程碑 1 的详细待办。`},u={eyebrow:`{{milestone}} · 规格 {{index}}`,close:`关闭`,open:`查看规格详情`,empty:`尚无描述。`,summary:`摘要`,priority:`优先级`,description:`规格描述`,acceptanceCriteria:`验收标准`,criteriaEmpty:`尚无验收标准。`},d={writing:`正在编写里程碑 1 的规格…`,specCount:`规格 {{n}}`,turn:`第 {{turn}}/{{total}} 轮`,phase:{outline:`正在勾勒里程碑 1 的规格…`,details:`正在详细编写第 {{from}}–{{to}} 个规格(共 {{total}} 个)…`,audit:`正在审核全部 {{total}} 个规格…`,repair:`正在重新请求第 {{from}}–{{to}} 个规格…`}},f={title:`准备好创建规格了吗?`,steps:{blueprint:`蓝图已批准`,specs:`已生成里程碑 1 的规格`,audit:`质量审核`},details:{blueprint:{done:`{{filled}}/{{total}} 个维度`,pending:`{{filled}}/{{total}} 个维度`,blocked:`{{filled}}/{{total}} 个维度`},specs:{done:`{{count}} 条规格 · 已完成`,pending:`{{count}} / {{min}}–{{max}}`,blocked:`{{count}} 条规格 · 需要 {{min}}–{{max}} 条`,writing:`已写出 {{written}}/{{count}}`},audit:{done:`没有问题`,pending:`等待规格`,blocked:`{{count}} 项待修正`,writing:`规格写完后进行`}},hints:{blueprint:{pending:`完成访谈或说“给我惊喜”——目前 {{filled}}/{{total}} 个维度。`,blocked:`蓝图不完整。`},specs:{pending:`批准蓝图后,构建器将生成里程碑 1 的待办清单。`,blocked:`里程碑 1 需要 {{min}}–{{max}} 条规格(当前 {{count}} 条)。请让构建器调整。`,writing:`构建器正在完整撰写每条规格,批次完成后再运行质量审核。`},audit:{pending:`等待规格。`,blocked:`{{count}} 个审核问题阻止提交——请展开下方列表。`,writing:`所有规格写完后运行审核。`}},issuesCount_one:`{{count}} 个审核问题`,issuesCount_other:`{{count}} 个审核问题`,askFix:`让构建器修正这些问题`},p={repairing:{invalid_json:`正在修复快照(上一个块不是有效的 JSON)…`,truncated:`正在重新请求快照(回复被截断)…`,quality:`正在让构建器修正审核问题…`,automatic:`自动`},rejected:{title:`构建器的上一个快照无法使用`,invalid_json:`蓝图块不是有效的 JSON,面板仍显示之前的状态。`,missing_version:`该块不是蓝图快照(缺少 blueprintVersion)。`,truncated:`回复在块闭合前被截断,未收到任何内容。`,autoRepairFailed:`已尝试过一次自动修复。`,retry:`再次请求快照`},repairedNote:`快照已自动修复`,nothingToRepair:`没有需要修复的内容——继续与构建器对话即可。`,noSession:`此对话无法在其提供商上恢复;请改为发送新消息。`,alreadyStreaming:`构建器仍在回复。`,halted:{title:`规格生成提前中止`,detail:`已完整写出 {{written}}/{{total}} 条规格,其余仍只是大纲标题。`,resume:`继续生成`}},m={title:`从上次离开的地方继续`,untitled:`未命名蓝图`,specsComplete:`{{count}} 条规格已就绪`,specsInProgress:`{{count}} 条规格进行中`,dimensions:`{{filled}}/{{total}} 个维度`,pendingIssue:`快照待修复`,discard:`丢弃`,discardConfirm:`确认丢弃`,discardCancel:`保留`,resumeFailed:`无法恢复该蓝图。`,discardFailed:`无法丢弃该蓝图。`},h={batch_incomplete:`构建器尚未将该批次标记为完成。`,spec_count:`该批次需要 {{min}}–{{max}} 条规格(当前 {{count}} 条)。`,invalid_shape:`规格 {{n}} 不是有效对象。`,invalid_kind:`规格 {{n}} 需要有效的类型(scaffold、feature 或 verification)。`,scaffold_first:`第一条规格必须是项目脚手架。`,duplicate_scaffold:`规格 {{n}} 不能是第二个脚手架。`,title_required:`规格 {{n}} 需要标题。`,title_duplicate:`规格 {{n}} 与规格 {{other}} 的标题重复。`,summary:`规格 {{n}} 需要一行 240 字符以内的摘要。`,invalid_priority:`规格 {{n}} 需要有效的优先级。`,canonical_sections:`规格 {{n}} 缺少按顺序排列的五个规范章节。`,empty_section:`规格 {{n}} 的“{{heading}}”章节为空。`,section_bullets:`规格 {{n}} 的“{{heading}}”下至少需要 {{min}} 个要点。`,complexity_format:`规格 {{n}} 需要带理由的复杂度等级。`,scaffold_readme:`脚手架规格必须提及现有的 README。`,criteria_count:`规格 {{n}} 需要 {{min}}–{{max}} 条验收标准(当前 {{count}} 条)。`,criterion_quality:`规格 {{n}} 的第 {{criterion}} 条标准不够具体。`,duplicate_criterion:`规格 {{n}} 重复了第 {{criterion}} 条验收标准。`,milestone_label:`规格 {{n}} 需要 {{label}} 标签。`,domain_label:`规格 {{n}} 除 {{label}} 外还需要一个领域标签。`,invalid_dependency:`规格 {{n}} 只能依赖更早的规格。`,scaffold_dependency:`脚手架规格不能声明依赖。`,section_depth:`规格 {{n}} 的“{{heading}}”需要更充实(至少 {{min}} 个字符)。`},g={state:{planned:`已规划`,committed:`可启动`,running:`进行中`,delivered:`已交付 — 等待审阅`,done:`已完成`},counts:`已交付 {{delivered}}/{{total}} · 已完成 {{done}}`,failedNote_one:`{{count}} 个规格上次尝试失败`,failedNote_other:`{{count}} 个规格上次尝试失败`,legend:{done:`已完成`,onReview:`审阅中`,inProgress:`进行中`,failed:`上次尝试失败`,todo:`待处理`},rail:{fallbackName:`轨道 {{n}}`,chunk:`链中的第 {{k}} 条轨道`,running:`运行中 · {{elapsed}}`,review:`审阅`,open:`打开轨道`,noDelivery:`尚无交付`},chain:{title:`顺序链`,parallelTitle:`并行启动`,progress:`第 {{k}}/{{n}} 条轨道`,waiting:`等待第 {{k}} 条轨道结束`,stackedOn:`下一条轨道基于 {{branch}}`,paused:`已暂停 — {{reason}}`,completed:`所有轨道已启动`,cancelled:`链已取消`,resume:`恢复`,cancel:`取消链`,resumed:`链已恢复`,resumeFailed:`无法恢复链`,cancelledToast:`链已取消 — 运行中的轨道继续`,reasons:{chunk_failed:`上一条轨道失败`,chunk_stalled:`上一条轨道停滞(无提供方输出)`,chunk_stopped:`上一条轨道已被停止`,launch_rejected:`下一条轨道无法启动({{detail}})`,head_missing:`用于构建的分支已不存在`,head_discarded:`下一条轨道所基于的交付已被丢弃`,run_lost:`重启后找不到运行中的轨道`,unknown:`已暂停`,provider_limit:`已达到提供商用量限额`,rail_limit_reached:`每条轨道都有等待你决定的 PR — 合并或放弃待处理的 PR 以释放轨道,然后继续`,integration_failed:`规格集成失败({{detail}});继续将重试集成`},checkpoint:`第 {{k}}/{{n}} 条轨道已交付 — 启动第 {{next}} 条?`,launchNext:`启动下一条轨道`,nextLaunched:`下一条轨道已启动`,autoAdvance:`自动继续`,autoAdvanceHint:`在创建下一个工作树之前先集成每个规格`,checkpointHint:`每条轨道结束后暂停,启动下一条前先询问`,checkpointNote:`本轨道结束后暂停`,autoOn:`已开启自动继续 — 后续轨道将自动启动`,autoOff:`已关闭自动继续 — 每条轨道启动前都会询问`,autoFailed:`无法更新链`,integrating:`正在集成此规格,然后再启动下一个`,cancelFailed:`无法取消该链`},toast:{launched:`{{milestone}} 已启动 — 第 1/{{n}} 个规格已在其轨道上;后续规格将自动跟进,每个一条轨道`,launchedAll:`{{milestone}} 已启动 — 每条轨道一个规格(共 {{n}} 个)`,chainActive:`{{milestone}} 正在启动 — 请查看蓝图面板`,chunkLaunched:`{{milestone}} — 第 {{k}}/{{n}} 条轨道已启动`,paused:`{{milestone}} 已暂停 — {{reason}}`,resume:`恢复`,delivered:`{{milestone}} 已交付 — {{count}} 个规格等待您的审阅`,review:`审阅`,completed:`{{milestone}} 已完成 — 所有规格均已合并`,launchedCheckpoint:`{{milestone}} 已启动 — 第 1/{{n}} 个规格已在其轨道上;每个后续规格启动前都会询问`,checkpoint:`{{milestone}} — 第 {{k}}/{{n}} 条轨道已交付。启动下一条?`,launchNext:`启动下一条轨道`,autoContinue:`自动继续`,railLimitReached:`{{milestone}} 无法启动 — 每条轨道都有等待你决定的 PR。合并或放弃待处理的 PR 以释放轨道。`},sequentialHint:`每条轨道一个规格,按依赖顺序 — 每条轨道基于上一条轨道的分支`},_={settledLabel:`已做决定`,surprise:{label:`构建器`,hint:`之后可以调整任何决定`,title:`给我惊喜`,description:`让构建器决定产品、核心流程、平台、技术栈和里程碑,然后把蓝图交给你审批或微调。`,cta:`给我惊喜`,settledTitle:`给我惊喜`,settledDescription:`你让构建器决定了蓝图的全部维度。`},approve:{label:`蓝图就绪`,hint:`或者输入你想修改的内容`,title:`批准蓝图`,description:`所有维度已确定。批准后构建器会完整撰写里程碑 1 的规格,每次两条,然后审核整批。`,cta:`批准并生成规格`,settledTitle:`蓝图已批准`,settledDescription:`构建器正根据此蓝图生成里程碑 1 的待办。`}},v={shell:e,panel:t,commit:n,progress:r,done:i,sidebar:a,errors:o,milestone:s,mode:c,prompts:l,specModal:u,generation:d,readiness:f,snapshot:p,recent:m,quality:h,milestoneProgress:g,decisionCard:_};export{n as commit,_ as decisionCard,v as default,i as done,o as errors,d as generation,s as milestone,g as milestoneProgress,c as mode,t as panel,r as progress,l as prompts,h as quality,f as readiness,m as recent,e as shell,a as sidebar,p as snapshot,u as specModal};
@@ -0,0 +1 @@
1
+ var e={title:`Constructeur de projets`,subtitle:`De l'idée au backlog du Jalon 1`,close:`Fermer le Constructeur`,emptyTitle:`Décrivez votre idée d'app`,emptyHint:`Une ou deux phrases suffisent — le Constructeur vous interviewera brièvement et proposera un blueprint complet. Vous pouvez aussi le laisser tout décider.`,surpriseMe:`Surprenez-moi`,inputPlaceholder:`Une app qui…`,createSpecs:`Créer les specs`,createSpecsHint:`Disponible dès que les specs du Jalon 1 passent l’audit`,providerUnavailable:`Le Constructeur nécessite un fournisseur avec un mode natif sans outils ou en lecture seule. Ce fournisseur n’est pas disponible ici.`},t={title:`Blueprint`,product:`Produit`,coreFlow:`Flux principal`,platform:`Plateforme`,stack:`Stack`,milestones:`Jalons`,milestonesValue:`{{count}} planifiés`,assumptions:`Hypothèses`,m1Specs:`Specs du Jalon 1 ({{count}})`,dependsOn:`dépend de #{{index}}`,criteriaCount:`{{count}} critères d'acceptation`,laterMilestones:`Jalons suivants`,empty:`Le blueprint se remplit au fil de la conversation.`,specsComplete:`Complètes`,specsInProgress:`En cours`,specWriting:`rédaction…`,specPendingBody:`pas encore rédigée`},n={title:`Créer le projet`,description:`Rien ne touche le disque avant votre confirmation. Le dépôt reste vierge — les artefacts Specrails vivent ailleurs.`,nameLabel:`Nom du projet`,locationLabel:`Emplacement`,locationHint:`Un nouveau dossier sera créé ici (vide ou inexistant).`,providersLabel:`Fournisseurs d'IA`,githubLabel:`Créer un dépôt GitHub privé`,githubAuthHint:`Connectez-vous d’abord : gh auth login`,back:`Retour`,submit:`Créer le projet`,creating:`Création…`,errors:{generic:`Le commit n'a pas pu démarrer. Vérifiez les valeurs et réessayez.`,invalid_name:`Le nom du projet est requis.`,invalid_location:`L'emplacement est requis.`,providers_required:`Sélectionnez au moins un fournisseur.`,unknown_provider:`Un des fournisseurs sélectionnés n'est pas disponible.`,invalid_blueprint:`Le blueprint est incomplet — revenez le terminer avec le Constructeur.`,m1_specs_required:`Le blueprint n'a pas encore de specs du Jalon 1.`,m1_specs_over_cap:`Le Jalon 1 a trop de specs (max. 10). Demandez au Constructeur de l'alléger.`,m1_spec_quality_invalid:`Les specs générées ne sont pas encore prêtes à être implémentées. Revenez au Constructeur et affinez l'élément indiqué.`,bundled_framework_missing:`Le framework embarqué est absent — réinstallez l'app Specrails.`,location_not_empty:`Ce dossier existe déjà et n'est pas vide. Choisissez un autre emplacement.`,location_already_registered:`Cet emplacement appartient déjà à un projet enregistré.`,commit_failed:`La création du projet a échoué — voyez la liste des étapes pour la raison.`}},r={title:`Création de votre projet…`,steps:{"create-dir":`Créer le dossier du projet`,"git-init":`Initialiser le dépôt git + README`,assemble:`Assembler le workspace Specrails (hors ligne)`,blueprint:`Écrire le blueprint`,tickets:`Insérer les specs du Jalon 1`,register:`Enregistrer le projet`,github:`Créer le dépôt GitHub`},githubErrors:{gh_not_installed:`GitHub CLI (gh) n’est pas installé — dépôt non créé`,gh_not_authenticated:`gh n’est pas connecté (exécutez gh auth login) — dépôt non créé`,gh_scope:`Votre jeton gh ne peut pas créer de dépôts (scope repo manquant)`,gh_repo_exists:`Un dépôt portant ce nom existe déjà sur votre compte`,gh_network:`Erreur réseau avec GitHub — dépôt non créé`,generic:`La création du dépôt GitHub a échoué`}},i={title:`Projet créé`,description:`Votre backlog du Jalon 1 est sur le tableau, étiqueté M1.`,launchM1:`Lancer le Jalon 1`,openProject:`Ouvrir le projet`,launchFailed:`Impossible de lancer le Jalon 1`},a={title:`Blueprint`,milestone:`M{{n}}`,launchM1:`Lancer le Jalon 1`,generateNext:`Générer M{{n}}`,generateHint:`Ouvre une session de specs ancrée dans le code, semée avec le blueprint`,generateUnavailable:`La génération de jalons nécessite un mode natif en lecture seule`},o={startFailed:`Impossible de démarrer la conversation du Constructeur.`,turnFailed:`Le tour du Constructeur a échoué.`,commitFailed:`La création du projet a échoué.`},s={title:`Générer {{label}}`,inputPlaceholder:`Affinez les specs…`,commit:`Valider {{count}} specs comme {{label}}`,commitToast:`{{count}} specs ajoutées au tableau comme {{label}}`,commitFailed:`Impossible de valider le jalon`,providerUnavailable:`La génération de jalons est indisponible car ce fournisseur n’a pas de mode natif en lecture seule.`,send:`Envoyer`},c={title:`Constructeur de projets`,subtitle:`L'agent construit un nouveau projet`,exit:`Quitter`,exitConfirmTitle:`Quitter le Constructeur ?`,exitConfirmBody:`Le Constructeur s’arrête maintenant. Votre blueprint est enregistré : reprenez-le depuis « Reprendre où vous en étiez » à la prochaine ouverture du Constructeur.`,exitConfirmCancel:`Continuer`,exitConfirmDiscard:`Abandonner et quitter`},l={surpriseMe:`Surprends-moi — propose des valeurs cohérentes pour toutes les dimensions du blueprint, garde m1Specs vide et laisse-moi approuver le plan avant de générer les specs détaillées.`,milestoneSeed:`Génère les specs détaillées du jalon {{label}} ("{{title}}"). Lis d'abord le vrai code, valide le lot complet, puis émets TOUTES les specs détaillées du jalon dans une seule réponse/un seul snapshot blueprint-draft.`,milestoneSeedWithPlanned:`Génère les specs détaillées du jalon {{label}} ("{{title}}"). Titres de specs prévus : {{planned}}. Lis d'abord le vrai code, valide le lot complet, puis émets TOUTES les specs détaillées du jalon dans une seule réponse/un seul snapshot blueprint-draft.`,repairSnapshot:`Votre dernier bloc blueprint-draft n’a pas pu être utilisé par l’app ({{reason}}). Réémettez le snapshot COMPLET en JSON strictement valide (retours à la ligne dans les chaînes échappés en \\n, pas de virgule finale, pas de bloc de code imbriqué) — uniquement le bloc.`,approve:`Approuvé — génère maintenant le backlog détaillé du Jalon 1.`},u={eyebrow:`{{milestone}} · Spec {{index}}`,close:`Fermer`,open:`Voir le détail de la spec`,empty:`Pas encore de description.`,summary:`Résumé`,priority:`Priorité`,description:`Description de la spec`,acceptanceCriteria:`Critères d'acceptation`,criteriaEmpty:`Aucun critère d'acceptation pour le moment.`},d={writing:`Rédaction des specs du jalon 1…`,specCount:`spec {{n}}`,turn:`tour {{turn}}/{{total}}`,phase:{outline:`Esquisse des specs du jalon 1…`,details:`Rédaction détaillée des specs {{from}}–{{to}} sur {{total}}…`,audit:`Audit des {{total}} specs…`,repair:`Nouvelle demande des specs {{from}}–{{to}}…`}},f={title:`Prêt à créer les specs ?`,steps:{blueprint:`Blueprint approuvé`,specs:`Specs du Jalon 1 générées`,audit:`Audit qualité`},details:{blueprint:{done:`{{filled}}/{{total}} dimensions`,pending:`{{filled}}/{{total}} dimensions`,blocked:`{{filled}}/{{total}} dimensions`},specs:{done:`{{count}} specs · complètes`,pending:`{{count}} sur {{min}}–{{max}}`,blocked:`{{count}} specs · {{min}}–{{max}} requises`,writing:`{{written}} sur {{count}} rédigées`},audit:{done:`aucun problème`,pending:`en attente des specs`,blocked:`{{count}} à corriger`,writing:`une fois les specs rédigées`}},hints:{blueprint:{pending:`Terminez l’entretien ou dites « surprenez-moi » — {{filled}}/{{total}} dimensions pour l’instant.`,blocked:`Le blueprint est incomplet.`},specs:{pending:`Approuvez le blueprint et le Constructeur générera le backlog du Jalon 1.`,blocked:`Le Jalon 1 a besoin de {{min}}–{{max}} specs (actuellement {{count}}). Demandez au Constructeur de l’ajuster.`,writing:`Le Constructeur rédige chaque spec en entier — l'audit qualité s'exécute une fois le lot complet.`},audit:{pending:`En attente des specs.`,blocked:`{{count}} problème(s) d’audit bloquent le commit — ouvrez la liste ci-dessous.`,writing:`L'audit s'exécute une fois toutes les specs rédigées.`}},issuesCount_one:`{{count}} problème d’audit`,issuesCount_other:`{{count}} problèmes d’audit`,askFix:`Demander au Constructeur de corriger`},p={repairing:{invalid_json:`Réparation du snapshot (le dernier bloc n’était pas du JSON valide)…`,truncated:`Nouvelle demande du snapshot (la réponse a été tronquée)…`,quality:`Demande au Constructeur de corriger les problèmes d’audit…`,automatic:`automatique`},rejected:{title:`Le dernier snapshot du Constructeur n’a pas pu être utilisé`,invalid_json:`Le bloc blueprint n’était pas du JSON valide ; le panneau affiche donc toujours l’état précédent.`,missing_version:`Le bloc n’était pas un snapshot de blueprint (blueprintVersion manquant).`,truncated:`La réponse a été tronquée avant la fermeture du bloc ; rien n’a été reçu.`,autoRepairFailed:`Une réparation automatique a déjà été tentée.`,retry:`Redemander le snapshot`},repairedNote:`Snapshot réparé automatiquement`,nothingToRepair:`Rien à réparer — continuez la conversation avec le Constructeur.`,noSession:`Cette conversation ne peut pas être reprise avec son fournisseur ; envoyez plutôt un nouveau message.`,alreadyStreaming:`Le Constructeur est encore en train de répondre.`,halted:{title:`La génération des specs s'est arrêtée trop tôt`,detail:`{{written}} specs sur {{total}} rédigées en entier. Les autres ne sont encore que des titres du plan.`,resume:`Continuer la génération`}},m={title:`Reprendre où vous en étiez`,untitled:`Blueprint sans titre`,specsComplete:`{{count}} specs prêtes`,specsInProgress:`{{count}} specs en cours`,dimensions:`{{filled}}/{{total}} dimensions`,pendingIssue:`snapshot à réparer`,discard:`Supprimer`,discardConfirm:`Confirmer la suppression`,discardCancel:`Conserver`,resumeFailed:`Impossible de reprendre ce blueprint.`,discardFailed:`Impossible de supprimer ce blueprint.`},h={batch_incomplete:`Le Constructeur n’a pas encore marqué le lot comme complet.`,spec_count:`Le lot a besoin de {{min}}–{{max}} specs (actuellement {{count}}).`,invalid_shape:`La spec {{n}} n’est pas un objet valide.`,invalid_kind:`La spec {{n}} a besoin d’un type valide (scaffold, feature ou verification).`,scaffold_first:`La première spec doit être le scaffold du projet.`,duplicate_scaffold:`La spec {{n}} ne peut pas être un second scaffold.`,title_required:`La spec {{n}} a besoin d’un titre.`,title_duplicate:`La spec {{n}} répète le titre de la spec {{other}}.`,summary:`La spec {{n}} a besoin d’un résumé d’une ligne de moins de 240 caractères.`,invalid_priority:`La spec {{n}} a besoin d’une priorité valide.`,canonical_sections:`Il manque à la spec {{n}} les cinq sections canoniques dans l’ordre.`,empty_section:`La section « {{heading}} » de la spec {{n}} est vide.`,section_bullets:`La spec {{n}} a besoin d'au moins {{min}} puces sous « {{heading}} ».`,complexity_format:`La spec {{n}} a besoin d’un niveau de complexité justifié.`,scaffold_readme:`La spec de scaffold doit mentionner le README existant.`,criteria_count:`La spec {{n}} a besoin de {{min}}–{{max}} critères d'acceptation (elle en a {{count}}).`,criterion_quality:`Spec {{n}}, critère {{criterion}} : pas assez concret.`,duplicate_criterion:`La spec {{n}} répète le critère d’acceptation {{criterion}}.`,milestone_label:`La spec {{n}} a besoin du label {{label}}.`,domain_label:`La spec {{n}} a besoin d’un label de domaine en plus de {{label}}.`,invalid_dependency:`La spec {{n}} ne peut dépendre que d’une spec antérieure.`,scaffold_dependency:`La spec de scaffold ne peut pas déclarer de dépendance.`,section_depth:`La spec {{n}} a besoin d'une section « {{heading}} » plus complète (au moins {{min}} caractères).`},g={state:{planned:`Planifié`,committed:`Prêt à lancer`,running:`En cours`,delivered:`Livré — en attente de revue`,done:`Terminé`},counts:`{{delivered}} sur {{total}} livrées · {{done}} terminées`,failedNote_one:`{{count}} spec a échoué à sa dernière tentative`,failedNote_other:`{{count}} specs ont échoué à leur dernière tentative`,legend:{done:`Terminées`,onReview:`En revue`,inProgress:`En cours`,failed:`Échec à la dernière tentative`,todo:`En attente`},rail:{fallbackName:`Rail {{n}}`,chunk:`Rail {{k}} de la chaîne`,running:`En exécution · {{elapsed}}`,review:`Revoir`,open:`Ouvrir le rail`,noDelivery:`Pas encore de livraison`},chain:{title:`Chaîne séquentielle`,parallelTitle:`Lancement parallèle`,progress:`rail {{k}} sur {{n}}`,waiting:`en attente de la fin du rail {{k}}`,stackedOn:`le rail suivant part de {{branch}}`,paused:`En pause — {{reason}}`,completed:`Tous les rails lancés`,cancelled:`Chaîne annulée`,resume:`Reprendre`,cancel:`Annuler la chaîne`,resumed:`Chaîne reprise`,resumeFailed:`Impossible de reprendre la chaîne`,cancelledToast:`Chaîne annulée — les rails en cours continuent`,reasons:{chunk_failed:`le dernier rail a échoué`,chunk_stalled:`le dernier rail s'est bloqué (aucune sortie du fournisseur)`,chunk_stopped:`le dernier rail a été arrêté`,launch_rejected:`le rail suivant n'a pas pu être lancé ({{detail}})`,head_missing:`la branche de base n'existe plus`,head_discarded:`la livraison sur laquelle repose le rail suivant a été abandonnée`,run_lost:`le rail en cours est introuvable après un redémarrage`,unknown:`en pause`,provider_limit:`la limite d'utilisation du fournisseur a été atteinte`,rail_limit_reached:`chaque rail porte une PR en attente de votre décision — fusionnez ou abandonnez des PR en attente pour libérer un rail, puis reprenez`,integration_failed:`l'intégration de la spec a échoué ({{detail}}) ; reprendre relance l'intégration`},checkpoint:`Rail {{k}} sur {{n}} livré — lancer le rail {{next}} ?`,launchNext:`Lancer le rail suivant`,nextLaunched:`Rail suivant lancé`,autoAdvance:`Continuer automatiquement`,autoAdvanceHint:`Intègre chaque spec avant de créer le worktree suivant`,checkpointHint:`S'arrête après chaque rail et demande avant de lancer le suivant`,checkpointNote:`s'arrête après ce rail`,autoOn:`Continuation automatique activée — les rails suivants se lancent seuls`,autoOff:`Continuation automatique désactivée — on vous demandera avant chaque rail`,autoFailed:`Impossible de mettre à jour la chaîne`,integrating:`intégration de cette spec avant de lancer la suivante`,cancelFailed:`Impossible d'annuler la chaîne`},toast:{launched:`{{milestone}} lancé — la spec 1 sur {{n}} est sur son rail ; les specs suivantes s'enchaînent automatiquement, un rail chacune`,launchedAll:`{{milestone}} lancé — une spec par rail ({{n}} au total)`,chainActive:`{{milestone}} est déjà en cours de lancement — voir le panneau Blueprint`,chunkLaunched:`{{milestone}} — rail {{k}} sur {{n}} lancé`,paused:`{{milestone}} en pause — {{reason}}`,resume:`Reprendre`,delivered:`{{milestone}} livré — {{count}} specs attendent votre revue`,review:`Revoir`,completed:`{{milestone}} terminé — toutes les specs fusionnées`,launchedCheckpoint:`{{milestone}} lancé — la spec 1 sur {{n}} est sur son rail ; on vous demandera avant chaque suivante`,checkpoint:`{{milestone}} — rail {{k}} sur {{n}} livré. Lancer le rail suivant ?`,launchNext:`Lancer le rail suivant`,autoContinue:`Continuer auto`,railLimitReached:`{{milestone}} n'a pas pu être lancé — chaque rail porte une PR en attente de votre décision. Fusionnez ou abandonnez des PR en attente pour libérer un rail.`},sequentialHint:`Une spec par rail, dans l'ordre des dépendances — chaque rail part de la branche du rail précédent`},_={settledLabel:`Décision prise`,surprise:{label:`Constructeur`,hint:`Vous pourrez ajuster chaque décision ensuite`,title:`Surprenez-moi`,description:`Laissez le Constructeur décider du produit, du flux principal, de la plateforme, de la stack et des jalons, puis vous présenter le blueprint à approuver ou ajuster.`,cta:`Surprenez-moi`,settledTitle:`Surprenez-moi`,settledDescription:`Vous avez laissé le Constructeur décider de toutes les dimensions du blueprint.`},approve:{label:`Blueprint prêt`,hint:`Ou écrivez ce que vous voulez changer`,title:`Approuver le blueprint`,description:`Toutes les dimensions sont décidées. Approuvez-le et le Constructeur rédige les specs du Jalon 1 en entier, deux par deux, puis audite le lot.`,cta:`Approuver et générer les specs`,settledTitle:`Blueprint approuvé`,settledDescription:`Le Constructeur génère le backlog du Jalon 1 à partir de ce blueprint.`}},v={shell:e,panel:t,commit:n,progress:r,done:i,sidebar:a,errors:o,milestone:s,mode:c,prompts:l,specModal:u,generation:d,readiness:f,snapshot:p,recent:m,quality:h,milestoneProgress:g,decisionCard:_};export{n as commit,_ as decisionCard,v as default,i as done,o as errors,d as generation,s as milestone,g as milestoneProgress,c as mode,t as panel,r as progress,l as prompts,h as quality,f as readiness,m as recent,e as shell,a as sidebar,p as snapshot,u as specModal};
@@ -0,0 +1 @@
1
+ var e={title:`Costruttore di progetti`,subtitle:`Dall'idea al backlog della Milestone 1`,close:`Chiudi il Costruttore`,emptyTitle:`Descrivi la tua idea di app`,emptyHint:`Bastano una o due frasi — il Costruttore ti intervisterà brevemente e proporrà un blueprint completo. Puoi anche lasciargli decidere tutto.`,surpriseMe:`Sorprendimi`,inputPlaceholder:`Un'app che…`,createSpecs:`Crea le spec`,createSpecsHint:`Disponibile quando le spec della Milestone 1 superano l’audit`,providerUnavailable:`Il Costruttore richiede un provider con modalità nativa senza strumenti o di sola lettura. Questo provider non è disponibile qui.`},t={title:`Blueprint`,product:`Prodotto`,coreFlow:`Flusso principale`,platform:`Piattaforma`,stack:`Stack`,milestones:`Milestone`,milestonesValue:`{{count}} pianificate`,assumptions:`Assunzioni`,m1Specs:`Spec della Milestone 1 ({{count}})`,dependsOn:`dipende da #{{index}}`,criteriaCount:`{{count}} criteri di accettazione`,laterMilestones:`Milestone successive`,empty:`Il blueprint si riempie mentre conversi.`,specsComplete:`Completate`,specsInProgress:`In corso`,specWriting:`in scrittura…`,specPendingBody:`non ancora scritta`},n={title:`Crea il progetto`,description:`Nulla tocca il disco finché non confermi. Il repo resta intatto — gli artefatti Specrails vivono altrove.`,nameLabel:`Nome del progetto`,locationLabel:`Percorso`,locationHint:`Qui verrà creata una nuova cartella (vuota o inesistente).`,providersLabel:`Provider IA`,githubLabel:`Crea repository GitHub privato`,githubAuthHint:`Accedi prima: gh auth login`,back:`Indietro`,submit:`Crea progetto`,creating:`Creazione…`,errors:{generic:`Il commit non è potuto partire. Controlla i valori e riprova.`,invalid_name:`Il nome del progetto è obbligatorio.`,invalid_location:`Il percorso è obbligatorio.`,providers_required:`Seleziona almeno un provider.`,unknown_provider:`Uno dei provider selezionati non è disponibile.`,invalid_blueprint:`Il blueprint è incompleto — torna indietro e completalo col Costruttore.`,m1_specs_required:`Il blueprint non ha ancora spec della Milestone 1.`,m1_specs_over_cap:`La Milestone 1 ha troppe spec (max 10). Chiedi al Costruttore di snellirla.`,m1_spec_quality_invalid:`Le spec generate non sono ancora pronte per l'implementazione. Torna al Costruttore e perfeziona l'elemento indicato.`,bundled_framework_missing:`Manca il framework integrato — reinstalla l'app Specrails.`,location_not_empty:`Quella cartella esiste già e non è vuota. Scegli un altro percorso.`,location_already_registered:`Quel percorso appartiene già a un progetto registrato.`,commit_failed:`La creazione del progetto è fallita — vedi l'elenco dei passi per il motivo.`}},r={title:`Creazione del progetto…`,steps:{"create-dir":`Crea la cartella del progetto`,"git-init":`Inizializza il repository git + README`,assemble:`Assembla il workspace Specrails (offline)`,blueprint:`Scrivi il blueprint`,tickets:`Inserisci le spec della Milestone 1`,register:`Registra il progetto`,github:`Crea il repository GitHub`},githubErrors:{gh_not_installed:`GitHub CLI (gh) non è installato — repository non creato`,gh_not_authenticated:`gh non è autenticato (esegui gh auth login) — repository non creato`,gh_scope:`Il tuo token gh non può creare repository (manca lo scope repo)`,gh_repo_exists:`Esiste già un repository con questo nome nel tuo account`,gh_network:`Errore di rete con GitHub — repository non creato`,generic:`Creazione del repository GitHub non riuscita`}},i={title:`Progetto creato`,description:`Il backlog della Milestone 1 è sulla board, etichettato M1.`,launchM1:`Lancia la Milestone 1`,openProject:`Apri il progetto`,launchFailed:`Impossibile lanciare la Milestone 1`},a={title:`Blueprint`,milestone:`M{{n}}`,launchM1:`Lancia la Milestone 1`,generateNext:`Genera M{{n}}`,generateHint:`Apre una sessione di spec ancorata al codice, seminata col blueprint`,generateUnavailable:`La generazione delle milestone richiede una modalità nativa di sola lettura`},o={startFailed:`Impossibile avviare la conversazione del Costruttore.`,turnFailed:`Il turno del Costruttore è fallito.`,commitFailed:`La creazione del progetto è fallita.`},s={title:`Genera {{label}}`,inputPlaceholder:`Rifinisci le spec…`,commit:`Conferma {{count}} spec come {{label}}`,commitToast:`{{count}} spec aggiunte alla board come {{label}}`,commitFailed:`Impossibile confermare la milestone`,providerUnavailable:`La generazione delle milestone non è disponibile perché questo provider non ha una modalità nativa di sola lettura.`,send:`Invia`},c={title:`Costruttore di progetti`,subtitle:`L'agente sta costruendo un nuovo progetto`,exit:`Esci`,exitConfirmTitle:`Uscire dal Costruttore?`,exitConfirmBody:`Il Builder si ferma ora. Il tuo blueprint resta salvato: riprendilo da «Continua da dove eri rimasto» alla prossima apertura del Builder.`,exitConfirmCancel:`Continua a costruire`,exitConfirmDiscard:`Scarta ed esci`},l={surpriseMe:`Sorprendimi — proponi valori sensati per tutte le dimensioni del blueprint, lascia m1Specs vuoto e fammi approvare il piano prima di generare le spec dettagliate.`,milestoneSeed:`Genera le spec dettagliate della milestone {{label}} ("{{title}}"). Leggi prima il codice reale, valida il lotto completo e solo allora emetti TUTTE le spec dettagliate della milestone in un'unica risposta/snapshot blueprint-draft.`,milestoneSeedWithPlanned:`Genera le spec dettagliate della milestone {{label}} ("{{title}}"). Titoli di spec pianificate: {{planned}}. Leggi prima il codice reale, valida il lotto completo e solo allora emetti TUTTE le spec dettagliate della milestone in un'unica risposta/snapshot blueprint-draft.`,repairSnapshot:`Il tuo ultimo blocco blueprint-draft non è stato utilizzabile dall’app ({{reason}}). Riemetti lo snapshot COMPLETO come JSON strettamente valido (a capo nelle stringhe come \\n, niente virgole finali, niente blocchi di codice annidati) — solo il blocco.`,approve:`Approvato — genera ora il backlog dettagliato della Milestone 1.`},u={eyebrow:`{{milestone}} · Spec {{index}}`,close:`Chiudi`,open:`Vedi dettaglio della spec`,empty:`Ancora nessuna descrizione.`,summary:`Riepilogo`,priority:`Priorità`,description:`Descrizione della spec`,acceptanceCriteria:`Criteri di accettazione`,criteriaEmpty:`Ancora nessun criterio di accettazione.`},d={writing:`Scrittura delle spec della Milestone 1…`,specCount:`spec {{n}}`,turn:`turno {{turn}}/{{total}}`,phase:{outline:`Bozza delle spec della Milestone 1…`,details:`Scrittura dettagliata delle spec {{from}}–{{to}} di {{total}}…`,audit:`Verifica di tutte le {{total}} spec…`,repair:`Nuova richiesta delle spec {{from}}–{{to}}…`}},f={title:`Pronto a creare le spec?`,steps:{blueprint:`Blueprint approvato`,specs:`Spec della Milestone 1 generate`,audit:`Audit di qualità`},details:{blueprint:{done:`{{filled}}/{{total}} dimensioni`,pending:`{{filled}}/{{total}} dimensioni`,blocked:`{{filled}}/{{total}} dimensioni`},specs:{done:`{{count}} spec · complete`,pending:`{{count}} di {{min}}–{{max}}`,blocked:`{{count}} spec · servono {{min}}–{{max}}`,writing:`{{written}} di {{count}} scritte`},audit:{done:`nessun problema`,pending:`in attesa delle spec`,blocked:`{{count}} da correggere`,writing:`quando le spec saranno scritte`}},hints:{blueprint:{pending:`Completa l’intervista o di’ «sorprendimi» — finora {{filled}}/{{total}} dimensioni.`,blocked:`Il blueprint è incompleto.`},specs:{pending:`Approva il blueprint e il Builder genererà il backlog della Milestone 1.`,blocked:`La Milestone 1 richiede {{min}}–{{max}} spec (ora {{count}}). Chiedi al Builder di ridimensionarla.`,writing:`Il Builder sta scrivendo ogni spec per intero — l'audit di qualità parte quando il lotto è completo.`},audit:{pending:`In attesa delle spec.`,blocked:`{{count}} problema/i di audit bloccano il commit — apri l’elenco qui sotto.`,writing:`L'audit parte quando tutte le spec sono scritte.`}},issuesCount_one:`{{count}} problema di audit`,issuesCount_other:`{{count}} problemi di audit`,askFix:`Chiedi al Builder di correggerli`},p={repairing:{invalid_json:`Riparazione dello snapshot (l’ultimo blocco non era JSON valido)…`,truncated:`Nuova richiesta dello snapshot (la risposta è stata troncata)…`,quality:`Richiesta al Builder di correggere i problemi di audit…`,automatic:`automatica`},rejected:{title:`L’ultimo snapshot del Builder non è stato utilizzabile`,invalid_json:`Il blocco del blueprint non era JSON valido, quindi il pannello mostra ancora lo stato precedente.`,missing_version:`Il blocco non era uno snapshot di blueprint (manca blueprintVersion).`,truncated:`La risposta è stata troncata prima della chiusura del blocco: non è arrivato nulla.`,autoRepairFailed:`Una riparazione automatica è già stata tentata.`,retry:`Richiedi di nuovo lo snapshot`},repairedNote:`Snapshot riparato automaticamente`,nothingToRepair:`Non c’è nulla da riparare — continua a parlare con il Builder.`,noSession:`Questa conversazione non può essere ripresa con il suo provider; invia invece un nuovo messaggio.`,alreadyStreaming:`Il Builder sta ancora rispondendo.`,halted:{title:`La generazione delle spec si è fermata in anticipo`,detail:`{{written}} spec su {{total}} scritte per intero. Le altre sono ancora solo titoli della bozza.`,resume:`Continua a generare`}},m={title:`Continua da dove eri rimasto`,untitled:`Blueprint senza titolo`,specsComplete:`{{count}} spec pronte`,specsInProgress:`{{count}} spec in corso`,dimensions:`{{filled}}/{{total}} dimensioni`,pendingIssue:`snapshot da riparare`,discard:`Scarta`,discardConfirm:`Conferma eliminazione`,discardCancel:`Mantieni`,resumeFailed:`Impossibile riprendere questo blueprint.`,discardFailed:`Impossibile scartare questo blueprint.`},h={batch_incomplete:`Il Builder non ha ancora segnato il batch come completo.`,spec_count:`Il batch richiede {{min}}–{{max}} spec (ora {{count}}).`,invalid_shape:`La spec {{n}} non è un oggetto valido.`,invalid_kind:`La spec {{n}} richiede un tipo valido (scaffold, feature o verification).`,scaffold_first:`La prima spec deve essere lo scaffold del progetto.`,duplicate_scaffold:`La spec {{n}} non può essere un secondo scaffold.`,title_required:`La spec {{n}} richiede un titolo.`,title_duplicate:`La spec {{n}} ripete il titolo della spec {{other}}.`,summary:`La spec {{n}} richiede un riassunto di una riga sotto i 240 caratteri.`,invalid_priority:`La spec {{n}} richiede una priorità valida.`,canonical_sections:`Alla spec {{n}} mancano le cinque sezioni canoniche in ordine.`,empty_section:`La sezione «{{heading}}» della spec {{n}} è vuota.`,section_bullets:`La spec {{n}} richiede almeno {{min}} punti sotto "{{heading}}".`,complexity_format:`La spec {{n}} richiede un livello di complessità motivato.`,scaffold_readme:`La spec di scaffold deve citare il README esistente.`,criteria_count:`La spec {{n}} richiede {{min}}–{{max}} criteri di accettazione (ne ha {{count}}).`,criterion_quality:`Spec {{n}}, criterio {{criterion}}: non abbastanza concreto.`,duplicate_criterion:`La spec {{n}} ripete il criterio di accettazione {{criterion}}.`,milestone_label:`La spec {{n}} richiede l’etichetta {{label}}.`,domain_label:`La spec {{n}} richiede un’etichetta di dominio oltre a {{label}}.`,invalid_dependency:`La spec {{n}} può dipendere solo da una spec precedente.`,scaffold_dependency:`La spec di scaffold non può dichiarare dipendenze.`,section_depth:`La spec {{n}} richiede una sezione "{{heading}}" più completa (almeno {{min}} caratteri).`},g={state:{planned:`Pianificato`,committed:`Pronto al lancio`,running:`In corso`,delivered:`Consegnato — in attesa di revisione`,done:`Fatto`},counts:`{{delivered}} di {{total}} consegnate · {{done}} fatte`,failedNote_one:`{{count}} spec è fallita all'ultimo tentativo`,failedNote_other:`{{count}} spec sono fallite all'ultimo tentativo`,legend:{done:`Fatte`,onReview:`In revisione`,inProgress:`In corso`,failed:`Fallite all'ultimo tentativo`,todo:`In attesa`},rail:{fallbackName:`Rail {{n}}`,chunk:`Rail {{k}} della catena`,running:`In esecuzione · {{elapsed}}`,review:`Rivedi`,open:`Apri il rail`,noDelivery:`Nessuna consegna ancora`},chain:{title:`Catena sequenziale`,parallelTitle:`Lancio parallelo`,progress:`rail {{k}} di {{n}}`,waiting:`in attesa che il rail {{k}} termini`,stackedOn:`il rail successivo parte da {{branch}}`,paused:`In pausa — {{reason}}`,completed:`Tutti i rail lanciati`,cancelled:`Catena annullata`,resume:`Riprendi`,cancel:`Annulla catena`,resumed:`Catena ripresa`,resumeFailed:`Impossibile riprendere la catena`,cancelledToast:`Catena annullata — i rail in corso continuano`,reasons:{chunk_failed:`l'ultimo rail è fallito`,chunk_stalled:`l'ultimo rail si è bloccato (nessun output dal provider)`,chunk_stopped:`l'ultimo rail è stato fermato`,launch_rejected:`il rail successivo non è partito ({{detail}})`,head_missing:`il branch di base non esiste più`,head_discarded:`la consegna su cui parte il rail successivo è stata scartata`,run_lost:`il rail in esecuzione non è stato trovato dopo un riavvio`,unknown:`in pausa`,provider_limit:`raggiunto il limite d'uso del provider`,rail_limit_reached:`ogni rail ha una PR in attesa della tua decisione — unisci o scarta le PR in sospeso per liberare un rail, poi riprendi`,integration_failed:`l'integrazione della spec è fallita ({{detail}}); riprendendo si ritenta l'integrazione`},checkpoint:`Rail {{k}} di {{n}} consegnato — avviare il rail {{next}}?`,launchNext:`Avvia il prossimo rail`,nextLaunched:`Prossimo rail avviato`,autoAdvance:`Continua automaticamente`,autoAdvanceHint:`Integra ogni spec prima di creare il worktree successivo`,checkpointHint:`Si ferma dopo ogni rail e chiede prima di avviare il successivo`,checkpointNote:`si ferma dopo questo rail`,autoOn:`Continuazione automatica attiva — i prossimi rail partono da soli`,autoOff:`Continuazione automatica disattivata — ti verrà chiesto prima di ogni rail`,autoFailed:`Impossibile aggiornare la catena`,integrating:`integrazione di questa spec prima di avviare la successiva`,cancelFailed:`Impossibile annullare la catena`},toast:{launched:`{{milestone}} lanciato — la spec 1 di {{n}} è sul suo rail; le spec successive seguono automaticamente, un rail ciascuna`,launchedAll:`{{milestone}} lanciato — una spec per rail ({{n}} in totale)`,chainActive:`{{milestone}} è già in lancio — vedi il pannello Blueprint`,chunkLaunched:`{{milestone}} — rail {{k}} di {{n}} lanciato`,paused:`{{milestone}} in pausa — {{reason}}`,resume:`Riprendi`,delivered:`{{milestone}} consegnato — {{count}} spec attendono la tua revisione`,review:`Rivedi`,completed:`{{milestone}} completato — tutte le spec integrate`,launchedCheckpoint:`{{milestone}} avviato — la spec 1 di {{n}} è sul suo rail; ti verrà chiesto prima di ogni successiva`,checkpoint:`{{milestone}} — rail {{k}} di {{n}} consegnato. Avviare il prossimo rail?`,launchNext:`Avvia il prossimo rail`,autoContinue:`Continua auto`,railLimitReached:`{{milestone}} non è partito — ogni rail ha una PR in attesa della tua decisione. Unisci o scarta le PR in sospeso per liberare un rail.`},sequentialHint:`Una spec per rail, in ordine di dipendenza — ogni rail parte dal branch del rail precedente`},_={settledLabel:`Decisione presa`,surprise:{label:`Builder`,hint:`Potrai ritoccare ogni decisione dopo`,title:`Sorprendimi`,description:`Lascia che il Builder decida prodotto, flusso principale, piattaforma, stack e milestone, e ti presenti il blueprint da approvare o ritoccare.`,cta:`Sorprendimi`,settledTitle:`Sorprendimi`,settledDescription:`Hai lasciato che il Builder decidesse tutte le dimensioni del blueprint.`},approve:{label:`Blueprint pronto`,hint:`Oppure scrivi cosa vuoi cambiare`,title:`Approva il blueprint`,description:`Tutte le dimensioni sono decise. Approvalo e il Builder scrive le spec della Milestone 1 per intero, due alla volta, poi verifica il lotto.`,cta:`Approva e genera le spec`,settledTitle:`Blueprint approvato`,settledDescription:`Il Builder sta generando il backlog della Milestone 1 da questo blueprint.`}},v={shell:e,panel:t,commit:n,progress:r,done:i,sidebar:a,errors:o,milestone:s,mode:c,prompts:l,specModal:u,generation:d,readiness:f,snapshot:p,recent:m,quality:h,milestoneProgress:g,decisionCard:_};export{n as commit,_ as decisionCard,v as default,i as done,o as errors,d as generation,s as milestone,g as milestoneProgress,c as mode,t as panel,r as progress,l as prompts,h as quality,f as readiness,m as recent,e as shell,a as sidebar,p as snapshot,u as specModal};
@@ -0,0 +1 @@
1
+ var e={title:`プロジェクトビルダー`,subtitle:`アイデアからマイルストーン1のバックログへ`,close:`ビルダーを閉じる`,emptyTitle:`アプリのアイデアを教えてください`,emptyHint:`1〜2文で十分です。ビルダーが短くインタビューし、完全なブループリントを提案します。すべて任せることもできます。`,surpriseMe:`おまかせ`,inputPlaceholder:`〜ができるアプリ`,createSpecs:`スペックを作成`,createSpecsHint:`マイルストーン 1 のスペックが監査を通過すると利用できます`,providerUnavailable:`プロジェクトビルダーには、ツールなしまたは読み取り専用のネイティブモードを持つプロバイダーが必要です。このプロバイダーは利用できません。`},t={title:`ブループリント`,product:`プロダクト`,coreFlow:`コアフロー`,platform:`プラットフォーム`,stack:`スタック`,milestones:`マイルストーン`,milestonesValue:`{{count}} 件計画済み`,assumptions:`前提`,m1Specs:`マイルストーン1のスペック({{count}})`,dependsOn:`#{{index}} に依存`,criteriaCount:`受け入れ基準 {{count}} 件`,laterMilestones:`以降のマイルストーン`,empty:`会話に合わせてブループリントが埋まっていきます。`,specsComplete:`完了`,specsInProgress:`進行中`,specWriting:`作成中…`,specPendingBody:`未作成`},n={title:`プロジェクトを作成`,description:`確認するまでディスクには何も書き込みません。リポジトリはクリーンなまま — Specrails の成果物は外部に置かれます。`,nameLabel:`プロジェクト名`,locationLabel:`場所`,locationHint:`ここに新しいフォルダを作成します(空か存在しないこと)。`,providersLabel:`AI プロバイダー`,githubLabel:`プライベート GitHub リポジトリを作成`,githubAuthHint:`先にサインイン: gh auth login`,back:`戻る`,submit:`プロジェクトを作成`,creating:`作成中…`,errors:{generic:`コミットを開始できませんでした。値を確認して再試行してください。`,invalid_name:`プロジェクト名は必須です。`,invalid_location:`場所は必須です。`,providers_required:`少なくとも1つのプロバイダーを選択してください。`,unknown_provider:`選択したプロバイダーの1つが利用できません。`,invalid_blueprint:`ブループリントが不完全です。戻ってビルダーで完成させてください。`,m1_specs_required:`ブループリントにマイルストーン1のスペックがまだありません。`,m1_specs_over_cap:`マイルストーン1のスペックが多すぎます(最大10)。ビルダーに絞り込みを頼んでください。`,m1_spec_quality_invalid:`生成されたスペックはまだ実装可能な品質ではありません。ビルダーに戻り、示された項目を改善してください。`,bundled_framework_missing:`同梱フレームワークがありません。Specrails アプリを再インストールしてください。`,location_not_empty:`そのフォルダは既に存在し、空ではありません。別の場所を選んでください。`,location_already_registered:`その場所は既に登録済みプロジェクトのものです。`,commit_failed:`プロジェクト作成に失敗しました。理由はステップ一覧をご覧ください。`}},r={title:`プロジェクトを作成中…`,steps:{"create-dir":`プロジェクトフォルダを作成`,"git-init":`git リポジトリ + README を初期化`,assemble:`Specrails ワークスペースを組み立て(オフライン)`,blueprint:`ブループリントを書き込み`,tickets:`マイルストーン1のスペックを挿入`,register:`プロジェクトを登録`,github:`GitHub リポジトリを作成`},githubErrors:{gh_not_installed:`GitHub CLI (gh) がインストールされていません — リポジトリは作成されませんでした`,gh_not_authenticated:`gh が未ログインです(gh auth login を実行)— リポジトリは作成されませんでした`,gh_scope:`gh のトークンにリポジトリ作成権限がありません(repo スコープ不足)`,gh_repo_exists:`同名のリポジトリが既にアカウントに存在します`,gh_network:`GitHub とのネットワークエラー — リポジトリは作成されませんでした`,generic:`GitHub リポジトリの作成に失敗しました`}},i={title:`プロジェクトを作成しました`,description:`マイルストーン1のバックログが M1 ラベル付きでボードにあります。`,launchM1:`マイルストーン1を起動`,openProject:`プロジェクトを開く`,launchFailed:`マイルストーン1を起動できませんでした`},a={title:`ブループリント`,milestone:`M{{n}}`,launchM1:`マイルストーン1を起動`,generateNext:`M{{n}} を生成`,generateHint:`ブループリントを種にした、実コードに根ざすスペックセッションを開きます`,generateUnavailable:`マイルストーン生成にはネイティブの読み取り専用モードが必要です`},o={startFailed:`ビルダーの会話を開始できませんでした。`,turnFailed:`ビルダーのターンが失敗しました。`,commitFailed:`プロジェクト作成に失敗しました。`},s={title:`{{label}} を生成`,inputPlaceholder:`スペックを磨き込む…`,commit:`{{count}} 件のスペックを {{label}} としてコミット`,commitToast:`{{count}} 件のスペックが {{label}} としてボードに追加されました`,commitFailed:`マイルストーンをコミットできませんでした`,providerUnavailable:`このプロバイダーにはネイティブの読み取り専用モードがないため、マイルストーン生成は利用できません。`,send:`送信`},c={title:`プロジェクトビルダー`,subtitle:`エージェントが新しいプロジェクトを作成中`,exit:`終了`,exitConfirmTitle:`ビルダーを終了しますか?`,exitConfirmBody:`ビルダーはここで停止します。ブループリントは保存済みです。次回ビルダーを開いたときに「前回の続きから」で再開できます。`,exitConfirmCancel:`作成を続ける`,exitConfirmDiscard:`破棄して終了`},l={surpriseMe:`おまかせで——ブループリントの全項目に妥当な値を提案し、m1Specs は空のまま、詳細スペックを生成する前に計画を承認させてください。`,milestoneSeed:`マイルストーン {{label}}("{{title}}")の詳細スペックを生成してください。まず実際のコードを読み、完全な一括セットを検証してから、マイルストーンの詳細スペックをすべて単一の blueprint-draft レスポンス/スナップショットで出力してください。`,milestoneSeedWithPlanned:`マイルストーン {{label}}("{{title}}")の詳細スペックを生成してください。計画中のスペックタイトル:{{planned}}。まず実際のコードを読み、完全な一括セットを検証してから、マイルストーンの詳細スペックをすべて単一の blueprint-draft レスポンス/スナップショットで出力してください。`,repairSnapshot:`直前の blueprint-draft ブロックはアプリで使用できませんでした({{reason}})。完全なスナップショットを厳密に有効な JSON で再出力してください(文字列内の改行は \\n にエスケープ、末尾カンマなし、ネストしたコードブロックなし)。ブロックのみを出力してください。`,approve:`承認 — マイルストーン1の詳細バックログを今すぐ生成してください。`},u={eyebrow:`{{milestone}} · スペック {{index}}`,close:`閉じる`,open:`スペックの詳細を見る`,empty:`まだ説明がありません。`,summary:`概要`,priority:`優先度`,description:`スペックの説明`,acceptanceCriteria:`受け入れ基準`,criteriaEmpty:`受け入れ基準はまだありません。`},d={writing:`マイルストーン 1 のスペックを作成中…`,specCount:`スペック {{n}}`,turn:`ターン {{turn}}/{{total}}`,phase:{outline:`マイルストーン 1 のスペックの概要を作成中…`,details:`スペック {{from}}〜{{to}}(全 {{total}} 件)を詳細に作成中…`,audit:`{{total}} 件すべてのスペックを監査中…`,repair:`スペック {{from}}〜{{to}} を再依頼中…`}},f={title:`スペックを作成する準備はできましたか?`,steps:{blueprint:`ブループリント承認済み`,specs:`マイルストーン 1 のスペック生成済み`,audit:`品質監査`},details:{blueprint:{done:`{{filled}}/{{total}} 項目`,pending:`{{filled}}/{{total}} 項目`,blocked:`{{filled}}/{{total}} 項目`},specs:{done:`{{count}} 件 · 完了`,pending:`{{count}} / {{min}}–{{max}} 件`,blocked:`{{count}} 件 · {{min}}–{{max}} 件が必要`,writing:`{{count}} 件中 {{written}} 件作成済み`},audit:{done:`問題なし`,pending:`スペック待ち`,blocked:`{{count}} 件の修正が必要`,writing:`スペック作成後に実行`}},hints:{blueprint:{pending:`インタビューを終えるか「おまかせ」と伝えてください。現在 {{filled}}/{{total}} 項目です。`,blocked:`ブループリントが不完全です。`},specs:{pending:`ブループリントを承認すると、ビルダーがマイルストーン 1 のバックログを生成します。`,blocked:`マイルストーン 1 には {{min}}–{{max}} 件のスペックが必要です(現在 {{count}} 件)。ビルダーに調整を依頼してください。`,writing:`ビルダーが各スペックを完全に作成中です。バッチ完了後に品質監査を実行します。`},audit:{pending:`スペックを待っています。`,blocked:`{{count}} 件の監査問題がコミットを妨げています。下のリストを開いてください。`,writing:`すべてのスペック作成後に監査を実行します。`}},issuesCount_one:`監査問題 {{count}} 件`,issuesCount_other:`監査問題 {{count}} 件`,askFix:`ビルダーに修正を依頼`},p={repairing:{invalid_json:`スナップショットを修復中(直前のブロックが有効な JSON ではありませんでした)…`,truncated:`スナップショットを再要求中(応答が途中で切れました)…`,quality:`ビルダーに監査問題の修正を依頼中…`,automatic:`自動`},rejected:{title:`ビルダーの直前のスナップショットを使用できませんでした`,invalid_json:`ブループリントのブロックが有効な JSON ではなかったため、パネルは以前の状態のままです。`,missing_version:`ブロックはブループリントのスナップショットではありませんでした(blueprintVersion がありません)。`,truncated:`ブロックが閉じる前に応答が切れたため、何も受信できませんでした。`,autoRepairFailed:`自動修復はすでに試行済みです。`,retry:`スナップショットを再要求`},repairedNote:`スナップショットを自動修復しました`,nothingToRepair:`修復するものはありません。ビルダーとの会話を続けてください。`,noSession:`この会話はプロバイダーで再開できません。代わりに新しいメッセージを送ってください。`,alreadyStreaming:`ビルダーはまだ応答中です。`,halted:{title:`スペック生成が途中で停止しました`,detail:`{{total}} 件中 {{written}} 件のスペックを完全に作成済み。残りはまだアウトラインのタイトルのみです。`,resume:`生成を続行`}},m={title:`前回の続きから`,untitled:`無題のブループリント`,specsComplete:`スペック {{count}} 件 準備完了`,specsInProgress:`スペック {{count}} 件 進行中`,dimensions:`{{filled}}/{{total}} 項目`,pendingIssue:`要修復のスナップショット`,discard:`破棄`,discardConfirm:`破棄を確定`,discardCancel:`保持`,resumeFailed:`そのブループリントを再開できませんでした。`,discardFailed:`そのブループリントを破棄できませんでした。`},h={batch_incomplete:`ビルダーはまだこのバッチを完了とマークしていません。`,spec_count:`バッチには {{min}}–{{max}} 件のスペックが必要です(現在 {{count}} 件)。`,invalid_shape:`スペック {{n}} は有効なオブジェクトではありません。`,invalid_kind:`スペック {{n}} には有効な種類(scaffold、feature、verification)が必要です。`,scaffold_first:`最初のスペックはプロジェクトのスキャフォールドである必要があります。`,duplicate_scaffold:`スペック {{n}} を 2 つ目のスキャフォールドにはできません。`,title_required:`スペック {{n}} にはタイトルが必要です。`,title_duplicate:`スペック {{n}} はスペック {{other}} とタイトルが重複しています。`,summary:`スペック {{n}} には 240 文字未満の 1 行要約が必要です。`,invalid_priority:`スペック {{n}} には有効な優先度が必要です。`,canonical_sections:`スペック {{n}} には順序どおりの 5 つの標準セクションが不足しています。`,empty_section:`スペック {{n}} の「{{heading}}」セクションが空です。`,section_bullets:`スペック {{n}} の「{{heading}}」には少なくとも {{min}} 個の箇条書きが必要です。`,complexity_format:`スペック {{n}} には根拠付きの複雑度レベルが必要です。`,scaffold_readme:`スキャフォールドのスペックは既存の README に言及する必要があります。`,criteria_count:`スペック {{n}} には {{min}}〜{{max}} 個の受け入れ基準が必要です(現在 {{count}} 個)。`,criterion_quality:`スペック {{n}} の基準 {{criterion}} は具体性が足りません。`,duplicate_criterion:`スペック {{n}} は受け入れ基準 {{criterion}} を繰り返しています。`,milestone_label:`スペック {{n}} には {{label}} ラベルが必要です。`,domain_label:`スペック {{n}} には {{label}} に加えてドメインラベルが必要です。`,invalid_dependency:`スペック {{n}} は先行するスペックにのみ依存できます。`,scaffold_dependency:`スキャフォールドのスペックは依存関係を宣言できません。`,section_depth:`スペック {{n}} の「{{heading}}」をもっと充実させてください({{min}} 文字以上)。`},g={state:{planned:`計画済み`,committed:`起動可能`,running:`進行中`,delivered:`納品済み — レビュー待ち`,done:`完了`},counts:`{{total}} 件中 {{delivered}} 件納品 · {{done}} 件完了`,failedNote_one:`{{count}} 件のスペックが前回の試行で失敗しました`,failedNote_other:`{{count}} 件のスペックが前回の試行で失敗しました`,legend:{done:`完了`,onReview:`レビュー中`,inProgress:`進行中`,failed:`前回の試行で失敗`,todo:`未着手`},rail:{fallbackName:`レール {{n}}`,chunk:`チェーンのレール {{k}}`,running:`実行中 · {{elapsed}}`,review:`レビュー`,open:`レールを開く`,noDelivery:`まだ納品なし`},chain:{title:`順次チェーン`,parallelTitle:`並列起動`,progress:`レール {{k}}/{{n}}`,waiting:`レール {{k}} の完了を待機中`,stackedOn:`次のレールは {{branch}} を基に構築`,paused:`一時停止 — {{reason}}`,completed:`すべてのレールを起動済み`,cancelled:`チェーンはキャンセルされました`,resume:`再開`,cancel:`チェーンをキャンセル`,resumed:`チェーンを再開しました`,resumeFailed:`チェーンを再開できませんでした`,cancelledToast:`チェーンをキャンセルしました — 実行中のレールは継続します`,reasons:{chunk_failed:`前のレールが失敗しました`,chunk_stalled:`前のレールが停止しました(プロバイダーの出力なし)`,chunk_stopped:`前のレールが停止されました`,launch_rejected:`次のレールを起動できませんでした({{detail}})`,head_missing:`基にするブランチが存在しません`,head_discarded:`次のレールの基になる納品が破棄されました`,run_lost:`再起動後に実行中のレールが見つかりません`,unknown:`一時停止`,provider_limit:`プロバイダーの利用上限に達しました`,rail_limit_reached:`すべてのレールに判断待ちの PR があります — 保留中の PR をマージまたは破棄してレールを空けてから再開してください`,integration_failed:`スペックの統合に失敗しました({{detail}})。再開すると統合を再試行します`},checkpoint:`レール {{k}}/{{n}} を納品 — レール {{next}} を起動しますか?`,launchNext:`次のレールを起動`,nextLaunched:`次のレールを起動しました`,autoAdvance:`自動で続行`,autoAdvanceHint:`次のワークツリーを作成する前に、各スペックを統合します`,checkpointHint:`各レールの後で停止し、次を起動する前に確認します`,checkpointNote:`このレールの後で停止`,autoOn:`自動続行オン — 次のレールは自動で起動します`,autoOff:`自動続行オフ — 各レールの前に確認します`,autoFailed:`チェーンを更新できませんでした`,integrating:`次を起動する前にこのスペックを統合中`,cancelFailed:`チェーンをキャンセルできませんでした`},toast:{launched:`{{milestone}} を起動 — スペック 1/{{n}} がレール上にあります。以降のスペックはそれぞれ 1 レールで自動的に続きます`,launchedAll:`{{milestone}} を起動 — 1 レールに 1 スペック(合計 {{n}})`,chainActive:`{{milestone}} はすでに起動中です — ブループリントパネルを確認`,chunkLaunched:`{{milestone}} — レール {{k}}/{{n}} を起動`,paused:`{{milestone}} を一時停止 — {{reason}}`,resume:`再開`,delivered:`{{milestone}} を納品 — {{count}} 件のスペックがレビュー待ちです`,review:`レビュー`,completed:`{{milestone}} 完了 — すべてのスペックをマージ済み`,launchedCheckpoint:`{{milestone}} を起動 — スペック 1/{{n}} がレール上にあります。次のスペックごとに確認します`,checkpoint:`{{milestone}} — レール {{k}}/{{n}} を納品。次のレールを起動しますか?`,launchNext:`次のレールを起動`,autoContinue:`自動続行`,railLimitReached:`{{milestone}} を起動できませんでした — すべてのレールに判断待ちの PR があります。保留中の PR をマージまたは破棄してレールを空けてください。`},sequentialHint:`1 レールに 1 スペック、依存関係の順に — 各レールは前のレールのブランチを基に構築します`},_={settledLabel:`決定済み`,surprise:{label:`ビルダー`,hint:`どの決定も後から調整できます`,title:`おまかせ`,description:`製品・コアフロー・プラットフォーム・スタック・マイルストーンをビルダーに決めさせ、ブループリントを承認または調整できる形で提示します。`,cta:`おまかせ`,settledTitle:`おまかせ`,settledDescription:`ブループリントの全項目をビルダーに決めさせました。`},approve:{label:`ブループリント準備完了`,hint:`または変更したい点を入力`,title:`ブループリントを承認`,description:`すべての項目が決まりました。承認するとビルダーがマイルストーン1のスペックを2件ずつ完全に作成し、バッチを監査します。`,cta:`承認してスペックを生成`,settledTitle:`ブループリント承認済み`,settledDescription:`ビルダーがこのブループリントからマイルストーン1のバックログを生成中です。`}},v={shell:e,panel:t,commit:n,progress:r,done:i,sidebar:a,errors:o,milestone:s,mode:c,prompts:l,specModal:u,generation:d,readiness:f,snapshot:p,recent:m,quality:h,milestoneProgress:g,decisionCard:_};export{n as commit,_ as decisionCard,v as default,i as done,o as errors,d as generation,s as milestone,g as milestoneProgress,c as mode,t as panel,r as progress,l as prompts,h as quality,f as readiness,m as recent,e as shell,a as sidebar,p as snapshot,u as specModal};
@@ -0,0 +1 @@
1
+ import{a as e}from"./rolldown-runtime-CNC7AqOf.js";import{n as t,t as n}from"./jsx-runtime-BbYvbtY8.js";import{n as r,t as i}from"./utils-ELimjS2Y.js";var a=e(t(),1),o=Object.defineProperty,s=(e,t)=>o(e,`name`,{value:t,configurable:!0});function c(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}s(c,`setRef`);function l(...e){return t=>{let n=!1,r=e.map(e=>{let r=c(e,t);return!n&&typeof r==`function`&&(n=!0),r});if(n)return()=>{for(let t=0;t<r.length;t++){let n=r[t];typeof n==`function`?n():c(e[t],null)}}}}s(l,`composeRefs`);function u(...e){return a.useCallback(l(...e),e)}s(u,`useComposedRefs`);var d=Object.defineProperty,f=(e,t)=>d(e,`name`,{value:t,configurable:!0});function p(e){let t=a.forwardRef((t,n)=>{let{children:r,...i}=t,o=null,s=!1,c=[];r=w(r),a.Children.forEach(r,e=>{if(b(e)){s=!0;let t=e,n=`child`in t.props?t.props.child:t.props.children;for(;S(n)&&typeof O==`function`;)n=O(n._payload);o=_(t,n),c.push(o?.props?.children)}else c.push(e)}),o?o=a.cloneElement(o,void 0,c):!s&&a.Children.count(r)===1&&a.isValidElement(r)&&(o=r);let l=o?y(o):void 0,d=u(n,l);if(!o){if(r||r===0)throw Error(s?D(e):E(e));return r}let f=v(i,o.props??{});return o.type!==a.Fragment&&(f.ref=n?d:l),a.cloneElement(o,f)});return t.displayName=`${e}.Slot`,t}f(p,`createSlot`);var m=p(`Slot`),h=Symbol.for(`radix.slottable`);function g(e){let t=f(e=>`child`in e?e.children(e.child):e.children,`Slottable`);return t.displayName=`${e}.Slottable`,t.__radixId=h,t}f(g,`createSlottable`);var _=f((e,t)=>`child`in e.props?a.isValidElement(t)?a.cloneElement(t,void 0,e.props.children(t.props.children)):null:a.isValidElement(t)?t:null,`getSlottableElementFromSlottable`);function v(e,t){let n={...t};for(let r in t){let i=e[r],a=t[r];/^on[A-Z]/.test(r)?i&&a?n[r]=(...e)=>{let t=a(...e);return i(...e),t}:i&&(n[r]=i):r===`style`?n[r]={...i,...a}:r===`className`?n[r]=[i,a].filter(Boolean).join(` `):r===`aria-describedby`&&(n[r]=T(a,i))}return{...e,...n}}f(v,`mergeProps`);function y(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}f(y,`getElementRef`);function b(e){return a.isValidElement(e)&&typeof e.type==`function`&&`__radixId`in e.type&&e.type.__radixId===h}f(b,`isSlottable`);var x=Symbol.for(`react.lazy`);function S(e){return typeof e==`object`&&!!e&&`$$typeof`in e&&e.$$typeof===x&&`_payload`in e&&C(e._payload)}f(S,`isLazyComponent`);function C(e){return typeof e==`object`&&!!e&&`then`in e}f(C,`isPromiseLike`);function w(e){let t=e;for(;S(t)&&typeof O==`function`;)t=O(t._payload);return t}f(w,`useUnwrappedLazy`);function T(...e){let t=new Set;for(let n of e)if(typeof n==`string`)for(let e of String(n).trim().split(/\s+/))e&&t.add(e);return t.size>0?Array.from(t).join(` `):void 0}f(T,`concatAriaDescribedby`);var E=f(e=>`${e} failed to slot onto its children. Expected a single React element child or \`Slottable\`.`,`createSlotError`),D=f(e=>`${e} failed to slot onto its \`Slottable\`. Expected \`Slottable\` to receive a single React element child.`,`createSlottableError`),O=a.use,k=e=>typeof e==`boolean`?`${e}`:e===0?`0`:e,A=r,j=(e,t)=>n=>{if(t?.variants==null)return A(e,n?.class,n?.className);let{variants:r,defaultVariants:i}=t,a=Object.keys(r).map(e=>{let t=n?.[e],a=i?.[e];if(t===null)return null;let o=k(t)||k(a);return r[e][o]}),o=n&&Object.entries(n).reduce((e,t)=>{let[n,r]=t;return r===void 0||(e[n]=r),e},{});return A(e,a,t?.compoundVariants?.reduce((e,t)=>{let{class:n,className:r,...a}=t;return Object.entries(a).every(e=>{let[t,n]=e;return Array.isArray(n)?n.includes({...i,...o}[t]):{...i,...o}[t]===n})?[...e,n,r]:e},[]),n?.class,n?.className)},M=n(),N=j(`inline-flex items-center justify-center whitespace-nowrap rounded-control text-xs font-medium transition-[background-color,color,box-shadow,transform] duration-[var(--duration-fast)] ease-[var(--ease-out)] active:scale-[0.98] active:duration-[var(--duration-instant)] disabled:pointer-events-none disabled:opacity-50`,{variants:{variant:{default:`bg-primary text-primary-foreground hover:bg-primary/90`,destructive:`bg-destructive text-destructive-foreground hover:bg-destructive/90`,outline:`border border-input bg-background hover:bg-accent hover:text-accent-foreground`,secondary:`bg-secondary text-secondary-foreground hover:bg-secondary/80`,ghost:`hover:bg-accent hover:text-accent-foreground`,link:`text-primary underline-offset-4 hover:underline`},size:{default:`h-8 px-3 py-1.5`,sm:`h-7 rounded-control px-2`,lg:`h-10 rounded-control px-6 text-strong`,icon:`h-8 w-8`}},defaultVariants:{variant:`default`,size:`default`}}),P=a.forwardRef(({className:e,variant:t,size:n,asChild:r=!1,...a},o)=>(0,M.jsx)(r?m:`button`,{className:i(N({variant:t,size:n,className:e})),ref:o,...a}));P.displayName=`Button`;export{j as n,P as t};
@@ -0,0 +1 @@
1
+ var e={openChat:`Abrir chat`,dragToResize:`Arrastra para redimensionar`,tabTitle:`Chat {{n}}`,startConversation:`Inicia una conversación sobre este proyecto`,noConversations:`Aún no hay conversaciones`,newConversation:`Nueva conversación`,suggestions:{projectStatus:`¿Cuál es el estado del proyecto?`,recentFailures:`Muestra los trabajos fallidos recientes`,commands:`¿Qué comandos debería ejecutar?`,explainCodebase:`Explica la base de código`}},t={fallbackTitle:`Chat`,newConversation:`Nueva conversación`,deleteConversation:`Eliminar conversación`,restorePanel:`Restaurar panel de chat`,maximizePanel:`Maximizar panel de chat`,closeChat:`Cerrar chat`},n={placeholder:`Mensaje...`,send:`Enviar`,stop:`Detener`,modelLocked:`No se puede cambiar el modelo durante una conversación activa`},r={contextLoaded:`Contexto cargado — listo para ayudar`,noMessages:`Aún no hay mensajes`,askAnything:`Pregunta a Claude lo que quieras sobre tu proyecto`,suggestions:{currentStatus:`¿Cuál es el estado actual del proyecto?`,recentFailures:`Muéstrame los trabajos fallidos recientes`,testsToRun:`¿Qué tests debería ejecutar?`,mainArchitecture:`Explica la arquitectura principal`}},i={sendFailed:`No se pudo enviar el mensaje`},a={minimizedSessions_one:`{{count}} sesión minimizada`,minimizedSessions_other:`{{count}} sesiones minimizadas`,minimizedCount:`{{count}} minimizadas`,unknownProject:`Proyecto desconocido`},o={restore:`Restaurar {{label}}`,close:`Cerrar {{label}}`,continueEditing:`Seguir editando · {{projectName}}`,kindAiEdit:`AI Edit`,kindExploreSpec:`Explore Spec`},s={panel:e,header:t,input:n,messageList:r,errors:i,dock:a,chip:o};export{o as chip,s as default,a as dock,i as errors,t as header,n as input,r as messageList,e as panel};
@@ -0,0 +1 @@
1
+ import{t as e}from"./createLucideIcon-DtODIU64.js";var t={name:`chevron-right`,size:24,node:[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]};t.node;var n=e(t);export{n as t};
@@ -0,0 +1 @@
1
+ import{t as e}from"./createLucideIcon-DtODIU64.js";var t={name:`check`,size:24,node:[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]};t.node;var n=e(t),r={name:`chevron-down`,size:24,node:[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]};r.node;var i=e(r),a={name:`chevron-up`,size:24,node:[[`path`,{d:`m18 15-6-6-6 6`,key:`153udz`}]]};a.node;var o=e(a);export{i as n,n as r,o as t};
@@ -0,0 +1,3 @@
1
+ import{a as e}from"./rolldown-runtime-CNC7AqOf.js";import{n as t}from"./jsx-runtime-BbYvbtY8.js";import{t as n}from"./preload-helper-Czpn1I53.js";var r=e(t(),1),i=/^(?:[a-z][a-z0-9+.-]*:|[\\/]{2})/i,a=/^[\\/]{2}/;function o(e,t){return t+e.replace(/\\/g,`/`)}var s=`popstate`;function c(e){return typeof e==`object`&&!!e&&`pathname`in e&&`search`in e&&`hash`in e&&`state`in e&&`key`in e}function l(e={}){function t(e,t){let n=t.state?.masked,{pathname:r,search:i,hash:a}=n||e.location;return m(``,{pathname:r,search:i,hash:a},t.state&&t.state.usr||null,t.state&&t.state.key||`default`,n?{pathname:e.location.pathname,search:e.location.search,hash:e.location.hash}:void 0)}function n(e,t){return typeof t==`string`?t:h(t)}return _(t,n,null,e)}function u(e,t){if(e===!1||e==null)throw Error(t)}function d(e,t){if(!e){typeof console<`u`&&console.warn(t);try{throw Error(t)}catch{}}}function f(){return Math.random().toString(36).substring(2,10)}function p(e,t){return{usr:e.state,key:e.key,idx:t,masked:e.mask?{pathname:e.pathname,search:e.search,hash:e.hash}:void 0}}function m(e,t,n=null,r,i){return{pathname:typeof e==`string`?e:e.pathname,search:``,hash:``,...typeof t==`string`?g(t):t,state:n,key:t&&t.key||r||f(),mask:i}}function h({pathname:e=`/`,search:t=``,hash:n=``}){return t&&t!==`?`&&(e+=t.charAt(0)===`?`?t:`?`+t),n&&n!==`#`&&(e+=n.charAt(0)===`#`?n:`#`+n),e}function g(e){let t={};if(e){let n=e.indexOf(`#`);n>=0&&(t.hash=e.substring(n),e=e.substring(0,n));let r=e.indexOf(`?`);r>=0&&(t.search=e.substring(r),e=e.substring(0,r)),e&&(t.pathname=e)}return t}function _(e,t,n,r={}){let{window:i=document.defaultView,v5Compat:a=!1}=r,o=i.history,l=`POP`,u=null,d=f();d??(d=0,o.replaceState({...o.state,idx:d},``));function f(){return(o.state||{idx:null}).idx}function h(){l=`POP`;let e=f(),t=e==null?null:e-d;d=e,u&&u({action:l,location:b.location,delta:t})}function g(e,t){l=`PUSH`;let r=c(e)?e:m(b.location,e,t);n&&n(r,e),d=f()+1;let s=p(r,d),h=b.createHref(r.mask||r);try{o.pushState(s,``,h)}catch(e){if(e instanceof DOMException&&e.name===`DataCloneError`)throw e;i.location.assign(h)}a&&u&&u({action:l,location:b.location,delta:1})}function _(e,t){l=`REPLACE`;let r=c(e)?e:m(b.location,e,t);n&&n(r,e),d=f();let i=p(r,d),s=b.createHref(r.mask||r);o.replaceState(i,``,s),a&&u&&u({action:l,location:b.location,delta:0})}function y(e){return v(i,e)}let b={get action(){return l},get location(){return e(i,o)},listen(e){if(u)throw Error(`A history only accepts one active listener`);return i.addEventListener(s,h),u=e,()=>{i.removeEventListener(s,h),u=null}},createHref(e){return t(i,e)},createURL:y,encodeLocation(e){let t=y(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:g,replace:_,go(e){return o.go(e)}};return b}function v(e,t,n=!1){let r=`http://localhost`;e&&(r=e.location.origin===`null`?e.location.href:e.location.origin),u(r,`No window.location.(origin|href) available to create URL`);let i=typeof t==`string`?t:h(t);return i=i.replace(/ $/,`%20`),!n&&a.test(i)&&(i=r+i),new URL(i,r)}function y(e,t,n=`/`){return b(e,t,n,!1)}function b(e,t,n,r,i){let a=O((typeof t==`string`?g(t):t).pathname||`/`,n);if(a==null)return null;let o=i??S(e),s=null,c=de(a);for(let e=0;s==null&&e<o.length;++e)s=ce(o[e],c,r);return s}function x(e,t){let{route:n,pathname:r,params:i}=e;return{id:n.id,pathname:r,params:i,data:t[n.id],loaderData:t[n.id],handle:n.handle}}function S(e){let t=C(e);return T(t),t}function C(e,t=[],n=[],r=``,i=!1){let a=(e,a,o=i,s)=>{let c={relativePath:s===void 0?e.path||``:s,caseSensitive:e.caseSensitive===!0,childrenIndex:a,route:e};if(c.relativePath.startsWith(`/`)){if(!c.relativePath.startsWith(r)&&o)return;u(c.relativePath.startsWith(r),`Absolute route path "${c.relativePath}" nested under path "${r}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),c.relativePath=c.relativePath.slice(r.length)}let l=A([r,c.relativePath]),d=n.concat(c);e.children&&e.children.length>0&&(u(e.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${l}".`),C(e.children,t,d,l,o)),!(e.path==null&&!e.index)&&t.push({path:l,score:oe(l,e.index),routesMeta:d.map((e,t)=>{let[n,r]=ue(e.relativePath,e.caseSensitive,t===d.length-1);return{...e,matcher:n,compiledParams:r}})})};return e.forEach((e,t)=>{if(e.path===``||!e.path?.includes(`?`))a(e,t);else for(let n of w(e.path))a(e,t,!0,n)}),t}function w(e){let t=e.split(`/`);if(t.length===0)return[];let[n,...r]=t,i=n.endsWith(`?`),a=n.replace(/\?$/,``);if(r.length===0)return i?[a,``]:[a];let o=w(r.join(`/`)),s=[];return s.push(...o.map(e=>e===``?a:[a,e].join(`/`))),i&&s.push(...o),s.map(t=>e.startsWith(`/`)&&t===``?`/`:t)}function T(e){e.sort((e,t)=>e.score===t.score?se(e.routesMeta.map(e=>e.childrenIndex),t.routesMeta.map(e=>e.childrenIndex)):t.score-e.score)}var ee=/^:[\w-]+$/,te=3,ne=2,re=1,ie=10,E=-2,ae=e=>e===`*`;function oe(e,t){let n=e.split(`/`),r=n.length;return n.some(ae)&&(r+=E),t&&(r+=ne),n.filter(e=>!ae(e)).reduce((e,t)=>e+(ee.test(t)?te:t===``?re:ie),r)}function se(e,t){return e.length===t.length&&e.slice(0,-1).every((e,n)=>e===t[n])?e[e.length-1]-t[t.length-1]:0}function ce(e,t,n=!1){let{routesMeta:r}=e,i={},a=`/`,o=[];for(let e=0;e<r.length;++e){let s=r[e],c=e===r.length-1,l=a===`/`?t:t.slice(a.length)||`/`,u={path:s.relativePath,caseSensitive:s.caseSensitive,end:c},d=s.matcher&&s.compiledParams?le(u,l,s.matcher,s.compiledParams):D(u,l),f=s.route;if(!d&&c&&n&&!r[r.length-1].route.index&&(d=D({path:s.relativePath,caseSensitive:s.caseSensitive,end:!1},l)),!d)return null;Object.assign(i,d.params),o.push({params:i,pathname:A([a,d.pathname]),pathnameBase:ve(A([a,d.pathnameBase])),route:f}),d.pathnameBase!==`/`&&(a=A([a,d.pathnameBase]))}return o}function D(e,t){typeof e==`string`&&(e={path:e,caseSensitive:!1,end:!0});let[n,r]=ue(e.path,e.caseSensitive,e.end);return le(e,t,n,r)}function le(e,t,n,r){let i=t.match(n);if(!i)return null;let a=i[0],o=j(a,1),s=i.slice(1);return{params:r.reduce((e,{paramName:t,isOptional:n},r)=>{if(t===`*`){let e=s[r]||``;o=j(a.slice(0,a.length-e.length),1)}let i=s[r];return n&&!i?e[t]=void 0:e[t]=(i||``).replace(/%2F/g,`/`),e},{}),pathname:a,pathnameBase:o,pattern:e}}function ue(e,t=!1,n=!0){d(e===`*`||!e.endsWith(`*`)||e.endsWith(`/*`),`Route path "${e}" will be treated as if it were "${e.replace(/\*$/,`/*`)}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${e.replace(/\*$/,`/*`)}".`);let r=[],i=`^`+e.replace(/\/*\*?$/,``).replace(/^\/*/,`/`).replace(/[\\.*+^${}|()[\]]/g,`\\$&`).replace(/\/:([\w-]+)(\?)?/g,(e,t,n,i,a)=>{if(r.push({paramName:t,isOptional:n!=null}),n){let t=a.charAt(i+e.length);return t&&t!==`/`?`/([^\\/]*)`:`(?:/([^\\/]*))?`}return`/([^\\/]+)`}).replace(/\/([\w-]+)\?(\/|$)/g,`(/$1)?$2`);return e.endsWith(`*`)?(r.push({paramName:`*`}),i+=e===`*`||e===`/*`?`(.*)$`:`(?:\\/(.+)|\\/*)$`):n?i+=`\\/*$`:e!==``&&e!==`/`&&(i+=`(?:(?=\\/|$))`),[new RegExp(i,t?void 0:`i`),r]}function de(e){try{return e.split(`/`).map(e=>decodeURIComponent(e).replace(/\//g,`%2F`)).join(`/`)}catch(t){return d(!1,`The URL path "${e}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${t}).`),e}}function O(e,t){if(t===`/`)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith(`/`)?t.length-1:t.length,r=e.charAt(n);return r&&r!==`/`?null:e.slice(n)||`/`}function fe(e,t=`/`){let{pathname:n,search:r=``,hash:i=``}=typeof e==`string`?g(e):e,a;return n?(n=_e(n),a=n.startsWith(`/`)||n.startsWith(`\\`)?pe(n.substring(1),`/`):pe(n,t)):a=t,{pathname:a,search:ye(r),hash:be(i)}}function pe(e,t){let n=j(t).split(`/`);return e.split(`/`).forEach(e=>{e===`..`?n.length>1&&n.pop():e!==`.`&&n.push(e)}),n.length>1?n.join(`/`):`/`}function me(e,t,n,r){return`Cannot include a '${e}' character in a manually specified \`to.${t}\` field [${JSON.stringify(r)}]. Please separate it out to the \`to.${n}\` field. Alternatively you may provide the full path as a string in <Link to="..."> and the router will parse it for you.`}function he(e){return e.filter((e,t)=>t===0||e.route.path&&e.route.path.length>0)}function ge(e){let t=he(e);return t.map((e,n)=>n===t.length-1?e.pathname:e.pathnameBase)}function k(e,t,n,r=!1){let i;typeof e==`string`?i=g(e):(i={...e},u(!i.pathname||!i.pathname.includes(`?`),me(`?`,`pathname`,`search`,i)),u(!i.pathname||!i.pathname.includes(`#`),me(`#`,`pathname`,`hash`,i)),u(!i.search||!i.search.includes(`#`),me(`#`,`search`,`hash`,i)));let a=e===``||i.pathname===``,o=a?`/`:i.pathname,s;if(o==null)s=n;else{let e=t.length-1;if(!r&&o.startsWith(`..`)){let t=o.split(`/`);for(;t[0]===`..`;)t.shift(),--e;i.pathname=t.join(`/`)}s=e>=0?t[e]:`/`}let c=fe(i,s),l=o&&o!==`/`&&o.endsWith(`/`),d=(a||o===`.`)&&n.endsWith(`/`);return!c.pathname.endsWith(`/`)&&(l||d)&&(c.pathname+=`/`),c}var _e=e=>e.replace(/[\\/]{2,}/g,`/`),A=e=>_e(e.join(`/`));function j(e,t=0){let n=e.length;for(;n>t&&e.charCodeAt(n-1)===47;)n--;return n===e.length?e:e.slice(0,n)}var ve=e=>j(e).replace(/^\/*/,`/`),ye=e=>!e||e===`?`?``:e.startsWith(`?`)?e:`?`+e,be=e=>!e||e===`#`?``:e.startsWith(`#`)?e:`#`+e,xe=class{constructor(e,t,n,r=!1){this.status=e,this.statusText=t||``,this.internal=r,n instanceof Error?(this.data=n.toString(),this.error=n):this.data=n}};function Se(e){return e!=null&&typeof e.status==`number`&&typeof e.statusText==`string`&&typeof e.internal==`boolean`&&`data`in e}function Ce(e){return A(e.map(e=>e.route.path).filter(Boolean))||`/`}var we=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;function Te(e,t){let n=e;if(typeof n!=`string`||!i.test(n))return{absoluteURL:void 0,isExternal:!1,to:n};let r=n,s=!1;if(we)try{let e=new URL(window.location.href),r=a.test(n)?new URL(o(n,e.protocol)):new URL(n),i=O(r.pathname,t);r.origin===e.origin&&i!=null?n=i+r.search+r.hash:s=!0}catch{d(!1,`<Link to="${n}"> contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:r,isExternal:s,to:n}}Object.getOwnPropertyNames(Object.prototype).sort().join(`\0`);var Ee=new URL(`http://localhost`);function M(e){if(e.createURL)return e.createURL(`/`);try{return new URL(e.createHref(`/`),Ee)}catch{return Ee}}function N(e,t){return e.origin===t.origin&&(e.origin!==`null`||e.protocol===t.protocol&&e.host===t.host)}function De(e,t){if(e.startsWith(`//`))return!0;let n=t.protocol.toLowerCase();return e.toLowerCase().startsWith(n)?t.host===``||e.slice(n.length).startsWith(`//`):!1}function P(e,t,n,r){let i=null;try{i=e==null?null:new URL(e,n)}catch{}let a=new URL(t,n),o=i!=null&&!N(i,n),s=!N(a,n);if(r===`reject`){if(o||s)throw Error(`External navigation is not allowed`)}else if(s&&(i==null||!De(e,i)||!N(i,a)))throw Error(`External navigation is not allowed`)}var Oe=[`POST`,`PUT`,`PATCH`,`DELETE`];new Set(Oe);var ke=[`GET`,...Oe];new Set(ke);var Ae=[`about:`,`blob:`,`chrome:`,`chrome-untrusted:`,`content:`,`data:`,`devtools:`,`file:`,`filesystem:`,`javascript:`];function je(e){try{return Ae.includes(new URL(e).protocol)}catch{return!1}}var F=r.createContext(null);F.displayName=`DataRouter`;var I=r.createContext(null);I.displayName=`DataRouterState`;var Me=r.createContext(!1);function Ne(){return r.useContext(Me)}var Pe=r.createContext({isTransitioning:!1});Pe.displayName=`ViewTransition`;var Fe=r.createContext(new Map);Fe.displayName=`Fetchers`;var Ie=r.createContext(null);Ie.displayName=`Await`;var L=r.createContext(null);L.displayName=`Navigation`;var R=r.createContext(null);R.displayName=`Location`;var z=r.createContext({outlet:null,matches:[],isDataRoute:!1});z.displayName=`Route`;var Le=r.createContext(null);Le.displayName=`RouteError`;var Re=`REACT_ROUTER_ERROR`,ze=`REDIRECT`,Be=`ROUTE_ERROR_RESPONSE`;function Ve(e){if(e.startsWith(`${Re}:${ze}:{`))try{let t=JSON.parse(e.slice(28));if(typeof t==`object`&&t&&typeof t.status==`number`&&typeof t.statusText==`string`&&typeof t.location==`string`&&typeof t.reloadDocument==`boolean`&&typeof t.replace==`boolean`)return t}catch{}}function He(e){if(e.startsWith(`${Re}:${Be}:{`))try{let t=JSON.parse(e.slice(40));if(typeof t==`object`&&t&&typeof t.status==`number`&&typeof t.statusText==`string`)return new xe(t.status,t.statusText,t.data)}catch{}}function Ue(e,{relative:t}={}){u(B(),`useHref() may be used only in the context of a <Router> component.`);let{basename:n,navigator:i}=r.useContext(L),{hash:a,pathname:o,search:s}=U(e,{relative:t}),c=o;return n!==`/`&&(c=o===`/`?n:A([n,o])),i.createHref({pathname:c,search:s,hash:a})}function B(){return r.useContext(R)!=null}function V(){return u(B(),`useLocation() may be used only in the context of a <Router> component.`),r.useContext(R).location}function We(){return r.useContext(R).navigationType}var Ge=`You should call navigate() in a React.useEffect(), not when your component is first rendered.`;function Ke(e){r.useContext(L).static||r.useLayoutEffect(e)}function H(){let{isDataRoute:e}=r.useContext(z);return e?mt():qe()}function qe(){u(B(),`useNavigate() may be used only in the context of a <Router> component.`);let e=r.useContext(F),{basename:t,navigator:n}=r.useContext(L),{matches:i}=r.useContext(z),{pathname:a}=V(),o=JSON.stringify(ge(i)),s=r.useRef(!1);return Ke(()=>{s.current=!0}),r.useCallback((r,i={})=>{if(d(s.current,Ge),!s.current)return;if(typeof r==`number`){n.go(r);return}let c=k(r,JSON.parse(o),a,i.relative===`path`);e==null&&t!==`/`&&(c.pathname=c.pathname===`/`?t:A([t,c.pathname])),P(typeof r==`string`?r:h(r),n.createHref(c),M(n),`reject`),(i.replace?n.replace:n.push)(c,i.state,i)},[t,n,o,a,e])}var Je=r.createContext(null);function Ye(e){let t=r.useContext(z).outlet;return r.useMemo(()=>t&&r.createElement(Je.Provider,{value:e},t),[t,e])}function Xe(){let{matches:e}=r.useContext(z);return e[e.length-1]?.params??{}}function U(e,{relative:t}={}){let{matches:n}=r.useContext(z),{pathname:i}=V(),a=JSON.stringify(ge(n));return r.useMemo(()=>k(e,JSON.parse(a),i,t===`path`),[e,a,i,t])}function Ze(e,t){return Qe(e,t)}function Qe(e,t,n){u(B(),`useRoutes() may be used only in the context of a <Router> component.`);let{navigator:i}=r.useContext(L),{matches:a}=r.useContext(z),o=a[a.length-1],s=o?o.params:{},c=o?o.pathname:`/`,l=o?o.pathnameBase:`/`,f=o&&o.route;{let e=f&&f.path||``;gt(c,!f||e.endsWith(`*`)||e.endsWith(`*?`),`You rendered descendant <Routes> (or called \`useRoutes()\`) at "${c}" (under <Route path="${e}">) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render.
2
+
3
+ Please change the parent <Route path="${e}"> to <Route path="${e===`/`?`*`:`${e}/*`}">.`)}let p=V(),m;if(t){let e=typeof t==`string`?g(t):t;u(l===`/`||e.pathname?.startsWith(l),`When overriding the location using \`<Routes location>\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${l}" but pathname "${e.pathname}" was given in the \`location\` prop.`),m=e}else m=p;let h=m.pathname||`/`,_=h;if(l!==`/`){let e=l.replace(/^\//,``).split(`/`);_=`/`+h.replace(/^\//,``).split(`/`).slice(e.length).join(`/`)}let v=n&&n.state.matches.length?n.state.matches.map(e=>Object.assign(e,{route:n.manifest[e.route.id]||e.route})):y(e,{pathname:_});d(f||v!=null,`No routes matched location "${m.pathname}${m.search}${m.hash}" `),d(v==null||v[v.length-1].route.element!==void 0||v[v.length-1].route.Component!==void 0||v[v.length-1].route.lazy!==void 0,`Matched leaf route at location "${m.pathname}${m.search}${m.hash}" does not have an element or Component. This means it will render an <Outlet /> with a null value by default resulting in an "empty" page.`);let b=it(v&&v.map(e=>Object.assign({},e,{params:Object.assign({},s,e.params),pathname:A([l,i.encodeLocation?i.encodeLocation(e.pathname.replace(/%/g,`%25`).replace(/\?/g,`%3F`).replace(/#/g,`%23`)).pathname:e.pathname]),pathnameBase:e.pathnameBase===`/`?l:A([l,i.encodeLocation?i.encodeLocation(e.pathnameBase.replace(/%/g,`%25`).replace(/\?/g,`%3F`).replace(/#/g,`%23`)).pathname:e.pathnameBase])})),a,n);return t&&b?r.createElement(R.Provider,{value:{location:{pathname:`/`,search:``,hash:``,state:null,key:`default`,mask:void 0,...m},navigationType:`POP`}},b):b}function $e(){let e=pt(),t=Se(e)?`${e.status} ${e.statusText}`:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,i=`rgba(200,200,200, 0.5)`,a={padding:`0.5rem`,backgroundColor:i},o={padding:`2px 4px`,backgroundColor:i},s=null;return console.error(`Error handled by React Router default ErrorBoundary:`,e),s=r.createElement(r.Fragment,null,r.createElement(`p`,null,`💿 Hey developer 👋`),r.createElement(`p`,null,`You can provide a way better UX than this when your app throws errors by providing your own `,r.createElement(`code`,{style:o},`ErrorBoundary`),` or`,` `,r.createElement(`code`,{style:o},`errorElement`),` prop on your route.`)),r.createElement(r.Fragment,null,r.createElement(`h2`,null,`Unexpected Application Error!`),r.createElement(`h3`,{style:{fontStyle:`italic`}},t),n?r.createElement(`pre`,{style:a},n):null,s)}var et=r.createElement($e,null),tt=class extends r.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location||t.revalidation!==`idle`&&e.revalidation===`idle`?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:e.error===void 0?t.error:e.error,location:t.location,revalidation:e.revalidation||t.revalidation}}componentDidCatch(e,t){this.props.onError?this.props.onError(e,t):console.error(`React Router caught the following error during render`,e)}render(){let e=this.state.error;if(this.context&&typeof e==`object`&&e&&`digest`in e&&typeof e.digest==`string`){let t=He(e.digest);t&&(e=t)}let t=e===void 0?this.props.children:r.createElement(z.Provider,{value:this.props.routeContext},r.createElement(Le.Provider,{value:e,children:this.props.component}));return this.context?r.createElement(nt,{error:e},t):t}};tt.contextType=Me;var W=new WeakMap;function nt({children:e,error:t}){let{basename:n,navigator:i}=r.useContext(L);if(typeof t==`object`&&t&&`digest`in t&&typeof t.digest==`string`){let e=Ve(t.digest);if(e){let a=W.get(t);if(a)throw a;let o=Te(e.location,n),s=o.absoluteURL||o.to;if(P(e.location,s,M(i),`allow-explicit`),je(s))throw Error(`Invalid redirect location`);if(we&&!W.get(t))if(o.isExternal||e.reloadDocument)window.location.href=s;else{let n=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(o.to,{replace:e.replace}));throw W.set(t,n),n}return r.createElement(`meta`,{httpEquiv:`refresh`,content:`0;url=${s}`})}}return e}function rt({routeContext:e,match:t,children:n}){let i=r.useContext(F);return i&&i.static&&i.staticContext&&(t.route.errorElement||t.route.ErrorBoundary)&&(i.staticContext._deepestRenderedBoundaryId=t.route.id),r.createElement(z.Provider,{value:e},n)}function it(e,t=[],n){let i=n?.state;if(e==null){if(!i)return null;if(i.errors)e=i.matches;else if(t.length===0&&!i.initialized&&i.matches.length>0)e=i.matches;else return null}let a=e,o=i?.errors;if(o!=null){let e=a.findIndex(e=>e.route.id&&o?.[e.route.id]!==void 0);u(e>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(o).join(`,`)}`),a=a.slice(0,Math.min(a.length,e+1))}let s=!1,c=-1;if(n&&i){s=i.renderFallback;for(let e=0;e<a.length;e++){let t=a[e];if((t.route.HydrateFallback||t.route.hydrateFallbackElement)&&(c=e),t.route.id){let{loaderData:e,errors:r}=i,o=t.route.loader&&!e.hasOwnProperty(t.route.id)&&(!r||r[t.route.id]===void 0);if(t.route.lazy||o){n.isStatic&&(s=!0),a=c>=0?a.slice(0,c+1):[a[0]];break}}}}let l=n?.onError,d=i&&l?(e,t)=>{l(e,{location:i.location,params:i.matches?.[0]?.params??{},pattern:Ce(i.matches),errorInfo:t})}:void 0;return a.reduceRight((e,n,l)=>{let u,f=!1,p=null,m=null;i&&(u=o&&n.route.id?o[n.route.id]:void 0,p=n.route.errorElement||et,s&&(c<0&&l===0?(gt(`route-fallback`,!1,"No `HydrateFallback` element provided to render during initial hydration"),f=!0,m=null):c===l&&(f=!0,m=n.route.hydrateFallbackElement||null)));let h=t.concat(a.slice(0,l+1)),g=()=>{let t;return t=u?p:f?m:n.route.Component?r.createElement(n.route.Component,null):n.route.element?n.route.element:e,r.createElement(rt,{match:n,routeContext:{outlet:e,matches:h,isDataRoute:i!=null},children:t})};return i&&(n.route.ErrorBoundary||n.route.errorElement||l===0)?r.createElement(tt,{location:i.location,revalidation:i.revalidation,component:p,error:u,children:g(),routeContext:{outlet:null,matches:h,isDataRoute:!0},onError:d}):g()},null)}function at(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function ot(e){let t=r.useContext(F);return u(t,at(e)),t}function st(e){let t=r.useContext(I);return u(t,at(e)),t}function ct(e){let t=r.useContext(z);return u(t,at(e)),t}function lt(e){let t=ct(e),n=t.matches[t.matches.length-1];return u(n.route.id,`${e} can only be used on routes that contain a unique "id"`),n.route.id}function ut(){return lt(`useRouteId`)}function dt(){let e=st(`useNavigation`);return r.useMemo(()=>{let{matches:t,historyAction:n,...r}=e.navigation;return r},[e.navigation])}function ft(){let{matches:e,loaderData:t}=st(`useMatches`);return r.useMemo(()=>e.map(e=>x(e,t)),[e,t])}function pt(){let e=r.useContext(Le),t=st(`useRouteError`),n=lt(`useRouteError`);return e===void 0?t.errors?.[n]:e}function mt(){let{router:e}=ot(`useNavigate`),t=lt(`useNavigate`),n=r.useRef(!1);return Ke(()=>{n.current=!0}),r.useCallback(async(r,i={})=>{d(n.current,Ge),n.current&&(typeof r==`number`?await e.navigate(r):await e.navigate(r,{fromRouteId:t,...i}))},[e,t])}var ht={};function gt(e,t,n){!t&&!ht[e]&&(ht[e]=!0,d(!1,n))}r.memo(_t);function _t({routes:e,manifest:t,future:n,state:r,isStatic:i,onError:a}){return Qe(e,void 0,{manifest:t,state:r,isStatic:i,onError:a,future:n})}function vt({to:e,replace:t,state:n,relative:i}){u(B(),`<Navigate> may be used only in the context of a <Router> component.`);let{static:a,navigator:o}=r.useContext(L);d(!a,`<Navigate> must not be used on the initial render in a <StaticRouter>. This is a no-op, but you should modify your code so the <Navigate> is only ever rendered in response to some user interaction or state change.`);let{matches:s}=r.useContext(z),{pathname:c}=V(),l=H(),f=k(e,ge(s),c,i===`path`);P(typeof e==`string`?e:h(e),o.createHref(f),M(o),`reject`);let p=JSON.stringify(f);return r.useEffect(()=>{l(JSON.parse(p),{replace:t,state:n,relative:i})},[l,p,i,t,n]),null}function yt(e){u(!1,`A <Route> is only ever to be used as the child of <Routes> element, never rendered directly. Please wrap your <Route> in a <Routes>.`)}function bt({basename:e=`/`,children:t=null,location:n,navigationType:i=`POP`,navigator:a,static:o=!1,useTransitions:s}){u(!B(),`You cannot render a <Router> inside another <Router>. You should never have more than one in your app.`);let c=e.replace(/^\/*/,`/`),l=r.useMemo(()=>({basename:c,navigator:a,static:o,useTransitions:s,future:{}}),[c,a,o,s]);typeof n==`string`&&(n=g(n));let{pathname:f=`/`,search:p=``,hash:m=``,state:h=null,key:_=`default`,mask:v}=n,y=r.useMemo(()=>{let e=O(f,c);return e==null?null:{location:{pathname:e,search:p,hash:m,state:h,key:_,mask:v},navigationType:i}},[c,f,p,m,h,_,i,v]);return d(y!=null,`<Router basename="${c}"> is not able to match the URL "${f}${p}${m}" because it does not start with the basename, so the <Router> won't render anything.`),y==null?null:r.createElement(L.Provider,{value:l},r.createElement(R.Provider,{children:t,value:y}))}function xt({children:e,location:t}){return Ze(St(e),t)}r.Component;function St(e,t=[]){let n=[];return r.Children.forEach(e,(e,i)=>{if(!r.isValidElement(e))return;let a=[...t,i];if(e.type===r.Fragment){n.push.apply(n,St(e.props.children,a));return}u(e.type===yt,`[${typeof e.type==`string`?e.type:e.type.name}] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>`),u(!e.props.index||!e.props.children,`An index route cannot have child routes.`);let o={id:e.props.id||a.join(`-`),caseSensitive:e.props.caseSensitive,element:e.props.element,Component:e.props.Component,index:e.props.index,path:e.props.path,middleware:e.props.middleware,loader:e.props.loader,action:e.props.action,hydrateFallbackElement:e.props.hydrateFallbackElement,HydrateFallback:e.props.HydrateFallback,errorElement:e.props.errorElement,ErrorBoundary:e.props.ErrorBoundary,hasErrorBoundary:e.props.hasErrorBoundary===!0||e.props.ErrorBoundary!=null||e.props.errorElement!=null,shouldRevalidate:e.props.shouldRevalidate,handle:e.props.handle,lazy:e.props.lazy};e.props.children&&(o.children=St(e.props.children,a)),n.push(o)}),n}var G=`get`,K=`application/x-www-form-urlencoded`;function q(e){return typeof HTMLElement<`u`&&e instanceof HTMLElement}function Ct(e){return q(e)&&e.tagName.toLowerCase()===`button`}function wt(e){return q(e)&&e.tagName.toLowerCase()===`form`}function Tt(e){return q(e)&&e.tagName.toLowerCase()===`input`}function Et(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function Dt(e,t){return e.button===0&&(!t||t===`_self`)&&!Et(e)}function Ot(e=``){return new URLSearchParams(typeof e==`string`||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((t,n)=>{let r=e[n];return t.concat(Array.isArray(r)?r.map(e=>[n,e]):[[n,r]])},[]))}function kt(e,t){let n=Ot(e);return t&&t.forEach((e,r)=>{n.has(r)||t.getAll(r).forEach(e=>{n.append(r,e)})}),n}var J=null;function At(){if(J===null)try{new FormData(document.createElement(`form`),0),J=!1}catch{J=!0}return J}var jt=new Set([`application/x-www-form-urlencoded`,`multipart/form-data`,`text/plain`]);function Mt(e){return e!=null&&!jt.has(e)?(d(!1,`"${e}" is not a valid \`encType\` for \`<Form>\`/\`<fetcher.Form>\` and will default to "${K}"`),null):e}function Nt(e,t){let n,r,i,a,o;if(wt(e)){let o=e.getAttribute(`action`);r=o?O(o,t):null,n=e.getAttribute(`method`)||G,i=Mt(e.getAttribute(`enctype`))||K,a=new FormData(e)}else if(Ct(e)||Tt(e)&&(e.type===`submit`||e.type===`image`)){let o=e.form;if(o==null)throw Error(`Cannot submit a <button> or <input type="submit"> without a <form>`);let s=e.getAttribute(`formaction`)||o.getAttribute(`action`);if(r=s?O(s,t):null,n=e.getAttribute(`formmethod`)||o.getAttribute(`method`)||G,i=Mt(e.getAttribute(`formenctype`))||Mt(o.getAttribute(`enctype`))||K,a=new FormData(o,e),!At()){let{name:t,type:n,value:r}=e;if(n===`image`){let e=t?`${t}.`:``;a.append(`${e}x`,`0`),a.append(`${e}y`,`0`)}else t&&a.append(t,r)}}else if(q(e))throw Error(`Cannot submit element that is not <form>, <button>, or <input type="submit|image">`);else n=G,r=null,i=K,o=e;return a&&i===`text/plain`&&(o=a,a=void 0),{action:r,method:n.toLowerCase(),encType:i,formData:a,body:o}}Object.getOwnPropertyNames(Object.prototype).sort().join(`\0`);var Pt={"&":`\\u0026`,">":`\\u003e`,"<":`\\u003c`,"\u2028":`\\u2028`,"\u2029":`\\u2029`},Ft=/[&><\u2028\u2029]/g;function It(e){return e.replace(Ft,e=>Pt[e])}function Lt(e,t){if(e===!1||e==null)throw Error(t)}function Rt(e,t,n,r){let i=typeof e==`string`?new URL(e,typeof window>`u`?`server://singlefetch/`:window.location.origin):e;return n?i.pathname.endsWith(`/`)?i.pathname=`${i.pathname}_.${r}`:i.pathname=`${i.pathname}.${r}`:i.pathname===`/`?i.pathname=`_root.${r}`:t&&O(i.pathname,t)===`/`?i.pathname=`${j(t)}/_root.${r}`:i.pathname=`${j(i.pathname)}.${r}`,i}async function zt(e,t){if(e.id in t)return t[e.id];try{let r=await n(()=>import(e.module),[]);return t[e.id]=r,r}catch(t){return console.error(`Error loading route module \`${e.module}\`, reloading page...`),console.error(t),window.__reactRouterContext&&window.__reactRouterContext.isSpaMode,window.location.reload(),new Promise(()=>{})}}function Bt(e){return e!=null&&typeof e.page==`string`}function Vt(e){return e==null?!1:e.href==null?e.rel===`preload`&&typeof e.imageSrcSet==`string`&&typeof e.imageSizes==`string`:typeof e.rel==`string`&&typeof e.href==`string`}async function Ht(e,t,n){return qt((await Promise.all(e.map(async e=>{let r=t.routes[e.route.id];if(r){let e=await zt(r,n);return e.links?e.links():[]}return[]}))).flat(1).filter(Vt).filter(e=>e.rel===`stylesheet`||e.rel===`preload`).map(e=>e.rel===`stylesheet`?{...e,rel:`prefetch`,as:`style`}:{...e,rel:`prefetch`}))}function Ut(e,t,n,r,i,a){let o=(e,t)=>!n[t]||e.route.id!==n[t].route.id,s=(e,t)=>n[t].pathname!==e.pathname||n[t].route.path?.endsWith(`*`)&&n[t].params[`*`]!==e.params[`*`];return a===`assets`?t.filter((e,t)=>o(e,t)||s(e,t)):a===`data`?t.filter((t,a)=>{let c=r.routes[t.route.id];if(!c||!c.hasLoader)return!1;if(o(t,a)||s(t,a))return!0;if(t.route.shouldRevalidate){let r=t.route.shouldRevalidate({currentUrl:new URL(i.pathname+i.search+i.hash,window.origin),currentParams:n[0]?.params||{},nextUrl:new URL(e,window.origin),nextParams:t.params,defaultShouldRevalidate:!0});if(typeof r==`boolean`)return r}return!0}):[]}function Wt(e,t,{includeHydrateFallback:n}={}){return Gt(e.map(e=>{let r=t.routes[e.route.id];if(!r)return[];let i=[r.module];return r.clientActionModule&&(i=i.concat(r.clientActionModule)),r.clientLoaderModule&&(i=i.concat(r.clientLoaderModule)),n&&r.hydrateFallbackModule&&(i=i.concat(r.hydrateFallbackModule)),r.imports&&(i=i.concat(r.imports)),i}).flat(1))}function Gt(e){return[...new Set(e)]}function Kt(e){let t={},n=Object.keys(e).sort();for(let r of n)t[r]=e[r];return t}function qt(e,t){let n=new Set,r=new Set(t);return e.reduce((e,i)=>{if(t&&!Bt(i)&&i.as===`script`&&i.href&&r.has(i.href))return e;let a=JSON.stringify(Kt(i));return n.has(a)||(n.add(a),e.push({key:a,link:i})),e},[])}function Jt(){let e=r.useContext(F);return Lt(e,`You must render this element inside a <DataRouterContext.Provider> element`),e}function Yt(){let e=r.useContext(I);return Lt(e,`You must render this element inside a <DataRouterStateContext.Provider> element`),e}var Y=r.createContext(void 0);Y.displayName=`FrameworkContext`;function X(){let e=r.useContext(Y);return Lt(e,`You must render this element inside a <HydratedRouter> element`),e}function Xt(e,t){let n=r.useContext(Y),[i,a]=r.useState(!1),[o,s]=r.useState(!1),{onFocus:c,onBlur:l,onMouseEnter:u,onMouseLeave:d,onTouchStart:f}=t,p=r.useRef(null);r.useEffect(()=>{if(e===`render`&&s(!0),e===`viewport`){let e=new IntersectionObserver(e=>{e.forEach(e=>{s(e.isIntersecting)})},{threshold:.5});return p.current&&e.observe(p.current),()=>{e.disconnect()}}},[e]),r.useEffect(()=>{if(i){let e=setTimeout(()=>{s(!0)},100);return()=>{clearTimeout(e)}}},[i]);let m=()=>{a(!0)},h=()=>{a(!1),s(!1)};return n?e===`intent`?[o,p,{onFocus:Z(c,m),onBlur:Z(l,h),onMouseEnter:Z(u,m),onMouseLeave:Z(d,h),onTouchStart:Z(f,m)}]:[o,p,{}]:[!1,p,{}]}function Z(e,t){return n=>{e&&e(n),n.defaultPrevented||t(n)}}function Zt({page:e,...t}){let n=Ne(),{nonce:i}=X(),{router:a}=Jt(),o=r.useMemo(()=>y(a.routes,e,a.basename),[a.routes,e,a.basename]);return o?(t.nonce==null&&i&&(t={...t,nonce:i}),n?r.createElement($t,{page:e,matches:o,...t}):r.createElement(en,{page:e,matches:o,...t})):null}function Qt(e){let{manifest:t,routeModules:n}=X(),[i,a]=r.useState([]);return r.useEffect(()=>{let r=!1;return Ht(e,t,n).then(e=>{r||a(e)}),()=>{r=!0}},[e,t,n]),i}function $t({page:e,matches:t,...n}){let i=V(),{future:a}=X(),{basename:o}=Jt(),s=r.useMemo(()=>{if(e===i.pathname+i.search+i.hash)return[];let n=Rt(e,o,a.v8_trailingSlashAwareDataRequests,`rsc`),r=!1,s=[];for(let e of t)typeof e.route.shouldRevalidate==`function`?r=!0:s.push(e.route.id);return r&&s.length>0&&n.searchParams.set(`_routes`,s.join(`,`)),[n.pathname+n.search]},[o,a.v8_trailingSlashAwareDataRequests,e,i,t]);return r.createElement(r.Fragment,null,s.map(e=>r.createElement(`link`,{key:e,rel:`prefetch`,as:`fetch`,href:e,...n})))}function en({page:e,matches:t,...n}){let i=V(),{future:a,manifest:o,routeModules:s}=X(),{basename:c}=Jt(),{loaderData:l,matches:u}=Yt(),d=r.useMemo(()=>Ut(e,t,u,o,i,`data`),[e,t,u,o,i]),f=r.useMemo(()=>Ut(e,t,u,o,i,`assets`),[e,t,u,o,i]),p=r.useMemo(()=>{if(e===i.pathname+i.search+i.hash)return[];let n=new Set,r=!1;if(t.forEach(e=>{let t=o.routes[e.route.id];!t||!t.hasLoader||(!d.some(t=>t.route.id===e.route.id)&&e.route.id in l&&s[e.route.id]?.shouldRevalidate||t.hasClientLoader?r=!0:n.add(e.route.id))}),n.size===0)return[];let u=Rt(e,c,a.v8_trailingSlashAwareDataRequests,`data`);return r&&n.size>0&&u.searchParams.set(`_routes`,t.filter(e=>n.has(e.route.id)).map(e=>e.route.id).join(`,`)),[u.pathname+u.search]},[c,a.v8_trailingSlashAwareDataRequests,l,i,o,d,t,e,s]),m=r.useMemo(()=>Wt(f,o),[f,o]),h=Qt(f);return r.createElement(r.Fragment,null,p.map(e=>r.createElement(`link`,{key:e,rel:`prefetch`,as:`fetch`,href:e,...n})),m.map(e=>r.createElement(`link`,{key:e,rel:`modulepreload`,href:e,...n})),h.map(({key:e,link:t})=>r.createElement(`link`,{key:e,nonce:n.nonce,...t,crossOrigin:t.crossOrigin??n.crossOrigin})))}function tn(...e){return t=>{e.forEach(e=>{typeof e==`function`?e(t):e!=null&&(e.current=t)})}}r.Component;var nn=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;try{nn&&(window.__reactRouterVersion=`7.18.4`)}catch{}function rn({basename:e,children:t,useTransitions:n,window:i}){let a=r.useRef();a.current??=l({window:i,v5Compat:!0});let o=a.current,[s,c]=r.useState({action:o.action,location:o.location}),u=r.useCallback(e=>{n===!1?c(e):r.startTransition(()=>c(e))},[n]);return r.useLayoutEffect(()=>o.listen(u),[o,u]),r.createElement(bt,{basename:e,children:t,location:s.location,navigationType:s.action,navigator:o,useTransitions:n})}function an({basename:e,children:t,history:n,useTransitions:i}){let[a,o]=r.useState({action:n.action,location:n.location}),s=r.useCallback(e=>{i===!1?o(e):r.startTransition(()=>o(e))},[i]);return r.useLayoutEffect(()=>n.listen(s),[n,s]),r.createElement(bt,{basename:e,children:t,location:a.location,navigationType:a.action,navigator:n,useTransitions:i})}an.displayName=`unstable_HistoryRouter`;var on=r.forwardRef(function({onClick:e,discover:t=`render`,prefetch:n=`none`,relative:a,reloadDocument:o,replace:s,mask:c,state:l,target:u,to:d,preventScrollReset:f,viewTransition:p,defaultShouldRevalidate:m,...h},g){let{basename:_,navigator:v,useTransitions:y}=r.useContext(L),b=typeof d==`string`&&i.test(d),x=Te(d,_);d=x.to;let S=Ue(d,{relative:a}),C=V(),w=null;if(c){let e=k(c,[],C.mask?C.mask.pathname:`/`,!0);_!==`/`&&(e.pathname=e.pathname===`/`?_:A([_,e.pathname])),w=v.createHref(e)}let[T,ee,te]=Xt(n,h),ne=pn(d,{replace:s,mask:c,state:l,target:u,preventScrollReset:f,relative:a,viewTransition:p,defaultShouldRevalidate:m,useTransitions:y});function re(t){e&&e(t),t.defaultPrevented||ne(t)}let ie=!(x.isExternal||o),E=r.createElement(`a`,{...h,...te,href:(ie?w:void 0)||x.absoluteURL||S,onClick:ie?re:e,ref:tn(g,ee),target:u,"data-discover":!b&&t===`render`?`true`:void 0});return T&&!b?r.createElement(r.Fragment,null,E,r.createElement(Zt,{page:S})):E});on.displayName=`Link`;var sn=r.forwardRef(function({"aria-current":e=`page`,caseSensitive:t=!1,className:n=``,end:i=!1,style:a,to:o,viewTransition:s,children:c,...l},u){let d=U(o,{relative:l.relative}),f=V(),p=r.useContext(I),{navigator:m,basename:h}=r.useContext(L),g=p!=null&&Sn(d)&&s===!0,_=m.encodeLocation?m.encodeLocation(d).pathname:d.pathname,v=f.pathname,y=p&&p.navigation&&p.navigation.location?p.navigation.location.pathname:null;t||(v=v.toLowerCase(),y=y?y.toLowerCase():null,_=_.toLowerCase()),y&&h&&(y=O(y,h)||y);let b=_!==`/`&&_.endsWith(`/`)?_.length-1:_.length,x=v===_||!i&&v.startsWith(_)&&v.charAt(b)===`/`,S=y!=null&&(y===_||!i&&y.startsWith(_)&&y.charAt(_.length)===`/`),C={isActive:x,isPending:S,isTransitioning:g},w=x?e:void 0,T;T=typeof n==`function`?n(C):[n,x?`active`:null,S?`pending`:null,g?`transitioning`:null].filter(Boolean).join(` `);let ee=typeof a==`function`?a(C):a;return r.createElement(on,{...l,"aria-current":w,className:T,ref:u,style:ee,to:o,viewTransition:s},typeof c==`function`?c(C):c)});sn.displayName=`NavLink`;var cn=r.forwardRef(({discover:e=`render`,fetcherKey:t,navigate:n,reloadDocument:a,replace:o,state:s,method:c=G,action:l,onSubmit:u,relative:d,preventScrollReset:f,viewTransition:p,defaultShouldRevalidate:m,...h},g)=>{let{useTransitions:_}=r.useContext(L),v=_n(),y=vn(l,{relative:d}),b=c.toLowerCase()===`get`?`get`:`post`,x=typeof l==`string`&&i.test(l);return r.createElement(`form`,{ref:g,method:b,action:y,onSubmit:a?u:e=>{if(u&&u(e),e.defaultPrevented)return;e.preventDefault();let i=e.nativeEvent.submitter,a=i?.getAttribute(`formmethod`)||c,l=()=>v(i||e.currentTarget,{fetcherKey:t,method:a,navigate:n,replace:o,state:s,relative:d,preventScrollReset:f,viewTransition:p,defaultShouldRevalidate:m});_&&n!==!1?r.startTransition(()=>l()):l()},...h,"data-discover":!x&&e===`render`?`true`:void 0})});cn.displayName=`Form`;function ln({getKey:e,storageKey:t,...n}){let i=r.useContext(Y),{basename:a}=r.useContext(L),o=V(),s=ft();bn({getKey:e,storageKey:t});let c=r.useMemo(()=>{if(!i||!e)return null;let t=yn(o,s,a,e);return t===o.key?null:t},[]);if(!i||i.isSpaMode)return null;let l=((e,t)=>{if(!window.history.state||!window.history.state.key){let e=Math.random().toString(32).slice(2);window.history.replaceState({key:e},``)}try{let n=JSON.parse(sessionStorage.getItem(e)||`{}`)[t||window.history.state.key];typeof n==`number`&&window.scrollTo(0,n)}catch(t){console.error(t),sessionStorage.removeItem(e)}}).toString();return n.nonce==null&&i?.nonce&&(n.nonce=i.nonce),r.createElement(`script`,{...n,suppressHydrationWarning:!0,dangerouslySetInnerHTML:{__html:`(${l})(${It(JSON.stringify(t||Q))}, ${It(JSON.stringify(c))})`}})}ln.displayName=`ScrollRestoration`;function un(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function dn(e){let t=r.useContext(F);return u(t,un(e)),t}function fn(e){let t=r.useContext(I);return u(t,un(e)),t}function pn(e,{target:t,replace:n,mask:i,state:a,preventScrollReset:o,relative:s,viewTransition:c,defaultShouldRevalidate:l,useTransitions:u}={}){let d=H(),f=V(),p=U(e,{relative:s});return r.useCallback(m=>{if(Dt(m,t)){m.preventDefault();let t=n===void 0?h(f)===h(p):n,g=()=>d(e,{replace:t,mask:i,state:a,preventScrollReset:o,relative:s,viewTransition:c,defaultShouldRevalidate:l});u?r.startTransition(()=>g()):g()}},[f,d,p,n,i,a,t,e,o,s,c,l,u])}function mn(e){d(typeof URLSearchParams<`u`,"You cannot use the `useSearchParams` hook in a browser that does not support the URLSearchParams API. If you need to support Internet Explorer 11, we recommend you load a polyfill such as https://github.com/ungap/url-search-params.");let t=r.useRef(Ot(e)),n=r.useRef(!1),i=V(),a=r.useMemo(()=>kt(i.search,n.current?null:t.current),[i.search]),o=H();return[a,r.useCallback((e,t)=>{let r=Ot(typeof e==`function`?e(new URLSearchParams(a)):e);n.current=!0,o(`?`+r,t)},[o,a])]}var hn=0,gn=()=>`__${String(++hn)}__`;function _n(){let{router:e}=dn(`useSubmit`),{basename:t}=r.useContext(L),n=ut(),i=e.fetch,a=e.navigate;return r.useCallback(async(e,r={})=>{let{action:o,method:s,encType:c,formData:l,body:u}=Nt(e,t);if(r.navigate===!1){let e=r.fetcherKey||gn();await i(e,n,r.action||o,{defaultShouldRevalidate:r.defaultShouldRevalidate,preventScrollReset:r.preventScrollReset,formData:l,body:u,formMethod:r.method||s,formEncType:r.encType||c,flushSync:r.flushSync})}else await a(r.action||o,{defaultShouldRevalidate:r.defaultShouldRevalidate,preventScrollReset:r.preventScrollReset,formData:l,body:u,formMethod:r.method||s,formEncType:r.encType||c,replace:r.replace,state:r.state,fromRouteId:n,flushSync:r.flushSync,viewTransition:r.viewTransition})},[i,a,t,n])}function vn(e,{relative:t}={}){let{basename:n}=r.useContext(L),i=r.useContext(z);u(i,`useFormAction must be used inside a RouteContext`);let[a]=i.matches.slice(-1),o={...U(e||`.`,{relative:t})},s=V();if(e==null){o.search=s.search;let e=new URLSearchParams(o.search),t=e.getAll(`index`);if(t.some(e=>e===``)){e.delete(`index`),t.filter(e=>e).forEach(t=>e.append(`index`,t));let n=e.toString();o.search=n?`?${n}`:``}}return(!e||e===`.`)&&a.route.index&&(o.search=o.search?o.search.replace(/^\?/,`?index&`):`?index`),n!==`/`&&(o.pathname=o.pathname===`/`?n:A([n,o.pathname])),h(o)}var Q=`react-router-scroll-positions`,$={};function yn(e,t,n,r){let i=null;return r&&(i=r(n===`/`?e:{...e,pathname:O(e.pathname,n)||e.pathname},t)),i??=e.key,i}function bn({getKey:e,storageKey:t}={}){let{router:n}=dn(`useScrollRestoration`),{restoreScrollPosition:i,preventScrollReset:a}=fn(`useScrollRestoration`),{basename:o}=r.useContext(L),s=V(),c=ft(),l=dt();r.useEffect(()=>(window.history.scrollRestoration=`manual`,()=>{window.history.scrollRestoration=`auto`}),[]),xn(r.useCallback(()=>{if(l.state===`idle`){let t=yn(s,c,o,e);$[t]=window.scrollY}try{sessionStorage.setItem(t||Q,JSON.stringify($))}catch(e){d(!1,`Failed to save scroll positions in sessionStorage, <ScrollRestoration /> will not work properly (${e}).`)}window.history.scrollRestoration=`auto`},[l.state,e,o,s,c,t])),typeof document<`u`&&(r.useLayoutEffect(()=>{try{let e=sessionStorage.getItem(t||Q);e&&($=JSON.parse(e))}catch{}},[t]),r.useLayoutEffect(()=>{let t=n?.enableScrollRestoration($,()=>window.scrollY,e?(t,n)=>yn(t,n,o,e):void 0);return()=>t&&t()},[n,o,e]),r.useLayoutEffect(()=>{if(i!==!1){if(typeof i==`number`){window.scrollTo(0,i);return}try{if(s.hash){let e=document.getElementById(decodeURIComponent(s.hash.slice(1)));if(e){e.scrollIntoView();return}}}catch{d(!1,`"${s.hash.slice(1)}" is not a decodable element ID. The view will not scroll to it.`)}a!==!0&&window.scrollTo(0,0)}},[s,i,a]))}function xn(e,t){let{capture:n}=t||{};r.useEffect(()=>{let t=n==null?void 0:{capture:n};return window.addEventListener(`pagehide`,e,t),()=>{window.removeEventListener(`pagehide`,e,t)}},[e,n])}function Sn(e,{relative:t}={}){let n=r.useContext(Pe);u(n!=null,"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. Did you accidentally import `RouterProvider` from `react-router`?");let{basename:i}=dn(`useViewTransitionState`),a=U(e,{relative:t});if(!n.isTransitioning)return!1;let o=O(n.currentLocation.pathname,i)||n.currentLocation.pathname,s=O(n.nextLocation.pathname,i)||n.nextLocation.pathname;return D(a.pathname,s)!=null||D(a.pathname,o)!=null}export{yt as a,V as c,Ye as d,Xe as f,vt as i,H as l,on as n,xt as o,mn as p,sn as r,B as s,rn as t,We as u};
@@ -0,0 +1 @@
1
+ var e={resizeFileTree:`Größe des Dateibaums ändern`,selectFile:`Wähle eine Datei für die Vorschau.`},t={hint:`Zum Ändern der Größe ziehen. Doppelklick zum Zurücksetzen.`},n={scope:`Bereich`,allAi:`Alle KI`,spec:`Spec`,ticketIdPlaceholder:`id`,copyFilePath:`Dateipfad kopieren`,generateSummary:`Zusammenfassung generieren`,regenerateSummary:`Zusammenfassung neu generieren`,generating:`Wird generiert…`,regenerating:`Wird neu generiert…`,summaryUnavailable:`Zusammenfassung nicht verfügbar: {{reason}}`,jobContext:`Job-Kontext`,clear:`Zurücksetzen`},r={jobTitle:`Job {{jobId}}`,specTitle:`Spec #{{ticketId}}`,touchedFiles_one:`{{count}} bearbeitete Datei`,touchedFiles_other:`{{count}} bearbeitete Dateien`,log:`Log`},i={created:`erstellt`,modified:`geändert`,deleted:`gelöscht`},a={added:`hinzugefügt`,changed:`geändert`,deleted:`gelöscht`},o={loadingFile:`Datei wird geladen…`,showSummary:`Zusammenfassung anzeigen`,markdownViewMode:`Markdown-Ansichtsmodus`,preview:`Vorschau`,raw:`Quelltext`,missingFile:`Diese Datei wurde von einem KI-Job bearbeitet, existiert aber nicht mehr im Arbeitsverzeichnis.`,binaryFile:`Binärdatei.`,tooLarge:`Datei zu groß für die Vorschau ({{size}} MB).`,noContent:`Kein Inhalt verfügbar.`,pathCopied:`Pfad kopiert`,copyPathFailed:`Pfad konnte nicht kopiert werden`,budgetPrompt:`Budgetgrenze außer Kraft setzen?`,edit:`Bearbeiten`,save:`Speichern`,saving:`Speichern…`,saved:`Datei gespeichert`,saveFailed:`Speichern fehlgeschlagen`,budgetPromptBody:`Das KI-Budgetlimit für Dateizusammenfassungen ist erreicht. Wenn du trotzdem neu erzeugst, läuft eine weitere Zusammenfassung über dem Limit.`,budgetPromptConfirm:`Trotzdem neu erzeugen`},s={generationFailed:`Generierung der Zusammenfassung fehlgeschlagen`,skipped:`Zusammenfassung übersprungen: {{reason}}`,unavailable:`Zusammenfassung nicht verfügbar: {{reason}}.`,empty:`Noch keine Zusammenfassung für diese Datei.`,stale:`Veraltet`,hide:`Ausblenden`,reason:{missing:`Datei fehlt`,binary:`Binärdatei`,tooLarge:`Datei zu groß`,providerNoPureOutput:`der ausgewählte KI-Anbieter kann keinen sicheren Nur-Ausgabe-Modus erzwingen`}},c={title_one:`Baugeschichte · {{count}} Kapitel`,title_other:`Baugeschichte · {{count}} Kapitel`,viewMode:`Ansichtsmodus der Geschichte`,modeStory:`Geschichte`,modeLog:`Protokoll`,loading:`Geschichte wird geladen…`,loadFailed:`Die Geschichte konnte nicht geladen werden.`,empty:`Für diese Datei sind noch keine KI-Eingriffe aufgezeichnet.`,spec:`Spec #{{ticketId}}`,unknownSpec:`KI-Änderung ohne Spec`,openSpec:`Spec #{{ticketId}} öffnen`,kindLabel:{created:`Erstellt`,modified:`Geändert`,deleted:`Gelöscht`},fallback:{created:`Diese Datei wurde bei der Umsetzung dieser Spec erstellt.`,modified:`Diese Datei wurde bei der Umsetzung dieser Spec geändert.`,deleted:`Diese Datei wurde bei der Umsetzung dieser Spec gelöscht.`,createdNoSpec:`Diese Datei wurde von einem KI-Job erstellt.`,modifiedNoSpec:`Diese Datei wurde von einem KI-Job geändert.`,deletedNoSpec:`Diese Datei wurde von einem KI-Job gelöscht.`},explain:`Diese Änderung erklären`,explaining:`Wird erklärt…`,explainFailed:`Die Erklärung konnte nicht erzeugt werden`,explainUnavailable:`Die KI-Erklärung ist nicht verfügbar, weil der ausgewählte Anbieter keinen sicheren Nur-Ausgabe-Modus erzwingen kann.`,budgetReached:`Monatliches KI-Budget erreicht.`,generateAnyway:`Trotzdem erzeugen`,explainedBy:`Erklärt von {{model}}`,linesAdded:`Hinzugefügte Zeilen`,linesRemoved:`Entfernte Zeilen`},l={resize:`Größe des KI-Bearbeitungsverlaufs ändern`,title_one:`KI-Bearbeitungsverlauf · {{count}} Änderung`,title_other:`KI-Bearbeitungsverlauf · {{count}} Änderungen`,show:`Anzeigen`,hide:`Ausblenden`,unknownJob:`unbekannter Job`,filterByJob:`Code nach Job {{jobId}} filtern`,diff:`Diff`,openSpec:`Spec #{{ticketId}} öffnen`,specChip:`Spec #{{ticketId}}`,loadingDiff:`Diff wird geladen...`,diffUnavailable:`Für diese frühere Bearbeitung ist kein Diff verfügbar. Neue Jobs speichern Patches automatisch.`,diffTruncated:`[Diff gekürzt]`},u={jobFiles:`Job-Dateien`,specFiles:`Spec-Dateien`,touchedByAi:`Von KI bearbeitet`,allFiles:`Alle Dateien`,collapseAll:`Alle Ordner einklappen`,expandAll:`Alle Ordner ausklappen`,touchedCount_one:`{{count}} von KI bearbeitete Datei`,touchedCount_other:`{{count}} von KI bearbeitete Dateien`,loadingFiles:`Dateien werden geladen…`,emptyTouched:`Noch keine von KI bearbeiteten Dateien. Starte einen Job oder wechsle zu „Alle Dateien“.`,showAllFiles:`Alle Dateien anzeigen`,noFiles:`Keine Dateien.`,folderTouched_one:`{{count}} von KI bearbeitete Datei unterhalb dieses Ordners`,folderTouched_other:`{{count}} von KI bearbeitete Dateien unterhalb dieses Ordners`,jobTitle:`Job {{jobId}}`,createdBySpec:`Bei der Implementierung von Spec #{{id}} erstellt`,modifiedBySpec:`Bei der Implementierung von Spec #{{id}} geändert`,latestTitleCreated:`Der letzte KI-Job hat diese Datei hinzugefügt`,latestTitleModified:`Der letzte KI-Job hat diese Datei geändert`,latestTitleDeleted:`Der letzte KI-Job hat diese Datei gelöscht`,loadFailed:`Der Dateibaum konnte nicht geladen werden. Sichtbare Dateien stammen vom letzten erfolgreichen Laden.`,partial:`Unvollständiger Dateibaum. Grenze Ordner oder Namen über die Suche ein oder aktualisiere erneut.`},d={loadFailed:`Code-Viewer konnte nicht geladen werden.`,reload:`Neu laden`,loadingEditor:`Editor wird geladen…`},f={title:`Von dieser Spec bearbeitete Dateien`,jobTitle:`Job {{jobId}}`,loading:`Aufgezeichnete Dateien werden geladen…`,loadFailed:`Aufgezeichnete Dateien konnten nicht geladen werden.`,retry:`Erneut versuchen`,loadMore:`Weitere Dateien laden`,partial:`Einige aufgezeichnete Dateien konnten nicht geprüft werden. Versuche es erneut.`},p={files:`Dateien`,search:`Suche`,activity:`Aktivität`,back:`Zurück`,forward:`Vorwärts`,hideNavigation:`Navigation ausblenden`,showNavigation:`Navigation anzeigen`,navigation:`Codenavigation`,views:`Explorer-Ansichten`,breadcrumb:`Dateipfad`,refresh:`Aktualisieren`,retry:`Erneut versuchen`,welcome:`Deinen Code verstehen`,description:`Erkunde deine Repositories, finde den gesuchten Code und verfolge Änderungen von Specrails.`,findCode:`Code finden`,viewActivity:`Änderungen erkunden`,sourceHint:`Dateien zeigt den aktuellen registrierten Checkout. Aktivität enthält aufgezeichnete Änderungen, auch noch nicht integrierte Arbeit.`},m={find:`Dateinamen`,search:`Inhalte`,query:`Suchbegriff`,filePlaceholder:`Name oder Pfad…`,contentPlaceholder:`Text im Code…`,scope:`Suchbereich`,allRepositories:`Alle Repositories`,currentRepository:`Aktuelles Repository`,withinPath:`Innerhalb eines Pfads suchen`,pathPlaceholder:`Ordner oder Datei (optional)`,caseSensitive:`Groß-/Kleinschreibung beachten`,hint:`Finde Dateien nach Namen oder suche nach genauem Text. Ergebnisse öffnen das richtige Repository und die Zeile.`,loading:`Suche läuft…`,failed:`Die Suche konnte nicht abgeschlossen werden. Prüfe die Verbindung und versuche es erneut.`,results:`Ergebnisse: {{count}}`,partial:`Unvollständige Ergebnisse. Grenze Suchtext, Ordner oder Repository weiter ein.`,repositoryIncomplete:`{{name}} konnte nicht vollständig durchsucht werden.`,noMatches:`Keine Treffer in den untersuchten Dateien.`,noMatchesPartial:`Keine Treffer im untersuchten Teil. Einige Dateien oder Repositories wurden noch nicht durchsucht.`},h={description:`Von Specrails aufgezeichnete Änderungen, nach Repository und Ausführung gruppiert.`,scope:`Aktivitätsbereich`,failed:`Aufgezeichnete Aktivität konnte nicht geladen werden.`,partial:`Dieser Verlauf ist unvollständig. Aktualisiere oder wähle ein Repository für weitere Einträge.`,empty:`In diesem Bereich gibt es noch keine Änderungen. Abgeschlossene Ausführungen erscheinen hier.`,patch:`Patch verfügbar`,partialPatch:`Teilweiser Patch`,noPatch:`Kein gespeicherter Patch`,loading:`Aktivität wird geladen…`,loadMore:`Weitere Änderungen laden`},g={currentFile:`Aktuelle Datei`,recordedChange:`Aufgezeichnete Änderung`,recordedNotice:`Dieser Patch dokumentiert eine frühere Ausführung. Er kann vom aktuellen registrierten Checkout abweichen.`,diffFailed:`Die aufgezeichnete Änderung konnte nicht geladen werden.`,retry:`Erneut versuchen`,patchIncomplete:`Der gespeicherte Patch ist unvollständig. Fehlender Inhalt lässt sich aus diesem Eintrag nicht rekonstruieren.`,displayLimited:`Vorschau auf {{count}} Zeilen oder {{chars}} Zeichen begrenzt. Der restliche Patch wird nicht angezeigt.`,patch:`Aufgezeichneter Patch`,find:`In Datei suchen`,wrap:`Zeilenumbruch`,line:`Zeilennummer`,go:`Los`,loading:`Codeansicht wird geladen…`,sourceUnavailable:`Code nicht verfügbar`,refresh:`Code aktualisieren`,sourceFailed:`Die aktuelle Datei konnte nicht aktualisiert werden. Sichtbarer Code stammt vom letzten erfolgreichen Lesen.`,summaryPartial:`Aus einem unvollständigen Codeabbild erstellt. Die Zusammenfassung deckt möglicherweise nicht die gesamte Datei ab.`,regenerateExplanation:`Erklärung aktualisieren`,noEvidence:`Für diese Änderung wurde kein Patch als Beleg gespeichert.`,excerptEvidence:`Diese Erklärung basiert auf unvollständigen Patch-Belegen.`,viewPatch:`Aufgezeichnete Änderung ansehen`},_={page:e,resizer:t,toolbar:n,provenancePanel:r,kind:i,action:a,viewer:o,summary:s,story:c,history:l,tree:u,monaco:d,ticketFiles:f,explore:p,search:m,activity:h,reader:g};export{a as action,h as activity,_ as default,p as explore,l as history,i as kind,d as monaco,e as page,r as provenancePanel,g as reader,t as resizer,m as search,c as story,s as summary,f as ticketFiles,n as toolbar,u as tree,o as viewer};
@@ -0,0 +1 @@
1
+ var e={resizeFileTree:`Redimensionner l'arborescence de fichiers`,selectFile:`Sélectionnez un fichier pour l'afficher.`},t={hint:`Glissez pour redimensionner. Double-cliquez pour réinitialiser.`},n={scope:`Portée`,allAi:`Toute l'IA`,spec:`Spec`,ticketIdPlaceholder:`id`,copyFilePath:`Copier le chemin du fichier`,generateSummary:`Générer le résumé`,regenerateSummary:`Régénérer le résumé`,generating:`Génération…`,regenerating:`Régénération…`,summaryUnavailable:`Résumé indisponible : {{reason}}`,jobContext:`Contexte du job`,clear:`Effacer`},r={jobTitle:`Job {{jobId}}`,specTitle:`Spec #{{ticketId}}`,touchedFiles_one:`{{count}} fichier touché`,touchedFiles_other:`{{count}} fichiers touchés`,log:`Log`},i={created:`créé`,modified:`modifié`,deleted:`supprimé`},a={added:`ajouté`,changed:`modifié`,deleted:`supprimé`},o={loadingFile:`Chargement du fichier…`,showSummary:`Afficher le résumé`,markdownViewMode:`Mode d'affichage Markdown`,preview:`Aperçu`,raw:`Brut`,missingFile:`Ce fichier a été touché par un job IA mais n'existe plus dans l'arbre de travail.`,binaryFile:`Fichier binaire.`,tooLarge:`Fichier trop volumineux pour l'aperçu ({{size}} MB).`,noContent:`Aucun contenu disponible.`,pathCopied:`Chemin copié`,copyPathFailed:`Impossible de copier le chemin`,budgetPrompt:`Outrepasser le plafond de budget ?`,edit:`Modifier`,save:`Enregistrer`,saving:`Enregistrement…`,saved:`Fichier enregistré`,saveFailed:`Échec de l'enregistrement`,budgetPromptBody:`Le plafond du budget IA pour les résumés de fichiers est atteint. Régénérer quand même lance un résumé supplémentaire au-delà du plafond.`,budgetPromptConfirm:`Régénérer quand même`},s={generationFailed:`Échec de la génération du résumé`,skipped:`Résumé ignoré : {{reason}}`,unavailable:`Résumé indisponible : {{reason}}.`,empty:`Pas encore de résumé pour ce fichier.`,stale:`Obsolète`,hide:`Masquer`,reason:{missing:`fichier manquant`,binary:`fichier binaire`,tooLarge:`fichier trop volumineux`,providerNoPureOutput:`le fournisseur d'IA sélectionné ne peut pas imposer un mode de sortie seule sécurisé`}},c={title_one:`Histoire de construction · {{count}} chapitre`,title_other:`Histoire de construction · {{count}} chapitres`,viewMode:`Mode d'affichage de l'histoire`,modeStory:`Histoire`,modeLog:`Journal`,loading:`Chargement de l'histoire…`,loadFailed:`Impossible de charger l'histoire.`,empty:`Aucune intervention d'IA enregistrée pour ce fichier pour l'instant.`,spec:`Spec #{{ticketId}}`,unknownSpec:`Modification d'IA sans spec`,openSpec:`Ouvrir la spec #{{ticketId}}`,kindLabel:{created:`Créé`,modified:`Modifié`,deleted:`Supprimé`},fallback:{created:`Ce fichier a été créé lors de l'implémentation de cette spec.`,modified:`Ce fichier a été modifié lors de l'implémentation de cette spec.`,deleted:`Ce fichier a été supprimé lors de l'implémentation de cette spec.`,createdNoSpec:`Ce fichier a été créé par un job d'IA.`,modifiedNoSpec:`Ce fichier a été modifié par un job d'IA.`,deletedNoSpec:`Ce fichier a été supprimé par un job d'IA.`},explain:`Expliquer ce changement`,explaining:`Explication en cours…`,explainFailed:`Impossible de générer l'explication`,explainUnavailable:`L'explication par IA est indisponible, car le fournisseur sélectionné ne peut pas imposer un mode de sortie seule sécurisé.`,budgetReached:`Budget IA mensuel atteint.`,generateAnyway:`Générer quand même`,explainedBy:`Expliqué par {{model}}`,linesAdded:`Lignes ajoutées`,linesRemoved:`Lignes supprimées`},l={resize:`Redimensionner l'historique des modifications IA`,title_one:`Historique des modifications IA · {{count}} changement`,title_other:`Historique des modifications IA · {{count}} changements`,show:`Afficher`,hide:`Masquer`,unknownJob:`job inconnu`,filterByJob:`Filtrer Code par le job {{jobId}}`,diff:`Diff`,openSpec:`Ouvrir la spec #{{ticketId}}`,specChip:`spec #{{ticketId}}`,loadingDiff:`Chargement du diff...`,diffUnavailable:`Diff indisponible pour cette modification historique. Les nouveaux jobs enregistreront les patchs automatiquement.`,diffTruncated:`[diff tronqué]`},u={jobFiles:`Fichiers du job`,specFiles:`Fichiers de la spec`,touchedByAi:`Touchés par l'IA`,allFiles:`Tous les fichiers`,collapseAll:`Replier tous les dossiers`,expandAll:`Déplier tous les dossiers`,touchedCount_one:`{{count}} fichier touché par l'IA`,touchedCount_other:`{{count}} fichiers touchés par l'IA`,loadingFiles:`Chargement des fichiers…`,emptyTouched:`Aucun fichier touché par l'IA pour l'instant. Lancez un job ou passez à Tous les fichiers.`,showAllFiles:`Afficher tous les fichiers`,noFiles:`Aucun fichier.`,folderTouched_one:`{{count}} fichier touché par l'IA sous ce dossier`,folderTouched_other:`{{count}} fichiers touchés par l'IA sous ce dossier`,jobTitle:`Job {{jobId}}`,createdBySpec:`Créé lors de l'implémentation de la spec #{{id}}`,modifiedBySpec:`Modifié lors de l'implémentation de la spec #{{id}}`,latestTitleCreated:`Le dernier job IA a ajouté ce fichier`,latestTitleModified:`Le dernier job IA a modifié ce fichier`,latestTitleDeleted:`Le dernier job IA a supprimé ce fichier`,loadFailed:`Impossible de charger l’arborescence. Les fichiers visibles proviennent du dernier chargement réussi.`,partial:`Arborescence partielle. Affinez le dossier ou le nom avec Rechercher, ou actualisez.`},d={loadFailed:`Échec du chargement de l'afficheur de code.`,reload:`Recharger`,loadingEditor:`Chargement de l'éditeur…`},f={title:`Fichiers touchés par cette spec`,jobTitle:`Job {{jobId}}`,loading:`Chargement des fichiers enregistrés…`,loadFailed:`Impossible de charger les fichiers enregistrés.`,retry:`Réessayer`,loadMore:`Charger plus de fichiers`,partial:`Certains fichiers enregistrés n’ont pas pu être vérifiés. Réessayez pour actualiser.`},p={files:`Fichiers`,search:`Rechercher`,activity:`Activité`,back:`Retour`,forward:`Suivant`,hideNavigation:`Masquer la navigation`,showNavigation:`Afficher la navigation`,navigation:`Navigation du code`,views:`Vues de l’explorateur`,breadcrumb:`Emplacement du fichier`,refresh:`Actualiser`,retry:`Réessayer`,welcome:`Comprenez votre code`,description:`Explorez vos dépôts, trouvez le code recherché et suivez les changements de Specrails.`,findCode:`Trouver du code`,viewActivity:`Explorer les changements`,sourceHint:`Fichiers affiche le contenu actuel du dépôt enregistré. Activité conserve les changements des exécutions, y compris le travail non intégré.`},m={find:`Noms de fichiers`,search:`Contenu`,query:`Texte recherché`,filePlaceholder:`Nom ou chemin…`,contentPlaceholder:`Texte exact dans le code…`,scope:`Portée de recherche`,allRepositories:`Tous les dépôts`,currentRepository:`Dépôt actuel`,withinPath:`Rechercher dans un chemin`,pathPlaceholder:`Dossier ou fichier (facultatif)`,caseSensitive:`Respecter la casse`,hint:`Trouvez un fichier par son nom ou un texte exact dans le code. Les résultats ouvrent le dépôt et la ligne correspondants.`,loading:`Recherche…`,failed:`La recherche a échoué. Vérifiez la connexion et réessayez.`,results:`Résultats : {{count}}`,partial:`Résultats partiels. Affinez le texte, le dossier ou le dépôt pour continuer.`,repositoryIncomplete:`La recherche dans {{name}} est incomplète.`,noMatches:`Aucun résultat dans les fichiers examinés.`,noMatchesPartial:`Aucun résultat dans la partie examinée. Des fichiers ou dépôts restent à parcourir.`},h={description:`Changements enregistrés par Specrails, regroupés par dépôt et exécution.`,scope:`Portée de l’activité`,failed:`Impossible de charger l’activité enregistrée.`,partial:`Cet historique est incomplet. Actualisez ou choisissez un dépôt pour voir plus d’entrées.`,empty:`Aucun changement enregistré dans ce périmètre. Les exécutions terminées apparaîtront ici.`,patch:`Patch disponible`,partialPatch:`Patch partiel`,noPatch:`Aucun patch enregistré`,loading:`Chargement de l’activité…`,loadMore:`Charger plus de changements`},g={currentFile:`Fichier actuel`,recordedChange:`Changement enregistré`,recordedNotice:`Ce patch décrit une exécution passée. Il peut différer du contenu actuel du dépôt enregistré.`,diffFailed:`Impossible de charger le changement enregistré.`,retry:`Réessayer`,patchIncomplete:`Le patch enregistré est incomplet. Le contenu manquant ne peut pas être reconstitué à partir de cet enregistrement.`,displayLimited:`Aperçu limité à {{count}} lignes ou {{chars}} caractères. Le reste du patch n’est pas affiché.`,patch:`Patch enregistré`,find:`Rechercher dans le fichier`,wrap:`Retour à la ligne`,line:`Numéro de ligne`,go:`Aller`,loading:`Chargement du lecteur de code…`,sourceUnavailable:`code indisponible`,refresh:`Actualiser le code`,sourceFailed:`Impossible d’actualiser le fichier actuel. Le code affiché provient de la dernière lecture réussie.`,summaryPartial:`Généré à partir d’un aperçu partiel du code. Ce résumé peut ne pas couvrir tout le fichier.`,regenerateExplanation:`Actualiser l’explication`,noEvidence:`Aucun patch n’a été enregistré comme preuve de ce changement.`,excerptEvidence:`Cette explication repose sur un patch incomplet.`,viewPatch:`Voir le changement enregistré`},_={page:e,resizer:t,toolbar:n,provenancePanel:r,kind:i,action:a,viewer:o,summary:s,story:c,history:l,tree:u,monaco:d,ticketFiles:f,explore:p,search:m,activity:h,reader:g};export{a as action,h as activity,_ as default,p as explore,l as history,i as kind,d as monaco,e as page,r as provenancePanel,g as reader,t as resizer,m as search,c as story,s as summary,f as ticketFiles,n as toolbar,u as tree,o as viewer};
@@ -0,0 +1 @@
1
+ var e={resizeFileTree:`ファイルツリーのサイズを変更`,selectFile:`プレビューするファイルを選択してください。`},t={hint:`ドラッグでサイズ変更。ダブルクリックでリセット。`},n={scope:`スコープ`,allAi:`すべての AI`,spec:`スペック`,ticketIdPlaceholder:`id`,copyFilePath:`ファイルパスをコピー`,generateSummary:`要約を生成`,regenerateSummary:`要約を再生成`,generating:`生成中…`,regenerating:`再生成中…`,summaryUnavailable:`要約は利用できません: {{reason}}`,jobContext:`ジョブコンテキスト`,clear:`クリア`},r={jobTitle:`ジョブ {{jobId}}`,specTitle:`スペック #{{ticketId}}`,touchedFiles_one:`変更ファイル {{count}} 件`,touchedFiles_other:`変更ファイル {{count}} 件`,log:`ログ`},i={created:`作成`,modified:`変更`,deleted:`削除`},a={added:`追加`,changed:`変更`,deleted:`削除`},o={loadingFile:`ファイルを読み込み中…`,showSummary:`要約を表示`,markdownViewMode:`Markdown 表示モード`,preview:`プレビュー`,raw:`Raw`,missingFile:`このファイルは AI ジョブによって変更されましたが、作業ツリーにはもう存在しません。`,binaryFile:`バイナリファイルです。`,tooLarge:`ファイルが大きすぎてプレビューできません ({{size}} MB)。`,noContent:`表示できる内容がありません。`,pathCopied:`パスをコピーしました`,copyPathFailed:`パスをコピーできませんでした`,budgetPrompt:`予算上限を超過して実行しますか?`,edit:`編集`,save:`保存`,saving:`保存中…`,saved:`ファイルを保存しました`,saveFailed:`保存に失敗しました`,budgetPromptBody:`ファイル要約の AI 予算上限に達しました。それでも再生成すると、上限を超えて要約がもう 1 回実行されます。`,budgetPromptConfirm:`それでも再生成`},s={generationFailed:`要約の生成に失敗しました`,skipped:`要約をスキップしました: {{reason}}`,unavailable:`要約は利用できません: {{reason}}。`,empty:`このファイルの要約はまだありません。`,stale:`古い`,hide:`非表示`,reason:{missing:`ファイルが存在しません`,binary:`バイナリファイル`,tooLarge:`ファイルが大きすぎます`,providerNoPureOutput:`選択した AI プロバイダーは安全な出力専用モードを強制できません`}},c={title_one:`構築ストーリー · {{count}} 章`,title_other:`構築ストーリー · {{count}} 章`,viewMode:`ストーリー表示モード`,modeStory:`ストーリー`,modeLog:`ログ`,loading:`ストーリーを読み込み中…`,loadFailed:`ストーリーを読み込めませんでした。`,empty:`このファイルにはまだ AI の介入が記録されていません。`,spec:`Spec #{{ticketId}}`,unknownSpec:`spec のない AI 変更`,openSpec:`spec #{{ticketId}} を開く`,kindLabel:{created:`作成`,modified:`変更`,deleted:`削除`},fallback:{created:`このファイルはこの spec の実装中に作成されました。`,modified:`このファイルはこの spec の実装中に変更されました。`,deleted:`このファイルはこの spec の実装中に削除されました。`,createdNoSpec:`このファイルは AI ジョブによって作成されました。`,modifiedNoSpec:`このファイルは AI ジョブによって変更されました。`,deletedNoSpec:`このファイルは AI ジョブによって削除されました。`},explain:`この変更を説明`,explaining:`説明を生成中…`,explainFailed:`説明を生成できませんでした`,explainUnavailable:`選択したプロバイダーが安全な出力専用モードを強制できないため、AI による説明は利用できません。`,budgetReached:`月間 AI 予算に達しました。`,generateAnyway:`それでも生成する`,explainedBy:`{{model}} による説明`,linesAdded:`追加された行`,linesRemoved:`削除された行`},l={resize:`AI 変更履歴のサイズを変更`,title_one:`AI 変更履歴 · {{count}} 件の変更`,title_other:`AI 変更履歴 · {{count}} 件の変更`,show:`表示`,hide:`非表示`,unknownJob:`不明なジョブ`,filterByJob:`ジョブ {{jobId}} でコードを絞り込み`,diff:`差分`,openSpec:`スペック #{{ticketId}} を開く`,specChip:`スペック #{{ticketId}}`,loadingDiff:`差分を読み込み中...`,diffUnavailable:`この過去の変更の差分は利用できません。新しいジョブからはパッチが自動的に保存されます。`,diffTruncated:`[差分は切り捨てられました]`},u={jobFiles:`ジョブのファイル`,specFiles:`スペックのファイル`,touchedByAi:`AI が変更`,allFiles:`すべてのファイル`,collapseAll:`すべてのフォルダを折りたたむ`,expandAll:`すべてのフォルダを展開`,touchedCount_one:`AI が変更したファイル {{count}} 件`,touchedCount_other:`AI が変更したファイル {{count}} 件`,loadingFiles:`ファイルを読み込み中…`,emptyTouched:`AI が変更したファイルはまだありません。ジョブを実行するか、「すべてのファイル」に切り替えてください。`,showAllFiles:`すべてのファイルを表示`,noFiles:`ファイルがありません。`,folderTouched_one:`このフォルダ以下に AI が変更したファイルが {{count}} 件あります`,folderTouched_other:`このフォルダ以下に AI が変更したファイルが {{count}} 件あります`,jobTitle:`ジョブ {{jobId}}`,createdBySpec:`スペック #{{id}} の実装中に作成`,modifiedBySpec:`スペック #{{id}} の実装中に変更`,latestTitleCreated:`最新の AI ジョブがこのファイルを追加しました`,latestTitleModified:`最新の AI ジョブがこのファイルを変更しました`,latestTitleDeleted:`最新の AI ジョブがこのファイルを削除しました`,loadFailed:`ファイルツリーを読み込めませんでした。表示中のファイルは前回正常に読み込まれたものです。`,partial:`ファイルツリーは一部のみです。検索でフォルダーや名前を絞り込むか、更新してください。`},d={loadFailed:`コードビューアの読み込みに失敗しました。`,reload:`再読み込み`,loadingEditor:`エディタを読み込み中…`},f={title:`このスペックが変更したファイル`,jobTitle:`ジョブ {{jobId}}`,loading:`記録されたファイルを読み込み中…`,loadFailed:`記録されたファイルを読み込めませんでした。`,retry:`再試行`,loadMore:`さらにファイルを読み込む`,partial:`一部の記録されたファイルを確認できませんでした。再試行して更新してください。`},p={files:`ファイル`,search:`検索`,activity:`アクティビティ`,back:`戻る`,forward:`進む`,hideNavigation:`ナビゲーションを非表示`,showNavigation:`ナビゲーションを表示`,navigation:`コードナビゲーション`,views:`エクスプローラーの表示`,breadcrumb:`ファイルの場所`,refresh:`更新`,retry:`再試行`,welcome:`コードを理解する`,description:`リポジトリを探索し、必要なコードを見つけ、Specrails による変更を確認できます。`,findCode:`コードを探す`,viewActivity:`変更を調べる`,sourceHint:`ファイルには登録済みチェックアウトの現在の内容を表示します。アクティビティには未統合の作業を含む実行時の変更を保持します。`},m={find:`ファイル名`,search:`内容`,query:`検索語`,filePlaceholder:`名前またはパス…`,contentPlaceholder:`コード内の文字列…`,scope:`検索範囲`,allRepositories:`すべてのリポジトリ`,currentRepository:`現在のリポジトリ`,withinPath:`パス内を検索`,pathPlaceholder:`フォルダーまたはファイル(任意)`,caseSensitive:`大文字・小文字を区別`,hint:`名前でファイルを探すか、コード内の文字列を検索します。結果から該当するリポジトリと行を開けます。`,loading:`検索中…`,failed:`検索を完了できませんでした。接続を確認して再試行してください。`,results:`結果:{{count}}件`,partial:`一部の結果のみ表示しています。検索語、フォルダー、リポジトリを絞り込んでください。`,repositoryIncomplete:`{{name}} の検索を完了できませんでした。`,noMatches:`調べたファイルに一致する結果はありません。`,noMatchesPartial:`検索済みの範囲に一致する結果はありません。未検索のファイルまたはリポジトリがあります。`},h={description:`Specrails の実行で記録された変更を、リポジトリと実行ごとに表示します。`,scope:`アクティビティの範囲`,failed:`記録されたアクティビティを読み込めませんでした。`,partial:`この履歴は不完全です。更新するかリポジトリを選んで追加の記録を確認してください。`,empty:`この範囲にはまだ変更の記録がありません。完了した実行がここに表示されます。`,patch:`パッチあり`,partialPatch:`部分的なパッチ`,noPatch:`保存されたパッチなし`,loading:`アクティビティを読み込み中…`,loadMore:`さらに変更を読み込む`},g={currentFile:`現在のファイル`,recordedChange:`記録された変更`,recordedNotice:`このパッチは過去の実行を記録したもので、登録済みチェックアウトの現在の内容とは異なる場合があります。`,diffFailed:`記録された変更を読み込めませんでした。`,retry:`再試行`,patchIncomplete:`保存されたパッチは不完全です。この記録から不足する内容を復元することはできません。`,displayLimited:`プレビューは {{count}} 行または {{chars}} 文字までです。残りのパッチは表示されません。`,patch:`記録されたパッチ`,find:`ファイル内を検索`,wrap:`折り返し`,line:`行番号`,go:`移動`,loading:`コードビューアーを読み込み中…`,sourceUnavailable:`コードを利用できません`,refresh:`コードを更新`,sourceFailed:`現在のファイルを更新できませんでした。表示されているコードは前回正常に読み込まれたものです。`,summaryPartial:`コードの一部から生成されました。この要約はファイル全体をカバーしていない場合があります。`,regenerateExplanation:`説明を更新`,noEvidence:`この変更の根拠となるパッチは保存されていません。`,excerptEvidence:`この説明は不完全なパッチを根拠としています。`,viewPatch:`記録された変更を見る`},_={page:e,resizer:t,toolbar:n,provenancePanel:r,kind:i,action:a,viewer:o,summary:s,story:c,history:l,tree:u,monaco:d,ticketFiles:f,explore:p,search:m,activity:h,reader:g};export{a as action,h as activity,_ as default,p as explore,l as history,i as kind,d as monaco,e as page,r as provenancePanel,g as reader,t as resizer,m as search,c as story,s as summary,f as ticketFiles,n as toolbar,u as tree,o as viewer};
@@ -0,0 +1 @@
1
+ var e={resizeFileTree:`Ridimensiona l'albero dei file`,selectFile:`Seleziona un file per l'anteprima.`},t={hint:`Trascina per ridimensionare. Doppio clic per ripristinare.`},n={scope:`Ambito`,allAi:`Tutta l'AI`,spec:`Spec`,ticketIdPlaceholder:`id`,copyFilePath:`Copia percorso file`,generateSummary:`Genera riepilogo`,regenerateSummary:`Rigenera riepilogo`,generating:`Generazione…`,regenerating:`Rigenerazione…`,summaryUnavailable:`Riepilogo non disponibile: {{reason}}`,jobContext:`Contesto job`,clear:`Cancella`},r={jobTitle:`Job {{jobId}}`,specTitle:`Spec #{{ticketId}}`,touchedFiles_one:`{{count}} file toccato`,touchedFiles_other:`{{count}} file toccati`,log:`Log`},i={created:`creato`,modified:`modificato`,deleted:`eliminato`},a={added:`aggiunto`,changed:`modificato`,deleted:`eliminato`},o={loadingFile:`Caricamento file…`,showSummary:`Mostra riepilogo`,markdownViewMode:`Modalità di visualizzazione Markdown`,preview:`Anteprima`,raw:`Raw`,missingFile:`Questo file è stato toccato da un job AI ma non esiste più nel working tree.`,binaryFile:`File binario.`,tooLarge:`File troppo grande per l'anteprima ({{size}} MB).`,noContent:`Nessun contenuto disponibile.`,pathCopied:`Percorso copiato`,copyPathFailed:`Impossibile copiare il percorso`,budgetPrompt:`Ignorare il limite di budget?`,edit:`Modifica`,save:`Salva`,saving:`Salvataggio…`,saved:`File salvato`,saveFailed:`Salvataggio non riuscito`,budgetPromptBody:`Il limite di budget IA per i riepiloghi dei file è stato raggiunto. Rigenerando comunque viene eseguito un altro riepilogo oltre il limite.`,budgetPromptConfirm:`Rigenera comunque`},s={generationFailed:`Generazione del riepilogo non riuscita`,skipped:`Riepilogo saltato: {{reason}}`,unavailable:`Riepilogo non disponibile: {{reason}}.`,empty:`Ancora nessun riepilogo per questo file.`,stale:`Obsoleto`,hide:`Nascondi`,reason:{missing:`file mancante`,binary:`file binario`,tooLarge:`file troppo grande`,providerNoPureOutput:`il provider IA selezionato non può imporre una modalità sicura di sola uscita`}},c={title_one:`Storia di costruzione · {{count}} capitolo`,title_other:`Storia di costruzione · {{count}} capitoli`,viewMode:`Modalità di visualizzazione della storia`,modeStory:`Storia`,modeLog:`Registro`,loading:`Caricamento della storia…`,loadFailed:`Impossibile caricare la storia.`,empty:`Nessun intervento dell'IA registrato per questo file finora.`,spec:`Spec #{{ticketId}}`,unknownSpec:`Modifica dell'IA senza spec`,openSpec:`Apri la spec #{{ticketId}}`,kindLabel:{created:`Creato`,modified:`Modificato`,deleted:`Eliminato`},fallback:{created:`Questo file è stato creato durante l'implementazione di questa spec.`,modified:`Questo file è stato modificato durante l'implementazione di questa spec.`,deleted:`Questo file è stato eliminato durante l'implementazione di questa spec.`,createdNoSpec:`Questo file è stato creato da un job di IA.`,modifiedNoSpec:`Questo file è stato modificato da un job di IA.`,deletedNoSpec:`Questo file è stato eliminato da un job di IA.`},explain:`Spiega questa modifica`,explaining:`Spiegazione in corso…`,explainFailed:`Impossibile generare la spiegazione`,explainUnavailable:`La spiegazione IA non è disponibile perché il provider selezionato non può imporre una modalità sicura di sola uscita.`,budgetReached:`Budget IA mensile raggiunto.`,generateAnyway:`Genera comunque`,explainedBy:`Spiegato da {{model}}`,linesAdded:`Righe aggiunte`,linesRemoved:`Righe rimosse`},l={resize:`Ridimensiona cronologia interventi AI`,title_one:`Cronologia interventi AI · {{count}} modifica`,title_other:`Cronologia interventi AI · {{count}} modifiche`,show:`Mostra`,hide:`Nascondi`,unknownJob:`job sconosciuto`,filterByJob:`Filtra Codice per job {{jobId}}`,diff:`Diff`,openSpec:`Apri spec #{{ticketId}}`,specChip:`spec #{{ticketId}}`,loadingDiff:`Caricamento diff...`,diffUnavailable:`Diff non disponibile per questo intervento storico. I nuovi job salveranno le patch automaticamente.`,diffTruncated:`[diff troncato]`},u={jobFiles:`File del job`,specFiles:`File della spec`,touchedByAi:`Toccati dall'AI`,allFiles:`Tutti i file`,collapseAll:`Comprimi tutte le cartelle`,expandAll:`Espandi tutte le cartelle`,touchedCount_one:`{{count}} file toccato dall'AI`,touchedCount_other:`{{count}} file toccati dall'AI`,loadingFiles:`Caricamento file…`,emptyTouched:`Ancora nessun file toccato dall'AI. Esegui un job o passa a Tutti i file.`,showAllFiles:`Mostra tutti i file`,noFiles:`Nessun file.`,folderTouched_one:`{{count}} file toccato dall'AI in questa cartella`,folderTouched_other:`{{count}} file toccati dall'AI in questa cartella`,jobTitle:`Job {{jobId}}`,createdBySpec:`Creato durante l'implementazione della spec #{{id}}`,modifiedBySpec:`Modificato durante l'implementazione della spec #{{id}}`,latestTitleCreated:`L'ultimo job AI ha aggiunto questo file`,latestTitleModified:`L'ultimo job AI ha modificato questo file`,latestTitleDeleted:`L'ultimo job AI ha eliminato questo file`,loadFailed:`Impossibile caricare l’albero. I file visibili provengono dall’ultimo caricamento riuscito.`,partial:`Albero parziale. Usa Cerca per restringere cartella o nome, oppure aggiorna.`},d={loadFailed:`Impossibile caricare il visualizzatore di codice.`,reload:`Ricarica`,loadingEditor:`Caricamento editor…`},f={title:`File toccati da questa spec`,jobTitle:`Job {{jobId}}`,loading:`Caricamento file registrati…`,loadFailed:`Impossibile caricare i file registrati.`,retry:`Riprova`,loadMore:`Carica altri file`,partial:`Impossibile verificare alcuni file registrati. Riprova per aggiornare.`},p={files:`File`,search:`Cerca`,activity:`Attività`,back:`Indietro`,forward:`Avanti`,hideNavigation:`Nascondi navigazione`,showNavigation:`Mostra navigazione`,navigation:`Navigazione del codice`,views:`Viste di esplorazione`,breadcrumb:`Posizione del file`,refresh:`Aggiorna`,retry:`Riprova`,welcome:`Comprendi il tuo codice`,description:`Esplora i repository, trova il codice che ti serve e segui le modifiche di Specrails.`,findCode:`Trova codice`,viewActivity:`Esplora modifiche`,sourceHint:`File mostra il contenuto attuale del repository registrato. Attività conserva le modifiche delle esecuzioni, anche non ancora integrate.`},m={find:`Nomi dei file`,search:`Contenuto`,query:`Testo da cercare`,filePlaceholder:`Nome o percorso…`,contentPlaceholder:`Testo esatto nel codice…`,scope:`Ambito di ricerca`,allRepositories:`Tutti i repository`,currentRepository:`Repository attuale`,withinPath:`Cerca in un percorso`,pathPlaceholder:`Cartella o file (facoltativo)`,caseSensitive:`Distingui maiuscole e minuscole`,hint:`Trova un file per nome o cerca testo esatto nel codice. I risultati aprono il repository e la riga corretti.`,loading:`Ricerca…`,failed:`Impossibile completare la ricerca. Verifica la connessione e riprova.`,results:`Risultati: {{count}}`,partial:`Risultati parziali. Restringi testo, cartella o repository per continuare.`,repositoryIncomplete:`La ricerca in {{name}} è incompleta.`,noMatches:`Nessuna corrispondenza nei file esaminati.`,noMatchesPartial:`Nessuna corrispondenza nella parte esaminata. Alcuni file o repository non sono stati cercati.`},h={description:`Modifiche registrate da Specrails, raggruppate per repository ed esecuzione.`,scope:`Ambito dell’attività`,failed:`Impossibile caricare l’attività registrata.`,partial:`Questa cronologia è incompleta. Aggiorna o scegli un repository per vedere altre voci.`,empty:`Nessuna modifica registrata in questo ambito. Le esecuzioni concluse appariranno qui.`,patch:`Patch disponibile`,partialPatch:`Patch parziale`,noPatch:`Nessun patch salvato`,loading:`Caricamento attività…`,loadMore:`Carica altre modifiche`},g={currentFile:`File attuale`,recordedChange:`Modifica registrata`,recordedNotice:`Questo patch documenta un’esecuzione precedente. Può differire dal contenuto attuale del repository.`,diffFailed:`Impossibile caricare la modifica registrata.`,retry:`Riprova`,patchIncomplete:`Il patch salvato è incompleto. Il contenuto mancante non può essere ricostruito da questo record.`,displayLimited:`Anteprima limitata a {{count}} righe o {{chars}} caratteri. Il resto del patch non è mostrato.`,patch:`Patch registrato`,find:`Cerca nel file`,wrap:`A capo automatico`,line:`Numero di riga`,go:`Vai`,loading:`Caricamento del lettore di codice…`,sourceUnavailable:`codice non disponibile`,refresh:`Aggiorna codice`,sourceFailed:`Impossibile aggiornare il file attuale. Il codice visualizzato proviene dall’ultima lettura riuscita.`,summaryPartial:`Generato da una copia parziale del codice. Il riepilogo potrebbe non coprire l’intero file.`,regenerateExplanation:`Aggiorna spiegazione`,noEvidence:`Non è stato salvato un patch come prova di questa modifica.`,excerptEvidence:`Questa spiegazione si basa su un patch incompleto.`,viewPatch:`Vedi modifica registrata`},_={page:e,resizer:t,toolbar:n,provenancePanel:r,kind:i,action:a,viewer:o,summary:s,story:c,history:l,tree:u,monaco:d,ticketFiles:f,explore:p,search:m,activity:h,reader:g};export{a as action,h as activity,_ as default,p as explore,l as history,i as kind,d as monaco,e as page,r as provenancePanel,g as reader,t as resizer,m as search,c as story,s as summary,f as ticketFiles,n as toolbar,u as tree,o as viewer};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-CNC7AqOf.js";var t=e({action:()=>s,activity:()=>_,default:()=>y,explore:()=>h,history:()=>d,kind:()=>o,monaco:()=>p,page:()=>n,provenancePanel:()=>a,reader:()=>v,resizer:()=>r,search:()=>g,story:()=>u,summary:()=>l,ticketFiles:()=>m,toolbar:()=>i,tree:()=>f,viewer:()=>c}),n={resizeFileTree:`Resize file tree`,selectFile:`Select a file to preview.`},r={hint:`Drag to resize. Double-click to reset.`},i={scope:`Scope`,allAi:`All AI`,spec:`Spec`,ticketIdPlaceholder:`id`,copyFilePath:`Copy file path`,generateSummary:`Generate summary`,regenerateSummary:`Regenerate summary`,generating:`Generating…`,regenerating:`Regenerating…`,summaryUnavailable:`Summary unavailable: {{reason}}`,jobContext:`Job context`,clear:`Clear`},a={jobTitle:`Job {{jobId}}`,specTitle:`Spec #{{ticketId}}`,touchedFiles_one:`{{count}} touched file`,touchedFiles_other:`{{count}} touched files`,log:`Log`},o={created:`created`,modified:`modified`,deleted:`deleted`},s={added:`added`,changed:`changed`,deleted:`deleted`},c={loadingFile:`Loading file…`,showSummary:`Show summary`,markdownViewMode:`Markdown view mode`,preview:`Preview`,raw:`Raw`,missingFile:`This file was touched by an AI job but no longer exists in the working tree.`,binaryFile:`Binary file.`,tooLarge:`File too large to preview ({{size}} MB).`,noContent:`No content available.`,pathCopied:`Path copied`,copyPathFailed:`Could not copy path`,budgetPrompt:`Override the spend limit?`,edit:`Edit`,save:`Save`,saving:`Saving…`,saved:`File saved`,saveFailed:`Save failed`,budgetPromptBody:`The AI spend limit for file summaries has been reached. Regenerating anyway runs one more summary beyond the limit.`,budgetPromptConfirm:`Regenerate anyway`},l={generationFailed:`Summary generation failed`,skipped:`Summary skipped: {{reason}}`,unavailable:`Summary unavailable: {{reason}}.`,empty:`No summary for this file yet.`,stale:`Stale`,hide:`Hide`,reason:{missing:`file missing`,binary:`binary file`,tooLarge:`file too large`,providerNoPureOutput:`selected AI provider cannot enforce safe pure-output mode`}},u={title_one:`Construction story · {{count}} chapter`,title_other:`Construction story · {{count}} chapters`,viewMode:`Story view mode`,modeStory:`Story`,modeLog:`Log`,loading:`Loading the story…`,loadFailed:`Could not load the story.`,empty:`No AI interventions recorded for this file yet.`,spec:`Spec #{{ticketId}}`,unknownSpec:`AI change without a spec`,openSpec:`Open spec #{{ticketId}}`,kindLabel:{created:`Created`,modified:`Modified`,deleted:`Deleted`},fallback:{created:`This file was created while implementing this spec.`,modified:`This file was modified while implementing this spec.`,deleted:`This file was deleted while implementing this spec.`,createdNoSpec:`This file was created by an AI job.`,modifiedNoSpec:`This file was modified by an AI job.`,deletedNoSpec:`This file was deleted by an AI job.`},explain:`Explain this change`,explaining:`Explaining…`,explainFailed:`Could not generate the explanation`,explainUnavailable:`AI explanation is unavailable because the selected provider cannot enforce safe pure-output mode.`,budgetReached:`Monthly AI spend limit reached.`,generateAnyway:`Generate anyway`,explainedBy:`Explained by {{model}}`,linesAdded:`Lines added`,linesRemoved:`Lines removed`},d={resize:`Resize AI touch history`,title_one:`AI touch history · {{count}} change`,title_other:`AI touch history · {{count}} changes`,show:`Show`,hide:`Hide`,unknownJob:`unknown job`,filterByJob:`Filter Code by job {{jobId}}`,diff:`Diff`,openSpec:`Open spec #{{ticketId}}`,specChip:`spec #{{ticketId}}`,loadingDiff:`Loading diff...`,diffUnavailable:`Diff unavailable for this historical touch. New jobs will store patches automatically.`,diffTruncated:`[diff truncated]`},f={jobFiles:`Job files`,specFiles:`Spec files`,touchedByAi:`Touched by AI`,allFiles:`All files`,collapseAll:`Collapse all folders`,expandAll:`Expand all folders`,touchedCount_one:`{{count}} AI-touched file`,touchedCount_other:`{{count}} AI-touched files`,loadingFiles:`Loading files…`,emptyTouched:`No AI-touched files yet. Run a job, or switch to All files.`,showAllFiles:`Show all files`,noFiles:`No files.`,folderTouched_one:`{{count}} AI-touched file below this folder`,folderTouched_other:`{{count}} AI-touched files below this folder`,jobTitle:`Job {{jobId}}`,createdBySpec:`Created while implementing spec #{{id}}`,modifiedBySpec:`Modified while implementing spec #{{id}}`,latestTitleCreated:`Latest AI job added this file`,latestTitleModified:`Latest AI job changed this file`,latestTitleDeleted:`Latest AI job deleted this file`,loadFailed:`Could not load the file tree. Any visible files are from the previous successful load.`,partial:`Partial file tree. Use Search to narrow the folder or filename, or refresh to scan again.`},p={loadFailed:`Failed to load the code viewer.`,reload:`Reload`,loadingEditor:`Loading editor…`},m={title:`Files touched by this spec`,jobTitle:`Job {{jobId}}`,loading:`Loading recorded files…`,loadFailed:`Could not load recorded files.`,retry:`Retry`,loadMore:`Load more files`,partial:`Some recorded files could not be checked. Retry to refresh.`},h={files:`Files`,search:`Search`,activity:`Activity`,back:`Back`,forward:`Forward`,hideNavigation:`Hide navigation`,showNavigation:`Show navigation`,navigation:`Code navigation`,views:`Explorer views`,breadcrumb:`File location`,refresh:`Refresh`,retry:`Retry`,welcome:`Understand your code`,description:`Explore your repositories, find the code you need and follow the changes made by Specrails.`,findCode:`Find code`,viewActivity:`Explore changes`,sourceHint:`Files show the current registered checkout. Activity preserves the changes recorded by runs, including work that has not been integrated yet.`},g={find:`File names`,search:`Contents`,query:`Search query`,filePlaceholder:`Name or path…`,contentPlaceholder:`Literal text in code…`,scope:`Search scope`,allRepositories:`All repositories`,currentRepository:`Current repository`,withinPath:`Search within path`,pathPlaceholder:`Folder or file (optional)`,caseSensitive:`Match case`,hint:`Find a file by name or search for exact text across your code. Results open in their repository and line.`,loading:`Searching…`,failed:`Search could not be completed. Check the connection and retry.`,results:`Results: {{count}}`,partial:`Partial results. Narrow the query, folder or repository to explore further.`,repositoryIncomplete:`{{name}} could not be fully searched.`,noMatches:`No matches found in the scanned files.`,noMatchesPartial:`No matches in the portion searched. Some files or repositories remain unsearched.`},_={description:`Changes recorded by Specrails runs, grouped by repository and run.`,scope:`Activity scope`,failed:`Could not load recorded activity.`,partial:`This history is incomplete. Refresh or choose a repository to inspect more records.`,empty:`No recorded changes in this scope yet. Completed runs will appear here.`,patch:`Patch available`,partialPatch:`Partial patch`,noPatch:`No stored patch`,loading:`Loading activity…`,loadMore:`Load more changes`},v={currentFile:`Current file`,recordedChange:`Recorded change`,recordedNotice:`This patch records a past run. It may differ from the current registered checkout.`,diffFailed:`Could not load the recorded change.`,retry:`Retry`,patchIncomplete:`The stored patch is incomplete. Missing content cannot be reconstructed from this record.`,displayLimited:`Preview limited to {{count}} lines or {{chars}} characters. The remaining patch is not shown.`,patch:`Recorded patch`,find:`Find in file`,wrap:`Wrap lines`,line:`Line number`,go:`Go`,loading:`Loading source viewer…`,sourceUnavailable:`source unavailable`,refresh:`Refresh source`,sourceFailed:`Could not refresh the current file. Any displayed source is the last successful read.`,summaryPartial:`Generated from a partial source snapshot. This summary may not cover the entire file.`,regenerateExplanation:`Refresh explanation`,noEvidence:`No patch evidence was stored for this change.`,excerptEvidence:`This explanation uses incomplete patch evidence.`,viewPatch:`View recorded change`},y={page:n,resizer:r,toolbar:i,provenancePanel:a,kind:o,action:s,viewer:c,summary:l,story:u,history:d,tree:f,monaco:p,ticketFiles:m,explore:h,search:g,activity:_,reader:v};export{t};
@@ -0,0 +1 @@
1
+ var e={resizeFileTree:`Redimensionar árbol de archivos`,selectFile:`Selecciona un archivo para previsualizarlo.`},t={hint:`Arrastra para redimensionar. Doble clic para restablecer.`},n={scope:`Ámbito`,allAi:`Toda la IA`,spec:`Spec`,ticketIdPlaceholder:`id`,copyFilePath:`Copiar ruta del archivo`,generateSummary:`Generar resumen`,regenerateSummary:`Regenerar resumen`,generating:`Generando…`,regenerating:`Regenerando…`,summaryUnavailable:`Resumen no disponible: {{reason}}`,jobContext:`Contexto del trabajo`,clear:`Limpiar`},r={jobTitle:`Trabajo {{jobId}}`,specTitle:`Spec #{{ticketId}}`,touchedFiles_one:`{{count}} archivo tocado`,touchedFiles_other:`{{count}} archivos tocados`,log:`Log`},i={created:`creado`,modified:`modificado`,deleted:`eliminado`},a={added:`añadido`,changed:`cambiado`,deleted:`eliminado`},o={loadingFile:`Cargando archivo…`,showSummary:`Mostrar resumen`,markdownViewMode:`Modo de vista de Markdown`,preview:`Vista previa`,raw:`Sin formato`,missingFile:`Este archivo fue tocado por un trabajo de IA pero ya no existe en el árbol de trabajo.`,binaryFile:`Archivo binario.`,tooLarge:`Archivo demasiado grande para previsualizar ({{size}} MB).`,noContent:`No hay contenido disponible.`,pathCopied:`Ruta copiada`,copyPathFailed:`No se pudo copiar la ruta`,budgetPrompt:`¿Ignorar el límite?`,edit:`Editar`,save:`Guardar`,saving:`Guardando…`,saved:`Archivo guardado`,saveFailed:`Error al guardar`,budgetPromptBody:`Se alcanzó el límite de IA para resúmenes de archivos. Si regeneras igualmente, se ejecuta un resumen más por encima del límite.`,budgetPromptConfirm:`Regenerar igualmente`},s={generationFailed:`Error al generar el resumen`,skipped:`Resumen omitido: {{reason}}`,unavailable:`Resumen no disponible: {{reason}}.`,empty:`Aún no hay resumen para este archivo.`,stale:`Obsoleto`,hide:`Ocultar`,reason:{missing:`archivo no encontrado`,binary:`archivo binario`,tooLarge:`archivo demasiado grande`,providerNoPureOutput:`el proveedor de IA seleccionado no puede imponer un modo seguro de solo salida`}},c={title_one:`Historia de construcción · {{count}} capítulo`,title_other:`Historia de construcción · {{count}} capítulos`,viewMode:`Modo de vista de la historia`,modeStory:`Historia`,modeLog:`Registro`,loading:`Cargando la historia…`,loadFailed:`No se pudo cargar la historia.`,empty:`Aún no hay intervenciones de IA registradas para este archivo.`,spec:`Spec #{{ticketId}}`,unknownSpec:`Cambio de IA sin spec`,openSpec:`Abrir spec #{{ticketId}}`,kindLabel:{created:`Creado`,modified:`Modificado`,deleted:`Eliminado`},fallback:{created:`Este archivo se creó al implementar esta spec.`,modified:`Este archivo se modificó al implementar esta spec.`,deleted:`Este archivo se eliminó al implementar esta spec.`,createdNoSpec:`Este archivo fue creado por un trabajo de IA.`,modifiedNoSpec:`Este archivo fue modificado por un trabajo de IA.`,deletedNoSpec:`Este archivo fue eliminado por un trabajo de IA.`},explain:`Explicar este cambio`,explaining:`Explicando…`,explainFailed:`No se pudo generar la explicación`,explainUnavailable:`La explicación con IA no está disponible porque el proveedor seleccionado no puede imponer un modo seguro de solo salida.`,budgetReached:`Límite mensual de IA alcanzado.`,generateAnyway:`Generar de todos modos`,explainedBy:`Explicado por {{model}}`,linesAdded:`Líneas añadidas`,linesRemoved:`Líneas eliminadas`},l={resize:`Redimensionar historial de cambios de IA`,title_one:`Historial de cambios de IA · {{count}} cambio`,title_other:`Historial de cambios de IA · {{count}} cambios`,show:`Mostrar`,hide:`Ocultar`,unknownJob:`trabajo desconocido`,filterByJob:`Filtrar Código por el trabajo {{jobId}}`,diff:`Diff`,openSpec:`Abrir spec #{{ticketId}}`,specChip:`spec #{{ticketId}}`,loadingDiff:`Cargando diff...`,diffUnavailable:`Diff no disponible para este cambio histórico. Los trabajos nuevos guardarán los parches automáticamente.`,diffTruncated:`[diff truncado]`},u={jobFiles:`Archivos del trabajo`,specFiles:`Archivos de la spec`,touchedByAi:`Tocado por IA`,allFiles:`Todos los archivos`,collapseAll:`Contraer todas las carpetas`,expandAll:`Expandir todas las carpetas`,touchedCount_one:`{{count}} archivo tocado por IA`,touchedCount_other:`{{count}} archivos tocados por IA`,loadingFiles:`Cargando archivos…`,emptyTouched:`Aún no hay archivos tocados por IA. Ejecuta un trabajo o cambia a Todos los archivos.`,showAllFiles:`Mostrar todos los archivos`,noFiles:`No hay archivos.`,folderTouched_one:`{{count}} archivo tocado por IA dentro de esta carpeta`,folderTouched_other:`{{count}} archivos tocados por IA dentro de esta carpeta`,jobTitle:`Trabajo {{jobId}}`,createdBySpec:`Creado al implementar la spec #{{id}}`,modifiedBySpec:`Modificado al implementar la spec #{{id}}`,latestTitleCreated:`El último trabajo de IA añadió este archivo`,latestTitleModified:`El último trabajo de IA modificó este archivo`,latestTitleDeleted:`El último trabajo de IA eliminó este archivo`,loadFailed:`No se pudo cargar el árbol. Los archivos visibles pertenecen a la última carga correcta.`,partial:`Árbol parcial. Usa Buscar para acotar la carpeta o el nombre, o actualiza para volver a examinarlo.`},d={loadFailed:`No se pudo cargar el visor de código.`,reload:`Recargar`,loadingEditor:`Cargando editor…`},f={title:`Archivos tocados por esta spec`,jobTitle:`Trabajo {{jobId}}`,loading:`Cargando archivos registrados…`,loadFailed:`No se pudieron cargar los archivos registrados.`,retry:`Reintentar`,loadMore:`Cargar más archivos`,partial:`No se pudieron comprobar algunos archivos registrados. Reintenta para actualizar.`},p={files:`Archivos`,search:`Buscar`,activity:`Actividad`,back:`Atrás`,forward:`Adelante`,hideNavigation:`Ocultar navegación`,showNavigation:`Mostrar navegación`,navigation:`Navegación de código`,views:`Vistas del explorador`,breadcrumb:`Ubicación del archivo`,refresh:`Actualizar`,retry:`Reintentar`,welcome:`Entiende tu código`,description:`Explora tus repositorios, encuentra el código que necesitas y sigue los cambios que ha hecho Specrails.`,findCode:`Encontrar código`,viewActivity:`Explorar cambios`,sourceHint:`Archivos muestra el contenido actual del repositorio registrado. Actividad conserva los cambios de las ejecuciones, incluido el trabajo todavía sin integrar.`},m={find:`Nombres de archivo`,search:`Contenido`,query:`Texto de búsqueda`,filePlaceholder:`Nombre o ruta…`,contentPlaceholder:`Texto literal en el código…`,scope:`Alcance de búsqueda`,allRepositories:`Todos los repositorios`,currentRepository:`Repositorio actual`,withinPath:`Buscar dentro de una ruta`,pathPlaceholder:`Carpeta o archivo (opcional)`,caseSensitive:`Distinguir mayúsculas`,hint:`Encuentra un archivo por su nombre o busca texto exacto en el código. Los resultados abren su repositorio y línea.`,loading:`Buscando…`,failed:`No se pudo completar la búsqueda. Comprueba la conexión y reintenta.`,results:`Resultados: {{count}}`,partial:`Resultados parciales. Acota el texto, la carpeta o el repositorio para seguir explorando.`,repositoryIncomplete:`No se pudo buscar por completo en {{name}}.`,noMatches:`No se encontraron coincidencias en los archivos examinados.`,noMatchesPartial:`Sin coincidencias en la parte examinada. Quedan archivos o repositorios sin buscar.`},h={description:`Cambios registrados por las ejecuciones de Specrails, agrupados por repositorio y ejecución.`,scope:`Alcance de actividad`,failed:`No se pudo cargar la actividad registrada.`,partial:`Este historial está incompleto. Actualiza o elige un repositorio para explorar más registros.`,empty:`Todavía no hay cambios registrados en este alcance. Aquí aparecerán las ejecuciones terminadas.`,patch:`Parche disponible`,partialPatch:`Parche parcial`,noPatch:`Sin parche guardado`,loading:`Cargando actividad…`,loadMore:`Cargar más cambios`},g={currentFile:`Archivo actual`,recordedChange:`Cambio registrado`,recordedNotice:`Este parche registra una ejecución anterior. Puede diferir del contenido actual del repositorio.`,diffFailed:`No se pudo cargar el cambio registrado.`,retry:`Reintentar`,patchIncomplete:`El parche guardado está incompleto. No se puede reconstruir el contenido que falta a partir de este registro.`,displayLimited:`Vista limitada a {{count}} líneas o {{chars}} caracteres. El resto del parche no se muestra.`,patch:`Parche registrado`,find:`Buscar en el archivo`,wrap:`Ajustar líneas`,line:`Número de línea`,go:`Ir`,loading:`Cargando visor de código…`,sourceUnavailable:`código no disponible`,refresh:`Actualizar código`,sourceFailed:`No se pudo actualizar el archivo actual. El código visible corresponde a la última lectura correcta.`,summaryPartial:`Generado a partir de una captura parcial del código. Este resumen puede no cubrir todo el archivo.`,regenerateExplanation:`Actualizar explicación`,noEvidence:`No se guardó un parche como evidencia de este cambio.`,excerptEvidence:`Esta explicación utiliza evidencia de un parche incompleto.`,viewPatch:`Ver cambio registrado`},_={page:e,resizer:t,toolbar:n,provenancePanel:r,kind:i,action:a,viewer:o,summary:s,story:c,history:l,tree:u,monaco:d,ticketFiles:f,explore:p,search:m,activity:h,reader:g};export{a as action,h as activity,_ as default,p as explore,l as history,i as kind,d as monaco,e as page,r as provenancePanel,g as reader,t as resizer,m as search,c as story,s as summary,f as ticketFiles,n as toolbar,u as tree,o as viewer};
@@ -0,0 +1 @@
1
+ var e={resizeFileTree:`Redimensionar árvore de ficheiros`,selectFile:`Selecione um ficheiro para pré-visualizar.`},t={hint:`Arraste para redimensionar. Duplo clique para repor.`},n={scope:`Âmbito`,allAi:`Toda a IA`,spec:`Spec`,ticketIdPlaceholder:`id`,copyFilePath:`Copiar caminho do ficheiro`,generateSummary:`Gerar resumo`,regenerateSummary:`Regenerar resumo`,generating:`A gerar…`,regenerating:`A regenerar…`,summaryUnavailable:`Resumo indisponível: {{reason}}`,jobContext:`Contexto do job`,clear:`Limpar`},r={jobTitle:`Job {{jobId}}`,specTitle:`Spec #{{ticketId}}`,touchedFiles_one:`{{count}} ficheiro alterado`,touchedFiles_other:`{{count}} ficheiros alterados`,log:`Log`},i={created:`criado`,modified:`modificado`,deleted:`eliminado`},a={added:`adicionado`,changed:`alterado`,deleted:`eliminado`},o={loadingFile:`A carregar ficheiro…`,showSummary:`Mostrar resumo`,markdownViewMode:`Modo de visualização de Markdown`,preview:`Pré-visualização`,raw:`Original`,missingFile:`Este ficheiro foi alterado por um job de IA mas já não existe na árvore de trabalho.`,binaryFile:`Ficheiro binário.`,tooLarge:`Ficheiro demasiado grande para pré-visualizar ({{size}} MB).`,noContent:`Sem conteúdo disponível.`,pathCopied:`Caminho copiado`,copyPathFailed:`Não foi possível copiar o caminho`,budgetPrompt:`Freestylepassar o limite de orçamento?`,edit:`Editar`,save:`Salvar`,saving:`Salvando…`,saved:`Arquivo salvo`,saveFailed:`Falha ao salvar`,budgetPromptBody:`O limite de orçamento de IA para resumos de arquivos foi atingido. Regenerar mesmo assim executa mais um resumo além do limite.`,budgetPromptConfirm:`Regenerar mesmo assim`},s={generationFailed:`Falha na geração do resumo`,skipped:`Resumo ignorado: {{reason}}`,unavailable:`Resumo indisponível: {{reason}}.`,empty:`Ainda não há resumo para este ficheiro.`,stale:`Desatualizado`,hide:`Ocultar`,reason:{missing:`ficheiro em falta`,binary:`ficheiro binário`,tooLarge:`ficheiro demasiado grande`,providerNoPureOutput:`o fornecedor de IA selecionado não consegue impor um modo seguro apenas de saída`}},c={title_one:`História de construção · {{count}} capítulo`,title_other:`História de construção · {{count}} capítulos`,viewMode:`Modo de visualização da história`,modeStory:`História`,modeLog:`Registro`,loading:`Carregando a história…`,loadFailed:`Não foi possível carregar a história.`,empty:`Ainda não há intervenções de IA registradas para este arquivo.`,spec:`Spec #{{ticketId}}`,unknownSpec:`Alteração de IA sem spec`,openSpec:`Abrir spec #{{ticketId}}`,kindLabel:{created:`Criado`,modified:`Modificado`,deleted:`Excluído`},fallback:{created:`Este arquivo foi criado ao implementar esta spec.`,modified:`Este arquivo foi modificado ao implementar esta spec.`,deleted:`Este arquivo foi excluído ao implementar esta spec.`,createdNoSpec:`Este arquivo foi criado por um job de IA.`,modifiedNoSpec:`Este arquivo foi modificado por um job de IA.`,deletedNoSpec:`Este arquivo foi excluído por um job de IA.`},explain:`Explicar esta alteração`,explaining:`Explicando…`,explainFailed:`Não foi possível gerar a explicação`,explainUnavailable:`A explicação por IA não está disponível porque o fornecedor selecionado não consegue impor um modo seguro apenas de saída.`,budgetReached:`Orçamento mensal de IA atingido.`,generateAnyway:`Gerar mesmo assim`,explainedBy:`Explicado por {{model}}`,linesAdded:`Linhas adicionadas`,linesRemoved:`Linhas removidas`},l={resize:`Redimensionar histórico de alterações por IA`,title_one:`Histórico de alterações por IA · {{count}} alteração`,title_other:`Histórico de alterações por IA · {{count}} alterações`,show:`Mostrar`,hide:`Ocultar`,unknownJob:`job desconhecido`,filterByJob:`Filtrar Código pelo job {{jobId}}`,diff:`Diff`,openSpec:`Abrir spec #{{ticketId}}`,specChip:`spec #{{ticketId}}`,loadingDiff:`A carregar diff...`,diffUnavailable:`Diff indisponível para esta alteração histórica. Os novos jobs guardarão patches automaticamente.`,diffTruncated:`[diff truncado]`},u={jobFiles:`Ficheiros do job`,specFiles:`Ficheiros da spec`,touchedByAi:`Alterados por IA`,allFiles:`Todos os ficheiros`,collapseAll:`Recolher todas as pastas`,expandAll:`Expandir todas as pastas`,touchedCount_one:`{{count}} ficheiro alterado por IA`,touchedCount_other:`{{count}} ficheiros alterados por IA`,loadingFiles:`A carregar ficheiros…`,emptyTouched:`Ainda não há ficheiros alterados por IA. Execute um job ou mude para Todos os ficheiros.`,showAllFiles:`Mostrar todos os ficheiros`,noFiles:`Sem ficheiros.`,folderTouched_one:`{{count}} ficheiro alterado por IA nesta pasta`,folderTouched_other:`{{count}} ficheiros alterados por IA nesta pasta`,jobTitle:`Job {{jobId}}`,createdBySpec:`Criado durante a implementação da spec #{{id}}`,modifiedBySpec:`Modificado durante a implementação da spec #{{id}}`,latestTitleCreated:`O último job de IA adicionou este ficheiro`,latestTitleModified:`O último job de IA alterou este ficheiro`,latestTitleDeleted:`O último job de IA eliminou este ficheiro`,loadFailed:`Não foi possível carregar a árvore. Os arquivos visíveis são do último carregamento bem-sucedido.`,partial:`Árvore parcial. Use Buscar para restringir a pasta ou o nome, ou atualize novamente.`},d={loadFailed:`Falha ao carregar o visualizador de código.`,reload:`Recarregar`,loadingEditor:`A carregar editor…`},f={title:`Ficheiros alterados por esta spec`,jobTitle:`Job {{jobId}}`,loading:`Carregando arquivos registrados…`,loadFailed:`Não foi possível carregar os arquivos registrados.`,retry:`Tentar novamente`,loadMore:`Carregar mais arquivos`,partial:`Alguns arquivos registrados não puderam ser verificados. Tente novamente para atualizar.`},p={files:`Arquivos`,search:`Buscar`,activity:`Atividade`,back:`Voltar`,forward:`Avançar`,hideNavigation:`Ocultar navegação`,showNavigation:`Mostrar navegação`,navigation:`Navegação de código`,views:`Visualizações do explorador`,breadcrumb:`Localização do arquivo`,refresh:`Atualizar`,retry:`Tentar novamente`,welcome:`Entenda seu código`,description:`Explore seus repositórios, encontre o código necessário e acompanhe as alterações do Specrails.`,findCode:`Encontrar código`,viewActivity:`Explorar alterações`,sourceHint:`Arquivos mostra o conteúdo atual do repositório registrado. Atividade preserva as alterações das execuções, incluindo trabalho ainda não integrado.`},m={find:`Nomes de arquivos`,search:`Conteúdo`,query:`Texto da busca`,filePlaceholder:`Nome ou caminho…`,contentPlaceholder:`Texto literal no código…`,scope:`Escopo da busca`,allRepositories:`Todos os repositórios`,currentRepository:`Repositório atual`,withinPath:`Buscar em um caminho`,pathPlaceholder:`Pasta ou arquivo (opcional)`,caseSensitive:`Diferenciar maiúsculas`,hint:`Encontre arquivos pelo nome ou busque texto exato no código. Os resultados abrem o repositório e a linha correspondentes.`,loading:`Buscando…`,failed:`Não foi possível concluir a busca. Verifique a conexão e tente novamente.`,results:`Resultados: {{count}}`,partial:`Resultados parciais. Restrinja o texto, a pasta ou o repositório para continuar.`,repositoryIncomplete:`Não foi possível pesquisar {{name}} por completo.`,noMatches:`Nenhum resultado nos arquivos examinados.`,noMatchesPartial:`Nenhum resultado na parte examinada. Alguns arquivos ou repositórios não foram pesquisados.`},h={description:`Alterações registradas pelo Specrails, agrupadas por repositório e execução.`,scope:`Escopo da atividade`,failed:`Não foi possível carregar a atividade registrada.`,partial:`Este histórico está incompleto. Atualize ou escolha um repositório para ver mais registros.`,empty:`Ainda não há alterações registradas neste escopo. As execuções concluídas aparecerão aqui.`,patch:`Patch disponível`,partialPatch:`Patch parcial`,noPatch:`Sem patch salvo`,loading:`Carregando atividade…`,loadMore:`Carregar mais alterações`},g={currentFile:`Arquivo atual`,recordedChange:`Alteração registrada`,recordedNotice:`Este patch registra uma execução anterior. Ele pode diferir do conteúdo atual do repositório registrado.`,diffFailed:`Não foi possível carregar a alteração registrada.`,retry:`Tentar novamente`,patchIncomplete:`O patch salvo está incompleto. Não é possível reconstruir o conteúdo ausente a partir deste registro.`,displayLimited:`Prévia limitada a {{count}} linhas ou {{chars}} caracteres. O restante do patch não é mostrado.`,patch:`Patch registrado`,find:`Buscar no arquivo`,wrap:`Quebrar linhas`,line:`Número da linha`,go:`Ir`,loading:`Carregando visualizador de código…`,sourceUnavailable:`código indisponível`,refresh:`Atualizar código`,sourceFailed:`Não foi possível atualizar o arquivo atual. O código exibido é da última leitura bem-sucedida.`,summaryPartial:`Gerado a partir de uma captura parcial do código. O resumo pode não cobrir o arquivo inteiro.`,regenerateExplanation:`Atualizar explicação`,noEvidence:`Nenhum patch foi salvo como evidência desta alteração.`,excerptEvidence:`Esta explicação utiliza evidências de um patch incompleto.`,viewPatch:`Ver alteração registrada`},_={page:e,resizer:t,toolbar:n,provenancePanel:r,kind:i,action:a,viewer:o,summary:s,story:c,history:l,tree:u,monaco:d,ticketFiles:f,explore:p,search:m,activity:h,reader:g};export{a as action,h as activity,_ as default,p as explore,l as history,i as kind,d as monaco,e as page,r as provenancePanel,g as reader,t as resizer,m as search,c as story,s as summary,f as ticketFiles,n as toolbar,u as tree,o as viewer};
@@ -0,0 +1 @@
1
+ var e={resizeFileTree:`调整文件树大小`,selectFile:`选择一个文件进行预览。`},t={hint:`拖动以调整大小。双击重置。`},n={scope:`范围`,allAi:`全部 AI`,spec:`Spec`,ticketIdPlaceholder:`id`,copyFilePath:`复制文件路径`,generateSummary:`生成摘要`,regenerateSummary:`重新生成摘要`,generating:`生成中…`,regenerating:`重新生成中…`,summaryUnavailable:`摘要不可用:{{reason}}`,jobContext:`任务上下文`,clear:`清除`},r={jobTitle:`任务 {{jobId}}`,specTitle:`Spec #{{ticketId}}`,touchedFiles_one:`{{count}} 个被改动的文件`,touchedFiles_other:`{{count}} 个被改动的文件`,log:`日志`},i={created:`创建`,modified:`修改`,deleted:`删除`},a={added:`新增`,changed:`更改`,deleted:`删除`},o={loadingFile:`正在加载文件…`,showSummary:`显示摘要`,markdownViewMode:`Markdown 查看模式`,preview:`预览`,raw:`原始`,missingFile:`此文件曾被 AI 任务改动,但已不存在于工作区中。`,binaryFile:`二进制文件。`,tooLarge:`文件过大,无法预览({{size}} MB)。`,noContent:`无可用内容。`,pathCopied:`路径已复制`,copyPathFailed:`无法复制路径`,budgetPrompt:`要超出预算上限继续吗?`,edit:`编辑`,save:`保存`,saving:`保存中…`,saved:`文件已保存`,saveFailed:`保存失败`,budgetPromptBody:`文件摘要的 AI 预算上限已用完。仍然重新生成会在上限之外再运行一次摘要。`,budgetPromptConfirm:`仍然重新生成`},s={generationFailed:`摘要生成失败`,skipped:`已跳过摘要:{{reason}}`,unavailable:`摘要不可用:{{reason}}。`,empty:`此文件还没有摘要。`,stale:`已过期`,hide:`隐藏`,reason:{missing:`文件缺失`,binary:`二进制文件`,tooLarge:`文件过大`,providerNoPureOutput:`所选 AI 提供商无法强制执行安全的纯输出模式`}},c={title_one:`构建故事 · {{count}} 个章节`,title_other:`构建故事 · {{count}} 个章节`,viewMode:`故事视图模式`,modeStory:`故事`,modeLog:`日志`,loading:`正在加载故事…`,loadFailed:`无法加载故事。`,empty:`此文件尚未记录任何 AI 介入。`,spec:`Spec #{{ticketId}}`,unknownSpec:`无 spec 的 AI 更改`,openSpec:`打开 spec #{{ticketId}}`,kindLabel:{created:`创建`,modified:`修改`,deleted:`删除`},fallback:{created:`此文件是在实现该 spec 时创建的。`,modified:`此文件是在实现该 spec 时修改的。`,deleted:`此文件是在实现该 spec 时删除的。`,createdNoSpec:`此文件由一个 AI 任务创建。`,modifiedNoSpec:`此文件由一个 AI 任务修改。`,deletedNoSpec:`此文件由一个 AI 任务删除。`},explain:`解释此更改`,explaining:`正在解释…`,explainFailed:`无法生成解释`,explainUnavailable:`所选提供商无法强制执行安全的纯输出模式,因此 AI 解释不可用。`,budgetReached:`已达到每月 AI 预算。`,generateAnyway:`仍然生成`,explainedBy:`由 {{model}} 解释`,linesAdded:`新增行`,linesRemoved:`删除行`},l={resize:`调整 AI 改动历史大小`,title_one:`AI 改动历史 · {{count}} 处更改`,title_other:`AI 改动历史 · {{count}} 处更改`,show:`显示`,hide:`隐藏`,unknownJob:`未知任务`,filterByJob:`按任务 {{jobId}} 筛选 Code`,diff:`Diff`,openSpec:`打开 Spec #{{ticketId}}`,specChip:`Spec #{{ticketId}}`,loadingDiff:`正在加载 diff...`,diffUnavailable:`此历史改动没有可用的 diff。新任务会自动保存补丁。`,diffTruncated:`[diff 已截断]`},u={jobFiles:`任务文件`,specFiles:`Spec 文件`,touchedByAi:`AI 改动过`,allFiles:`全部文件`,collapseAll:`折叠所有文件夹`,expandAll:`展开所有文件夹`,touchedCount_one:`{{count}} 个 AI 改动过的文件`,touchedCount_other:`{{count}} 个 AI 改动过的文件`,loadingFiles:`正在加载文件…`,emptyTouched:`还没有 AI 改动过的文件。运行一个任务,或切换到“全部文件”。`,showAllFiles:`显示全部文件`,noFiles:`没有文件。`,folderTouched_one:`此文件夹下有 {{count}} 个 AI 改动过的文件`,folderTouched_other:`此文件夹下有 {{count}} 个 AI 改动过的文件`,jobTitle:`任务 {{jobId}}`,createdBySpec:`在实现 Spec #{{id}} 时创建`,modifiedBySpec:`在实现 Spec #{{id}} 时修改`,latestTitleCreated:`最近的 AI 任务添加了此文件`,latestTitleModified:`最近的 AI 任务更改了此文件`,latestTitleDeleted:`最近的 AI 任务删除了此文件`,loadFailed:`无法加载文件树。可见文件来自上次成功加载的结果。`,partial:`文件树不完整。请使用搜索缩小文件夹或文件名范围,或刷新后重新扫描。`},d={loadFailed:`代码查看器加载失败。`,reload:`重新加载`,loadingEditor:`正在加载编辑器…`},f={title:`此规格改动的文件`,jobTitle:`任务 {{jobId}}`,loading:`正在加载已记录的文件…`,loadFailed:`无法加载已记录的文件。`,retry:`重试`,loadMore:`加载更多文件`,partial:`无法检查部分已记录的文件。请重试以刷新。`},p={files:`文件`,search:`搜索`,activity:`活动`,back:`后退`,forward:`前进`,hideNavigation:`隐藏导航`,showNavigation:`显示导航`,navigation:`代码导航`,views:`浏览视图`,breadcrumb:`文件位置`,refresh:`刷新`,retry:`重试`,welcome:`理解你的代码`,description:`浏览仓库,查找所需代码,追踪 Specrails 所做的更改。`,findCode:`查找代码`,viewActivity:`浏览更改`,sourceHint:`文件显示已注册仓库的当前内容。活动保留运行中记录的更改,包括尚未整合的工作。`},m={find:`文件名`,search:`内容`,query:`搜索内容`,filePlaceholder:`名称或路径…`,contentPlaceholder:`代码中的文本…`,scope:`搜索范围`,allRepositories:`所有仓库`,currentRepository:`当前仓库`,withinPath:`在路径中搜索`,pathPlaceholder:`文件夹或文件(可选)`,caseSensitive:`区分大小写`,hint:`按名称查找文件,或搜索代码中的文本。结果会打开对应的仓库和行。`,loading:`正在搜索…`,failed:`无法完成搜索。请检查连接后重试。`,results:`结果:{{count}} 条`,partial:`结果不完整。请缩小搜索文本、文件夹或仓库范围。`,repositoryIncomplete:`未能完整搜索 {{name}}。`,noMatches:`在已扫描文件中未找到匹配项。`,noMatchesPartial:`已搜索部分中没有匹配项。仍有文件或仓库未被搜索。`},h={description:`Specrails 运行记录的更改,按仓库和运行分组。`,scope:`活动范围`,failed:`无法加载已记录的活动。`,partial:`此历史记录不完整。请刷新或选择一个仓库以查看更多记录。`,empty:`此范围内尚无更改记录。已完成的运行将显示在这里。`,patch:`补丁可用`,partialPatch:`部分补丁`,noPatch:`没有已保存的补丁`,loading:`正在加载活动…`,loadMore:`加载更多更改`},g={currentFile:`当前文件`,recordedChange:`已记录的更改`,recordedNotice:`此补丁记录了一次过去的运行,可能与已注册仓库的当前内容不同。`,diffFailed:`无法加载已记录的更改。`,retry:`重试`,patchIncomplete:`已保存的补丁不完整。无法根据此记录重建缺失的内容。`,displayLimited:`预览限于 {{count}} 行或 {{chars}} 个字符。补丁的其余部分未显示。`,patch:`已记录的补丁`,find:`在文件中查找`,wrap:`自动换行`,line:`行号`,go:`跳转`,loading:`正在加载代码查看器…`,sourceUnavailable:`代码不可用`,refresh:`刷新代码`,sourceFailed:`无法刷新当前文件。显示的代码来自上次成功读取的内容。`,summaryPartial:`根据部分代码快照生成。此摘要可能未涵盖整个文件。`,regenerateExplanation:`更新解释`,noEvidence:`未保存此更改的补丁证据。`,excerptEvidence:`此解释依据的是不完整的补丁证据。`,viewPatch:`查看已记录的更改`},_={page:e,resizer:t,toolbar:n,provenancePanel:r,kind:i,action:a,viewer:o,summary:s,story:c,history:l,tree:u,monaco:d,ticketFiles:f,explore:p,search:m,activity:h,reader:g};export{a as action,h as activity,_ as default,p as explore,l as history,i as kind,d as monaco,e as page,r as provenancePanel,g as reader,t as resizer,m as search,c as story,s as summary,f as ticketFiles,n as toolbar,u as tree,o as viewer};
@@ -0,0 +1 @@
1
+ var e=JSON.parse(`{"label":"Palette comandi","searchPlaceholder":"Cerca, oppure digita # @ / ? per restringere…","searchPlaceholderAgent":"Cerca, oppure digita # @ / ? per restringere…","noResults":"Nessun risultato trovato.","activeBadge":"attivo","groups":{"projects":"Progetti","missions":"Missioni","spec":"Spec","jobs":"Job","navigation":"Navigazione","actions":"Azioni","recentActions":"Azioni recenti","recentPlaces":"Luoghi recenti","settings":"Impostazioni","specs":"Specs","files":"File","logs":"Log dei job","docs":"Guida"},"nav":{"dashboard":"Dashboard","desktopAnalytics":"Analytics di Desktop","projectAnalytics":"Analytics del progetto","activityFeed":"Feed attività","desktopSettings":"Impostazioni Desktop","docs":"Docs","replayTour":"Rivedi il tour"},"sidebar":{"collapseLeftKeepPinned":"Comprimi barra laterale sinistra (mantieni fissata)","unpinLeft":"Sblocca barra laterale sinistra","pinLeftOpen":"Fissa aperta la barra laterale sinistra","collapseRightKeepPinned":"Comprimi barra laterale destra (mantieni fissata)","unpinRight":"Sblocca barra laterale destra","pinRightOpen":"Fissa aperta la barra laterale destra"},"footer":{"navigate":"naviga","select":"seleziona","close":"chiudi","actions":"azioni","back":"indietro","removeScope":"rimuovi ambito"},"missions":{"home":"Home"},"dialogTitle":"Cerca ed esegui azioni","dialogDescription":"Digita per filtrare, poi premi Invio per aprire il risultato evidenziato.","actions":{"verbs":"nuovo,nuova,crea,aggiungi,avvia,esegui,sposta,apri,cambia,attiva,vai,consegna,pausa,riprendi,annulla,mostra,inizia,ripristina,new,launch,move,open,switch,run,toggle,go,undo,seleziona,salva,deseleziona,elimina,select,save,clear,delete","back":"Indietro","newSpec":"Nuova spec","newSpecExplore":"Nuova spec (Esplora)","launchSpec":"Avvia la spec su un rail","launchSpecN":"Avvia #{{id}} su un rail","moveSpec":"Sposta la spec in","moveSpecN":"Sposta #{{id}} in","openReview":"Apri la revisione","openReviewN":"Apri la revisione di #{{id}}","handOffFlow":"Consegna il Flow","pauseFlow":"Metti in pausa il Flow","resumeFlow":"Riprendi il Flow","newMission":"Nuova missione","switchTheme":"Cambia tema","switchToMission":"Passa alla modalità Missione","switchToBoard":"Passa alla modalità Board","openAppSettings":"Apri le impostazioni dell'app","openProjectSettings":"Apri le impostazioni del progetto","switchProject":"Cambia progetto","runLoop":"Esegui un loop","toggleLeftSidebar":"Mostra/nascondi barra laterale sinistra","toggleRightSidebar":"Mostra/nascondi barra laterale destra","goBack":"Torna indietro","goForward":"Vai avanti","undoLast":"Annulla: {{label}}","recentlyDeleted":"Eliminati di recente","pages":{"railTitle":"Rail per #{{id}}","railPlaceholder":"Scegli un rail...","railRunning":"in esecuzione","railHasSpec":"già presente","noRails":"Nessun rail disponibile.","statusTitle":"Sposta #{{id}} in","statusPlaceholder":"Scegli uno stato...","noStatuses":"Nessuno stato disponibile.","current":"attuale","specTitle":"Scegli una spec","specPlaceholder":"Cerca spec...","noSpecs":"Nessuna spec corrispondente.","themeTitle":"Tema","themePlaceholder":"Scegli un tema...","noThemes":"Nessun tema disponibile.","appSettingsTitle":"Impostazioni dell'app","projectSettingsTitle":"Impostazioni del progetto","sectionPlaceholder":"Scegli una sezione...","noSections":"Nessuna sezione.","projectTitle":"Progetti","projectPlaceholder":"Scegli un progetto...","noProjects":"Nessun altro progetto.","loopTitle":"Loop eseguibili ora","loopPlaceholder":"Scegli un loop...","noLoops":"Nessun loop può essere eseguito senza una spec.","loading":"Caricamento...","loadFailed":"Impossibile caricare le opzioni.","statusSelectedTitle":"Sposta la selezione in","labelSelectedTitle":"Aggiungi un’etichetta alla selezione","labelPlaceholder":"Scegli un’etichetta...","noLabels":"Nessuna etichetta da aggiungere.","prioritySelectedTitle":"Priorità della selezione","priorityPlaceholder":"Scegli una priorità...","noPriorities":"Nessuna priorità disponibile.","railSelectedTitle":"Rail per la selezione","viewTitle":"Viste salvate","viewPlaceholder":"Scegli una vista...","noViews":"Nessuna vista salvata."},"openInbox":"Apri Da gestire","openInboxCount":"Apri Da gestire ({{count}})","opensOptions":"apre le opzioni","selectAll":"Seleziona tutto nella colonna","clearSelection":"Deseleziona tutto","moveSelected":"Sposta le spec selezionate in","moveSelectedN_one":"Sposta {{count}} spec selezionata in","moveSelectedN_other":"Sposta {{count}} spec selezionate in","labelSelected":"Aggiungi etichetta alle spec selezionate","labelSelectedN_one":"Aggiungi etichetta a {{count}} spec selezionata","labelSelectedN_other":"Aggiungi etichetta a {{count}} spec selezionate","prioritySelected":"Imposta la priorità delle spec selezionate","prioritySelectedN_one":"Imposta la priorità di {{count}} spec selezionata","prioritySelectedN_other":"Imposta la priorità di {{count}} spec selezionate","railSelected":"Aggiungi le spec selezionate a un rail","railSelectedN_one":"Aggiungi {{count}} spec selezionata a un rail","railSelectedN_other":"Aggiungi {{count}} spec selezionate a un rail","launchSelected":"Avvia le spec selezionate","launchSelectedN_one":"Avvia {{count}} spec selezionata","launchSelectedN_other":"Avvia {{count}} spec selezionate","deleteSelected":"Elimina le spec selezionate","deleteSelectedN_one":"Elimina {{count}} spec selezionata","deleteSelectedN_other":"Elimina {{count}} spec selezionate","saveView":"Salva la vista attuale","switchView":"Cambia vista","openBudget":"Apri Budget (limiti, proiezione, e se…)","openBudgetKeywords":"budget, limite, settimanale, mensile, spesa, costo","exportHandoffN":"Esporta passaggio di #{{id}}","copyPrDescriptionN":"Copia descrizione PR di #{{id}}","exportHandoff":"Esporta passaggio di consegne","copyPrDescription":"Copia descrizione PR","moveFocusedSpec":"Sposta la spec a fuoco…"},"scopes":{"remove":"Rimuovi ambito","needsProject":"Apri un progetto per cercare qui.","searching":"Ricerca in corso…","failed":"La ricerca non è disponibile al momento.","empty":"Nessun risultato per «{{query}}».","specs":{"label":"Specs","placeholder":"Cerca specs per titolo, descrizione, etichette o note…","prompt":"Digita per cercare specs."},"missions":{"label":"Missioni","placeholder":"Cerca missioni per titolo o contenuto…","prompt":"Digita per cercare missioni."},"settings":{"label":"Impostazioni","placeholder":"Cerca impostazioni…","prompt":"Digita per cercare impostazioni.","commandsFallback":"Comandi corrispondenti a “/{{query}}”"},"files":{"label":"File","placeholder":"Trova un file per nome o percorso…","prompt":"Digita un nome o un percorso di file."},"logs":{"label":"Log dei job","placeholder":"Cerca comandi, fasi ed errori dei job…","prompt":"Digita per cercare cosa hanno fatto le tue esecuzioni e perché sono fallite."},"docs":{"label":"Guida","placeholder":"Cerca nella guida…","prompt":"Digita per cercare nella guida."}},"specs":{"fields":{"id":"Numero della spec","title":"Titolo","summary":"Riepilogo","description":"Descrizione","label":"Etichetta","nonGoal":"Fuori ambito","addendum":"Addendum","comment":"Commento"}},"logs":{"fields":{"command":"Comando","loop":"Loop","phase":"Fase","failure":"Errore","detail":"Dettaglio"}},"settings":{"appScope":"Impostazioni di Desktop","projectScope":"Impostazioni del progetto","entries":{"theme":{"label":"Aspetto e tema","keywords":"tema, scuro, chiaro, colori, aspetto, theme"},"language":{"label":"Lingua","keywords":"lingua, locale, traduzione, language"},"effects":{"label":"Effetti visivi","keywords":"effetti, animazione, movimento, stelle, sfondo, effects"},"editor":{"label":"Editor","keywords":"editor, vscode, apri nell’editor, ide, cursor"},"codeSection":{"label":"Esplora codice","keywords":"codice, esplora, file, sintassi, evidenziazione, code"},"terminalApp":{"label":"Pannello terminale (Desktop)","keywords":"terminale, console, shell, font, copia alla selezione"},"providers":{"label":"Provider IA e connessioni","keywords":"provider, fornitore, claude, codex, gemini, chiave api, accesso, motore, locale"},"subagentsApp":{"label":"Sub-agenti (Desktop)","keywords":"subagenti, sub-agenti, nativi, delegati, parallelo, subagents"},"mobileCompanion":{"label":"App mobile companion","keywords":"mobile, companion, telefono, associa, qr, ipad, remoto"},"registeredProjects":{"label":"Progetti registrati","keywords":"progetti, rimuovi progetto, repository, registrati, projects"},"budgetAlerts":{"label":"Budget giornaliero e avvisi di costo","keywords":"budget, giornaliero, costo, spesa, limite, avviso, denaro"},"notifications":{"label":"Notifiche di sistema","keywords":"notifiche, avvisi, suono, notifications"},"webhooks":{"label":"Webhook in uscita","keywords":"webhook, http, slack, discord, eventi, notifica"},"updateChannel":{"label":"Canale degli aggiornamenti","keywords":"canale, aggiornamenti, beta, stabile, versione, update channel"},"appUpdate":{"label":"Aggiornamenti di Specrails Desktop","keywords":"aggiornare, aggiornamento, versione, update, upgrade"},"coreUpdate":{"label":"Aggiornamenti di Specrails Core","keywords":"core, aggiornare, versione, framework, specrails-core"},"about":{"label":"Informazioni su Desktop","keywords":"informazioni, info, porta, database, versione, about"},"repositories":{"label":"Repository","keywords":"repository, repo, area di lavoro, cartella, git, multi-repo, principale"},"prePrompt":{"label":"Pre-prompt del rail","keywords":"pre-prompt, preprompt, istruzioni, prompt, rail, freestyle"},"verificationCommands":{"label":"Comandi di verifica","keywords":"verifica, comando di test, lint, typecheck, build, setup, comandi"},"subagentsProject":{"label":"Sub-agenti (progetto)","keywords":"subagenti, sub-agenti, nativi, delegati, parallelo, progetto"},"integrationBranch":{"label":"Branch di integrazione","keywords":"branch, integrazione, main, branch base, git, destinazione del merge"},"worktreeEnv":{"label":"Ambiente del worktree","keywords":"worktree, ambiente, env, variabili, .env, dipendenze, installa"},"agentEnv":{"label":"Ambiente dell’agente","keywords":"ambiente dell’agente, modalità env, variabili, segreti, isolato"},"projectBudget":{"label":"Budget giornaliero del progetto","keywords":"budget, giornaliero, costo, spesa, limite, pausa"},"reviewLimit":{"label":"Limite di revisione","keywords":"limite di revisione, wip, in revisione, pull request, coda"},"telemetry":{"label":"Telemetria della pipeline","keywords":"telemetria, tracciamento, log, diagnostica, metriche, telemetry"},"agentAudit":{"label":"Audit delle azioni degli agenti","keywords":"audit, azioni degli agenti, registro, chiamate agli strumenti, cronologia"},"anchoring":{"label":"Ancoraggio del progetto esistente","keywords":"ancoraggio, progetto esistente, convenzioni, baseline, scansione, anchoring"},"projectRules":{"label":"Regole del progetto","keywords":"regole, convenzioni, gate, controlli, agents.md, rules"},"terminalProject":{"label":"Pannello terminale (progetto)","keywords":"terminale, console, shell, terminale del progetto, font"},"recentlyDeleted":{"label":"Eliminati di recente","keywords":"eliminati, cestino, ripristina, recupera, deleted, trash"},"density":{"label":"Densità","keywords":"densità, compatta, comoda, spaziatura, righe, schede, accessibilità, density"},"reduceMotion":{"label":"Riduci movimento","keywords":"riduci movimento, animazione, accessibilità, vestibolare, calma, transizioni, motion"}}}}`),t={queued:`{{name}} in coda`,queuing:`Accodamento di {{name}}...`},n={spawnFailed:`Impossibile avviare il comando`},r={sections:{discovery:`Discovery`,discoverySubtitle:`Esplora e definisci il tuo prodotto`,delivery:`Delivery`,deliverySubtitle:`Costruisci e rilascia funzionalità`,others:`Altri`},displayNames:{proposeSpec:`Proposta personalizzata`,updateBacklog:`Auto-proposta`,productBacklog:`Auto-selezione spec`},emptyState:{title:`Nessun comando installato`,hint:`Esegui <1>/setup</1> in Claude Code per installare i comandi specrails`},runs_one:`{{count}} esecuzione`,runs_other:`{{count}} esecuzioni`,tooltip:{opensWizard:`Apre la procedura guidata`}},i={title:`Scorciatoie da tastiera`,subtitle:`Premi <1>?</1> ovunque per mostrare o nascondere questo pannello`,categories:{general:`Generale`,navigation:`Navigazione`,actions:`Azioni`,missions:`Missioni`},items:{showCheatsheet:`Mostra scorciatoie da tastiera`,closeModal:`Chiudi modale / barra laterale`,toggleRightSidebar:`Mostra/nascondi barra laterale destra`,toggleLeftSidebar:`Mostra/nascondi barra laterale sinistra`,toggleTerminal:`Mostra/nascondi pannello terminale`,toggleAgent:`Mostra/nascondi chat dell'agente`,navigateProjectPageWithAgents:`Vai alla pagina del progetto (Dashboard/Job/Analytics/Agenti/Impostazioni)`,navigateProjectPage:`Vai alla pagina del progetto (Dashboard/Job/Analytics/Impostazioni)`,switchProject:`Passa al progetto per posizione`,goDashboard:`Vai alla Dashboard`,goActivity:`Vai ad Attività / Job`,goAnalytics:`Vai ad Analytics`,goSettings:`Vai alle Impostazioni`,nextItem:`Elemento successivo nell'elenco`,prevItem:`Elemento precedente nell'elenco`,runStripFocus:`Vai alla striscia delle esecuzioni della missione (premi di nuovo per mostrare o nascondere i dettagli)`,runStripCycle:`Esecuzione precedente / successiva nella striscia (fuori dai campi di testo)`,runStripBack:`Esci dalla striscia delle esecuzioni e torna dov'eri`,flowPause:`Sospendi o riprendi il Flow (striscia delle esecuzioni attiva)`,flowHandOff:`Affida il Flow (striscia delle esecuzioni attiva)`,historyBackForward:`Torna indietro / vai avanti al luogo precedente o successivo`,undoLast:`Annulla l'ultima modifica`,openInbox:`Apri Da gestire`,reviewFiles:`Revisione: file modificato successivo / precedente`,reviewAnnotations:`Revisione: annotazione successiva / precedente`,reviewViewed:`Revisione: segna il file come visto`,boardSelect:`Bacheca: seleziona / deseleziona la spec a fuoco`,boardSelectClick:`Bacheca: il clic alterna una spec, Maiusc+clic seleziona un intervallo`,boardSelectColumn:`Bacheca: seleziona tutte le spec della colonna`,boardClearSelection:`Bacheca: deseleziona tutto`,boardMove:`Bacheca: sposta la spec a fuoco (stato o rail)`},searchLabel:`Cerca scorciatoie e guide`,searchPlaceholder:`Cerca scorciatoie e guide…`,noShortcuts:`Nessuna scorciatoia corrisponde a “{{query}}”.`,guidesHeading:`Dalla guida`,openGuide:`Apri la guida: {{title}}`,noGuides:`Nessuna guida corrisponde a “{{query}}”.`,searching:`Ricerca nella guida…`},a={title:{available:`Aggiornamento disponibile`,downloading:`Download dell'aggiornamento`,installing:`Installazione dell'aggiornamento`,ready:`Aggiornamento pronto`,error:`Aggiornamento non riuscito`},desc:{available:`Una nuova versione di Specrails è pronta per l'installazione.`,fetching:`Recupero di {{size}}…`,progress:`{{percent}}% · {{downloaded}} di {{total}}`,installing:`Verifica della firma e completamento…`,ready:`Riavvia per avviare la versione {{version}}.`,errorFallback:`Impossibile completare l'aggiornamento. Riprova.`},pill:{downloading:`Download`,installing:`Installazione`,ready:`Pronto`},actions:{restart:`Riavvia`,later:`Più tardi`,update:`Aggiorna`,installing:`Installazione…`,tryAgain:`Riprova`,dismiss:`Ignora`},mockReady:`Aggiornamento mock pronto — riavvio saltato`,errors:{installFailed:`Impossibile installare l'aggiornamento`},units:{kb:`{{value}} KB`,mb:`{{value}} MB`}},o={jobCompleted:`Job completato`,jobFailed:`Job non riuscito`,jobStuck:`L'esecuzione sembra bloccata`,jobStuckBody_one:`Nessuna attività da {{count}} minuto — aprila per controllare`,jobStuckBody_other:`Nessuna attività da {{count}} minuti — aprila per controllare`,unknownCommand:`Comando sconosciuto`,jobStuckStop:`Ferma esecuzione`,jobStuckStopped:`Esecuzione fermata`,jobStuckStopFailed:`Impossibile fermare l'esecuzione`,providerLimit:`Limite d'uso del provider raggiunto`,providerLimitBody:`{{provider}} ha rifiutato la richiesta: limite d'uso raggiunto — si azzera {{resetsAt}}. La run si è fermata; rilanciala o usa Recupera e riprova dopo l'azzeramento.`,providerLimitBodyNoReset:`{{provider}} ha rifiutato la richiesta: limite d'uso raggiunto. La run si è fermata; rilanciala dopo l'azzeramento.`},s={emptyState:{title:`Ancora nessun template.`,hint:`Salva sequenze di comandi per eseguirle con un clic.`},createButton:`Crea template`,newButton:`Nuovo template`,steps_one:`{{count}} passaggio`,steps_other:`{{count}} passaggi`,moreCommands_one:`+{{count}} altro`,moreCommands_other:`+{{count}} altri`,run:`Esegui`,queuing:`Accodamento…`,aria:{edit:`Modifica template`,delete:`Elimina template`},confirmDelete:`Eliminare il template "{{name}}"?`,toasts:{queuedJobs_one:`{{count}} job accodato da "{{name}}"`,queuedJobs_other:`{{count}} job accodati da "{{name}}"`,deleted:`Template "{{name}}" eliminato`},errors:{runFailed:`Impossibile eseguire il template`,deleteFailed:`Impossibile eliminare il template`}},c={editTitle:`Modifica template`,newTitle:`Nuovo template`,nameLabel:`Nome`,namePlaceholder:`es. Pipeline completa`,descriptionLabel:`Descrizione (facoltativa)`,descriptionPlaceholder:`Cosa fa questo rail?`,stepsLabel:`Passaggi (comandi o prompt liberi)`,stepPlaceholder:`Seleziona un comando o scrivi un prompt libero...`,aria:{moveUp:`Sposta su`,removeStep:`Rimuovi passaggio`},update:`Aggiorna`,create:`Crea`,errors:{nameRequired:`Il nome è obbligatorio`,stepRequired:`Serve almeno un passaggio`,saveFailed:`Impossibile salvare il template`},toasts:{updated:`Template aggiornato`,created:`Template creato`}},l={palette:e,toasts:t,errors:n,grid:r,shortcuts:i,update:a,notifications:o,templates:s,templateDialog:c};export{l as default,n as errors,r as grid,o as notifications,e as palette,i as shortcuts,c as templateDialog,s as templates,t as toasts,a as update};