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=`Controllo missioni`,t=`Gestisci Specrails chattando`,n=`Controllo missioni`,r=`Qual è la missione?`,i=`Invia`,a=`Ferma`,o=`Copia`,s={openPreview:`Anteprima di {{name}}`,openDownload:`Scarica {{name}}`,previewTitle:`Anteprima di {{name}}`,downloadTitle:`Scaricare il file?`,downloadPrompt:`Questo file non può essere visualizzato qui. Vuoi scaricarlo?`,download:`Scarica`,cancelDownload:`Non ora`,loading:`Preparazione del file…`,loadFailed:`Impossibile caricare l'allegato`,loadError:`Impossibile caricare l'allegato: {{error}}`,remove:`Rimuovi {{name}}`},c=`Massimizza`,l=`Ripristina`,u=`Riduci a icona`,d=`Chiudi`,f=`Nuova missione`,p=`Qual è la missione?`,m=`Chiedi qualsiasi cosa su questo progetto: l’agente può leggere, pianificare spec e avviare rail.`,h=`Sto pensando…`,g=`Connessione…`,_=`Consulto l'app…`,v={compact:`Compatto`,comfortable:`Comodo`,max:`Ingrandisci`},y={label:`Modello`,loading:`Caricamento modelli…`,unavailable:`Modelli non disponibili`},b={hint:`Cronologia prompt — scrivi per modificare, ↑↓ per navigare`},x={queued:`In coda`,send:`Metti il messaggio in coda`,sendHint:`In coda per il prossimo turno. Seleziona «Indirizza» su un messaggio in coda per inviarlo senza interrompere il modello.`,placeholder:`Aggiungi un messaggio alla coda…`,delivered:`Consegnato all’agente`,interrupted:`Consegna non confermata`,cancelled:`Annullato prima della consegna`,steer:`Indirizza`,steerHint:`Invia senza interrompere il modello`,steering:`Invio all’agente…`,remove:`Elimina messaggio dalla coda`,more:`Opzioni del messaggio`,edit:`Modifica`,actionConflict:`Il messaggio è già in fase di consegna o non è più in coda.`,actionFailed:`Impossibile aggiornare il messaggio in coda. Riprova.`,removed:`Messaggio in coda eliminato`},S={sent:`Inviato all’agente`,received:`Consegnato all’agente`,read:`Letto dall’agente`,interrupted:`Consegna non confermata`,cancelled:`Annullato prima della consegna`},C={editing:`Modifica del messaggio in attesa {{n}} di {{m}}`,hint:`↑↓ per navigare · Invio salva · Esc annulla`,save:`Salva messaggio in attesa`,cancel:`Annulla modifica`,dispatched:`Il messaggio è già stato consegnato; il testo rimane come bozza`,saveFailed:`Impossibile salvare il messaggio in attesa`},w={branch:`Branch`,detached:`(scollegato)`,dirty:`Modifiche non committate`,switched:`Passato a {{branch}}`,switchFailed:`Impossibile cambiare branch`,lockedWhileWorking:`Branch bloccato mentre l'agente lavora`,searchPlaceholder:`Cerca branch…`,noMatches:`Nessun branch corrisponde`,worktrees:`Worktree`,worktreePathCopied:`Percorso del worktree copiato`,copyWorktreePath:`Copia percorso del worktree`,repository:`Repository`,repositoryUnavailable:`Repository non disponibile`,loadFailed:`Stato Git non disponibile`,notGit:`Cartella di contesto · senza Git`,retry:`Riprova`,copyBranch:`Copia il nome del branch`,branchCopied:`Nome del branch copiato`},T={label:`Provider`,claude:`Claude`,codex:`Codex`,gemini:`Gemini`,kimi:`Kimi`},E={cycleHint:`⇧⇥ per cambiare`,observe:{name:`Osserva`,desc:`Solo lettura — niente cambia`},edit:{name:`Modifica`,desc:`Crea e modifica (reversibile)`},operate:{name:`Opera`,desc:`Avvia l'IA — ha un costo`},autonomous:{name:`Autonomo`,desc:`Elimina e arresta — irreversibile`},lockedTitle:`Serve un livello superiore`,lockedBody:`Quell'azione richiede il livello «{{level}}». Sei su «{{current}}».`,raiseHint:`⇧⇥ per alzare il livello, o chiedi in un altro modo.`,confirmAutonomous:`Passa ad Autonomo`,autonomousWarning:`La modalità Autonomo può eliminare e terminare processi.`,skipAutonomousHint:`Premi di nuovo ⇧⇥ per tornare a Osserva.`},D={title:`Conferma azione`,costAction:`{{action}} · ~{{cost}} · {{tier}}`,approve:`Approva`,cancel:`Annulla`,dontAskAgain:`Non chiedere più in questa sessione`,approved:`Approvato`,cancelled:`Annullato`},O={home:`Home`,searchPlaceholder:`Parla con Specrails…`,searchProjectsPlaceholder:`Cerca progetti…`,recents:`Recenti`,allProjects:`Tutti i progetti`,searchAll:`Cerca in tutti i progetti`,addProject:`Aggiungi progetto…`,homeHint:`Nessun progetto selezionato — operando su tutti i progetti.`,askCreateOrSearch:`Nessun progetto è selezionato. Vuoi creare un nuovo progetto o cercare in tutti i progetti?`},k={remove:`Rimuovi {{label}}`,addContextAction:`Aggiungi contesto o azione`,filtering:`Filtro "{{query}}"`,keyboard:`↑↓ Invio Esc`,noMatches:`Nessun risultato`,noMatchesFor:`Nessun risultato per "{{query}}"`,mode:{reference:{title:`Riferimento`,hint:`@ progetti, spec, missioni`},trace:{title:`Traccia`,hint:`# job, esecuzioni, ID`},action:{title:`Azione`,hint:`/ comandi per questo contesto`}},plus:{reference:`Riferimento`,referenceHint:`Progetti, spec, missioni`,trace:`Traccia`,traceHint:`Job, esecuzioni, ID`,action:`Azione`,actionHint:`Crea, avvia, ispeziona`,fileAttachment:`File allegato`,fileAttachmentHint:`Aggiungi doc, immagini, log`,browserCapture:`Cattura browser`,browserCaptureHint:`Cattura un'area della pagina per questa missione`},railGroup:`Rail`,railGroupInUse:`Rail in uso`},A={label:`Cambia missione`,untitled:`Nuova missione`,new:`Nuova missione`,searchPlaceholder:`Cerca missioni…`,noMatches:`Nessuna missione corrisponde`,working:`L'agente sta lavorando`,queuedBadge:`{{n}} in coda`,delete:`Elimina missione "{{title}}"`,deleteConfirm:`Eliminare?`,deleteLiveConfirm:`L'agente sta lavorando. Eliminare comunque?`,confirmDelete:`Conferma eliminazione`,cancelDelete:`Mantieni missione`,deleteFailed:`Impossibile eliminare la missione`},j={title:`Nessun provider IA installato`,body:`L’agente ha bisogno di un provider di IA (Claude, Codex, Gemini o un motore locale). Installane o collegane uno, poi riapri l’agente.`,placeholder:`Collega un provider di IA per usare l’agente…`},M={title:`L'MCP di Specrails è spento`,body:`L'agente ha bisogno del server MCP integrato per gestire l'app.`,enable:`Attiva l'MCP di Specrails`,enabling:`Attivazione…`,enabled:`MCP attivato`},N={live:`in diretta`,queued:`in coda`,running:`in corso`,done:`completato`,failed:`fallito`},P={generic:`Qualcosa è andato storto. Riprova.`,busy:`L'agente è occupato. Riprova tra un momento.`},F={kindAgent:`Missione dell'agente`},I=`Nuova missione`,L=`Passa al Controllo missioni`,R=`Passa alla board`,z=`Cerca`,B=`Missioni non assegnate`,V=`Missioni preferite`,H=`Senza titolo`,U={title:`Nel workspace`,terminal:`Terminale`,files:`File`,browser:`Browser`,requiresProject:`Seleziona un progetto per usare questo strumento`,resizeCode:`Ridimensiona pannello codice`,closeFiles:`Chiudi codice`,browserConfirm:`Aggiungi all'agente`,browserSelectStart:`Seleziona per aggiungere alla missione`,browserCaptured:`Cattura aggiunta`,uploadFailed:`Caricamento non riuscito`,requiresConversation:`Avvia una missione per usare questo strumento`,jobs:`Jobs`,closeJobs:`Chiudi jobs`,resizeJobs:`Ridimensiona pannello jobs`,noJobs:`Ancora nessun job — chiedi all'agente di lanciarne uno`,analytics:`Analytics`,closeAnalytics:`Chiudi analytics`,resizeAnalytics:`Ridimensiona pannello analytics`},W=`Allega file`,G=`Elimina «{{title}}»`,K=`Conferma eliminazione di «{{title}}»`,q=`Aggiungi «{{title}}» ai preferiti`,J=`Rimuovi «{{title}}» dai preferiti`,Y=`Eliminare?`,X=`Questo provider non legge ancora le immagini. Allega file di testo`,Z={label:`Sforzo`,minimal:`Minimo`,low:`Basso`,medium:`Medio`,high:`Alto`,xhigh:`Extra alto`,max:`Massimo`,ultra:`Ultra`},Q=JSON.parse(`{"operation":{"inProgress":"Azione in corso…","create-pr":"Creazione PR…","publish":"Pubblicazione…","discard":"Eliminazione…","dismiss":"Chiusura del follow-up…","poll-merge":"Verifica merge…","reopen":"Riapertura…","merge-local":"Integrazione locale…","recover-and-retry":"Creazione del commit e nuovo tentativo di push del risultato preservato…","acknowledge-no-changes":"Contrassegno come completato…"},"markDone":"Segna come completate","refine":"Perfeziona","completedNote":"Confermato. Le spec sono passate a Completate","partialSummary":"{{succeeded}} di {{total}} completate; {{failed}} non riuscite","unit":{"failed":"implementazione non riuscita","blocked":"consegna bloccata","noChanges":"nessuna modifica","succeeded":"pronta"},"rail":"Rail {{index}}","specCount_one":"{{count}} spec","specCount_other":"{{count}} spec","base":"Ramo base","openPr":"Apri PR","existingPr":"PR esistente","title":{"no_changes":"Nessuna modifica necessaria","partial":"Implementazione parziale","delivery_blocked":"Implementazione completata: la consegna richiede attenzione","update_failed":"Implementazione completata: aggiornamento non riuscito","pr_closed":"PR chiusa senza merge","superseded":"Sostituita da un’esecuzione più recente","existing_pr_updated":"PR esistente aggiornata","building":"Implementazione in un worktree isolato…","buildingInPlace":"Implementazione nella cartella del progetto…","buildingExistingPr":"Applicazione delle modifiche su una PR esistente…","paused":"Serve una decisione umana","on_review":"Implementazione pronta per la revisione","pr_draft":"PR in bozza creata","pr_draft_degraded":"Consegna della PR incompleta","pr_ready":"PR pronta per il merge","implementation_failed":"Implementazione non riuscita","pr_failed":"Creazione della PR non riuscita","merged":"Merge della PR effettuato","discarded":"Scartata","review_changes_requested":"Il revisore ha richiesto modifiche","returned_to_flow":"Tornato in Flow","flowSpecChanges":"Non ancora pronto: il revisore ha chiesto modifiche","flowSpecDelivered":"Il tuo Flow ora è una PR revisionata","flowSpecFailed":"L’affidamento si è fermato","flowSpecBuilding":"Il tuo Flow sta diventando una PR revisionata"},"buildingHint":"Al termine ti verrà chiesto se creare la PR.","buildingExistingPrHint":"Specrails sta lavorando sul branch della PR esistente e invierà le modifiche di review a quella stessa PR.","paused":"Implementazione in pausa","pausedForRun":"In pausa su {{ref}}","resume":"Riprendi","stopExecution":"Interrompi esecuzione","stopExecutionSent":"Segnale di stop inviato","stopExecutionFailed":"Impossibile interrompere l’esecuzione","createPr":"Crea PR","publish":"Pubblica","checkout":"Passa al branch","openReview":"Rivedi","openReviewTooltip":"Apri la revisione in linguaggio semplice","checkoutTooltip":"Esegui il checkout di {{branch}} nella cartella principale del progetto","checkoutSuccess":"Checkout eseguito su {{branch}}","checkoutFailed":"Impossibile eseguire il checkout del branch di implementazione","checkoutDirtyTitle":"Checkout bloccato per proteggere le tue modifiche","checkoutDirtyBody":"La cartella principale del progetto contiene modifiche senza commit. Esegui un commit o uno stash, quindi riprova. Non è stato modificato nulla.","checkoutSafetyUnknownTitle":"Checkout in pausa: impossibile verificare la sicurezza","checkoutSafetyUnknownBody":"Specrails non ha potuto leggere lo stato Git della cartella principale del progetto. Nulla è stato rilasciato o modificato. Riprova quando Git sarà disponibile.","checkoutNotDeliverableTitle":"Questo branch non contiene l’implementazione conservata","checkoutNotDeliverableBody":"Il commit esatto della consegna non è ancora stato verificato. Ispeziona o recupera invece il risultato locale.","inspectLocalResult":"Ispeziona il risultato locale","inspectLocalResultTooltip":"Mostra il worktree isolato preservato e copia il suo percorso","localResultPathCopied":"Percorso del risultato locale copiato","localResultPath":"Risultato locale preservato","localResultUnavailableHere":"Su questo computer non è disponibile alcun worktree recuperabile. Consulta il log dell’esecuzione dal computer su cui è stata eseguita.","recoverAndRetry":"Crea commit e riprova il push","recoverAndRetryVerified":"Il commit recuperato {{sha}} è verificato nella PR","recoveryStillBlocked":"Il recupero locale richiede ancora attenzione","recheckRecovery":"Controlla di nuovo","recoveryUnavailable":"Impossibile verificare il recupero su questo computer","recoveryUnavailableBody":"Specrails non ha potuto dimostrare in sicurezza un unico risultato appartenente alla consegna in questo clone. Nulla è stato modificato o rimosso. Controlla i dettagli della fase e i log di esecuzione. Se il run è stato eseguito su un altro computer, apri Specrails lì e controlla di nuovo.","recoveryDetailSummary":"Dettaglio tecnico del recupero","retry":"Riprova","retryPr":"Riprova PR","checkMerge":"Verifica merge","verifyPr":"Verifica PR","discard":"Scarta","confirmDiscard":"Confermare lo scarto?","mergedNote":"Merge effettuato. Le spec sono passate a Completate","discardedNote":"Scartata. Le spec sono tornate nel backlog","implementationFailedNote":"Il run di implementazione non è riuscito prima di produrre qualcosa di consegnabile. Apri il log del run per controllare l'errore, poi scarta questa scheda prima di rilanciare.","dismiss":"Chiudi follow-up","discardLocalResult":"Elimina risultato locale","retryPush":"Riprova push","retryPushVerified":"Push verificato · il commit {{sha}} è nella PR","commitAlreadyVerified":"Il commit {{sha}} è già verificato nella PR","deliveryCommit":"commit {{sha}}","reopen":"Riapri","createPartialPr":"Crea PR con {{count}}","supersededNote":"Un’esecuzione di implementazione più recente ha sostituito questa scheda.","noChangesExisting":"Non erano necessarie nuove modifiche; la PR esistente resta invariata.","noChangesNote":"Non erano necessarie modifiche al codice. Segna le spec come completate oppure riportale nel backlog per perfezionarle.","deliveryNeedsAttention":"Implementazione completa; la consegna richiede attenzione","deliveryBlockedNote":"L’implementazione è riuscita, ma la consegna è bloccata. Controlla il dettaglio della fase e i log prima di eliminare il risultato locale.","partialDeliveryBlockedNote":"Una parte dell’implementazione è riuscita, ma non c’è ancora nulla che possa essere consegnato in sicurezza. Controlla le evidenze per unità e i log prima di scegliere l’azione successiva.","retryPushNote":"L’implementazione è riuscita e le modifiche sono al sicuro in locale. Riprova solo il push.","cleanupIncomplete_one":"Pulizia incompleta ({{count}} avviso)","cleanupIncomplete_other":"Pulizia incompleta ({{count}} avvisi)","safetyArchiveTitle":"Archivio di sicurezza ({{count}})","safetyArchiveHint":"I file temporanei dell’area di lavoro sono stati conservati fuori dalla PR per precauzione. Puoi controllarli o rimuoverli manualmente.","confirm":{"recoverAndRetryTitle":"Creare il commit e inviare il risultato preservato?","recoverAndRetryBody":"Specrails userà esclusivamente il worktree isolato o il branch registrato compatibile con il fast-forward per {{branch}}. Se necessario, creerà un commit con i file consegnabili e invierà quel commit esatto solo se la PR è ancora aperta sui branch di origine e destinazione previsti. La cartella principale del progetto e le sue modifiche senza commit non verranno toccate.","recheckRecoveryTitle":"Controllare di nuovo questo computer?","recheckRecoveryBody":"Verificheremo se è ancora possibile recuperare qualcosa di questa consegna. Non viene eliminato nulla.","noChangesDoneTitle":"Segnare queste spec come completate?","noChangesDoneBody":"L’implementazione ha confermato che non servono modifiche al codice. Le spec passeranno a Completate e il worktree senza modifiche verrà ripulito.","refineTitle":"Perfezionare queste spec?","refineBody":"Il risultato senza modifiche verrà chiuso e le spec torneranno nel backlog per essere perfezionate. I log di esecuzione resteranno disponibili.","mergeLocalTitle":"Integrare localmente?","mergeLocalBody":"I branch consegnati saranno uniti a {{base}} localmente. Le modifiche esistenti vengono preservate; quelle sovrapposte potrebbero richiedere una risoluzione prima dell’integrazione.","freshDiscardTitle":"Eliminare questa consegna?","freshDiscardBody":"La PR verrà chiusa senza eliminare il branch remoto. Verranno rimossi solo i branch locali e i worktree di proprietà di SpecRails che si trovano ancora sul commit registrato; qualsiasi elemento modificato sarà conservato con un avviso. Le spec torneranno nel backlog. Le risorse locali rimosse non possono essere recuperate.","implementationFailedDiscardTitle":"Scartare questa consegna non riuscita?","implementationFailedDiscardBody":"La scheda verrà chiusa e le spec torneranno nel backlog. Il lavoro locale e i branch saranno conservati per l’ispezione. Potranno essere rimosse solo le risorse la cui pulizia è dimostrata sicura.","dismissTitle":"Chiudere questo follow-up?","dismissBody":"Questa scheda di follow-up verrà chiusa. Il relativo worktree verrà rimosso solo se è ancora sicuro farlo; in caso contrario, sarà conservato con un avviso. La PR esistente, il suo branch e lo stato di revisione resteranno invariati.","discardLocalTitle":"Eliminare il risultato locale?","discardLocalBody":"L’iterazione locale recuperabile verrà rimossa solo se è ancora sicuro farlo; se è cambiata, sarà conservata con un avviso. Qualsiasi PR esistente e il suo branch resteranno invariati. Un risultato rimosso non può essere recuperato.","recheckRecoveryTechnical":"Specrails riesaminerà in questo clone il worktree, il branch, i ref, i reflog e gli oggetti Git orfani appartenenti alla consegna di {{branch}}. Se dimostra un unico risultato, potrà eseguire il commit delle modifiche isolate e ritentare il push esatto. La cartella principale del progetto non verrà toccata."},"degraded":{"pushed":"Il branch è stato inviato ma non è stato possibile creare la PR. Riprova per completare.","localOnly":"Le modifiche sono state assemblate in locale ma non inviate. Riprova per pubblicare la PR."},"alreadyResolved":"Già risolta altrove","actionFailed":"Azione non riuscita","notMergedYet":"Ancora nessun merge","commitMissingRetry":"Il commit di consegna non è più presente nella PR. Puoi riprovare il push.","prVerifiedWaiting":"Commit {{sha}} verificato · in attesa del merge","viewLog":"Vedi il log di esecuzione di {{ref}}","runElapsedAria":"{{elapsed}} trascorsi","runCostAria":"{{cost}} spesi","focusRegion":"Scheda di implementazione · {{rail}} {{tickets}}","pinned":{"state":{"completed":"Completata","no_changes":"Nessuna modifica","pr_closed":"Chiusa","superseded":"Sostituita","building":"In corso","on_review":"Revisione","pr_draft":"PR bozza","pr_ready":"Pubblicata","implementation_failed":"Fallita","pr_failed":"Fallita","merged":"Unita","discarded":"Scartata"}},"mergeLocal":"Integra in locale","mergeLocalTooltip":"Unisce i branch consegnati in {{base}} nel tuo checkout locale (senza GitHub)","mergeLocalBlockedDirty":"Impossibile integrare: le modifiche locali su {{base}} si sovrappongono alla consegna. Esegui il commit o lo stash di queste modifiche e riprova.","mergeLocalBlockedBranch":"Impossibile integrare: il tuo checkout è su {{current}}, non su {{base}}. Passa a {{base}} e riprova.","mergedLocally":"Integrato in {{base}} in locale","discardStackedNote":"I rail successivi di questa milestone sono stati costruiti su questa consegna. Scartarla mette in pausa la catena della milestone; i rail successivi conservano il loro lavoro.","resumeFromStep":"Riprendi da {{step}}","resumeFromStepHint":"Il passaggio {{step}} interrotto riparte dall'inizio; il lavoro già su disco viene conservato.","retryDelivery":"Riprova la consegna","retryDeliveryHint":"Ripete solo l’ultimo passo (commit, push e PR) sul branch di questa esecuzione. Nessun lavoro dell’IA viene rifatto.","retryDeliverySent":"Nuovo tentativo di consegna…","retryDeliveryFailed":"Impossibile riprovare la consegna","mergedLocallyRestored":"Ho salvato le tue modifiche locali, integrato {{tickets}} e le ho ripristinate.","mergedLocallyStashConflict":"{{tickets}} integrato. Le tue modifiche locali sono al sicuro in uno stash; Specrails le sta ripristinando su un branch separato.","mergedLocallyStashKept":"{{tickets}} integrato. Le tue modifiche locali sono al sicuro in uno stash; ripristinale quando vuoi.","localStash":{"title":"Le tue modifiche locali sono salvate in uno stash","conflictBody":"Riapplicarle sul risultato integrato ha generato conflitti, quindi {{branch}} è rimasto esattamente come integrato. Ripristinale per riprovare su un branch separato.","savedBody":"Non sono ancora state ripristinate. Ripristinale mentre {{branch}} è in checkout.","files":"File in conflitto","restore":"Ripristina le mie modifiche","restoring":"Ripristino…","copy":"Copia nome dello stash","copied":"Nome dello stash copiato","restoredToast":"Le tue modifiche locali sono di nuovo su {{branch}}.","stillConflicting":"Le tue modifiche locali sono ancora in conflitto con {{branch}}; restano al sicuro nello stash.","released":"Quello stash non esiste più, quindi non c'è nulla da ripristinare.","blockedBranch":"Passa prima a {{base}} (sei su {{current}}), poi ripristina.","blockedDirty":"Alcuni di quei file sono cambiati di nuovo da quando sono stati salvati. Fai commit o sposta quelle modifiche, poi ripristina.","failed":"Impossibile ripristinare le tue modifiche locali","restoringBody":"Riapplicarle sul risultato integrato ha generato conflitti, quindi {{branch}} è rimasto esattamente come integrato. Specrails le sta ripristinando su {{restoreBranch}} in un worktree separato e lì risolve i conflitti.","readyBodyClean":"Le tue modifiche sono ripristinate e committate su {{restoreBranch}}; lì si sono applicate senza conflitti. Controllale, poi riportale su {{branch}}.","readyBodyResolved":"Le tue modifiche sono ripristinate e committate su {{restoreBranch}}, con i conflitti risolti automaticamente. Controllale, poi riportale su {{branch}}.","failedBody":"Specrails non è riuscito a completare il ripristino su {{restoreBranch}}. Sono ancora al sicuro nello stash; scarta quel branch o ripristinale di nuovo.","restoredFiles":"Ripristinato su {{restoreBranch}}","binary":"binario","managedNote":"I file generati gestiti da Specrails hanno mantenuto la versione integrata: {{files}}","bringBack":"Riportale su {{branch}}","bringingBack":"Riporto in corso…","discardBranch":"Scarta il branch ripristinato","discarding":"Eliminazione…","broughtBackToast":"Le tue modifiche locali sono di nuovo su {{branch}}.","discardedToast":"Branch ripristinato scartato. Le tue modifiche sono ancora al sicuro nello stash.","blockedBringBack":"Impossibile riportare le modifiche su {{branch}} in sicurezza.","notReady":"Il branch ripristinato non è ancora pronto."},"failed":{"createPr":"Impossibile creare la PR","mergeLocal":"Impossibile integrare in locale","discard":"Impossibile scartare il risultato","publish":"Impossibile pubblicare la PR","generic":"La consegna si è interrotta. Vedi i dettagli tecnici."},"moreActions":"Altre azioni"}`),$={heading:`Bozza della spec`,drafting:`Aggiornamento della bozza…`,acceptanceCriteria:`Criteri di accettazione`,untitled:`Spec senza titolo`,expand:`Mostra descrizione completa`,collapse:`Comprimi descrizione`},ee={heading:`Inquadramento`,framing:`Inquadramento della richiesta…`,restated:`Ciò che ho capito`,alternative:`Potrebbe anche significare`,pick:`Rispondi con questo`,touches:`Toccherebbe`,discriminator:`Quale delle due?`,assumptions:`Ciò che sto assumendo`,unknowns:`Ancora aperto`},te={openTicket:`Apri la spec #{{id}}`,openPullRequest:`Apri PR #{{id}}`,openJob:`Apri il job {{id}}`,openLoop:`Apri loop {{id}}`,ticketNotFound:`Spec #{{id}} non trovata. Potrebbe essere stata eliminata`,pullRequestUrlMissing:`La PR #{{id}} è stata citata senza URL`,pullRequestNotFound:`La PR #{{id}} non è stata trovata in questo progetto`,jobNotFound:`Job non trovato. Potrebbe essere stato eliminato`,loopNotFound:`Loop non trovato. Potrebbe essere stato eliminato`,lookupFailed:`Impossibile verificare il riferimento. Riprova`},ne={untitled:`Missione senza titolo`,menu:`Menu della missione`,rename:`Rinomina`,renamePlaceholder:`Nome della missione`,renameHint:`Doppio clic per rinominare`,renameFailed:`Impossibile rinominare`,addFavorite:`Aggiungi ai preferiti`,removeFavorite:`Rimuovi dai preferiti`,copyName:`Copia nome missione`,copyId:`Copia ID missione`,copyProject:`Copia nome progetto`,copyProjectPath:`Copia percorso progetto`,copyFailed:`Impossibile copiare`,copyTranscript:`Copia trascrizione`,copyTranscriptSuccess:`Trascrizione copiata`,copyTranscriptFailed:`Impossibile copiare la trascrizione`,exportTranscript:`Esporta trascrizione (.txt)`,exportTranscriptSuccess:`Esportazione della trascrizione avviata`,exportTranscriptFailed:`Impossibile esportare la trascrizione`,delete:`Elimina missione`,deleteConfirm:`Eliminare questa missione? Non è reversibile.`,deleteFailed:`Impossibile eliminare la missione`},re=`Cosa costruiamo adesso?`,ie={title:`Log di esecuzione`,live:`In diretta`,empty:`Nessuna attività degli strumenti in questo turno.`,output:`Output`,error:`Errore`,copyAll:`Copia log completo`,copyEntry:`Copia voce`,copySuccess:`Log copiato negli appunti`,copyFailed:`Impossibile copiare il log`,openLog:`Vedi log di esecuzione`,close:`Chiudi`,tool:{terminal:`Terminale`,reading:`Lettura`,searching:`Ricerca`,editing:`Modifica`,web:`Web`,agent:`Agente`,agentNamed:`Agente · {{description}}`,mcp:`MCP · {{name}}`,mcpTool:`Strumento MCP`}},ae={open:`Visualizza i log di {{command}}`,logsTitle:`Log del processo`,logsDescription:`Output in diretta e cronologia salvata del processo.`,close:`Chiudi log`,command:`Comando`,directory:`Directory`,exitCode:`Codice di uscita: {{code}}`,signal:`Segnale: {{signal}}`,search:`Cerca nei log…`,source:`Origine dell’output`,allSources:`Tutto l’output`,pause:`Pausa`,resume:`Riprendi`,follow:`Segui`,copy:`Copia i log visibili`,download:`Scarica i log visibili`,stop:`Arresta processo`,stopCommand:`Arresta {{command}}`,stopFailed:`Impossibile arrestare il processo. Riprova.`,truncated:`La finestra dei log è limitata. Output precedente o righe lunghe possono essere omessi. Copia e download includono solo questa vista.`,paused:`Vista in pausa. Il processo continua.`,loadFailed:`Impossibile caricare i log. Il periodo di conservazione potrebbe essere scaduto; l’output già caricato resta visibile.`,retry:`Riprova`,copied:`Log visibili copiati.`,exportFailed:`Impossibile esportare i log. Riprova.`,output:`Output del processo`,loading:`Caricamento dei log…`,noMatches:`Nessun output corrispondente.`,empty:`Nessun output per ora.`,lineCount:`{{count}} di {{total}} righe`,exportHint:`L’esportazione include solo il filtro attuale e l’output conservato.`,status:{starting:`Avvio`,running:`In esecuzione`,stopping:`Arresto in corso`,exited:`Terminato`,killed:`Arrestato`,failed:`Non riuscito`,interrupted:`Disconnesso`},repository:`Repository`,history:{button:`Processi`,title:`Processi della missione`,open:`Visualizza cronologia dei processi`,description:`Consulta i processi attivi e i log salvati delle esecuzioni precedenti.`,search:`Cerca comando o repository…`,refresh:`Aggiorna cronologia`,close:`Chiudi cronologia dei processi`,back:`Torna ai processi`,loading:`Caricamento della cronologia…`,empty:`Non sono ancora stati registrati processi per questa missione.`,noMatches:`Nessun processo corrispondente.`,loadFailed:`Impossibile caricare la cronologia. Le voci già caricate restano disponibili.`,showMore:`Mostra altri`,count:`Processi: {{count}}`},interruptedHint:`Specrails non supervisiona più questo processo. Il suo stato nel sistema operativo è sconosciuto; i log salvati restano disponibili.`,persistenceFailed:`Impossibile salvare la cronologia del processo. L’output disponibile resta visibile.`,appUrls:{title:`Indirizzi dell’app`,local:`Questo computer`,network:`La tua rete`,open:`Apri {{url}} nel browser`,copy:`Copia {{url}}`,localOnly:`Raggiungibile solo da questo computer. Per aprirla dal telefono sulla stessa Wi-Fi, chiedi all’agente di riavviarla esposta sulla rete locale.`}},oe={detach:`Apri in una finestra separata`,attach:`Torna alla finestra principale`,detached:`Questa missione è aperta in un’altra finestra.`,focus:`Mostra la finestra della missione`,loading:`Spostamento della missione…`,failed:`Impossibile spostare la missione. La bozza è stata conservata.`,dismiss:`Chiudi`,wrongMission:`Apri questa missione prima di spostarla.`,finishPending:`Completa l’operazione in corso oppure salva o annulla il messaggio o la cattura prima di spostare la missione.`},se={heading:`Lancio del rail`,rail:`Rail {{index}}`,newRail:`Nuovo rail`,play:`Avvia`,launching:`Avvio in corso…`,dismiss:`Ignora`,playHint:`Modifica ciò che vuoi, poi premi Avvia per lanciare sotto la tua responsabilità.`,pending:`Preparazione di una proposta di lancio…`,unreadable_one:`Impossibile leggere la proposta di lancio dell’agente.`,unreadable_other:`Impossibile leggere {{count}} proposte di lancio.`,effortDefault:`Sforzo predefinito`,profileNone:`Nessun profilo`,status:{proposal:`Proposta`,ready:`Pronto`,blocked:`Richiede attenzione`,loading:`Verifica in corso…`},availability:{free:`libero`,busy:`in esecuzione`,pending_decision:`in attesa di una decisione`,on_review:`in revisione`},fields:{rail:`Rail`,newRailName:`Nome del nuovo rail (facoltativo)`,railName:`Nome del rail`,addSpec:`Aggiungi spec`,removeSpec:`Rimuovi #{{id}}`,loop:`Loop`,engine:`Motore IA`,model:`Modello`,effort:`Sforzo di ragionamento`,profile:`Profilo agenti`,targetPr:`PR di destinazione #`,baseBranch:`Branch di base`},notes:{railMissing:`Il Rail {{index}} non esiste più. Scegli un altro rail o creane uno.`,railBusy:`Il Rail {{index}} è {{state}}, quindi non è possibile avviare lì.`,useFree:`Usa il Rail {{index}}`,specsDropped:`Non più in questo progetto: {{ids}}`,engineStale:`{{engine}} non è rilevato su questa macchina. Verrà usato {{fallback}}.`,modelStale:`{{model}} non è disponibile. Verrà usato {{fallback}}.`},block:{noProject:`Questa missione non è fissata a nessun progetto.`,loadFailed:`Impossibile caricare i rail, le spec o i repository del progetto.`,noSpecs:`Aggiungi almeno una spec per lanciare.`,railLimit:`Tutti i {{max}} rail esistono già e nessuno è libero.`},errors:{tickets_in_flight:`Una di queste spec è già in esecuzione su un altro rail.`,pr_decision_pending:`Questo rail è in attesa di una decisione sulla PR.`,rail_limit_reached:`Il progetto ha già il numero massimo di rail.`,invalid_base_branch:`Quel branch di base non esiste in locale.`,base_branch_requires_isolation:`Un branch di base richiede l’isolamento tramite worktree (un repository git con commit).`,target_pr_requires_pr_mode:`Una PR di destinazione richiede l’isolamento tramite worktree (un repository git con commit).`,invalid_response:`Risposta inattesa dal server.`,scope_save_failed:`Impossibile salvare i repository della spec.`,repository_scope_incomplete:`Manca un repository richiesto dalle spec per l’avvio. Controlla le assegnazioni sopra.`,rail_not_empty:`Quel rail ha già delle spec`,flow_freeze_failed:`Non è stato possibile salvare le modifiche del Flow per l’affidamento`,flow_head_mismatch:`Il Flow è cambiato durante l’affidamento. Riprova`,flow_already_handed_off:`Questo Flow è già stato affidato a un rail`,flow_handoff_not_adopted:`Il rail è partito senza prendere in carico le modifiche del Flow`,illegal_transition:`Nel frattempo il Flow ha cambiato stato`,feature_unavailable:`Flow non è disponibile`,daily_budget_exceeded:`Budget giornaliero raggiunto: non è stato avviato nulla.`,review_wip_limit_reached:`Limite di revisione raggiunto: non è stato avviato nulla.`,repository_has_no_commits:`Questo repository non ha ancora commit. Fai un primo commit perché Specrails possa creare una copia isolata del progetto.`},stub:{launched:`Lanciato → Rail {{rail}}`,dismissed:`Proposta ignorata`,viewRun:`Vedi run`,goToCard:`Vai alla scheda`,goToCardTitle:`Vai alla scheda di implementazione di questo lancio`,viewRunTitle:`Apri il log in tempo reale del run`},followUp:{title:`Risolvere {{count}} commento/i di revisione della PR`,excluded:`Non modificare`,verification:`Verifica`,specUntouched:`La spec e la sua descrizione Jira non vengono modificate: l’ambito viaggia con l’esecuzione.`,source:{pasted:`incollato`,github:`da GitHub`}},addenda:{rides_one:`{{count}} addendum aperto viaggia con questo lancio:`,rides_other:`{{count}} addenda aperti viaggiano con questo lancio:`},repositories:{launch:`Repository per questo avvio`,launchHint:`Include i repository richiesti dalle spec. Puoi aggiungere altri repository del progetto.`,assignments:`Assegnati a ogni spec`,edit:`Modifica`,editSpec:`Modifica i repository di #{{id}}`,spec:`Repository della spec #{{id}}`,saveHint:`Il salvataggio aggiorna le assegnazioni dei repository di questa spec anche per gli avvii futuri.`,save:`Salva repository`,cancel:`Annulla`,finishEditing:`Salva o annulla la modifica dei repository prima di avviare.`,missing:`Mancano repository necessari: {{names}}. Includili sopra o modifica le assegnazioni della spec se i suoi obiettivi sono cambiati.`,unavailable:`I repository selezionati non sono disponibili per l’implementazione: {{names}}. Aggiorna la selezione o le assegnazioni delle spec.`,refresh:`Aggiorna`,retry:`Riprova il caricamento`,checkScope:`Controlla la selezione dei repository prima di avviare.`},triageLabel:`Triage`,handOff:{newRail:`Un nuovo rail`,changeHow:`Cambia impostazioni`}},ce={status:{running:`In esecuzione`,paused:`In pausa`,succeeded:`Completato`,failed:`Fallito`,stalled:`Bloccato`,cancelled:`Annullato`,unknown:`Sconosciuto`,changes_requested:`Modifiche richieste`,returned:`Tornato in Flow`},title:{running:`Implementazione nel checkout del progetto…`,paused:`Richiede una decisione umana`,succeeded:`Implementazione terminata`,failed:`Implementazione fallita`,stalled:`Implementazione bloccata`,cancelled:`Run annullato`,unknown:`Stato del run sconosciuto`,changes_requested:`Il revisore ha richiesto modifiche`,returned:`Tornato in Flow`},noDeliveryNote:`Nessuna fase PR: questo progetto non ha un repository git né commit, quindi il lavoro è stato applicato direttamente nella cartella del progetto.`,noDeliveryHint:`Esecuzione diretta nella cartella del progetto (nessun repository git né commit, quindi non verrà proposta alcuna PR).`,failure:{title:`Perché si è fermato`,step:`passo {{step}}`,unit:`#{{ticket}} · {{code}}`},actions:{resume:`Riprendi`,approve:`Approva`,recover:`Recupera e riprova`,relaunch:`Rilancia`},relaunchSent:`Rail {{index}} rilanciato. Una nuova scheda seguirà il run.`,relaunchFailed:`Impossibile rilanciare il rail`,relaunchBlockedActive:`Il rail ha ancora un run attivo`,review:{title:{review:`Il revisore ha richiesto modifiche`,check:`I controlli falliscono ancora`},score:`punteggio {{score}}`,issues_one:`{{count}} problema`,issues_other:`{{count}} problemi`,showAll:`Mostra tutti ({{count}})`,showLess:`Mostra meno`,omitted_one:`+{{count}} altro nella revisione dell’esecuzione`,omitted_other:`+{{count}} altri nella revisione dell’esecuzione`,failingChecks:`Non superati`,check:`{{command}} · uscita {{code}}`,next:`I giri di correzione automatica non li hanno risolti. Torna in Flow per sistemarli con l’agente, oppure rilancia dallo stesso branch del Flow.`,returned:`Di nuovo in Flow: le tue modifiche sono tornate al loro Flow con la revisione. Continua nella striscia del Flow.`}},le={briefing:{title:`Resoconto automatico dell’errore`}},ue={open:`Vista divisa`,menu:`Azioni della conversazione`,add:`Aggiungi conversazione in vista divisa`,close:`Chiudi vista divisa`,loadFailed:`Impossibile caricare questa conversazione.`,retry:`Riprova`},de={label:`Modello e impegno`,resetEffort:`Ripristina impegno`,back:`Indietro`},fe={0:`Qual è la missione?`,1:`Con quale missione iniziamo?`,2:`Qual è la nostra missione oggi?`,3:`Qual è la prossima missione?`,4:`Cosa vuoi ottenere con questa missione?`,5:`Quale missione avviamo?`,6:`Da dove iniziamo questa missione?`,7:`Qual è l’obiettivo di questa missione?`,8:`Cosa costruiamo in questa missione?`,9:`Cosa miglioriamo con questa missione?`,10:`Quale sfida affrontiamo in questa missione?`,11:`Qual è il primo passo della missione?`,12:`Raccontami la missione che hai in mente…`,13:`Descrivi la tua prossima missione…`,14:`Diamo forma alla tua prossima missione…`,15:`Cosa dovrebbe realizzare questa missione?`,16:`Quale missione vorresti completare?`,17:`Cosa risolviamo in questa missione?`,18:`Cosa renderebbe questa missione un successo?`,19:`Tutto pronto per una nuova missione. Iniziamo?`},pe={title:`Agenti`,working_one:`{{count}} al lavoro`,working_other:`{{count}} al lavoro`,done_one:`{{count}} completato`,done_other:`{{count}} completati`,ended_one:`{{count}} fermato`,ended_other:`{{count}} fermati`,phase:{running:`Al lavoro`,idle:`Completato`,failed:`Fallito`,stopped:`Fermato`,killed:`Terminato`,interrupted:`Interrotto`},reason:{user_stop:`fermato da te`,host_request:`fermato dall'app`,restart:`perso al riavvio`,shutdown:`app chiusa`,host_lost:`host degli agenti perso`,crashed:`processo andato in crash`,stalled:`non risponde più`,limit:`limite raggiunto`,project_removed:`progetto rimosso`,evicted:`liberato per risparmiare risorse`,policy:`i sotto-agenti sono disattivati`},expand:`Mostra attività di {{name}}`,collapse:`Nascondi attività`,elapsedAria:`In corso da {{elapsed}}`,loadingActivity:`Caricamento attività…`,noActivity:`Ancora nessuna attività`,activityFailed:`Impossibile caricare l'attività`,moreActivity:`Carica altro`,tokens:`{{tokens}} token`,toolUses_one:`{{count}} chiamata a strumento`,toolUses_other:`{{count}} chiamate a strumenti`,stop:`Ferma`,stopOne:`Ferma {{name}}`,stopAll:`Ferma tutti gli agenti`,stopFailed:`Impossibile fermare gli agenti`,relaunch:`Rilancia`,relaunchHint:`Scrivi un messaggio che chiede all'agente di rilanciare questo lavoro`,relaunchDraft:`Rilancia l'agente in background per: {{description}}`,continuation:`Proseguito dopo gli agenti in background`,continuationSystem:`Proseguito dopo il lavoro in background`,backgroundTurn:`L'agente sta esaminando i risultati in background…`,deferred:`La modifica alle impostazioni verrà applicata al termine degli agenti in background.`,applyNow:`Ferma gli agenti e applica ora`,policyUnenforceable:`{{provider}} non può disattivare i sotto-agenti. Attiva «Consenti sotto-agenti» nelle impostazioni del progetto o usa un altro provider per questa missione.`,result:`Risultato`,count_one:`{{count}} agente`,count_other:`{{count}} agenti`,finishedIn:`completati in {{elapsed}}`,delegatedHint:`Avviato da Specrails su {{provider}} ({{model}}); il suo costo è conteggiato a parte.`},me={host_degraded:`Le sessioni Core non sono disponibili per questo progetto dopo errori ripetuti, quindi questo turno ha usato il trasporto classico (senza sotto-agenti in background). Riprova dopo aver risolto la causa.`,journal_locked:`Un'altra istanza di Specrails Desktop sta usando le sessioni agente di questo progetto, quindi questo turno ha usato il trasporto classico. Chiudi l'altra istanza e riprova.`,policy:{subagent_blocked:`Il provider ha avviato un sotto-agente anche se i sotto-agenti sono disattivati per questo progetto; è stato fermato.`},retry:`Riprova`,retryFailed:`Ancora non disponibile. Controlla il log dell'app per la causa.`,dismiss:`Ignora`,subagents:{delegation_unsupported:`I sub-agenti {{provider}} richiedono uno Specrails Core più recente, quindi l'agente di questa missione avvia i propri sub-agenti.`,driver_unavailable:`{{provider}} non è disponibile per il runtime delle sessioni, quindi l'agente di questa missione avvia i propri sub-agenti.`}},he=`Preparazione di una scheda…`,ge={placeholder:`Scrivi per interrompere: l’agente cambia rotta subito`,send:`Interrompi e invia`,sendHint:`Ferma il passo in corso e dà subito il tuo messaggio all’agente`},_e=JSON.parse(`{"missing":{"sessions":"Le sessioni agente di Core sono disattivate o non disponibili","flowSessions":"Il tuo Specrails Core non può ancora interrompere un agente in esecuzione","deriveChange":"Il tuo Specrails Core non può ancora derivare una spec dal codice"},"errors":{"generic":"Flow non è riuscito a completare l’azione. Riprova.","network":"Impossibile raggiungere Specrails.","feature_unavailable":"Flow non è disponibile con lo Specrails Core installato.","flow_already_open":"Questa missione ha già un Flow. Riprendilo o scartalo prima.","illegal_transition":"Nel frattempo il Flow ha cambiato stato. Aggiorna e riprova.","flow_worktree_missing":"La copia del progetto di questo Flow non esiste più. Controlla il branch del Flow prima di continuare.","flow_repository_required":"Scegli il repository in cui gira questo Flow.","flow_repository_not_git":"Flow ha bisogno di un repository Git per il suo branch; una semplice cartella non basta. Scegli un repository Git.","flow_repository_unknown":"Quel repository non fa più parte di questo progetto. Scegline un altro.","flow_repository_missing":"Il repository del Flow non è più disponibile in questo progetto.","rail_not_empty":"Quel rail ha già delle spec. Scegli un rail libero e vuoto.","flow_already_handed_off":"Questo Flow è già stato affidato a un rail.","flow_freeze_failed":"Non è stato possibile salvare le modifiche del Flow per l’affidamento.","flow_head_mismatch":"Il Flow è cambiato durante l’affidamento. Riprova.","flow_handoff_not_adopted":"Il rail è partito senza prendere in carico le modifiche del Flow.","repository_has_no_commits":"Questo repository non ha ancora commit. Fai un primo commit perché Specrails possa creare una copia isolata del progetto.","flow_not_found":"Questo Flow non esiste più.","flow_failed":"Flow ha riscontrato un errore imprevisto. Riprova.","conversation_not_found":"Questa missione non esiste più.","conversation_not_pinned":"Fissa questa missione al progetto prima di avviare un Flow.","flow_not_handed_off":"Questo Flow non attende più quell’esecuzione.","flow_rail_unknown":"Il rail di quell’esecuzione è sconosciuto. Affidalo di nuovo dalla striscia del Flow.","flow_return_busy":"L’esecuzione è occupata con un’altra azione. Riprova tra un momento.","flow_return_not_allowed":"Solo un affidamento fermato prima della consegna può tornare al suo Flow.","flow_return_not_found":"Quell’esecuzione non è un affidamento di Flow.","flow_return_worktree_mismatch":"Quell’esecuzione non ha preso in carico le modifiche di questo Flow.","spec_in_flow":"Questa spec è già in Flow. Apri la sua missione per continuare.","spec_on_rail":"Questa spec è su un rail. Toglila dal rail per avviarla in Flow.","spec_running":"Questa spec è in esecuzione su un rail. Attendi che finisca.","spec_closed":"Questa spec è completata o annullata. Riaprila per lavorarci in Flow.","spec_not_found":"Questa spec non esiste più.","invalid_ticket_id":"Impossibile identificare quella spec."},"entry":{"heading":"Avvia un Flow","body":"Specrails crea una copia separata del progetto su un branch del Flow tutto suo, dove l’agente può scrivere codice. Il tuo branch principale non viene toccato.","provider":"L’agente lavora con {{provider}} e scrive solo nella copia del Flow.","providerUnknown":"L’agente scrive solo nella copia del Flow.","repository":{"label":"Repository","hint":"Il Flow lavora in una copia separata di questo repository.","choose":"Scegli il repository in cui gira questo Flow","loading":"Caricamento dei repository…","loadFailed":"Impossibile caricare i repository del progetto. Riprova.","suggested":"Suggerito dall’agente","noGit":"Questo progetto non ha un repository Git. Flow ne ha bisogno per il suo branch."},"blocked":{"noProject":"Fissa questa missione a un progetto per usare Flow.","open":"Questa missione ha già un Flow.","missing":"Flow richiede uno Specrails Core più recente:","unavailable":"Flow non è disponibile al momento.","goToFlow":"Vai a quel Flow"},"cancel":"Annulla","start":"Avvia Flow","starting":"Avvio…","existingSpec":{"label":"Spec #{{id}}","note":"Il Flow lavora su questa spec e l’agente parte da lei. Alla consegna, la spec viene riscritta da ciò che è stato costruito; il testo attuale resta come commento."}},"offer":{"heading":"Come vuoi costruirlo?","notNow":"Non ora","implementReply":"Scriviamo prima la spec e poi lanciamo Implement.","mode":{"flow":{"title":"Flow","hint":"Costruiscilo insieme all’agente su un branch del Flow separato; la spec arriva alla fine.","hintExisting":"Costruite insieme questa spec su un branch Flow separato; la spec viene riscritta da ciò che costruite."},"implement":{"title":"Spec + implementa","hint":"Concordate prima una spec, poi delegala a un rail.","hintExisting":"Affida questa spec, così com’è scritta, a un rail."}},"stub":{"flow":"Hai scelto Flow","implement":"Hai scelto spec + Implement","dismissed":"Proposta scartata","handedOff":"Flow affidato al Rail {{rail}}","state":{"active":"Flow in corso","paused":"Flow in pausa","handed_off":"Flow affidato a un rail","delivered":"Flow consegnato","discarded":"Flow scartato","needs-review":"Il Flow va controllato","closed":"Flow chiuso (branch conservato)"},"viewRun":"Vedi esecuzione"},"why":"Perché l’agente lo chiede","waitForReply":"Potrai scegliere quando l’agente avrà finito questa risposta.","implementExistingReply":"Implementiamo la spec #{{id}} su un rail."},"bar":{"controls":"Azioni del Flow","viewChanges":"Vedi modifiche","resume":"Riprendi Flow","pause":"Sospendi Flow","discard":"Scarta","discarded":"Flow scartato","files_one":"{{count}} file","files_other":"{{count}} file","filesTitle":"File modificati sul branch del Flow","costTitle":"Costo reale dei turni di questo Flow, come fatturato dal provider","costPartial_one":"{{count}} turno non ha un costo comunicato dal provider e non è incluso","costPartial_other":"{{count}} turni non hanno un costo comunicato dal provider e non sono inclusi","needsReview":"La copia del progetto di questo Flow non c’è più. Non è stato cancellato nulla; controlla il branch del Flow prima di continuare.","pausedNote":"In pausa. Le tue modifiche e la spec restano; riprendi quando vuoi.","state":{"active":"Flow","paused":"Flow in pausa","needs-review":"Il Flow va controllato","handed_off":"Affidato a un rail","delivered":"Consegnato","discarded":"Scartato","closed":"Chiuso"},"disabled":{"settling":"Attendi che il Flow finisca di salvare il suo stato","busy":"Attendi che l’azione in corso finisca","noSpec":"La spec del Flow non è ancora pronta"},"viewChangesStats":"Vedi modifiche · {{files}}, +{{additions}} −{{deletions}}","handOff":"Affida","close":"Chiudi questo Flow","closed":"Flow chiuso. Il branch viene conservato."},"preview":{"open":"Anteprima","openTitle":"Apri l’app su {{url}} nel browser","stopping":"Arresto in corso…","more":"Azioni dell’app","local":"Apri su questo computer","network":"Apri sulla rete locale","localOnly":"Raggiungibile solo da questo computer. Chiedi all’agente di riavviarla esposta sulla rete locale per aprirla da un telefono.","stop":"Arresta app","stopFailed":"Impossibile arrestare l’app"},"discard":{"title":"Scartare questo Flow?","body":"Scartare elimina tutto questo, in modo irreversibile:","cancel":"Mantieni Flow","confirm":"Scarta Flow","lossFiles_one":"{{count}} file modificato","lossFiles_other":"{{count}} file modificati","lossNoChanges":"Ancora nessun file modificato","lossUnknown":"Tutte le modifiche sul branch del Flow","lossSpec":"La spec provvisoria sulla bacheca"},"changes":{"title":"Modifiche del Flow","subtitle":"Branch {{branch}} confrontato con il punto di partenza","subtitleNoBranch":"Modifiche confrontate con il punto di partenza del Flow","refresh":"Aggiorna","loadFailed":"Impossibile caricare le modifiche.","empty":"Ancora nessuna modifica.","status":{"added":"Aggiunto","modified":"Modificato","deleted":"Eliminato","renamed":"Rinominato","untracked":"Nuovo, non tracciato"}},"handOff":{"heading":"Trasforma questo Flow in una PR revisionata","loop":"Affidamento del Flow","launch":"Lancia","notYet":"Non ancora","engineFallback":"{{provider}} non può eseguire l’affidamento del Flow su questo computer, quindi è selezionato il motore predefinito del rail.","cost":"{{cost}} finora","costUnknown":"ancora nessun costo fatturato","line_one":"{{rail}} trasformerà il tuo file modificato in una PR revisionata. Se fallisce, il tuo lavoro è al sicuro.","line_other":"{{rail}} trasformerà i tuoi {{count}} file modificati in una PR revisionata. Se fallisce, il tuo lavoro è al sicuro.","lineNoCount":"{{rail}} trasformerà le tue modifiche in una PR revisionata. Se fallisce, il tuo lavoro è al sicuro."},"review":{"backToFlow":"Torna in Flow","backToFlowHint":"Riapri questo Flow con le stesse modifiche; l’agente riceve la revisione al prossimo turno","relaunch":"Rilancia","relaunchHint":"Riprova dallo stesso branch del Flow, rail e motore","returned":"Di nuovo in Flow. L’agente ha la revisione.","relaunched":"Rilanciato sul rail {{index}}","returnFailed":"Impossibile tornare in Flow: {{detail}}","relaunchFailed":"Impossibile rilanciare: {{detail}}","backToFlowFailureHint":"Riapri questo Flow con le stesse modifiche; l’agente riceve l’errore al prossimo turno","returnedFailure":"Di nuovo in Flow. L’agente ha l’errore."},"failure":{"step":{"derive":"Impossibile scrivere la spec dalle tue modifiche","verify":"Impossibile verificare le tue modifiche","review":"La revisione non è riuscita a terminare","fix":"Le correzioni automatiche non sono riuscite a terminare","archive":"Impossibile salvare la spec completata","settle":"Impossibile restituire il risultato","unknown":"L’affidamento si è fermato prima di finire"},"cause":"Causa:","next":"Il tuo lavoro è intatto. Tornando in Flow, l’agente riceve l’errore.","nextReturned":"Il tuo lavoro è intatto. Di nuovo in Flow, l’agente ha l’errore.","returned":"Tornato in Flow","technical":{"title":"Dettagli tecnici","repository":"Repository","step":"Passo","status":"Stato","failure":"Errore","detail":"Dettaglio"}},"announce":{"active":"Flow attivo: l’agente scrive sul branch del Flow.","paused":"Flow in pausa.","needs-review":"Il Flow va controllato: la sua copia del progetto non c’è più.","handed_off":"Flow affidato a un rail.","delivered":"Flow consegnato.","discarded":"Flow scartato.","returned":"Di nuovo in Flow: il lavoro è tornato con ciò che ha trovato il rail.","closed":"Flow chiuso. Il suo branch è stato conservato."},"strip":{"label":"Flow","ready":"Pronto a diventare una PR","launching":"Affidamento a un rail…","launchingOn":"Affidamento a {{rail}}…","stillHandingOff":"Affidamento a {{rail}} ancora in corso…","refresh":"Aggiorna","step":{"derive":"Scrittura della spec dalle tue modifiche","verify":"Verifica delle tue modifiche","review":"Revisione della modifica","fix":"Applicazione delle correzioni della revisione","archive":"Salvataggio della spec completata","settle":"Restituzione del risultato"},"headline":"{{state}} · {{files}}"},"mode":{"chip":"Flow","description":"Modalità Flow: l’agente scrive sul branch del Flow, non sul tuo branch principale","placeholder":"Di’ all’agente cosa cambiare in questo Flow…"},"panel":{"branch":"Branch","changes":"Modifiche","cost":"Costo finora","actions":"Altre azioni del Flow"},"close":{"title":"Chiudere questo Flow?","body":"La conversazione esce da Flow. Non viene eliminato nulla:","keptBranch":"Branch conservato:","keptSpec":"La spec resta sulla bacheca, senza l’etichetta In Flow","cancel":"Non ora","confirm":"Chiudi Flow, mantieni il branch"},"startFromSpec":{"action":"Avvia in Flow","hint":"Costruisci questa spec con l’agente sul suo branch Flow, in una missione","starting":"Avvio del Flow…","failed":"La spec #{{id}} non è potuta partire in Flow","repository":{"title":"Dove deve essere eseguito questo Flow?","body":"Questo progetto ha più repository Git. Il Flow lavora sul proprio branch, in una copia separata di quello che scegli.","fromSpec":"Indicato nella spec"},"blocked":{"noProject":"Apri un progetto per usare Flow","unavailable":"Flow non è disponibile con lo Specrails Core installato","inFlow":"Già in Flow","closed":"Le spec completate o annullate non possono partire in Flow","running":"In esecuzione su un rail","onRail":"Su un rail: toglila prima dal rail","missionInFlow":"Questa missione ha già un Flow"}}}`),ve={title:`Cosa ha chiesto il revisore`,noFindings:`L’affidamento si è fermato prima della consegna; le tue modifiche sono tornate intatte in questo Flow.`,coverage:`La spec spiega {{explained}} di {{files}} file modificati`,unexplained:`Non spiegati da alcun requisito`,moreFiles_one:`+{{count}} altro file`,moreFiles_other:`+{{count}} altri file`,next:`L’agente del Flow inizia a lavorarci ora; puoi guidarlo o fermarlo in qualsiasi momento.`,automaticTurn:`Turno automatico · Di nuovo in Flow`,titleFailure:`Perché l’affidamento si è fermato`},ye={providerInactivity:`Il provider non ha risposto troppo a lungo, quindi il turno è terminato. Invia di nuovo il messaggio per continuare.`,toolInactivity:`Uno strumento è rimasto in esecuzione troppo a lungo senza attività del provider, quindi il turno è terminato. Invia di nuovo il messaggio per continuare o chiedi all’agente di dividere il passaggio.`,generic:`Il turno dell’agente non è riuscito.`},be={title:`Flow consegnato`,pr:`Apri la pull request`,prNumber:`Pull request #{{number}}`,specRewritten:`Spec riscritta da ciò che hai costruito`,specKept:`La riscrittura della spec non è stata completata; la bozza resta`,change:`Modifica della spec {{change}}`,changeArchived:`Modifica della spec {{change}} archiviata`,jira:`Issue Jira {{key}}`,jiraPending:`Issue Jira in creazione`},xe={launching:`Avvio su {{rail}}…`,running:`Al lavoro`,paused:`In pausa. Ti aspetta`,pausedReason:`In pausa: {{reason}}`,decision:{approval:`In attesa della tua approvazione`,changes:`Il revisore ha chiesto modifiche`,on_review:`Pronto per la tua revisione`,pr_draft:`PR in bozza pronta da pubblicare`,no_changes:`Terminato senza modifiche`,pr_closed:`PR chiusa senza merge`,generic:`In attesa della tua decisione`},failed:{generic:`Fermato da un errore`,implementation_failed:`L’implementazione non è riuscita`,stalled:`L’esecuzione si è bloccata`,stuck:`L’esecuzione è rimasta bloccata`,provider_limit:`Il limite d’uso del provider l’ha fermata`,launch_failed:`L’esecuzione non è partita`,delivery_failed:`Non è stato possibile consegnare il risultato`,push_failed:`Non è stato possibile fare il push del branch`,pr_failed:`Non è stato possibile creare la PR`},progressAria:`{{done}} di {{total}} esecuzioni terminate`,costTitle:`Costo reale fatturato dal provider finora`,costPartial:`Alcune esecuzioni non hanno ancora un costo fatturato e non sono incluse`,costNone:`Ancora nessun costo fatturato`,state:{launching:`Avvio:`,running:`In corso:`,decision:`Ti aspetta:`,failed:`Non riuscito:`,paused:`In pausa:`,info:`Per tua informazione:`},proposal:`Avvio proposto per {{tickets}}`,proposalNoTickets:`Avvio proposto`,proposalLabel:`Proposta`,panelLabel:`Dettagli di {{run}}`,showDetails:`Mostra dettagli`,withShortcut:`{{label}} ({{keys}})`,cycleHint:`Cambia esecuzione: {{keys}}`,hideDetails:`Nascondi dettagli`,switcher:`Esecuzioni in corso`,more:`Altre esecuzioni ({{count}})`,announce:{settled:`{{run}} è terminato`,shown:`Stai visualizzando {{run}}: {{state}}`,needsYou:`{{run}} ha bisogno di te`},event:{launched:`Avviato su {{run}}`,failed:`{{run}} non riuscito: {{reason}}`,openRun:`Mostra l’esecuzione`,proposed:`Avvio proposto. Ti aspetta`,backToFlow:`Di nuovo in Flow`,flowReturned:`{{run}} ha rimandato il lavoro al Flow`,delivered:`Consegnato: PR {{pr}}`,deliveredNoPr:`Consegnato su {{run}}`,superseded:`{{run}} è stato sostituito da un’esecuzione più recente`,discarded:`{{run}} è stato scartato`,changes:`{{run}}: il revisore ha chiesto modifiche`},needsYou:`ti aspetta`,opensCard:`Apre la scheda dell’esecuzione per confermare lì`,open:{decision:`Apri la decisione`,failed:`Vedi cosa è fallito`,paused:`Vedi perché è in pausa`},attention:{failed:`Richiede attenzione: un’esecuzione è fallita`}},Se={entered:`Entrato in Flow`,left:`Uscito da Flow`,turnMark:`Flow`,reason:{started:`avviato`,returned:`di ritorno da un rail`,handed_off:`affidato a un rail`,discarded:`scartato`,closed:`chiuso, branch conservato`}},Ce=`Non letto`,we=`{{count}} non letti`,Te=`Agente al lavoro`,Ee=`Impossibile eliminare la missione. Riprova.`,De={label:`Modalità interfaccia`,mission:`Missione`,board:`Board`,current:`Modalità attuale: {{mode}}. Clicca per cambiare.`},Oe={sendFailed:`Impossibile inviare il messaggio.`,stopFailed:`Impossibile fermare l’agente.`,mcpEnableFailed:`Impossibile attivare MCP.`,removeAttachmentFailed:`Impossibile rimuovere l’allegato.`,sendFailedHint:`Il tuo testo è di nuovo nella casella: premi Invio per riprovare.`,providerSwitchFailed:`Impossibile cambiare provider: quello precedente è ancora attivo.`,modelSwitchFailed:`Impossibile cambiare modello: quello precedente è ancora attivo.`,effortSwitchFailed:`Impossibile cambiare lo sforzo: quello precedente è ancora attivo.`},ke={ariaLabel:`Messaggio all’agente`,dropFiles:`Rilascia i file per allegarli`,uploading:`Caricamento…`},Ae={ariaLabel:`Conversazione della missione`,agentWorking:`L’agente sta lavorando…`,agentReplied:`L’agente ha risposto`,newMessages:`Nuovi messaggi`},je={you:`Tu`,agent:`Agente`},Me={groupLabel:`Risposte suggerite`,shortcut:`Alt+{{n}}`},Ne=`Copiato`,Pe=`Copia codice`,Fe=`Rispondi, o usa @ per fare riferimento…`,Ie=`Invia (Invio) · Nuova riga (Maiusc+Invio)`,Le=`Annulla`,Re=`Questo provider non può ancora leggere immagini: {{count}} immagini non sono state allegate`,ze={reference:`Fai riferimento a una spec`,action:`Esegui un’azione`,plan:`Pianifica una nuova spec`,planSpec:`Aiutami a pianificare una nuova spec: `},Be=`⇧⇥ cambia cosa può fare l’agente · ↑ richiama il tuo ultimo prompt`,Ve={arrived:`Arrivato in revisione — PR #{{number}}`,arrivedNoNumber:`Arrivato in revisione`,openPr:`Apri PR`},He={greeting:`Cosa deve andare in consegna dopo in {{project}}?`,greetingNoProject:`Cosa deve andare in consegna dopo?`,statusTodo_one:`{{count}} da fare`,statusTodo_other:`{{count}} da fare`,statusReview_one:`{{count}} in attesa di revisione`,statusReview_other:`{{count}} in attesa di revisione`,statusRunning_one:`{{count}} in corso`,statusRunning_other:`{{count}} in corso`},Ue={title:e,subtitle:t,trigger:n,composerPlaceholder:r,send:i,stop:a,copy:o,attachment:s,maximize:c,restore:l,minimize:u,close:d,newConversation:f,emptyTitle:p,emptyHint:m,thinking:h,connecting:g,consultingCode:_,size:v,model:y,history:b,queue:x,receipt:S,queueEdit:C,git:w,provider:T,tier:E,approval:D,project:O,palette:k,mission:A,noProvider:j,degraded:M,toolCard:N,error:P,chip:F,newAgent:I,switchToAgent:L,switchToKanban:R,search:z,home:B,favoriteMissions:V,untitled:H,workspace:U,attachFile:W,deleteConversation:G,confirmDeleteConversation:K,addFavoriteConversation:q,removeFavoriteConversation:J,confirmShort:Y,imagesUnsupported:X,effort:Z,prCard:Q,specDraft:$,problemFrame:ee,refs:te,header:ne,emptyTitleCodeRain:re,activity:ie,backgroundProcess:ae,window:oe,railCard:se,runCard:ce,runFailure:le,split:ue,runtimeSelector:de,missionPlaceholders:fe,subagents:pe,sessionNotice:me,cardPending:he,interrupt:ge,flow:_e,flowReturn:ve,turnErrors:ye,flowDelivered:be,runStrip:xe,flowBoundary:Se,unread:Ce,unreadCount:we,live:Te,deleteFailed:Ee,modeSwitch:De,errors:Oe,composer:ke,conversation:Ae,message:je,options:Me,copied:Ne,copyCode:Pe,composerReplyPlaceholder:Fe,sendHint:Ie,undo:Le,imagesUnsupportedCount:Re,starter:ze,emptyLegend:Be,delivery:Ve,missionHome:He};export{ie as activity,q as addFavoriteConversation,D as approval,W as attachFile,s as attachment,ae as backgroundProcess,he as cardPending,F as chip,d as close,ke as composer,r as composerPlaceholder,Fe as composerReplyPlaceholder,K as confirmDeleteConversation,Y as confirmShort,g as connecting,_ as consultingCode,Ae as conversation,Ne as copied,o as copy,Pe as copyCode,Ue as default,M as degraded,G as deleteConversation,Ee as deleteFailed,Ve as delivery,Z as effort,m as emptyHint,Be as emptyLegend,p as emptyTitle,re as emptyTitleCodeRain,P as error,Oe as errors,V as favoriteMissions,_e as flow,Se as flowBoundary,be as flowDelivered,ve as flowReturn,w as git,ne as header,b as history,B as home,X as imagesUnsupported,Re as imagesUnsupportedCount,ge as interrupt,Te as live,c as maximize,je as message,u as minimize,A as mission,He as missionHome,fe as missionPlaceholders,De as modeSwitch,y as model,I as newAgent,f as newConversation,j as noProvider,Me as options,k as palette,Q as prCard,ee as problemFrame,O as project,T as provider,x as queue,C as queueEdit,se as railCard,S as receipt,te as refs,J as removeFavoriteConversation,l as restore,ce as runCard,le as runFailure,xe as runStrip,de as runtimeSelector,z as search,i as send,Ie as sendHint,me as sessionNotice,v as size,$ as specDraft,ue as split,ze as starter,a as stop,pe as subagents,t as subtitle,L as switchToAgent,R as switchToKanban,h as thinking,E as tier,e as title,N as toolCard,n as trigger,ye as turnErrors,Le as undo,Ce as unread,we as unreadCount,H as untitled,oe as window,U as workspace};
@@ -1 +1 @@
1
- var e=`Motor de agentes`,t=`Arquiteto, programador e revisor correm como fases separadas com verificação determinista entre elas. Escolha um fornecedor por função; tudo o resto tem um valor por defeito que funciona.`,n=`A carregar configurações…`,r=`Não foi possível carregar as configurações. Tente novamente antes de alterar.`,i=`Tentar novamente`,a=`Esta instalação do Core não inclui o motor de agentes. Atualize o Core antes de ativar; pode preparar as configurações enquanto está desativado.`,o=`Guardar configurações`,s=`A guardar…`,c=`Configurações guardadas`,l=`Não foi possível guardar as configurações.`,u=`Pausar para aprovação antes de concluir o fluxo`,d={title:`Fornecedores`,hint:`Os CLI usam a sessão existente. As API aceitam apenas o nome da variável de ambiente, nunca a chave. Em serviços locais, pode ficar vazio. Reatribua as funções antes de remover o fornecedor.`,entry:`Fornecedor {{index}}`,id:`ID do fornecedor`,kind:`Tipo de ligação`,cli:`CLI de programação instalado`,compatible:`Endpoint compatível com OpenAI`,command:`CLI de programação`,baseUrl:`URL base da API`,apiKeyEnv:`Variável de ambiente da chave (opcional)`,remove:`Remover fornecedor`,addCli:`Adicionar fornecedor CLI`,addLocal:`Adicionar fornecedor local / API`,show:`Mostrar ligações a fornecedores`,hide:`Ocultar ligações a fornecedores`,globalTitle:`Provedores de IA`,globalHint:`Dois tipos de provedor alimentam cada projeto: as CLIs de programação detectadas nesta máquina e os motores locais compatíveis com OpenAI que registares aqui. Atribui-os às fases do pipeline em Definições do projeto ▸ Motor de agentes. As alterações aplicam-se a novas execuções.`,label:`Nome de exibição (opcional)`,labelPlaceholder:`ex.: Máquina LAN`,defaultModel:`Modelo padrão`,defaultModelNone:`Sem padrão (primeiro descoberto)`,defaultModelPlaceholder:`ID do modelo ou alias personalizado`,customModel:`Alias personalizado…`,discoveredModels:`Modelos descobertos`,noModels:`Nenhum modelo descoberto ainda — teste a conexão.`,rates:`Tarifas (USD por 1M de tokens, opcional)`,ratesHint:`Os custos são exibidos como estimativas; deixe ambas vazias e o custo permanece desconhecido.`,inputRate:`Entrada por 1M`,outputRate:`Saída por 1M`,ratesInvalid:`Informe ambas as tarifas como números não negativos ou deixe as duas vazias.`,reasoningEffort:`O endpoint aceita esforço de raciocínio`,reasoningEffortHint:`Envia o campo reasoning_effort da OpenAI: o esforço configurado do papel em cada chamada, elevado a alto enquanto o arquiteto compacto escreve o plano. Deixe desligado a menos que o servidor o respeite.`,apiKeyEnvMissing:`{{name}} não está definida no processo do app. Defina-a no ambiente a partir do qual o app é iniciado.`,test:`Testar conexão`,testing:`Testando…`,testFailed:`Não foi possível testar a conexão.`,rename:`Renomear`,renameHint:`Renomear mantém as atribuições de papéis apontando para esta conexão.`,idLocked:`O id fica bloqueado após salvar. Use Renomear para alterá-lo.`,localBadge:`Motor local`,cliBadge:`CLI`,notDetected:`Não detectado nesta máquina`,unsaved:`Alterações não salvas`,empty:`Ainda não há conexões. Adicione um provedor local / API para começar.`,fixBeforeSave:`Corrija os campos destacados antes de salvar.`,status:{probing:`Verificando…`,reachable:`Acessível`,unauthorized:`Não autorizado`,unreachable:`Inacessível`,untested:`Nunca testado`},auth:{authenticated:`Sessão iniciada`,unauthenticated:`Sem sessão`,unknown:`Sessão desconhecida`},agentLoop:`Loop do agente`,agentLoopHint:`como o pipeline implement conduz este modelo`,agentLoop_compact:`Compacto`,agentLoop_compactHint:`Micropassos conduzidos pelo app com saída estruturada. Recomendado para modelos abaixo de ~30B.`,agentLoop_free:`Livre`,agentLoop_freeHint:`Um loop agêntico por papel, como um provedor CLI. Exige um modelo forte.`,contextWindow:`Janela de contexto (tokens)`,contextWindowHint:`Iguale ao tamanho de contexto do servidor (n_ctx / num_ctx). Usado para compactar resultados antigos de ferramentas antes de encher a janela. Padrão 32768.`,maxOutput:`Orçamento de saída por turno (tokens)`,maxOutputHint:`max_tokens de um turno de ferramentas; um turno cortado é repetido uma vez com o dobro. Conta dentro da janela de contexto, por isso é sempre limitado ao espaço restante — aumente-o se o modelo raciocina em privado (o thinking consome-o). Predefinição 8192.`,reasoningEffortRailHint:`Desligado: o seletor de esforço de raciocínio não aparece no cabeçalho do rail para este motor.`,presetTitle:`Configuração rápida`,presetSmallModel:`Recomendado para modelos pequenos`,presetSmallModelApplied:`Predefinição para modelos pequenos aplicada`,presetSmallModelHint:`Ativa o loop Compacto, encaminha o esforço de raciocínio e fixa uma janela de contexto de 32k: a combinação validada com modelos de 7–14B. Cada campo continua editável.`,cliGroup:`Ferramentas CLI`,cliGroupHint:`Detectadas nesta máquina: usam o seu próprio início de sessão, nada a configurar.`,localGroup:`Motores locais`,localGroupHint:`Endpoints compatíveis com OpenAI (llama.cpp, Ollama, vLLM, LM Studio…) acessíveis a partir desta app.`,models_one:`{{count}} modelo`,models_other:`{{count}} modelos`,expand:`Mostrar definições`,collapse:`Ocultar definições`,overflow:`Mais ações`,addLocalHero:`Adicionar motor local`,emptyLocalPitch:`Ainda não há motores locais. Aponta a app para um endpoint compatível com OpenAI para executar o pipeline no teu próprio hardware: o custo fica sob o teu controlo e nada sai da tua rede.`,defaultsGroup:`Predefinições do provedor`},f={claude:`Claude`,codex:`Codex`,gemini:`Gemini`,kimi:`Kimi`},p={architect:`Arquiteto`,developer:`Desenvolvedor`,reviewer:`Revisor`,fixer:`Corretor`,verify:`Verificação`,archive:`Conclusão`},m={title:`Atribuição de funções`,hint:`Cada papel pode usar um fornecedor e um modelo diferentes. Conexões: Definições gerais → Provedores de IA. Limite padrão: {{turns}} turnos por agente.`,provider:`Fornecedor`,model:`Modelo`,modelPlaceholder:`ID do modelo ou padrão do CLI`,maxTurns:`Máximo de turnos (por defeito {{turns}})`,defaultModel:`Por defeito ({{model}})`,thinking:`Raciocínio oculto`,thinking_off:`Desligado`,thinking_on:`Ligado`,thinkingHint:`Desligado por defeito: o raciocínio oculto gasta o orçamento de saída e minutos por turno num ciclo guiado pelo host. Ligue-o para um papel que beneficie de deliberação (enviado como chat_template_kwargs.enable_thinking; os endpoints que não o conhecem ignoram-no).`},h={title:`Limites do fluxo`,hint:`Os campos vazios usam os valores do Core: {{attempts}} tentativas de correção e {{minutes}} minutos por passo de papel. Em motores locais o timeout aplica-se a cada unidade de trabalho (um grupo de tarefas, um artefacto, uma revisão) — 45 minutos por defeito — mais um watchdog de inatividade de 20 minutos; um passo que esgota o tempo bloqueia a execução e pode ser retomado a partir do próximo grupo aberto. Os limites de tokens e USD são opcionais; os de USD exigem Claude em todos os papéis.`,maxAttempts:`Máximo de tentativas do programador (por defeito {{attempts}})`,timeoutMinutes:`Timeout em minutos (por defeito {{minutes}}; motores locais 45 por grupo de tarefas)`,maxTokens:`Máximo de tokens`,maxCostUsd:`Custo máximo (USD)`,unlimited:`Sem limite`},g={title:`Comandos de verificação`,hint:`Opcional. Correm quando o programador termina e as falhas voltam ao programador. Com a lista vazia, o arquiteto propõe as verificações do próprio projeto em cada execução; os repositórios sem verificação automática são revistos na mesma.`,detect:`Detetar verificações do projeto`,detecting:`A detetar…`,detected:`Preenchido com as verificações que este projeto já define.`,nothingDetected:`Não foi encontrado nenhum comando de teste, verificação de tipos ou build. Não há problema: o arquiteto propõe verificações em cada execução quando possível.`,detectFailed:`Não foi possível inspecionar os repositórios do projeto.`,repository:`Repositório`,command:`Comando`,reason:`Detetado em {{reason}}`,remove:`Remover`,add:`Adicionar comando`,invalidLine:`Comando de verificação vazio ou com aspas por fechar: {{line}}`,label:`Nome da verificação (opcional)`,moveUp:`Subir`,moveDown:`Descer`},_={title:`Comandos de preparação`,hint:"Comandos idempotentes que o Core executa antes de cada verificação, no checkout do repositório (por exemplo `npx playwright install chromium`).",add:`Adicionar comando de preparação`,invalidLine:`O comando de preparação está vazio ou tem uma aspa não fechada: {{line}}`,repository:`Repositório`,command:`Comando de preparação`,label:`Rótulo de preparação (opcional)`,remove:`Remover`,moveUp:`Mover comando de preparação para cima`,moveDown:`Mover comando de preparação para baixo`,empty:`Sem comandos de preparação. A verificação é executada diretamente no checkout.`},v={title:`Execuções guardadas`,refresh:`Atualizar`,hint:`Continua no worktree original com o âmbito e as configurações guardadas; o progresso aparece no registo desse trabalho. Não publica nem reinicia a entrega do Desktop. As execuções ativas param a partir dos controlos do trabalho.`,empty:`Não há execuções guardadas.`,loadFailed:`Não foi possível carregar as execuções.`,actionFailed:`Não foi possível atualizar esta execução.`,phase:`Próxima fase: {{phase}}`,approve:`Aprovar conclusão`,recover:`Recuperar fase interrompida`,resume:`Retomar`,cancel:`Cancelar continuação`,status:{running:`A continuar…`,succeeded:`Concluído`,failed:`Falhou`,blocked:`Bloqueado`,paused:`Em pausa`,cancelled:`Cancelado`,interrupted:`Interrompido`,unavailable:`Indisponível`,expired:`Expirado`},question:`O arquiteto pergunta:`,answerLabel:`A sua resposta`,answerPlaceholder:`Responda à pergunta; o arquiteto continua com ela.`,answer:`Responder e retomar`,viewLog:`Ver log do job`,implementation:`Implementação`,preserveProgress:`Continue a partir da fase indicada, preservando o trabalho e as configurações guardadas.`,reviewDelivery:`Implementação concluída. Reveja o resultado no log antes da entrega; esta continuação não o publicou.`,prepareDelivery:`Preparar entrega`,dismiss:`Descartar`,selectRecovery:`Selecione as tentativas interrompidas a recuperar`},y={architect:`Lê o código e escreve a proposta, o design, as tarefas e a spec. Só leitura.`,developer:`Implementa as tarefas com testes. Pode editar ficheiros e executar comandos na sandbox do CLI.`,reviewer:`Confere o resultado com a spec e a evidência de verificação. Só leitura.`},b={title:`Limite de revisão`,hint:`Campos vazios usam o limite do Core. Os valores só podem elevá-lo: pontuação geral de pelo menos {{score}}, segurança de pelo menos {{security}}, outros aspetos de pelo menos {{aspect}}.`,minScore:`Pontuação geral mínima (padrão {{score}})`,aspects:{type_correctness:`Correção de tipos (padrão {{score}})`,pattern_adherence:`Aderência a padrões (padrão {{score}})`,test_coverage:`Cobertura de testes (padrão {{score}})`,security:`Segurança (padrão {{score}})`,architectural_alignment:`Alinhamento arquitetural (padrão {{score}})`}},x={title:`Confiança do arquiteto`,hint:`Após uma passagem de investigação autónoma, um design ainda com baixa confiança pausa com a pergunta do arquiteto ou prossegue com suposições declaradas.`,onLowConfidence:`Com baixa confiança`,ask:`Perguntar (pausar com a pergunta)`,proceed:`Prosseguir com suposições declaradas`},S={title:`Consumo e tempo`,hint:`Inclui correções e chamadas falhadas. O tempo dos agentes inclui as ferramentas. Os tokens em cache fazem parte dos tokens de entrada.`,unknown:`Indisponível`,duration:`Tempo de execução`,agentTime:`Tempo dos agentes`,cost:`Custo reportado`,providerCalls:`Chamadas a agentes`,toolCalls:`Chamadas a ferramentas`,input:`Tokens de entrada`,output:`Tokens de saída`,uncached:`Entrada sem cache`,cacheRead:`Leituras da cache`,cacheWrite:`Escritas na cache`,partial:`Algumas tentativas não têm medições detalhadas.`,phases:`Consumo por fase`,phase:`Fase`,attempts:`Tentativas`},C={title:`Prompts dos papéis dos agentes`,description:`Veja e edite as instruções de cada papel. São partilhadas por todos os projetos e fornecedores; as alterações aplicam-se a novos trabalhos. Os trabalhos retomados mantêm os prompts originais.`,definition:`Definição de {{role}}`,default:`Predefinição de fábrica`,custom:`Personalizado`,restore:`Restaurar predefinição`,contracts:`O contexto da spec, o fluxo OpenSpec e o formato de resposta obrigatório são adicionados automaticamente e não são editados aqui.`,invalid:`Cada definição deve conter entre 1 e 20.000 caracteres, com texto não vazio e sem bytes nulos.`,saved:`Prompts dos papéis guardados`,unsaved:`Alterações por guardar`,discard:`Descartar alterações`,save:`Guardar prompts`,fixerHint:`Usado apenas em rondas de correção: após uma verificação falhada ou uma revisão rejeitada. Corre no motor do developer salvo se Definições ▸ Motor dos agentes ▸ Corretor indicar um próprio. Um fornecedor CLI que retoma a sessão do developer recebe o seguimento curto de correção; a definição aplica-se sempre que arranca uma sessão nova (motores locais, motor corretor, sessão perdida).`},w={title:`Eficiência da implementação`,scope:`Aplica-se a novas execuções. As execuções guardadas mantêm a configuração e o motor originais.`,effort:`Esforço de raciocínio`,providerDefault:`Padrão do fornecedor`,unconfirmed:`Não confirmado`,unknownSupport:`O suporte deste modelo e transporte não está confirmado.`,escalation:`Permitir um nível superior com o mesmo fornecedor`,baseRequired:`Selecione primeiro um modelo base explícito.`,escalationModel:`Modelo de nível superior`,triggers:{architect:`Apenas a investigação aprofundada existente pode selecionar este nível.`,developer:`Após dois candidatos falhados, a próxima tentativa permitida pode selecionar este nível.`,reviewer:`Apenas para reparar respostas inválidas; rejeitar código não ativa este nível.`,fixer:`Só uma rodada de correção pode alcançar este nível; as primeiras passagens nunca executam o corretor.`},contextMode:`Contexto do repositório`,reviewMode:`Revisão de correções`,planning:`Profundidade do planeamento`,adaptive:`Adaptativo`,full:`Completo`,developerChecks:`Aceitar verificações adicionais propostas pelo programador`,concurrency:`Máximo de verificações simultâneas`,concurrencyHint:`Padrão: 1. Apenas verificações independentes declaradas pelo anfitrião em repositórios diferentes podem executar em conjunto. Sem reutilização por padrão.`,checkCapabilities:`Verificar compatibilidade dos modelos`,capabilitiesFailed:`Compatibilidade não confirmada. Atualize Core ou mantenha os padrões do fornecedor.`},T={title:`Evidências de verificação`,acceptance:`Aceitação técnica`,acceptanceStatus:{pending:`Pendente`,validated:`Validado`,"with-exceptions":`Com exceções`,blocked:`Bloqueado`},calls:`Chamadas aos agentes`,executed:`Verificações executadas`,reused:`Verificações reutilizadas`,unknown:`Indisponível`,unavailable:`Evidência indisponível. O resultado guardado não prova a validade atual.`,current:`Candidato e plano atuais`,historical:`Resultado histórico`,moreChecks:`Mais verificações`,output:`Saída da verificação`,empty:`Sem saída`,truncated:`Página limitada ou captura truncada.`,nextPage:`Página seguinte`,status:{passed:`Aprovado`,failed:`Falhou`,cancelled:`Cancelado`,interrupted:`Interrompido`},disposition:{executed:`Executado`,reused:`Reutilizado`,"not-run":`Não executado`},origin:`Origem`,origins:{host:`Anfitrião`,architect:`Arquiteto`,developer:`Programador`,"frozen-runtime-config":`Configuração guardada`,"project-role":`Papel do projeto`,default:`Padrão`,"explicit-launch-override":`Fornecedor escolhido para esta execução`,"loop-role":`Papel do loop`},reuseDisabled:`Reutilização desativada para esta verificação.`,reuseConfirmed:`Reutilizado após confirmar entradas e ferramentas idênticas.`,inputsChanged:`As entradas mudaram durante a verificação; resultado invalidado.`,reuseUnproven:`Sem resultado atual com entradas idênticas comprovadas; executado novamente.`,original:`Execução original`,requested:`Solicitado`,reported:`Reportado`},E={title:`Papéis do loop`,hint:`Motores dos papéis do loop quando um rail é lançado com o motor «Papéis». Os papéis do pipeline acima (architect, developer, reviewer) já vêm desta configuração do runtime.`,verifier:`Verificador`,verifierHint:`Todos os passos de IA do loop fora do core: verify, fix e passos de IA personalizados.`,decider:`Decisor`,deciderHint:`O Loop Decider que lê o veredicto e escolhe o passo seguinte — um modelo barato e rápido é a escolha natural.`,inherit:`Herdar o principal`,model:`Modelo`,effort:`Esforço de raciocínio`,disabled:`O runtime de agentes está desativado — os rails lançados com o motor «Papéis» são recusados até ser ativado.`,saveFailed:`Não foi possível guardar os papéis do loop.`},D={title:`Pipeline de implementação`,explainer:`Estas fases executam nesta ordem em cada implementação. Quando o motor do rail é "{{roles}}", cada fase usa o motor configurado abaixo — fornecedor, modelo e esforço diferentes por fase. Escolher um motor concreto no rail executa todas as fases nesse motor.`,host:`Host`,noCommand:`sem comando`,inherits:`Herda o principal`,inheritsDeveloper:`Herda do desenvolvedor`,open:`Abrir`,collapse:`Recolher`,groups:{core:{title:`Pipeline principal`,hint:`Executa dentro de cada implementação: planear, construir, verificar, corrigir, rever.`},loop:{title:`Passos do loop`,hint:`Passos de IA do loop do rail que envolve a execução (verificar → decidir → corrigir) e dos loops personalizados; herdam o motor principal se não forem definidos.`,chip:`loop do rail`}},phases:{architect:{name:`Arquiteto`,purpose:`Lê o código e escreve a proposta, o design e as tarefas.`},developer:{name:`Desenvolvedor`,purpose:`Implementa as tarefas com testes.`},verification:{name:`Verificação`,purpose:`O host executa as suas verificações; as falhas voltam ao desenvolvedor.`},fixer:{name:`Corretor`,purpose:`Corrige o que a verificação ou a revisão rejeitam; herda do desenvolvedor se não for configurado.`},reviewer:{name:`Revisor`,purpose:`Confere o resultado com a spec e as evidências.`},verifier:{name:`Verificador`,purpose:`Passos de IA verify, fix e personalizados do loop.`},decider:{name:`Decisor`,purpose:`Lê o veredito e escolhe o próximo passo do loop.`}}},O={title:`Motor do corretor`,inherit:`Herdar desenvolvedor`,own:`Motor próprio`,hint:`Só é executado em rodadas de correção: após uma verificação falha ou uma revisão rejeitada; as primeiras passagens continuam no desenvolvedor. Um modelo mais forte ou na nuvem aqui compensa quando o desenvolvedor é um modelo local barato.`},k={title:`Guarda-corpos`,intro:`Regras de processo que o host aplica em torno dos modelos locais para que um modelo pequeno não descarrile. Todas ativas por padrão; desative uma apenas para ajustar o processo. Provedores CLI nunca são afetados.`,unsupported:`Esta instalação do Core não expõe guarda-corpos configuráveis. Atualize o Core para ajustá-los; as regras integradas continuam a aplicar-se.`,active:`{{on}} de {{total}} ativos`,reset:`Restaurar padrões`,phases:{architect:`Arquiteto`,developer:`Desenvolvedor`,host:`Host`},unknown:`Um guarda-corpo adicionado por um Core mais recente; este app ainda não tem descrição para ele.`,items:{"plan-validation":{title:`Plano de tarefas validado`,description:`Rejeita planos que apontam para openspec/, listam nomes de arquivo soltos como tarefas, têm poucas tarefas/grupos para a spec ou deixam critérios de aceitação descobertos; o arquiteto tenta novamente.`,why:`Um plano vago ou incompleto é a razão nº 1 para um modelo desenvolvedor pequeno escrever stubs.`},"genuine-blocking-question":{title:`Apenas perguntas bloqueantes reais`,description:`O arquiteto só pode pausar a execução com uma pergunta real terminada em '?', nunca com texto de exemplo copiado.`,why:`Modelos pequenos repetem os marcadores do prompt e bloqueariam todas as execuções.`},"plan-language-hint":{title:`Planejar na linguagem do repositório`,description:`Informa ao arquiteto a linguagem principal para que os nomes de arquivo das tarefas tenham a extensão correta.`,why:`Um plano JS num repo TypeScript torna impossível marcar as tarefas.`},"frozen-plan-writes":{title:`Artefatos de planejamento estão congelados`,description:`O desenvolvedor não pode escrever em openspec/; o plano pertence ao host.`,why:`Modelos 'implementam' editando o plano em vez do código.`},"primary-language":{title:`Lembrete da linguagem principal`,description:`Cada grupo de tarefas recebe a linguagem principal do repositório; arquivos novos devem usá-la.`,why:`Evita uma segunda implementação em outra linguagem.`},"duplicate-sibling":{title:`Sem módulos gêmeos entre linguagens`,description:`Recusa board.js quando board.ts já existe; estenda o módulo existente.`,why:`Gêmeos compilam ambos e os testes importam o errado.`},"one-test-per-module":{title:`Um arquivo de teste por módulo`,description:`Recusa board.tick.test.ts quando board.test.ts existe; estenda-o em vez disso.`,why:`Senão cada passada de correção adiciona uma suíte nova.`},"empty-write":{title:`Sem sobrescritas vazias`,description:`Uma escrita vazia sobre um arquivo com conteúdo é recusada; escreva o conteúdo completo ou aplique um patch.`,why:`Uma passada de 'limpeza' certa vez deixou index.ts com 0 linhas.`},"evidence-gated-ticking":{title:`Evidência antes de marcar uma tarefa`,description:`Uma tarefa que nomeia arquivos só está concluída quando eles existem e não são stubs (extensões irmãs aceitas).`,why:`Sem isso, 'concluído' é só uma afirmação e a verificação roda contra nada.`},"inventory-retry":{title:`Tentar de novo com o inventário real`,description:`Quando o modelo desiste alegando que o repo está vazio sem estar, tenta uma vez mais com a lista de arquivos.`,why:`Segunda chance barata em vez de um passo falhado.`},"synthetic-corrections":{title:`Transformar feedback em tarefas`,description:`Quando todas as tarefas estão marcadas mas review/verify falharam, o feedback vira tarefas de correção concretas.`,why:`Senão o desenvolvedor responde 'já está feito' e nada muda.`},"silent-group-closure":{title:`Fechar grupos silenciosos, manter seus arquivos`,description:`Um grupo cujo modelo para de responder é fechado creditando os arquivos que escreveu e deixando suas tarefas abertas, em vez de falhar a execução.`,why:`Um modelo 9B escreveu cinco módulos, silenciou e toda a execução falhou.`},"environment-repair":{title:`O host repara o ambiente`,description:`Dependências ou ferramentas de teste ausentes (npm install, ts-jest, @types/jest, módulos de config do Jest) são instaladas pelo host e a verificação roda de novo uma vez.`,why:`O modelo não consegue consertar o ambiente e gasta correções tentando.`},"lockfile-repair":{title:`Descartar lockfiles escritos à mão`,description:`Um package-lock.json inventado pelo modelo (EINTEGRITY/ETARGET) é removido e a instalação repetida uma vez.`,why:`Hashes inventados nunca instalam.`},"verify-idle-timeout":{title:`Parar testes travados`,description:`Um comando de verificação sem saída por 5 minutos é interrompido e reportado como provável travamento (última saída incluída).`,why:`Senão um laço while num teste segura a execução até o limite de 15 minutos.`},"verify-per-group":{title:`Verificar após cada grupo`,description:`Executa o comando de teste do repositório logo após cada grupo de tarefas; uma falha recebe uma ronda de correção imediata com o contexto do grupo ainda fresco.`,why:`Cinco suites partidas no fim são muito mais difíceis de corrigir do que uma de cada vez.`},"test-reachability":{title:`Todo teste novo tem de correr mesmo`,description:"Um ficheiro de teste escrito pelo developer que o comando de teste do repositório nunca executa (um script `test` enumerativo que omite o ficheiro novo) falha a verificação com o ficheiro exato, primeiro ao nível do grupo e de novo na verificação do host.",why:`Uma suite de 622 linhas com seis casos a falhar chegou verde porque nada a executou.`},"exit-code-honesty":{title:`Desconfiar de um exit 0 que reporta falhas`,description:'Um comando de verificação que sai com 0 enquanto a saída imprime falhas (linhas `FAIL:`, "3 failed", um AssertionError) é tratado como FALHADO e entregue ao corretor com o harness apontado como o defeito.',why:`Um runner de testes caseiro que nunca definia um exit code diferente de zero entregou três testes vermelhos como verdes.`},"verification-output-adoption":{title:`Adotar a saída escrita pelas próprias verificações`,description:`Se a verificação passar mas os seus comandos reescreverem ficheiros versionados (um passo de lint que regenera um mapeamento), o host mantém esses ficheiros no candidato e verifica mais uma vez; o reviewer e o fixer não os devem reverter.`,why:`Um passo de lint que regenerava um ficheiro versionado fazia cada execução verde parecer um candidato alterado e gastava correções num não-defeito.`}}},A=`Alterações não guardadas`,j={title:`Funções personalizadas`,hint:`Defina instruções reutilizáveis e permissões explícitas para as funções do fluxo.`,unsupported:`Atualize o Core para editar funções personalizadas.`,remove:`Remover {{id}}`,access:`Acesso ao código`,read:`Somente leitura`,write:`Leitura e escrita`,artifacts:`Acesso aos artefatos OpenSpec`,none:`Nenhum`,tasks:`Somente caixas de tarefas`,all:`Todos os artefatos da alteração`,skill:`Skill do OpenSpec`,noSkill:`Nenhuma skill associada`,prompt:`Instruções da função`,id:`ID da função`,add:`Adicionar função`,invalidId:`Use um ID único em minúsculas que comece com uma letra, com até 64 letras, números ou hífens. Os IDs integrados são reservados.`,escalationHint:`Somente uma correção permitida do protocolo pode usar o modelo de escalonamento. Nenhuma tentativa extra é adicionada.`},M={title:`Instruções de execução`,hint:`O Core guarda estas instruções para o próximo turno de agente compatível. O envio não responde a perguntas nem concede aprovações.`,label:`Instruções adicionais`,send:`Enviar instruções`,accepted:`Recebidas pelo Core; aguardando utilização.`,pending:`Aguardando um turno de agente`,consumed:`Utilizadas por um agente`,counts:`Pendentes: {{pending}} · Utilizadas: {{consumed}}`,failed:`Não foi possível enviar as instruções. Tente novamente para confirmar a mesma mensagem.`,unavailable:`Os detalhes dos recibos estão indisponíveis.`,unreported:`Esta versão do Core não informa a utilização.`,truncated:`São apresentados apenas os recibos recentes e as mensagens pendentes.`},N={title:`Valores padrão do papel do Core`,hint:`Estes valores do arquivo aplicam-se a novos workflows. As configurações explícitas do projeto têm prioridade; as execuções salvas mantêm as configurações fixadas.`,invalid:`Corrija o cabeçalho YAML no editor antes de alterar os campos do papel.`,escalationEffort:`Esforço de raciocínio do modelo superior`},P={title:`Retenção do histórico`,description:`Elimine históricos expirados e versões do Core sem uso. Históricos eliminados não podem ser retomados nem bifurcados. Execuções ativas ou recuperáveis e entregas pendentes ficam protegidas; registos de trabalhos e custos são mantidos.`,forever:`Manter o histórico indefinidamente`,days:`Dias de retenção`,save:`Guardar retenção`,preview:`Pré-visualizar limpeza`,collect:`Eliminar histórico expirado`,previewSummary:`Elegíveis: {{runs}} históricos e {{packages}} versões do Core sem uso.`,collectedSummary:`Expirados: {{runs}} históricos. Removidas: {{packages}} versões do Core sem uso.`,more:`{{count}} execuções adicionais.`,failed:`Não foi possível consultar ou atualizar a retenção.`,expired:`Este histórico expirou segundo a política do projeto. O registo do trabalho e a contabilidade continuam disponíveis.`,loading:`A carregar a política…`,states:{protected:`Mantido`,eligible:`Elegível`,expired:`Expirado`,cleanup_pending:`Limpeza pendente`,busy:`Em uso`,error:`Falha na inspeção`},reasons:{disabled:`Retenção indefinida`,recoverable:`Recuperação ainda disponível`,active:`Execução ativa`,human_pending:`A aguardar resposta humana`,interrupted_writes:`Escritas interrompidas por rever`,delivery_pending:`Entrega pendente`,fork_pending:`Existe uma bifurcação dependente`,unknown_terminal_time:`Data de conclusão desconhecida`,within_retention:`Dentro do período de retenção`}},F={title:`Loop agents`,hint:`These definitions are shared by every project using this loop. Duplicate the loop to customize a separate workflow.`,legacy:`This saved loop still uses historical project agents. Import them or enable loop agents before changing its configuration.`,enable:`Use loop agents`,import:`Import current project agents`,restoreDefinition:`Usar a definição do Core`,default:`Provider default`,effort:`Reasoning effort`,escalationModel:`Escalation model`,escalationEffort:`Escalation effort`,policy:`Workflow policy`,maxAttempts:`Maximum correction attempts`,maxTokens:`Token budget`,maxCostUsd:`Cost budget (USD)`,timeoutMs:`Run timeout (ms)`,projectHint:`Configure repository checks here. Agent definitions, models and workflow policy are configured in the loop editor. Historical project agents can be imported into a duplicated loop.`,showUnused:`Also show agents not used in this loop`,stepTitle:`Step agent and options`,stepHint:`Edit this step’s agent definition and engine. Steps using the same role in this loop share these settings.`,inheritProvider:`Herdar o fornecedor da missão`,inheritDefinition:`Segue a definição do Core: cada atualização do Core renova-a automaticamente.`,customizeDefinition:`Personalizar para este loop`,coreDefinitionUnavailable:`Pré-visualização indisponível até instalar um runtime do Core.`,turnLimits:{title:`Limites de turnos`,hint:`Cada chamada a uma ferramenta do agente conta como um turno. Se um passo parar com "reached the configured limit of N turns", aumente aqui o seu limite, guarde e publique; os novos lançamentos vão usá-lo. Vazio usa o valor por defeito do Core ({{turns}}). As definições do projeto não alteram as execuções de loops.`,role:`Função {{role}}`,input:`Máximo de turnos para {{steps}} (função {{role}})`,stepHint:`A função {{role}} para após {{turns}} turnos. Os passos que partilham esta função partilham o limite; aplica-se aos novos lançamentos depois de publicar.`}},I={title:e,description:t,loading:n,loadFailed:r,retry:i,unavailable:a,save:o,saving:s,saved:c,saveFailed:l,approvalBeforeArchive:u,providers:d,cliNames:f,roles:p,agents:m,limits:h,verification:g,setup:_,runs:v,roleHints:y,review:b,architect:x,metrics:S,prompts:C,efficiency:w,evidence:T,loopRoles:E,pipeline:D,fixer:O,guardrails:k,unsavedChanges:A,customRoles:j,steering:M,studioRole:N,retention:P,loopAgents:F};export{m as agents,u as approvalBeforeArchive,x as architect,f as cliNames,j as customRoles,I as default,t as description,w as efficiency,T as evidence,O as fixer,k as guardrails,h as limits,r as loadFailed,n as loading,F as loopAgents,E as loopRoles,S as metrics,D as pipeline,C as prompts,d as providers,P as retention,i as retry,b as review,y as roleHints,p as roles,v as runs,o as save,l as saveFailed,c as saved,s as saving,_ as setup,M as steering,N as studioRole,e as title,a as unavailable,A as unsavedChanges,g as verification};
1
+ var e=`Motor de agentes`,t=`Arquiteto, programador e revisor correm como fases separadas com verificação determinista entre elas. Escolha um fornecedor por função; tudo o resto tem um valor por defeito que funciona.`,n=`A carregar configurações…`,r=`Não foi possível carregar as configurações. Tente novamente antes de alterar.`,i=`Tentar novamente`,a=`Esta instalação do Core não inclui o motor de agentes. Atualize o Core antes de ativar; pode preparar as configurações enquanto está desativado.`,o=`Guardar configurações`,s=`A guardar…`,c=`Configurações guardadas`,l=`Não foi possível guardar as configurações.`,u=`Pausar para aprovação antes de concluir o fluxo`,d={title:`Fornecedores`,hint:`Os CLI usam a sessão existente. As API aceitam apenas o nome da variável de ambiente, nunca a chave. Em serviços locais, pode ficar vazio. Reatribua as funções antes de remover o fornecedor.`,entry:`Fornecedor {{index}}`,id:`ID do fornecedor`,kind:`Tipo de ligação`,cli:`CLI de programação instalado`,compatible:`Endpoint compatível com OpenAI`,command:`CLI de programação`,baseUrl:`URL base da API`,apiKeyEnv:`Variável de ambiente da chave (opcional)`,remove:`Remover fornecedor`,addCli:`Adicionar fornecedor CLI`,addLocal:`Adicionar fornecedor local / API`,show:`Mostrar ligações a fornecedores`,hide:`Ocultar ligações a fornecedores`,globalTitle:`Provedores de IA`,globalHint:`Dois tipos de provedor alimentam cada projeto: as CLIs de programação detectadas nesta máquina e os motores locais compatíveis com OpenAI que registares aqui. Atribui-os às fases do pipeline em Definições do projeto ▸ Motor de agentes. As alterações aplicam-se a novas execuções.`,label:`Nome de exibição (opcional)`,labelPlaceholder:`ex.: Máquina LAN`,defaultModel:`Modelo padrão`,defaultModelNone:`Sem padrão (primeiro descoberto)`,defaultModelPlaceholder:`ID do modelo ou alias personalizado`,customModel:`Alias personalizado…`,discoveredModels:`Modelos descobertos`,noModels:`Nenhum modelo descoberto ainda — teste a conexão.`,rates:`Tarifas (USD por 1M de tokens, opcional)`,ratesHint:`Os custos são exibidos como estimativas; deixe ambas vazias e o custo permanece desconhecido.`,inputRate:`Entrada por 1M`,outputRate:`Saída por 1M`,ratesInvalid:`Informe ambas as tarifas como números não negativos ou deixe as duas vazias.`,reasoningEffort:`O endpoint aceita esforço de raciocínio`,reasoningEffortHint:`Envia o campo reasoning_effort da OpenAI: o esforço configurado do papel em cada chamada, elevado a alto enquanto o arquiteto compacto escreve o plano. Deixe desligado a menos que o servidor o respeite.`,apiKeyEnvMissing:`{{name}} não está definida no processo do app. Defina-a no ambiente a partir do qual o app é iniciado.`,test:`Testar conexão`,testing:`Testando…`,testFailed:`Não foi possível testar a conexão.`,rename:`Renomear`,renameHint:`Renomear mantém as atribuições de papéis apontando para esta conexão.`,idLocked:`O id fica bloqueado após salvar. Use Renomear para alterá-lo.`,localBadge:`Motor local`,cliBadge:`CLI`,notDetected:`Não detectado nesta máquina`,unsaved:`Alterações não salvas`,empty:`Ainda não há conexões. Adicione um provedor local / API para começar.`,fixBeforeSave:`Corrija os campos destacados antes de salvar.`,status:{probing:`Verificando…`,reachable:`Acessível`,unauthorized:`Não autorizado`,unreachable:`Inacessível`,untested:`Nunca testado`},auth:{authenticated:`Sessão iniciada`,unauthenticated:`Sem sessão`,unknown:`Sessão desconhecida`},agentLoop:`Loop do agente`,agentLoopHint:`como o pipeline implement conduz este modelo`,agentLoop_compact:`Compacto`,agentLoop_compactHint:`Micropassos conduzidos pelo app com saída estruturada. Recomendado para modelos abaixo de ~30B.`,agentLoop_free:`Livre`,agentLoop_freeHint:`Um loop agêntico por papel, como um provedor CLI. Exige um modelo forte.`,contextWindow:`Janela de contexto (tokens)`,contextWindowHint:`Iguale ao tamanho de contexto do servidor (n_ctx / num_ctx). Usado para compactar resultados antigos de ferramentas antes de encher a janela. Padrão 32768.`,maxOutput:`Orçamento de saída por turno (tokens)`,maxOutputHint:`max_tokens de um turno de ferramentas; um turno cortado é repetido uma vez com o dobro. Conta dentro da janela de contexto, por isso é sempre limitado ao espaço restante — aumente-o se o modelo raciocina em privado (o thinking consome-o). Predefinição 8192.`,reasoningEffortRailHint:`Desligado: o seletor de esforço de raciocínio não aparece no cabeçalho do rail para este motor.`,presetTitle:`Configuração rápida`,presetSmallModel:`Recomendado para modelos pequenos`,presetSmallModelApplied:`Predefinição para modelos pequenos aplicada`,presetSmallModelHint:`Ativa o loop Compacto, encaminha o esforço de raciocínio e fixa uma janela de contexto de 32k: a combinação validada com modelos de 7–14B. Cada campo continua editável.`,cliGroup:`Ferramentas CLI`,cliGroupHint:`Detectadas nesta máquina: usam o seu próprio início de sessão, nada a configurar.`,localGroup:`Motores locais`,localGroupHint:`Endpoints compatíveis com OpenAI (llama.cpp, Ollama, vLLM, LM Studio…) acessíveis a partir desta app.`,models_one:`{{count}} modelo`,models_other:`{{count}} modelos`,expand:`Mostrar definições`,collapse:`Ocultar definições`,overflow:`Mais ações`,addLocalHero:`Adicionar motor local`,emptyLocalPitch:`Ainda não há motores locais. Aponta a app para um endpoint compatível com OpenAI para executar o pipeline no teu próprio hardware: o custo fica sob o teu controlo e nada sai da tua rede.`,defaultsGroup:`Predefinições do provedor`},f={claude:`Claude`,codex:`Codex`,gemini:`Gemini`,kimi:`Kimi`},p={architect:`Arquiteto`,developer:`Desenvolvedor`,reviewer:`Revisor`,fixer:`Corretor`,verify:`Verificação`,archive:`Conclusão`},m={title:`Atribuição de funções`,hint:`Cada papel pode usar um fornecedor e um modelo diferentes. Conexões: Definições gerais → Provedores de IA. Limite padrão: {{turns}} turnos por agente.`,provider:`Fornecedor`,model:`Modelo`,modelPlaceholder:`ID do modelo ou padrão do CLI`,maxTurns:`Máximo de turnos (por defeito {{turns}})`,defaultModel:`Por defeito ({{model}})`,thinking:`Raciocínio oculto`,thinking_off:`Desligado`,thinking_on:`Ligado`,thinkingHint:`Desligado por defeito: o raciocínio oculto gasta o orçamento de saída e minutos por turno num ciclo guiado pelo host. Ligue-o para um papel que beneficie de deliberação (enviado como chat_template_kwargs.enable_thinking; os endpoints que não o conhecem ignoram-no).`},h={title:`Limites do fluxo`,hint:`Os campos vazios usam os valores do Core: {{attempts}} tentativas de correção e {{minutes}} minutos por passo de papel. Em motores locais o timeout aplica-se a cada unidade de trabalho (um grupo de tarefas, um artefacto, uma revisão) — 45 minutos por defeito — mais um watchdog de inatividade de 20 minutos; um passo que esgota o tempo bloqueia a execução e pode ser retomado a partir do próximo grupo aberto. Os limites de tokens e USD são opcionais; os de USD exigem Claude em todos os papéis.`,maxAttempts:`Máximo de tentativas do programador (por defeito {{attempts}})`,timeoutMinutes:`Timeout em minutos (por defeito {{minutes}}; motores locais 45 por grupo de tarefas)`,maxTokens:`Máximo de tokens`,maxCostUsd:`Custo máximo (USD)`,unlimited:`Sem limite`},g={title:`Comandos de verificação`,hint:`Opcional. Correm quando o programador termina e as falhas voltam ao programador. Com a lista vazia, o arquiteto propõe as verificações do próprio projeto em cada execução; os repositórios sem verificação automática são revistos na mesma.`,detect:`Detetar verificações do projeto`,detecting:`A detetar…`,detected:`Preenchido com as verificações que este projeto já define.`,nothingDetected:`Não foi encontrado nenhum comando de teste, verificação de tipos ou build. Não há problema: o arquiteto propõe verificações em cada execução quando possível.`,detectFailed:`Não foi possível inspecionar os repositórios do projeto.`,repository:`Repositório`,command:`Comando`,reason:`Detetado em {{reason}}`,remove:`Remover`,add:`Adicionar comando`,invalidLine:`Comando de verificação vazio ou com aspas por fechar: {{line}}`,label:`Nome da verificação (opcional)`,moveUp:`Subir`,moveDown:`Descer`},_={title:`Comandos de preparação`,hint:"Comandos idempotentes que o Core executa antes de cada verificação, no checkout do repositório (por exemplo `npx playwright install chromium`).",add:`Adicionar comando de preparação`,invalidLine:`O comando de preparação está vazio ou tem uma aspa não fechada: {{line}}`,repository:`Repositório`,command:`Comando de preparação`,label:`Rótulo de preparação (opcional)`,remove:`Remover`,moveUp:`Mover comando de preparação para cima`,moveDown:`Mover comando de preparação para baixo`,empty:`Sem comandos de preparação. A verificação é executada diretamente no checkout.`},v={title:`Execuções guardadas`,refresh:`Atualizar`,hint:`Continua no worktree original com o âmbito e as configurações guardadas; o progresso aparece no registo desse trabalho. Não publica nem reinicia a entrega do Desktop. As execuções ativas param a partir dos controlos do trabalho.`,empty:`Não há execuções guardadas.`,loadFailed:`Não foi possível carregar as execuções.`,actionFailed:`Não foi possível atualizar esta execução.`,phase:`Próxima fase: {{phase}}`,approve:`Aprovar conclusão`,recover:`Recuperar fase interrompida`,resume:`Retomar`,cancel:`Cancelar continuação`,status:{running:`A continuar…`,succeeded:`Concluído`,failed:`Falhou`,blocked:`Bloqueado`,paused:`Em pausa`,cancelled:`Cancelado`,interrupted:`Interrompido`,unavailable:`Indisponível`,expired:`Expirado`},question:`O arquiteto pergunta:`,answerLabel:`A sua resposta`,answerPlaceholder:`Responda à pergunta; o arquiteto continua com ela.`,answer:`Responder e retomar`,viewLog:`Ver log do job`,implementation:`Implementação`,preserveProgress:`Continue a partir da fase indicada, preservando o trabalho e as configurações guardadas.`,reviewDelivery:`Implementação concluída. Reveja o resultado no log antes da entrega; esta continuação não o publicou.`,prepareDelivery:`Preparar entrega`,dismiss:`Descartar`,selectRecovery:`Selecione as tentativas interrompidas a recuperar`},y={architect:`Lê o código e escreve a proposta, o design, as tarefas e a spec. Só leitura.`,developer:`Implementa as tarefas com testes. Pode editar ficheiros e executar comandos na sandbox do CLI.`,reviewer:`Confere o resultado com a spec e a evidência de verificação. Só leitura.`},b={title:`Limite de revisão`,hint:`Campos vazios usam o limite do Core. Os valores só podem elevá-lo: pontuação geral de pelo menos {{score}}, segurança de pelo menos {{security}}, outros aspetos de pelo menos {{aspect}}.`,minScore:`Pontuação geral mínima (padrão {{score}})`,aspects:{type_correctness:`Correção de tipos (padrão {{score}})`,pattern_adherence:`Aderência a padrões (padrão {{score}})`,test_coverage:`Cobertura de testes (padrão {{score}})`,security:`Segurança (padrão {{score}})`,architectural_alignment:`Alinhamento arquitetural (padrão {{score}})`}},x={title:`Confiança do arquiteto`,hint:`Após uma passagem de investigação autónoma, um design ainda com baixa confiança pausa com a pergunta do arquiteto ou prossegue com suposições declaradas.`,onLowConfidence:`Com baixa confiança`,ask:`Perguntar (pausar com a pergunta)`,proceed:`Prosseguir com suposições declaradas`},S={title:`Consumo e tempo`,hint:`Inclui correções e chamadas falhadas. O tempo dos agentes inclui as ferramentas. Os tokens em cache fazem parte dos tokens de entrada.`,unknown:`Indisponível`,duration:`Tempo de execução`,agentTime:`Tempo dos agentes`,cost:`Custo reportado`,providerCalls:`Chamadas a agentes`,toolCalls:`Chamadas a ferramentas`,input:`Tokens de entrada`,output:`Tokens de saída`,uncached:`Entrada sem cache`,cacheRead:`Leituras da cache`,cacheWrite:`Escritas na cache`,partial:`Algumas tentativas não têm medições detalhadas.`,phases:`Consumo por fase`,phase:`Fase`,attempts:`Tentativas`},C={title:`Prompts dos papéis dos agentes`,description:`Veja e edite as instruções de cada papel. São partilhadas por todos os projetos e fornecedores; as alterações aplicam-se a novos trabalhos. Os trabalhos retomados mantêm os prompts originais.`,definition:`Definição de {{role}}`,default:`Predefinição de fábrica`,custom:`Personalizado`,restore:`Restaurar predefinição`,contracts:`O contexto da spec, o fluxo OpenSpec e o formato de resposta obrigatório são adicionados automaticamente e não são editados aqui.`,invalid:`Cada definição deve conter entre 1 e 20.000 caracteres, com texto não vazio e sem bytes nulos.`,saved:`Prompts dos papéis guardados`,unsaved:`Alterações por guardar`,discard:`Descartar alterações`,save:`Guardar prompts`,fixerHint:`Usado apenas em rondas de correção: após uma verificação falhada ou uma revisão rejeitada. Corre no motor do developer salvo se Definições ▸ Motor dos agentes ▸ Corretor indicar um próprio. Um fornecedor CLI que retoma a sessão do developer recebe o seguimento curto de correção; a definição aplica-se sempre que arranca uma sessão nova (motores locais, motor corretor, sessão perdida).`},w={title:`Eficiência da implementação`,scope:`Aplica-se a novas execuções. As execuções guardadas mantêm a configuração e o motor originais.`,effort:`Esforço de raciocínio`,providerDefault:`Padrão do fornecedor`,unconfirmed:`Não confirmado`,unknownSupport:`O suporte deste modelo e transporte não está confirmado.`,escalation:`Permitir um nível superior com o mesmo fornecedor`,baseRequired:`Selecione primeiro um modelo base explícito.`,escalationModel:`Modelo de nível superior`,triggers:{architect:`Apenas a investigação aprofundada existente pode selecionar este nível.`,developer:`Após dois candidatos falhados, a próxima tentativa permitida pode selecionar este nível.`,reviewer:`Apenas para reparar respostas inválidas; rejeitar código não ativa este nível.`,fixer:`Só uma rodada de correção pode alcançar este nível; as primeiras passagens nunca executam o corretor.`},contextMode:`Contexto do repositório`,reviewMode:`Revisão de correções`,planning:`Profundidade do planeamento`,adaptive:`Adaptativo`,full:`Completo`,developerChecks:`Aceitar verificações adicionais propostas pelo programador`,concurrency:`Máximo de verificações simultâneas`,concurrencyHint:`Padrão: 1. Apenas verificações independentes declaradas pelo anfitrião em repositórios diferentes podem executar em conjunto. Sem reutilização por padrão.`,checkCapabilities:`Verificar compatibilidade dos modelos`,capabilitiesFailed:`Compatibilidade não confirmada. Atualize Core ou mantenha os padrões do fornecedor.`},T={title:`Evidências de verificação`,acceptance:`Aceitação técnica`,acceptanceStatus:{pending:`Pendente`,validated:`Validado`,"with-exceptions":`Com exceções`,blocked:`Bloqueado`},calls:`Chamadas aos agentes`,executed:`Verificações executadas`,reused:`Verificações reutilizadas`,unknown:`Indisponível`,unavailable:`Evidência indisponível. O resultado guardado não prova a validade atual.`,current:`Candidato e plano atuais`,historical:`Resultado histórico`,moreChecks:`Mais verificações`,output:`Saída da verificação`,empty:`Sem saída`,truncated:`Página limitada ou captura truncada.`,nextPage:`Página seguinte`,status:{passed:`Aprovado`,failed:`Falhou`,cancelled:`Cancelado`,interrupted:`Interrompido`},disposition:{executed:`Executado`,reused:`Reutilizado`,"not-run":`Não executado`},origin:`Origem`,origins:{host:`Anfitrião`,architect:`Arquiteto`,developer:`Programador`,"frozen-runtime-config":`Configuração guardada`,"project-role":`Papel do projeto`,default:`Padrão`,"explicit-launch-override":`Fornecedor escolhido para esta execução`,"loop-role":`Papel do loop`},reuseDisabled:`Reutilização desativada para esta verificação.`,reuseConfirmed:`Reutilizado após confirmar entradas e ferramentas idênticas.`,inputsChanged:`As entradas mudaram durante a verificação; resultado invalidado.`,reuseUnproven:`Sem resultado atual com entradas idênticas comprovadas; executado novamente.`,original:`Execução original`,requested:`Solicitado`,reported:`Reportado`},E={title:`Papéis do loop`,hint:`Motores dos papéis do loop quando um rail é lançado com o motor «Papéis». Os papéis do pipeline acima (architect, developer, reviewer) já vêm desta configuração do runtime.`,verifier:`Verificador`,verifierHint:`Todos os passos de IA do loop fora do core: verify, fix e passos de IA personalizados.`,decider:`Decisor`,deciderHint:`O Loop Decider que lê o veredicto e escolhe o passo seguinte — um modelo barato e rápido é a escolha natural.`,inherit:`Herdar o principal`,model:`Modelo`,effort:`Esforço de raciocínio`,disabled:`O runtime de agentes está desativado — os rails lançados com o motor «Papéis» são recusados até ser ativado.`,saveFailed:`Não foi possível guardar os papéis do loop.`},D={title:`Pipeline de implementação`,explainer:`Estas fases executam nesta ordem em cada implementação. Quando o motor do rail é "{{roles}}", cada fase usa o motor configurado abaixo — fornecedor, modelo e esforço diferentes por fase. Escolher um motor concreto no rail executa todas as fases nesse motor.`,host:`Host`,noCommand:`sem comando`,inherits:`Herda o principal`,inheritsDeveloper:`Herda do desenvolvedor`,open:`Abrir`,collapse:`Recolher`,groups:{core:{title:`Pipeline principal`,hint:`Executa dentro de cada implementação: planear, construir, verificar, corrigir, rever.`},loop:{title:`Passos do loop`,hint:`Passos de IA do loop do rail que envolve a execução (verificar → decidir → corrigir) e dos loops personalizados; herdam o motor principal se não forem definidos.`,chip:`loop do rail`}},phases:{architect:{name:`Arquiteto`,purpose:`Lê o código e escreve a proposta, o design e as tarefas.`},developer:{name:`Desenvolvedor`,purpose:`Implementa as tarefas com testes.`},verification:{name:`Verificação`,purpose:`O host executa as suas verificações; as falhas voltam ao desenvolvedor.`},fixer:{name:`Corretor`,purpose:`Corrige o que a verificação ou a revisão rejeitam; herda do desenvolvedor se não for configurado.`},reviewer:{name:`Revisor`,purpose:`Confere o resultado com a spec e as evidências.`},verifier:{name:`Verificador`,purpose:`Passos de IA verify, fix e personalizados do loop.`},decider:{name:`Decisor`,purpose:`Lê o veredito e escolhe o próximo passo do loop.`}}},O={title:`Motor do corretor`,inherit:`Herdar desenvolvedor`,own:`Motor próprio`,hint:`Só é executado em rodadas de correção: após uma verificação falha ou uma revisão rejeitada; as primeiras passagens continuam no desenvolvedor. Um modelo mais forte ou na nuvem aqui compensa quando o desenvolvedor é um modelo local barato.`},k={title:`Guarda-corpos`,intro:`Regras de processo que o host aplica em torno dos modelos locais para que um modelo pequeno não descarrile. Todas ativas por padrão; desative uma apenas para ajustar o processo. Provedores CLI nunca são afetados.`,unsupported:`Esta instalação do Core não expõe guarda-corpos configuráveis. Atualize o Core para ajustá-los; as regras integradas continuam a aplicar-se.`,active:`{{on}} de {{total}} ativos`,reset:`Restaurar padrões`,phases:{architect:`Arquiteto`,developer:`Desenvolvedor`,host:`Host`},unknown:`Um guarda-corpo adicionado por um Core mais recente; este app ainda não tem descrição para ele.`,items:{"plan-validation":{title:`Plano de tarefas validado`,description:`Rejeita planos que apontam para openspec/, listam nomes de arquivo soltos como tarefas, têm poucas tarefas/grupos para a spec ou deixam critérios de aceitação descobertos; o arquiteto tenta novamente.`,why:`Um plano vago ou incompleto é a razão nº 1 para um modelo desenvolvedor pequeno escrever stubs.`},"genuine-blocking-question":{title:`Apenas perguntas bloqueantes reais`,description:`O arquiteto só pode pausar a execução com uma pergunta real terminada em '?', nunca com texto de exemplo copiado.`,why:`Modelos pequenos repetem os marcadores do prompt e bloqueariam todas as execuções.`},"plan-language-hint":{title:`Planejar na linguagem do repositório`,description:`Informa ao arquiteto a linguagem principal para que os nomes de arquivo das tarefas tenham a extensão correta.`,why:`Um plano JS num repo TypeScript torna impossível marcar as tarefas.`},"frozen-plan-writes":{title:`Artefatos de planejamento estão congelados`,description:`O desenvolvedor não pode escrever em openspec/; o plano pertence ao host.`,why:`Modelos 'implementam' editando o plano em vez do código.`},"primary-language":{title:`Lembrete da linguagem principal`,description:`Cada grupo de tarefas recebe a linguagem principal do repositório; arquivos novos devem usá-la.`,why:`Evita uma segunda implementação em outra linguagem.`},"duplicate-sibling":{title:`Sem módulos gêmeos entre linguagens`,description:`Recusa board.js quando board.ts já existe; estenda o módulo existente.`,why:`Gêmeos compilam ambos e os testes importam o errado.`},"one-test-per-module":{title:`Um arquivo de teste por módulo`,description:`Recusa board.tick.test.ts quando board.test.ts existe; estenda-o em vez disso.`,why:`Senão cada passada de correção adiciona uma suíte nova.`},"empty-write":{title:`Sem sobrescritas vazias`,description:`Uma escrita vazia sobre um arquivo com conteúdo é recusada; escreva o conteúdo completo ou aplique um patch.`,why:`Uma passada de 'limpeza' certa vez deixou index.ts com 0 linhas.`},"evidence-gated-ticking":{title:`Evidência antes de marcar uma tarefa`,description:`Uma tarefa que nomeia arquivos só está concluída quando eles existem e não são stubs (extensões irmãs aceitas).`,why:`Sem isso, 'concluído' é só uma afirmação e a verificação roda contra nada.`},"inventory-retry":{title:`Tentar de novo com o inventário real`,description:`Quando o modelo desiste alegando que o repo está vazio sem estar, tenta uma vez mais com a lista de arquivos.`,why:`Segunda chance barata em vez de um passo falhado.`},"synthetic-corrections":{title:`Transformar feedback em tarefas`,description:`Quando todas as tarefas estão marcadas mas review/verify falharam, o feedback vira tarefas de correção concretas.`,why:`Senão o desenvolvedor responde 'já está feito' e nada muda.`},"silent-group-closure":{title:`Fechar grupos silenciosos, manter seus arquivos`,description:`Um grupo cujo modelo para de responder é fechado creditando os arquivos que escreveu e deixando suas tarefas abertas, em vez de falhar a execução.`,why:`Um modelo 9B escreveu cinco módulos, silenciou e toda a execução falhou.`},"environment-repair":{title:`O host repara o ambiente`,description:`Dependências ou ferramentas de teste ausentes (npm install, ts-jest, @types/jest, módulos de config do Jest) são instaladas pelo host e a verificação roda de novo uma vez.`,why:`O modelo não consegue consertar o ambiente e gasta correções tentando.`},"lockfile-repair":{title:`Descartar lockfiles escritos à mão`,description:`Um package-lock.json inventado pelo modelo (EINTEGRITY/ETARGET) é removido e a instalação repetida uma vez.`,why:`Hashes inventados nunca instalam.`},"verify-idle-timeout":{title:`Parar testes travados`,description:`Um comando de verificação sem saída por 5 minutos é interrompido e reportado como provável travamento (última saída incluída).`,why:`Senão um laço while num teste segura a execução até o limite de 15 minutos.`},"verify-per-group":{title:`Verificar após cada grupo`,description:`Executa o comando de teste do repositório logo após cada grupo de tarefas; uma falha recebe uma ronda de correção imediata com o contexto do grupo ainda fresco.`,why:`Cinco suites partidas no fim são muito mais difíceis de corrigir do que uma de cada vez.`},"test-reachability":{title:`Todo teste novo tem de correr mesmo`,description:"Um ficheiro de teste escrito pelo developer que o comando de teste do repositório nunca executa (um script `test` enumerativo que omite o ficheiro novo) falha a verificação com o ficheiro exato, primeiro ao nível do grupo e de novo na verificação do host.",why:`Uma suite de 622 linhas com seis casos a falhar chegou verde porque nada a executou.`},"exit-code-honesty":{title:`Desconfiar de um exit 0 que reporta falhas`,description:'Um comando de verificação que sai com 0 enquanto a saída imprime falhas (linhas `FAIL:`, "3 failed", um AssertionError) é tratado como FALHADO e entregue ao corretor com o harness apontado como o defeito.',why:`Um runner de testes caseiro que nunca definia um exit code diferente de zero entregou três testes vermelhos como verdes.`},"verification-output-adoption":{title:`Adotar a saída escrita pelas próprias verificações`,description:`Se a verificação passar mas os seus comandos reescreverem ficheiros versionados (um passo de lint que regenera um mapeamento), o host mantém esses ficheiros no candidato e verifica mais uma vez; o reviewer e o fixer não os devem reverter.`,why:`Um passo de lint que regenerava um ficheiro versionado fazia cada execução verde parecer um candidato alterado e gastava correções num não-defeito.`}}},A=`Alterações não guardadas`,j={title:`Funções personalizadas`,hint:`Defina instruções reutilizáveis e permissões explícitas para as funções do fluxo.`,unsupported:`Atualize o Core para editar funções personalizadas.`,remove:`Remover {{id}}`,access:`Acesso ao código`,read:`Somente leitura`,write:`Leitura e escrita`,artifacts:`Acesso aos artefatos OpenSpec`,none:`Nenhum`,tasks:`Somente caixas de tarefas`,all:`Todos os artefatos da alteração`,skill:`Skill do OpenSpec`,noSkill:`Nenhuma skill associada`,prompt:`Instruções da função`,id:`ID da função`,add:`Adicionar função`,invalidId:`Use um ID único em minúsculas que comece com uma letra, com até 64 letras, números ou hífens. Os IDs integrados são reservados.`,escalationHint:`Somente uma correção permitida do protocolo pode usar o modelo de escalonamento. Nenhuma tentativa extra é adicionada.`},M={title:`Instruções de execução`,hint:`O Core guarda estas instruções para o próximo turno de agente compatível. O envio não responde a perguntas nem concede aprovações.`,label:`Instruções adicionais`,send:`Enviar instruções`,accepted:`Recebidas pelo Core; aguardando utilização.`,pending:`Aguardando um turno de agente`,consumed:`Utilizadas por um agente`,counts:`Pendentes: {{pending}} · Utilizadas: {{consumed}}`,failed:`Não foi possível enviar as instruções. Tente novamente para confirmar a mesma mensagem.`,unavailable:`Os detalhes dos recibos estão indisponíveis.`,unreported:`Esta versão do Core não informa a utilização.`,truncated:`São apresentados apenas os recibos recentes e as mensagens pendentes.`},N={title:`Valores padrão do papel do Core`,hint:`Estes valores do arquivo aplicam-se a novos workflows. As configurações explícitas do projeto têm prioridade; as execuções salvas mantêm as configurações fixadas.`,invalid:`Corrija o cabeçalho YAML no editor antes de alterar os campos do papel.`,escalationEffort:`Esforço de raciocínio do modelo superior`},P={title:`Retenção do histórico`,description:`Elimine históricos expirados e versões do Core sem uso. Históricos eliminados não podem ser retomados nem bifurcados. Execuções ativas ou recuperáveis e entregas pendentes ficam protegidas; registos de trabalhos e custos são mantidos.`,forever:`Manter o histórico indefinidamente`,days:`Dias de retenção`,save:`Guardar retenção`,preview:`Pré-visualizar limpeza`,collect:`Eliminar histórico expirado`,previewSummary:`Elegíveis: {{runs}} históricos e {{packages}} versões do Core sem uso.`,collectedSummary:`Expirados: {{runs}} históricos. Removidas: {{packages}} versões do Core sem uso.`,more:`{{count}} execuções adicionais.`,failed:`Não foi possível consultar ou atualizar a retenção.`,expired:`Este histórico expirou segundo a política do projeto. O registo do trabalho e a contabilidade continuam disponíveis.`,loading:`A carregar a política…`,states:{protected:`Mantido`,eligible:`Elegível`,expired:`Expirado`,cleanup_pending:`Limpeza pendente`,busy:`Em uso`,error:`Falha na inspeção`},reasons:{disabled:`Retenção indefinida`,recoverable:`Recuperação ainda disponível`,active:`Execução ativa`,human_pending:`A aguardar resposta humana`,interrupted_writes:`Escritas interrompidas por rever`,delivery_pending:`Entrega pendente`,fork_pending:`Existe uma bifurcação dependente`,unknown_terminal_time:`Data de conclusão desconhecida`,within_retention:`Dentro do período de retenção`}},F={title:`Agentes do loop`,hint:`Estas definições são partilhadas por todos os projetos que usam este loop. Duplique o loop para personalizar um workflow separado.`,legacy:`Este loop guardado ainda usa os agentes históricos do projeto. Importe-os ou ative os agentes do loop antes de alterar a sua configuração.`,enable:`Usar agentes do loop`,import:`Importar agentes do projeto atual`,restoreDefinition:`Usar a definição do Core`,default:`Predefinição do fornecedor`,effort:`Esforço de raciocínio`,escalationModel:`Modelo de escalonamento`,escalationEffort:`Esforço de escalonamento`,policy:`Política do workflow`,maxAttempts:`Máximo de tentativas de correção`,maxTokens:`Orçamento de tokens`,maxCostUsd:`Orçamento de custo (USD)`,timeoutMs:`Tempo limite de execução (ms)`,projectHint:`Configure aqui as verificações do repositório. As definições de agentes, os modelos e a política do workflow são configurados no editor de loops. Os agentes históricos do projeto podem ser importados para um loop duplicado.`,showUnused:`Mostrar também agentes não usados neste loop`,stepTitle:`Agente e opções do passo`,stepHint:`Edite a definição do agente e o motor deste passo. Os passos deste loop que usam a mesma função partilham estas definições.`,inheritProvider:`Herdar o fornecedor da missão`,inheritDefinition:`Segue a definição do Core: cada atualização do Core renova-a automaticamente.`,customizeDefinition:`Personalizar para este loop`,coreDefinitionUnavailable:`Pré-visualização indisponível até instalar um runtime do Core.`,turnLimits:{title:`Limites de turnos`,hint:`Cada chamada a uma ferramenta do agente conta como um turno. Se um passo parar com "reached the configured limit of N turns", aumente aqui o seu limite, guarde e publique; os novos lançamentos vão usá-lo. Vazio usa o valor por defeito do Core ({{turns}}). As definições do projeto não alteram as execuções de loops.`,role:`Função {{role}}`,input:`Máximo de turnos para {{steps}} (função {{role}})`,stepHint:`A função {{role}} para após {{turns}} turnos. Os passos que partilham esta função partilham o limite; aplica-se aos novos lançamentos depois de publicar.`}},I={label:`Sugestão de família de modelos para o revisor`,title:`Execute o revisor com {{provider}}: uma família de modelos diferente encontra erros diferentes`,body:`O desenvolvedor e o revisor usam atualmente o mesmo provedor. É apenas uma sugestão: nada muda a menos que você a aplique.`,apply:`Aplicar`,dismiss:`Dispensar`},L={title:`Motor da triagem de specs`,hint:`A triagem lê cada spec nova ou editada e recomenda o loop com que lançá-la. É uma chamada curta e estruturada por spec. Por padrão, usa o provedor principal do projeto com o seu modelo mais barato.`,provider:`Provedor da triagem`,inherit:`Provedor principal`,model:`Modelo`,cheapestModel:`Modelo mais barato (padrão)`,loading:`Carregando o motor da triagem…`,loadFailed:`Não foi possível ler o motor da triagem. A triagem continua usando o provedor principal; reabra estas configurações para tentar de novo.`,saveFailed:`O motor da triagem não foi salvo. A escolha anterior é mantida.`},R={title:e,description:t,loading:n,loadFailed:r,retry:i,unavailable:a,save:o,saving:s,saved:c,saveFailed:l,approvalBeforeArchive:u,providers:d,cliNames:f,roles:p,agents:m,limits:h,verification:g,setup:_,runs:v,roleHints:y,review:b,architect:x,metrics:S,prompts:C,efficiency:w,evidence:T,loopRoles:E,pipeline:D,fixer:O,guardrails:k,unsavedChanges:A,customRoles:j,steering:M,studioRole:N,retention:P,loopAgents:F,reviewerSuggestion:I,triageEngine:L};export{m as agents,u as approvalBeforeArchive,x as architect,f as cliNames,j as customRoles,R as default,t as description,w as efficiency,T as evidence,O as fixer,k as guardrails,h as limits,r as loadFailed,n as loading,F as loopAgents,E as loopRoles,S as metrics,D as pipeline,C as prompts,d as providers,P as retention,i as retry,b as review,I as reviewerSuggestion,y as roleHints,p as roles,v as runs,o as save,l as saveFailed,c as saved,s as saving,_ as setup,M as steering,N as studioRole,e as title,L as triageEngine,a as unavailable,A as unsavedChanges,g as verification};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-CNC7AqOf.js";var t=e({agents:()=>g,approvalBeforeArchive:()=>f,architect:()=>C,cliNames:()=>m,customRoles:()=>N,default:()=>B,description:()=>r,efficiency:()=>E,evidence:()=>D,fixer:()=>A,guardrails:()=>j,limits:()=>_,loadFailed:()=>a,loading:()=>i,loopAgents:()=>L,loopRoles:()=>O,metrics:()=>w,pipeline:()=>k,prompts:()=>T,providers:()=>p,retention:()=>I,retry:()=>o,review:()=>S,reviewerSuggestion:()=>R,roleHints:()=>x,roles:()=>h,runs:()=>b,save:()=>c,saveFailed:()=>d,saved:()=>u,saving:()=>l,setup:()=>y,steering:()=>P,studioRole:()=>F,title:()=>n,triageEngine:()=>z,unavailable:()=>s,unsavedChanges:()=>M,verification:()=>v}),n=`Agent runtime`,r=`Architect, developer and reviewer run as separate phases with deterministic verification in between. Pick a provider per role; everything else has a working default.`,i=`Loading runtime settings…`,a=`Could not load runtime settings. Retry before making changes.`,o=`Retry`,s=`This Core installation does not include the agent runtime. Update Core before enabling it; you can prepare settings while disabled.`,c=`Save runtime settings`,l=`Saving…`,u=`Runtime settings saved`,d=`Could not save runtime settings.`,f=`Pause for approval before completing the workflow`,p={title:`Providers`,hint:`CLI providers use their existing login. API providers accept an environment variable name only, never an API key. Local endpoints can leave it blank. Assign another provider to a role before removing its current provider.`,entry:`Provider {{index}}`,id:`Provider ID`,kind:`Connection type`,cli:`Installed coding CLI`,compatible:`OpenAI-compatible endpoint`,command:`Coding CLI`,baseUrl:`API base URL`,apiKeyEnv:`API key environment variable (optional)`,remove:`Remove provider`,addCli:`Add CLI provider`,addLocal:`Add local / API provider`,show:`Show provider connections`,hide:`Hide provider connections`,globalTitle:`AI providers`,globalHint:`Two kinds of provider power every project: coding CLIs detected on this machine and local OpenAI-compatible engines you register here. Assign them to the pipeline phases in Project settings ▸ Agent engine. Changes apply to new runs.`,label:`Display name (optional)`,labelPlaceholder:`e.g. LAN box`,defaultModel:`Default model`,defaultModelNone:`No default (first discovered)`,defaultModelPlaceholder:`Model id or custom alias`,customModel:`Custom alias…`,discoveredModels:`Discovered models`,noModels:`No models discovered yet — test the connection.`,rates:`Rates (USD per 1M tokens, optional)`,ratesHint:`Costs are shown as estimates; leave both empty and cost stays unknown.`,inputRate:`Input per 1M`,outputRate:`Output per 1M`,ratesInvalid:`Enter both rates as non-negative numbers, or leave both empty.`,reasoningEffort:`Endpoint accepts reasoning effort`,reasoningEffortHint:`Sends the OpenAI reasoning_effort field: the role's configured effort on every call, raised to high while the Compact architect writes the plan. Leave off unless the server honours it.`,apiKeyEnvMissing:`{{name}} is not set in the app process. Set it in the environment the app is launched from.`,test:`Test connection`,testing:`Testing…`,testFailed:`Could not test the connection.`,rename:`Rename`,renameHint:`Renaming keeps role assignments pointing at this connection.`,idLocked:`The id is locked once saved. Use Rename to change it.`,localBadge:`Local engine`,cliBadge:`CLI`,notDetected:`Not detected on this machine`,unsaved:`Unsaved changes`,empty:`No connections yet. Add a local / API provider to get started.`,fixBeforeSave:`Fix the highlighted fields before saving.`,status:{probing:`Probing…`,reachable:`Reachable`,unauthorized:`Not authorized`,unreachable:`Unreachable`,untested:`Never tested`},auth:{authenticated:`Signed in`,unauthenticated:`Not signed in`,unknown:`Sign-in unknown`},agentLoop:`Agent loop`,agentLoopHint:`how the implement pipeline drives this model`,agentLoop_compact:`Compact`,agentLoop_compactHint:`Host-driven micro-steps with structured output. Recommended for models under ~30B.`,agentLoop_free:`Free`,agentLoop_freeHint:`One agentic loop per role, like a CLI provider. Needs a strong model.`,contextWindow:`Context window (tokens)`,contextWindowHint:`Match the server's context size (n_ctx / num_ctx). Used to compact old tool results before the window fills. Default 32768.`,maxOutput:`Output budget per turn (tokens)`,maxOutputHint:`max_tokens of one tool turn; a turn cut off by it is retried once at double. Counts inside the context window, so it is always capped to the room left — raise it when the model thinks privately (thinking counts against it). Default 8192.`,reasoningEffortRailHint:`Off: the reasoning-effort selector is hidden in the rail header for this engine.`,presetTitle:`Quick setup`,presetSmallModel:`Recommended for small models`,presetSmallModelApplied:`Small-model preset applied`,presetSmallModelHint:`Sets Compact loop, forwards reasoning effort and a 32k context window — the combination validated with 7–14B models. You can still change each field.`,cliGroup:`CLI tools`,cliGroupHint:`Detected on this machine — they use their own login, nothing to configure.`,localGroup:`Local engines`,localGroupHint:`OpenAI-compatible endpoints (llama.cpp, Ollama, vLLM, LM Studio…) reachable from this app.`,models_one:`{{count}} model`,models_other:`{{count}} models`,expand:`Show settings`,collapse:`Hide settings`,overflow:`More actions`,addLocalHero:`Add local engine`,emptyLocalPitch:`No local engine yet. Point the app at an OpenAI-compatible endpoint to run the pipeline on your own hardware — cost stays under your control and nothing leaves your network.`,defaultsGroup:`Provider defaults`},m={claude:`Claude`,codex:`Codex`,gemini:`Gemini`,kimi:`Kimi`},h={architect:`Architect`,developer:`Developer`,reviewer:`Reviewer`,fixer:`Fixer`,verify:`Verification`,archive:`Completion`},g={title:`Role assignments`,hint:`Each role can use a different provider and model. Manage connections in General settings → AI providers. Default limit: {{turns}} turns per agent.`,provider:`Provider`,model:`Model`,modelPlaceholder:`Model ID or CLI default`,maxTurns:`Maximum turns (default {{turns}})`,defaultModel:`Default ({{model}})`,thinking:`Private thinking`,thinking_off:`Off`,thinking_on:`On`,thinkingHint:`Off by default: hidden reasoning spends the output budget and minutes per turn in a host-driven loop. Turn it on for a role that benefits from deliberation (sent as chat_template_kwargs.enable_thinking; ignored by endpoints that do not know it).`},_={title:`Workflow limits`,hint:`Empty fields use Core defaults: {{attempts}} correction attempts and {{minutes}} minutes per role step. On local engines the timeout applies to each unit of work (a task group, an artifact, a review) — 45 minutes by default — plus a 20-minute idle watchdog; a step that runs out of time blocks the run and can be resumed from the next open task group. Token and USD limits are optional; USD limits require Claude for every AI role.`,maxAttempts:`Maximum developer attempts (default {{attempts}})`,timeoutMinutes:`Timeout in minutes (default {{minutes}}; local engines 45 per task group)`,maxTokens:`Maximum tokens`,maxCostUsd:`Maximum cost (USD)`,unlimited:`No limit`},v={title:`Verification commands`,hint:`Optional. These run after the developer finishes and their failures go back to the developer. Leave the list empty and the architect proposes the project's own checks on each run; repositories without any automated check are still reviewed.`,detect:`Detect project checks`,detecting:`Detecting…`,detected:`Filled in from the checks this project already defines.`,nothingDetected:`No test, type-check or build command was found. That is fine: the architect proposes checks at run time when possible.`,detectFailed:`Could not inspect the project repositories.`,repository:`Repository`,command:`Command`,reason:`Detected from {{reason}}`,remove:`Remove`,add:`Add command`,invalidLine:`Verification command is empty or has an unterminated quote: {{line}}`,label:`Check label (optional)`,moveUp:`Move up`,moveDown:`Move down`},y={title:`Setup commands`,hint:"Idempotent commands Core runs before every verification, in the repository checkout (for example `npx playwright install chromium`).",add:`Add setup command`,invalidLine:`Setup command is empty or has an unterminated quote: {{line}}`,repository:`Repository`,command:`Setup command`,label:`Setup label (optional)`,remove:`Remove`,moveUp:`Move setup command up`,moveDown:`Move setup command down`,empty:`No setup commands. Verification runs directly in the checkout.`},b={title:`Saved runs`,refresh:`Refresh`,hint:`Continue in the original worktree with the frozen scope and settings; progress appears in that job's log. This does not publish or restart Desktop delivery. Active rail runs are stopped from their job controls.`,empty:`No saved runtime runs.`,loadFailed:`Could not load saved runs.`,actionFailed:`Could not update this run.`,phase:`Next phase: {{phase}}`,approve:`Approve completion`,recover:`Recover interrupted phase`,resume:`Resume`,cancel:`Cancel continuation`,status:{running:`Continuing…`,succeeded:`Succeeded`,failed:`Failed`,blocked:`Blocked`,paused:`Paused`,cancelled:`Cancelled`,interrupted:`Interrupted`,unavailable:`Unavailable`,expired:`Expired`},question:`The architect asks:`,answerLabel:`Your answer`,answerPlaceholder:`Answer the question; the architect continues with it.`,answer:`Answer and resume`,viewLog:`View job log`,implementation:`Implementation`,preserveProgress:`Continue from the indicated phase, preserving your existing work and saved settings.`,reviewDelivery:`Implementation completed. Review the result in this job log before arranging delivery; this continuation has not published it.`,prepareDelivery:`Prepare delivery`,dismiss:`Dismiss`,selectRecovery:`Select the interrupted attempts to recover`},x={architect:`Reads the code and writes the proposal, design, tasks and spec. Read-only.`,developer:`Implements the tasks with tests. Can edit files and run commands inside the CLI sandbox.`,reviewer:`Checks the result against the spec and the verification evidence. Read-only.`},S={title:`Review gate`,hint:`Empty fields use Core's gate. Values can only raise it: overall score at least {{score}}, security at least {{security}}, other aspects at least {{aspect}}.`,minScore:`Minimum overall score (default {{score}})`,aspects:{type_correctness:`Type correctness (default {{score}})`,pattern_adherence:`Pattern adherence (default {{score}})`,test_coverage:`Test coverage (default {{score}})`,security:`Security (default {{score}})`,architectural_alignment:`Architectural alignment (default {{score}})`}},C={title:`Architect confidence`,hint:`After one autonomous investigation pass, a design that is still low in confidence either pauses with the architect's question or proceeds on stated assumptions.`,onLowConfidence:`On low confidence`,ask:`Ask (pause with the question)`,proceed:`Proceed on stated assumptions`},w={title:`Usage and time`,hint:`Includes corrections and failed calls. Agent time includes tool work. Cached tokens are part of input tokens.`,unknown:`Unavailable`,duration:`Run time`,agentTime:`Agent time`,cost:`Reported cost`,providerCalls:`Agent calls`,toolCalls:`Tool calls`,input:`Input tokens`,output:`Output tokens`,uncached:`Uncached input`,cacheRead:`Cache reads`,cacheWrite:`Cache writes`,partial:`Some attempts have no detailed measurements.`,phases:`Usage by phase`,phase:`Phase`,attempts:`Attempts`},T={title:`Agent role prompts`,description:`View and edit the instructions for each role. Shared by all projects and providers; changes apply to new jobs. Resumed jobs keep their original prompts.`,definition:`{{role}} definition`,default:`Factory default`,custom:`Customized`,restore:`Restore default`,contracts:`Spec context, OpenSpec workflow and required response format are added automatically and are not edited here.`,invalid:`Each definition must contain 1–20,000 characters, with nonblank text and no null bytes.`,saved:`Role prompts saved`,unsaved:`Unsaved changes`,discard:`Discard changes`,save:`Save prompts`,fixerHint:`Used on correction rounds only — after a failed verification or a rejected review. Runs on the developer's engine unless Settings ▸ Agent engine ▸ Fixer names its own. A CLI provider that resumes the developer's session receives the short correction follow-up instead; the definition applies whenever a fresh session starts (local engines, the fixer engine, a lost session).`},E={title:`Implementation efficiency`,scope:`Applies to new runs. Saved runs retain their original configuration and runtime.`,effort:`Reasoning effort`,providerDefault:`Provider default`,unconfirmed:`Unconfirmed`,unknownSupport:`Support is not confirmed for this model and transport. Provider default remains available.`,escalation:`Allow one higher tier with the same provider`,baseRequired:`Select an explicit base model first.`,escalationModel:`Higher-tier model`,triggers:{architect:`Only the existing deeper investigation pass can select this tier.`,developer:`After two failed candidates, the next permitted attempt can select this tier.`,reviewer:`Only a malformed-response repair can select this tier; rejecting code does not trigger it.`,fixer:`Only a correction round can reach this tier; first passes never run the fixer.`},contextMode:`Repository context`,reviewMode:`Correction review`,planning:`Planning depth`,adaptive:`Adaptive`,full:`Full`,developerChecks:`Accept additional checks proposed by the developer`,concurrency:`Maximum concurrent checks`,concurrencyHint:`Default 1. Only host-declared independent checks across different repositories may run together. Checks are never reused by default.`,checkCapabilities:`Check model compatibility`,capabilitiesFailed:`Could not confirm model capabilities. Update the paired Core runtime or keep provider defaults.`},D={title:`Verification evidence`,acceptance:`Technical acceptance`,acceptanceStatus:{pending:`Pending`,validated:`Validated`,"with-exceptions":`With exceptions`,blocked:`Blocked`},calls:`Agent calls`,executed:`Executed checks`,reused:`Reused checks`,unknown:`Unavailable`,unavailable:`Evidence is unavailable for this run. Its recorded outcome is not proof of current validity.`,current:`Current candidate and plan`,historical:`Historical result`,moreChecks:`More checks`,output:`Verification output`,empty:`No output`,truncated:`This is a bounded page or a truncated capture.`,nextPage:`Next output page`,status:{passed:`Passed`,failed:`Failed`,cancelled:`Cancelled`,interrupted:`Interrupted`},disposition:{executed:`Executed`,reused:`Reused`,"not-run":`Not run`},origin:`Origin`,origins:{host:`Host`,architect:`Architect`,developer:`Developer`,"frozen-runtime-config":`Frozen configuration`,"project-role":`Project role`,default:`Default`,"explicit-launch-override":`Selected launch provider`,"loop-role":`Loop role`},reuseDisabled:`Reuse disabled for this check.`,reuseConfirmed:`Reused after verifying matching inputs and toolchain.`,inputsChanged:`Inputs changed during verification; result invalidated.`,reuseUnproven:`No current result with proven matching inputs; the check ran again.`,original:`Original run`,requested:`Requested`,reported:`Reported`},O={title:`Loop roles`,hint:`Engines for the loop-side roles when a rail launches with the "Roles" engine. The pipeline roles above (architect, developer, reviewer) already come from this runtime configuration.`,verifier:`Verifier`,verifierHint:`Every non-core AI step of the loop: verify, fix and custom AI steps.`,decider:`Decider`,deciderHint:`The Loop Decider that reads the verdict and routes the next step — a cheap, fast model is the natural pick.`,inherit:`Inherit primary`,model:`Model`,effort:`Reasoning effort`,disabled:`The agent runtime is disabled — rails launched with the "Roles" engine are refused until it is enabled.`,saveFailed:`Could not save the loop roles.`},k={title:`Implement pipeline`,explainer:`These phases run in this order on every implementation. When the rail's engine is "{{roles}}", each phase runs on the engine configured below — a different provider, model and effort per phase. Picking a concrete engine on the rail runs every phase on that engine instead.`,host:`Host`,noCommand:`no command`,inherits:`Inherits primary`,inheritsDeveloper:`Inherits developer`,open:`Open`,collapse:`Collapse`,groups:{core:{title:`Core pipeline`,hint:`Runs inside every implement: plan, build, verify, fix, review.`},loop:{title:`Loop steps`,hint:`AI steps of the rail's loop around the run (verify → decide → fix) and of custom loops; they inherit the primary engine unless set.`,chip:`rail loop`}},phases:{architect:{name:`Architect`,purpose:`Reads the code and writes the proposal, design and tasks.`},developer:{name:`Developer`,purpose:`Implements the tasks with tests.`},verification:{name:`Verification`,purpose:`The host runs your checks; failures go back to the developer.`},fixer:{name:`Fixer`,purpose:`Corrects what verification or review reject; inherits the developer when not configured.`},reviewer:{name:`Reviewer`,purpose:`Checks the result against the spec and the evidence.`},verifier:{name:`Verifier`,purpose:`Verify, fix and custom AI steps of the loop.`},decider:{name:`Decider`,purpose:`Reads the verdict and routes the next loop step.`}}},A={title:`Fixer engine`,inherit:`Inherit developer`,own:`Own engine`,hint:`Runs only on correction rounds — after a failed verification or a rejected review; first passes stay on the developer. A stronger or cloud model here pays off when the developer is a cheap local model.`},j={title:`Guardrails`,intro:`Process rules the host applies around local models so a small model does not derail. All on by default; switch one off only to tune the process. CLI providers are never affected.`,unsupported:`This Core installation does not expose configurable guardrails. Update Core to tune them; the built-in rules still apply.`,active:`{{on}} of {{total}} active`,reset:`Reset to defaults`,phases:{architect:`Architect`,developer:`Developer`,host:`Host`},unknown:`A guardrail added by a newer Core; this app has no description for it yet.`,items:{"plan-validation":{title:`Validated task plan`,description:`Rejects plans that target openspec/, list bare file names as tasks, have too few tasks/groups for the spec, or leave acceptance criteria uncovered; the architect retries.`,why:`A vague or incomplete plan is the #1 reason a small developer model writes stubs.`},"genuine-blocking-question":{title:`Only real blocking questions`,description:`The architect can pause the run only with an actual question ending in '?', never with copied example text.`,why:`Small models echo prompt placeholders and would block every run.`},"plan-language-hint":{title:`Plan in the repository's language`,description:`Tells the architect the primary language so task file names carry the right extension.`,why:`A JS plan on a TypeScript repo makes tasks impossible to tick.`},"frozen-plan-writes":{title:`Planning artifacts are frozen`,description:`The developer cannot write under openspec/; the plan is the host's.`,why:`Models 'implement' by editing the plan instead of the code.`},"primary-language":{title:`Primary language reminder`,description:`Each task group is told the repository's primary language; new files should use it.`,why:`Prevents a second implementation in another language.`},"duplicate-sibling":{title:`No twin modules across languages`,description:`Refuses board.js when board.ts already exists; extend the existing module instead.`,why:`Twins compile both and the tests import the wrong one.`},"one-test-per-module":{title:`One test file per module`,description:`Refuses board.tick.test.ts when board.test.ts exists; extend it instead.`,why:`Correction passes otherwise add a new suite per attempt.`},"empty-write":{title:`No empty overwrites`,description:`An empty write over a populated file is refused; write the full content or patch it.`,why:`A 'cleanup' pass once left index.ts at 0 lines.`},"evidence-gated-ticking":{title:`Evidence before ticking a task`,description:`A task naming files is done only when they exist and are not stubs (sibling extensions accepted).`,why:`Without it 'done' is just a claim and verify runs against nothing.`},"inventory-retry":{title:`Retry with the real inventory`,description:`When the model gives up claiming the repo is empty while it is not, retry once with the file list.`,why:`Cheap second chance instead of a failed step.`},"synthetic-corrections":{title:`Turn feedback into tasks`,description:`When every task is ticked but review/verify failed, the feedback becomes concrete correction tasks.`,why:`Otherwise the developer reports 'already done' and nothing changes.`},"silent-group-closure":{title:`Close silent groups, keep their files`,description:`A group whose model stops answering is closed with the files it wrote credited and its tasks left open, instead of failing the run.`,why:`A 9B model wrote five modules, went silent, and the whole run failed.`},"environment-repair":{title:`Host repairs the environment`,description:`Missing dependencies or test tooling (npm install, ts-jest, @types/jest, Jest config modules) are installed by the host, then verify re-runs once.`,why:`The model cannot fix the environment and burns corrections trying.`},"lockfile-repair":{title:`Drop hand-written lockfiles`,description:`A package-lock.json the model invented (EINTEGRITY/ETARGET) is removed and the install retried once.`,why:`Invented hashes never install.`},"verify-idle-timeout":{title:`Stop hanging tests`,description:`A verification command with no output for 5 minutes is stopped and reported as a probable hang (last output included).`,why:`A while-loop in a test otherwise holds the run until the 15-minute wall clock.`},"verify-per-group":{title:`Verify after each group`,description:`Runs the repository's own test command right after each task group; a failure gets one in-place fix round while the group's context is still fresh.`,why:`Five broken suites at the end are much harder to fix than one at a time.`},"test-reachability":{title:`Every new test must actually run`,description:"A test file the developer writes that the repository's test command never executes (an enumerating `test` script that skips the new file) fails verification with the exact file, at group altitude first and again at the host verify.",why:`A 622-line test suite with six failing cases once shipped green because nothing ever ran it.`},"exit-code-honesty":{title:`Distrust a green exit code that reports failures`,description:'A verification command that exits 0 while its output prints failures (`FAIL:` lines, "3 failed", an AssertionError) is treated as FAILED and handed to the fixer with the harness named as the defect.',why:`A hand-rolled test runner that never sets a non-zero exit code once shipped three red tests as green.`},"verification-output-adoption":{title:`Adopt output the checks write themselves`,description:`When verification passes but its own commands rewrite tracked files (a lint step regenerating a mapping), the host keeps those files in the candidate and verifies once more; the reviewer and fixer must not revert them.`,why:`A lint pre-step that regenerated a tracked file made every green run look like a changed candidate, burning corrections on a non-defect.`}}},M=`Unsaved changes`,N={title:`Custom roles`,hint:`Declare reusable instructions and explicit permissions for workflow roles.`,unsupported:`Update Core to edit custom roles.`,remove:`Remove {{id}}`,access:`Source access`,read:`Read only`,write:`Read and write`,artifacts:`OpenSpec artifact access`,none:`None`,tasks:`Task checkboxes only`,all:`All change artifacts`,skill:`OpenSpec skill`,noSkill:`No skill binding`,prompt:`Role instructions`,id:`Role ID`,add:`Add role`,invalidId:`Use a unique lowercase ID beginning with a letter, up to 64 letters, digits or hyphens. Built-in IDs are reserved.`,escalationHint:`Only a permitted protocol repair may use the escalation model. No extra retry is added.`},P={title:`Run instructions`,hint:`Core saves these instructions for the next eligible agent turn. Sending does not answer a question or grant approval.`,label:`Additional instructions`,send:`Send instructions`,accepted:`Accepted by Core; awaiting consumption.`,pending:`Awaiting an agent turn`,consumed:`Consumed by an agent`,counts:`Pending: {{pending}} · Consumed: {{consumed}}`,failed:`Could not send instructions. Retry to confirm the same message.`,unavailable:`Receipt details are unavailable.`,unreported:`This Core version does not report consumption.`,truncated:`Only the most recent receipts and pending messages are shown.`},F={title:`Core role defaults`,hint:`These file defaults apply to new workflows. Explicit project settings take precedence; saved runs keep their frozen settings.`,invalid:`Fix the YAML frontmatter in the editor before changing role fields.`,escalationEffort:`Higher-tier reasoning effort`},I={title:`History retention`,description:`Delete expired run histories and unused Core versions. Deleted histories cannot be resumed or forked. Active or recoverable runs and pending deliveries stay protected; job logs and cost records remain.`,forever:`Keep history indefinitely`,days:`Retention days`,save:`Save retention`,preview:`Preview cleanup`,collect:`Delete expired history`,previewSummary:`Eligible: {{runs}} histories and {{packages}} unused Core versions.`,collectedSummary:`Expired: {{runs}} histories. Removed: {{packages}} unused Core versions.`,more:`{{count}} additional runs.`,failed:`Could not inspect or update retention.`,expired:`This run history expired under the project policy. Its job log and accounting remain available.`,loading:`Loading retention policy…`,states:{protected:`Kept`,eligible:`Eligible`,expired:`Expired`,cleanup_pending:`Cleanup pending`,busy:`In use`,error:`Inspection failed`},reasons:{disabled:`Indefinite retention`,recoverable:`Recovery remains available`,active:`Active run`,human_pending:`Waiting for a human`,interrupted_writes:`Interrupted writes need review`,delivery_pending:`Delivery is pending`,fork_pending:`A dependent fork remains`,unknown_terminal_time:`Completion time is unknown`,within_retention:`Still within the retention period`}},L={title:`Loop agents`,hint:`These definitions are shared by every project using this loop. Duplicate the loop to customize a separate workflow.`,legacy:`This saved loop still uses historical project agents. Import them or enable loop agents before changing its configuration.`,enable:`Use loop agents`,import:`Import current project agents`,restoreDefinition:`Use the Core definition`,default:`Provider default`,effort:`Reasoning effort`,escalationModel:`Escalation model`,escalationEffort:`Escalation effort`,policy:`Workflow policy`,maxAttempts:`Maximum correction attempts`,maxTokens:`Token budget`,maxCostUsd:`Cost limit (USD)`,timeoutMs:`Run timeout (ms)`,projectHint:`Configure repository checks here. Agent definitions, models and workflow policy are configured in the loop editor. Historical project agents can be imported into a duplicated loop.`,showUnused:`Also show agents not used in this loop`,stepTitle:`Step agent and options`,stepHint:`Edit this step’s agent definition and engine. Steps using the same role in this loop share these settings.`,inheritProvider:`Inherit mission provider`,inheritDefinition:`Follows the Core definition: every Core upgrade updates it automatically.`,customizeDefinition:`Customize for this loop`,coreDefinitionUnavailable:`Preview unavailable until a Core runtime is installed.`,turnLimits:{title:`Turn limits`,hint:`Each tool call an agent makes counts as a turn. When a step stops with "reached the configured limit of N turns", raise that step here, save and publish; new launches use it. Empty uses Core's default ({{turns}}). Project Settings do not change loop runs.`,role:`Role {{role}}`,input:`Maximum turns for {{steps}} (role {{role}})`,stepHint:`Role {{role}} stops after {{turns}} turns. Steps sharing this role share the limit; it applies to new launches after you publish.`}},R={label:`Reviewer model family suggestion`,title:`Run the reviewer on {{provider}} — a different model family catches different mistakes`,body:`The developer and the reviewer currently run on the same provider. This is only a suggestion: nothing changes unless you apply it.`,apply:`Apply`,dismiss:`Dismiss`},z={title:`Spec triage engine`,hint:`Triage reads each new or edited spec and recommends the loop to launch it with. It is one short structured call per spec. By default it runs on the project's primary provider with its cheapest model.`,provider:`Triage provider`,inherit:`Primary provider`,model:`Model`,cheapestModel:`Cheapest model (default)`,loading:`Loading the triage engine…`,loadFailed:`The triage engine could not be read. Triage keeps using the primary provider; reopen these settings to retry.`,saveFailed:`The triage engine was not saved. The previous choice is kept.`},B={title:n,description:r,loading:i,loadFailed:a,retry:o,unavailable:s,save:c,saving:l,saved:u,saveFailed:d,approvalBeforeArchive:f,providers:p,cliNames:m,roles:h,agents:g,limits:_,verification:v,setup:y,runs:b,roleHints:x,review:S,architect:C,metrics:w,prompts:T,efficiency:E,evidence:D,loopRoles:O,pipeline:k,fixer:A,guardrails:j,unsavedChanges:M,customRoles:N,steering:P,studioRole:F,retention:I,loopAgents:L,reviewerSuggestion:R,triageEngine:z};export{t};
@@ -1 +1 @@
1
- var e=`代理运行引擎`,t=`架构师、开发者和审阅者作为独立阶段运行,中间进行确定性验证。为每个角色选择提供商即可,其余都有可用的默认值。`,n=`正在加载运行设置…`,r=`无法加载运行设置。请先重试再修改。`,i=`重试`,a=`当前 Core 安装不包含代理运行引擎。启用前请更新 Core;停用时仍可提前配置。`,o=`保存运行设置`,s=`正在保存…`,c=`运行设置已保存`,l=`无法保存运行设置。`,u=`完成工作流前暂停并等待批准`,d={title:`提供商`,hint:`CLI 提供商使用现有登录。API 仅接受环境变量名称,请勿输入密钥。本地端点可留空。删除提供商前,请先重新分配使用它的角色。`,entry:`提供商 {{index}}`,id:`提供商 ID`,kind:`连接类型`,cli:`已安装的编程 CLI`,compatible:`兼容 OpenAI 的端点`,command:`编程 CLI`,baseUrl:`API 基础 URL`,apiKeyEnv:`API 密钥环境变量(可选)`,remove:`移除提供商`,addCli:`添加 CLI 提供商`,addLocal:`添加本地 / API 提供商`,show:`显示提供商连接`,hide:`隐藏提供商连接`,globalTitle:`AI 提供商`,globalHint:`每个项目由两类提供商驱动:本机检测到的编程 CLI,以及你在此注册的本地 OpenAI 兼容引擎。在项目设置 ▸ 代理引擎中将它们分配给流水线各阶段。更改适用于新的执行。`,label:`显示名称(可选)`,labelPlaceholder:`例如:局域网主机`,defaultModel:`默认模型`,defaultModelNone:`无默认(使用首个发现的模型)`,defaultModelPlaceholder:`模型 ID 或自定义别名`,customModel:`自定义别名…`,discoveredModels:`已发现的模型`,noModels:`尚未发现模型,请测试连接。`,rates:`费率(每 100 万 token 的美元,可选)`,ratesHint:`费用按估算显示;两项都留空则费用保持未知。`,inputRate:`输入 / 100 万`,outputRate:`输出 / 100 万`,ratesInvalid:`请将两项费率都填写为非负数,或都留空。`,reasoningEffort:`端点支持推理强度`,reasoningEffortHint:`发送 OpenAI 的 reasoning_effort 字段:每次调用使用该角色配置的推理强度,在紧凑架构师撰写计划时提升为 high。除非服务器支持,否则请保持关闭。`,apiKeyEnvMissing:`应用进程中未设置 {{name}}。请在启动应用的环境中设置它。`,test:`测试连接`,testing:`测试中…`,testFailed:`无法测试连接。`,rename:`重命名`,renameHint:`重命名后,角色分配仍指向此连接。`,idLocked:`保存后 ID 将被锁定。请使用“重命名”修改。`,localBadge:`本地引擎`,cliBadge:`CLI`,notDetected:`本机未检测到`,unsaved:`未保存的更改`,empty:`尚无连接。添加本地 / API 提供商以开始。`,fixBeforeSave:`保存前请修正标出的字段。`,status:{probing:`检测中…`,reachable:`可访问`,unauthorized:`未授权`,unreachable:`无法访问`,untested:`从未测试`},auth:{authenticated:`已登录`,unauthenticated:`未登录`,unknown:`登录状态未知`},agentLoop:`Agent 循环`,agentLoopHint:`implement 流水线如何驱动此模型`,agentLoop_compact:`紧凑`,agentLoop_compactHint:`由应用驱动的微步骤与结构化输出。推荐 ~30B 以下的模型使用。`,agentLoop_free:`自由`,agentLoop_freeHint:`每个角色一个 agent 循环,与 CLI 提供商相同。需要较强的模型。`,contextWindow:`上下文窗口(token)`,contextWindowHint:`与服务器的上下文大小保持一致(n_ctx / num_ctx)。用于在窗口填满前压缩旧的工具结果。默认 32768。`,maxOutput:`每轮输出预算(token)`,maxOutputHint:`单个工具轮次的 max_tokens;被截断的轮次会以两倍预算重试一次。它计入上下文窗口,因此始终受剩余空间限制——若模型会私下思考(thinking 会消耗该预算),请调高。默认 8192。`,reasoningEffortRailHint:`关闭时,此引擎在 rail 标题栏中不会显示推理强度选择器。`,presetTitle:`快速设置`,presetSmallModel:`小模型推荐`,presetSmallModelApplied:`已应用小模型预设`,presetSmallModelHint:`启用紧凑循环、转发推理强度并设置 32k 上下文窗口——这是在 7–14B 模型上验证过的组合。各字段仍可单独修改。`,cliGroup:`CLI 工具`,cliGroupHint:`在本机检测到——使用各自的登录,无需配置。`,localGroup:`本地引擎`,localGroupHint:`本应用可访问的 OpenAI 兼容端点(llama.cpp、Ollama、vLLM、LM Studio 等)。`,models_one:`{{count}} 个模型`,models_other:`{{count}} 个模型`,expand:`显示设置`,collapse:`隐藏设置`,overflow:`更多操作`,addLocalHero:`添加本地引擎`,emptyLocalPitch:`尚无本地引擎。将应用指向一个 OpenAI 兼容端点,即可在自己的硬件上运行流水线:成本由你掌控,数据不离开你的网络。`,defaultsGroup:`提供商默认值`},f={claude:`Claude`,codex:`Codex`,gemini:`Gemini`,kimi:`Kimi`},p={architect:`架构师`,developer:`开发者`,reviewer:`审查者`,fixer:`修复者`,verify:`验证`,archive:`完成`},m={title:`角色分配`,hint:`每个角色可以使用不同的提供商和模型。在常规设置 → AI 提供商中管理连接。默认每个代理最多{{turns}}轮。`,provider:`提供商`,model:`模型`,modelPlaceholder:`模型 ID 或 CLI 默认值`,maxTurns:`最大轮数(默认 {{turns}})`,defaultModel:`默认({{model}})`,thinking:`隐藏思考`,thinking_off:`关闭`,thinking_on:`开启`,thinkingHint:`默认关闭:在由主机驱动的循环中,隐藏推理会消耗输出预算和每轮的分钟数。对受益于深思的角色可开启(以 chat_template_kwargs.enable_thinking 发送;不识别该字段的端点会忽略)。`},h={title:`工作流限制`,hint:`留空则使用 Core 默认值:{{attempts}} 次修正尝试,每个角色步骤 {{minutes}} 分钟。在本地引擎上,超时按工作单元计算(一个任务组、一个工件、一次审查),默认 45 分钟,另有 20 分钟空闲看门狗;超时的步骤会阻塞运行,并可从下一个未完成的任务组恢复。token 和美元上限为可选;美元上限要求所有 AI 角色使用 Claude。`,maxAttempts:`开发者最大尝试次数(默认 {{attempts}})`,timeoutMinutes:`超时(分钟;默认 {{minutes}},本地引擎每个任务组 45)`,maxTokens:`最大令牌数`,maxCostUsd:`最大成本(USD)`,unlimited:`无限制`},g={title:`验证命令`,hint:`可选。在开发者完成后运行,失败会返回给开发者。留空时,架构师会在每次运行时提出项目自身的检查;没有自动检查的仓库仍会被审阅。`,detect:`检测项目检查`,detecting:`检测中…`,detected:`已根据此项目已定义的检查填写。`,nothingDetected:`未找到测试、类型检查或构建命令。没关系:架构师会在可能时于运行时提出检查。`,detectFailed:`无法检查项目仓库。`,repository:`仓库`,command:`命令`,reason:`检测自 {{reason}}`,remove:`移除`,add:`添加命令`,invalidLine:`验证命令为空或引号未闭合:{{line}}`,label:`检查名称(可选)`,moveUp:`上移`,moveDown:`下移`},_={title:`环境准备命令`,hint:"Core 在每次验证之前于仓库检出目录中运行的幂等命令(例如 `npx playwright install chromium`)。",add:`添加准备命令`,invalidLine:`准备命令为空或引号未闭合:{{line}}`,repository:`仓库`,command:`准备命令`,label:`准备命令标签(可选)`,remove:`移除`,moveUp:`上移准备命令`,moveDown:`下移准备命令`,empty:`没有准备命令。验证将直接在检出目录中运行。`},v={title:`已保存的执行`,refresh:`刷新`,hint:`在原始工作树中使用冻结的范围和设置继续执行,进度显示在该任务的日志中。此操作不会发布或重启 Desktop 交付。请从任务控件停止活动中的执行。`,empty:`没有已保存的执行。`,loadFailed:`无法加载已保存的执行。`,actionFailed:`无法更新此执行。`,phase:`下一阶段:{{phase}}`,approve:`批准完成`,recover:`恢复中断阶段`,resume:`继续`,cancel:`取消继续执行`,status:{running:`继续中…`,succeeded:`成功`,failed:`失败`,blocked:`已阻止`,paused:`已暂停`,cancelled:`已取消`,interrupted:`已中断`,unavailable:`不可用`,expired:`已过期`},question:`架构师提问:`,answerLabel:`你的回答`,answerPlaceholder:`回答该问题后,架构师将据此继续。`,answer:`回答并继续`,viewLog:`查看任务日志`,implementation:`实现`,preserveProgress:`从所示阶段继续,保留已有工作和保存的设置。`,reviewDelivery:`实现已完成。交付前请在任务日志中检查结果;本次继续执行未发布结果。`,prepareDelivery:`准备交付`,dismiss:`忽略`,selectRecovery:`选择要恢复的中断尝试`},y={architect:`阅读代码并撰写提案、设计、任务和规范。只读。`,developer:`带测试地实现任务。可在 CLI 沙箱内编辑文件并运行命令。`,reviewer:`对照规范和验证证据检查结果。只读。`},b={title:`评审门槛`,hint:`留空则使用 Core 的门槛。数值只能提高门槛:总体分数至少 {{score}},安全性至少 {{security}},其他方面至少 {{aspect}}。`,minScore:`最低总体分数(默认 {{score}})`,aspects:{type_correctness:`类型正确性(默认 {{score}})`,pattern_adherence:`模式遵循(默认 {{score}})`,test_coverage:`测试覆盖率(默认 {{score}})`,security:`安全性(默认 {{score}})`,architectural_alignment:`架构一致性(默认 {{score}})`}},x={title:`架构师置信度`,hint:`经过一轮自主调查后,若设计的置信度仍然较低,则带着架构师的问题暂停,或基于已声明的假设继续。`,onLowConfidence:`置信度低时`,ask:`询问(带问题暂停)`,proceed:`基于已声明的假设继续`},S={title:`用量与时间`,hint:`包含修正和失败的调用。代理时间包含工具执行时间。缓存令牌属于输入令牌的一部分。`,unknown:`不可用`,duration:`执行时间`,agentTime:`代理时间`,cost:`已报告费用`,providerCalls:`代理调用`,toolCalls:`工具调用`,input:`输入令牌`,output:`输出令牌`,uncached:`未缓存输入`,cacheRead:`缓存读取`,cacheWrite:`缓存写入`,partial:`部分尝试没有详细测量数据。`,phases:`各阶段用量`,phase:`阶段`,attempts:`尝试次数`},C={title:`代理角色提示词`,description:`查看和编辑各角色的指令。所有项目和提供商共用这些指令;更改适用于新任务。恢复的任务保留原始提示词。`,definition:`{{role}}定义`,default:`出厂默认值`,custom:`已自定义`,restore:`恢复默认值`,contracts:`Spec 上下文、OpenSpec 工作流程和所需的响应格式会自动添加,无法在此编辑。`,invalid:`每个定义必须包含 1–20,000 个字符,不能仅包含空白字符,也不能包含空字节。`,saved:`角色提示词已保存`,unsaved:`未保存的更改`,discard:`放弃更改`,save:`保存提示词`,fixerHint:`仅在修正轮次使用:验证失败或审查被拒之后。除非“设置 ▸ 代理引擎 ▸ 修复者”指定了独立引擎,否则运行在开发者引擎上。恢复开发者会话的 CLI 提供方收到的是简短的修正跟进;每当启动新会话(本地引擎、修复者引擎、会话丢失)时,本定义生效。`},w={title:`实现效率`,scope:`适用于新运行。已保存的运行保留原始配置和运行时。`,effort:`推理强度`,providerDefault:`提供商默认值`,unconfirmed:`未确认`,unknownSupport:`尚未确认此模型和传输方式的支持情况。`,escalation:`允许使用同一提供商的一个更高等级`,baseRequired:`请先明确选择基础模型。`,escalationModel:`更高等级模型`,triggers:{architect:`仅现有的深入调查步骤可选择此等级。`,developer:`两个候选实现失败后,下一次允许的尝试可选择此等级。`,reviewer:`仅用于修复格式错误的响应;拒绝代码不会触发升级。`,fixer:`只有修正轮次才能进入此层级;首次实现从不运行修复者。`},contextMode:`仓库上下文`,reviewMode:`修正审查`,planning:`规划深度`,adaptive:`自适应`,full:`完整`,developerChecks:`接受开发者提出的额外检查`,concurrency:`最大并发检查数`,concurrencyHint:`默认值为 1。只有主机声明为独立且属于不同仓库的检查才能并发运行。默认不复用检查。`,checkCapabilities:`检查模型兼容性`,capabilitiesFailed:`无法确认兼容性。请更新配套 Core 或保留提供商默认值。`},T={title:`验证证据`,acceptance:`技术验收`,acceptanceStatus:{pending:`待处理`,validated:`已验证`,"with-exceptions":`存在例外`,blocked:`已阻止`},calls:`代理调用`,executed:`已执行检查`,reused:`已复用检查`,unknown:`不可用`,unavailable:`证据不可用。已记录的结果不代表当前仍然有效。`,current:`当前候选实现和计划`,historical:`历史结果`,moreChecks:`更多检查`,output:`验证输出`,empty:`无输出`,truncated:`此页面有长度限制或记录已截断。`,nextPage:`下一页输出`,status:{passed:`通过`,failed:`失败`,cancelled:`已取消`,interrupted:`已中断`},disposition:{executed:`已执行`,reused:`已复用`,"not-run":`未执行`},origin:`来源`,origins:{host:`主机`,architect:`架构师`,developer:`开发者`,"frozen-runtime-config":`已保存配置`,"project-role":`项目角色`,default:`默认`,"explicit-launch-override":`本次运行选择的提供商`,"loop-role":`循环角色`},reuseDisabled:`此检查已禁用复用。`,reuseConfirmed:`确认输入和工具链一致后复用。`,inputsChanged:`验证期间输入发生变化;结果已失效。`,reuseUnproven:`没有输入一致且仍然有效的结果;已重新执行检查。`,original:`原始执行`,requested:`请求值`,reported:`报告值`},E={title:`循环角色`,hint:`轨道以“按角色”引擎启动时循环侧角色所用的引擎。上方的流水线角色(architect、developer、reviewer)已来自此运行时配置。`,verifier:`验证者`,verifierHint:`循环中所有非核心的 AI 步骤:verify、fix 和自定义 AI 步骤。`,decider:`决策者`,deciderHint:`读取结论并决定下一步的 Loop Decider——选择便宜快速的模型最合适。`,inherit:`继承主引擎`,model:`模型`,effort:`推理强度`,disabled:`代理运行时已禁用——在启用之前,以“按角色”引擎启动的轨道会被拒绝。`,saveFailed:`无法保存循环角色。`},D={title:`实现流水线`,explainer:`每次实现都按此顺序执行这些阶段。当 rail 的引擎为“{{roles}}”时,每个阶段使用下方配置的引擎——每个阶段可以有不同的提供商、模型和推理强度。若在 rail 上选择具体引擎,则所有阶段都在该引擎上运行。`,host:`主机`,noCommand:`无命令`,inherits:`继承主引擎`,inheritsDeveloper:`继承开发者`,open:`展开`,collapse:`收起`,groups:{core:{title:`核心流水线`,hint:`在每次实现中运行:规划、构建、验证、修复、评审。`},loop:{title:`循环步骤`,hint:`包裹运行的 rail 循环(验证 → 决策 → 修复)以及自定义循环的 AI 步骤;未设置时继承主引擎。`,chip:`rail 循环`}},phases:{architect:{name:`架构师`,purpose:`阅读代码并编写提案、设计与任务。`},developer:{name:`开发者`,purpose:`带测试地实现任务。`},verification:{name:`验证`,purpose:`主机运行你的检查;失败会返回给开发者。`},fixer:{name:`修复者`,purpose:`修正验证或评审驳回的内容;未配置时继承开发者。`},reviewer:{name:`审查者`,purpose:`对照规格与证据检查结果。`},verifier:{name:`校验者`,purpose:`循环中的 verify、fix 与自定义 AI 步骤。`},decider:{name:`决策者`,purpose:`读取裁定并决定循环的下一步。`}}},O={title:`修复者引擎`,inherit:`继承开发者`,own:`独立引擎`,hint:`仅在修正轮次运行:验证失败或评审被驳回之后;首次实现仍由开发者完成。当开发者是廉价的本地模型时,在此使用更强或云端模型更划算。`},k={title:`护栏`,intro:`宿主在本地模型周围施加的流程规则,防止小模型跑偏。默认全部开启;只有在需要微调流程时才关闭某一项。CLI 提供商永不受影响。`,unsupported:`此 Core 安装未提供可配置的护栏。请更新 Core 以进行调整;内置规则仍然生效。`,active:`{{total}} 项中 {{on}} 项已启用`,reset:`恢复默认`,phases:{architect:`架构师`,developer:`开发者`,host:`宿主`},unknown:`由更新版本的 Core 新增的护栏;此应用尚无对应描述。`,items:{"plan-validation":{title:`经过校验的任务计划`,description:`拒绝指向 openspec/、把裸文件名列为任务、任务/分组数量相对规格过少或验收标准未覆盖的计划;架构师会重试。`,why:`含糊或不完整的计划是小型开发者模型写出桩代码的头号原因。`},"genuine-blocking-question":{title:`只允许真正的阻塞问题`,description:`架构师只能用以“?”结尾的真实问题暂停运行,绝不能用复制的示例文本。`,why:`小模型会照搬提示词占位符,导致每次运行都被阻塞。`},"plan-language-hint":{title:`按仓库语言规划`,description:`告知架构师主要语言,使任务文件名带有正确的扩展名。`,why:`在 TypeScript 仓库上生成 JS 计划会让任务无法勾选。`},"frozen-plan-writes":{title:`规划产物已冻结`,description:`开发者不能写入 openspec/;计划归宿主所有。`,why:`模型会通过修改计划而不是代码来“实现”功能。`},"primary-language":{title:`主要语言提醒`,description:`每个任务组都会被告知仓库的主要语言;新文件应使用该语言。`,why:`防止用另一种语言做第二套实现。`},"duplicate-sibling":{title:`跨语言不允许孪生模块`,description:`当 board.ts 已存在时拒绝 board.js;请扩展现有模块。`,why:`孪生模块都会编译,而测试会导入错误的那个。`},"one-test-per-module":{title:`每个模块一个测试文件`,description:`当 board.test.ts 已存在时拒绝 board.tick.test.ts;请扩展它。`,why:`否则每轮修正都会新增一个测试套件。`},"empty-write":{title:`禁止空覆盖`,description:`拒绝用空内容覆盖非空文件;请写入完整内容或打补丁。`,why:`一次“清理”曾把 index.ts 变成 0 行。`},"evidence-gated-ticking":{title:`有证据才勾选任务`,description:`指明文件的任务只有在文件存在且不是桩代码时才算完成(接受同类扩展名)。`,why:`否则“完成”只是一句声明,验证时无物可测。`},"inventory-retry":{title:`用真实清单重试`,description:`当模型声称仓库为空而放弃(实际并非如此)时,带上文件列表重试一次。`,why:`以低成本给第二次机会,而不是失败的步骤。`},"synthetic-corrections":{title:`把反馈变成任务`,description:`当所有任务都已勾选但审查/验证失败时,把反馈转成具体的修正任务。`,why:`否则开发者会回答“已经完成”,什么都不会改变。`},"silent-group-closure":{title:`关闭沉默的分组并保留其文件`,description:`模型停止响应的分组会被关闭,计入其写入的文件并保留任务为未完成,而不是让整个运行失败。`,why:`一个 9B 模型写了五个模块后沉默,导致整个运行失败。`},"environment-repair":{title:`宿主修复环境`,description:`缺失的依赖或测试工具(npm install、ts-jest、@types/jest、Jest 配置模块)由宿主安装,然后重新验证一次。`,why:`模型无法修复环境,只会在尝试中耗尽修正次数。`},"lockfile-repair":{title:`丢弃手写的锁文件`,description:`模型编造的 package-lock.json(EINTEGRITY/ETARGET)会被删除,并重试安装一次。`,why:`编造的哈希永远无法安装。`},"verify-idle-timeout":{title:`终止挂起的测试`,description:`5 分钟无输出的验证命令会被终止,并报告为疑似挂起(附最后输出)。`,why:`否则测试里的 while 循环会把运行拖到 15 分钟上限。`},"verify-per-group":{title:`每组后验证`,description:`在每个任务组完成后立即运行仓库自身的测试命令;失败时趁该组上下文仍新鲜进行一轮就地修复。`,why:`最后一次面对五个损坏的测试套件,比逐个修复难得多。`},"test-reachability":{title:`每个新测试都必须真正运行`,description:"开发者写下、但仓库测试命令从未执行的测试文件(逐个列举文件的 `test` 脚本漏掉了新文件)会使验证失败并指出确切文件——先在任务组层面,再在主机验证时。",why:`一个 622 行、含六个失败用例的测试套件曾因从未被运行而“绿灯”交付。`},"exit-code-honesty":{title:`不信任报告失败却返回 0 的退出码`,description:'验证命令以 0 退出但输出中打印了失败(`FAIL:` 行、"3 failed"、AssertionError)时视为失败,并交给修复者,同时指出测试框架本身是缺陷。',why:`一个从不设置非零退出码的手写测试运行器曾把三个失败测试当作通过交付。`},"verification-output-adoption":{title:`采纳检查自身写出的输出`,description:`如果验证通过但其命令重写了受版本控制的文件(例如重新生成映射的 lint 步骤),主机会将这些文件保留在候选中并再验证一次;reviewer 和 fixer 不得撤销它们。`,why:`一个会重新生成受版本控制文件的 lint 前置步骤,让每次通过的运行都看起来像候选被修改,把修正次数浪费在并非缺陷的问题上。`}}},A=`未保存的更改`,j={title:`自定义角色`,hint:`为工作流角色定义可复用的指令和明确的权限。`,unsupported:`更新 Core 后即可编辑自定义角色。`,remove:`删除 {{id}}`,access:`源代码访问权限`,read:`只读`,write:`读写`,artifacts:`OpenSpec 工件访问权限`,none:`无`,tasks:`仅任务复选框`,all:`该变更的所有工件`,skill:`OpenSpec 技能`,noSkill:`不绑定技能`,prompt:`角色指令`,id:`角色 ID`,add:`添加角色`,invalidId:`使用以字母开头的唯一小写 ID,最多包含64个字母、数字或连字符。内置 ID 为保留名称。`,escalationHint:`仅允许的协议修复可以使用升级模型,不会增加重试次数。`},M={title:`运行指令`,hint:`Core 会保存这些指令,供下一个符合条件的代理回合使用。发送指令不会回答问题或授予批准。`,label:`补充指令`,send:`发送指令`,accepted:`Core 已接收,等待代理使用。`,pending:`等待代理回合`,consumed:`代理已使用`,counts:`待处理:{{pending}} · 已使用:{{consumed}}`,failed:`无法发送指令。请重试以确认同一条消息。`,unavailable:`无法获取接收记录详情。`,unreported:`此 Core 版本不报告使用状态。`,truncated:`仅显示最近的接收记录和待处理消息。`},N={title:`Core 角色默认值`,hint:`这些文件默认值适用于新工作流。项目的显式设置优先;已保存的运行保留其固定配置。`,invalid:`更改角色字段前,请先在编辑器中修正 YAML 头部。`,escalationEffort:`更高级模型的推理强度`},P={title:`历史保留`,description:`删除已过期的执行历史和未使用的 Core 版本。已删除的历史无法恢复执行或创建分支。运行中、可恢复的执行和待交付内容仍受保护;任务日志与费用记录会保留。`,forever:`永久保留历史`,days:`保留天数`,save:`保存保留设置`,preview:`预览清理`,collect:`删除过期历史`,previewSummary:`可清理:{{runs}} 条历史和 {{packages}} 个未使用的 Core 版本。`,collectedSummary:`已过期:{{runs}} 条历史。已删除:{{packages}} 个未使用的 Core 版本。`,more:`另有 {{count}} 次执行。`,failed:`无法查看或更新保留设置。`,expired:`此执行历史已根据项目策略过期。任务日志和费用记录仍然可用。`,loading:`正在加载保留策略…`,states:{protected:`已保留`,eligible:`可清理`,expired:`已过期`,cleanup_pending:`等待清理`,busy:`使用中`,error:`检查失败`},reasons:{disabled:`永久保留`,recoverable:`仍可恢复`,active:`执行中`,human_pending:`等待人工回复`,interrupted_writes:`中断的写入需要检查`,delivery_pending:`等待交付`,fork_pending:`仍有依赖分支`,unknown_terminal_time:`完成时间未知`,within_retention:`仍在保留期限内`}},F={title:`Loop agents`,hint:`These definitions are shared by every project using this loop. Duplicate the loop to customize a separate workflow.`,legacy:`This saved loop still uses historical project agents. Import them or enable loop agents before changing its configuration.`,enable:`Use loop agents`,import:`Import current project agents`,restoreDefinition:`使用 Core 定义`,default:`Provider default`,effort:`Reasoning effort`,escalationModel:`Escalation model`,escalationEffort:`Escalation effort`,policy:`Workflow policy`,maxAttempts:`Maximum correction attempts`,maxTokens:`Token budget`,maxCostUsd:`Cost budget (USD)`,timeoutMs:`Run timeout (ms)`,projectHint:`Configure repository checks here. Agent definitions, models and workflow policy are configured in the loop editor. Historical project agents can be imported into a duplicated loop.`,showUnused:`Also show agents not used in this loop`,stepTitle:`Step agent and options`,stepHint:`Edit this step’s agent definition and engine. Steps using the same role in this loop share these settings.`,inheritProvider:`继承任务的提供商`,inheritDefinition:`跟随 Core 定义:每次升级 Core 都会自动更新。`,customizeDefinition:`为此循环自定义`,coreDefinitionUnavailable:`安装 Core 运行时后才能预览。`,turnLimits:{title:`轮数上限`,hint:`智能体每调用一次工具计为一轮。如果某个步骤因 "reached the configured limit of N turns" 而停止,请在此提高其上限,保存并发布;新的启动将使用该值。留空则使用 Core 默认值({{turns}})。项目设置不会改变循环的运行。`,role:`角色 {{role}}`,input:`{{steps}} 的最大轮数(角色 {{role}})`,stepHint:`角色 {{role}} 在 {{turns}} 轮后停止。使用此角色的步骤共享该上限;发布后对新的启动生效。`}},I={title:e,description:t,loading:n,loadFailed:r,retry:i,unavailable:a,save:o,saving:s,saved:c,saveFailed:l,approvalBeforeArchive:u,providers:d,cliNames:f,roles:p,agents:m,limits:h,verification:g,setup:_,runs:v,roleHints:y,review:b,architect:x,metrics:S,prompts:C,efficiency:w,evidence:T,loopRoles:E,pipeline:D,fixer:O,guardrails:k,unsavedChanges:A,customRoles:j,steering:M,studioRole:N,retention:P,loopAgents:F};export{m as agents,u as approvalBeforeArchive,x as architect,f as cliNames,j as customRoles,I as default,t as description,w as efficiency,T as evidence,O as fixer,k as guardrails,h as limits,r as loadFailed,n as loading,F as loopAgents,E as loopRoles,S as metrics,D as pipeline,C as prompts,d as providers,P as retention,i as retry,b as review,y as roleHints,p as roles,v as runs,o as save,l as saveFailed,c as saved,s as saving,_ as setup,M as steering,N as studioRole,e as title,a as unavailable,A as unsavedChanges,g as verification};
1
+ var e=`代理运行引擎`,t=`架构师、开发者和审阅者作为独立阶段运行,中间进行确定性验证。为每个角色选择提供商即可,其余都有可用的默认值。`,n=`正在加载运行设置…`,r=`无法加载运行设置。请先重试再修改。`,i=`重试`,a=`当前 Core 安装不包含代理运行引擎。启用前请更新 Core;停用时仍可提前配置。`,o=`保存运行设置`,s=`正在保存…`,c=`运行设置已保存`,l=`无法保存运行设置。`,u=`完成工作流前暂停并等待批准`,d={title:`提供商`,hint:`CLI 提供商使用现有登录。API 仅接受环境变量名称,请勿输入密钥。本地端点可留空。删除提供商前,请先重新分配使用它的角色。`,entry:`提供商 {{index}}`,id:`提供商 ID`,kind:`连接类型`,cli:`已安装的编程 CLI`,compatible:`兼容 OpenAI 的端点`,command:`编程 CLI`,baseUrl:`API 基础 URL`,apiKeyEnv:`API 密钥环境变量(可选)`,remove:`移除提供商`,addCli:`添加 CLI 提供商`,addLocal:`添加本地 / API 提供商`,show:`显示提供商连接`,hide:`隐藏提供商连接`,globalTitle:`AI 提供商`,globalHint:`每个项目由两类提供商驱动:本机检测到的编程 CLI,以及你在此注册的本地 OpenAI 兼容引擎。在项目设置 ▸ 代理引擎中将它们分配给流水线各阶段。更改适用于新的执行。`,label:`显示名称(可选)`,labelPlaceholder:`例如:局域网主机`,defaultModel:`默认模型`,defaultModelNone:`无默认(使用首个发现的模型)`,defaultModelPlaceholder:`模型 ID 或自定义别名`,customModel:`自定义别名…`,discoveredModels:`已发现的模型`,noModels:`尚未发现模型,请测试连接。`,rates:`费率(每 100 万 token 的美元,可选)`,ratesHint:`费用按估算显示;两项都留空则费用保持未知。`,inputRate:`输入 / 100 万`,outputRate:`输出 / 100 万`,ratesInvalid:`请将两项费率都填写为非负数,或都留空。`,reasoningEffort:`端点支持推理强度`,reasoningEffortHint:`发送 OpenAI 的 reasoning_effort 字段:每次调用使用该角色配置的推理强度,在紧凑架构师撰写计划时提升为 high。除非服务器支持,否则请保持关闭。`,apiKeyEnvMissing:`应用进程中未设置 {{name}}。请在启动应用的环境中设置它。`,test:`测试连接`,testing:`测试中…`,testFailed:`无法测试连接。`,rename:`重命名`,renameHint:`重命名后,角色分配仍指向此连接。`,idLocked:`保存后 ID 将被锁定。请使用“重命名”修改。`,localBadge:`本地引擎`,cliBadge:`CLI`,notDetected:`本机未检测到`,unsaved:`未保存的更改`,empty:`尚无连接。添加本地 / API 提供商以开始。`,fixBeforeSave:`保存前请修正标出的字段。`,status:{probing:`检测中…`,reachable:`可访问`,unauthorized:`未授权`,unreachable:`无法访问`,untested:`从未测试`},auth:{authenticated:`已登录`,unauthenticated:`未登录`,unknown:`登录状态未知`},agentLoop:`Agent 循环`,agentLoopHint:`implement 流水线如何驱动此模型`,agentLoop_compact:`紧凑`,agentLoop_compactHint:`由应用驱动的微步骤与结构化输出。推荐 ~30B 以下的模型使用。`,agentLoop_free:`自由`,agentLoop_freeHint:`每个角色一个 agent 循环,与 CLI 提供商相同。需要较强的模型。`,contextWindow:`上下文窗口(token)`,contextWindowHint:`与服务器的上下文大小保持一致(n_ctx / num_ctx)。用于在窗口填满前压缩旧的工具结果。默认 32768。`,maxOutput:`每轮输出预算(token)`,maxOutputHint:`单个工具轮次的 max_tokens;被截断的轮次会以两倍预算重试一次。它计入上下文窗口,因此始终受剩余空间限制——若模型会私下思考(thinking 会消耗该预算),请调高。默认 8192。`,reasoningEffortRailHint:`关闭时,此引擎在 rail 标题栏中不会显示推理强度选择器。`,presetTitle:`快速设置`,presetSmallModel:`小模型推荐`,presetSmallModelApplied:`已应用小模型预设`,presetSmallModelHint:`启用紧凑循环、转发推理强度并设置 32k 上下文窗口——这是在 7–14B 模型上验证过的组合。各字段仍可单独修改。`,cliGroup:`CLI 工具`,cliGroupHint:`在本机检测到——使用各自的登录,无需配置。`,localGroup:`本地引擎`,localGroupHint:`本应用可访问的 OpenAI 兼容端点(llama.cpp、Ollama、vLLM、LM Studio 等)。`,models_one:`{{count}} 个模型`,models_other:`{{count}} 个模型`,expand:`显示设置`,collapse:`隐藏设置`,overflow:`更多操作`,addLocalHero:`添加本地引擎`,emptyLocalPitch:`尚无本地引擎。将应用指向一个 OpenAI 兼容端点,即可在自己的硬件上运行流水线:成本由你掌控,数据不离开你的网络。`,defaultsGroup:`提供商默认值`},f={claude:`Claude`,codex:`Codex`,gemini:`Gemini`,kimi:`Kimi`},p={architect:`架构师`,developer:`开发者`,reviewer:`审查者`,fixer:`修复者`,verify:`验证`,archive:`完成`},m={title:`角色分配`,hint:`每个角色可以使用不同的提供商和模型。在常规设置 → AI 提供商中管理连接。默认每个代理最多{{turns}}轮。`,provider:`提供商`,model:`模型`,modelPlaceholder:`模型 ID 或 CLI 默认值`,maxTurns:`最大轮数(默认 {{turns}})`,defaultModel:`默认({{model}})`,thinking:`隐藏思考`,thinking_off:`关闭`,thinking_on:`开启`,thinkingHint:`默认关闭:在由主机驱动的循环中,隐藏推理会消耗输出预算和每轮的分钟数。对受益于深思的角色可开启(以 chat_template_kwargs.enable_thinking 发送;不识别该字段的端点会忽略)。`},h={title:`工作流限制`,hint:`留空则使用 Core 默认值:{{attempts}} 次修正尝试,每个角色步骤 {{minutes}} 分钟。在本地引擎上,超时按工作单元计算(一个任务组、一个工件、一次审查),默认 45 分钟,另有 20 分钟空闲看门狗;超时的步骤会阻塞运行,并可从下一个未完成的任务组恢复。token 和美元上限为可选;美元上限要求所有 AI 角色使用 Claude。`,maxAttempts:`开发者最大尝试次数(默认 {{attempts}})`,timeoutMinutes:`超时(分钟;默认 {{minutes}},本地引擎每个任务组 45)`,maxTokens:`最大令牌数`,maxCostUsd:`最大成本(USD)`,unlimited:`无限制`},g={title:`验证命令`,hint:`可选。在开发者完成后运行,失败会返回给开发者。留空时,架构师会在每次运行时提出项目自身的检查;没有自动检查的仓库仍会被审阅。`,detect:`检测项目检查`,detecting:`检测中…`,detected:`已根据此项目已定义的检查填写。`,nothingDetected:`未找到测试、类型检查或构建命令。没关系:架构师会在可能时于运行时提出检查。`,detectFailed:`无法检查项目仓库。`,repository:`仓库`,command:`命令`,reason:`检测自 {{reason}}`,remove:`移除`,add:`添加命令`,invalidLine:`验证命令为空或引号未闭合:{{line}}`,label:`检查名称(可选)`,moveUp:`上移`,moveDown:`下移`},_={title:`环境准备命令`,hint:"Core 在每次验证之前于仓库检出目录中运行的幂等命令(例如 `npx playwright install chromium`)。",add:`添加准备命令`,invalidLine:`准备命令为空或引号未闭合:{{line}}`,repository:`仓库`,command:`准备命令`,label:`准备命令标签(可选)`,remove:`移除`,moveUp:`上移准备命令`,moveDown:`下移准备命令`,empty:`没有准备命令。验证将直接在检出目录中运行。`},v={title:`已保存的执行`,refresh:`刷新`,hint:`在原始工作树中使用冻结的范围和设置继续执行,进度显示在该任务的日志中。此操作不会发布或重启 Desktop 交付。请从任务控件停止活动中的执行。`,empty:`没有已保存的执行。`,loadFailed:`无法加载已保存的执行。`,actionFailed:`无法更新此执行。`,phase:`下一阶段:{{phase}}`,approve:`批准完成`,recover:`恢复中断阶段`,resume:`继续`,cancel:`取消继续执行`,status:{running:`继续中…`,succeeded:`成功`,failed:`失败`,blocked:`已阻止`,paused:`已暂停`,cancelled:`已取消`,interrupted:`已中断`,unavailable:`不可用`,expired:`已过期`},question:`架构师提问:`,answerLabel:`你的回答`,answerPlaceholder:`回答该问题后,架构师将据此继续。`,answer:`回答并继续`,viewLog:`查看任务日志`,implementation:`实现`,preserveProgress:`从所示阶段继续,保留已有工作和保存的设置。`,reviewDelivery:`实现已完成。交付前请在任务日志中检查结果;本次继续执行未发布结果。`,prepareDelivery:`准备交付`,dismiss:`忽略`,selectRecovery:`选择要恢复的中断尝试`},y={architect:`阅读代码并撰写提案、设计、任务和规范。只读。`,developer:`带测试地实现任务。可在 CLI 沙箱内编辑文件并运行命令。`,reviewer:`对照规范和验证证据检查结果。只读。`},b={title:`评审门槛`,hint:`留空则使用 Core 的门槛。数值只能提高门槛:总体分数至少 {{score}},安全性至少 {{security}},其他方面至少 {{aspect}}。`,minScore:`最低总体分数(默认 {{score}})`,aspects:{type_correctness:`类型正确性(默认 {{score}})`,pattern_adherence:`模式遵循(默认 {{score}})`,test_coverage:`测试覆盖率(默认 {{score}})`,security:`安全性(默认 {{score}})`,architectural_alignment:`架构一致性(默认 {{score}})`}},x={title:`架构师置信度`,hint:`经过一轮自主调查后,若设计的置信度仍然较低,则带着架构师的问题暂停,或基于已声明的假设继续。`,onLowConfidence:`置信度低时`,ask:`询问(带问题暂停)`,proceed:`基于已声明的假设继续`},S={title:`用量与时间`,hint:`包含修正和失败的调用。代理时间包含工具执行时间。缓存令牌属于输入令牌的一部分。`,unknown:`不可用`,duration:`执行时间`,agentTime:`代理时间`,cost:`已报告费用`,providerCalls:`代理调用`,toolCalls:`工具调用`,input:`输入令牌`,output:`输出令牌`,uncached:`未缓存输入`,cacheRead:`缓存读取`,cacheWrite:`缓存写入`,partial:`部分尝试没有详细测量数据。`,phases:`各阶段用量`,phase:`阶段`,attempts:`尝试次数`},C={title:`代理角色提示词`,description:`查看和编辑各角色的指令。所有项目和提供商共用这些指令;更改适用于新任务。恢复的任务保留原始提示词。`,definition:`{{role}}定义`,default:`出厂默认值`,custom:`已自定义`,restore:`恢复默认值`,contracts:`Spec 上下文、OpenSpec 工作流程和所需的响应格式会自动添加,无法在此编辑。`,invalid:`每个定义必须包含 1–20,000 个字符,不能仅包含空白字符,也不能包含空字节。`,saved:`角色提示词已保存`,unsaved:`未保存的更改`,discard:`放弃更改`,save:`保存提示词`,fixerHint:`仅在修正轮次使用:验证失败或审查被拒之后。除非“设置 ▸ 代理引擎 ▸ 修复者”指定了独立引擎,否则运行在开发者引擎上。恢复开发者会话的 CLI 提供方收到的是简短的修正跟进;每当启动新会话(本地引擎、修复者引擎、会话丢失)时,本定义生效。`},w={title:`实现效率`,scope:`适用于新运行。已保存的运行保留原始配置和运行时。`,effort:`推理强度`,providerDefault:`提供商默认值`,unconfirmed:`未确认`,unknownSupport:`尚未确认此模型和传输方式的支持情况。`,escalation:`允许使用同一提供商的一个更高等级`,baseRequired:`请先明确选择基础模型。`,escalationModel:`更高等级模型`,triggers:{architect:`仅现有的深入调查步骤可选择此等级。`,developer:`两个候选实现失败后,下一次允许的尝试可选择此等级。`,reviewer:`仅用于修复格式错误的响应;拒绝代码不会触发升级。`,fixer:`只有修正轮次才能进入此层级;首次实现从不运行修复者。`},contextMode:`仓库上下文`,reviewMode:`修正审查`,planning:`规划深度`,adaptive:`自适应`,full:`完整`,developerChecks:`接受开发者提出的额外检查`,concurrency:`最大并发检查数`,concurrencyHint:`默认值为 1。只有主机声明为独立且属于不同仓库的检查才能并发运行。默认不复用检查。`,checkCapabilities:`检查模型兼容性`,capabilitiesFailed:`无法确认兼容性。请更新配套 Core 或保留提供商默认值。`},T={title:`验证证据`,acceptance:`技术验收`,acceptanceStatus:{pending:`待处理`,validated:`已验证`,"with-exceptions":`存在例外`,blocked:`已阻止`},calls:`代理调用`,executed:`已执行检查`,reused:`已复用检查`,unknown:`不可用`,unavailable:`证据不可用。已记录的结果不代表当前仍然有效。`,current:`当前候选实现和计划`,historical:`历史结果`,moreChecks:`更多检查`,output:`验证输出`,empty:`无输出`,truncated:`此页面有长度限制或记录已截断。`,nextPage:`下一页输出`,status:{passed:`通过`,failed:`失败`,cancelled:`已取消`,interrupted:`已中断`},disposition:{executed:`已执行`,reused:`已复用`,"not-run":`未执行`},origin:`来源`,origins:{host:`主机`,architect:`架构师`,developer:`开发者`,"frozen-runtime-config":`已保存配置`,"project-role":`项目角色`,default:`默认`,"explicit-launch-override":`本次运行选择的提供商`,"loop-role":`循环角色`},reuseDisabled:`此检查已禁用复用。`,reuseConfirmed:`确认输入和工具链一致后复用。`,inputsChanged:`验证期间输入发生变化;结果已失效。`,reuseUnproven:`没有输入一致且仍然有效的结果;已重新执行检查。`,original:`原始执行`,requested:`请求值`,reported:`报告值`},E={title:`循环角色`,hint:`轨道以“按角色”引擎启动时循环侧角色所用的引擎。上方的流水线角色(architect、developer、reviewer)已来自此运行时配置。`,verifier:`验证者`,verifierHint:`循环中所有非核心的 AI 步骤:verify、fix 和自定义 AI 步骤。`,decider:`决策者`,deciderHint:`读取结论并决定下一步的 Loop Decider——选择便宜快速的模型最合适。`,inherit:`继承主引擎`,model:`模型`,effort:`推理强度`,disabled:`代理运行时已禁用——在启用之前,以“按角色”引擎启动的轨道会被拒绝。`,saveFailed:`无法保存循环角色。`},D={title:`实现流水线`,explainer:`每次实现都按此顺序执行这些阶段。当 rail 的引擎为“{{roles}}”时,每个阶段使用下方配置的引擎——每个阶段可以有不同的提供商、模型和推理强度。若在 rail 上选择具体引擎,则所有阶段都在该引擎上运行。`,host:`主机`,noCommand:`无命令`,inherits:`继承主引擎`,inheritsDeveloper:`继承开发者`,open:`展开`,collapse:`收起`,groups:{core:{title:`核心流水线`,hint:`在每次实现中运行:规划、构建、验证、修复、评审。`},loop:{title:`循环步骤`,hint:`包裹运行的 rail 循环(验证 → 决策 → 修复)以及自定义循环的 AI 步骤;未设置时继承主引擎。`,chip:`rail 循环`}},phases:{architect:{name:`架构师`,purpose:`阅读代码并编写提案、设计与任务。`},developer:{name:`开发者`,purpose:`带测试地实现任务。`},verification:{name:`验证`,purpose:`主机运行你的检查;失败会返回给开发者。`},fixer:{name:`修复者`,purpose:`修正验证或评审驳回的内容;未配置时继承开发者。`},reviewer:{name:`审查者`,purpose:`对照规格与证据检查结果。`},verifier:{name:`校验者`,purpose:`循环中的 verify、fix 与自定义 AI 步骤。`},decider:{name:`决策者`,purpose:`读取裁定并决定循环的下一步。`}}},O={title:`修复者引擎`,inherit:`继承开发者`,own:`独立引擎`,hint:`仅在修正轮次运行:验证失败或评审被驳回之后;首次实现仍由开发者完成。当开发者是廉价的本地模型时,在此使用更强或云端模型更划算。`},k={title:`护栏`,intro:`宿主在本地模型周围施加的流程规则,防止小模型跑偏。默认全部开启;只有在需要微调流程时才关闭某一项。CLI 提供商永不受影响。`,unsupported:`此 Core 安装未提供可配置的护栏。请更新 Core 以进行调整;内置规则仍然生效。`,active:`{{total}} 项中 {{on}} 项已启用`,reset:`恢复默认`,phases:{architect:`架构师`,developer:`开发者`,host:`宿主`},unknown:`由更新版本的 Core 新增的护栏;此应用尚无对应描述。`,items:{"plan-validation":{title:`经过校验的任务计划`,description:`拒绝指向 openspec/、把裸文件名列为任务、任务/分组数量相对规格过少或验收标准未覆盖的计划;架构师会重试。`,why:`含糊或不完整的计划是小型开发者模型写出桩代码的头号原因。`},"genuine-blocking-question":{title:`只允许真正的阻塞问题`,description:`架构师只能用以“?”结尾的真实问题暂停运行,绝不能用复制的示例文本。`,why:`小模型会照搬提示词占位符,导致每次运行都被阻塞。`},"plan-language-hint":{title:`按仓库语言规划`,description:`告知架构师主要语言,使任务文件名带有正确的扩展名。`,why:`在 TypeScript 仓库上生成 JS 计划会让任务无法勾选。`},"frozen-plan-writes":{title:`规划产物已冻结`,description:`开发者不能写入 openspec/;计划归宿主所有。`,why:`模型会通过修改计划而不是代码来“实现”功能。`},"primary-language":{title:`主要语言提醒`,description:`每个任务组都会被告知仓库的主要语言;新文件应使用该语言。`,why:`防止用另一种语言做第二套实现。`},"duplicate-sibling":{title:`跨语言不允许孪生模块`,description:`当 board.ts 已存在时拒绝 board.js;请扩展现有模块。`,why:`孪生模块都会编译,而测试会导入错误的那个。`},"one-test-per-module":{title:`每个模块一个测试文件`,description:`当 board.test.ts 已存在时拒绝 board.tick.test.ts;请扩展它。`,why:`否则每轮修正都会新增一个测试套件。`},"empty-write":{title:`禁止空覆盖`,description:`拒绝用空内容覆盖非空文件;请写入完整内容或打补丁。`,why:`一次“清理”曾把 index.ts 变成 0 行。`},"evidence-gated-ticking":{title:`有证据才勾选任务`,description:`指明文件的任务只有在文件存在且不是桩代码时才算完成(接受同类扩展名)。`,why:`否则“完成”只是一句声明,验证时无物可测。`},"inventory-retry":{title:`用真实清单重试`,description:`当模型声称仓库为空而放弃(实际并非如此)时,带上文件列表重试一次。`,why:`以低成本给第二次机会,而不是失败的步骤。`},"synthetic-corrections":{title:`把反馈变成任务`,description:`当所有任务都已勾选但审查/验证失败时,把反馈转成具体的修正任务。`,why:`否则开发者会回答“已经完成”,什么都不会改变。`},"silent-group-closure":{title:`关闭沉默的分组并保留其文件`,description:`模型停止响应的分组会被关闭,计入其写入的文件并保留任务为未完成,而不是让整个运行失败。`,why:`一个 9B 模型写了五个模块后沉默,导致整个运行失败。`},"environment-repair":{title:`宿主修复环境`,description:`缺失的依赖或测试工具(npm install、ts-jest、@types/jest、Jest 配置模块)由宿主安装,然后重新验证一次。`,why:`模型无法修复环境,只会在尝试中耗尽修正次数。`},"lockfile-repair":{title:`丢弃手写的锁文件`,description:`模型编造的 package-lock.json(EINTEGRITY/ETARGET)会被删除,并重试安装一次。`,why:`编造的哈希永远无法安装。`},"verify-idle-timeout":{title:`终止挂起的测试`,description:`5 分钟无输出的验证命令会被终止,并报告为疑似挂起(附最后输出)。`,why:`否则测试里的 while 循环会把运行拖到 15 分钟上限。`},"verify-per-group":{title:`每组后验证`,description:`在每个任务组完成后立即运行仓库自身的测试命令;失败时趁该组上下文仍新鲜进行一轮就地修复。`,why:`最后一次面对五个损坏的测试套件,比逐个修复难得多。`},"test-reachability":{title:`每个新测试都必须真正运行`,description:"开发者写下、但仓库测试命令从未执行的测试文件(逐个列举文件的 `test` 脚本漏掉了新文件)会使验证失败并指出确切文件——先在任务组层面,再在主机验证时。",why:`一个 622 行、含六个失败用例的测试套件曾因从未被运行而“绿灯”交付。`},"exit-code-honesty":{title:`不信任报告失败却返回 0 的退出码`,description:'验证命令以 0 退出但输出中打印了失败(`FAIL:` 行、"3 failed"、AssertionError)时视为失败,并交给修复者,同时指出测试框架本身是缺陷。',why:`一个从不设置非零退出码的手写测试运行器曾把三个失败测试当作通过交付。`},"verification-output-adoption":{title:`采纳检查自身写出的输出`,description:`如果验证通过但其命令重写了受版本控制的文件(例如重新生成映射的 lint 步骤),主机会将这些文件保留在候选中并再验证一次;reviewer 和 fixer 不得撤销它们。`,why:`一个会重新生成受版本控制文件的 lint 前置步骤,让每次通过的运行都看起来像候选被修改,把修正次数浪费在并非缺陷的问题上。`}}},A=`未保存的更改`,j={title:`自定义角色`,hint:`为工作流角色定义可复用的指令和明确的权限。`,unsupported:`更新 Core 后即可编辑自定义角色。`,remove:`删除 {{id}}`,access:`源代码访问权限`,read:`只读`,write:`读写`,artifacts:`OpenSpec 工件访问权限`,none:`无`,tasks:`仅任务复选框`,all:`该变更的所有工件`,skill:`OpenSpec 技能`,noSkill:`不绑定技能`,prompt:`角色指令`,id:`角色 ID`,add:`添加角色`,invalidId:`使用以字母开头的唯一小写 ID,最多包含64个字母、数字或连字符。内置 ID 为保留名称。`,escalationHint:`仅允许的协议修复可以使用升级模型,不会增加重试次数。`},M={title:`运行指令`,hint:`Core 会保存这些指令,供下一个符合条件的代理回合使用。发送指令不会回答问题或授予批准。`,label:`补充指令`,send:`发送指令`,accepted:`Core 已接收,等待代理使用。`,pending:`等待代理回合`,consumed:`代理已使用`,counts:`待处理:{{pending}} · 已使用:{{consumed}}`,failed:`无法发送指令。请重试以确认同一条消息。`,unavailable:`无法获取接收记录详情。`,unreported:`此 Core 版本不报告使用状态。`,truncated:`仅显示最近的接收记录和待处理消息。`},N={title:`Core 角色默认值`,hint:`这些文件默认值适用于新工作流。项目的显式设置优先;已保存的运行保留其固定配置。`,invalid:`更改角色字段前,请先在编辑器中修正 YAML 头部。`,escalationEffort:`更高级模型的推理强度`},P={title:`历史保留`,description:`删除已过期的执行历史和未使用的 Core 版本。已删除的历史无法恢复执行或创建分支。运行中、可恢复的执行和待交付内容仍受保护;任务日志与费用记录会保留。`,forever:`永久保留历史`,days:`保留天数`,save:`保存保留设置`,preview:`预览清理`,collect:`删除过期历史`,previewSummary:`可清理:{{runs}} 条历史和 {{packages}} 个未使用的 Core 版本。`,collectedSummary:`已过期:{{runs}} 条历史。已删除:{{packages}} 个未使用的 Core 版本。`,more:`另有 {{count}} 次执行。`,failed:`无法查看或更新保留设置。`,expired:`此执行历史已根据项目策略过期。任务日志和费用记录仍然可用。`,loading:`正在加载保留策略…`,states:{protected:`已保留`,eligible:`可清理`,expired:`已过期`,cleanup_pending:`等待清理`,busy:`使用中`,error:`检查失败`},reasons:{disabled:`永久保留`,recoverable:`仍可恢复`,active:`执行中`,human_pending:`等待人工回复`,interrupted_writes:`中断的写入需要检查`,delivery_pending:`等待交付`,fork_pending:`仍有依赖分支`,unknown_terminal_time:`完成时间未知`,within_retention:`仍在保留期限内`}},F={title:`循环智能体`,hint:`这些定义由所有使用此循环的项目共享。复制该循环即可自定义独立的工作流。`,legacy:`此已保存的循环仍在使用旧版项目智能体。请先导入它们或启用循环智能体,再更改其配置。`,enable:`使用循环智能体`,import:`导入当前项目的智能体`,restoreDefinition:`使用 Core 定义`,default:`提供商默认值`,effort:`推理强度`,escalationModel:`升级模型`,escalationEffort:`升级推理强度`,policy:`工作流策略`,maxAttempts:`最大修正尝试次数`,maxTokens:`Token 预算`,maxCostUsd:`成本预算 (USD)`,timeoutMs:`运行超时 (ms)`,projectHint:`在此配置仓库检查。智能体定义、模型和工作流策略在循环编辑器中配置。旧版项目智能体可以导入到复制的循环中。`,showUnused:`同时显示此循环中未使用的智能体`,stepTitle:`步骤智能体与选项`,stepHint:`编辑此步骤的智能体定义和引擎。此循环中使用相同角色的步骤共享这些设置。`,inheritProvider:`继承任务的提供商`,inheritDefinition:`跟随 Core 定义:每次升级 Core 都会自动更新。`,customizeDefinition:`为此循环自定义`,coreDefinitionUnavailable:`安装 Core 运行时后才能预览。`,turnLimits:{title:`轮数上限`,hint:`智能体每调用一次工具计为一轮。如果某个步骤因 "reached the configured limit of N turns" 而停止,请在此提高其上限,保存并发布;新的启动将使用该值。留空则使用 Core 默认值({{turns}})。项目设置不会改变循环的运行。`,role:`角色 {{role}}`,input:`{{steps}} 的最大轮数(角色 {{role}})`,stepHint:`角色 {{role}} 在 {{turns}} 轮后停止。使用此角色的步骤共享该上限;发布后对新的启动生效。`}},I={label:`审查者模型系列建议`,title:`在 {{provider}} 上运行审查者——不同的模型系列能发现不同的错误`,body:`开发者和审查者目前使用同一提供商。这只是建议:除非你应用,否则不会有任何更改。`,apply:`应用`,dismiss:`忽略`},L={title:`规格分诊引擎`,hint:`分诊会读取每个新建或编辑过的规格,并推荐用于启动它的循环。每个规格只进行一次简短的结构化调用。默认使用项目主提供方中最便宜的模型。`,provider:`分诊提供方`,inherit:`主提供方`,model:`模型`,cheapestModel:`最便宜的模型(默认)`,loading:`正在加载分诊引擎…`,loadFailed:`无法读取分诊引擎。分诊将继续使用主提供方;重新打开此设置即可重试。`,saveFailed:`分诊引擎未保存,已保留之前的选择。`},R={title:e,description:t,loading:n,loadFailed:r,retry:i,unavailable:a,save:o,saving:s,saved:c,saveFailed:l,approvalBeforeArchive:u,providers:d,cliNames:f,roles:p,agents:m,limits:h,verification:g,setup:_,runs:v,roleHints:y,review:b,architect:x,metrics:S,prompts:C,efficiency:w,evidence:T,loopRoles:E,pipeline:D,fixer:O,guardrails:k,unsavedChanges:A,customRoles:j,steering:M,studioRole:N,retention:P,loopAgents:F,reviewerSuggestion:I,triageEngine:L};export{m as agents,u as approvalBeforeArchive,x as architect,f as cliNames,j as customRoles,R as default,t as description,w as efficiency,T as evidence,O as fixer,k as guardrails,h as limits,r as loadFailed,n as loading,F as loopAgents,E as loopRoles,S as metrics,D as pipeline,C as prompts,d as providers,P as retention,i as retry,b as review,I as reviewerSuggestion,y as roleHints,p as roles,v as runs,o as save,l as saveFailed,c as saved,s as saving,_ as setup,M as steering,N as studioRole,e as title,L as triageEngine,a as unavailable,A as unsavedChanges,g as verification};