specrails-desktop 2.57.0 → 2.58.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 (336) hide show
  1. package/README.md +1 -1
  2. package/cli/dist/args.js +10 -4
  3. package/cli/dist/help.js +1 -1
  4. package/client/dist/assets/{ActivityFeedPage-DdMNmVBk.js → ActivityFeedPage-BQGppIR0.js} +1 -1
  5. package/client/dist/assets/{AgentBrowserCapture-CeerUf--.js → AgentBrowserCapture-PI-cxyxi.js} +1 -1
  6. package/client/dist/assets/{AgentModeAnalyticsPane-BjGb-8rh.js → AgentModeAnalyticsPane-mQsOqdXx.js} +2 -2
  7. package/client/dist/assets/{AgentModeCodePane-8XRkQEo_.js → AgentModeCodePane-BL-vpmlY.js} +2 -2
  8. package/client/dist/assets/{AgentModeJobsPane-BN3dgJOA.js → AgentModeJobsPane-DR_06oqH.js} +1 -1
  9. package/client/dist/assets/AgentsPage-BKIKjm_1.js +118 -0
  10. package/client/dist/assets/{AnalyticsPage-CyfhYiBn.js → AnalyticsPage-069npRVo.js} +1 -1
  11. package/client/dist/assets/{CodePage-C2Nf-Q5W.js → CodePage-Alitorrv.js} +2 -2
  12. package/client/dist/assets/DesktopAnalyticsPage-qtWAPM47.js +1 -0
  13. package/client/dist/assets/{DocsDialog-Br3bczCp.js → DocsDialog-DwL6rgcT.js} +1 -1
  14. package/client/dist/assets/{DocsPage-BcDr2cBm.js → DocsPage-BA1hiJZ-.js} +1 -1
  15. package/client/dist/assets/{ExportDropdown-BVGKEgkd.js → ExportDropdown-BcMpvV89.js} +1 -1
  16. package/client/dist/assets/InteractiveJobComposer-B3H1YHr6.js +19 -0
  17. package/client/dist/assets/JobDetailModal-XZQ9eAAy.js +1 -0
  18. package/client/dist/assets/{JobDetailPage-vBbNeRuz.js → JobDetailPage-B-SIaq_q.js} +1 -1
  19. package/client/dist/assets/{JobsPage-CJCtPhIz.js → JobsPage-iQXAv2mx.js} +1 -1
  20. package/client/dist/assets/LoopBuilderPage-B_gbFAHn.js +1 -0
  21. package/client/dist/assets/LoopPreviewModal-je5pSCf-.js +1 -0
  22. package/client/dist/assets/LoopsPage-BZwcY5cu.js +2 -0
  23. package/client/dist/assets/{MinimizedChatsContext-D3QzgV0B.js → MinimizedChatsContext-CNx_0bZu.js} +1 -1
  24. package/client/dist/assets/{PluginsPage-DOpTV75p.js → PluginsPage-DFocnoHX.js} +2 -2
  25. package/client/dist/assets/{ProjectSettingsDialog-Dkwrn0z1.js → ProjectSettingsDialog-Bh3S6EBB.js} +1 -1
  26. package/client/dist/assets/{RepositoryDeliveries-Du2UCf1a.js → RepositoryDeliveries-BiwJuS8r.js} +1 -1
  27. package/client/dist/assets/{RepositoryScopeSelector-hPGZNRBm.js → RepositoryScopeSelector-C2mvWBQ6.js} +1 -1
  28. package/client/dist/assets/{ReviewPacketPage-DcOq-UTA.js → ReviewPacketPage-CrAf-WDy.js} +2 -2
  29. package/client/dist/assets/TemplatePreviewModal-C7DordpN.js +1 -0
  30. package/client/dist/assets/{TicketDetailModalContext-DAK-NoK6.js → TicketDetailModalContext-B-DySpKL.js} +1 -1
  31. package/client/dist/assets/{Trans-DEbgkuAY.js → Trans-D3AfDylf.js} +1 -1
  32. package/client/dist/assets/agentRuntime-BeUb3g9g.js +1 -0
  33. package/client/dist/assets/agentRuntime-Bg9tbmqm.js +1 -0
  34. package/client/dist/assets/agentRuntime-D-GJVGkj.js +1 -0
  35. package/client/dist/assets/agentRuntime-D2__CVI_.js +1 -0
  36. package/client/dist/assets/agentRuntime-D35dGVOP.js +1 -0
  37. package/client/dist/assets/agentRuntime-DGz_IqKW.js +1 -0
  38. package/client/dist/assets/agentRuntime-O1liDt6G.js +1 -0
  39. package/client/dist/assets/agentRuntime-hInH9Fzj.js +1 -0
  40. package/client/dist/assets/agentstudio-B2CTtQgZ.js +1 -0
  41. package/client/dist/assets/agentstudio-BWAKeGgB.js +1 -0
  42. package/client/dist/assets/{agentstudio-DR7doNBV.js → agentstudio-Cja8Sjcp.js} +1 -1
  43. package/client/dist/assets/agentstudio-DtfPcr99.js +1 -0
  44. package/client/dist/assets/agentstudio-QdAJIDef.js +1 -0
  45. package/client/dist/assets/agentstudio-X70BKf6u.js +1 -0
  46. package/client/dist/assets/agentstudio-fLXpRGIi.js +1 -0
  47. package/client/dist/assets/agentstudio-qXKqVnWS.js +1 -0
  48. package/client/dist/assets/{analytics-jzCkOec3.js → analytics-B1DIQd4m.js} +1 -1
  49. package/client/dist/assets/{analytics-CoEzWPx4.js → analytics-BAIZ9vE_.js} +1 -1
  50. package/client/dist/assets/{analytics-DjLlE7jS.js → analytics-BTqgmgBd.js} +1 -1
  51. package/client/dist/assets/analytics-BWynXPEm.js +1 -0
  52. package/client/dist/assets/{analytics-nZIjjtCc.js → analytics-DGcUsQ44.js} +1 -1
  53. package/client/dist/assets/{analytics-BNgZ1Nj7.js → analytics-GnSnpJ4W.js} +1 -1
  54. package/client/dist/assets/{analytics-DFh5lSOl.js → analytics-TWgYaoO0.js} +1 -1
  55. package/client/dist/assets/{analytics-DZp-DS2U.js → analytics-kJy6Tuko.js} +1 -1
  56. package/client/dist/assets/builder-C0FyvM83.js +1 -0
  57. package/client/dist/assets/builder-C1neIYGR.js +1 -0
  58. package/client/dist/assets/builder-CvnFm0im.js +1 -0
  59. package/client/dist/assets/builder-CzW5ovyI.js +1 -0
  60. package/client/dist/assets/builder-D06L7iPy.js +1 -0
  61. package/client/dist/assets/builder-DGETbtZj.js +1 -0
  62. package/client/dist/assets/builder-DXEJUlC0.js +1 -0
  63. package/client/dist/assets/builder-DyQperXU.js +1 -0
  64. package/client/dist/assets/common-BCK7c9Pv.js +1 -0
  65. package/client/dist/assets/common-C0BOdeNi.js +1 -0
  66. package/client/dist/assets/common-C4Yvvhp6.js +1 -0
  67. package/client/dist/assets/{common-BrlwEnL7.js → common-DmsclwjP.js} +1 -1
  68. package/client/dist/assets/common-DpLWwgI1.js +1 -0
  69. package/client/dist/assets/common-OCvl3c8t.js +1 -0
  70. package/client/dist/assets/common-c0aujEZC.js +1 -0
  71. package/client/dist/assets/common-od8WThlf.js +1 -0
  72. package/client/dist/assets/dashboard-B1ndRHuC.js +1 -0
  73. package/client/dist/assets/dashboard-BX7KXiqA.js +1 -0
  74. package/client/dist/assets/dashboard-B_BSNxcN.js +1 -0
  75. package/client/dist/assets/dashboard-CCeFN7-V.js +1 -0
  76. package/client/dist/assets/dashboard-CRl0WtFJ.js +1 -0
  77. package/client/dist/assets/dashboard-XGdQ5mjw.js +1 -0
  78. package/client/dist/assets/dashboard-_oltA6Jd.js +1 -0
  79. package/client/dist/assets/dashboard-bAuf5KVk.js +1 -0
  80. package/client/dist/assets/{formatDistanceToNow-Cc2u5FwQ.js → formatDistanceToNow-aBss1Nai.js} +1 -1
  81. package/client/dist/assets/{getTimezoneOffsetInMilliseconds-BHm2U-w1.js → getTimezoneOffsetInMilliseconds-DOGj1Mfz.js} +1 -1
  82. package/client/dist/assets/index-BS7KCWkV.css +2 -0
  83. package/client/dist/assets/{index-Cxb288Rj.js → index-C4Mv6tV6.js} +32 -32
  84. package/client/dist/assets/{jira-api-DrGxiD9p.js → jira-api-BYbEPlkr.js} +1 -1
  85. package/client/dist/assets/{jobs-DSp9DoD_.js → jobs-6_-r75yC.js} +1 -1
  86. package/client/dist/assets/{jobs-C6qmvUAi.js → jobs-B1yqyId5.js} +1 -1
  87. package/client/dist/assets/{jobs-DoFaEl9g.js → jobs-BFuV7ttH.js} +1 -1
  88. package/client/dist/assets/{jobs-DTQO08nJ.js → jobs-BKa8LuwA.js} +1 -1
  89. package/client/dist/assets/{jobs-DrF8Do8s.js → jobs-BKiK-ZWh.js} +1 -1
  90. package/client/dist/assets/{jobs-DLHdDkHc.js → jobs-DmKV7b7d.js} +1 -1
  91. package/client/dist/assets/{jobs-C9j2PuwW.js → jobs-KG4Sn12X.js} +1 -1
  92. package/client/dist/assets/{jobs-Dpw6AEOP.js → jobs-pPv4KWjb.js} +1 -1
  93. package/client/dist/assets/loop-layout-BF8xMiNv.js +7 -0
  94. package/client/dist/assets/loops-B4_D-nbg.js +1 -0
  95. package/client/dist/assets/loops-BJDY9FTh.js +1 -0
  96. package/client/dist/assets/loops-BO3V8244.js +1 -0
  97. package/client/dist/assets/loops-C-hZK8pf.js +1 -0
  98. package/client/dist/assets/loops-CDOWZ0ci.js +1 -0
  99. package/client/dist/assets/loops-Dv849ckF.js +1 -0
  100. package/client/dist/assets/loops-Q9LIgGkq.js +1 -0
  101. package/client/dist/assets/loops-eUnCfLjC.js +1 -0
  102. package/client/dist/assets/{project-repositories-9Wzs0coQ.js → project-repositories-CSnfzUpg.js} +1 -1
  103. package/client/dist/assets/settings-3o4Ntzi5.js +1 -0
  104. package/client/dist/assets/settings-B97jlkwD.js +1 -0
  105. package/client/dist/assets/settings-BTaT_bsS.js +1 -0
  106. package/client/dist/assets/settings-CT8w7WiC.js +1 -0
  107. package/client/dist/assets/settings-Cvr8_tvh.js +1 -0
  108. package/client/dist/assets/settings-Dn1qgAC8.js +1 -0
  109. package/client/dist/assets/settings-EShDdg4J.js +1 -0
  110. package/client/dist/assets/settings-tfLhQZRN.js +1 -0
  111. package/client/dist/assets/{setup-Dwzt5nO1.js → setup-CBMu3tqH.js} +1 -1
  112. package/client/dist/assets/{setup-B5FHuxvB.js → setup-CPh-e6J2.js} +1 -1
  113. package/client/dist/assets/{setup-DpqzaEEA.js → setup-CRKLp_ke.js} +1 -1
  114. package/client/dist/assets/{setup-CROyqD5N.js → setup-Cy302v4J.js} +1 -1
  115. package/client/dist/assets/{setup-C9Fy9PKQ.js → setup-D681vTPf.js} +1 -1
  116. package/client/dist/assets/{setup-BihzXadx.js → setup-DYK0VBkE.js} +1 -1
  117. package/client/dist/assets/{setup-BtC6Hg4K.js → setup-KAuiIiVs.js} +1 -1
  118. package/client/dist/assets/{setup-zLEDnG7N.js → setup-OGX-oCfI.js} +1 -1
  119. package/client/dist/assets/{spending-T5GM7wpn.js → spending-HBSk-6jv.js} +1 -1
  120. package/client/dist/assets/{useDesktop-QogiN0zR.js → useDesktop-0unHDBJJ.js} +1 -1
  121. package/client/dist/assets/useRuntimeRuns-BN1rhyEm.js +1 -0
  122. package/client/dist/assets/{useSharedWebSocket-Dz-HI6De.js → useSharedWebSocket-BZMrX4jr.js} +2 -2
  123. package/client/dist/index.html +25 -25
  124. package/docs/agent-live-steering.md +16 -0
  125. package/docs/cli.md +7 -7
  126. package/docs/codex.md +2 -2
  127. package/docs/customizing.md +1 -1
  128. package/docs/gemini.md +1 -1
  129. package/docs/getting-started.md +1 -1
  130. package/docs/guide/de/integrations/7-local-engines.md +1 -1
  131. package/docs/guide/de/pipeline/1-rails-and-jobs.md +8 -6
  132. package/docs/guide/de/pipeline/2-the-job-detail-view.md +11 -2
  133. package/docs/guide/de/pipeline/4-picking-an-engine-per-rail.md +2 -2
  134. package/docs/guide/de/pipeline/5-the-loop-builder.md +24 -5
  135. package/docs/guide/en/integrations/7-local-engines.md +1 -1
  136. package/docs/guide/en/pipeline/1-rails-and-jobs.md +8 -6
  137. package/docs/guide/en/pipeline/2-the-job-detail-view.md +11 -2
  138. package/docs/guide/en/pipeline/4-picking-an-engine-per-rail.md +2 -2
  139. package/docs/guide/en/pipeline/5-the-loop-builder.md +34 -5
  140. package/docs/guide/en/settings/3-pipeline-telemetry-and-diagnostics.md +1 -1
  141. package/docs/guide/es/integrations/7-local-engines.md +1 -1
  142. package/docs/guide/es/pipeline/1-rails-and-jobs.md +8 -6
  143. package/docs/guide/es/pipeline/2-the-job-detail-view.md +11 -2
  144. package/docs/guide/es/pipeline/4-picking-an-engine-per-rail.md +2 -2
  145. package/docs/guide/es/pipeline/5-the-loop-builder.md +30 -5
  146. package/docs/guide/es/settings/3-pipeline-telemetry-and-diagnostics.md +1 -2
  147. package/docs/guide/fr/integrations/7-local-engines.md +1 -1
  148. package/docs/guide/fr/pipeline/1-rails-and-jobs.md +8 -6
  149. package/docs/guide/fr/pipeline/2-the-job-detail-view.md +11 -2
  150. package/docs/guide/fr/pipeline/4-picking-an-engine-per-rail.md +2 -2
  151. package/docs/guide/fr/pipeline/5-the-loop-builder.md +24 -5
  152. package/docs/guide/it/integrations/7-local-engines.md +1 -1
  153. package/docs/guide/it/pipeline/1-rails-and-jobs.md +8 -6
  154. package/docs/guide/it/pipeline/2-the-job-detail-view.md +11 -2
  155. package/docs/guide/it/pipeline/4-picking-an-engine-per-rail.md +2 -2
  156. package/docs/guide/it/pipeline/5-the-loop-builder.md +24 -5
  157. package/docs/guide/ja/integrations/7-local-engines.md +1 -1
  158. package/docs/guide/ja/pipeline/1-rails-and-jobs.md +8 -6
  159. package/docs/guide/ja/pipeline/2-the-job-detail-view.md +11 -2
  160. package/docs/guide/ja/pipeline/4-picking-an-engine-per-rail.md +2 -2
  161. package/docs/guide/ja/pipeline/5-the-loop-builder.md +24 -5
  162. package/docs/guide/pt/integrations/7-local-engines.md +1 -1
  163. package/docs/guide/pt/pipeline/1-rails-and-jobs.md +8 -6
  164. package/docs/guide/pt/pipeline/2-the-job-detail-view.md +11 -2
  165. package/docs/guide/pt/pipeline/4-picking-an-engine-per-rail.md +2 -2
  166. package/docs/guide/pt/pipeline/5-the-loop-builder.md +24 -5
  167. package/docs/guide/zh/integrations/7-local-engines.md +1 -1
  168. package/docs/guide/zh/pipeline/1-rails-and-jobs.md +8 -6
  169. package/docs/guide/zh/pipeline/2-the-job-detail-view.md +11 -2
  170. package/docs/guide/zh/pipeline/4-picking-an-engine-per-rail.md +2 -2
  171. package/docs/guide/zh/pipeline/5-the-loop-builder.md +24 -5
  172. package/docs/internals/api-reference.md +2 -2
  173. package/docs/internals/ci-performance.md +71 -0
  174. package/docs/internals/companion-rails-as-loops-contract.md +4 -3
  175. package/docs/internals/configuration.md +3 -3
  176. package/docs/internals/core-runtime-updates.md +3 -2
  177. package/docs/internals/interactive-jobs.md +2 -2
  178. package/docs/internals/loop-step-log-explorer.md +42 -0
  179. package/docs/internals/mission-rail-cards.md +1 -1
  180. package/docs/internals/operations-runbook.md +22 -0
  181. package/docs/internals/programmatic-agent-runtime.md +130 -7
  182. package/docs/internals/project-builder.md +35 -16
  183. package/docs/internals/source-map.md +48 -2
  184. package/docs/kimi.md +2 -2
  185. package/docs/local-providers.md +1 -1
  186. package/docs/running-pipelines.md +26 -18
  187. package/docs/tracking-cost.md +10 -1
  188. package/package.json +2 -1
  189. package/server/dist/core-compat.js +8 -3
  190. package/server/dist/core-execution.js +49 -3
  191. package/server/dist/db/migrations.js +101 -0
  192. package/server/dist/desktop-db.js +28 -0
  193. package/server/dist/desktop-router.js +2 -0
  194. package/server/dist/mcp/guide.js +6 -3
  195. package/server/dist/mcp/tools/jobs.js +14 -1
  196. package/server/dist/mcp/tools/loops.js +17 -8
  197. package/server/dist/mcp/tools/rails.js +3 -3
  198. package/server/dist/modules/agent-runtime/runtime/agent-runtime-bridge.js +313 -9
  199. package/server/dist/modules/agent-runtime/runtime/agent-runtime-controls-router.js +34 -1
  200. package/server/dist/modules/agent-runtime/runtime/agent-runtime-controls.js +203 -21
  201. package/server/dist/modules/agent-runtime/runtime/agent-runtime-effective-config.js +46 -1
  202. package/server/dist/modules/agent-runtime/runtime/agent-runtime-engines.js +10 -0
  203. package/server/dist/modules/agent-runtime/runtime/agent-runtime-loader.js +68 -3
  204. package/server/dist/modules/agent-runtime/runtime/agent-runtime-metrics.js +16 -8
  205. package/server/dist/modules/agent-runtime/runtime/agent-runtime-package-gc.js +81 -0
  206. package/server/dist/modules/agent-runtime/runtime/agent-runtime-package-lock.js +37 -0
  207. package/server/dist/modules/agent-runtime/runtime/agent-runtime-package.js +30 -24
  208. package/server/dist/modules/agent-runtime/runtime/agent-runtime-retention-host.js +87 -0
  209. package/server/dist/modules/agent-runtime/runtime/agent-runtime-retention-quarantine.js +231 -0
  210. package/server/dist/modules/agent-runtime/runtime/agent-runtime-retention-records.js +32 -0
  211. package/server/dist/modules/agent-runtime/runtime/agent-runtime-retention.js +102 -0
  212. package/server/dist/modules/agent-runtime/runtime/agent-runtime-settings-router.js +12 -7
  213. package/server/dist/modules/agent-runtime/runtime/agent-runtime-settings.js +57 -13
  214. package/server/dist/modules/agents/runtime/agent-catalog.js +32 -0
  215. package/server/dist/modules/agents/runtime/agent-refine-manager.js +12 -0
  216. package/server/dist/modules/agents/runtime/agent-role-descriptor.js +64 -0
  217. package/server/dist/modules/agents/runtime/profiles-router.js +26 -34
  218. package/server/dist/modules/builder/runtime/milestone-chain.js +121 -73
  219. package/server/dist/modules/delivery/runtime/definition-fork.js +158 -0
  220. package/server/dist/modules/delivery/runtime/delivery-evidence.js +56 -10
  221. package/server/dist/modules/delivery/runtime/isolated-settlement-reconstruction.js +99 -0
  222. package/server/dist/modules/delivery/runtime/isolated-settlement-store.js +53 -0
  223. package/server/dist/modules/delivery/runtime/multi-repo-execution-store.js +3 -1
  224. package/server/dist/modules/delivery/runtime/rail-isolated-launch.js +388 -203
  225. package/server/dist/modules/delivery/runtime/rail-launch-parser.js +3 -2
  226. package/server/dist/modules/delivery/runtime/rail-pr-store.js +6 -1
  227. package/server/dist/modules/delivery/runtime/rails-router.js +66 -10
  228. package/server/dist/modules/execution/runtime/queue-manager.js +11 -2
  229. package/server/dist/modules/loops/runtime/builtin-loops.js +70 -0
  230. package/server/dist/modules/loops/runtime/definition-cancellation.js +31 -0
  231. package/server/dist/modules/loops/runtime/legacy-launch-telemetry.js +78 -0
  232. package/server/dist/modules/loops/runtime/loop-command-catalog.js +13 -12
  233. package/server/dist/modules/loops/runtime/loop-compat.js +219 -0
  234. package/server/dist/modules/loops/runtime/loop-core-factory.js +42 -0
  235. package/server/dist/modules/loops/runtime/loop-definition-controls.js +48 -0
  236. package/server/dist/modules/loops/runtime/loop-definition-events.js +145 -0
  237. package/server/dist/modules/loops/runtime/loop-definition-recovery.js +106 -0
  238. package/server/dist/modules/loops/runtime/loop-definition-run.js +36 -0
  239. package/server/dist/modules/loops/runtime/loop-definition.js +246 -0
  240. package/server/dist/modules/loops/runtime/loop-effect.js +10 -1
  241. package/server/dist/modules/loops/runtime/loop-executors.js +63 -3
  242. package/server/dist/modules/loops/runtime/loop-factory.js +35 -15
  243. package/server/dist/modules/loops/runtime/loop-graph.js +84 -8
  244. package/server/dist/modules/loops/runtime/loop-migration.js +36 -0
  245. package/server/dist/modules/loops/runtime/loop-preview.js +10 -0
  246. package/server/dist/modules/loops/runtime/loop-run-manager.js +206 -13
  247. package/server/dist/modules/loops/runtime/loop-runs-store.js +271 -7
  248. package/server/dist/modules/loops/runtime/loop-templates.js +205 -45
  249. package/server/dist/modules/loops/runtime/loops-router.js +246 -29
  250. package/server/dist/modules/loops/runtime/loops-store.js +140 -20
  251. package/server/dist/modules/missions/runtime/agent-operator-prompt.js +14 -11
  252. package/server/dist/modules/specs/runtime/spec-addenda.js +28 -0
  253. package/server/dist/project-registry.js +87 -51
  254. package/server/dist/project-router-jobs.js +17 -6
  255. package/server/dist/project-router-loop-runs.js +200 -0
  256. package/server/dist/project-router-spending.js +17 -0
  257. package/server/dist/project-router.js +8 -6
  258. package/server/dist/schemas/agent-runtime.schema.json +93 -1
  259. package/server/dist/schemas/workflow-definition.schema.json +312 -0
  260. package/server/dist/vitest-setup.js +22 -0
  261. package/server/dist/worktree-overlay.js +1 -1
  262. package/client/dist/assets/AgentsPage-DfHWgP_x.js +0 -87
  263. package/client/dist/assets/DesktopAnalyticsPage-tc0p4jJW.js +0 -1
  264. package/client/dist/assets/InteractiveJobComposer-DFPpdg2D.js +0 -19
  265. package/client/dist/assets/JobDetailModal-BdOv-l-M.js +0 -1
  266. package/client/dist/assets/LoopBuilderPage-BemvUOxy.js +0 -7
  267. package/client/dist/assets/LoopPreviewModal-C6hNAeYN.js +0 -1
  268. package/client/dist/assets/LoopsPage-BZr0quvh.js +0 -1
  269. package/client/dist/assets/TemplatePreviewModal-Cejcquah.js +0 -1
  270. package/client/dist/assets/agentRuntime-BUimiX__.js +0 -1
  271. package/client/dist/assets/agentRuntime-BcN97sAB.js +0 -1
  272. package/client/dist/assets/agentRuntime-Ckyg-ahT.js +0 -1
  273. package/client/dist/assets/agentRuntime-DJCwyX4t.js +0 -1
  274. package/client/dist/assets/agentRuntime-DVzPJOl0.js +0 -1
  275. package/client/dist/assets/agentRuntime-V9AZTG3c.js +0 -1
  276. package/client/dist/assets/agentRuntime-bAAjw1vw.js +0 -1
  277. package/client/dist/assets/agentRuntime-v4qKAYH-.js +0 -1
  278. package/client/dist/assets/agentstudio-BNUth0uj.js +0 -1
  279. package/client/dist/assets/agentstudio-BNdB5hkr.js +0 -1
  280. package/client/dist/assets/agentstudio-C7-bt8FO.js +0 -1
  281. package/client/dist/assets/agentstudio-C8uNchpV.js +0 -1
  282. package/client/dist/assets/agentstudio-CKabyMlg.js +0 -1
  283. package/client/dist/assets/agentstudio-CN2pokQu.js +0 -1
  284. package/client/dist/assets/agentstudio-y2dVDXeM.js +0 -1
  285. package/client/dist/assets/analytics-BlypLLR6.js +0 -1
  286. package/client/dist/assets/builder-765NeYTp.js +0 -1
  287. package/client/dist/assets/builder-8MG3V6ea.js +0 -1
  288. package/client/dist/assets/builder-B-1UBs5K.js +0 -1
  289. package/client/dist/assets/builder-BTiGnPT0.js +0 -1
  290. package/client/dist/assets/builder-Cx9Rz-7u.js +0 -1
  291. package/client/dist/assets/builder-DKFMELBl.js +0 -1
  292. package/client/dist/assets/builder-OcmKrC0h.js +0 -1
  293. package/client/dist/assets/builder-P9qVBXFZ.js +0 -1
  294. package/client/dist/assets/common-B5AZNYMH.js +0 -1
  295. package/client/dist/assets/common-BFZ0c_vN.js +0 -1
  296. package/client/dist/assets/common-BttQx3z4.js +0 -1
  297. package/client/dist/assets/common-CM65k_-e.js +0 -1
  298. package/client/dist/assets/common-D4mvFFlu.js +0 -1
  299. package/client/dist/assets/common-TZ9Ny96S.js +0 -1
  300. package/client/dist/assets/common-nFpSF4GC.js +0 -1
  301. package/client/dist/assets/dashboard-B9uWNGO2.js +0 -1
  302. package/client/dist/assets/dashboard-BIwmO9wc.js +0 -1
  303. package/client/dist/assets/dashboard-BV4vOZkR.js +0 -1
  304. package/client/dist/assets/dashboard-Bf6MPVsM.js +0 -1
  305. package/client/dist/assets/dashboard-C8klWVvZ.js +0 -1
  306. package/client/dist/assets/dashboard-D1ORhPF0.js +0 -1
  307. package/client/dist/assets/dashboard-DSubvs9x.js +0 -1
  308. package/client/dist/assets/dashboard-px_vlRx_.js +0 -1
  309. package/client/dist/assets/index-C51x61Bz.css +0 -2
  310. package/client/dist/assets/loops-B7YpGizO.js +0 -1
  311. package/client/dist/assets/loops-BomD2J-h.js +0 -1
  312. package/client/dist/assets/loops-BrQHSQw3.js +0 -1
  313. package/client/dist/assets/loops-BvBwvTPA.js +0 -1
  314. package/client/dist/assets/loops-CODk6Slz.js +0 -1
  315. package/client/dist/assets/loops-DC6k-Ym-.js +0 -1
  316. package/client/dist/assets/loops-DSEg8-uY.js +0 -1
  317. package/client/dist/assets/loops-DhCoXD_v.js +0 -1
  318. package/client/dist/assets/settings-BsehKpty.js +0 -1
  319. package/client/dist/assets/settings-CQWob3SB.js +0 -1
  320. package/client/dist/assets/settings-CgCl0hzy.js +0 -1
  321. package/client/dist/assets/settings-DLRLd22L.js +0 -1
  322. package/client/dist/assets/settings-Dn5prAFl.js +0 -1
  323. package/client/dist/assets/settings-HZSu-K4l.js +0 -1
  324. package/client/dist/assets/settings-p4OVIyRh.js +0 -1
  325. package/client/dist/assets/settings-rddaldUp.js +0 -1
  326. package/client/dist/assets/useRuntimeRuns-Dqmz9fS9.js +0 -1
  327. package/docs/guide/de/pipeline/3-batch-implement-and-multi-feature.md +0 -84
  328. package/docs/guide/en/pipeline/3-batch-implement-and-multi-feature.md +0 -126
  329. package/docs/guide/es/pipeline/3-batch-implement-and-multi-feature.md +0 -114
  330. package/docs/guide/fr/pipeline/3-batch-implement-and-multi-feature.md +0 -84
  331. package/docs/guide/it/pipeline/3-batch-implement-and-multi-feature.md +0 -84
  332. package/docs/guide/ja/pipeline/3-batch-implement-and-multi-feature.md +0 -84
  333. package/docs/guide/pt/pipeline/3-batch-implement-and-multi-feature.md +0 -84
  334. package/docs/guide/zh/pipeline/3-batch-implement-and-multi-feature.md +0 -84
  335. package/server/dist/modules/loops/runtime/loop-templates-ported.js +0 -675
  336. /package/client/dist/assets/{LoopBuilderPage-DtxX27Jz.css → loop-layout-DtxX27Jz.css} +0 -0
@@ -1,4 +1,4 @@
1
- import{a as e}from"./rolldown-runtime-CNC7AqOf.js";import{n as t,t as n}from"./jsx-runtime-zu2_FqZY.js";import{d as r,f as i,u as a}from"./chunk-KS7C4IRE-DEKu087k.js";import{H as ee,K as te,n as ne}from"./TicketDetailModalContext-DAK-NoK6.js";import{n as o,t as s}from"./createLucideIcon-Bjbbp_KS.js";import{a as re,r as ie}from"./useDesktop-QogiN0zR.js";import{C as ae,E as oe,b as se,r as ce,t as le,w as ue}from"./RepositoryDeliveries-Du2UCf1a.js";import{n as de}from"./save-B6wGWwBR.js";import{u as fe}from"./MinimizedChatsContext-D3QzgV0B.js";import{n as pe}from"./zap-CUOlvtT1.js";import{t as c}from"./loader-circle-DcygOQpC.js";import{t as l}from"./sparkles-DrY8hb0X.js";import{t as me}from"./triangle-alert-H9T4jAmh.js";import{t as u}from"./utils-BC4DHlz2.js";import{n as d,t as f}from"./lib-CGdyxIWg.js";import{Et as he,Lt as p,Rt as m,d as ge,dt as h}from"./index-Cxb288Rj.js";var _e=s(`circle-dollar-sign`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8`,key:`1h4pet`}],[`path`,{d:`M12 18V6`,key:`zqpxq5`}]]),g=s(`file-diff`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M9 10h6`,key:`9gxzsh`}],[`path`,{d:`M12 13V7`,key:`h0r20n`}],[`path`,{d:`M9 17h6`,key:`r8uit2`}]]),_=e(t(),1),v=n();function y(e){return e.split(/\n{2,}/).map(e=>{if(e.includes(`
1
+ import{a as e}from"./rolldown-runtime-CNC7AqOf.js";import{n as t,t as n}from"./jsx-runtime-zu2_FqZY.js";import{d as r,f as i,u as a}from"./chunk-KS7C4IRE-DEKu087k.js";import{H as ee,K as te,n as ne}from"./TicketDetailModalContext-B-DySpKL.js";import{n as o,t as s}from"./createLucideIcon-Bjbbp_KS.js";import{a as re,r as ie}from"./useDesktop-0unHDBJJ.js";import{C as ae,E as oe,b as se,r as ce,t as le,w as ue}from"./RepositoryDeliveries-BiwJuS8r.js";import{n as de}from"./save-B6wGWwBR.js";import{u as fe}from"./MinimizedChatsContext-CNx_0bZu.js";import{n as pe}from"./zap-CUOlvtT1.js";import{t as c}from"./loader-circle-DcygOQpC.js";import{t as l}from"./sparkles-DrY8hb0X.js";import{t as me}from"./triangle-alert-H9T4jAmh.js";import{t as u}from"./utils-BC4DHlz2.js";import{n as d,t as f}from"./lib-CGdyxIWg.js";import{Dt as he,Rt as p,d as ge,pt as m,zt as h}from"./index-C4Mv6tV6.js";var _e=s(`circle-dollar-sign`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8`,key:`1h4pet`}],[`path`,{d:`M12 18V6`,key:`zqpxq5`}]]),g=s(`file-diff`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M9 10h6`,key:`9gxzsh`}],[`path`,{d:`M12 13V7`,key:`h0r20n`}],[`path`,{d:`M9 17h6`,key:`r8uit2`}]]),_=e(t(),1),v=n();function y(e){return e.split(/\n{2,}/).map(e=>{if(e.includes(`
2
2
  `))return e;let t=e.match(/(?:^|\s)(\d{1,2})\.\s+(?=\S)/g);return!t||t.length<3?e:e.replace(/\s+(\d{1,2})\.\s+(?=\S)/g,(e,t,n)=>n===0?e:`\n${t}. `)}).join(`
3
3
 
4
- `)}function b({children:e,muted:t=!1,className:n}){let r=(0,_.useMemo)(()=>({a:({href:e,children:t})=>(0,v.jsx)(`a`,{href:e,target:`_blank`,rel:`noreferrer`,className:`text-accent-primary underline decoration-accent-primary/40 underline-offset-2 hover:decoration-accent-primary`,children:t}),img:()=>null,code:({className:e,children:t})=>e?(0,v.jsx)(`code`,{className:e,children:t}):(0,v.jsx)(`code`,{className:`rounded-md border border-border/50 bg-background-deep/60 px-1.5 py-px font-mono text-[0.85em] text-accent-info`,children:t})}),[]);return(0,v.jsx)(`div`,{"data-testid":`packet-markdown`,className:u(`prose prose-invert prose-sm max-w-none leading-relaxed`,`prose-p:my-1.5 prose-headings:mt-3 prose-headings:mb-1 prose-headings:text-sm prose-headings:font-semibold`,`prose-strong:text-foreground prose-ul:my-1.5 prose-ol:my-1.5 prose-li:my-0.5 prose-li:marker:text-accent-primary/70`,`prose-pre:my-2 prose-pre:rounded-lg prose-pre:border prose-pre:border-border/50 prose-pre:bg-background-deep/60 prose-pre:text-xs`,`prose-blockquote:border-accent-primary/40 prose-blockquote:text-muted-foreground prose-hr:border-border/50`,t?`text-muted-foreground`:`text-foreground/85`,n),children:(0,v.jsx)(d,{remarkPlugins:[f],skipHtml:!0,components:r,children:y(e)})})}var x=(e={})=>({verbs:[],acceptMeaning:null,fineControlOnly:!1,inFlight:!1,terminal:!1,requiresIrreversibleConfirm:!1,...e});function ve(e){let{decision:t,presentation:n,prUrl:r,canCreatePr:i}=e;if(t===`building`)return x({inFlight:!0});if(t===`merged`||t===`discarded`||n.superseded)return x({terminal:!0});if(n.manualRecovery||n.recoveryUnavailable||n.recoveryRecheck||n.retryablePush||n.retryablePrCreation||n.closed||n.deliveryBlocked&&!n.implementationFailed)return x({fineControlOnly:!0});if(n.noChanges)return x({verbs:[`accept`,`request-changes`],acceptMeaning:`mark-done`});if(n.implementationFailed)return x({verbs:n.succeededCount>0?[`request-changes`,`discard`]:[`discard`]});if(t===`pr_draft`)return x(r?{verbs:[`accept`,`request-changes`,`discard`],acceptMeaning:`publish`}:{fineControlOnly:!0});if(t===`pr_ready`)return x({verbs:[`request-changes`,`discard`]});if(t===`on_review`){let e=i?`create-pr`:`merge-local`;return x({verbs:[`accept`,`request-changes`,`discard`],acceptMeaning:e,requiresIrreversibleConfirm:e===`merge-local`})}return x({fineControlOnly:!0})}function ye(e,t){if(e===`discard`)return`discard`;if(e===`request-changes`)return null;switch(t.acceptMeaning){case`create-pr`:return`create-pr`;case`publish`:return`publish`;case`merge-local`:return`merge-local`;case`mark-done`:return`acknowledge-no-changes`;default:return null}}var be=[`app-verified`,`ai-reported`,`reviewer-score`],xe={"app-verified":h,"ai-reported":l,"reviewer-score":g},Se={"app-verified":`text-accent-success border-accent-success/30 bg-accent-success/5`,"ai-reported":`text-accent-highlight border-accent-highlight/30 bg-accent-highlight/5`,"reviewer-score":`text-accent-info border-accent-info/30 bg-accent-info/5`};function S({item:e}){let{t}=o(`packet`);return(0,v.jsxs)(`li`,{className:`flex flex-col gap-1 py-1.5`,children:[(0,v.jsx)(`span`,{className:`text-sm text-foreground`,children:t(e.code,{...e.values??{},defaultValue:e.code})}),e.rawExcerpt?(0,v.jsx)(`pre`,{className:`max-h-32 overflow-auto rounded border border-border/60 bg-background-deep/60 p-2 text-[11px] leading-relaxed text-muted-foreground whitespace-pre-wrap`,children:e.rawExcerpt}):null]})}function Ce(e){return e.implementationOutcome===`failed`?`failed`:e.deliveryOutcome===`no_changes`||e.implementationOutcome===`succeeded`&&e.changed===!1?`noChanges`:e.deliveryOutcome===`not_started`?`notStarted`:e.implementationOutcome===`succeeded`?`succeeded`:`unknown`}var C={resolved:`border-accent-success/40 bg-accent-success/10 text-accent-success`,partial:`border-accent-warning/40 bg-accent-warning/10 text-accent-warning`,blocked:`border-destructive/40 bg-destructive/10 text-destructive`,unreported:`border-border bg-background-deep/50 text-muted-foreground`},we={succeeded:`border-accent-success/40 bg-accent-success/10 text-accent-success`,noChanges:`border-accent-info/40 bg-accent-info/10 text-accent-info`,failed:`border-destructive/40 bg-destructive/10 text-destructive`,notStarted:`border-border bg-background-deep/50 text-muted-foreground`,unknown:`border-border bg-background-deep/50 text-muted-foreground`};function w({title:e,children:t,defaultOpen:n=!1,badge:r}){let[i,a]=(0,_.useState)(n);return(0,v.jsxs)(`div`,{className:`rounded-lg border border-border/60 bg-surface/40`,children:[(0,v.jsxs)(`button`,{type:`button`,onClick:()=>a(e=>!e),className:`flex w-full items-center gap-2 px-4 py-3 text-left`,"aria-expanded":i,children:[i?(0,v.jsx)(m,{className:`size-4 shrink-0 text-muted-foreground`,"aria-hidden":!0}):(0,v.jsx)(p,{className:`size-4 shrink-0 text-muted-foreground`,"aria-hidden":!0}),(0,v.jsx)(`span`,{className:`flex-1 text-sm font-medium text-foreground`,children:e}),r]}),i?(0,v.jsx)(`div`,{className:`border-t border-border/60 px-4 py-3`,children:t}):null]})}function T(e={}){let t=r(),n=e.prDeliveryId??t.prDeliveryId,{t:s}=o([`packet`,`common`]),l=a(),[u,d]=i(),f=u.get(`repositoryId`),p=(0,_.useRef)(0),m=e.onClose??(()=>l(`/`)),{activeProjectId:h}=ie(),g=ce(h),y=n?g.has(n):!1,{act:x,checkout:T}=ge(),{openTicketDetail:Te}=ne(),E=JSON.stringify([h,n,f]),D=(0,_.useRef)({key:E,epoch:0});D.current.key!==E&&(D.current={key:E,epoch:D.current.epoch+1});let O=D.current.epoch,k=(0,_.useRef)(!0);(0,_.useEffect)(()=>(k.current=!0,()=>{k.current=!1}),[]);let A=(0,_.useCallback)(()=>k.current&&D.current.key===E&&D.current.epoch===O,[E,O]),[j,M]=(0,_.useState)(null),N=j?.key===E&&j.epoch===O?j:null,P=N?.data??null,F=N?.loading??!0,I=N?.error??null,[L,R]=(0,_.useState)(null),[Ee,z]=(0,_.useState)(!1),[B,V]=(0,_.useState)(null),[H,U]=(0,_.useState)(``),[W,G]=(0,_.useState)(!1),[De,K]=(0,_.useState)(null),[Oe,q]=(0,_.useState)(!1),J=(0,_.useCallback)(async()=>{if(!n||!h||!A())return;let e=++p.current,t=()=>A()&&p.current===e;M(e=>({key:E,epoch:O,data:e?.key===E&&e.epoch===O?e.data:null,loading:!0,error:null}));try{let e=f?`?repositoryId=${encodeURIComponent(f)}`:``,r=await fetch(`${re()}/rails/pr-deliveries/${n}/packet${e}`);if(!t())return;if(!r.ok){M({key:E,epoch:O,data:null,loading:!1,error:r.status===404?`notFound`:`loadFailed`});return}let i=await r.json();if(!t())return;M({key:E,epoch:O,data:i,loading:!1,error:null})}catch{if(!t())return;M({key:E,epoch:O,data:null,loading:!1,error:`loadFailed`})}},[n,h,f,E,O,A]);(0,_.useEffect)(()=>(J(),z(!1),q(!1),R(null),V(null),K(null),G(!1),U(``),()=>{p.current++}),[J]);let Y=(0,_.useMemo)(()=>ue(P?.snapshot),[P?.snapshot]),X=P?.packet??null,Z=F||L!==null||W||!!Y?.operation,ke=P?.acceptCapability??null,Q=(0,_.useMemo)(()=>{if(!X)return null;let e=oe({decision:X.decision,ticketIds:X.ticketIds,prState:X.prUrl?`pr-created`:`none`,statusCode:X.statusCode,prUrl:X.prUrl,runIds:X.runIds});return ve({decision:X.decision,presentation:e,prUrl:X.prUrl,canCreatePr:ke?.target===`create-pr`})},[X,ke]),$=(0,_.useCallback)(async e=>{if(!X||!Q||Z||!A())return;let t=ye(e,Q);if(t){V(null),R(e);try{let e=await(f&&Y?x(Y.railIndex,t,Y.decision,Y.prDeliveryId,f):x(X.railIndex,t,X.decision,X.prDeliveryId));if(!A())return;e.ok?h&&se(h):V(e.status===409&&e.error===`stale_decision`?`alreadyResolved`:`actionFailed`),await J()}finally{A()&&(R(null),z(!1))}}},[x,h,J,X,Q,Y,f,Z,A]),Ae=(0,_.useCallback)(async()=>{if(!(!X||!H.trim()||!h||Z||!A())){K(null),G(!0);try{let t=await fetch(`${re()}/rails/${X.railIndex}/launch`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({loopId:`factory:sdd-quick-openspec`,revisionOfDeliveryId:Y?.prDeliveryId??X.prDeliveryId,revisionNote:H.trim(),...Y?.executionManifest?{repositoryIds:Y.executionManifest.selectedRepositoryIds}:{}})});if(!A())return;if(!t.ok){let e=await t.json().catch(()=>null);if(!A())return;K(e?.error===`invalid_revision_target`?`revisionStale`:`revisionFailed`);return}U(``),q(!1);let r=await t.json().catch(()=>null);if(!A())return;r?.prDeliveryId&&r.prDeliveryId!==n?e.onClose?e.onClose():l(`/review/${encodeURIComponent(r.prDeliveryId)}`):await J()}catch{A()&&K(`revisionFailed`)}finally{A()&&G(!1)}}},[h,J,X,H,Y,Z,A,n,e.onClose,l]);if(F&&!X)return(0,v.jsxs)(`div`,{className:`flex h-full items-center justify-center text-muted-foreground`,children:[(0,v.jsx)(c,{className:`mr-2 size-4 animate-spin`,"aria-hidden":!0}),s(`common:states.loading`)]});if(I||!X||!Q)return(0,v.jsxs)(`div`,{className:`mx-auto flex max-w-2xl flex-col items-center gap-4 p-10 text-center`,children:[(0,v.jsx)(me,{className:`size-6 text-accent-warning`,"aria-hidden":!0}),(0,v.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:s(I===`notFound`?`error.notFound`:`error.loadFailed`)}),(0,v.jsx)(`button`,{type:`button`,onClick:m,className:`rounded-md border border-border px-3 py-1.5 text-sm text-foreground hover:bg-surface`,children:s(`backToBoard`)})]});let je=be.map(e=>({tier:e,items:X.proof.filter(t=>t.tier===e)})).filter(e=>e.items.length>0),Me=X.cost.totalUsd===null?`—`:`${X.cost.estimated?`~`:``}$${X.cost.totalUsd.toFixed(2)}`;return(0,v.jsxs)(`div`,{className:`mx-auto flex w-full max-w-3xl flex-col gap-4 p-6`,children:[(0,v.jsxs)(`button`,{type:`button`,onClick:m,className:`flex w-fit items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground`,children:[(0,v.jsx)(de,{className:`size-3.5`,"aria-hidden":!0}),s(`backToBoard`)]}),Y?.repositoryDeliveries?.length?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[s(`common:repositories.select`),(0,v.jsxs)(`select`,{value:f??``,onChange:e=>{let t=new URLSearchParams(u);e.target.value?t.set(`repositoryId`,e.target.value):t.delete(`repositoryId`),d(t,{replace:!0})},className:`rounded border border-border bg-background px-2 py-1`,children:[(0,v.jsx)(`option`,{value:``,children:s(`common:repositories.all`)}),Y.repositoryDeliveries.map(e=>(0,v.jsx)(`option`,{value:e.repositoryId,children:e.name},e.repositoryId))]})]}),(0,v.jsx)(le,{deliveryId:Y.prDeliveryId,repositories:Y.repositoryDeliveries,busy:Z,onAct:async(e,t)=>{if(!(Z||!A())){R(`accept`);try{let n=await x(Y.railIndex,e,Y.decision,Y.prDeliveryId,t);if(!A())return;n.ok||V(`actionFailed`),await J()}finally{A()&&R(null)}}},onCheckout:async e=>{if(!(Z||!A())){R(`accept`);try{let t=await T(Y.railIndex,Y.prDeliveryId,e);if(!A())return;t.ok||V(`actionFailed`),await J()}finally{A()&&R(null)}}}})]}):null,(0,v.jsxs)(`div`,{className:`rounded-xl border border-border/70 bg-surface/60 p-5 shadow-sm`,children:[(0,v.jsx)(`h1`,{className:`text-lg font-semibold text-foreground`,children:s(X.headlineCode,{count:X.totalCount,succeeded:X.succeededCount,total:X.totalCount,defaultValue:X.headlineCode})}),(0,v.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-2 text-xs`,children:[X.confidence?.overall!==null&&X.confidence?.overall!==void 0?(0,v.jsx)(`span`,{className:`inline-flex items-center gap-1 rounded-full border border-accent-info/30 bg-accent-info/10 px-2 py-0.5 text-accent-info`,title:s(`confidence.tooltip`),children:s(`confidence.pill`,{overall:X.confidence.overall})}):(0,v.jsx)(`span`,{className:`inline-flex items-center gap-1 rounded-full border border-border bg-background-deep/50 px-2 py-0.5 text-muted-foreground`,children:s(`confidence.unavailable`)}),(0,v.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-muted-foreground`,children:[(0,v.jsx)(_e,{className:`size-3.5`,"aria-hidden":!0}),s(`cost.thisBuild`,{amount:Me})]}),X.prUrl?(0,v.jsxs)(`a`,{href:X.prUrl,target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-1 text-accent-info hover:underline`,children:[(0,v.jsx)(te,{className:`size-3.5`,"aria-hidden":!0}),s(`openPr`,{number:X.prNumber??``})]}):null]}),Q.fineControlOnly?(0,v.jsx)(`p`,{className:`mt-4 rounded-md border border-accent-warning/30 bg-accent-warning/5 px-3 py-2 text-xs text-accent-warning`,children:s(`fineControlOnly`)}):Q.inFlight?(0,v.jsxs)(`p`,{className:`mt-4 flex items-center gap-2 text-sm text-muted-foreground`,children:[(0,v.jsx)(c,{className:`size-4 animate-spin`,"aria-hidden":!0}),s(`stillWorking`)]}):Q.terminal?(0,v.jsx)(`p`,{className:`mt-4 text-sm text-muted-foreground`,children:s(`alreadyResolved`)}):(0,v.jsxs)(`div`,{className:`mt-4 flex flex-wrap items-center gap-2`,children:[Q.verbs.includes(`accept`)&&(!Y?.repositoryDeliveries?.length||f)?Ee?(0,v.jsxs)(`div`,{className:`flex w-full flex-col gap-2 rounded-md border border-destructive/40 bg-destructive/5 p-3`,children:[(0,v.jsx)(`p`,{className:`text-xs text-foreground`,children:s(`accept.irreversibleWarning`)}),(0,v.jsxs)(`div`,{className:`flex gap-2`,children:[(0,v.jsx)(`button`,{type:`button`,onClick:()=>void $(`accept`),disabled:Z,className:`rounded-md bg-destructive px-3 py-1.5 text-sm font-medium text-white disabled:opacity-50`,"data-testid":`packet-accept-confirm`,children:s(`accept.irreversibleConfirm`)}),(0,v.jsx)(`button`,{type:`button`,onClick:()=>z(!1),className:`rounded-md border border-border px-3 py-1.5 text-sm text-foreground`,children:s(`common:actions.cancel`)})]})]}):(0,v.jsxs)(`button`,{type:`button`,onClick:()=>{Q.requiresIrreversibleConfirm?z(!0):$(`accept`)},disabled:Z,className:`inline-flex items-center gap-1.5 rounded-md bg-accent-success px-3 py-1.5 text-sm font-medium text-white disabled:opacity-50`,"data-testid":`packet-accept`,children:[L===`accept`?(0,v.jsx)(c,{className:`size-4 animate-spin`,"aria-hidden":!0}):(0,v.jsx)(fe,{className:`size-4`,"aria-hidden":!0}),s(`accept.${Q.acceptMeaning??`generic`}`)]}):null,Q.verbs.includes(`request-changes`)?(0,v.jsxs)(`button`,{type:`button`,onClick:()=>q(e=>!e),disabled:Z||W,"aria-expanded":Oe,className:`inline-flex items-center gap-1.5 rounded-md border border-border px-3 py-1.5 text-sm text-foreground hover:bg-surface disabled:opacity-50`,"data-testid":`packet-request-changes`,children:[(0,v.jsx)(ee,{className:`size-4`,"aria-hidden":!0}),s(`requestChanges.label`)]}):null,Q.verbs.includes(`discard`)?(0,v.jsxs)(`button`,{type:`button`,onClick:()=>void $(`discard`),disabled:Z,className:`inline-flex items-center gap-1.5 rounded-md border border-border px-3 py-1.5 text-sm text-foreground hover:bg-surface disabled:opacity-50`,"data-testid":`packet-discard`,children:[L===`discard`?(0,v.jsx)(c,{className:`size-4 animate-spin`,"aria-hidden":!0}):(0,v.jsx)(pe,{className:`size-4`,"aria-hidden":!0}),s(`discard.label`)]}):null]}),y&&Q.verbs.includes(`discard`)?(0,v.jsx)(`p`,{className:`mt-3 rounded-md border border-accent-warning/40 bg-accent-warning/10 px-3 py-2 text-xs text-accent-warning`,"data-testid":`packet-discard-stacked-note`,children:s(`discard.stackedNote`)}):null,B?(0,v.jsx)(`p`,{className:`mt-3 text-xs text-accent-warning`,children:s(`error.${B}`)}):null,Oe?(0,v.jsxs)(`div`,{className:`mt-4 flex flex-col gap-2 rounded-md border border-border/70 bg-background-deep/40 p-3`,children:[(0,v.jsx)(`label`,{htmlFor:`packet-revision-note`,className:`text-xs font-medium text-foreground`,children:s(`requestChanges.prompt`)}),(0,v.jsx)(`textarea`,{id:`packet-revision-note`,value:H,onChange:e=>U(e.target.value),rows:2,placeholder:s(`requestChanges.placeholder`),className:`resize-y rounded-md border border-border bg-surface px-2 py-1.5 text-sm text-foreground placeholder:text-muted-foreground`,"data-testid":`packet-revision-input`}),(0,v.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,v.jsxs)(`button`,{type:`button`,onClick:()=>void Ae(),disabled:Z||H.trim().length===0,className:`inline-flex items-center gap-1.5 rounded-md bg-accent-primary px-3 py-1.5 text-sm font-medium text-white disabled:opacity-50`,"data-testid":`packet-revision-submit`,children:[W?(0,v.jsx)(c,{className:`size-4 animate-spin`,"aria-hidden":!0}):(0,v.jsx)(ae,{className:`size-4`,"aria-hidden":!0}),s(`requestChanges.submit`)]}),(0,v.jsx)(`span`,{className:`text-[11px] text-muted-foreground`,children:s(`requestChanges.hint`)})]}),De?(0,v.jsx)(`p`,{className:`text-xs text-accent-warning`,children:s(`error.${De}`)}):null]}):null]}),X.driftNudges.length>0?(0,v.jsxs)(`div`,{className:`rounded-lg border border-accent-highlight/30 bg-accent-highlight/5 p-4`,"data-testid":`packet-drift-nudges`,children:[(0,v.jsx)(`h2`,{className:`mb-1 text-sm font-medium text-accent-highlight`,children:s(`drift.title`)}),(0,v.jsx)(`ul`,{className:`space-y-1 text-xs text-foreground`,children:X.driftNudges.map(e=>(0,v.jsx)(`li`,{children:s(e.code,{...e.values,defaultValue:e.code})},e.code))}),(0,v.jsx)(`p`,{className:`mt-2 text-[11px] text-muted-foreground`,children:s(`drift.advisory`)})]}):null,X.versions.length>1?(0,v.jsxs)(w,{title:s(`versions.title`,{count:X.versions.length}),badge:(0,v.jsx)(he,{className:`size-3.5 text-muted-foreground`,"aria-hidden":!0}),children:[(0,v.jsx)(`ol`,{className:`space-y-2`,"data-testid":`packet-versions`,children:X.versions.map(e=>(0,v.jsxs)(`li`,{className:`flex flex-col gap-0.5 text-sm`,children:[(0,v.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,v.jsx)(`span`,{className:e.current?`font-medium text-foreground`:`text-muted-foreground`,children:s(`versions.label`,{version:e.version})}),e.current?(0,v.jsx)(`span`,{className:`rounded-full border border-accent-primary/40 bg-accent-primary/10 px-1.5 text-[10px] text-accent-primary`,children:s(`versions.current`)}):null,(0,v.jsx)(`span`,{className:`text-[11px] text-muted-foreground`,children:e.costUsd===null?`—`:`${e.costEstimated?`~`:``}$${e.costUsd.toFixed(2)}`})]}),(0,v.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e.revisionNote??s(`versions.originalBuild`)})]},e.prDeliveryId))}),(0,v.jsx)(`p`,{className:`mt-3 text-xs text-muted-foreground`,children:s(`cost.allVersions`,{amount:X.chainCostUsd===null?`—`:`${X.chainCostEstimated?`~`:``}$${X.chainCostUsd.toFixed(2)}`})})]}):null,X.watchOut.length>0?(0,v.jsxs)(`div`,{className:`rounded-lg border border-accent-warning/30 bg-accent-warning/5 p-4`,children:[(0,v.jsxs)(`h2`,{className:`mb-2 flex items-center gap-1.5 text-sm font-medium text-accent-warning`,children:[(0,v.jsx)(me,{className:`size-4`,"aria-hidden":!0}),s(`watchOut.title`)]}),(0,v.jsx)(`ul`,{className:`space-y-1`,children:X.watchOut.map((e,t)=>(0,v.jsx)(S,{item:e},`${e.code}-${t}`))})]}):null,(0,v.jsx)(w,{title:s(`sections.whatYouAsked`),defaultOpen:!0,children:(0,v.jsx)(`ul`,{className:`space-y-3`,children:X.sections.map(e=>(0,v.jsxs)(`li`,{className:`text-sm`,children:[(0,v.jsxs)(`button`,{type:`button`,onClick:()=>Te(e.ticketId),className:`text-accent-primary hover:underline`,children:[`#`,e.ticketId,` `,e.title??``]}),e.problem?(0,v.jsx)(b,{muted:!0,className:`mt-1`,children:e.problem}):null]},e.ticketId))})}),X.followUp&&(0,v.jsxs)(w,{title:s(`followUp.title`,{count:X.followUp.comments.length}),defaultOpen:!0,children:[(0,v.jsx)(`p`,{className:`mb-2 text-xs text-muted-foreground`,children:s(`followUp.caveat`)}),(0,v.jsx)(`ul`,{className:`space-y-3`,"data-testid":`packet-follow-up`,children:X.followUp.comments.map(e=>{let t=X.followUpReport?.find(t=>t.commentId===e.id)??null,n=t?t.verdict:`unreported`;return(0,v.jsxs)(`li`,{className:`rounded-md border border-border/50 bg-background-deep/30 px-3 py-2 text-sm`,children:[(0,v.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,v.jsx)(`span`,{className:`rounded bg-surface/70 px-1 font-mono text-[10px] text-muted-foreground`,children:e.id}),e.path?(0,v.jsxs)(`span`,{className:`font-mono text-xs text-accent-info`,children:[e.path,e.line?`:${e.line}`:``]}):null,(0,v.jsx)(`span`,{className:`rounded-full border px-2 py-0.5 text-[10px] font-medium ${C[n]}`,"data-testid":`packet-follow-up-verdict`,children:s(`followUp.verdict.${n}`)}),(0,v.jsxs)(`span`,{className:`text-[10px] text-muted-foreground`,children:[s(`followUp.source.${e.source===`github`?`github`:`pasted`}`),e.author?` · ${e.author}`:``]})]}),(0,v.jsx)(b,{muted:!0,className:`mt-1`,children:e.body}),t?(0,v.jsxs)(`dl`,{className:`mt-1 grid gap-x-3 gap-y-0.5 text-xs text-muted-foreground sm:grid-cols-[auto_1fr]`,children:[t.files?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(`dt`,{className:`font-medium`,children:s(`followUp.files`)}),(0,v.jsx)(`dd`,{className:`font-mono`,children:t.files})]}):null,t.tests?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(`dt`,{className:`font-medium`,children:s(`followUp.tests`)}),(0,v.jsx)(`dd`,{children:t.tests})]}):null,t.notes?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(`dt`,{className:`font-medium`,children:s(`followUp.notes`)}),(0,v.jsx)(`dd`,{children:t.notes})]}):null]}):(0,v.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:s(`followUp.noReport`)})]},e.id)})}),X.followUp.scope.excludedChanges.length>0&&(0,v.jsxs)(`p`,{className:`mt-2 text-xs text-muted-foreground`,children:[(0,v.jsxs)(`span`,{className:`font-medium`,children:[s(`followUp.excluded`),`:`]}),` `,X.followUp.scope.excludedChanges.join(` · `)]})]}),X.specAddenda&&X.specAddenda.length>0&&(0,v.jsxs)(w,{title:s(`addenda.title`,{count:X.specAddenda.length}),defaultOpen:!0,children:[(0,v.jsx)(`p`,{className:`mb-2 text-xs text-muted-foreground`,children:s(`addenda.caveat`)}),(0,v.jsx)(`ul`,{className:`space-y-2`,"data-testid":`packet-addenda`,children:X.specAddenda.map(e=>{let t=X.specAddendaReport?.find(t=>t.addendumId===e.id)??null,n=t?t.verdict:`unreported`,r=n===`applied`?C.resolved:C[n];return(0,v.jsxs)(`li`,{className:`rounded-md border border-border/50 bg-background-deep/30 px-3 py-2 text-sm`,children:[(0,v.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,v.jsxs)(`span`,{className:`font-mono text-xs text-accent-primary`,children:[`#`,e.ticketId]}),(0,v.jsx)(`span`,{className:`rounded-full border border-border/50 px-1.5 py-px text-[10px] text-muted-foreground`,children:s(`addenda.kind.${e.kind}`)}),(0,v.jsx)(`span`,{className:`font-medium`,children:e.title}),(0,v.jsx)(`span`,{className:`rounded-full border px-2 py-0.5 text-[10px] font-medium ${r}`,"data-testid":`packet-addenda-verdict`,children:s(`addenda.verdict.${n}`)})]}),t?(0,v.jsxs)(`dl`,{className:`mt-1 grid gap-x-3 gap-y-0.5 text-xs text-muted-foreground sm:grid-cols-[auto_1fr]`,children:[t.files?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(`dt`,{className:`font-medium`,children:s(`followUp.files`)}),(0,v.jsx)(`dd`,{className:`font-mono`,children:t.files})]}):null,t.tests?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(`dt`,{className:`font-medium`,children:s(`followUp.tests`)}),(0,v.jsx)(`dd`,{children:t.tests})]}):null,t.notes?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(`dt`,{className:`font-medium`,children:s(`followUp.notes`)}),(0,v.jsx)(`dd`,{children:t.notes})]}):null]}):(0,v.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:s(`addenda.noReport`)})]},e.id)})})]}),(0,v.jsx)(w,{title:s(`sections.whatIDid`),children:(0,v.jsx)(`ul`,{className:`space-y-3`,children:X.sections.map(e=>(0,v.jsxs)(`li`,{className:`text-sm`,"data-testid":`packet-done-${e.ticketId}`,children:[(0,v.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,v.jsxs)(`span`,{className:`font-medium text-foreground`,children:[`#`,e.ticketId]}),e.title?(0,v.jsx)(`span`,{className:`text-foreground/80`,children:e.title}):null,(()=>{let t=Ce(e);return(0,v.jsx)(`span`,{className:`rounded-full border px-2 py-0.5 text-[10px] font-medium ${we[t]}`,"data-testid":`packet-outcome-pill`,children:s(`outcome.${t}`)})})()]}),e.churn?(0,v.jsxs)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:[s(`churn.line`,{files:e.churn.filesTouched,added:e.churn.addedLines,removed:e.churn.removedLines}),` · `,e.churn.testFilesTouched.length>0?s(`churn.testFiles`,{count:e.churn.testFilesTouched.length}):s(`churn.noTestFiles`)]}):(0,v.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:s(`churn.batchNotSplittable`)}),e.solution?(0,v.jsxs)(`details`,{className:`group mt-2 rounded-md border border-border/50 bg-background-deep/30 px-3 py-2`,children:[(0,v.jsx)(`summary`,{className:`cursor-pointer select-none text-xs font-medium text-muted-foreground group-open:text-foreground/80`,children:s(`planned.title`)}),(0,v.jsx)(`p`,{className:`mt-1 text-[11px] italic text-muted-foreground/80`,children:s(`planned.caveat`)}),(0,v.jsx)(b,{className:`mt-2`,children:e.solutionOverflow??e.solution})]}):(0,v.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:s(`noSolutionRecorded`)})]},e.ticketId))})}),(0,v.jsx)(w,{title:s(`sections.howItWasChecked`),badge:X.evidenceUnavailable?(0,v.jsx)(`span`,{className:`rounded-full border border-border bg-background-deep/50 px-2 py-0.5 text-[10px] text-muted-foreground`,children:s(`proof.evidenceUnavailable`)}):void 0,children:(0,v.jsx)(`div`,{className:`space-y-4`,children:je.map(({tier:e,items:t})=>{let n=xe[e];return(0,v.jsxs)(`div`,{className:`rounded-md border px-3 py-2 ${Se[e]}`,children:[(0,v.jsxs)(`h3`,{className:`mb-1 flex items-center gap-1.5 text-xs font-medium`,children:[(0,v.jsx)(n,{className:`size-3.5`,"aria-hidden":!0}),s(`tier.${e}.title`)]}),(0,v.jsx)(`p`,{className:`mb-2 text-[11px] opacity-80`,children:s(`tier.${e}.caveat`)}),(0,v.jsx)(`ul`,{className:`space-y-1`,children:t.map((e,t)=>(0,v.jsx)(S,{item:e},`${e.code}-${t}`))})]},e)})})})]})}export{T as default};
4
+ `)}function b({children:e,muted:t=!1,className:n}){let r=(0,_.useMemo)(()=>({a:({href:e,children:t})=>(0,v.jsx)(`a`,{href:e,target:`_blank`,rel:`noreferrer`,className:`text-accent-primary underline decoration-accent-primary/40 underline-offset-2 hover:decoration-accent-primary`,children:t}),img:()=>null,code:({className:e,children:t})=>e?(0,v.jsx)(`code`,{className:e,children:t}):(0,v.jsx)(`code`,{className:`rounded-md border border-border/50 bg-background-deep/60 px-1.5 py-px font-mono text-[0.85em] text-accent-info`,children:t})}),[]);return(0,v.jsx)(`div`,{"data-testid":`packet-markdown`,className:u(`prose prose-invert prose-sm max-w-none leading-relaxed`,`prose-p:my-1.5 prose-headings:mt-3 prose-headings:mb-1 prose-headings:text-sm prose-headings:font-semibold`,`prose-strong:text-foreground prose-ul:my-1.5 prose-ol:my-1.5 prose-li:my-0.5 prose-li:marker:text-accent-primary/70`,`prose-pre:my-2 prose-pre:rounded-lg prose-pre:border prose-pre:border-border/50 prose-pre:bg-background-deep/60 prose-pre:text-xs`,`prose-blockquote:border-accent-primary/40 prose-blockquote:text-muted-foreground prose-hr:border-border/50`,t?`text-muted-foreground`:`text-foreground/85`,n),children:(0,v.jsx)(d,{remarkPlugins:[f],skipHtml:!0,components:r,children:y(e)})})}var x=(e={})=>({verbs:[],acceptMeaning:null,fineControlOnly:!1,inFlight:!1,terminal:!1,requiresIrreversibleConfirm:!1,...e});function ve(e){let{decision:t,presentation:n,prUrl:r,canCreatePr:i}=e;if(t===`building`)return x({inFlight:!0});if(t===`merged`||t===`discarded`||n.superseded)return x({terminal:!0});if(n.manualRecovery||n.recoveryUnavailable||n.recoveryRecheck||n.retryablePush||n.retryablePrCreation||n.closed||n.deliveryBlocked&&!n.implementationFailed)return x({fineControlOnly:!0});if(n.noChanges)return x({verbs:[`accept`,`request-changes`],acceptMeaning:`mark-done`});if(n.implementationFailed)return x({verbs:n.succeededCount>0?[`request-changes`,`discard`]:[`discard`]});if(t===`pr_draft`)return x(r?{verbs:[`accept`,`request-changes`,`discard`],acceptMeaning:`publish`}:{fineControlOnly:!0});if(t===`pr_ready`)return x({verbs:[`request-changes`,`discard`]});if(t===`on_review`){let e=i?`create-pr`:`merge-local`;return x({verbs:[`accept`,`request-changes`,`discard`],acceptMeaning:e,requiresIrreversibleConfirm:e===`merge-local`})}return x({fineControlOnly:!0})}function ye(e,t){if(e===`discard`)return`discard`;if(e===`request-changes`)return null;switch(t.acceptMeaning){case`create-pr`:return`create-pr`;case`publish`:return`publish`;case`merge-local`:return`merge-local`;case`mark-done`:return`acknowledge-no-changes`;default:return null}}var be=[`app-verified`,`ai-reported`,`reviewer-score`],xe={"app-verified":m,"ai-reported":l,"reviewer-score":g},Se={"app-verified":`text-accent-success border-accent-success/30 bg-accent-success/5`,"ai-reported":`text-accent-highlight border-accent-highlight/30 bg-accent-highlight/5`,"reviewer-score":`text-accent-info border-accent-info/30 bg-accent-info/5`};function S({item:e}){let{t}=o(`packet`);return(0,v.jsxs)(`li`,{className:`flex flex-col gap-1 py-1.5`,children:[(0,v.jsx)(`span`,{className:`text-sm text-foreground`,children:t(e.code,{...e.values??{},defaultValue:e.code})}),e.rawExcerpt?(0,v.jsx)(`pre`,{className:`max-h-32 overflow-auto rounded border border-border/60 bg-background-deep/60 p-2 text-[11px] leading-relaxed text-muted-foreground whitespace-pre-wrap`,children:e.rawExcerpt}):null]})}function Ce(e){return e.implementationOutcome===`failed`?`failed`:e.deliveryOutcome===`no_changes`||e.implementationOutcome===`succeeded`&&e.changed===!1?`noChanges`:e.deliveryOutcome===`not_started`?`notStarted`:e.implementationOutcome===`succeeded`?`succeeded`:`unknown`}var C={resolved:`border-accent-success/40 bg-accent-success/10 text-accent-success`,partial:`border-accent-warning/40 bg-accent-warning/10 text-accent-warning`,blocked:`border-destructive/40 bg-destructive/10 text-destructive`,unreported:`border-border bg-background-deep/50 text-muted-foreground`},we={succeeded:`border-accent-success/40 bg-accent-success/10 text-accent-success`,noChanges:`border-accent-info/40 bg-accent-info/10 text-accent-info`,failed:`border-destructive/40 bg-destructive/10 text-destructive`,notStarted:`border-border bg-background-deep/50 text-muted-foreground`,unknown:`border-border bg-background-deep/50 text-muted-foreground`};function w({title:e,children:t,defaultOpen:n=!1,badge:r}){let[i,a]=(0,_.useState)(n);return(0,v.jsxs)(`div`,{className:`rounded-lg border border-border/60 bg-surface/40`,children:[(0,v.jsxs)(`button`,{type:`button`,onClick:()=>a(e=>!e),className:`flex w-full items-center gap-2 px-4 py-3 text-left`,"aria-expanded":i,children:[i?(0,v.jsx)(h,{className:`size-4 shrink-0 text-muted-foreground`,"aria-hidden":!0}):(0,v.jsx)(p,{className:`size-4 shrink-0 text-muted-foreground`,"aria-hidden":!0}),(0,v.jsx)(`span`,{className:`flex-1 text-sm font-medium text-foreground`,children:e}),r]}),i?(0,v.jsx)(`div`,{className:`border-t border-border/60 px-4 py-3`,children:t}):null]})}function T(e={}){let t=r(),n=e.prDeliveryId??t.prDeliveryId,{t:s}=o([`packet`,`common`]),l=a(),[u,d]=i(),f=u.get(`repositoryId`),p=(0,_.useRef)(0),m=e.onClose??(()=>l(`/`)),{activeProjectId:h}=ie(),g=ce(h),y=n?g.has(n):!1,{act:x,checkout:T}=ge(),{openTicketDetail:Te}=ne(),E=JSON.stringify([h,n,f]),D=(0,_.useRef)({key:E,epoch:0});D.current.key!==E&&(D.current={key:E,epoch:D.current.epoch+1});let O=D.current.epoch,k=(0,_.useRef)(!0);(0,_.useEffect)(()=>(k.current=!0,()=>{k.current=!1}),[]);let A=(0,_.useCallback)(()=>k.current&&D.current.key===E&&D.current.epoch===O,[E,O]),[j,M]=(0,_.useState)(null),N=j?.key===E&&j.epoch===O?j:null,P=N?.data??null,F=N?.loading??!0,I=N?.error??null,[L,R]=(0,_.useState)(null),[Ee,z]=(0,_.useState)(!1),[B,V]=(0,_.useState)(null),[H,U]=(0,_.useState)(``),[W,G]=(0,_.useState)(!1),[De,K]=(0,_.useState)(null),[Oe,q]=(0,_.useState)(!1),J=(0,_.useCallback)(async()=>{if(!n||!h||!A())return;let e=++p.current,t=()=>A()&&p.current===e;M(e=>({key:E,epoch:O,data:e?.key===E&&e.epoch===O?e.data:null,loading:!0,error:null}));try{let e=f?`?repositoryId=${encodeURIComponent(f)}`:``,r=await fetch(`${re()}/rails/pr-deliveries/${n}/packet${e}`);if(!t())return;if(!r.ok){M({key:E,epoch:O,data:null,loading:!1,error:r.status===404?`notFound`:`loadFailed`});return}let i=await r.json();if(!t())return;M({key:E,epoch:O,data:i,loading:!1,error:null})}catch{if(!t())return;M({key:E,epoch:O,data:null,loading:!1,error:`loadFailed`})}},[n,h,f,E,O,A]);(0,_.useEffect)(()=>(J(),z(!1),q(!1),R(null),V(null),K(null),G(!1),U(``),()=>{p.current++}),[J]);let Y=(0,_.useMemo)(()=>ue(P?.snapshot),[P?.snapshot]),X=P?.packet??null,Z=F||L!==null||W||!!Y?.operation,ke=P?.acceptCapability??null,Q=(0,_.useMemo)(()=>{if(!X)return null;let e=oe({decision:X.decision,ticketIds:X.ticketIds,prState:X.prUrl?`pr-created`:`none`,statusCode:X.statusCode,prUrl:X.prUrl,runIds:X.runIds});return ve({decision:X.decision,presentation:e,prUrl:X.prUrl,canCreatePr:ke?.target===`create-pr`})},[X,ke]),$=(0,_.useCallback)(async e=>{if(!X||!Q||Z||!A())return;let t=ye(e,Q);if(t){V(null),R(e);try{let e=await(f&&Y?x(Y.railIndex,t,Y.decision,Y.prDeliveryId,f):x(X.railIndex,t,X.decision,X.prDeliveryId));if(!A())return;e.ok?h&&se(h):V(e.status===409&&e.error===`stale_decision`?`alreadyResolved`:`actionFailed`),await J()}finally{A()&&(R(null),z(!1))}}},[x,h,J,X,Q,Y,f,Z,A]),Ae=(0,_.useCallback)(async()=>{if(!(!X||!H.trim()||!h||Z||!A())){K(null),G(!0);try{let t=await fetch(`${re()}/rails/${X.railIndex}/launch`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({loopId:`factory:sdd-quick-openspec`,revisionOfDeliveryId:Y?.prDeliveryId??X.prDeliveryId,revisionNote:H.trim(),...Y?.executionManifest?{repositoryIds:Y.executionManifest.selectedRepositoryIds}:{}})});if(!A())return;if(!t.ok){let e=await t.json().catch(()=>null);if(!A())return;K(e?.error===`invalid_revision_target`?`revisionStale`:`revisionFailed`);return}U(``),q(!1);let r=await t.json().catch(()=>null);if(!A())return;r?.prDeliveryId&&r.prDeliveryId!==n?e.onClose?e.onClose():l(`/review/${encodeURIComponent(r.prDeliveryId)}`):await J()}catch{A()&&K(`revisionFailed`)}finally{A()&&G(!1)}}},[h,J,X,H,Y,Z,A,n,e.onClose,l]);if(F&&!X)return(0,v.jsxs)(`div`,{className:`flex h-full items-center justify-center text-muted-foreground`,children:[(0,v.jsx)(c,{className:`mr-2 size-4 animate-spin`,"aria-hidden":!0}),s(`common:states.loading`)]});if(I||!X||!Q)return(0,v.jsxs)(`div`,{className:`mx-auto flex max-w-2xl flex-col items-center gap-4 p-10 text-center`,children:[(0,v.jsx)(me,{className:`size-6 text-accent-warning`,"aria-hidden":!0}),(0,v.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:s(I===`notFound`?`error.notFound`:`error.loadFailed`)}),(0,v.jsx)(`button`,{type:`button`,onClick:m,className:`rounded-md border border-border px-3 py-1.5 text-sm text-foreground hover:bg-surface`,children:s(`backToBoard`)})]});let je=be.map(e=>({tier:e,items:X.proof.filter(t=>t.tier===e)})).filter(e=>e.items.length>0),Me=X.cost.totalUsd===null?`—`:`${X.cost.estimated?`~`:``}$${X.cost.totalUsd.toFixed(2)}`;return(0,v.jsxs)(`div`,{className:`mx-auto flex w-full max-w-3xl flex-col gap-4 p-6`,children:[(0,v.jsxs)(`button`,{type:`button`,onClick:m,className:`flex w-fit items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground`,children:[(0,v.jsx)(de,{className:`size-3.5`,"aria-hidden":!0}),s(`backToBoard`)]}),Y?.repositoryDeliveries?.length?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[s(`common:repositories.select`),(0,v.jsxs)(`select`,{value:f??``,onChange:e=>{let t=new URLSearchParams(u);e.target.value?t.set(`repositoryId`,e.target.value):t.delete(`repositoryId`),d(t,{replace:!0})},className:`rounded border border-border bg-background px-2 py-1`,children:[(0,v.jsx)(`option`,{value:``,children:s(`common:repositories.all`)}),Y.repositoryDeliveries.map(e=>(0,v.jsx)(`option`,{value:e.repositoryId,children:e.name},e.repositoryId))]})]}),(0,v.jsx)(le,{deliveryId:Y.prDeliveryId,repositories:Y.repositoryDeliveries,busy:Z,onAct:async(e,t)=>{if(!(Z||!A())){R(`accept`);try{let n=await x(Y.railIndex,e,Y.decision,Y.prDeliveryId,t);if(!A())return;n.ok||V(`actionFailed`),await J()}finally{A()&&R(null)}}},onCheckout:async e=>{if(!(Z||!A())){R(`accept`);try{let t=await T(Y.railIndex,Y.prDeliveryId,e);if(!A())return;t.ok||V(`actionFailed`),await J()}finally{A()&&R(null)}}}})]}):null,(0,v.jsxs)(`div`,{className:`rounded-xl border border-border/70 bg-surface/60 p-5 shadow-sm`,children:[(0,v.jsx)(`h1`,{className:`text-lg font-semibold text-foreground`,children:s(X.headlineCode,{count:X.totalCount,succeeded:X.succeededCount,total:X.totalCount,defaultValue:X.headlineCode})}),(0,v.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-2 text-xs`,children:[X.confidence?.overall!==null&&X.confidence?.overall!==void 0?(0,v.jsx)(`span`,{className:`inline-flex items-center gap-1 rounded-full border border-accent-info/30 bg-accent-info/10 px-2 py-0.5 text-accent-info`,title:s(`confidence.tooltip`),children:s(`confidence.pill`,{overall:X.confidence.overall})}):(0,v.jsx)(`span`,{className:`inline-flex items-center gap-1 rounded-full border border-border bg-background-deep/50 px-2 py-0.5 text-muted-foreground`,children:s(`confidence.unavailable`)}),(0,v.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-muted-foreground`,children:[(0,v.jsx)(_e,{className:`size-3.5`,"aria-hidden":!0}),s(`cost.thisBuild`,{amount:Me})]}),X.prUrl?(0,v.jsxs)(`a`,{href:X.prUrl,target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-1 text-accent-info hover:underline`,children:[(0,v.jsx)(te,{className:`size-3.5`,"aria-hidden":!0}),s(`openPr`,{number:X.prNumber??``})]}):null]}),Q.fineControlOnly?(0,v.jsx)(`p`,{className:`mt-4 rounded-md border border-accent-warning/30 bg-accent-warning/5 px-3 py-2 text-xs text-accent-warning`,children:s(`fineControlOnly`)}):Q.inFlight?(0,v.jsxs)(`p`,{className:`mt-4 flex items-center gap-2 text-sm text-muted-foreground`,children:[(0,v.jsx)(c,{className:`size-4 animate-spin`,"aria-hidden":!0}),s(`stillWorking`)]}):Q.terminal?(0,v.jsx)(`p`,{className:`mt-4 text-sm text-muted-foreground`,children:s(`alreadyResolved`)}):(0,v.jsxs)(`div`,{className:`mt-4 flex flex-wrap items-center gap-2`,children:[Q.verbs.includes(`accept`)&&(!Y?.repositoryDeliveries?.length||f)?Ee?(0,v.jsxs)(`div`,{className:`flex w-full flex-col gap-2 rounded-md border border-destructive/40 bg-destructive/5 p-3`,children:[(0,v.jsx)(`p`,{className:`text-xs text-foreground`,children:s(`accept.irreversibleWarning`)}),(0,v.jsxs)(`div`,{className:`flex gap-2`,children:[(0,v.jsx)(`button`,{type:`button`,onClick:()=>void $(`accept`),disabled:Z,className:`rounded-md bg-destructive px-3 py-1.5 text-sm font-medium text-white disabled:opacity-50`,"data-testid":`packet-accept-confirm`,children:s(`accept.irreversibleConfirm`)}),(0,v.jsx)(`button`,{type:`button`,onClick:()=>z(!1),className:`rounded-md border border-border px-3 py-1.5 text-sm text-foreground`,children:s(`common:actions.cancel`)})]})]}):(0,v.jsxs)(`button`,{type:`button`,onClick:()=>{Q.requiresIrreversibleConfirm?z(!0):$(`accept`)},disabled:Z,className:`inline-flex items-center gap-1.5 rounded-md bg-accent-success px-3 py-1.5 text-sm font-medium text-white disabled:opacity-50`,"data-testid":`packet-accept`,children:[L===`accept`?(0,v.jsx)(c,{className:`size-4 animate-spin`,"aria-hidden":!0}):(0,v.jsx)(fe,{className:`size-4`,"aria-hidden":!0}),s(`accept.${Q.acceptMeaning??`generic`}`)]}):null,Q.verbs.includes(`request-changes`)?(0,v.jsxs)(`button`,{type:`button`,onClick:()=>q(e=>!e),disabled:Z||W,"aria-expanded":Oe,className:`inline-flex items-center gap-1.5 rounded-md border border-border px-3 py-1.5 text-sm text-foreground hover:bg-surface disabled:opacity-50`,"data-testid":`packet-request-changes`,children:[(0,v.jsx)(ee,{className:`size-4`,"aria-hidden":!0}),s(`requestChanges.label`)]}):null,Q.verbs.includes(`discard`)?(0,v.jsxs)(`button`,{type:`button`,onClick:()=>void $(`discard`),disabled:Z,className:`inline-flex items-center gap-1.5 rounded-md border border-border px-3 py-1.5 text-sm text-foreground hover:bg-surface disabled:opacity-50`,"data-testid":`packet-discard`,children:[L===`discard`?(0,v.jsx)(c,{className:`size-4 animate-spin`,"aria-hidden":!0}):(0,v.jsx)(pe,{className:`size-4`,"aria-hidden":!0}),s(`discard.label`)]}):null]}),y&&Q.verbs.includes(`discard`)?(0,v.jsx)(`p`,{className:`mt-3 rounded-md border border-accent-warning/40 bg-accent-warning/10 px-3 py-2 text-xs text-accent-warning`,"data-testid":`packet-discard-stacked-note`,children:s(`discard.stackedNote`)}):null,B?(0,v.jsx)(`p`,{className:`mt-3 text-xs text-accent-warning`,children:s(`error.${B}`)}):null,Oe?(0,v.jsxs)(`div`,{className:`mt-4 flex flex-col gap-2 rounded-md border border-border/70 bg-background-deep/40 p-3`,children:[(0,v.jsx)(`label`,{htmlFor:`packet-revision-note`,className:`text-xs font-medium text-foreground`,children:s(`requestChanges.prompt`)}),(0,v.jsx)(`textarea`,{id:`packet-revision-note`,value:H,onChange:e=>U(e.target.value),rows:2,placeholder:s(`requestChanges.placeholder`),className:`resize-y rounded-md border border-border bg-surface px-2 py-1.5 text-sm text-foreground placeholder:text-muted-foreground`,"data-testid":`packet-revision-input`}),(0,v.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,v.jsxs)(`button`,{type:`button`,onClick:()=>void Ae(),disabled:Z||H.trim().length===0,className:`inline-flex items-center gap-1.5 rounded-md bg-accent-primary px-3 py-1.5 text-sm font-medium text-white disabled:opacity-50`,"data-testid":`packet-revision-submit`,children:[W?(0,v.jsx)(c,{className:`size-4 animate-spin`,"aria-hidden":!0}):(0,v.jsx)(ae,{className:`size-4`,"aria-hidden":!0}),s(`requestChanges.submit`)]}),(0,v.jsx)(`span`,{className:`text-[11px] text-muted-foreground`,children:s(`requestChanges.hint`)})]}),De?(0,v.jsx)(`p`,{className:`text-xs text-accent-warning`,children:s(`error.${De}`)}):null]}):null]}),X.driftNudges.length>0?(0,v.jsxs)(`div`,{className:`rounded-lg border border-accent-highlight/30 bg-accent-highlight/5 p-4`,"data-testid":`packet-drift-nudges`,children:[(0,v.jsx)(`h2`,{className:`mb-1 text-sm font-medium text-accent-highlight`,children:s(`drift.title`)}),(0,v.jsx)(`ul`,{className:`space-y-1 text-xs text-foreground`,children:X.driftNudges.map(e=>(0,v.jsx)(`li`,{children:s(e.code,{...e.values,defaultValue:e.code})},e.code))}),(0,v.jsx)(`p`,{className:`mt-2 text-[11px] text-muted-foreground`,children:s(`drift.advisory`)})]}):null,X.versions.length>1?(0,v.jsxs)(w,{title:s(`versions.title`,{count:X.versions.length}),badge:(0,v.jsx)(he,{className:`size-3.5 text-muted-foreground`,"aria-hidden":!0}),children:[(0,v.jsx)(`ol`,{className:`space-y-2`,"data-testid":`packet-versions`,children:X.versions.map(e=>(0,v.jsxs)(`li`,{className:`flex flex-col gap-0.5 text-sm`,children:[(0,v.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,v.jsx)(`span`,{className:e.current?`font-medium text-foreground`:`text-muted-foreground`,children:s(`versions.label`,{version:e.version})}),e.current?(0,v.jsx)(`span`,{className:`rounded-full border border-accent-primary/40 bg-accent-primary/10 px-1.5 text-[10px] text-accent-primary`,children:s(`versions.current`)}):null,(0,v.jsx)(`span`,{className:`text-[11px] text-muted-foreground`,children:e.costUsd===null?`—`:`${e.costEstimated?`~`:``}$${e.costUsd.toFixed(2)}`})]}),(0,v.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e.revisionNote??s(`versions.originalBuild`)})]},e.prDeliveryId))}),(0,v.jsx)(`p`,{className:`mt-3 text-xs text-muted-foreground`,children:s(`cost.allVersions`,{amount:X.chainCostUsd===null?`—`:`${X.chainCostEstimated?`~`:``}$${X.chainCostUsd.toFixed(2)}`})})]}):null,X.watchOut.length>0?(0,v.jsxs)(`div`,{className:`rounded-lg border border-accent-warning/30 bg-accent-warning/5 p-4`,children:[(0,v.jsxs)(`h2`,{className:`mb-2 flex items-center gap-1.5 text-sm font-medium text-accent-warning`,children:[(0,v.jsx)(me,{className:`size-4`,"aria-hidden":!0}),s(`watchOut.title`)]}),(0,v.jsx)(`ul`,{className:`space-y-1`,children:X.watchOut.map((e,t)=>(0,v.jsx)(S,{item:e},`${e.code}-${t}`))})]}):null,(0,v.jsx)(w,{title:s(`sections.whatYouAsked`),defaultOpen:!0,children:(0,v.jsx)(`ul`,{className:`space-y-3`,children:X.sections.map(e=>(0,v.jsxs)(`li`,{className:`text-sm`,children:[(0,v.jsxs)(`button`,{type:`button`,onClick:()=>Te(e.ticketId),className:`text-accent-primary hover:underline`,children:[`#`,e.ticketId,` `,e.title??``]}),e.problem?(0,v.jsx)(b,{muted:!0,className:`mt-1`,children:e.problem}):null]},e.ticketId))})}),X.followUp&&(0,v.jsxs)(w,{title:s(`followUp.title`,{count:X.followUp.comments.length}),defaultOpen:!0,children:[(0,v.jsx)(`p`,{className:`mb-2 text-xs text-muted-foreground`,children:s(`followUp.caveat`)}),(0,v.jsx)(`ul`,{className:`space-y-3`,"data-testid":`packet-follow-up`,children:X.followUp.comments.map(e=>{let t=X.followUpReport?.find(t=>t.commentId===e.id)??null,n=t?t.verdict:`unreported`;return(0,v.jsxs)(`li`,{className:`rounded-md border border-border/50 bg-background-deep/30 px-3 py-2 text-sm`,children:[(0,v.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,v.jsx)(`span`,{className:`rounded bg-surface/70 px-1 font-mono text-[10px] text-muted-foreground`,children:e.id}),e.path?(0,v.jsxs)(`span`,{className:`font-mono text-xs text-accent-info`,children:[e.path,e.line?`:${e.line}`:``]}):null,(0,v.jsx)(`span`,{className:`rounded-full border px-2 py-0.5 text-[10px] font-medium ${C[n]}`,"data-testid":`packet-follow-up-verdict`,children:s(`followUp.verdict.${n}`)}),(0,v.jsxs)(`span`,{className:`text-[10px] text-muted-foreground`,children:[s(`followUp.source.${e.source===`github`?`github`:`pasted`}`),e.author?` · ${e.author}`:``]})]}),(0,v.jsx)(b,{muted:!0,className:`mt-1`,children:e.body}),t?(0,v.jsxs)(`dl`,{className:`mt-1 grid gap-x-3 gap-y-0.5 text-xs text-muted-foreground sm:grid-cols-[auto_1fr]`,children:[t.files?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(`dt`,{className:`font-medium`,children:s(`followUp.files`)}),(0,v.jsx)(`dd`,{className:`font-mono`,children:t.files})]}):null,t.tests?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(`dt`,{className:`font-medium`,children:s(`followUp.tests`)}),(0,v.jsx)(`dd`,{children:t.tests})]}):null,t.notes?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(`dt`,{className:`font-medium`,children:s(`followUp.notes`)}),(0,v.jsx)(`dd`,{children:t.notes})]}):null]}):(0,v.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:s(`followUp.noReport`)})]},e.id)})}),X.followUp.scope.excludedChanges.length>0&&(0,v.jsxs)(`p`,{className:`mt-2 text-xs text-muted-foreground`,children:[(0,v.jsxs)(`span`,{className:`font-medium`,children:[s(`followUp.excluded`),`:`]}),` `,X.followUp.scope.excludedChanges.join(` · `)]})]}),X.specAddenda&&X.specAddenda.length>0&&(0,v.jsxs)(w,{title:s(`addenda.title`,{count:X.specAddenda.length}),defaultOpen:!0,children:[(0,v.jsx)(`p`,{className:`mb-2 text-xs text-muted-foreground`,children:s(`addenda.caveat`)}),(0,v.jsx)(`ul`,{className:`space-y-2`,"data-testid":`packet-addenda`,children:X.specAddenda.map(e=>{let t=X.specAddendaReport?.find(t=>t.addendumId===e.id)??null,n=t?t.verdict:`unreported`,r=n===`applied`?C.resolved:C[n];return(0,v.jsxs)(`li`,{className:`rounded-md border border-border/50 bg-background-deep/30 px-3 py-2 text-sm`,children:[(0,v.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,v.jsxs)(`span`,{className:`font-mono text-xs text-accent-primary`,children:[`#`,e.ticketId]}),(0,v.jsx)(`span`,{className:`rounded-full border border-border/50 px-1.5 py-px text-[10px] text-muted-foreground`,children:s(`addenda.kind.${e.kind}`)}),(0,v.jsx)(`span`,{className:`font-medium`,children:e.title}),(0,v.jsx)(`span`,{className:`rounded-full border px-2 py-0.5 text-[10px] font-medium ${r}`,"data-testid":`packet-addenda-verdict`,children:s(`addenda.verdict.${n}`)})]}),t?(0,v.jsxs)(`dl`,{className:`mt-1 grid gap-x-3 gap-y-0.5 text-xs text-muted-foreground sm:grid-cols-[auto_1fr]`,children:[t.files?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(`dt`,{className:`font-medium`,children:s(`followUp.files`)}),(0,v.jsx)(`dd`,{className:`font-mono`,children:t.files})]}):null,t.tests?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(`dt`,{className:`font-medium`,children:s(`followUp.tests`)}),(0,v.jsx)(`dd`,{children:t.tests})]}):null,t.notes?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(`dt`,{className:`font-medium`,children:s(`followUp.notes`)}),(0,v.jsx)(`dd`,{children:t.notes})]}):null]}):(0,v.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:s(`addenda.noReport`)})]},e.id)})})]}),(0,v.jsx)(w,{title:s(`sections.whatIDid`),children:(0,v.jsx)(`ul`,{className:`space-y-3`,children:X.sections.map(e=>(0,v.jsxs)(`li`,{className:`text-sm`,"data-testid":`packet-done-${e.ticketId}`,children:[(0,v.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,v.jsxs)(`span`,{className:`font-medium text-foreground`,children:[`#`,e.ticketId]}),e.title?(0,v.jsx)(`span`,{className:`text-foreground/80`,children:e.title}):null,(()=>{let t=Ce(e);return(0,v.jsx)(`span`,{className:`rounded-full border px-2 py-0.5 text-[10px] font-medium ${we[t]}`,"data-testid":`packet-outcome-pill`,children:s(`outcome.${t}`)})})()]}),e.churn?(0,v.jsxs)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:[s(`churn.line`,{files:e.churn.filesTouched,added:e.churn.addedLines,removed:e.churn.removedLines}),` · `,e.churn.testFilesTouched.length>0?s(`churn.testFiles`,{count:e.churn.testFilesTouched.length}):s(`churn.noTestFiles`)]}):(0,v.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:s(`churn.batchNotSplittable`)}),e.solution?(0,v.jsxs)(`details`,{className:`group mt-2 rounded-md border border-border/50 bg-background-deep/30 px-3 py-2`,children:[(0,v.jsx)(`summary`,{className:`cursor-pointer select-none text-xs font-medium text-muted-foreground group-open:text-foreground/80`,children:s(`planned.title`)}),(0,v.jsx)(`p`,{className:`mt-1 text-[11px] italic text-muted-foreground/80`,children:s(`planned.caveat`)}),(0,v.jsx)(b,{className:`mt-2`,children:e.solutionOverflow??e.solution})]}):(0,v.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:s(`noSolutionRecorded`)})]},e.ticketId))})}),(0,v.jsx)(w,{title:s(`sections.howItWasChecked`),badge:X.evidenceUnavailable?(0,v.jsx)(`span`,{className:`rounded-full border border-border bg-background-deep/50 px-2 py-0.5 text-[10px] text-muted-foreground`,children:s(`proof.evidenceUnavailable`)}):void 0,children:(0,v.jsx)(`div`,{className:`space-y-4`,children:je.map(({tier:e,items:t})=>{let n=xe[e];return(0,v.jsxs)(`div`,{className:`rounded-md border px-3 py-2 ${Se[e]}`,children:[(0,v.jsxs)(`h3`,{className:`mb-1 flex items-center gap-1.5 text-xs font-medium`,children:[(0,v.jsx)(n,{className:`size-3.5`,"aria-hidden":!0}),s(`tier.${e}.title`)]}),(0,v.jsx)(`p`,{className:`mb-2 text-[11px] opacity-80`,children:s(`tier.${e}.caveat`)}),(0,v.jsx)(`ul`,{className:`space-y-1`,children:t.map((e,t)=>(0,v.jsx)(S,{item:e},`${e.code}-${t}`))})]},e)})})})]})}export{T as default};
@@ -0,0 +1 @@
1
+ import{t as e}from"./jsx-runtime-zu2_FqZY.js";import{n as t}from"./createLucideIcon-Bjbbp_KS.js";import{t as n}from"./download-CFHyyHcw.js";import{t as r}from"./git-branch-BRM0F5GN.js";import{n as i,t as a}from"./square-Ci-PFcFe.js";import{a as o,i as s,l as c,o as l,r as u,t as d}from"./dialog-xXB2q5HJ.js";import{t as f}from"./button-Ccc9Dc-D.js";import{Ht as p,Y as m,lt as h}from"./index-C4Mv6tV6.js";var g=e(),_={core:p,start:i,"ai-step":p,shell:h,decider:r,condition:r,end:a};function v(e){if(e.type===`core`){let t=e.data?.params;return t?String(t.text??t.prompt??t.goal??t.expr??t.question??t.message??t.ref??t.body??t.outcome??JSON.stringify(t,null,2)):null}return e.type===`ai-step`?typeof e.data?.prompt==`string`?e.data.prompt:null:e.type===`shell`?typeof e.data?.command==`string`?e.data.command:null:e.type===`decider`?typeof e.data?.goal==`string`?e.data.goal:null:e.type===`end`?e.data?.outcome===`failure`?`failure`:`success`:null}function y({template:e,onClose:r,onUse:i}){let{t:h}=t(`loops`);return(0,g.jsx)(d,{open:e!==null,onOpenChange:e=>{e||r()},children:(0,g.jsx)(u,{movableResizable:!0,className:`max-w-lg`,children:e&&(0,g.jsxs)(g.Fragment,{children:[(0,g.jsxs)(l,{children:[(0,g.jsxs)(c,{className:`flex items-center gap-2`,children:[(0,g.jsx)(p,{className:`w-4 h-4 text-accent-highlight`}),e.name]}),(0,g.jsx)(s,{children:e.description})]}),(0,g.jsxs)(`div`,{className:`flex flex-wrap gap-1.5`,children:[m(e.graph)?(0,g.jsx)(`span`,{title:h(`gallery.needsSpecHint`),className:`px-1.5 py-0.5 rounded text-[10px] bg-accent-secondary/15 text-accent-secondary`,children:h(`gallery.needsSpec`)}):(0,g.jsx)(`span`,{title:h(`gallery.standaloneHint`),className:`px-1.5 py-0.5 rounded text-[10px] bg-accent-success/15 text-accent-success`,children:h(`gallery.standalone`)}),e.category&&(0,g.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-[10px] bg-accent-info/15 text-accent-info`,children:h(`categories.${e.category}`,{defaultValue:e.category})}),e.tags.map(e=>(0,g.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-[10px] bg-muted text-muted-foreground`,children:e},e))]}),(0,g.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:e.graph.config.timeoutMinutes>0?h(`preview.limits`,{iterations:e.graph.config.maxIterations,timeout:e.graph.config.timeoutMinutes}):h(`preview.limitsNoTimeout`,{iterations:e.graph.config.maxIterations})}),(0,g.jsxs)(`div`,{className:`max-h-[50vh] overflow-y-auto space-y-1.5 pr-1`,children:[(0,g.jsx)(`span`,{className:`block text-[10px] font-medium uppercase tracking-wide text-muted-foreground`,children:h(`preview.steps`)}),e.graph.nodes.map((e,t)=>{let n=_[e.type]??a,r=v(e);return(0,g.jsxs)(`div`,{className:`rounded border border-border bg-surface/30 p-2`,children:[(0,g.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs font-medium text-foreground`,children:[(0,g.jsxs)(`span`,{className:`text-[10px] text-muted-foreground tabular-nums`,children:[t+1,`.`]}),(0,g.jsx)(n,{className:`w-3.5 h-3.5 text-accent-primary`}),h(e.type===`core`?`builder.core.pieces.${e.data?.kind}`:`builder.nodes.${e.type}`)]}),r&&(0,g.jsx)(`pre`,{className:`mt-1 whitespace-pre-wrap break-words text-[11px] text-muted-foreground font-mono`,children:r})]},e.id)})]}),(0,g.jsxs)(o,{children:[(0,g.jsx)(f,{variant:`ghost`,onClick:r,children:h(`common:actions.cancel`)}),(0,g.jsxs)(f,{onClick:()=>i(e.id),children:[(0,g.jsx)(n,{className:`w-3.5 h-3.5 mr-1.5`}),h(`actions.use`)]})]})]})})})}export{y as n,v as r,_ as t};
@@ -1,5 +1,5 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/core-B3mKBIh5.js","assets/rolldown-runtime-CNC7AqOf.js","assets/dist-js-Rlh4FLH5.js","assets/event-Bt7f3wXe.js"])))=>i.map(i=>d[i]);
2
- import{a as e}from"./rolldown-runtime-CNC7AqOf.js";import{n as t,t as n}from"./jsx-runtime-zu2_FqZY.js";import{t as r}from"./react-dom-DiWzBDP9.js";import{t as i}from"./preload-helper-Czpn1I53.js";import{u as a}from"./chunk-KS7C4IRE-DEKu087k.js";import{D as o,E as s,a as c,h as l,l as u,m as d,r as f,w as p,x as m}from"./useSharedWebSocket-Dz-HI6De.js";import{t as h}from"./Trans-DEbgkuAY.js";import{n as g,t as _}from"./createLucideIcon-Bjbbp_KS.js";import{a as v,r as y,s as b}from"./useDesktop-QogiN0zR.js";import{a as x}from"./provider-capabilities-Vi1ZGvAK.js";import{n as S,t as C}from"./save-B6wGWwBR.js";import{n as w,r as T}from"./spending-T5GM7wpn.js";import{c as E,d as D,n as O,u as k}from"./MinimizedChatsContext-D3QzgV0B.js";import{n as A,t as j}from"./zap-CUOlvtT1.js";import{t as ee}from"./circle-x-CMYsN4ZH.js";import{t as M}from"./download-CFHyyHcw.js";import{t as te}from"./file-text-CFT-xXKN.js";import{t as N}from"./git-branch-BRM0F5GN.js";import{t as ne}from"./layers-eDMjG41I.js";import{t as P}from"./loader-circle-DcygOQpC.js";import{t as F}from"./pencil-C9RkrIPZ.js";import{n as I,t as L}from"./square-Ci-PFcFe.js";import{t as re}from"./plus-CsnjfkmX.js";import{t as R}from"./rotate-ccw-Wh4id13q.js";import{t as ie}from"./search-Cq_gE3Ik.js";import{t as ae}from"./trash-2-BOU3WdZZ.js";import{t as z}from"./triangle-alert-H9T4jAmh.js";import{t as oe}from"./wrench-BfmNO9Vw.js";import{t as se}from"./x-CBMI9ejn.js";import{M as ce,N as le,a as ue,i as de,j as fe,l as pe,o as me,r as he,t as ge}from"./dialog-xXB2q5HJ.js";import{t as B}from"./utils-BC4DHlz2.js";import{n as _e,t as V}from"./lib-CGdyxIWg.js";import{t as H}from"./formatDistanceToNow-Cc2u5FwQ.js";import{t as U}from"./button-Ccc9Dc-D.js";import{t as ve}from"./jira-api-DrGxiD9p.js";import{t as ye}from"./RepositoryScopeSelector-hPGZNRBm.js";function be(){return typeof window<`u`&&window.__TAURI_INTERNALS__!==void 0}async function xe(e){if(!be())return;let{invoke:t}=await i(async()=>{let{invoke:e}=await import(`./core-B3mKBIh5.js`).then(e=>e.i);return{invoke:e}},__vite__mapDeps([0,1]));await t(`desktop_reveal_path`,{path:e})}async function W(e){if(be())try{let t=await i(()=>import(`./dist-js-Rlh4FLH5.js`),__vite__mapDeps([2,0,1]));if(typeof t.open==`function`){await t.open(e);return}}catch(e){console.warn(`[openExternalUrl] tauri shell open failed:`,e)}try{window.open(e,`_blank`,`noopener,noreferrer`)}catch{}}function Se(e=``){return e||(typeof window<`u`&&(`__TAURI_INTERNALS__`in window||window.location.hostname===`tauri.localhost`)||typeof window<`u`&&window.location.protocol!==`http:`&&window.location.protocol!==`https:`?`ws://127.0.0.1:4200`:`${window.location.protocol===`https:`?`wss:`:`ws:`}//${window.location.host}`)}var Ce=Se(),we=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_TERMINAL_PANEL;return typeof e!=`string`||e!==`false`})(),Te=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_AGENTS_SECTION;return typeof e!=`string`||e!==`false`})(),Ee=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_CODE_EXPLORER;return typeof e!=`string`||e!==`false`})(),De=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_JIRA;return typeof e!=`string`||e!==`false`})(),Oe=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_MCP;return typeof e!=`string`||e!==`false`})(),ke=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_AGENT_CHAT;return typeof e!=`string`||e!==`false`})(),Ae=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_AGENT_MODE;return ke&&(typeof e!=`string`||e!==`false`)})();(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_INTERACTIVE_JOBS;return typeof e!=`string`||e!==`false`})();var je=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_LOOPS_SECTION;return typeof e!=`string`||e!==`false`})(),Me=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_NATIVE_BROWSER;return typeof e!=`string`||e!==`false`})(),Ne=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_PROJECT_BUILDER;return typeof e!=`string`||e!==`false`})(),Pe=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_REVIEW_PACKET;return typeof e!=`string`||e!==`false`})(),Fe=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_NARRATED_PROGRESS;return typeof e!=`string`||e!==`false`})(),Ie=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_LOCAL_ENGINES;return typeof e!=`string`||e!==`false`})();function Le(){return Ie}var Re=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_MISSION_RAIL_CARDS;return typeof e!=`string`||e!==`false`})(),ze=_(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),Be=_(`camera`,[[`path`,{d:`M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z`,key:`18u6gg`}],[`circle`,{cx:`12`,cy:`13`,r:`3`,key:`1vg3eu`}]]),Ve=_(`circle-arrow-right`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m12 16 4-4-4-4`,key:`1i9zcv`}],[`path`,{d:`M8 12h8`,key:`1wcyev`}]]),G=_(`circle-question-mark`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3`,key:`1u773s`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),He=_(`circle`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]]),Ue=_(`columns-2`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M12 3v18`,key:`108xh3`}]]),We=_(`droplet`,[[`path`,{d:`M12 22a7 7 0 0 0 7-7c0-2-1-3.9-3-5.5s-3.5-4-4-6.5c-.5 2.5-2 4.9-4 6.5C6 11.1 5 13 5 15a7 7 0 0 0 7 7z`,key:`c7niix`}]]),Ge=_(`file-minus-corner`,[[`path`,{d:`M20 14V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12`,key:`l9p8hp`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M14 18h6`,key:`1m8k6r`}]]),Ke=_(`file-plus-corner`,[[`path`,{d:`M11.35 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v5.35`,key:`17jvcc`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M14 19h6`,key:`bvotb8`}],[`path`,{d:`M17 16v6`,key:`18yu1i`}]]),qe=_(`git-commit-horizontal`,[[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}],[`line`,{x1:`3`,x2:`9`,y1:`12`,y2:`12`,key:`1dyftd`}],[`line`,{x1:`15`,x2:`21`,y1:`12`,y2:`12`,key:`oup4p8`}]]),Je=_(`git-pull-request-arrow`,[[`circle`,{cx:`5`,cy:`6`,r:`3`,key:`1qnov2`}],[`path`,{d:`M5 9v12`,key:`ih889a`}],[`circle`,{cx:`19`,cy:`18`,r:`3`,key:`1qljk2`}],[`path`,{d:`m15 9-3-3 3-3`,key:`1lwv8l`}],[`path`,{d:`M12 6h5a2 2 0 0 1 2 2v7`,key:`1yj91y`}]]),Ye=_(`git-pull-request`,[[`circle`,{cx:`18`,cy:`18`,r:`3`,key:`1xkwt0`}],[`circle`,{cx:`6`,cy:`6`,r:`3`,key:`1lh9wr`}],[`path`,{d:`M13 6h3a2 2 0 0 1 2 2v7`,key:`1yeb86`}],[`line`,{x1:`6`,x2:`6`,y1:`9`,y2:`21`,key:`rroup`}]]),Xe=_(`globe`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20`,key:`13o1zl`}],[`path`,{d:`M2 12h20`,key:`9i4pu4`}]]),Ze=_(`hash`,[[`line`,{x1:`4`,x2:`20`,y1:`9`,y2:`9`,key:`4lhtct`}],[`line`,{x1:`4`,x2:`20`,y1:`15`,y2:`15`,key:`vyu0kd`}],[`line`,{x1:`10`,x2:`8`,y1:`3`,y2:`21`,key:`1ggp8o`}],[`line`,{x1:`16`,x2:`14`,y1:`3`,y2:`21`,key:`weycgp`}]]),Qe=_(`message-square-text`,[[`path`,{d:`M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z`,key:`18887p`}],[`path`,{d:`M7 11h10`,key:`1twpyw`}],[`path`,{d:`M7 15h6`,key:`d9of3u`}],[`path`,{d:`M7 7h8`,key:`af5zfr`}]]),$e=_(`message-square`,[[`path`,{d:`M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z`,key:`18887p`}]]),et=_(`mouse-pointer-2`,[[`path`,{d:`M4.037 4.688a.495.495 0 0 1 .651-.651l16 6.5a.5.5 0 0 1-.063.947l-6.124 1.58a2 2 0 0 0-1.438 1.435l-1.579 6.126a.5.5 0 0 1-.947.063z`,key:`edeuup`}]]),tt=_(`redo-2`,[[`path`,{d:`m15 14 5-5-5-5`,key:`12vg1m`}],[`path`,{d:`M20 9H9.5A5.5 5.5 0 0 0 4 14.5A5.5 5.5 0 0 0 9.5 20H13`,key:`6uklza`}]]),K=_(`rotate-cw`,[[`path`,{d:`M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8`,key:`1p45f6`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}]]),nt=_(`shield-alert`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`M12 8v4`,key:`1got3b`}],[`path`,{d:`M12 16h.01`,key:`1drbdi`}]]),rt=_(`split`,[[`path`,{d:`M16 3h5v5`,key:`1806ms`}],[`path`,{d:`M8 3H3v5`,key:`15dfkv`}],[`path`,{d:`M12 22v-8.3a4 4 0 0 0-1.172-2.872L3 3`,key:`1qrqzj`}],[`path`,{d:`m15 9 6-6`,key:`ko1vev`}]]),q=_(`ticket`,[[`path`,{d:`M2 9a3 3 0 0 1 0 6v2a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-2a3 3 0 0 1 0-6V7a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z`,key:`qn84l0`}],[`path`,{d:`M13 5v2`,key:`dyzc3o`}],[`path`,{d:`M13 17v2`,key:`1ont0d`}],[`path`,{d:`M13 11v2`,key:`1wjjxi`}]]),it=_(`type`,[[`path`,{d:`M12 4v16`,key:`1654pz`}],[`path`,{d:`M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2`,key:`e0r10z`}],[`path`,{d:`M9 20h6`,key:`s66wpe`}]]),J=_(`undo-2`,[[`path`,{d:`M9 14 4 9l5-5`,key:`102s5s`}],[`path`,{d:`M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11`,key:`f3b9sd`}]]),at=_(`zoom-in`,[[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}],[`line`,{x1:`21`,x2:`16.65`,y1:`21`,y2:`16.65`,key:`13gj7c`}],[`line`,{x1:`11`,x2:`11`,y1:`8`,y2:`14`,key:`1vmskp`}],[`line`,{x1:`8`,x2:`14`,y1:`11`,y2:`11`,key:`durymu`}]]),ot=_(`zoom-out`,[[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}],[`line`,{x1:`21`,x2:`16.65`,y1:`21`,y2:`16.65`,key:`13gj7c`}],[`line`,{x1:`8`,x2:`14`,y1:`11`,y2:`11`,key:`durymu`}]]),st=new Map,ct=2e3;function lt(e){st.set(e,(st.get(e)??0)+1)}function ut(e){(st.get(e)??0)<=0||setTimeout(()=>{let t=(st.get(e)??0)-1;t<=0?st.delete(e):st.set(e,t)},ct)}function dt(e){return e?(st.get(e)??0)>0:!1}var Y=e(t(),1),ft=3e3,pt=`
2
+ import{a as e}from"./rolldown-runtime-CNC7AqOf.js";import{n as t,t as n}from"./jsx-runtime-zu2_FqZY.js";import{t as r}from"./react-dom-DiWzBDP9.js";import{t as i}from"./preload-helper-Czpn1I53.js";import{u as a}from"./chunk-KS7C4IRE-DEKu087k.js";import{D as o,E as s,a as c,h as l,l as u,m as d,r as f,w as p,x as m}from"./useSharedWebSocket-BZMrX4jr.js";import{t as h}from"./Trans-D3AfDylf.js";import{n as g,t as _}from"./createLucideIcon-Bjbbp_KS.js";import{a as v,r as y,s as b}from"./useDesktop-0unHDBJJ.js";import{a as x}from"./provider-capabilities-Vi1ZGvAK.js";import{n as S,t as C}from"./save-B6wGWwBR.js";import{n as w,r as T}from"./spending-HBSk-6jv.js";import{c as E,d as D,n as O,u as k}from"./MinimizedChatsContext-CNx_0bZu.js";import{n as A,t as j}from"./zap-CUOlvtT1.js";import{t as ee}from"./circle-x-CMYsN4ZH.js";import{t as M}from"./download-CFHyyHcw.js";import{t as te}from"./file-text-CFT-xXKN.js";import{t as N}from"./git-branch-BRM0F5GN.js";import{t as ne}from"./layers-eDMjG41I.js";import{t as P}from"./loader-circle-DcygOQpC.js";import{t as F}from"./pencil-C9RkrIPZ.js";import{n as I,t as L}from"./square-Ci-PFcFe.js";import{t as re}from"./plus-CsnjfkmX.js";import{t as R}from"./rotate-ccw-Wh4id13q.js";import{t as ie}from"./search-Cq_gE3Ik.js";import{t as ae}from"./trash-2-BOU3WdZZ.js";import{t as z}from"./triangle-alert-H9T4jAmh.js";import{t as oe}from"./wrench-BfmNO9Vw.js";import{t as se}from"./x-CBMI9ejn.js";import{M as ce,N as le,a as ue,i as de,j as fe,l as pe,o as me,r as he,t as ge}from"./dialog-xXB2q5HJ.js";import{t as B}from"./utils-BC4DHlz2.js";import{n as _e,t as V}from"./lib-CGdyxIWg.js";import{t as H}from"./formatDistanceToNow-aBss1Nai.js";import{t as U}from"./button-Ccc9Dc-D.js";import{t as ve}from"./jira-api-BYbEPlkr.js";import{t as ye}from"./RepositoryScopeSelector-C2mvWBQ6.js";function be(){return typeof window<`u`&&window.__TAURI_INTERNALS__!==void 0}async function xe(e){if(!be())return;let{invoke:t}=await i(async()=>{let{invoke:e}=await import(`./core-B3mKBIh5.js`).then(e=>e.i);return{invoke:e}},__vite__mapDeps([0,1]));await t(`desktop_reveal_path`,{path:e})}async function W(e){if(be())try{let t=await i(()=>import(`./dist-js-Rlh4FLH5.js`),__vite__mapDeps([2,0,1]));if(typeof t.open==`function`){await t.open(e);return}}catch(e){console.warn(`[openExternalUrl] tauri shell open failed:`,e)}try{window.open(e,`_blank`,`noopener,noreferrer`)}catch{}}function Se(e=``){return e||(typeof window<`u`&&(`__TAURI_INTERNALS__`in window||window.location.hostname===`tauri.localhost`)||typeof window<`u`&&window.location.protocol!==`http:`&&window.location.protocol!==`https:`?`ws://127.0.0.1:4200`:`${window.location.protocol===`https:`?`wss:`:`ws:`}//${window.location.host}`)}var Ce=Se(),we=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_TERMINAL_PANEL;return typeof e!=`string`||e!==`false`})(),Te=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_AGENTS_SECTION;return typeof e!=`string`||e!==`false`})(),Ee=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_CODE_EXPLORER;return typeof e!=`string`||e!==`false`})(),De=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_JIRA;return typeof e!=`string`||e!==`false`})(),Oe=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_MCP;return typeof e!=`string`||e!==`false`})(),ke=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_AGENT_CHAT;return typeof e!=`string`||e!==`false`})(),Ae=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_AGENT_MODE;return ke&&(typeof e!=`string`||e!==`false`)})();(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_INTERACTIVE_JOBS;return typeof e!=`string`||e!==`false`})();var je=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_LOOPS_SECTION;return typeof e!=`string`||e!==`false`})(),Me=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_NATIVE_BROWSER;return typeof e!=`string`||e!==`false`})(),Ne=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_PROJECT_BUILDER;return typeof e!=`string`||e!==`false`})(),Pe=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_REVIEW_PACKET;return typeof e!=`string`||e!==`false`})(),Fe=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_NARRATED_PROGRESS;return typeof e!=`string`||e!==`false`})(),Ie=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_LOCAL_ENGINES;return typeof e!=`string`||e!==`false`})();function Le(){return Ie}var Re=(()=>{let e={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}.VITE_FEATURE_MISSION_RAIL_CARDS;return typeof e!=`string`||e!==`false`})(),ze=_(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),Be=_(`camera`,[[`path`,{d:`M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z`,key:`18u6gg`}],[`circle`,{cx:`12`,cy:`13`,r:`3`,key:`1vg3eu`}]]),Ve=_(`circle-arrow-right`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m12 16 4-4-4-4`,key:`1i9zcv`}],[`path`,{d:`M8 12h8`,key:`1wcyev`}]]),G=_(`circle-question-mark`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3`,key:`1u773s`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),He=_(`circle`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]]),Ue=_(`columns-2`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M12 3v18`,key:`108xh3`}]]),We=_(`droplet`,[[`path`,{d:`M12 22a7 7 0 0 0 7-7c0-2-1-3.9-3-5.5s-3.5-4-4-6.5c-.5 2.5-2 4.9-4 6.5C6 11.1 5 13 5 15a7 7 0 0 0 7 7z`,key:`c7niix`}]]),Ge=_(`file-minus-corner`,[[`path`,{d:`M20 14V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12`,key:`l9p8hp`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M14 18h6`,key:`1m8k6r`}]]),Ke=_(`file-plus-corner`,[[`path`,{d:`M11.35 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v5.35`,key:`17jvcc`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M14 19h6`,key:`bvotb8`}],[`path`,{d:`M17 16v6`,key:`18yu1i`}]]),qe=_(`git-commit-horizontal`,[[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}],[`line`,{x1:`3`,x2:`9`,y1:`12`,y2:`12`,key:`1dyftd`}],[`line`,{x1:`15`,x2:`21`,y1:`12`,y2:`12`,key:`oup4p8`}]]),Je=_(`git-pull-request-arrow`,[[`circle`,{cx:`5`,cy:`6`,r:`3`,key:`1qnov2`}],[`path`,{d:`M5 9v12`,key:`ih889a`}],[`circle`,{cx:`19`,cy:`18`,r:`3`,key:`1qljk2`}],[`path`,{d:`m15 9-3-3 3-3`,key:`1lwv8l`}],[`path`,{d:`M12 6h5a2 2 0 0 1 2 2v7`,key:`1yj91y`}]]),Ye=_(`git-pull-request`,[[`circle`,{cx:`18`,cy:`18`,r:`3`,key:`1xkwt0`}],[`circle`,{cx:`6`,cy:`6`,r:`3`,key:`1lh9wr`}],[`path`,{d:`M13 6h3a2 2 0 0 1 2 2v7`,key:`1yeb86`}],[`line`,{x1:`6`,x2:`6`,y1:`9`,y2:`21`,key:`rroup`}]]),Xe=_(`globe`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20`,key:`13o1zl`}],[`path`,{d:`M2 12h20`,key:`9i4pu4`}]]),Ze=_(`hash`,[[`line`,{x1:`4`,x2:`20`,y1:`9`,y2:`9`,key:`4lhtct`}],[`line`,{x1:`4`,x2:`20`,y1:`15`,y2:`15`,key:`vyu0kd`}],[`line`,{x1:`10`,x2:`8`,y1:`3`,y2:`21`,key:`1ggp8o`}],[`line`,{x1:`16`,x2:`14`,y1:`3`,y2:`21`,key:`weycgp`}]]),Qe=_(`message-square-text`,[[`path`,{d:`M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z`,key:`18887p`}],[`path`,{d:`M7 11h10`,key:`1twpyw`}],[`path`,{d:`M7 15h6`,key:`d9of3u`}],[`path`,{d:`M7 7h8`,key:`af5zfr`}]]),$e=_(`message-square`,[[`path`,{d:`M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z`,key:`18887p`}]]),et=_(`mouse-pointer-2`,[[`path`,{d:`M4.037 4.688a.495.495 0 0 1 .651-.651l16 6.5a.5.5 0 0 1-.063.947l-6.124 1.58a2 2 0 0 0-1.438 1.435l-1.579 6.126a.5.5 0 0 1-.947.063z`,key:`edeuup`}]]),tt=_(`redo-2`,[[`path`,{d:`m15 14 5-5-5-5`,key:`12vg1m`}],[`path`,{d:`M20 9H9.5A5.5 5.5 0 0 0 4 14.5A5.5 5.5 0 0 0 9.5 20H13`,key:`6uklza`}]]),K=_(`rotate-cw`,[[`path`,{d:`M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8`,key:`1p45f6`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}]]),nt=_(`shield-alert`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`M12 8v4`,key:`1got3b`}],[`path`,{d:`M12 16h.01`,key:`1drbdi`}]]),rt=_(`split`,[[`path`,{d:`M16 3h5v5`,key:`1806ms`}],[`path`,{d:`M8 3H3v5`,key:`15dfkv`}],[`path`,{d:`M12 22v-8.3a4 4 0 0 0-1.172-2.872L3 3`,key:`1qrqzj`}],[`path`,{d:`m15 9 6-6`,key:`ko1vev`}]]),q=_(`ticket`,[[`path`,{d:`M2 9a3 3 0 0 1 0 6v2a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-2a3 3 0 0 1 0-6V7a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z`,key:`qn84l0`}],[`path`,{d:`M13 5v2`,key:`dyzc3o`}],[`path`,{d:`M13 17v2`,key:`1ont0d`}],[`path`,{d:`M13 11v2`,key:`1wjjxi`}]]),it=_(`type`,[[`path`,{d:`M12 4v16`,key:`1654pz`}],[`path`,{d:`M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2`,key:`e0r10z`}],[`path`,{d:`M9 20h6`,key:`s66wpe`}]]),J=_(`undo-2`,[[`path`,{d:`M9 14 4 9l5-5`,key:`102s5s`}],[`path`,{d:`M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11`,key:`f3b9sd`}]]),at=_(`zoom-in`,[[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}],[`line`,{x1:`21`,x2:`16.65`,y1:`21`,y2:`16.65`,key:`13gj7c`}],[`line`,{x1:`11`,x2:`11`,y1:`8`,y2:`14`,key:`1vmskp`}],[`line`,{x1:`8`,x2:`14`,y1:`11`,y2:`11`,key:`durymu`}]]),ot=_(`zoom-out`,[[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}],[`line`,{x1:`21`,x2:`16.65`,y1:`21`,y2:`16.65`,key:`13gj7c`}],[`line`,{x1:`8`,x2:`14`,y1:`11`,y2:`11`,key:`durymu`}]]),st=new Map,ct=2e3;function lt(e){st.set(e,(st.get(e)??0)+1)}function ut(e){(st.get(e)??0)<=0||setTimeout(()=>{let t=(st.get(e)??0)-1;t<=0?st.delete(e):st.set(e,t)},ct)}function dt(e){return e?(st.get(e)??0)>0:!1}var Y=e(t(),1),ft=3e3,pt=`
3
3
 
4
4
  ---
5
5
 
@@ -1 +1 @@
1
- import{a as e,t}from"./rolldown-runtime-CNC7AqOf.js";import{n}from"./jsx-runtime-zu2_FqZY.js";import{j as r}from"./useSharedWebSocket-Dz-HI6De.js";import{a as i,d as a,f as o,i as s,l as c,p as l,s as u,u as d}from"./createLucideIcon-Bjbbp_KS.js";var f=t(((e,t)=>{t.exports={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}})),p=e(n()),m=e(f()),h=/\s([^'"/\s><]+?)[\s/>]|([^\s=]+)=\s?(".*?"|'.*?')/g;function g(e){var t={type:`tag`,name:``,voidElement:!1,attrs:{},children:[]},n=e.match(/<\/?([^\s]+?)[/\s>]/);if(n&&(t.name=n[1],(m.default[n[1]]||e.charAt(e.length-2)===`/`)&&(t.voidElement=!0),t.name.startsWith(`!--`))){var r=e.indexOf(`-->`);return{type:`comment`,comment:r===-1?``:e.slice(4,r)}}for(var i=new RegExp(h),a=null;(a=i.exec(e))!==null;)if(a[0].trim())if(a[1]){var o=a[1].trim(),s=[o,``];o.indexOf(`=`)>-1&&(s=o.split(`=`)),t.attrs[s[0]]=s[1],i.lastIndex--}else a[2]&&(t.attrs[a[2]]=a[3].trim().substring(1,a[3].length-1));return t}var _=/<[a-zA-Z0-9\-\!\/](?:"[^"]*"|'[^']*'|[^'">])*>/g,v=/^\s*$/,y=Object.create(null);function b(e,t){switch(t.type){case`text`:return e+t.content;case`tag`:return e+=`<`+t.name+(t.attrs?function(e){var t=[];for(var n in e)t.push(n+`="`+e[n]+`"`);return t.length?` `+t.join(` `):``}(t.attrs):``)+(t.voidElement?`/>`:`>`),t.voidElement?e:e+t.children.reduce(b,``)+`</`+t.name+`>`;case`comment`:return e+`<!--`+t.comment+`-->`}}var x={parse:function(e,t){t||={},t.components||=y;var n,r=[],i=[],a=-1,o=!1;if(e.indexOf(`<`)!==0){var s=e.indexOf(`<`);r.push({type:`text`,content:s===-1?e:e.substring(0,s)})}return e.replace(_,function(s,c){if(o){if(s!==`</`+n.name+`>`)return;o=!1}var l,u=s.charAt(1)!==`/`,d=s.startsWith(`<!--`),f=c+s.length,p=e.charAt(f);if(d){var m=g(s);return a<0?(r.push(m),r):((l=i[a]).children.push(m),r)}if(u&&(a++,(n=g(s)).type===`tag`&&t.components[n.name]&&(n.type=`component`,o=!0),n.voidElement||o||!p||p===`<`||n.children.push({type:`text`,content:e.slice(f,e.indexOf(`<`,f))}),a===0&&r.push(n),(l=i[a-1])&&l.children.push(n),i[a]=n),(!u||n.voidElement)&&(a>-1&&(n.voidElement||n.name===s.slice(2,-1))&&(a--,n=a===-1?r:i[a]),!o&&p!==`<`&&p)){l=a===-1?r:i[a].children;var h=e.indexOf(`<`,f),_=e.slice(f,h===-1?void 0:h);v.test(_)&&(_=` `),(h>-1&&a+l.length>=0||_!==` `)&&l.push({type:`text`,content:_})}}),r},stringify:function(e){return e.reduce(function(e,t){return e+b(``,t)},``)}},S=(e,t)=>{if(!e)return!1;let n=e.props?.children??e.children;return t?n.length>0:!!n},C=e=>{if(!e)return[];let t=e.props?.children??e.children;return e.props?.i18nIsDynamicList?T(t):t},w=e=>Array.isArray(e)&&e.every(p.isValidElement),T=e=>Array.isArray(e)?e:[e],E=(e,t)=>{let n={...t};return n.props={...t.props,...e.props},n},D=e=>{let t={};if(!e)return t;let n=e=>{T(e).forEach(e=>{a(e)||(S(e)?n(C(e)):d(e)&&!(0,p.isValidElement)(e)&&Object.assign(t,e))})};return n(e),t},O=(e,t,n,r)=>{if(!e)return``;let i=``,s=T(e),c=t?.transSupportBasicHtmlNodes?t.transKeepBasicHtmlNodesFor??[]:[];return s.forEach((e,s)=>{if(a(e)){i+=`${e}`;return}if((0,p.isValidElement)(e)){let{props:o,type:l}=e,u=Object.keys(o).length,d=c.indexOf(l)>-1,f=o.children;if(!f&&d&&!u){i+=`<${l}/>`;return}if(!f&&(!d||u)||o.i18nIsDynamicList){i+=`<${s}></${s}>`;return}if(d&&u<=1){let e=a(f)?f:O(f,t,n,r);i+=`<${l}>${e}</${l}>`;return}let p=O(f,t,n,r);i+=`<${s}>${p}</${s}>`;return}if(e===null){o(n,`TRANS_NULL_VALUE`,`Passed in a null value as child`,{i18nKey:r});return}if(d(e)){let{format:t,...a}=e,s=Object.keys(a);if(s.length===1){let e=t?`${s[0]}, ${t}`:s[0];i+=`{{${e}}}`;return}o(n,`TRANS_INVALID_OBJ`,`Invalid child - Object should only have keys {{ value, format }} (format is optional).`,{i18nKey:r,child:e});return}o(n,`TRANS_INVALID_VAR`,`Passed in a variable like {number} - pass variables for interpolation as full objects like {{number}}.`,{i18nKey:r,child:e})}),i},k=(e,t=[],n={})=>{if(!e)return e;let r=Object.keys(n),i=[...t,...r],a=``,o=0;for(;o<e.length;)if(e[o]===`<`){let t=!1,n=e.slice(o).match(/^<\/(\d+|[a-zA-Z][a-zA-Z0-9_-]*)>/);if(n){let e=n[1];(/^\d+$/.test(e)||i.includes(e))&&(t=!0,a+=n[0],o+=n[0].length)}if(!t){let n=e.slice(o).match(/^<(\d+|[a-zA-Z][a-zA-Z0-9_-]*)(\s+[\w-]+(?:=(?:"[^"]*"|'[^']*'|[^\s>]+))?)*\s*(\/)?>/);if(n){let e=n[1];(/^\d+$/.test(e)||i.includes(e))&&(t=!0,a+=n[0],o+=n[0].length)}}t||(a+=`&lt;`,o+=1)}else a+=e[o],o+=1;return a},A=(e,t,n,r,i,o,s)=>{if(n===``)return[];let l=i.transKeepBasicHtmlNodesFor||[],f=n&&new RegExp(l.map(e=>`<${e}`).join(`|`)).test(n);if(!e&&!t&&!f&&!s)return[n];let m=t??{},h=e=>{T(e).forEach(e=>{a(e)||(S(e)?h(C(e)):d(e)&&!(0,p.isValidElement)(e)&&Object.assign(m,e))})};h(e);let g=k(n,l,m),_=x.parse(`<0>${g}</0>`),v={...m,...o},y=(e,t,n)=>{let r=C(e),i=D(r,t.children,n);return w(r)&&i.length===0||e.props?.i18nIsDynamicList?r:i},b=(e,t,n,r,i)=>{e.dummy?(e.children=t,n.push((0,p.cloneElement)(e,{key:r},i?void 0:t))):n.push(...p.Children.map([e],e=>{if(e.type===p.Fragment||e.props?.i18nIsDynamicList!==void 0){let n={key:r};return e&&e.props&&Object.keys(e.props).forEach(t=>{t===`children`||t===`i18nIsDynamicList`||(n[t]=e.props[t])}),(0,p.createElement)(e.type,n,i?null:t)}let n={key:r};return e&&e.props&&Object.keys(e.props).forEach(t=>{t===`ref`||t===`children`||(n[t]=e.props[t])}),(0,p.cloneElement)(e,n,i?null:t)}))},D=(e,n,o)=>{let m=T(e),h=T(n),g={};return h.reduce((e,n,h)=>{let _=n.children?.[0]?.content&&r.services.interpolator.interpolate(n.children[0].content,v,r.language);if(n.type===`tag`){let u=m[parseInt(n.name,10)];!u&&t&&(u=t[n.name]),o.length===1&&!u&&(u=o[0][n.name]),u||={};let x={...n.attrs};s&&Object.keys(x).forEach(e=>{let t=x[e];a(t)&&(x[e]=c(t))});let w=Object.keys(x).length===0?u:E({props:x},u),O=(0,p.isValidElement)(w),k=O&&S(n,!0)&&!n.voidElement,A=f&&d(w)&&w.dummy&&!O,j=d(t)&&Object.hasOwnProperty.call(t,n.name);if(a(w)){let t=r.services.interpolator.interpolate(w,v,r.language);e.push(t)}else if(S(w)||k){let t=y(w,n,o);b(w,t,e,h)}else if(A){let t=D(m,n.children,o);b(w,t,e,h)}else if(Number.isNaN(parseFloat(n.name)))if(j){let t=y(w,n,o);b(w,t,e,h,n.voidElement)}else if(i.transSupportBasicHtmlNodes&&l.indexOf(n.name)>-1)if(n.voidElement)e.push((0,p.createElement)(n.name,{key:`${n.name}-${h}`}));else{let t=g[n.name]||0;g[n.name]=t+1;let r,i=0;for(let e=0;e<m.length;e+=1){let a=m[e];if((0,p.isValidElement)(a)&&a.type===n.name){if(i===t){r=a;break}i+=1}}let a=r?T(C(r)):m,s=D(a,n.children,o);e.push((0,p.createElement)(n.name,{key:`${n.name}-${h}`},s))}else if(n.voidElement)e.push(`<${n.name} />`);else{let t=D(m,n.children,o);e.push(`<${n.name}>${t}</${n.name}>`)}else if(d(w)&&!O){let t=n.children[0]?_:null;t&&e.push(t)}else b(w,_,e,h,n.children.length!==1||!_)}else if(n.type===`text`){let t=i.transWrapTextNodes,a=typeof i.unescape==`function`?i.unescape:u().unescape,o=s?a(r.services.interpolator.interpolate(n.content,v,r.language)):r.services.interpolator.interpolate(n.content,v,r.language);t?e.push((0,p.createElement)(t,{key:`${n.name}-${h}`},o)):e.push(o)}return e},[])};return C(D([{dummy:!0,children:e||[]}],_,T(e||[]))[0])},j=(e,t,n)=>{let r=e.key||t,i=(0,p.cloneElement)(e,{key:r});if(!i.props||!i.props.children||n.indexOf(`${t}/>`)<0&&n.indexOf(`${t} />`)<0)return i;function a(){return(0,p.createElement)(p.Fragment,null,i)}return(0,p.createElement)(a,{key:r})},M=(e,t)=>e.map((e,n)=>j(e,n,t)),N=(e,t)=>{let n={};return Object.keys(e).forEach(r=>{Object.assign(n,{[r]:j(e[r],r,t)})}),n},P=(e,t,n,r)=>e?Array.isArray(e)?M(e,t):d(e)?N(e,t):(l(n,`TRANS_INVALID_COMPONENTS`,`<Trans /> "components" prop expects an object or array`,{i18nKey:r}),null):null,F=e=>!d(e)||Array.isArray(e)?!1:Object.keys(e).reduce((e,t)=>e&&Number.isNaN(Number.parseFloat(t)),!0);function I({children:e,count:t,parent:n,i18nKey:o,context:s,tOptions:c={},values:d,defaults:f,components:m,ns:h,i18n:g,t:_,shouldUnescape:v,...y}){let b=g||i();if(!b)return l(b,`NO_I18NEXT_INSTANCE`,`Trans: You need to pass in an i18next instance using i18nextReactModule`,{i18nKey:o}),e;let x=_||b.t.bind(b)||(e=>e),S={...u(),...b.options?.react},C=h||x.ns||b.options?.defaultNS;C=a(C)?[C]:C||[`translation`];let{transDefaultProps:w}=S,T=w?.tOptions?{...w.tOptions,...c}:c,E=v??w?.shouldUnescape,k=w?.values?{...w.values,...d}:d,j=w?.components?{...w.components,...m}:m,M=O(e,S,b,o),N=f||T?.defaultValue||M||S.transEmptyNodeValue||(typeof o==`function`?r(o):o),{hashTransKey:I}=S,L=o||(I?I(M||N):M||N);d=b.options?.interpolation?.defaultVariables?k&&Object.keys(k).length>0?{...k,...b.options.interpolation.defaultVariables}:{...b.options.interpolation.defaultVariables}:k;let R=D(e);R&&typeof R.count==`number`&&t===void 0&&(t=R.count);let z=d||t!==void 0&&!b.options?.interpolation?.alwaysFormat||!e?T.interpolation:{interpolation:{...T.interpolation,prefix:`#$?`,suffix:`?$#`}},B={...T,context:s||T.context,count:t,...d,...z,defaultValue:N,ns:C},V=L?x(L,B):N;V===L&&N&&(V=N);let H=P(j,V,b,o),U=H||e,W=null;F(H)&&(W=H,U=e);let G=A(U,W,V,b,S,B,E),K=n??S.defaultTransParent;return K?(0,p.createElement)(K,y,G):G}function L({children:e,count:t,parent:n,i18nKey:r,context:a,tOptions:o={},values:c,defaults:l,components:u,ns:d,i18n:f,t:m,shouldUnescape:h,...g}){let{i18n:_,defaultNS:v}=(0,p.useContext)(s)||{},y=f||_||i(),b=m||y?.t.bind(y);return I({children:e,count:t,parent:n,i18nKey:r,context:a,tOptions:o,values:c,defaults:l,components:u,ns:d||b?.ns||v||y?.options?.defaultNS,i18n:y,t:m,shouldUnescape:h,...g})}export{L as t};
1
+ import{a as e,t}from"./rolldown-runtime-CNC7AqOf.js";import{n}from"./jsx-runtime-zu2_FqZY.js";import{j as r}from"./useSharedWebSocket-BZMrX4jr.js";import{a as i,d as a,f as o,i as s,l as c,p as l,s as u,u as d}from"./createLucideIcon-Bjbbp_KS.js";var f=t(((e,t)=>{t.exports={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}})),p=e(n()),m=e(f()),h=/\s([^'"/\s><]+?)[\s/>]|([^\s=]+)=\s?(".*?"|'.*?')/g;function g(e){var t={type:`tag`,name:``,voidElement:!1,attrs:{},children:[]},n=e.match(/<\/?([^\s]+?)[/\s>]/);if(n&&(t.name=n[1],(m.default[n[1]]||e.charAt(e.length-2)===`/`)&&(t.voidElement=!0),t.name.startsWith(`!--`))){var r=e.indexOf(`-->`);return{type:`comment`,comment:r===-1?``:e.slice(4,r)}}for(var i=new RegExp(h),a=null;(a=i.exec(e))!==null;)if(a[0].trim())if(a[1]){var o=a[1].trim(),s=[o,``];o.indexOf(`=`)>-1&&(s=o.split(`=`)),t.attrs[s[0]]=s[1],i.lastIndex--}else a[2]&&(t.attrs[a[2]]=a[3].trim().substring(1,a[3].length-1));return t}var _=/<[a-zA-Z0-9\-\!\/](?:"[^"]*"|'[^']*'|[^'">])*>/g,v=/^\s*$/,y=Object.create(null);function b(e,t){switch(t.type){case`text`:return e+t.content;case`tag`:return e+=`<`+t.name+(t.attrs?function(e){var t=[];for(var n in e)t.push(n+`="`+e[n]+`"`);return t.length?` `+t.join(` `):``}(t.attrs):``)+(t.voidElement?`/>`:`>`),t.voidElement?e:e+t.children.reduce(b,``)+`</`+t.name+`>`;case`comment`:return e+`<!--`+t.comment+`-->`}}var x={parse:function(e,t){t||={},t.components||=y;var n,r=[],i=[],a=-1,o=!1;if(e.indexOf(`<`)!==0){var s=e.indexOf(`<`);r.push({type:`text`,content:s===-1?e:e.substring(0,s)})}return e.replace(_,function(s,c){if(o){if(s!==`</`+n.name+`>`)return;o=!1}var l,u=s.charAt(1)!==`/`,d=s.startsWith(`<!--`),f=c+s.length,p=e.charAt(f);if(d){var m=g(s);return a<0?(r.push(m),r):((l=i[a]).children.push(m),r)}if(u&&(a++,(n=g(s)).type===`tag`&&t.components[n.name]&&(n.type=`component`,o=!0),n.voidElement||o||!p||p===`<`||n.children.push({type:`text`,content:e.slice(f,e.indexOf(`<`,f))}),a===0&&r.push(n),(l=i[a-1])&&l.children.push(n),i[a]=n),(!u||n.voidElement)&&(a>-1&&(n.voidElement||n.name===s.slice(2,-1))&&(a--,n=a===-1?r:i[a]),!o&&p!==`<`&&p)){l=a===-1?r:i[a].children;var h=e.indexOf(`<`,f),_=e.slice(f,h===-1?void 0:h);v.test(_)&&(_=` `),(h>-1&&a+l.length>=0||_!==` `)&&l.push({type:`text`,content:_})}}),r},stringify:function(e){return e.reduce(function(e,t){return e+b(``,t)},``)}},S=(e,t)=>{if(!e)return!1;let n=e.props?.children??e.children;return t?n.length>0:!!n},C=e=>{if(!e)return[];let t=e.props?.children??e.children;return e.props?.i18nIsDynamicList?T(t):t},w=e=>Array.isArray(e)&&e.every(p.isValidElement),T=e=>Array.isArray(e)?e:[e],E=(e,t)=>{let n={...t};return n.props={...t.props,...e.props},n},D=e=>{let t={};if(!e)return t;let n=e=>{T(e).forEach(e=>{a(e)||(S(e)?n(C(e)):d(e)&&!(0,p.isValidElement)(e)&&Object.assign(t,e))})};return n(e),t},O=(e,t,n,r)=>{if(!e)return``;let i=``,s=T(e),c=t?.transSupportBasicHtmlNodes?t.transKeepBasicHtmlNodesFor??[]:[];return s.forEach((e,s)=>{if(a(e)){i+=`${e}`;return}if((0,p.isValidElement)(e)){let{props:o,type:l}=e,u=Object.keys(o).length,d=c.indexOf(l)>-1,f=o.children;if(!f&&d&&!u){i+=`<${l}/>`;return}if(!f&&(!d||u)||o.i18nIsDynamicList){i+=`<${s}></${s}>`;return}if(d&&u<=1){let e=a(f)?f:O(f,t,n,r);i+=`<${l}>${e}</${l}>`;return}let p=O(f,t,n,r);i+=`<${s}>${p}</${s}>`;return}if(e===null){o(n,`TRANS_NULL_VALUE`,`Passed in a null value as child`,{i18nKey:r});return}if(d(e)){let{format:t,...a}=e,s=Object.keys(a);if(s.length===1){let e=t?`${s[0]}, ${t}`:s[0];i+=`{{${e}}}`;return}o(n,`TRANS_INVALID_OBJ`,`Invalid child - Object should only have keys {{ value, format }} (format is optional).`,{i18nKey:r,child:e});return}o(n,`TRANS_INVALID_VAR`,`Passed in a variable like {number} - pass variables for interpolation as full objects like {{number}}.`,{i18nKey:r,child:e})}),i},k=(e,t=[],n={})=>{if(!e)return e;let r=Object.keys(n),i=[...t,...r],a=``,o=0;for(;o<e.length;)if(e[o]===`<`){let t=!1,n=e.slice(o).match(/^<\/(\d+|[a-zA-Z][a-zA-Z0-9_-]*)>/);if(n){let e=n[1];(/^\d+$/.test(e)||i.includes(e))&&(t=!0,a+=n[0],o+=n[0].length)}if(!t){let n=e.slice(o).match(/^<(\d+|[a-zA-Z][a-zA-Z0-9_-]*)(\s+[\w-]+(?:=(?:"[^"]*"|'[^']*'|[^\s>]+))?)*\s*(\/)?>/);if(n){let e=n[1];(/^\d+$/.test(e)||i.includes(e))&&(t=!0,a+=n[0],o+=n[0].length)}}t||(a+=`&lt;`,o+=1)}else a+=e[o],o+=1;return a},A=(e,t,n,r,i,o,s)=>{if(n===``)return[];let l=i.transKeepBasicHtmlNodesFor||[],f=n&&new RegExp(l.map(e=>`<${e}`).join(`|`)).test(n);if(!e&&!t&&!f&&!s)return[n];let m=t??{},h=e=>{T(e).forEach(e=>{a(e)||(S(e)?h(C(e)):d(e)&&!(0,p.isValidElement)(e)&&Object.assign(m,e))})};h(e);let g=k(n,l,m),_=x.parse(`<0>${g}</0>`),v={...m,...o},y=(e,t,n)=>{let r=C(e),i=D(r,t.children,n);return w(r)&&i.length===0||e.props?.i18nIsDynamicList?r:i},b=(e,t,n,r,i)=>{e.dummy?(e.children=t,n.push((0,p.cloneElement)(e,{key:r},i?void 0:t))):n.push(...p.Children.map([e],e=>{if(e.type===p.Fragment||e.props?.i18nIsDynamicList!==void 0){let n={key:r};return e&&e.props&&Object.keys(e.props).forEach(t=>{t===`children`||t===`i18nIsDynamicList`||(n[t]=e.props[t])}),(0,p.createElement)(e.type,n,i?null:t)}let n={key:r};return e&&e.props&&Object.keys(e.props).forEach(t=>{t===`ref`||t===`children`||(n[t]=e.props[t])}),(0,p.cloneElement)(e,n,i?null:t)}))},D=(e,n,o)=>{let m=T(e),h=T(n),g={};return h.reduce((e,n,h)=>{let _=n.children?.[0]?.content&&r.services.interpolator.interpolate(n.children[0].content,v,r.language);if(n.type===`tag`){let u=m[parseInt(n.name,10)];!u&&t&&(u=t[n.name]),o.length===1&&!u&&(u=o[0][n.name]),u||={};let x={...n.attrs};s&&Object.keys(x).forEach(e=>{let t=x[e];a(t)&&(x[e]=c(t))});let w=Object.keys(x).length===0?u:E({props:x},u),O=(0,p.isValidElement)(w),k=O&&S(n,!0)&&!n.voidElement,A=f&&d(w)&&w.dummy&&!O,j=d(t)&&Object.hasOwnProperty.call(t,n.name);if(a(w)){let t=r.services.interpolator.interpolate(w,v,r.language);e.push(t)}else if(S(w)||k){let t=y(w,n,o);b(w,t,e,h)}else if(A){let t=D(m,n.children,o);b(w,t,e,h)}else if(Number.isNaN(parseFloat(n.name)))if(j){let t=y(w,n,o);b(w,t,e,h,n.voidElement)}else if(i.transSupportBasicHtmlNodes&&l.indexOf(n.name)>-1)if(n.voidElement)e.push((0,p.createElement)(n.name,{key:`${n.name}-${h}`}));else{let t=g[n.name]||0;g[n.name]=t+1;let r,i=0;for(let e=0;e<m.length;e+=1){let a=m[e];if((0,p.isValidElement)(a)&&a.type===n.name){if(i===t){r=a;break}i+=1}}let a=r?T(C(r)):m,s=D(a,n.children,o);e.push((0,p.createElement)(n.name,{key:`${n.name}-${h}`},s))}else if(n.voidElement)e.push(`<${n.name} />`);else{let t=D(m,n.children,o);e.push(`<${n.name}>${t}</${n.name}>`)}else if(d(w)&&!O){let t=n.children[0]?_:null;t&&e.push(t)}else b(w,_,e,h,n.children.length!==1||!_)}else if(n.type===`text`){let t=i.transWrapTextNodes,a=typeof i.unescape==`function`?i.unescape:u().unescape,o=s?a(r.services.interpolator.interpolate(n.content,v,r.language)):r.services.interpolator.interpolate(n.content,v,r.language);t?e.push((0,p.createElement)(t,{key:`${n.name}-${h}`},o)):e.push(o)}return e},[])};return C(D([{dummy:!0,children:e||[]}],_,T(e||[]))[0])},j=(e,t,n)=>{let r=e.key||t,i=(0,p.cloneElement)(e,{key:r});if(!i.props||!i.props.children||n.indexOf(`${t}/>`)<0&&n.indexOf(`${t} />`)<0)return i;function a(){return(0,p.createElement)(p.Fragment,null,i)}return(0,p.createElement)(a,{key:r})},M=(e,t)=>e.map((e,n)=>j(e,n,t)),N=(e,t)=>{let n={};return Object.keys(e).forEach(r=>{Object.assign(n,{[r]:j(e[r],r,t)})}),n},P=(e,t,n,r)=>e?Array.isArray(e)?M(e,t):d(e)?N(e,t):(l(n,`TRANS_INVALID_COMPONENTS`,`<Trans /> "components" prop expects an object or array`,{i18nKey:r}),null):null,F=e=>!d(e)||Array.isArray(e)?!1:Object.keys(e).reduce((e,t)=>e&&Number.isNaN(Number.parseFloat(t)),!0);function I({children:e,count:t,parent:n,i18nKey:o,context:s,tOptions:c={},values:d,defaults:f,components:m,ns:h,i18n:g,t:_,shouldUnescape:v,...y}){let b=g||i();if(!b)return l(b,`NO_I18NEXT_INSTANCE`,`Trans: You need to pass in an i18next instance using i18nextReactModule`,{i18nKey:o}),e;let x=_||b.t.bind(b)||(e=>e),S={...u(),...b.options?.react},C=h||x.ns||b.options?.defaultNS;C=a(C)?[C]:C||[`translation`];let{transDefaultProps:w}=S,T=w?.tOptions?{...w.tOptions,...c}:c,E=v??w?.shouldUnescape,k=w?.values?{...w.values,...d}:d,j=w?.components?{...w.components,...m}:m,M=O(e,S,b,o),N=f||T?.defaultValue||M||S.transEmptyNodeValue||(typeof o==`function`?r(o):o),{hashTransKey:I}=S,L=o||(I?I(M||N):M||N);d=b.options?.interpolation?.defaultVariables?k&&Object.keys(k).length>0?{...k,...b.options.interpolation.defaultVariables}:{...b.options.interpolation.defaultVariables}:k;let R=D(e);R&&typeof R.count==`number`&&t===void 0&&(t=R.count);let z=d||t!==void 0&&!b.options?.interpolation?.alwaysFormat||!e?T.interpolation:{interpolation:{...T.interpolation,prefix:`#$?`,suffix:`?$#`}},B={...T,context:s||T.context,count:t,...d,...z,defaultValue:N,ns:C},V=L?x(L,B):N;V===L&&N&&(V=N);let H=P(j,V,b,o),U=H||e,W=null;F(H)&&(W=H,U=e);let G=A(U,W,V,b,S,B,E),K=n??S.defaultTransParent;return K?(0,p.createElement)(K,y,G):G}function L({children:e,count:t,parent:n,i18nKey:r,context:a,tOptions:o={},values:c,defaults:l,components:u,ns:d,i18n:f,t:m,shouldUnescape:h,...g}){let{i18n:_,defaultNS:v}=(0,p.useContext)(s)||{},y=f||_||i(),b=m||y?.t.bind(y);return I({children:e,count:t,parent:n,i18nKey:r,context:a,tOptions:o,values:c,defaults:l,components:u,ns:d||b?.ns||v||y?.options?.defaultNS,i18n:y,t:m,shouldUnescape:h,...g})}export{L as t};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-CNC7AqOf.js";var t=e({agents:()=>g,approvalBeforeArchive:()=>f,architect:()=>S,cliNames:()=>m,customRoles:()=>M,default:()=>I,description:()=>r,efficiency:()=>T,evidence:()=>E,fixer:()=>k,guardrails:()=>A,limits:()=>_,loadFailed:()=>a,loading:()=>i,loopRoles:()=>D,metrics:()=>C,pipeline:()=>O,prompts:()=>w,providers:()=>p,retention:()=>F,retry:()=>o,review:()=>x,roleHints:()=>b,roles:()=>h,runs:()=>y,save:()=>c,saveFailed:()=>d,saved:()=>u,saving:()=>l,steering:()=>N,studioRole:()=>P,title:()=>n,unavailable:()=>s,unsavedChanges:()=>j,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 executions.`,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 caps are optional; USD caps 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:`Saved executions`,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 executions are stopped from their job controls.`,empty:`No saved runtime executions.`,loadFailed:`Could not load saved executions.`,actionFailed:`Could not update this execution.`,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`},b={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.`},x={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}})`}},S={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`},C={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:`Execution 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`},w={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).`},T={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.`},E={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 execution. 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`},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 execution`,requested:`Requested`,reported:`Reported`},D={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.`},O={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.`}}},k={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.`},A={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.`}}},j=`Unsaved changes`,M={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.`},N={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.`},P={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`},F={title:`History retention`,description:`Delete expired execution 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 executions.`,failed:`Could not inspect or update retention.`,expired:`This execution 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 execution`,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`}},I={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,runs:y,roleHints:b,review:x,architect:S,metrics:C,prompts:w,efficiency:T,evidence:E,loopRoles:D,pipeline:O,fixer:k,guardrails:A,unsavedChanges:j,customRoles:M,steering:N,studioRole:P,retention:F};export{t};
@@ -0,0 +1 @@
1
+ var e=`Agenten-Laufzeit`,t=`Architekt, Entwickler und Reviewer laufen als getrennte Phasen mit deterministischer Verifikation dazwischen. Wähle pro Rolle einen Anbieter; alles andere hat funktionierende Standardwerte.`,n=`Einstellungen werden geladen…`,r=`Einstellungen konnten nicht geladen werden. Vor Änderungen erneut versuchen.`,i=`Erneut versuchen`,a=`Diese Core-Installation enthält die Agenten-Laufzeit nicht. Aktualisieren Sie Core vor der Aktivierung. Die Einstellungen können Sie bereits vorbereiten.`,o=`Laufzeit-Einstellungen speichern`,s=`Wird gespeichert…`,c=`Einstellungen gespeichert`,l=`Einstellungen konnten nicht gespeichert werden.`,u=`Vor Abschluss des Workflows auf Freigabe warten`,d={title:`Anbieter`,hint:`CLI-Anbieter nutzen die bestehende Anmeldung. APIs akzeptieren nur den Namen einer Umgebungsvariablen, niemals den Schlüssel selbst. Lokal kann er leer bleiben. Rollen vor dem Entfernen ihres Anbieters neu zuweisen.`,entry:`Anbieter {{index}}`,id:`Anbieter-ID`,kind:`Verbindungstyp`,cli:`Installierte Programmier-CLI`,compatible:`OpenAI-kompatibler Endpunkt`,command:`Programmier-CLI`,baseUrl:`API-Basis-URL`,apiKeyEnv:`Umgebungsvariable für API-Schlüssel (optional)`,remove:`Anbieter entfernen`,addCli:`CLI-Anbieter hinzufügen`,addLocal:`Lokalen / API-Anbieter hinzufügen`,show:`Anbieterverbindungen anzeigen`,hide:`Anbieterverbindungen ausblenden`,globalTitle:`KI-Anbieter`,globalHint:`Zwei Arten von Anbietern treiben jedes Projekt an: auf diesem Rechner erkannte Coding-CLIs und lokale OpenAI-kompatible Engines, die du hier registrierst. Weise sie den Pipeline-Phasen in Projekteinstellungen ▸ Agenten-Engine zu. Änderungen gelten für neue Ausführungen.`,label:`Anzeigename (optional)`,labelPlaceholder:`z. B. LAN-Rechner`,defaultModel:`Standardmodell`,defaultModelNone:`Kein Standard (erstes gefundenes)`,defaultModelPlaceholder:`Modell-ID oder eigener Alias`,customModel:`Eigener Alias…`,discoveredModels:`Gefundene Modelle`,noModels:`Noch keine Modelle gefunden – Verbindung testen.`,rates:`Tarife (USD pro 1M Tokens, optional)`,ratesHint:`Kosten werden als Schätzung angezeigt; beide leer lassen und die Kosten bleiben unbekannt.`,inputRate:`Eingabe pro 1M`,outputRate:`Ausgabe pro 1M`,ratesInvalid:`Beide Tarife als nicht negative Zahlen eingeben oder beide leer lassen.`,reasoningEffort:`Endpunkt akzeptiert Reasoning-Aufwand`,reasoningEffortHint:`Sendet das OpenAI-Feld reasoning_effort: bei jedem Aufruf den konfigurierten Aufwand der Rolle, auf hoch angehoben, während der kompakte Architekt den Plan schreibt. Nur aktivieren, wenn der Server es berücksichtigt.`,apiKeyEnvMissing:`{{name}} ist im App-Prozess nicht gesetzt. Setze sie in der Umgebung, aus der die App gestartet wird.`,test:`Verbindung testen`,testing:`Wird getestet…`,testFailed:`Verbindung konnte nicht getestet werden.`,rename:`Umbenennen`,renameHint:`Beim Umbenennen zeigen Rollenzuweisungen weiterhin auf diese Verbindung.`,idLocked:`Die ID ist nach dem Speichern gesperrt. Zum Ändern Umbenennen verwenden.`,localBadge:`Lokale Engine`,cliBadge:`CLI`,notDetected:`Auf diesem Rechner nicht erkannt`,unsaved:`Ungespeicherte Änderungen`,empty:`Noch keine Verbindungen. Füge einen lokalen / API-Anbieter hinzu.`,fixBeforeSave:`Korrigiere die markierten Felder vor dem Speichern.`,status:{probing:`Wird geprüft…`,reachable:`Erreichbar`,unauthorized:`Nicht autorisiert`,unreachable:`Nicht erreichbar`,untested:`Nie getestet`},auth:{authenticated:`Angemeldet`,unauthenticated:`Nicht angemeldet`,unknown:`Anmeldung unbekannt`},agentLoop:`Agenten-Schleife`,agentLoopHint:`wie die Implement-Pipeline dieses Modell steuert`,agentLoop_compact:`Kompakt`,agentLoop_compactHint:`App-gesteuerte Mikroschritte mit strukturierter Ausgabe. Empfohlen für Modelle unter ~30B.`,agentLoop_free:`Frei`,agentLoop_freeHint:`Eine agentische Schleife pro Rolle, wie bei einem CLI-Provider. Braucht ein starkes Modell.`,contextWindow:`Kontextfenster (Tokens)`,contextWindowHint:`An die Kontextgröße des Servers anpassen (n_ctx / num_ctx). Dient zum Komprimieren alter Tool-Ergebnisse, bevor das Fenster voll ist. Standard 32768.`,maxOutput:`Ausgabebudget pro Zug (Tokens)`,maxOutputHint:`max_tokens eines Werkzeugzugs; ein abgeschnittener Zug wird einmal mit dem Doppelten wiederholt. Zählt innerhalb des Kontextfensters und wird daher stets auf den verbleibenden Platz begrenzt – erhöhen, wenn das Modell privat nachdenkt (Thinking verbraucht es). Standard 8192.`,reasoningEffortRailHint:`Aus: der Reasoning-Aufwand-Selektor erscheint für diese Engine nicht in der Rail-Kopfzeile.`,presetTitle:`Schnelleinrichtung`,presetSmallModel:`Empfohlen für kleine Modelle`,presetSmallModelApplied:`Voreinstellung für kleine Modelle angewendet`,presetSmallModelHint:`Setzt die kompakte Schleife, leitet den Reasoning-Aufwand weiter und ein 32k-Kontextfenster – die mit 7–14B-Modellen validierte Kombination. Jedes Feld bleibt änderbar.`,cliGroup:`CLI-Werkzeuge`,cliGroupHint:`Auf diesem Rechner erkannt – sie nutzen ihre eigene Anmeldung, nichts zu konfigurieren.`,localGroup:`Lokale Engines`,localGroupHint:`OpenAI-kompatible Endpunkte (llama.cpp, Ollama, vLLM, LM Studio …), die von dieser App aus erreichbar sind.`,models_one:`{{count}} Modell`,models_other:`{{count}} Modelle`,expand:`Einstellungen anzeigen`,collapse:`Einstellungen ausblenden`,overflow:`Weitere Aktionen`,addLocalHero:`Lokale Engine hinzufügen`,emptyLocalPitch:`Noch keine lokale Engine. Richte die App auf einen OpenAI-kompatiblen Endpunkt, um die Pipeline auf eigener Hardware auszuführen – die Kosten bleiben unter deiner Kontrolle und nichts verlässt dein Netzwerk.`,defaultsGroup:`Anbieter-Standardwerte`},f={claude:`Claude`,codex:`Codex`,gemini:`Gemini`,kimi:`Kimi`},p={architect:`Architekt`,developer:`Entwickler`,reviewer:`Prüfer`,fixer:`Korrektor`,verify:`Prüfung`,archive:`Abschluss`},m={title:`Rollenzuweisungen`,hint:`Jede Rolle kann einen anderen Anbieter und ein anderes Modell verwenden. Verbindungen: Allgemeine Einstellungen → KI-Anbieter. Standard: {{turns}} Runden pro Agent.`,provider:`Anbieter`,model:`Modell`,modelPlaceholder:`Modell-ID oder CLI-Standard`,maxTurns:`Maximale Runden (Standard {{turns}})`,defaultModel:`Standard ({{model}})`,thinking:`Verdecktes Nachdenken`,thinking_off:`Aus`,thinking_on:`An`,thinkingHint:`Standardmäßig aus: verdecktes Nachdenken verbraucht das Ausgabebudget und Minuten pro Zug in einer host-gesteuerten Schleife. Für eine Rolle einschalten, die von Abwägen profitiert (gesendet als chat_template_kwargs.enable_thinking; Endpunkte, die es nicht kennen, ignorieren es).`},h={title:`Workflow-Limits`,hint:`Leere Felder nutzen die Core-Standards: {{attempts}} Korrekturversuche und {{minutes}} Minuten pro Rollenschritt. Bei lokalen Engines gilt das Zeitlimit je Arbeitseinheit (eine Aufgabengruppe, ein Artefakt, ein Review) – standardmäßig 45 Minuten – plus ein 20-minütiger Leerlauf-Wächter; ein Schritt, dem die Zeit ausgeht, blockiert den Lauf und kann ab der nächsten offenen Aufgabengruppe fortgesetzt werden. Token- und USD-Limits sind optional; USD-Limits erfordern Claude für jede KI-Rolle.`,maxAttempts:`Maximale Entwicklerversuche (Standard {{attempts}})`,timeoutMinutes:`Zeitlimit in Minuten (Standard {{minutes}}; lokale Engines 45 je Aufgabengruppe)`,maxTokens:`Maximale Tokens`,maxCostUsd:`Maximale Kosten (USD)`,unlimited:`Kein Limit`},g={title:`Verifikationsbefehle`,hint:`Optional. Sie laufen, nachdem der Entwickler fertig ist; Fehler gehen an den Entwickler zurück. Bleibt die Liste leer, schlägt der Architekt bei jedem Lauf die projekteigenen Prüfungen vor; Repositories ohne automatische Prüfung werden trotzdem reviewt.`,detect:`Projektprüfungen erkennen`,detecting:`Erkenne…`,detected:`Ausgefüllt mit den Prüfungen, die dieses Projekt bereits definiert.`,nothingDetected:`Kein Test-, Typprüfungs- oder Build-Befehl gefunden. Kein Problem: der Architekt schlägt bei jedem Lauf Prüfungen vor, wenn möglich.`,detectFailed:`Die Projekt-Repositories konnten nicht untersucht werden.`,repository:`Repository`,command:`Befehl`,reason:`Erkannt aus {{reason}}`,remove:`Entfernen`,add:`Befehl hinzufügen`,invalidLine:`Verifikationsbefehl ist leer oder hat ein nicht geschlossenes Anführungszeichen: {{line}}`,label:`Prüfbezeichnung (optional)`,moveUp:`Nach oben`,moveDown:`Nach unten`},_={title:`Gespeicherte Ausführungen`,refresh:`Aktualisieren`,hint:`Setzt im ursprünglichen Worktree mit gespeichertem Umfang und Einstellungen fort; der Fortschritt erscheint im Protokoll dieses Jobs. Es wird nichts veröffentlicht und keine Desktop-Auslieferung neu gestartet. Aktive Rail-Ausführungen werden über ihre Job-Steuerung gestoppt.`,empty:`Keine gespeicherten Ausführungen.`,loadFailed:`Ausführungen konnten nicht geladen werden.`,actionFailed:`Ausführung konnte nicht aktualisiert werden.`,phase:`Nächste Phase: {{phase}}`,approve:`Abschluss freigeben`,recover:`Unterbrochene Phase wiederherstellen`,resume:`Fortsetzen`,cancel:`Fortsetzung abbrechen`,status:{running:`Wird fortgesetzt…`,succeeded:`Erfolgreich`,failed:`Fehlgeschlagen`,blocked:`Blockiert`,paused:`Pausiert`,cancelled:`Abgebrochen`,interrupted:`Unterbrochen`,unavailable:`Nicht verfügbar`,expired:`Abgelaufen`},question:`Der Architekt fragt:`,answerLabel:`Ihre Antwort`,answerPlaceholder:`Beantworten Sie die Frage; der Architekt macht damit weiter.`,answer:`Antworten und fortsetzen`,viewLog:`Job-Protokoll anzeigen`,implementation:`Implementierung`,preserveProgress:`Ab der angezeigten Phase fortsetzen; bisherige Arbeit und gespeicherte Einstellungen bleiben erhalten.`,reviewDelivery:`Implementierung abgeschlossen. Prüfe das Ergebnis im Job-Protokoll vor der Auslieferung; diese Fortsetzung hat es nicht veröffentlicht.`,prepareDelivery:`Auslieferung vorbereiten`,dismiss:`Verwerfen`,selectRecovery:`Unterbrochene Versuche zur Wiederaufnahme auswählen`},v={architect:`Liest den Code und schreibt Vorschlag, Design, Aufgaben und Spezifikation. Nur lesend.`,developer:`Setzt die Aufgaben mit Tests um. Darf Dateien bearbeiten und Befehle in der CLI-Sandbox ausführen.`,reviewer:`Prüft das Ergebnis gegen Spezifikation und Verifikationsnachweise. Nur lesend.`},y={title:`Review-Schwelle`,hint:`Leere Felder verwenden Cores Schwelle. Werte können sie nur anheben: Gesamtwert mindestens {{score}}, Sicherheit mindestens {{security}}, andere Aspekte mindestens {{aspect}}.`,minScore:`Mindestgesamtwert (Standard {{score}})`,aspects:{type_correctness:`Typkorrektheit (Standard {{score}})`,pattern_adherence:`Mustertreue (Standard {{score}})`,test_coverage:`Testabdeckung (Standard {{score}})`,security:`Sicherheit (Standard {{score}})`,architectural_alignment:`Architekturkonformität (Standard {{score}})`}},b={title:`Zuversicht des Architekten`,hint:`Nach einem autonomen Untersuchungsdurchlauf pausiert ein weiterhin unsicherer Entwurf mit der Frage des Architekten oder fährt mit benannten Annahmen fort.`,onLowConfidence:`Bei geringer Zuversicht`,ask:`Fragen (mit der Frage pausieren)`,proceed:`Mit benannten Annahmen fortfahren`},x={title:`Verbrauch und Zeit`,hint:`Enthält Korrekturen und fehlgeschlagene Aufrufe. Die Agentenzeit umfasst Werkzeuge. Cache-Tokens sind Teil der Eingabe-Tokens.`,unknown:`Nicht verfügbar`,duration:`Ausführungszeit`,agentTime:`Agentenzeit`,cost:`Gemeldete Kosten`,providerCalls:`Agentenaufrufe`,toolCalls:`Werkzeugaufrufe`,input:`Eingabe-Tokens`,output:`Ausgabe-Tokens`,uncached:`Eingabe ohne Cache`,cacheRead:`Cache-Lesezugriffe`,cacheWrite:`Cache-Schreibzugriffe`,partial:`Für einige Versuche fehlen detaillierte Messungen.`,phases:`Verbrauch nach Phase`,phase:`Phase`,attempts:`Versuche`},S={title:`Prompts der Agentenrollen`,description:`Anweisungen für jede Rolle anzeigen und bearbeiten. Sie gelten für alle Projekte und Anbieter; Änderungen gelten für neue Jobs. Fortgesetzte Jobs behalten ihre ursprünglichen Prompts.`,definition:`Definition für {{role}}`,default:`Werkseinstellung`,custom:`Angepasst`,restore:`Standard wiederherstellen`,contracts:`Spec-Kontext, OpenSpec-Workflow und erforderliches Antwortformat werden automatisch ergänzt und hier nicht bearbeitet.`,invalid:`Jede Definition muss 1–20.000 Zeichen mit nicht leerem Text und ohne Nullbytes enthalten.`,saved:`Rollen-Prompts gespeichert`,unsaved:`Ungespeicherte Änderungen`,discard:`Änderungen verwerfen`,save:`Prompts speichern`,fixerHint:`Nur in Korrekturrunden – nach einer fehlgeschlagenen Prüfung oder einem abgelehnten Review. Läuft auf der Engine des Entwicklers, sofern Einstellungen ▸ Agent-Engine ▸ Korrektor keine eigene nennt. Ein CLI-Anbieter, der die Entwickler-Sitzung fortsetzt, erhält stattdessen den kurzen Korrekturhinweis; die Definition gilt, sobald eine neue Sitzung startet (lokale Engines, Korrektor-Engine, verlorene Sitzung).`},C={title:`Effizienz der Implementierung`,scope:`Gilt für neue Ausführungen. Gespeicherte Ausführungen behalten ihre Konfiguration und Laufzeit.`,effort:`Denkaufwand`,providerDefault:`Anbietervorgabe`,unconfirmed:`Unbestätigt`,unknownSupport:`Unterstützung für dieses Modell und diesen Transport ist nicht bestätigt.`,escalation:`Eine höhere Stufe beim gleichen Anbieter erlauben`,baseRequired:`Zuerst ein konkretes Basismodell auswählen.`,escalationModel:`Modell der höheren Stufe`,triggers:{architect:`Nur die bestehende vertiefte Untersuchung kann diese Stufe wählen.`,developer:`Nach zwei fehlgeschlagenen Kandidaten kann der nächste erlaubte Versuch diese Stufe wählen.`,reviewer:`Nur zur Reparatur ungültiger Antworten, nicht bei Ablehnung des Codes.`,fixer:`Nur eine Korrekturrunde kann diese Stufe erreichen; erste Durchläufe führen den Korrektor nie aus.`},contextMode:`Repository-Kontext`,reviewMode:`Korrekturprüfung`,planning:`Planungstiefe`,adaptive:`Adaptiv`,full:`Vollständig`,developerChecks:`Zusätzliche Prüfungen des Entwicklers akzeptieren`,concurrency:`Maximale gleichzeitige Prüfungen`,concurrencyHint:`Standard: 1. Nur vom Host als unabhängig deklarierte Prüfungen verschiedener Repositories laufen gleichzeitig. Standardmäßig keine Wiederverwendung.`,checkCapabilities:`Modellkompatibilität prüfen`,capabilitiesFailed:`Kompatibilität nicht bestätigt. Core aktualisieren oder Anbietervorgaben beibehalten.`},w={title:`Prüfnachweise`,acceptance:`Technische Abnahme`,acceptanceStatus:{pending:`Ausstehend`,validated:`Validiert`,"with-exceptions":`Mit Ausnahmen`,blocked:`Blockiert`},calls:`Agentenaufrufe`,executed:`Ausgeführte Prüfungen`,reused:`Wiederverwendete Prüfungen`,unknown:`Nicht verfügbar`,unavailable:`Nachweise nicht verfügbar. Das gespeicherte Ergebnis beweist keine aktuelle Gültigkeit.`,current:`Aktueller Kandidat und Plan`,historical:`Historisches Ergebnis`,moreChecks:`Weitere Prüfungen`,output:`Prüfausgabe`,empty:`Keine Ausgabe`,truncated:`Begrenzte Seite oder gekürzte Erfassung.`,nextPage:`Nächste Ausgabeseite`,status:{passed:`Bestanden`,failed:`Fehlgeschlagen`,cancelled:`Abgebrochen`,interrupted:`Unterbrochen`},disposition:{executed:`Ausgeführt`,reused:`Wiederverwendet`,"not-run":`Nicht ausgeführt`},origin:`Herkunft`,origins:{host:`Host`,architect:`Architekt`,developer:`Entwickler`,"frozen-runtime-config":`Gespeicherte Konfiguration`,"project-role":`Projektrolle`,default:`Standard`,"explicit-launch-override":`Für diesen Start gewählter Anbieter`},reuseDisabled:`Wiederverwendung für diese Prüfung deaktiviert.`,reuseConfirmed:`Nach Prüfung identischer Eingaben und Werkzeuge wiederverwendet.`,inputsChanged:`Eingaben während der Prüfung geändert; Ergebnis ungültig.`,reuseUnproven:`Kein aktuelles Ergebnis mit nachweislich identischen Eingaben; erneut ausgeführt.`,original:`Ursprüngliche Ausführung`,requested:`Angefordert`,reported:`Gemeldet`},T={title:`Loop-Rollen`,hint:`Engines für die Loop-Rollen, wenn ein Rail mit der Engine „Rollen“ gestartet wird. Die Pipeline-Rollen oben (Architect, Developer, Reviewer) stammen bereits aus dieser Runtime-Konfiguration.`,verifier:`Verifier`,verifierHint:`Jeder KI-Schritt des Loops außerhalb des Cores: verify, fix und eigene KI-Schritte.`,decider:`Decider`,deciderHint:`Der Loop Decider, der das Urteil liest und den nächsten Schritt bestimmt – ein günstiges, schnelles Modell ist die natürliche Wahl.`,inherit:`Primären übernehmen`,model:`Modell`,effort:`Denkaufwand`,disabled:`Die Agenten-Runtime ist deaktiviert – Rails mit der Engine „Rollen“ werden abgelehnt, bis sie aktiviert ist.`,saveFailed:`Die Loop-Rollen konnten nicht gespeichert werden.`},E={title:`Implementierungs-Pipeline`,explainer:`Diese Phasen laufen bei jeder Implementierung in dieser Reihenfolge. Ist die Engine des Rails „{{roles}}“, nutzt jede Phase die unten konfigurierte Engine – Anbieter, Modell und Aufwand je Phase. Wählst du im Rail eine konkrete Engine, laufen alle Phasen mit dieser Engine.`,host:`Host`,noCommand:`kein Befehl`,inherits:`Erbt die primäre`,inheritsDeveloper:`Erbt vom Entwickler`,open:`Öffnen`,collapse:`Einklappen`,groups:{core:{title:`Kern-Pipeline`,hint:`Läuft in jeder Implementierung: planen, bauen, prüfen, korrigieren, reviewen.`},loop:{title:`Loop-Schritte`,hint:`KI-Schritte des Rail-Loops um den Lauf (prüfen → entscheiden → korrigieren) und eigener Loops; sie erben die primäre Engine, sofern nicht gesetzt.`,chip:`Rail-Loop`}},phases:{architect:{name:`Architekt`,purpose:`Liest den Code und schreibt Vorschlag, Design und Aufgaben.`},developer:{name:`Entwickler`,purpose:`Setzt die Aufgaben mit Tests um.`},verification:{name:`Verifikation`,purpose:`Der Host führt deine Prüfungen aus; Fehler gehen zurück an den Entwickler.`},fixer:{name:`Korrektor`,purpose:`Behebt, was Verifizierung oder Review ablehnen; erbt vom Entwickler, wenn nicht konfiguriert.`},reviewer:{name:`Reviewer`,purpose:`Prüft das Ergebnis gegen Spec und Nachweise.`},verifier:{name:`Prüfer`,purpose:`Verify-, Fix- und eigene KI-Schritte des Loops.`},decider:{name:`Entscheider`,purpose:`Liest das Urteil und wählt den nächsten Loop-Schritt.`}}},D={title:`Korrektor-Engine`,inherit:`Vom Entwickler erben`,own:`Eigene Engine`,hint:`Läuft nur in Korrekturrunden – nach einer fehlgeschlagenen Verifizierung oder einem abgelehnten Review; erste Durchläufe bleiben beim Entwickler. Ein stärkeres oder Cloud-Modell lohnt sich hier, wenn der Entwickler ein günstiges lokales Modell ist.`},O={title:`Leitplanken`,intro:`Prozessregeln, die der Host um lokale Modelle herum anwendet, damit ein kleines Modell nicht entgleist. Standardmäßig alle aktiv; schalte eine nur ab, um den Prozess zu justieren. CLI-Anbieter sind nie betroffen.`,unsupported:`Diese Core-Installation stellt keine konfigurierbaren Leitplanken bereit. Aktualisiere Core, um sie zu justieren; die eingebauten Regeln gelten weiterhin.`,active:`{{on}} von {{total}} aktiv`,reset:`Auf Standard zurücksetzen`,phases:{architect:`Architekt`,developer:`Entwickler`,host:`Host`},unknown:`Eine Leitplanke aus einem neueren Core; diese App hat noch keine Beschreibung dafür.`,items:{"plan-validation":{title:`Validierter Aufgabenplan`,description:`Lehnt Pläne ab, die auf openspec/ zielen, bloße Dateinamen als Aufgaben listen, zu wenige Aufgaben/Gruppen für die Spec haben oder Akzeptanzkriterien unabgedeckt lassen; der Architekt versucht es erneut.`,why:`Ein vager oder unvollständiger Plan ist Grund Nr. 1, warum ein kleines Entwicklermodell Stubs schreibt.`},"genuine-blocking-question":{title:`Nur echte blockierende Fragen`,description:`Der Architekt kann den Lauf nur mit einer echten Frage anhalten, die auf „?“ endet, nie mit kopiertem Beispieltext.`,why:`Kleine Modelle wiederholen Prompt-Platzhalter und würden jeden Lauf blockieren.`},"plan-language-hint":{title:`In der Sprache des Repositorys planen`,description:`Nennt dem Architekten die Hauptsprache, damit Aufgaben-Dateinamen die richtige Endung tragen.`,why:`Ein JS-Plan auf einem TypeScript-Repo macht Aufgaben unabhakbar.`},"frozen-plan-writes":{title:`Planungsartefakte sind eingefroren`,description:`Der Entwickler darf nicht unter openspec/ schreiben; der Plan gehört dem Host.`,why:`Modelle „implementieren“, indem sie den Plan statt den Code bearbeiten.`},"primary-language":{title:`Erinnerung an die Hauptsprache`,description:`Jeder Aufgabengruppe wird die Hauptsprache des Repositorys mitgeteilt; neue Dateien sollen sie verwenden.`,why:`Verhindert eine zweite Implementierung in einer anderen Sprache.`},"duplicate-sibling":{title:`Keine Zwillingsmodule über Sprachen hinweg`,description:`Lehnt board.js ab, wenn board.ts bereits existiert; erweitere stattdessen das vorhandene Modul.`,why:`Zwillinge kompilieren beide und die Tests importieren den falschen.`},"one-test-per-module":{title:`Eine Testdatei pro Modul`,description:`Lehnt board.tick.test.ts ab, wenn board.test.ts existiert; erweitere diese stattdessen.`,why:`Sonst fügt jeder Korrekturdurchlauf eine neue Suite hinzu.`},"empty-write":{title:`Keine leeren Überschreibungen`,description:`Ein leerer Schreibvorgang über eine gefüllte Datei wird abgelehnt; schreibe den vollständigen Inhalt oder patche sie.`,why:`Ein „Aufräum“-Durchlauf ließ index.ts einmal mit 0 Zeilen zurück.`},"evidence-gated-ticking":{title:`Belege vor dem Abhaken einer Aufgabe`,description:`Eine Aufgabe, die Dateien nennt, ist nur erledigt, wenn diese existieren und keine Stubs sind (Geschwister-Endungen akzeptiert).`,why:`Ohne das ist „erledigt“ nur eine Behauptung und die Verifikation läuft gegen nichts.`},"inventory-retry":{title:`Mit dem echten Inventar erneut versuchen`,description:`Wenn das Modell aufgibt und behauptet, das Repo sei leer, obwohl es das nicht ist, wird einmal mit der Dateiliste erneut versucht.`,why:`Günstige zweite Chance statt eines fehlgeschlagenen Schritts.`},"synthetic-corrections":{title:`Feedback in Aufgaben verwandeln`,description:`Wenn alle Aufgaben abgehakt sind, aber Review/Verifikation fehlschlug, wird das Feedback zu konkreten Korrekturaufgaben.`,why:`Sonst meldet der Entwickler „schon erledigt“ und nichts ändert sich.`},"silent-group-closure":{title:`Stille Gruppen schließen, ihre Dateien behalten`,description:`Eine Gruppe, deren Modell nicht mehr antwortet, wird geschlossen; die geschriebenen Dateien werden gutgeschrieben und ihre Aufgaben bleiben offen, statt den Lauf scheitern zu lassen.`,why:`Ein 9B-Modell schrieb fünf Module, verstummte, und der ganze Lauf scheiterte.`},"environment-repair":{title:`Der Host repariert die Umgebung`,description:`Fehlende Abhängigkeiten oder Test-Tooling (npm install, ts-jest, @types/jest, Jest-Konfigurationsmodule) installiert der Host, dann läuft die Verifikation einmal erneut.`,why:`Das Modell kann die Umgebung nicht reparieren und verbrennt Korrekturen beim Versuch.`},"lockfile-repair":{title:`Handgeschriebene Lockfiles verwerfen`,description:`Eine vom Modell erfundene package-lock.json (EINTEGRITY/ETARGET) wird entfernt und die Installation einmal wiederholt.`,why:`Erfundene Hashes lassen sich nie installieren.`},"verify-idle-timeout":{title:`Hängende Tests stoppen`,description:`Ein Verifikationsbefehl ohne Ausgabe für 5 Minuten wird gestoppt und als wahrscheinlicher Hänger gemeldet (letzte Ausgabe inklusive).`,why:`Sonst hält eine while-Schleife in einem Test den Lauf bis zur 15-Minuten-Grenze.`},"verify-per-group":{title:`Nach jeder Gruppe prüfen`,description:`Führt den Testbefehl des Repositorys direkt nach jeder Aufgabengruppe aus; ein Fehler bekommt sofort eine Korrekturrunde, solange der Kontext der Gruppe frisch ist.`,why:`Fünf kaputte Suites am Ende sind viel schwerer zu beheben als eine nach der anderen.`},"test-reachability":{title:`Jeder neue Test muss wirklich laufen`,description:"Eine vom Developer geschriebene Testdatei, die der Testbefehl des Repositorys nie ausführt (ein aufzählendes `test`-Skript, das die neue Datei auslässt), lässt die Prüfung mit der genauen Datei fehlschlagen – zuerst auf Gruppenebene, dann erneut in der Host-Prüfung.",why:`Eine 622-zeilige Suite mit sechs fehlschlagenden Fällen wurde einmal grün ausgeliefert, weil sie nie lief.`},"exit-code-honesty":{title:`Grünem Exit-Code mit gemeldeten Fehlern misstrauen`,description:"Ein Prüfbefehl, der mit 0 endet, während seine Ausgabe Fehler meldet (`FAIL:`-Zeilen, „3 failed“, ein AssertionError), gilt als FEHLGESCHLAGEN und geht an den Korrektor, wobei der Test-Harness als Defekt benannt wird.",why:`Ein selbstgebauter Test-Runner ohne Nicht-Null-Exit-Code lieferte einmal drei rote Tests als grün aus.`}}},k=`Ungespeicherte Änderungen`,A={title:`Benutzerdefinierte Rollen`,hint:`Definieren Sie wiederverwendbare Anweisungen und ausdrückliche Berechtigungen für Workflow-Rollen.`,unsupported:`Aktualisieren Sie Core, um benutzerdefinierte Rollen zu bearbeiten.`,remove:`{{id}} entfernen`,access:`Quellcodezugriff`,read:`Nur lesen`,write:`Lesen und schreiben`,artifacts:`Zugriff auf OpenSpec-Artefakte`,none:`Keiner`,tasks:`Nur Aufgaben-Kontrollkästchen`,all:`Alle Änderungsartefakte`,skill:`OpenSpec-Skill`,noSkill:`Keine Skill-Zuordnung`,prompt:`Rollenanweisungen`,id:`Rollen-ID`,add:`Rolle hinzufügen`,invalidId:`Verwenden Sie eine eindeutige ID in Kleinbuchstaben, die mit einem Buchstaben beginnt und höchstens 64 Buchstaben, Ziffern oder Bindestriche enthält. Integrierte IDs sind reserviert.`,escalationHint:`Nur eine zulässige Protokollkorrektur darf das Eskalationsmodell verwenden. Es wird kein weiterer Versuch hinzugefügt.`},j={title:`Ausführungsanweisungen`,hint:`Core speichert diese Anweisungen für den nächsten geeigneten Agentendurchlauf. Das Senden beantwortet keine Fragen und erteilt keine Freigabe.`,label:`Zusätzliche Anweisungen`,send:`Anweisungen senden`,accepted:`Von Core angenommen; noch nicht übernommen.`,pending:`Warten auf einen Agentendurchlauf`,consumed:`Von einem Agenten übernommen`,counts:`Ausstehend: {{pending}} · Übernommen: {{consumed}}`,failed:`Anweisungen konnten nicht gesendet werden. Erneut versuchen, um dieselbe Nachricht zu bestätigen.`,unavailable:`Empfangsdetails sind nicht verfügbar.`,unreported:`Diese Core-Version meldet die Übernahme nicht.`,truncated:`Nur aktuelle Empfangsbestätigungen und ausstehende Nachrichten werden angezeigt.`},M={title:`Standardwerte der Core-Rolle`,hint:`Diese Dateivorgaben gelten für neue Workflows. Explizite Projekteinstellungen haben Vorrang; gespeicherte Ausführungen behalten ihre festgelegten Einstellungen.`,invalid:`Korrigieren Sie den YAML-Kopf im Editor, bevor Sie Rollenfelder ändern.`,escalationEffort:`Denkaufwand des höherwertigen Modells`},N={title:`Aufbewahrung des Verlaufs`,description:`Lösche abgelaufene Ausführungsverläufe und ungenutzte Core-Versionen. Gelöschte Verläufe können nicht fortgesetzt oder verzweigt werden. Aktive oder wiederherstellbare Ausführungen und offene Auslieferungen bleiben geschützt; Jobprotokolle und Kosten bleiben erhalten.`,forever:`Verlauf unbegrenzt aufbewahren`,days:`Aufbewahrungstage`,save:`Aufbewahrung speichern`,preview:`Bereinigung prüfen`,collect:`Abgelaufenen Verlauf löschen`,previewSummary:`Geeignet: {{runs}} Verläufe und {{packages}} ungenutzte Core-Versionen.`,collectedSummary:`Abgelaufen: {{runs}} Verläufe. Entfernt: {{packages}} ungenutzte Core-Versionen.`,more:`{{count}} weitere Ausführungen.`,failed:`Aufbewahrung konnte nicht geprüft oder aktualisiert werden.`,expired:`Dieser Verlauf ist gemäß der Projektrichtlinie abgelaufen. Jobprotokoll und Kosten bleiben verfügbar.`,loading:`Aufbewahrungsrichtlinie wird geladen…`,states:{protected:`Aufbewahrt`,eligible:`Geeignet`,expired:`Abgelaufen`,cleanup_pending:`Bereinigung ausstehend`,busy:`In Verwendung`,error:`Prüfung fehlgeschlagen`},reasons:{disabled:`Unbegrenzte Aufbewahrung`,recoverable:`Wiederherstellung noch möglich`,active:`Aktive Ausführung`,human_pending:`Wartet auf menschliche Antwort`,interrupted_writes:`Unterbrochene Schreibvorgänge prüfen`,delivery_pending:`Auslieferung ausstehend`,fork_pending:`Abhängige Verzweigung vorhanden`,unknown_terminal_time:`Abschlusszeit unbekannt`,within_retention:`Aufbewahrungsfrist noch nicht abgelaufen`}},P={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,runs:_,roleHints:v,review:y,architect:b,metrics:x,prompts:S,efficiency:C,evidence:w,loopRoles:T,pipeline:E,fixer:D,guardrails:O,unsavedChanges:k,customRoles:A,steering:j,studioRole:M,retention:N};export{m as agents,u as approvalBeforeArchive,b as architect,f as cliNames,A as customRoles,P as default,t as description,C as efficiency,w as evidence,D as fixer,O as guardrails,h as limits,r as loadFailed,n as loading,T as loopRoles,x as metrics,E as pipeline,S as prompts,d as providers,N as retention,i as retry,y as review,v as roleHints,p as roles,_ as runs,o as save,l as saveFailed,c as saved,s as saving,j as steering,M as studioRole,e as title,a as unavailable,k as unsavedChanges,g as verification};
@@ -0,0 +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:`各プロジェクトは 2 種類のプロバイダーで動きます。このマシンで検出されたコーディング CLI と、ここで登録するローカルの OpenAI 互換エンジンです。プロジェクト設定 ▸ エージェントエンジンでパイプラインの各フェーズに割り当てます。変更は新しい実行に適用されます。`,label:`表示名(任意)`,labelPlaceholder:`例: LAN マシン`,defaultModel:`既定のモデル`,defaultModelNone:`既定なし(最初に検出したもの)`,defaultModelPlaceholder:`モデル ID またはカスタムエイリアス`,customModel:`カスタムエイリアス…`,discoveredModels:`検出されたモデル`,noModels:`まだモデルが検出されていません。接続をテストしてください。`,rates:`料金(100 万トークンあたり USD、任意)`,ratesHint:`コストは概算として表示されます。両方を空にするとコストは不明のままです。`,inputRate:`入力 / 100 万`,outputRate:`出力 / 100 万`,ratesInvalid:`両方の料金を 0 以上の数値で入力するか、両方を空にしてください。`,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:`エージェントループ`,agentLoopHint:`implement パイプラインがこのモデルを動かす方法`,agentLoop_compact:`コンパクト`,agentLoop_compactHint:`アプリ主導のマイクロステップと構造化出力。約 30B 未満のモデルに推奨。`,agentLoop_free:`フリー`,agentLoop_freeHint:`ロールごとに 1 つのエージェントループ。CLI プロバイダーと同じ。強力なモデルが必要。`,contextWindow:`コンテキストウィンドウ(トークン)`,contextWindowHint:`サーバーのコンテキストサイズ(n_ctx / num_ctx)に合わせてください。ウィンドウが埋まる前に古いツール結果を圧縮するために使います。既定 32768。`,maxOutput:`ターンあたりの出力予算(トークン)`,maxOutputHint:`ツールターン1回の max_tokens。途中で切れたターンは2倍で1回だけ再試行します。コンテキストウィンドウ内で数えられるため、常に残り容量で上限が決まります。モデルが内部で思考する場合(thinking はこの予算を消費します)は増やしてください。既定値 8192。`,reasoningEffortRailHint:`オフの場合、このエンジンではレールのヘッダーに推論の強さセレクターが表示されません。`,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 分のアイドル監視があります。時間切れのステップは実行をブロックし、次の未完了タスクグループから再開できます。トークン/USD の上限は任意で、USD 上限はすべての 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:`保存された実行`,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:`復旧する中断された試行を選択`},v={architect:`コードを読み、提案・設計・タスク・仕様を書きます。読み取り専用。`,developer:`タスクをテスト付きで実装します。CLI のサンドボックス内でファイル編集とコマンド実行ができます。`,reviewer:`仕様と検証結果に照らして成果を確認します。読み取り専用。`},y={title:`レビュー基準`,hint:`空欄は Core の基準を使います。値は基準を厳しくする方向にのみ設定できます: 総合スコア {{score}} 以上、セキュリティ {{security}} 以上、その他の観点 {{aspect}} 以上。`,minScore:`最低総合スコア(既定 {{score}})`,aspects:{type_correctness:`型の正確さ(既定 {{score}})`,pattern_adherence:`パターン準拠(既定 {{score}})`,test_coverage:`テストカバレッジ(既定 {{score}})`,security:`セキュリティ(既定 {{score}})`,architectural_alignment:`アーキテクチャ整合性(既定 {{score}})`}},b={title:`アーキテクトの確信度`,hint:`自律的な調査を1回行っても確信度が低い設計は、アーキテクトの質問で一時停止するか、明示した前提のもとで続行します。`,onLowConfidence:`確信度が低いとき`,ask:`質問する(質問で一時停止)`,proceed:`明示した前提で続行`},x={title:`使用量と時間`,hint:`修正と失敗した呼び出しを含みます。エージェント時間にはツールの実行時間を含みます。キャッシュトークンは入力トークンの一部です。`,unknown:`取得不可`,duration:`実行時間`,agentTime:`エージェント時間`,cost:`報告された費用`,providerCalls:`エージェント呼び出し`,toolCalls:`ツール呼び出し`,input:`入力トークン`,output:`出力トークン`,uncached:`キャッシュなしの入力`,cacheRead:`キャッシュ読み取り`,cacheWrite:`キャッシュ書き込み`,partial:`一部の試行には詳細な計測値がありません。`,phases:`フェーズ別使用量`,phase:`フェーズ`,attempts:`試行回数`},S={title:`エージェントのロール別プロンプト`,description:`各ロールの指示を表示・編集します。すべてのプロジェクトとプロバイダーで共有され、変更は新しいジョブに適用されます。再開したジョブは元のプロンプトを使用します。`,definition:`{{role}}の定義`,default:`初期設定`,custom:`カスタマイズ済み`,restore:`初期設定に戻す`,contracts:`Spec のコンテキスト、OpenSpec ワークフロー、必須の応答形式は自動的に追加されるため、ここでは編集できません。`,invalid:`各定義は 1~20,000 文字で、空白以外のテキストを含み、ヌルバイトを含まない必要があります。`,saved:`ロール別プロンプトを保存しました`,unsaved:`未保存の変更`,discard:`変更を破棄`,save:`プロンプトを保存`,fixerHint:`修正ラウンドでのみ使用されます(検証失敗またはレビュー却下の後)。設定 ▸ エージェントエンジン ▸ フィクサーで独自エンジンを指定しない限り、開発者のエンジンで実行されます。開発者セッションを再開する CLI プロバイダーには短い修正フォローアップが送られます。新しいセッションが始まるとき(ローカルエンジン、フィクサーエンジン、セッション喪失時)にこの定義が適用されます。`},C={title:`実装の効率`,scope:`新しい実行に適用されます。保存済みの実行は元の設定とランタイムを維持します。`,effort:`推論の強度`,providerDefault:`プロバイダーの既定値`,unconfirmed:`未確認`,unknownSupport:`このモデルと通信方式の対応状況は未確認です。`,escalation:`同じプロバイダーの上位モデルを1段階許可`,baseRequired:`まず基本モデルを明示的に選択してください。`,escalationModel:`上位モデル`,triggers:{architect:`既存の追加調査のみがこの段階を選択できます。`,developer:`候補が2回失敗した後、次の許可された試行で選択できます。`,reviewer:`不正な形式の応答の修復のみ。コードの却下では昇格しません。`,fixer:`この段階に到達できるのは修正ラウンドのみで、初回の実装ではフィクサーは実行されません。`},contextMode:`リポジトリのコンテキスト`,reviewMode:`修正のレビュー`,planning:`計画の深さ`,adaptive:`適応型`,full:`完全`,developerChecks:`開発者が提案する追加チェックを許可`,concurrency:`同時チェック数の上限`,concurrencyHint:`既定値は1。ホストが独立と宣言した異なるリポジトリのチェックのみ並行実行できます。既定では再利用しません。`,checkCapabilities:`モデルの互換性を確認`,capabilitiesFailed:`互換性を確認できません。対応するCoreを更新するか、既定値を維持してください。`},w={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":`この実行で選択したプロバイダー`},reuseDisabled:`このチェックの再利用は無効です。`,reuseConfirmed:`入力とツールの一致を確認して再利用しました。`,inputsChanged:`検証中に入力が変化したため、結果は無効です。`,reuseUnproven:`入力の一致を証明できる有効な結果がないため、再実行しました。`,original:`元の実行`,requested:`要求値`,reported:`報告値`},T={title:`ループロール`,hint:`レールを「ロール別」エンジンで起動したときにループ側のロールが使うエンジンです。上のパイプラインロール(architect・developer・reviewer)はすでにこのランタイム設定から決まります。`,verifier:`検証者`,verifierHint:`ループ内のコア以外のすべての AI ステップ:verify、fix、カスタム AI ステップ。`,decider:`決定者`,deciderHint:`判定を読んで次のステップを決める Loop Decider です。安価で高速なモデルが自然な選択です。`,inherit:`プライマリを継承`,model:`モデル`,effort:`推論の深さ`,disabled:`エージェントランタイムが無効です。有効にするまで「ロール別」エンジンでのレール起動は拒否されます。`,saveFailed:`ループロールを保存できませんでした。`},E={title:`実装パイプライン`,explainer:`各実装ではこれらのフェーズがこの順序で実行されます。レールのエンジンが「{{roles}}」の場合、各フェーズは下で設定したエンジンで実行されます。フェーズごとに異なるプロバイダー、モデル、推論強度を指定できます。レールで特定のエンジンを選ぶと、すべてのフェーズがそのエンジンで実行されます。`,host:`ホスト`,noCommand:`コマンドなし`,inherits:`プライマリを継承`,inheritsDeveloper:`開発者を継承`,open:`開く`,collapse:`折りたたむ`,groups:{core:{title:`コアパイプライン`,hint:`すべての実装内で実行:計画、構築、検証、修正、レビュー。`},loop:{title:`ループステップ`,hint:`実行を包むレールのループ(検証 → 判定 → 修正)とカスタムループの AI ステップ。未設定の場合はプライマリエンジンを継承します。`,chip:`レールループ`}},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:`判定を読み、ループの次のステップを決めます。`}}},D={title:`フィクサーのエンジン`,inherit:`開発者を継承`,own:`専用エンジン`,hint:`修正ラウンドでのみ実行されます(検証失敗またはレビュー却下の後)。初回の実装は開発者が担当します。開発者が安価なローカルモデルの場合、ここに強力なモデルやクラウドモデルを設定すると効果的です。`},O={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:`双子は両方コンパイルされ、テストが誤った方を import します。`},"one-test-per-module":{title:`モジュールごとにテストファイルは 1 つ`,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 モデルが 5 モジュールを書いた後に沈黙し、実行全体が失敗したことがあります。`},"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:`各タスクグループの直後にリポジトリのテストコマンドを実行し、失敗した場合はグループの文脈が新しいうちにその場で1回修正します。`,why:`最後に5つの壊れたスイートを直すより、1つずつ直す方がはるかに簡単です。`},"test-reachability":{title:`新しいテストは必ず実行されること`,description:"開発者が書いたのにリポジトリのテストコマンドが一度も実行しないテストファイル(ファイルを列挙する `test` スクリプトが新ファイルを漏らした場合)は、該当ファイル名を示して検証を失敗させます。まずグループ単位で、次にホスト検証で再確認します。",why:`6件の失敗を含む622行のスイートが、一度も実行されなかったためにグリーンのまま出荷されたことがあります。`},"exit-code-honesty":{title:`失敗を報告する終了コード 0 を信用しない`,description:'検証コマンドが 0 で終了しても出力に失敗(`FAIL:` 行、"3 failed"、AssertionError)が含まれる場合は失敗として扱い、テストハーネス自体を欠陥として指摘してフィクサーに渡します。',why:`非ゼロの終了コードを設定しない自作テストランナーが、3 件の失敗テストを成功として出荷したことがあります。`}}},k=`未保存の変更`,A={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:`許可されたプロトコル修正でのみ上位モデルを使用できます。再試行回数は増えません。`},j={title:`実行への指示`,hint:`Core は、対応する次のエージェントのターンのために指示を保存します。送信しても質問への回答や承認にはなりません。`,label:`追加の指示`,send:`指示を送信`,accepted:`Core が受信しました。エージェントでの使用を待っています。`,pending:`エージェントのターン待ち`,consumed:`エージェントが使用済み`,counts:`待機中: {{pending}} · 使用済み: {{consumed}}`,failed:`指示を送信できませんでした。同じメッセージを確認するには再試行してください。`,unavailable:`受信記録の詳細を取得できません。`,unreported:`このバージョンの Core は使用状況を報告しません。`,truncated:`最近の受信記録と待機中のメッセージのみ表示しています。`},M={title:`Core ロールの既定値`,hint:`このファイルの既定値は新しいワークフローに適用されます。プロジェクトの明示的な設定が優先され、保存済みの実行は固定された設定を保持します。`,invalid:`ロールの項目を変更する前に、エディターで YAML ヘッダーを修正してください。`,escalationEffort:`上位モデルの推論レベル`},N={title:`履歴の保持`,description:`期限切れの実行履歴と未使用の Core バージョンを削除します。削除した履歴は再開や分岐ができません。実行中・復旧可能な実行や未完了の配信は保護され、ジョブログと費用記録は保持されます。`,forever:`履歴を無期限に保持`,days:`保持日数`,save:`保持設定を保存`,preview:`削除対象を確認`,collect:`期限切れの履歴を削除`,previewSummary:`対象:履歴 {{runs}} 件、未使用の Core バージョン {{packages}} 件。`,collectedSummary:`期限切れ:履歴 {{runs}} 件。削除済み:未使用の Core バージョン {{packages}} 件。`,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:`保持期間内`}},P={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,runs:_,roleHints:v,review:y,architect:b,metrics:x,prompts:S,efficiency:C,evidence:w,loopRoles:T,pipeline:E,fixer:D,guardrails:O,unsavedChanges:k,customRoles:A,steering:j,studioRole:M,retention:N};export{m as agents,u as approvalBeforeArchive,b as architect,f as cliNames,A as customRoles,P as default,t as description,C as efficiency,w as evidence,D as fixer,O as guardrails,h as limits,r as loadFailed,n as loading,T as loopRoles,x as metrics,E as pipeline,S as prompts,d as providers,N as retention,i as retry,y as review,v as roleHints,p as roles,_ as runs,o as save,l as saveFailed,c as saved,s as saving,j as steering,M as studioRole,e as title,a as unavailable,k as unsavedChanges,g as verification};
@@ -0,0 +1 @@
1
+ var e=`Motor de agentes`,t=`Arquitecto, desarrollador y revisor se ejecutan como fases separadas con verificación determinista entre ellas. Elige un proveedor por rol; todo lo demás tiene un valor por defecto que funciona.`,n=`Cargando configuración…`,r=`No se pudo cargar la configuración. Reintenta antes de modificarla.`,i=`Reintentar`,a=`Esta instalación de Core no incluye el motor de agentes. Actualiza Core antes de activarlo; puedes preparar la configuración mientras está desactivado.`,o=`Guardar configuración`,s=`Guardando…`,c=`Configuración guardada`,l=`No se pudo guardar la configuración.`,u=`Pausar para aprobación antes de completar el flujo`,d={title:`Proveedores`,hint:`Los proveedores CLI usan su sesión existente. Los proveedores API solo aceptan el nombre de una variable de entorno, nunca una clave. Los servicios locales pueden dejarlo vacío. Asigna otro proveedor al rol antes de eliminar el actual.`,entry:`Proveedor {{index}}`,id:`ID del proveedor`,kind:`Tipo de conexión`,cli:`CLI de programación instalado`,compatible:`API compatible con OpenAI`,command:`CLI de programación`,baseUrl:`URL base de la API`,apiKeyEnv:`Variable de entorno de la clave (opcional)`,remove:`Eliminar proveedor`,addCli:`Añadir proveedor CLI`,addLocal:`Añadir proveedor local / API`,show:`Mostrar conexiones de proveedores`,hide:`Ocultar conexiones de proveedores`,globalTitle:`Proveedores de IA`,globalHint:`Dos tipos de proveedor impulsan cada proyecto: las CLI de programación detectadas en este equipo y los motores locales compatibles con OpenAI que registres aquí. Asígnalos a las fases del pipeline en Ajustes del proyecto ▸ Motor de agentes. Los cambios se aplican a nuevas ejecuciones.`,label:`Nombre visible (opcional)`,labelPlaceholder:`p. ej. Equipo LAN`,defaultModel:`Modelo por defecto`,defaultModelNone:`Sin valor por defecto (primero descubierto)`,defaultModelPlaceholder:`ID del modelo o alias personalizado`,customModel:`Alias personalizado…`,discoveredModels:`Modelos descubiertos`,noModels:`Aún no se han descubierto modelos: prueba la conexión.`,rates:`Tarifas (USD por 1M de tokens, opcional)`,ratesHint:`Los costes se muestran como estimaciones; deja ambas vacías y el coste seguirá siendo desconocido.`,inputRate:`Entrada por 1M`,outputRate:`Salida por 1M`,ratesInvalid:`Introduce ambas tarifas como números no negativos o deja las dos vacías.`,reasoningEffort:`El servicio acepta esfuerzo de razonamiento`,reasoningEffortHint:`Envía el campo reasoning_effort de OpenAI: el esfuerzo configurado del rol en cada llamada, elevado a alto mientras el arquitecto compacto escribe el plan. Déjalo apagado salvo que el servidor lo respete.`,apiKeyEnvMissing:`{{name}} no está definida en el proceso de la app. Defínela en el entorno desde el que se lanza la app.`,test:`Probar conexión`,testing:`Probando…`,testFailed:`No se pudo probar la conexión.`,rename:`Renombrar`,renameHint:`Al renombrar, las asignaciones de roles siguen apuntando a esta conexión.`,idLocked:`El id queda bloqueado al guardar. Usa Renombrar para cambiarlo.`,localBadge:`Motor local`,cliBadge:`CLI`,notDetected:`No detectado en este equipo`,unsaved:`Cambios sin guardar`,empty:`Aún no hay conexiones. Añade un proveedor local / API para empezar.`,fixBeforeSave:`Corrige los campos marcados antes de guardar.`,status:{probing:`Comprobando…`,reachable:`Accesible`,unauthorized:`No autorizado`,unreachable:`Inaccesible`,untested:`Sin probar`},auth:{authenticated:`Sesión iniciada`,unauthenticated:`Sin sesión`,unknown:`Sesión desconocida`},agentLoop:`Bucle del agente`,agentLoopHint:`cómo dirige el pipeline implement a este modelo`,agentLoop_compact:`Compacto`,agentLoop_compactHint:`Micro-pasos dirigidos por la app con salida estructurada. Recomendado para modelos de menos de ~30B.`,agentLoop_free:`Libre`,agentLoop_freeHint:`Un bucle agéntico por rol, como un proveedor CLI. Requiere un modelo potente.`,contextWindow:`Ventana de contexto (tokens)`,contextWindowHint:`Iguala el tamaño de contexto del servidor (n_ctx / num_ctx). Se usa para compactar resultados de herramientas antiguos antes de llenar la ventana. Por defecto 32768.`,maxOutput:`Presupuesto de salida por turno (tokens)`,maxOutputHint:`max_tokens de un turno de herramientas; un turno cortado se reintenta una vez al doble. Cuenta dentro de la ventana de contexto, así que siempre se limita al espacio restante — súbelo si el modelo razona en privado (el thinking consume este presupuesto). Por defecto 8192.`,reasoningEffortRailHint:`Apagado: el selector de esfuerzo de razonamiento no aparece en la cabecera del rail para este motor.`,presetTitle:`Configuración rápida`,presetSmallModel:`Recomendado para modelos pequeños`,presetSmallModelApplied:`Preajuste para modelos pequeños aplicado`,presetSmallModelHint:`Activa el bucle Compacto, reenvía el esfuerzo de razonamiento y fija una ventana de contexto de 32k: la combinación validada con modelos de 7–14B. Puedes cambiar cada campo después.`,cliGroup:`Herramientas CLI`,cliGroupHint:`Detectadas en este equipo: usan su propio inicio de sesión, no hay nada que configurar.`,localGroup:`Motores locales`,localGroupHint:`Endpoints compatibles con OpenAI (llama.cpp, Ollama, vLLM, LM Studio…) accesibles desde esta app.`,models_one:`{{count}} modelo`,models_other:`{{count}} modelos`,expand:`Mostrar ajustes`,collapse:`Ocultar ajustes`,overflow:`Más acciones`,addLocalHero:`Añadir motor local`,emptyLocalPitch:`Todavía no hay motores locales. Apunta la app a un endpoint compatible con OpenAI para ejecutar el pipeline en tu propio hardware: el coste queda bajo tu control y nada sale de tu red.`,defaultsGroup:`Valores por defecto del proveedor`},f={claude:`Claude`,codex:`Codex`,gemini:`Gemini`,kimi:`Kimi`},p={architect:`Arquitecto`,developer:`Desarrollador`,reviewer:`Revisor`,fixer:`Corrector`,verify:`Verificación`,archive:`Finalización`},m={title:`Asignación de roles`,hint:`Cada rol puede usar un proveedor y un modelo distintos. Las conexiones se gestionan en Ajustes generales → Proveedores de IA. Límite por defecto: {{turns}} turnos por agente.`,provider:`Proveedor`,model:`Modelo`,modelPlaceholder:`ID del modelo o predeterminado del CLI`,maxTurns:`Máximo de turnos (por defecto {{turns}})`,defaultModel:`Predeterminado ({{model}})`,thinking:`Razonamiento oculto`,thinking_off:`Desactivado`,thinking_on:`Activado`,thinkingHint:`Desactivado por defecto: el razonamiento oculto gasta el presupuesto de salida y minutos por turno en un bucle guiado por el host. Actívalo para un rol que gane con deliberación (se envía como chat_template_kwargs.enable_thinking; los endpoints que no lo conocen lo ignoran).`},h={title:`Límites del flujo`,hint:`Los campos vacíos usan los valores de Core: {{attempts}} intentos de corrección y {{minutes}} minutos por paso de rol. En motores locales el timeout se aplica a cada unidad de trabajo (un grupo de tareas, un artefacto, una revisión) — 45 minutos por defecto — más un watchdog de inactividad de 20 minutos; un paso que agota su tiempo bloquea la ejecución y se puede reanudar desde el siguiente grupo abierto. Los topes de tokens y USD son opcionales; los de USD requieren Claude en todos los roles.`,maxAttempts:`Máximo de intentos del desarrollador (por defecto {{attempts}})`,timeoutMinutes:`Timeout en minutos (por defecto {{minutes}}; motores locales 45 por grupo de tareas)`,maxTokens:`Máximo de tokens`,maxCostUsd:`Coste máximo (USD)`,unlimited:`Sin límite`},g={title:`Comandos de verificación`,hint:`Opcional. Se ejecutan cuando el desarrollador termina y sus fallos vuelven al desarrollador. Si dejas la lista vacía, el arquitecto propone las comprobaciones propias del proyecto en cada ejecución; los repositorios sin comprobación automática se revisan igualmente.`,detect:`Detectar comprobaciones del proyecto`,detecting:`Detectando…`,detected:`Rellenado con las comprobaciones que este proyecto ya define.`,nothingDetected:`No se encontró ningún comando de test, comprobación de tipos o build. No pasa nada: el arquitecto propone comprobaciones en cada ejecución cuando es posible.`,detectFailed:`No se pudieron inspeccionar los repositorios del proyecto.`,repository:`Repositorio`,command:`Comando`,reason:`Detectado en {{reason}}`,remove:`Eliminar`,add:`Añadir comando`,invalidLine:`El comando de verificación está vacío o tiene comillas sin cerrar: {{line}}`,label:`Nombre de la comprobación (opcional)`,moveUp:`Subir`,moveDown:`Bajar`},_={title:`Ejecuciones guardadas`,refresh:`Actualizar`,hint:`Continúa en el worktree original con el alcance y la configuración guardados; el progreso aparece en el registro de ese trabajo. No publica ni reinicia la entrega de Desktop. Las ejecuciones activas se detienen desde sus controles de trabajo.`,empty:`No hay ejecuciones guardadas.`,loadFailed:`No se pudieron cargar las ejecuciones.`,actionFailed:`No se pudo actualizar esta ejecución.`,phase:`Siguiente fase: {{phase}}`,approve:`Aprobar finalización`,recover:`Recuperar fase interrumpida`,resume:`Reanudar`,cancel:`Cancelar continuación`,status:{running:`Continuando…`,succeeded:`Completado`,failed:`Fallido`,blocked:`Bloqueado`,paused:`En pausa`,cancelled:`Cancelado`,interrupted:`Interrumpido`,unavailable:`No disponible`,expired:`Caducado`},question:`El arquitecto pregunta:`,answerLabel:`Tu respuesta`,answerPlaceholder:`Responde a la pregunta; el arquitecto continúa con ella.`,answer:`Responder y reanudar`,viewLog:`Ver log del job`,implementation:`Implementación`,preserveProgress:`Continúa desde la fase indicada, conservando el trabajo anterior y la configuración guardada.`,reviewDelivery:`Implementación completada. Revisa el resultado en el log de este job antes de preparar la entrega; esta continuación no lo ha publicado.`,prepareDelivery:`Preparar entrega`,dismiss:`Descartar`,selectRecovery:`Selecciona los intentos interrumpidos que quieres recuperar`},v={architect:`Lee el código y escribe la propuesta, el diseño, las tareas y la spec. Solo lectura.`,developer:`Implementa las tareas con tests. Puede editar archivos y ejecutar comandos dentro del sandbox del CLI.`,reviewer:`Comprueba el resultado contra la spec y la evidencia de verificación. Solo lectura.`},y={title:`Umbral de revisión`,hint:`Los campos vacíos usan el umbral de Core. Los valores solo pueden elevarlo: puntuación global mínima {{score}}, seguridad mínima {{security}}, resto de aspectos mínimo {{aspect}}.`,minScore:`Puntuación global mínima (por defecto {{score}})`,aspects:{type_correctness:`Corrección de tipos (por defecto {{score}})`,pattern_adherence:`Adhesión a patrones (por defecto {{score}})`,test_coverage:`Cobertura de pruebas (por defecto {{score}})`,security:`Seguridad (por defecto {{score}})`,architectural_alignment:`Alineación arquitectónica (por defecto {{score}})`}},b={title:`Confianza del arquitecto`,hint:`Tras una pasada de investigación autónoma, un diseño con confianza aún baja se pausa con la pregunta del arquitecto o continúa con supuestos declarados.`,onLowConfidence:`Con confianza baja`,ask:`Preguntar (pausar con la pregunta)`,proceed:`Continuar con supuestos declarados`},x={title:`Consumo y tiempo`,hint:`Incluye correcciones y llamadas fallidas. El tiempo del agente incluye sus herramientas. Los tokens de caché forman parte de los tokens de entrada.`,unknown:`No disponible`,duration:`Tiempo de ejecución`,agentTime:`Tiempo de agentes`,cost:`Coste informado`,providerCalls:`Llamadas a agentes`,toolCalls:`Llamadas a herramientas`,input:`Tokens de entrada`,output:`Tokens de salida`,uncached:`Entrada sin caché`,cacheRead:`Lecturas de caché`,cacheWrite:`Escrituras de caché`,partial:`Algunos intentos no tienen mediciones detalladas.`,phases:`Consumo por fase`,phase:`Fase`,attempts:`Intentos`},S={title:`Prompts de los agentes`,description:`Consulta y edita las instrucciones de cada rol. Son comunes a todos los proyectos y proveedores; los cambios se aplican a los nuevos jobs. Los jobs reanudados conservan sus prompts originales.`,definition:`Definición de {{role}}`,default:`Valor de fábrica`,custom:`Personalizado`,restore:`Restaurar valor de fábrica`,contracts:`El contexto de la spec, el flujo de OpenSpec y el formato de respuesta se añaden automáticamente y no se editan aquí.`,invalid:`Cada definición debe contener entre 1 y 20.000 caracteres, con texto no vacío y sin caracteres nulos.`,saved:`Prompts guardados`,unsaved:`Cambios sin guardar`,discard:`Descartar cambios`,save:`Guardar prompts`,fixerHint:`Solo se usa en rondas de corrección: tras una verificación fallida o una revisión rechazada. Corre en el motor del desarrollador salvo que Ajustes ▸ Motor de agentes ▸ Corrector indique uno propio. Un proveedor CLI que reanuda la sesión del desarrollador recibe el seguimiento breve de corrección; la definición se aplica siempre que arranca una sesión nueva (motores locales, motor corrector, sesión perdida).`},C={title:`Eficiencia de implementación`,scope:`Se aplica a nuevas ejecuciones. Las guardadas conservan su configuración y runtime originales.`,effort:`Esfuerzo de razonamiento`,providerDefault:`Predeterminado del proveedor`,unconfirmed:`Sin confirmar`,unknownSupport:`Compatibilidad sin confirmar para este modelo y transporte. Puedes usar el valor predeterminado del proveedor.`,escalation:`Permitir un nivel superior con el mismo proveedor`,baseRequired:`Selecciona primero un modelo base explícito.`,escalationModel:`Modelo del nivel superior`,triggers:{architect:`Solo puede activarse en la pasada adicional de investigación ya permitida.`,developer:`Tras dos candidatos fallidos, puede activarse en el siguiente intento permitido.`,reviewer:`Solo puede activarse para reparar una respuesta mal formada; rechazar código no lo activa.`,fixer:`Solo una ronda de corrección puede alcanzar este nivel; las primeras pasadas nunca ejecutan el corrector.`},contextMode:`Contexto de repositorios`,reviewMode:`Revisión de correcciones`,planning:`Profundidad del plan`,adaptive:`Adaptativa`,full:`Completa`,developerChecks:`Aceptar checks adicionales propuestos por el developer`,concurrency:`Máximo de checks simultáneos`,concurrencyHint:`Por defecto, 1. Solo se solapan checks declarados independientes por el host en repositorios distintos. La reutilización está desactivada por defecto.`,checkCapabilities:`Comprobar compatibilidad de modelos`,capabilitiesFailed:`No se pudo confirmar la compatibilidad. Actualiza el Core emparejado o conserva los valores predeterminados del proveedor.`},w={title:`Evidencia de verificación`,acceptance:`Aceptación técnica`,acceptanceStatus:{pending:`Pendiente`,validated:`Validada`,"with-exceptions":`Con excepciones`,blocked:`Bloqueada`},calls:`Llamadas de agentes`,executed:`Checks ejecutados`,reused:`Checks reutilizados`,unknown:`No disponible`,unavailable:`La evidencia no está disponible para esta ejecución. El resultado registrado no confirma su validez actual.`,current:`Candidato y plan actuales`,historical:`Resultado histórico`,moreChecks:`Más checks`,output:`Salida de verificación`,empty:`Sin salida`,truncated:`Esta es una página limitada o una captura truncada.`,nextPage:`Siguiente página de salida`,status:{passed:`Correcto`,failed:`Fallido`,cancelled:`Cancelado`,interrupted:`Interrumpido`},disposition:{executed:`Ejecutado`,reused:`Reutilizado`,"not-run":`No ejecutado`},origin:`Origen`,origins:{host:`Host`,architect:`Arquitecto`,developer:`Desarrollador`,"frozen-runtime-config":`Configuración guardada`,"project-role":`Rol del proyecto`,default:`Por defecto`,"explicit-launch-override":`Proveedor elegido para el lanzamiento`},reuseDisabled:`Reutilización desactivada para esta comprobación.`,reuseConfirmed:`Reutilizado tras comprobar entradas y herramientas idénticas.`,inputsChanged:`Las entradas cambiaron durante la verificación; resultado invalidado.`,reuseUnproven:`No hay un resultado vigente con entradas idénticas demostradas; se ejecutó de nuevo.`,original:`Ejecución original`,requested:`Solicitado`,reported:`Reportado`},T={title:`Roles del loop`,hint:`Motores de los roles del loop cuando un rail se lanza con el motor «Roles». Los roles del pipeline de arriba (architect, developer, reviewer) ya salen de esta configuración del runtime.`,verifier:`Verificador`,verifierHint:`Todos los pasos de IA del loop ajenos al core: verify, fix y pasos de IA personalizados.`,decider:`Decisor`,deciderHint:`El Loop Decider que lee el veredicto y decide el siguiente paso: lo natural es un modelo barato y rápido.`,inherit:`Heredar el principal`,model:`Modelo`,effort:`Esfuerzo de razonamiento`,disabled:`El runtime de agentes está desactivado: los rails lanzados con el motor «Roles» se rechazan hasta que se active.`,saveFailed:`No se pudieron guardar los roles del loop.`},E={title:`Pipeline de implementación`,explainer:`Estas fases se ejecutan en este orden en cada implementación. Cuando el motor del rail es «{{roles}}», cada fase usa el motor configurado abajo: un proveedor, modelo y esfuerzo distintos por fase. Si eliges un motor concreto en el rail, todas las fases se ejecutan con ese motor.`,host:`Host`,noCommand:`sin comando`,inherits:`Hereda el principal`,inheritsDeveloper:`Hereda del desarrollador`,open:`Abrir`,collapse:`Contraer`,groups:{core:{title:`Pipeline principal`,hint:`Se ejecuta dentro de cada implementación: planificar, construir, verificar, corregir, revisar.`},loop:{title:`Pasos del loop`,hint:`Pasos de IA del loop del rail que envuelve la ejecución (verificar → decidir → corregir) y de los loops personalizados; heredan el motor principal si no se configuran.`,chip:`loop del rail`}},phases:{architect:{name:`Arquitecto`,purpose:`Lee el código y escribe la propuesta, el diseño y las tareas.`},developer:{name:`Desarrollador`,purpose:`Implementa las tareas con tests.`},verification:{name:`Verificación`,purpose:`El host ejecuta tus comprobaciones; los fallos vuelven al desarrollador.`},fixer:{name:`Corrector`,purpose:`Corrige lo que la verificación o la revisión rechazan; hereda del desarrollador si no se configura.`},reviewer:{name:`Revisor`,purpose:`Contrasta el resultado con la spec y las evidencias.`},verifier:{name:`Verificador`,purpose:`Pasos de IA verify, fix y personalizados del loop.`},decider:{name:`Decisor`,purpose:`Lee el veredicto y decide el siguiente paso del loop.`}}},D={title:`Motor del corrector`,inherit:`Heredar desarrollador`,own:`Motor propio`,hint:`Solo se ejecuta en rondas de corrección: tras una verificación fallida o una revisión rechazada; las primeras pasadas siguen en el desarrollador. Un modelo más potente o en la nube aquí compensa cuando el desarrollador es un modelo local barato.`},O={title:`Barandillas`,intro:`Reglas de proceso que el host aplica alrededor de los modelos locales para que un modelo pequeño no descarrile. Todas activas por defecto; desactiva una solo para ajustar el proceso. Los proveedores CLI nunca se ven afectados.`,unsupported:`Esta instalación de Core no expone barandillas configurables. Actualiza Core para ajustarlas; las reglas integradas siguen aplicándose.`,active:`{{on}} de {{total}} activas`,reset:`Restablecer valores por defecto`,phases:{architect:`Arquitecto`,developer:`Desarrollador`,host:`Host`},unknown:`Una barandilla añadida por un Core más reciente; esta app aún no tiene descripción para ella.`,items:{"plan-validation":{title:`Plan de tareas validado`,description:`Rechaza planes que apuntan a openspec/, listan nombres de archivo sueltos como tareas, tienen muy pocas tareas/grupos para la spec o dejan criterios de aceptación sin cubrir; el arquitecto reintenta.`,why:`Un plan vago o incompleto es la causa nº 1 de que un modelo desarrollador pequeño escriba stubs.`},"genuine-blocking-question":{title:`Solo preguntas bloqueantes reales`,description:`El arquitecto solo puede pausar la ejecución con una pregunta real terminada en '?', nunca con texto de ejemplo copiado.`,why:`Los modelos pequeños repiten los marcadores del prompt y bloquearían todas las ejecuciones.`},"plan-language-hint":{title:`Planificar en el lenguaje del repositorio`,description:`Indica al arquitecto el lenguaje principal para que los nombres de archivo de las tareas lleven la extensión correcta.`,why:`Un plan en JS sobre un repo TypeScript hace imposible marcar las tareas.`},"frozen-plan-writes":{title:`Los artefactos de planificación están congelados`,description:`El desarrollador no puede escribir bajo openspec/; el plan pertenece al host.`,why:`Los modelos 'implementan' editando el plan en vez del código.`},"primary-language":{title:`Recordatorio del lenguaje principal`,description:`A cada grupo de tareas se le indica el lenguaje principal del repositorio; los archivos nuevos deben usarlo.`,why:`Evita una segunda implementación en otro lenguaje.`},"duplicate-sibling":{title:`Sin módulos gemelos entre lenguajes`,description:`Rechaza board.js cuando ya existe board.ts; amplía el módulo existente.`,why:`Los gemelos compilan ambos y los tests importan el equivocado.`},"one-test-per-module":{title:`Un archivo de test por módulo`,description:`Rechaza board.tick.test.ts cuando existe board.test.ts; amplíalo en su lugar.`,why:`Si no, cada pasada de corrección añade una suite nueva.`},"empty-write":{title:`Sin sobrescrituras vacías`,description:`Se rechaza una escritura vacía sobre un archivo con contenido; escribe el contenido completo o parchéalo.`,why:`Una pasada de 'limpieza' dejó una vez index.ts con 0 líneas.`},"evidence-gated-ticking":{title:`Evidencia antes de marcar una tarea`,description:`Una tarea que nombra archivos solo está hecha cuando existen y no son stubs (se aceptan extensiones hermanas).`,why:`Sin esto, 'hecho' es solo una afirmación y verify se ejecuta contra nada.`},"inventory-retry":{title:`Reintentar con el inventario real`,description:`Cuando el modelo abandona afirmando que el repo está vacío sin estarlo, reintenta una vez con la lista de archivos.`,why:`Segunda oportunidad barata en vez de un paso fallido.`},"synthetic-corrections":{title:`Convertir el feedback en tareas`,description:`Cuando todas las tareas están marcadas pero review/verify fallaron, el feedback se convierte en tareas de corrección concretas.`,why:`Si no, el desarrollador informa 'ya está hecho' y nada cambia.`},"silent-group-closure":{title:`Cerrar grupos silenciosos, conservar sus archivos`,description:`Un grupo cuyo modelo deja de responder se cierra acreditando los archivos que escribió y dejando sus tareas abiertas, en vez de fallar la ejecución.`,why:`Un modelo 9B escribió cinco módulos, enmudeció y toda la ejecución falló.`},"environment-repair":{title:`El host repara el entorno`,description:`Las dependencias o herramientas de test que faltan (npm install, ts-jest, @types/jest, módulos de config de Jest) las instala el host y verify se reejecuta una vez.`,why:`El modelo no puede arreglar el entorno y quema correcciones intentándolo.`},"lockfile-repair":{title:`Descartar lockfiles escritos a mano`,description:`Un package-lock.json inventado por el modelo (EINTEGRITY/ETARGET) se elimina y la instalación se reintenta una vez.`,why:`Los hashes inventados nunca se instalan.`},"verify-idle-timeout":{title:`Detener tests colgados`,description:`Un comando de verificación sin salida durante 5 minutos se detiene y se informa como probable cuelgue (con la última salida).`,why:`Si no, un bucle while en un test retiene la ejecución hasta el límite de 15 minutos.`},"verify-per-group":{title:`Verificar tras cada grupo`,description:`Ejecuta el comando de test del repositorio justo después de cada grupo de tareas; un fallo recibe una ronda de corrección inmediata con el contexto del grupo aún fresco.`,why:`Cinco suites rotas al final son mucho más difíciles de arreglar que una cada vez.`},"test-reachability":{title:`Todo test nuevo debe ejecutarse`,description:"Un fichero de test que el developer escribe y que el comando de test del repositorio nunca ejecuta (un script `test` que enumera y omite el fichero nuevo) hace fallar la verificación nombrando el fichero exacto, primero a nivel de grupo y de nuevo en la verificación del host.",why:`Una suite de 622 líneas con seis casos rotos llegó en verde porque nada la ejecutó jamás.`},"exit-code-honesty":{title:`Desconfiar de un exit 0 que reporta fallos`,description:'Un comando de verificación que sale con 0 mientras su salida imprime fallos (líneas `FAIL:`, "3 failed", un AssertionError) se trata como FALLIDO y pasa al corrector con el harness señalado como el defecto.',why:`Un runner de tests casero que nunca ponía exit code distinto de 0 entregó tres tests rojos como verdes.`}}},k=`Cambios sin guardar`,A={title:`Roles personalizados`,hint:`Define instrucciones reutilizables y permisos explícitos para los roles del flujo.`,unsupported:`Actualiza Core para editar roles personalizados.`,remove:`Eliminar {{id}}`,access:`Acceso al código`,read:`Solo lectura`,write:`Lectura y escritura`,artifacts:`Acceso a artefactos OpenSpec`,none:`Ninguno`,tasks:`Solo casillas de tareas`,all:`Todos los artefactos del cambio`,skill:`Skill de OpenSpec`,noSkill:`Sin skill asociado`,prompt:`Instrucciones del rol`,id:`ID del rol`,add:`Añadir rol`,invalidId:`Usa un ID único en minúsculas que empiece por una letra, con hasta 64 letras, números o guiones. Los IDs integrados están reservados.`,escalationHint:`Solo una reparación permitida del protocolo puede usar el modelo de escalado. No se añade ningún reintento.`},j={title:`Instrucciones de ejecución`,hint:`Core guarda estas instrucciones para el siguiente turno de agente compatible. Enviarlas no responde preguntas ni concede aprobaciones.`,label:`Instrucciones adicionales`,send:`Enviar instrucciones`,accepted:`Recibidas por Core; pendientes de consumo.`,pending:`Pendientes de un turno de agente`,consumed:`Consumidas por un agente`,counts:`Pendientes: {{pending}} · Consumidas: {{consumed}}`,failed:`No se pudieron enviar las instrucciones. Reintenta para confirmar el mismo mensaje.`,unavailable:`Los detalles de los recibos no están disponibles.`,unreported:`Esta versión de Core no informa del consumo.`,truncated:`Solo se muestran los recibos más recientes y los mensajes pendientes.`},M={title:`Valores predeterminados del rol de Core`,hint:`Estos valores del archivo se aplican a workflows nuevos. La configuración explícita del proyecto tiene prioridad; las ejecuciones guardadas conservan su configuración congelada.`,invalid:`Corrige el encabezado YAML en el editor antes de cambiar los campos del rol.`,escalationEffort:`Esfuerzo de razonamiento del modelo superior`},N={title:`Conservación del historial`,description:`Elimina historiales caducados y versiones de Core sin uso. Los historiales eliminados no pueden reanudarse ni bifurcarse. Se protegen las ejecuciones activas o recuperables y las entregas pendientes; se conservan los registros de trabajos y costes.`,forever:`Conservar el historial indefinidamente`,days:`Días de conservación`,save:`Guardar conservación`,preview:`Previsualizar limpieza`,collect:`Eliminar historial caducado`,previewSummary:`Elegibles: {{runs}} historiales y {{packages}} versiones de Core sin uso.`,collectedSummary:`Caducados: {{runs}} historiales. Eliminadas: {{packages}} versiones de Core sin uso.`,more:`{{count}} ejecuciones adicionales.`,failed:`No se pudo consultar o actualizar la conservación.`,expired:`El historial de esta ejecución ha caducado según la política del proyecto. Se conservan su registro de trabajo y contabilidad.`,loading:`Cargando política de conservación…`,states:{protected:`Conservado`,eligible:`Elegible`,expired:`Caducado`,cleanup_pending:`Limpieza pendiente`,busy:`En uso`,error:`Error de inspección`},reasons:{disabled:`Conservación indefinida`,recoverable:`Todavía puede recuperarse`,active:`Ejecución activa`,human_pending:`Espera una respuesta humana`,interrupted_writes:`Hay escrituras interrumpidas por revisar`,delivery_pending:`Entrega pendiente`,fork_pending:`Queda una bifurcación dependiente`,unknown_terminal_time:`Se desconoce la fecha de finalización`,within_retention:`Dentro del plazo de conservación`}},P={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,runs:_,roleHints:v,review:y,architect:b,metrics:x,prompts:S,efficiency:C,evidence:w,loopRoles:T,pipeline:E,fixer:D,guardrails:O,unsavedChanges:k,customRoles:A,steering:j,studioRole:M,retention:N};export{m as agents,u as approvalBeforeArchive,b as architect,f as cliNames,A as customRoles,P as default,t as description,C as efficiency,w as evidence,D as fixer,O as guardrails,h as limits,r as loadFailed,n as loading,T as loopRoles,x as metrics,E as pipeline,S as prompts,d as providers,N as retention,i as retry,y as review,v as roleHints,p as roles,_ as runs,o as save,l as saveFailed,c as saved,s as saving,j as steering,M as studioRole,e as title,a as unavailable,k as unsavedChanges,g as verification};