specrails-desktop 2.58.0 → 2.59.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 (425) hide show
  1. package/README.md +2 -5
  2. package/client/dist/assets/{ActivityFeedPage-BQGppIR0.js → ActivityFeedPage-DBFt8ZHP.js} +1 -1
  3. package/client/dist/assets/AgentBrowserCapture-DiQx0W67.js +1 -0
  4. package/client/dist/assets/AgentModeAnalyticsPane-BmDSXp_J.js +2 -0
  5. package/client/dist/assets/AgentModeCodePane-BLQLPSwr.js +2 -0
  6. package/client/dist/assets/{AgentModeJobsPane-DR_06oqH.js → AgentModeJobsPane-BbTXdKUa.js} +1 -1
  7. package/client/dist/assets/{AgentsPage-BKIKjm_1.js → AgentsPage-Dei1jGR8.js} +3 -3
  8. package/client/dist/assets/{AnalyticsPage-069npRVo.js → AnalyticsPage-BhkeGIGn.js} +1 -1
  9. package/client/dist/assets/CodePage-B_9yYWUx.js +3 -0
  10. package/client/dist/assets/{DesktopAnalyticsPage-qtWAPM47.js → DesktopAnalyticsPage-DAcfEJac.js} +1 -1
  11. package/client/dist/assets/DocsDialog-WCuiYgsc.js +11 -0
  12. package/client/dist/assets/DocsPage-bGVYTMTU.js +11 -0
  13. package/client/dist/assets/{ExportDropdown-BcMpvV89.js → ExportDropdown-CsodZ-yb.js} +1 -1
  14. package/client/dist/assets/InteractiveJobComposer-D5fh_eVL.js +19 -0
  15. package/client/dist/assets/JobDetailModal-DlpXF61O.js +1 -0
  16. package/client/dist/assets/JobDetailPage-2yR19_Lb.js +1 -0
  17. package/client/dist/assets/JobsPage-CS9IR6Dq.js +1 -0
  18. package/client/dist/assets/LoopBuilderPage-BwiAtmOr.js +1 -0
  19. package/client/dist/assets/{LoopPreviewModal-je5pSCf-.js → LoopPreviewModal--upwvgTv.js} +1 -1
  20. package/client/dist/assets/LoopWindowSurface-DRnUixtl.js +1 -0
  21. package/client/dist/assets/LoopsPage-Xm3nRToQ.js +2 -0
  22. package/client/dist/assets/MinimizedChatsContext-D_8L4EWZ.js +1 -0
  23. package/client/dist/assets/PluginsPage-CAFQ1B4Q.js +2 -0
  24. package/client/dist/assets/ProjectSettingsDialog-DYSO4v90.js +1 -0
  25. package/client/dist/assets/{RepositoryDeliveries-BiwJuS8r.js → RepositoryDeliveries-CbQmW7Qx.js} +1 -1
  26. package/client/dist/assets/RepositoryScopeSelector-DKzvIGSZ.js +2 -0
  27. package/client/dist/assets/ReviewPacketPage-SDBhYdQB.js +4 -0
  28. package/client/dist/assets/TemplatePreviewModal-DHBUds51.js +1 -0
  29. package/client/dist/assets/TicketDetailModalContext-UAeNm7BB.js +16 -0
  30. package/client/dist/assets/{Trans-D3AfDylf.js → Trans-DExd3Z00.js} +1 -1
  31. package/client/dist/assets/agent-BElLtdKP.js +1 -0
  32. package/client/dist/assets/agent-C-m9VugX.js +1 -0
  33. package/client/dist/assets/agent-CGSKxfZk.js +1 -0
  34. package/client/dist/assets/agent-CW74ODDP.js +1 -0
  35. package/client/dist/assets/agent-DeCAZDhL.js +1 -0
  36. package/client/dist/assets/agent-DrM4qned.js +1 -0
  37. package/client/dist/assets/agent-KdIXq3w5.js +1 -0
  38. package/client/dist/assets/agent-jK8mCisM.js +1 -0
  39. package/client/dist/assets/{agentRuntime-DGz_IqKW.js → agentRuntime-15Pkk6we.js} +1 -1
  40. package/client/dist/assets/agentRuntime-Bpx3yWHK.js +1 -0
  41. package/client/dist/assets/{agentRuntime-Bg9tbmqm.js → agentRuntime-C78n13To.js} +1 -1
  42. package/client/dist/assets/{agentRuntime-D-GJVGkj.js → agentRuntime-CCI7XF4c.js} +1 -1
  43. package/client/dist/assets/{agentRuntime-D2__CVI_.js → agentRuntime-CKDHe2-a.js} +1 -1
  44. package/client/dist/assets/{agentRuntime-D35dGVOP.js → agentRuntime-Ddqvp2bP.js} +1 -1
  45. package/client/dist/assets/{agentRuntime-hInH9Fzj.js → agentRuntime-TXPQowKJ.js} +1 -1
  46. package/client/dist/assets/{agentRuntime-O1liDt6G.js → agentRuntime-hqZRy08E.js} +1 -1
  47. package/client/dist/assets/{builder-DGETbtZj.js → builder-B9gorTnT.js} +1 -1
  48. package/client/dist/assets/{builder-DyQperXU.js → builder-Bvw5s3Mi.js} +1 -1
  49. package/client/dist/assets/{builder-C1neIYGR.js → builder-CL5l4dU3.js} +1 -1
  50. package/client/dist/assets/{builder-DXEJUlC0.js → builder-CVDTVrQX.js} +1 -1
  51. package/client/dist/assets/{builder-CzW5ovyI.js → builder-CpS9liE9.js} +1 -1
  52. package/client/dist/assets/{builder-CvnFm0im.js → builder-DNctIL9Q.js} +1 -1
  53. package/client/dist/assets/{builder-D06L7iPy.js → builder-De2NxX6o.js} +1 -1
  54. package/client/dist/assets/{builder-C0FyvM83.js → builder-DeYT7Y-m.js} +1 -1
  55. package/client/dist/assets/{button-Ccc9Dc-D.js → button-D1xExSTF.js} +1 -1
  56. package/client/dist/assets/{common-DmsclwjP.js → common-Bdi0qN4S.js} +1 -1
  57. package/client/dist/assets/{common-C4Yvvhp6.js → common-Bhb9zN1P.js} +1 -1
  58. package/client/dist/assets/{common-od8WThlf.js → common-BykKlZg1.js} +1 -1
  59. package/client/dist/assets/{common-C0BOdeNi.js → common-CvnNNSJA.js} +1 -1
  60. package/client/dist/assets/{common-BCK7c9Pv.js → common-D5zk_mqq.js} +1 -1
  61. package/client/dist/assets/{common-DpLWwgI1.js → common-DQNO_al5.js} +1 -1
  62. package/client/dist/assets/{common-OCvl3c8t.js → common-Dax30Vmp.js} +1 -1
  63. package/client/dist/assets/{common-c0aujEZC.js → common-DkllpVSb.js} +1 -1
  64. package/client/dist/assets/{dialog-xXB2q5HJ.js → dialog-CMgps2MY.js} +1 -1
  65. package/client/dist/assets/external-link-D6XxC_Cu.js +1 -0
  66. package/client/dist/assets/file-text-BcLCfcWZ.js +1 -0
  67. package/client/dist/assets/{formatDistanceToNow-aBss1Nai.js → formatDistanceToNow-aw7H5ORC.js} +1 -1
  68. package/client/dist/assets/{getTimezoneOffsetInMilliseconds-DOGj1Mfz.js → getTimezoneOffsetInMilliseconds-NyC7gZJX.js} +1 -1
  69. package/client/dist/assets/index-CahchzS5.css +2 -0
  70. package/client/dist/assets/index-JSTZVJfe.js +83 -0
  71. package/client/dist/assets/integrations-BkpRUbvp.js +1 -0
  72. package/client/dist/assets/integrations-Bo8qbJf4.js +1 -0
  73. package/client/dist/assets/integrations-CmSrKzZb.js +1 -0
  74. package/client/dist/assets/integrations-DGtq26Rr.js +1 -0
  75. package/client/dist/assets/integrations-De38GFnQ.js +1 -0
  76. package/client/dist/assets/integrations-Dw6zdtb-.js +1 -0
  77. package/client/dist/assets/integrations-Dwl9KQp0.js +1 -0
  78. package/client/dist/assets/integrations-Refg_d2I.js +1 -0
  79. package/client/dist/assets/jira-api-DlXaRwA3.js +1 -0
  80. package/client/dist/assets/{jobs-KG4Sn12X.js → jobs-1G3wodhl.js} +1 -1
  81. package/client/dist/assets/{jobs-6_-r75yC.js → jobs-B4pu8TdF.js} +1 -1
  82. package/client/dist/assets/{jobs-pPv4KWjb.js → jobs-BD47Ov11.js} +1 -1
  83. package/client/dist/assets/{jobs-B1yqyId5.js → jobs-BLOoVRRl.js} +1 -1
  84. package/client/dist/assets/{jobs-BKiK-ZWh.js → jobs-CSrRx5lD.js} +1 -1
  85. package/client/dist/assets/{jobs-BFuV7ttH.js → jobs-DZAbh1m2.js} +1 -1
  86. package/client/dist/assets/{jobs-DmKV7b7d.js → jobs-epP7gt8W.js} +1 -1
  87. package/client/dist/assets/{jobs-BKa8LuwA.js → jobs-tWjcDF_6.js} +1 -1
  88. package/client/dist/assets/loops--KWr0X-w.js +1 -0
  89. package/client/dist/assets/{loops-BO3V8244.js → loops-3IutojWt.js} +1 -1
  90. package/client/dist/assets/{loops-C-hZK8pf.js → loops-BAosWtXE.js} +1 -1
  91. package/client/dist/assets/{loops-eUnCfLjC.js → loops-BISDssL5.js} +1 -1
  92. package/client/dist/assets/{loops-Dv849ckF.js → loops-Cm55CXJ4.js} +1 -1
  93. package/client/dist/assets/{loops-CDOWZ0ci.js → loops-D7tL_Saw.js} +1 -1
  94. package/client/dist/assets/{loops-BJDY9FTh.js → loops-DHQtnfze.js} +1 -1
  95. package/client/dist/assets/{loops-Q9LIgGkq.js → loops-kIJJkaxf.js} +1 -1
  96. package/client/dist/assets/nav--u7iPYlS.js +1 -0
  97. package/client/dist/assets/nav-C5Jgfaby.js +1 -0
  98. package/client/dist/assets/nav-CAna_Wpt.js +1 -0
  99. package/client/dist/assets/nav-CCLqeyHo.js +1 -0
  100. package/client/dist/assets/nav-Cf3c90Jk.js +1 -0
  101. package/client/dist/assets/nav-DMYQaQjR.js +1 -0
  102. package/client/dist/assets/nav-Df_PkZ9F.js +1 -0
  103. package/client/dist/assets/nav-VyNGBJwj.js +1 -0
  104. package/client/dist/assets/{project-repositories-CSnfzUpg.js → project-repositories-DXhb9FP4.js} +1 -1
  105. package/client/dist/assets/provider-capabilities-lePfeT_Y.js +1 -0
  106. package/client/dist/assets/save-OsUqVn99.js +1 -0
  107. package/client/dist/assets/settings-B5Hy_Kol.js +1 -0
  108. package/client/dist/assets/settings-BBj_kZaD.js +1 -0
  109. package/client/dist/assets/settings-ByVE7jdZ.js +1 -0
  110. package/client/dist/assets/settings-COlH_P33.js +1 -0
  111. package/client/dist/assets/settings-D77mC_Lb.js +1 -0
  112. package/client/dist/assets/settings-DZKy7MqN.js +1 -0
  113. package/client/dist/assets/settings-Dbyd6gmj.js +1 -0
  114. package/client/dist/assets/settings-Dn-pXukr.js +1 -0
  115. package/client/dist/assets/setup-Be485n2u.js +1 -0
  116. package/client/dist/assets/setup-CKGUxKr-.js +1 -0
  117. package/client/dist/assets/setup-Ck1Uwd7_.js +1 -0
  118. package/client/dist/assets/setup-Cm774a6v.js +1 -0
  119. package/client/dist/assets/setup-DIqMQpxt.js +1 -0
  120. package/client/dist/assets/setup-DfCsoNFL.js +1 -0
  121. package/client/dist/assets/setup-DkeE8mP0.js +1 -0
  122. package/client/dist/assets/setup-xVntVaz1.js +1 -0
  123. package/client/dist/assets/{spending-HBSk-6jv.js → spending-BdcyVkcd.js} +1 -1
  124. package/client/dist/assets/subscriptionUsage-Cf87DeS_.js +1 -0
  125. package/client/dist/assets/subscriptionUsage-D6u7VBdz.js +1 -0
  126. package/client/dist/assets/subscriptionUsage-DQ02J25O.js +1 -0
  127. package/client/dist/assets/subscriptionUsage-DWF3zKp4.js +1 -0
  128. package/client/dist/assets/subscriptionUsage-DkIf6Zuh.js +1 -0
  129. package/client/dist/assets/subscriptionUsage-DoWQv7l1.js +1 -0
  130. package/client/dist/assets/subscriptionUsage-N9hB-ARf.js +1 -0
  131. package/client/dist/assets/subscriptionUsage-zRcRPHkP.js +1 -0
  132. package/client/dist/assets/tauri-shell-DE6LfGPw.js +2 -0
  133. package/client/dist/assets/{useDesktop-0unHDBJJ.js → useDesktop-D07TvesS.js} +1 -1
  134. package/client/dist/assets/{useRuntimeRuns-BN1rhyEm.js → useRuntimeRuns-pGLmtAC6.js} +1 -1
  135. package/client/dist/assets/useSharedWebSocket-TzKtPRp9.js +2 -0
  136. package/client/dist/index.html +33 -32
  137. package/docs/README.md +1 -9
  138. package/docs/agent-live-steering.md +0 -6
  139. package/docs/agents/README.md +0 -2
  140. package/docs/agents/mcp.md +1 -14
  141. package/docs/cli.md +0 -13
  142. package/docs/codex.md +2 -75
  143. package/docs/creating-specs.md +0 -39
  144. package/docs/customizing.md +1 -15
  145. package/docs/getting-started.md +0 -23
  146. package/docs/guide/de/agents/2-profiles-and-the-balanced-default.md +0 -8
  147. package/docs/guide/de/agents/4-custom-agents-catalog.md +0 -15
  148. package/docs/guide/de/getting-started/1-what-is-specrails.md +0 -2
  149. package/docs/guide/de/getting-started/2-installing-and-first-run.md +0 -2
  150. package/docs/guide/de/getting-started/3-adding-your-first-project.md +0 -4
  151. package/docs/guide/de/getting-started/4-the-dashboard-tour.md +0 -5
  152. package/docs/guide/de/integrations/1-ai-providers.md +2 -50
  153. package/docs/guide/de/integrations/2-plugins.md +0 -8
  154. package/docs/guide/de/integrations/5-mcp-server.md +1 -14
  155. package/docs/guide/de/integrations/6-agent-chat.md +0 -11
  156. package/docs/guide/de/integrations/7-local-engines.md +0 -4
  157. package/docs/guide/de/pipeline/1-rails-and-jobs.md +0 -13
  158. package/docs/guide/de/pipeline/2-the-job-detail-view.md +0 -3
  159. package/docs/guide/de/pipeline/4-picking-an-engine-per-rail.md +0 -20
  160. package/docs/guide/de/pipeline/5-the-loop-builder.md +0 -6
  161. package/docs/guide/de/specs/2-add-spec-quick-mode.md +0 -7
  162. package/docs/guide/en/agents/2-profiles-and-the-balanced-default.md +0 -10
  163. package/docs/guide/en/agents/4-custom-agents-catalog.md +0 -25
  164. package/docs/guide/en/getting-started/1-what-is-specrails.md +0 -2
  165. package/docs/guide/en/getting-started/2-installing-and-first-run.md +0 -2
  166. package/docs/guide/en/getting-started/3-adding-your-first-project.md +0 -4
  167. package/docs/guide/en/getting-started/4-the-dashboard-tour.md +0 -5
  168. package/docs/guide/en/insights/3-code-explorer.md +0 -5
  169. package/docs/guide/en/integrations/1-ai-providers.md +10 -99
  170. package/docs/guide/en/integrations/2-plugins.md +0 -8
  171. package/docs/guide/en/integrations/5-mcp-server.md +1 -1
  172. package/docs/guide/en/integrations/6-agent-chat.md +0 -17
  173. package/docs/guide/en/integrations/7-local-engines.md +0 -4
  174. package/docs/guide/en/pipeline/1-rails-and-jobs.md +2 -24
  175. package/docs/guide/en/pipeline/2-the-job-detail-view.md +0 -3
  176. package/docs/guide/en/pipeline/4-picking-an-engine-per-rail.md +10 -65
  177. package/docs/guide/en/pipeline/5-the-loop-builder.md +0 -7
  178. package/docs/guide/en/specs/2-add-spec-quick-mode.md +0 -11
  179. package/docs/guide/es/agents/2-profiles-and-the-balanced-default.md +0 -8
  180. package/docs/guide/es/agents/4-custom-agents-catalog.md +0 -15
  181. package/docs/guide/es/getting-started/1-what-is-specrails.md +0 -2
  182. package/docs/guide/es/getting-started/2-installing-and-first-run.md +0 -2
  183. package/docs/guide/es/getting-started/3-adding-your-first-project.md +0 -4
  184. package/docs/guide/es/getting-started/4-the-dashboard-tour.md +0 -5
  185. package/docs/guide/es/integrations/1-ai-providers.md +10 -75
  186. package/docs/guide/es/integrations/2-plugins.md +0 -8
  187. package/docs/guide/es/integrations/5-mcp-server.md +1 -1
  188. package/docs/guide/es/integrations/6-agent-chat.md +0 -11
  189. package/docs/guide/es/integrations/7-local-engines.md +0 -4
  190. package/docs/guide/es/pipeline/1-rails-and-jobs.md +3 -13
  191. package/docs/guide/es/pipeline/2-the-job-detail-view.md +0 -3
  192. package/docs/guide/es/pipeline/4-picking-an-engine-per-rail.md +10 -53
  193. package/docs/guide/es/pipeline/5-the-loop-builder.md +1 -6
  194. package/docs/guide/es/specs/2-add-spec-quick-mode.md +0 -7
  195. package/docs/guide/fr/agents/2-profiles-and-the-balanced-default.md +0 -8
  196. package/docs/guide/fr/agents/4-custom-agents-catalog.md +0 -15
  197. package/docs/guide/fr/getting-started/1-what-is-specrails.md +0 -2
  198. package/docs/guide/fr/getting-started/2-installing-and-first-run.md +0 -2
  199. package/docs/guide/fr/getting-started/3-adding-your-first-project.md +0 -4
  200. package/docs/guide/fr/getting-started/4-the-dashboard-tour.md +0 -5
  201. package/docs/guide/fr/integrations/1-ai-providers.md +2 -50
  202. package/docs/guide/fr/integrations/2-plugins.md +0 -8
  203. package/docs/guide/fr/integrations/5-mcp-server.md +1 -14
  204. package/docs/guide/fr/integrations/6-agent-chat.md +0 -11
  205. package/docs/guide/fr/integrations/7-local-engines.md +0 -4
  206. package/docs/guide/fr/pipeline/1-rails-and-jobs.md +0 -13
  207. package/docs/guide/fr/pipeline/2-the-job-detail-view.md +0 -3
  208. package/docs/guide/fr/pipeline/4-picking-an-engine-per-rail.md +0 -22
  209. package/docs/guide/fr/pipeline/5-the-loop-builder.md +0 -6
  210. package/docs/guide/fr/specs/2-add-spec-quick-mode.md +0 -7
  211. package/docs/guide/it/agents/2-profiles-and-the-balanced-default.md +0 -8
  212. package/docs/guide/it/agents/4-custom-agents-catalog.md +0 -15
  213. package/docs/guide/it/getting-started/1-what-is-specrails.md +0 -2
  214. package/docs/guide/it/getting-started/2-installing-and-first-run.md +0 -2
  215. package/docs/guide/it/getting-started/3-adding-your-first-project.md +0 -4
  216. package/docs/guide/it/getting-started/4-the-dashboard-tour.md +0 -5
  217. package/docs/guide/it/integrations/1-ai-providers.md +2 -48
  218. package/docs/guide/it/integrations/2-plugins.md +0 -8
  219. package/docs/guide/it/integrations/5-mcp-server.md +1 -14
  220. package/docs/guide/it/integrations/6-agent-chat.md +0 -11
  221. package/docs/guide/it/integrations/7-local-engines.md +0 -4
  222. package/docs/guide/it/pipeline/1-rails-and-jobs.md +2 -13
  223. package/docs/guide/it/pipeline/2-the-job-detail-view.md +0 -3
  224. package/docs/guide/it/pipeline/4-picking-an-engine-per-rail.md +0 -20
  225. package/docs/guide/it/pipeline/5-the-loop-builder.md +1 -6
  226. package/docs/guide/it/specs/2-add-spec-quick-mode.md +0 -7
  227. package/docs/guide/ja/agents/2-profiles-and-the-balanced-default.md +0 -9
  228. package/docs/guide/ja/agents/4-custom-agents-catalog.md +0 -15
  229. package/docs/guide/ja/getting-started/1-what-is-specrails.md +0 -2
  230. package/docs/guide/ja/getting-started/2-installing-and-first-run.md +0 -2
  231. package/docs/guide/ja/getting-started/3-adding-your-first-project.md +0 -4
  232. package/docs/guide/ja/getting-started/4-the-dashboard-tour.md +0 -5
  233. package/docs/guide/ja/integrations/1-ai-providers.md +1 -69
  234. package/docs/guide/ja/integrations/2-plugins.md +0 -8
  235. package/docs/guide/ja/integrations/5-mcp-server.md +1 -14
  236. package/docs/guide/ja/integrations/6-agent-chat.md +0 -10
  237. package/docs/guide/ja/integrations/7-local-engines.md +0 -4
  238. package/docs/guide/ja/pipeline/1-rails-and-jobs.md +0 -13
  239. package/docs/guide/ja/pipeline/2-the-job-detail-view.md +0 -3
  240. package/docs/guide/ja/pipeline/4-picking-an-engine-per-rail.md +0 -21
  241. package/docs/guide/ja/pipeline/5-the-loop-builder.md +0 -6
  242. package/docs/guide/ja/specs/2-add-spec-quick-mode.md +0 -7
  243. package/docs/guide/pt/agents/2-profiles-and-the-balanced-default.md +0 -8
  244. package/docs/guide/pt/agents/4-custom-agents-catalog.md +0 -15
  245. package/docs/guide/pt/getting-started/1-what-is-specrails.md +0 -2
  246. package/docs/guide/pt/getting-started/2-installing-and-first-run.md +0 -2
  247. package/docs/guide/pt/getting-started/3-adding-your-first-project.md +0 -4
  248. package/docs/guide/pt/getting-started/4-the-dashboard-tour.md +0 -5
  249. package/docs/guide/pt/integrations/1-ai-providers.md +2 -48
  250. package/docs/guide/pt/integrations/2-plugins.md +0 -8
  251. package/docs/guide/pt/integrations/5-mcp-server.md +1 -14
  252. package/docs/guide/pt/integrations/6-agent-chat.md +0 -10
  253. package/docs/guide/pt/integrations/7-local-engines.md +0 -4
  254. package/docs/guide/pt/pipeline/1-rails-and-jobs.md +0 -13
  255. package/docs/guide/pt/pipeline/2-the-job-detail-view.md +0 -2
  256. package/docs/guide/pt/pipeline/4-picking-an-engine-per-rail.md +0 -21
  257. package/docs/guide/pt/pipeline/5-the-loop-builder.md +0 -6
  258. package/docs/guide/pt/specs/2-add-spec-quick-mode.md +0 -7
  259. package/docs/guide/zh/agents/2-profiles-and-the-balanced-default.md +0 -7
  260. package/docs/guide/zh/agents/4-custom-agents-catalog.md +0 -15
  261. package/docs/guide/zh/getting-started/1-what-is-specrails.md +0 -2
  262. package/docs/guide/zh/getting-started/2-installing-and-first-run.md +0 -2
  263. package/docs/guide/zh/getting-started/3-adding-your-first-project.md +0 -4
  264. package/docs/guide/zh/getting-started/4-the-dashboard-tour.md +0 -5
  265. package/docs/guide/zh/integrations/1-ai-providers.md +1 -67
  266. package/docs/guide/zh/integrations/2-plugins.md +0 -8
  267. package/docs/guide/zh/integrations/5-mcp-server.md +1 -14
  268. package/docs/guide/zh/integrations/6-agent-chat.md +0 -9
  269. package/docs/guide/zh/integrations/7-local-engines.md +0 -4
  270. package/docs/guide/zh/pipeline/1-rails-and-jobs.md +0 -13
  271. package/docs/guide/zh/pipeline/2-the-job-detail-view.md +0 -2
  272. package/docs/guide/zh/pipeline/4-picking-an-engine-per-rail.md +0 -20
  273. package/docs/guide/zh/pipeline/5-the-loop-builder.md +0 -6
  274. package/docs/guide/zh/specs/2-add-spec-quick-mode.md +0 -7
  275. package/docs/internals/adding-a-provider.md +7 -0
  276. package/docs/internals/desktop-owned-workflows.md +121 -0
  277. package/docs/internals/operations-runbook.md +20 -0
  278. package/docs/internals/programmatic-agent-runtime.md +34 -28
  279. package/docs/internals/project-builder.md +34 -11
  280. package/docs/internals/source-map.md +51 -3
  281. package/docs/internals/spec-addenda.md +11 -5
  282. package/docs/local-providers.md +8 -13
  283. package/docs/mcp.md +1 -17
  284. package/docs/platforms/macos.md +0 -40
  285. package/docs/platforms/windows-parity.md +1 -1
  286. package/docs/platforms/windows.md +0 -8
  287. package/docs/running-pipelines.md +1 -46
  288. package/docs/subscription-usage.md +19 -0
  289. package/docs/terminal.md +0 -2
  290. package/docs/tracking-cost.md +2 -33
  291. package/package.json +1 -1
  292. package/server/dist/core-execution.js +24 -15
  293. package/server/dist/desktop-db.js +23 -10
  294. package/server/dist/desktop-router.js +8 -4
  295. package/server/dist/index.js +10 -5
  296. package/server/dist/mcp/guide.js +1 -0
  297. package/server/dist/mcp/tools/jobs.js +1 -1
  298. package/server/dist/mcp/tools/loops.js +2 -0
  299. package/server/dist/mcp/tools/meta.js +6 -7
  300. package/server/dist/mcp/tools/projects.js +31 -6
  301. package/server/dist/mcp/tools/rails.js +6 -3
  302. package/server/dist/mcp/tools/setup.js +10 -0
  303. package/server/dist/mcp/tools/specs.js +1 -1
  304. package/server/dist/modules/accounting/runtime/pricing.js +6 -1
  305. package/server/dist/modules/agent-runtime/runtime/agent-runtime-bridge.js +55 -12
  306. package/server/dist/modules/agent-runtime/runtime/agent-runtime-metrics.js +1 -1
  307. package/server/dist/modules/agent-runtime/runtime/agent-runtime-settings-router.js +1 -1
  308. package/server/dist/modules/agent-runtime/runtime/agent-runtime-settings.js +42 -0
  309. package/server/dist/modules/agent-runtime/runtime/agent-runtime-verification-suggestions.js +10 -4
  310. package/server/dist/modules/builder/runtime/milestone-chain.js +76 -10
  311. package/server/dist/modules/delivery/runtime/delivery-evidence.js +3 -2
  312. package/server/dist/modules/delivery/runtime/multi-repo-execution.js +3 -0
  313. package/server/dist/modules/delivery/runtime/rail-isolated-launch.js +1 -0
  314. package/server/dist/modules/delivery/runtime/rail-launch-parser.js +8 -0
  315. package/server/dist/modules/delivery/runtime/rails-router.js +48 -26
  316. package/server/dist/modules/delivery/runtime/review-packet.js +1 -1
  317. package/server/dist/modules/loops/runtime/loop-agent-defaults.json +6 -0
  318. package/server/dist/modules/loops/runtime/loop-agents.js +21 -0
  319. package/server/dist/modules/loops/runtime/loop-command-catalog.js +1 -1
  320. package/server/dist/modules/loops/runtime/loop-core-factory.js +19 -3
  321. package/server/dist/modules/loops/runtime/loop-definition.js +79 -12
  322. package/server/dist/modules/loops/runtime/loop-effect.js +1 -1
  323. package/server/dist/modules/loops/runtime/loop-executors.js +24 -9
  324. package/server/dist/modules/loops/runtime/loop-factory.js +1 -1
  325. package/server/dist/modules/loops/runtime/loop-graph.js +5 -14
  326. package/server/dist/modules/loops/runtime/loop-implement-recipe.js +49 -0
  327. package/server/dist/modules/loops/runtime/loop-run-manager.js +3 -3
  328. package/server/dist/modules/loops/runtime/loop-templates.js +29 -5
  329. package/server/dist/modules/loops/runtime/loops-router.js +17 -0
  330. package/server/dist/modules/missions/runtime/agent-context-resolver.js +1 -1
  331. package/server/dist/modules/missions/runtime/agent-operator-prompt.js +17 -8
  332. package/server/dist/modules/specs/runtime/spec-models.js +4 -7
  333. package/server/dist/modules/subscription-usage/adapters/claude.js +113 -0
  334. package/server/dist/modules/subscription-usage/adapters/codex.js +164 -0
  335. package/server/dist/modules/subscription-usage/adapters/errors.js +15 -0
  336. package/server/dist/modules/subscription-usage/adapters/http.js +20 -0
  337. package/server/dist/modules/subscription-usage/adapters/local-auth.js +61 -0
  338. package/server/dist/modules/subscription-usage/application.js +11 -0
  339. package/server/dist/modules/subscription-usage/domain.js +70 -0
  340. package/server/dist/modules/subscription-usage/index.js +2 -0
  341. package/server/dist/modules/subscription-usage/ports.js +2 -0
  342. package/server/dist/modules/subscription-usage/runtime/composition.js +20 -0
  343. package/server/dist/modules/subscription-usage/runtime/usage-service.js +111 -0
  344. package/server/dist/project-registry.js +16 -1
  345. package/server/dist/project-repositories.js +51 -2
  346. package/server/dist/project-router-helpers.js +1 -1
  347. package/server/dist/project-router-loop-runs.js +4 -1
  348. package/server/dist/providers/claude-adapter.js +6 -4
  349. package/server/dist/providers/codex-adapter.js +4 -5
  350. package/server/dist/schemas/workflow-definition.schema.json +2 -0
  351. package/client/dist/assets/AgentBrowserCapture-PI-cxyxi.js +0 -1
  352. package/client/dist/assets/AgentModeAnalyticsPane-mQsOqdXx.js +0 -2
  353. package/client/dist/assets/AgentModeCodePane-BL-vpmlY.js +0 -2
  354. package/client/dist/assets/CodePage-Alitorrv.js +0 -3
  355. package/client/dist/assets/DocsDialog-DwL6rgcT.js +0 -11
  356. package/client/dist/assets/DocsPage-BA1hiJZ-.js +0 -11
  357. package/client/dist/assets/InteractiveJobComposer-B3H1YHr6.js +0 -19
  358. package/client/dist/assets/JobDetailModal-XZQ9eAAy.js +0 -1
  359. package/client/dist/assets/JobDetailPage-B-SIaq_q.js +0 -1
  360. package/client/dist/assets/JobsPage-iQXAv2mx.js +0 -1
  361. package/client/dist/assets/LoopBuilderPage-B_gbFAHn.js +0 -1
  362. package/client/dist/assets/LoopsPage-BZwcY5cu.js +0 -2
  363. package/client/dist/assets/MinimizedChatsContext-CNx_0bZu.js +0 -1
  364. package/client/dist/assets/PluginsPage-DFocnoHX.js +0 -2
  365. package/client/dist/assets/ProjectSettingsDialog-Bh3S6EBB.js +0 -1
  366. package/client/dist/assets/RepositoryScopeSelector-C2mvWBQ6.js +0 -1
  367. package/client/dist/assets/ReviewPacketPage-CrAf-WDy.js +0 -4
  368. package/client/dist/assets/TemplatePreviewModal-C7DordpN.js +0 -1
  369. package/client/dist/assets/TicketDetailModalContext-B-DySpKL.js +0 -16
  370. package/client/dist/assets/agent-BaG10AN6.js +0 -1
  371. package/client/dist/assets/agent-CH4aJ884.js +0 -1
  372. package/client/dist/assets/agent-CLc9fA7v.js +0 -1
  373. package/client/dist/assets/agent-DHh9-AdL.js +0 -1
  374. package/client/dist/assets/agent-DkKnd6Wv.js +0 -1
  375. package/client/dist/assets/agent-aiVhqFW1.js +0 -1
  376. package/client/dist/assets/agent-dbznD3eO.js +0 -1
  377. package/client/dist/assets/agent-sMVFcPwL.js +0 -1
  378. package/client/dist/assets/agentRuntime-BeUb3g9g.js +0 -1
  379. package/client/dist/assets/file-text-CFT-xXKN.js +0 -1
  380. package/client/dist/assets/index-BS7KCWkV.css +0 -2
  381. package/client/dist/assets/index-C4Mv6tV6.js +0 -80
  382. package/client/dist/assets/integrations-CH0zy1Mw.js +0 -1
  383. package/client/dist/assets/integrations-CIAjhd7L.js +0 -1
  384. package/client/dist/assets/integrations-CZdwOe8A.js +0 -1
  385. package/client/dist/assets/integrations-Ct7omMld.js +0 -1
  386. package/client/dist/assets/integrations-D6MSxy3-.js +0 -1
  387. package/client/dist/assets/integrations-DbZa-Zyc.js +0 -1
  388. package/client/dist/assets/integrations-b8pH-vfl.js +0 -1
  389. package/client/dist/assets/integrations-mB-7zoyT.js +0 -1
  390. package/client/dist/assets/jira-api-BYbEPlkr.js +0 -1
  391. package/client/dist/assets/layers-eDMjG41I.js +0 -1
  392. package/client/dist/assets/loops-B4_D-nbg.js +0 -1
  393. package/client/dist/assets/nav-B-tpjyc2.js +0 -1
  394. package/client/dist/assets/nav-BJNXGg29.js +0 -1
  395. package/client/dist/assets/nav-BdhtRLP7.js +0 -1
  396. package/client/dist/assets/nav-ByYgyN5T.js +0 -1
  397. package/client/dist/assets/nav-DA0Mva2c.js +0 -1
  398. package/client/dist/assets/nav-DcJm_Jg_.js +0 -1
  399. package/client/dist/assets/nav-DhMPtAXc.js +0 -1
  400. package/client/dist/assets/nav-DhPb-Isc.js +0 -1
  401. package/client/dist/assets/provider-capabilities-Vi1ZGvAK.js +0 -1
  402. package/client/dist/assets/save-B6wGWwBR.js +0 -1
  403. package/client/dist/assets/settings-3o4Ntzi5.js +0 -1
  404. package/client/dist/assets/settings-B97jlkwD.js +0 -1
  405. package/client/dist/assets/settings-BTaT_bsS.js +0 -1
  406. package/client/dist/assets/settings-CT8w7WiC.js +0 -1
  407. package/client/dist/assets/settings-Cvr8_tvh.js +0 -1
  408. package/client/dist/assets/settings-Dn1qgAC8.js +0 -1
  409. package/client/dist/assets/settings-EShDdg4J.js +0 -1
  410. package/client/dist/assets/settings-tfLhQZRN.js +0 -1
  411. package/client/dist/assets/setup-CBMu3tqH.js +0 -1
  412. package/client/dist/assets/setup-CPh-e6J2.js +0 -1
  413. package/client/dist/assets/setup-CRKLp_ke.js +0 -1
  414. package/client/dist/assets/setup-Cy302v4J.js +0 -1
  415. package/client/dist/assets/setup-D681vTPf.js +0 -1
  416. package/client/dist/assets/setup-DYK0VBkE.js +0 -1
  417. package/client/dist/assets/setup-KAuiIiVs.js +0 -1
  418. package/client/dist/assets/setup-OGX-oCfI.js +0 -1
  419. package/client/dist/assets/useSharedWebSocket-BZMrX4jr.js +0 -2
  420. package/client/dist/assets/wrench-BfmNO9Vw.js +0 -1
  421. package/docs/agy-cli-provider-study.md +0 -257
  422. package/docs/gemini-cli-provider-study.md +0 -301
  423. package/docs/gemini-core-support-evaluation.md +0 -160
  424. package/docs/gemini.md +0 -257
  425. package/docs/kimi.md +0 -291
@@ -229,3 +229,23 @@ and runner-minute changes must be measured from subsequent runs.
229
229
 
230
230
 
231
231
  CI partitioning and reuse of verified frontend assets are described in [CI performance](ci-performance.md).
232
+
233
+
234
+ ### Loop editor windows
235
+
236
+ Mission mode opens the loop manager in a modal with **Open in window**. Board mode
237
+ retains the embedded editor and provides **Open in window** in the library and
238
+ builder toolbars. The builder saves its draft before opening the window; publish
239
+ remains explicit. Each window retains its own project selection and editor state.
240
+ In browser development the same surface opens as a popup (allow popups for the
241
+ local development origin). Native changes require restarting `npm run dev:desktop`
242
+ to rebuild the Tauri command. The `native-mission-window-smoke` fixture also checks
243
+ loop target routing, duplicate focus, independent minimization and close cleanup.
244
+
245
+
246
+ Plugins follows the same behavior: a modal with **Open in window** in Mission mode,
247
+ and an embedded page with **Open in window** in Board mode. A successful window
248
+ opening dismisses the Mission modal; a failure leaves it open. Reopening focuses
249
+ the existing manager, preserving open forms. Restart `npm run dev:desktop` after
250
+ updating the native `plugin_window_open` command. Browser development requires
251
+ popups for the local origin. The native window smoke fixture covers Plugins too.
@@ -1,12 +1,12 @@
1
1
  # Programmatic agent runtime
2
2
 
3
- Desktop can hand implementation to Core's **runtime API 1**. Core runs architect, developer, fixer, deterministic verification, reviewer and archive as separate LangGraph phases. Desktop keeps project/worktree selection, rail lifecycle, logs, accounting and delivery ownership.
3
+ Desktop owns the Implement, Freestyle and Quick SDD workflow graphs and their loop agent definitions. With Core's `implementationSteps: 1` capability, Implement invokes architect, developer, fixer, deterministic verification, reviewer and archive as independent operations. Core executes the graph through LangGraph and owns durable evidence and recovery. Desktop keeps project/worktree selection, rail lifecycle, logs, accounting and delivery ownership.
4
4
 
5
5
  This is the only implementation engine in the current source tree. It applies to implementation rail steps and their Core completion check. Mission chat and unrelated AI features keep their existing transports. Provider-native implementation prompts and skills are not invoked inside the programmatic phases.
6
6
 
7
7
  ## Build the paired source
8
8
 
9
- Use Node **20.19.0+** for Core; Node **22.22.3** matches Desktop's native CI runtime. Provider requirements can be higher. Both repositories' dependencies must be installed.
9
+ Use Node **22.22.3+** for Core; Node **22.22.3** matches Desktop's native CI runtime. Provider requirements can be higher. Both repositories' dependencies must be installed.
10
10
 
11
11
  ```sh
12
12
  cd ../specrails-core
@@ -53,31 +53,30 @@ Desktop negotiates `runtime api` and sends configuration to `runtime validate --
53
53
 
54
54
  `SPECRAILS_CORE_RUNTIME_PATH` selects this execution module. The existing `SPECRAILS_CORE_BIN` controls the installation/lifecycle resolver and is a different setting. Prefer a paired source bundle when testing the complete installation and execution flow.
55
55
 
56
- ## Configure a project
57
-
58
- 1. Open **Project settings → Agent runtime** (its own section in the project dialog).
59
- 2. Choose a provider per role. The model dropdown lists each CLI's catalog with the default marked; turns, attempts and timeout show their defaults in the fields. Claude, Codex, Gemini and Kimi remain available; open **General settings → Specrails Agents → Provider connections** to add an OpenAI-compatible endpoint for a local or remote model (local endpoints do not require a key; API providers need an explicit model).
60
- 3. Verification commands are optional. A project that never saved runtime settings is prefilled with the checks Desktop detects offline (`package.json` test/type-check/lint scripts with the right package manager, Cargo, Go, pytest, Gradle, Maven, .NET, Make); **Detect project checks** re-runs that detection. Each row is a repository plus one command line (`npm run test -- --strict`; quotes group arguments). Leave the list empty and the architect proposes the project's own checks on each run; repositories with no automated check are still reviewed and recorded as unverified in Core's receipt.
61
- 4. **Review gate** and **Architect confidence** are optional. Review thresholds (overall score and the five aspects: type correctness, pattern adherence, test coverage, security, architectural alignment) can only *tighten* Core's own gate: the floors are 70 overall, 75 for security and 60 for every other aspect, and Desktop rejects lower values before saving (`Review threshold review.minScore must be at least 70 (Core's own review gate)`). Empty fields omit the key so Core's defaults apply. `architect.onLowConfidence` decides what happens when, after one autonomous investigation pass, the architect's design is still low in confidence: `ask` (default) pauses the run with the architect's question; `proceed` continues on stated assumptions.
62
- 5. Save the project settings. Implementation always uses the agent runtime.
63
- 6. Start an implementation through the normal rail flow.
64
-
65
- Settings are saved at `<project execution .specrails directory>/agent-runtime.json`. Missing configuration uses the default agent runtime. The retired enabled flag cannot select another engine. Malformed configuration blocks admission; it is not ignored. Saving verifies that Core exposes the expected API. Connections are stored globally in `~/.specrails/runtime-providers.json`; project files retain role references, models, limits and verification. Existing embedded connections migrate once, with stable disambiguated IDs on endpoint conflicts. New runs freeze the resolved configuration, while saved runs retain their original snapshot.
66
-
67
- With a paired Core advertising `openRoles: 1`, **Custom roles** adds named project
68
- roles with their own provider, model, prompt and explicit source/artifact access.
69
- New roles start with read-only source access and no artifact writes. Artifact
70
- access is independent: an analyst may read code and write OpenSpec documents
71
- without gaining source write access. Optional OpenSpec skills use the provider's
72
- native syntax. Custom roles reuse effort, turns and escalation controls; escalation
73
- can use the one permitted protocol repair and does not add another retry. Existing
74
- architect/developer/reviewer policies remain fixed. Removing a custom role affects
75
- future runs; admitted runs retain their frozen role configuration. Older Core
76
- packages keep ordinary settings available and reject saving unsupported roles.
77
-
78
- **A package of a larger checkout.** A repository registered as a subdirectory of its git checkout (for example `apps/web` inside a monorepo) is isolated in a worktree of the whole checkout, so Desktop passes that directory to Core as the repository `scope` in `desktop-context.json` (Core capability `repositoryScope`). Configured checks run inside the package: a check without `cwd`, or with a `cwd` relative to the registered directory, never runs at the checkout root, where a monorepo test script fans out to every workspace. Core keeps the change inside the scope: after each developer or fixer turn it undoes edits outside it, the reviewer judges only the git change set measured against the run's base, a check that fails for missing credentials, variables or registry access stops the run for the host instead of starting a correction round, and a correction loop that stops converging stops with the reason instead of repeating the same checks. Runs admitted before scopes existed keep their frozen whole-checkout context.
79
-
80
- Core owns role instructions and permissions. The developer role edits and runs commands inside its CLI sandbox (the same autonomy as the legacy Implement step); architect and reviewer are read-only. A legacy rail profile/model selection does not override the runtime's per-role provider configuration. The JSON schema is [server/schemas/agent-runtime.schema.json](../../server/schemas/agent-runtime.schema.json), mirrored from Core. For a complete configuration, custom executor examples, Kimi capabilities and API tooling details, see [Core's runtime guide](https://github.com/fjpulidop/specrails-core/blob/main/docs/agent-runtime.md) in the paired revision.
56
+ ## Configure a loop and its project checks
57
+
58
+ 1. Open the loop builder and edit **Loop agents**. Definitions, models, effort,
59
+ turn limits, fixer routing, custom roles and workflow policy belong to the loop.
60
+ Publishing a builtin applies to future runs in every project; duplicate it for
61
+ a specialized flow.
62
+ 2. Configure provider connections under **General settings → Specrails Agents →
63
+ Provider connections**. Connections remain global; loop agents reference them.
64
+ 3. Open **Project settings → Verification commands** for repository checks.
65
+ **Detect project checks** finds local commands without AI. Each row retains its
66
+ repository, command, arguments and metadata. With no configured checks the
67
+ Implement architect proposes checks; unverified repositories remain explicit.
68
+ 4. Publish the loop and launch it through the normal rail flow. Review thresholds
69
+ may only tighten Core's floors (70 overall, 75 security, 60 other aspects).
70
+ Archive approval and low-confidence architect behavior are loop policies.
71
+
72
+ Only verification is read from the project's `.specrails/agent-runtime.json` for
73
+ new loop-owned recipes. Historical roles remain available for explicit import
74
+ and old saved graphs. The editor never silently imports a project's settings
75
+ into a shared builtin. Connections remain in `~/.specrails/runtime-providers.json`.
76
+ Admission freezes the resolved graph, roles, checks and Core package; resume
77
+ uses that snapshot. See [migration and recovery](desktop-owned-workflows.md).
78
+
79
+ Desktop owns editable role definitions; Core owns their artifact protocol and execution permissions. The developer role edits and runs commands inside its CLI sandbox (the same autonomy as the legacy Implement step); architect and reviewer are read-only. A legacy rail profile/model selection does not override the runtime's per-role provider configuration. The JSON schema is [server/schemas/agent-runtime.schema.json](../../server/schemas/agent-runtime.schema.json), mirrored from Core. For a complete configuration, custom executor examples, Kimi capabilities and API tooling details, see [Core's runtime guide](https://github.com/fjpulidop/specrails-core/blob/main/docs/agent-runtime.md) in the paired revision.
81
80
 
82
81
  The built-in Claude adapter supports its native dollar cap. Built-in Codex, Gemini, Kimi and OpenAI-compatible adapters reject `maxCostUsd`; remove that limit for mixed-provider/local runs. Kimi also rejects token caps because its usage is unavailable. Unknown cost/tokens remain unknown in accounting, rather than becoming zero. Attempt, timeout and tool limits remain available. Existing provider services, licenses and inference costs are separate from the free open-source orchestration runtime.
83
82
 
@@ -98,7 +97,7 @@ The rail creates a frozen Core execution context for its original repository/wor
98
97
 
99
98
  A run pauses (Core exit code 2) either on an **approval** (`pendingApproval`, for example before archive) or on a **question** (`pendingQuestion: { stepId, requestedAt, question }`) when the architect is configured to ask on low confidence. A pending question can only be resumed together with an answer: the runs panel shows the question with a textarea and an **Answer and resume** action, which posts `{ "answer": "…" }` (nonempty, at most 20,000 characters). Resuming without an answer while a question is open is rejected with `400 answer_required`. Once Core records `answeredAt`, the question is history and ordinary resume applies again. The bridge reports a paused run's reason in the job log: awaiting approval, or the pending question text.
100
99
 
101
- **Implementation cards and job detail** expose resume, archive approval, question answering, interrupted-step recovery and continuation cancellation actions next to the work. Cards query their latest job by original rail identity; job detail queries its exact run. Legacy jobs render no runtime panel. **Jobs → Saved executions** retains the cross-run history. Project settings contain runtime configuration only. A continuation resumes from the phase shown, in the original worktree, and writes its progress into that job's log (a `[runtime] continuation started from phase …` banner, tool activity, phase notes and the final outcome). Resuming a run that stopped at the developer attempt limit grants a fresh attempt budget. Wait for the original rail execution to settle before resuming. Active rail jobs are stopped through their job controls; the continuation's Cancel action owns only continuations started from this panel.
100
+ **Implementation cards and job detail** expose resume, archive approval, question answering, interrupted-step recovery and continuation cancellation actions next to the work. Cards query their latest job by original rail identity; job detail queries its exact run. Legacy jobs render no runtime panel. **Jobs → Saved executions** retains the cross-run history. Project settings contain repository verification commands; the loop owns agents and policy. A continuation resumes from the phase shown, in the original worktree, and writes its progress into that job's log (a `[runtime] continuation started from phase …` banner, tool activity, phase notes and the final outcome). Resuming a run that stopped at the developer attempt limit grants a fresh attempt budget. Wait for the original rail execution to settle before resuming. Active rail jobs are stopped through their job controls; the continuation's Cancel action owns only continuations started from this panel.
102
101
 
103
102
  Resume retains valid completed phases and rechecks Core evidence. Changed code or environment requires fresh verification/review. An ambiguous interrupted write requires an explicit recovery action after inspecting partial changes. A changed frozen config/identity requires a new run. Missing original worktrees or mismatched execution manifests block recovery; the controller never invents a replacement worktree.
104
103
 
@@ -327,3 +326,10 @@ default. Workflow duration/cost/token budgets and cancellation still apply.
327
326
  Role repair and session fallback retain the selected bounds, including Kimi ACP
328
327
  transport. A verification prompt reporting `LOOP_BLOCKED` pauses for the human
329
328
  answer before its success sentinel can be accepted.
329
+
330
+ ## Loop-owned workflows
331
+
332
+ New Desktop recipes on Core with `implementationSteps: 1` own their graph and
333
+ agent definitions. Project settings retain verification commands. See
334
+ [workflow ownership, migration and frozen recovery](desktop-owned-workflows.md).
335
+ Historical project role fields remain readable for legacy runs and explicit import.
@@ -529,15 +529,14 @@ execution (one spec per rail) and can use Kimi.
529
529
  route over loopback (`server/internal-api.ts`, lifted from the MCP tools'
530
530
  `apiCall`) so every existing guard applies and each 4xx becomes a typed
531
531
  `pause_reason` (`launch_rejected:<error>`). The chain
532
- the next chunk when the in-flight chunk's DELIVERY settles — the manager taps
533
- the project's bound broadcast for `rail.pr_state` (the engine's
534
- `onLoopRunFinished` fires BEFORE the delivery row leaves `building`, so it is
535
- only the delivery-less shared-cwd fallback, recording `last_run_outcome` to
536
- name the pause reason) — and **STACKS** it: chunk k+1 launches with
537
- `baseBranch = chunk k's delivered branch` (the rails launch route's new
538
- `baseBranch` param → `resolveIntegrationBranch({ explicit })`, recorded as
539
- the delivery's `base_branch`, so a walking skeleton accumulates without
540
- waiting for a merge). `no_changes` keeps the previous head; failure /
532
+ advances the next chunk only after the in-flight delivery is integrated.
533
+ The manager taps the project's bound `rail.pr_state` broadcast and uses the
534
+ ordinary guarded local decision route to integrate the completed spec.
535
+ `onLoopRunFinished` remains the delivery-less shared-cwd fallback.
536
+ Chunk k+1 starts from the accumulated integration branch; an integration
537
+ failure retains the current delivery for retry and never allocates the next
538
+ worktree. `no_changes` is acknowledged through the same decision surface.
539
+ Failure /
541
540
  stall / stop / launch refusal / missing head / discarded head / lost run
542
541
  PAUSE the chain (`chunk_failed | chunk_stalled | chunk_stopped |
543
542
  launch_rejected:<e> | head_missing | head_discarded | run_lost`) — never
@@ -572,7 +571,7 @@ execution (one spec per rail) and can use Kimi.
572
571
  omitted; the UI sends the user's stored preference
573
572
  `localStorage['specrails-desktop:milestone-auto-advance']`, default ON)
574
573
  and a non-terminal status `awaiting_approval`. When a chunk's delivery
575
- settles successfully and auto-advance is off (and chunks remain), the
574
+ integrates successfully and auto-advance is off (and chunks remain), the
576
575
  manager records the head and parks the chain at `awaiting_approval`
577
576
  (`afterChunkSuccess`) instead of launching — a HEALTHY decision point, unlike
578
577
  `paused` whose Resume retries the SAME chunk. `…/chains/:id/resume` launches
@@ -588,7 +587,8 @@ execution (one spec per rail) and can use Kimi.
588
587
  excludes a checkpoint (`milestone-progress.ts`). The former **Parallel**
589
588
  option and the `SPECRAILS_MILESTONE_CHAIN=false` kill switch were removed
590
589
  (`remove-batch-and-sequential-builder`); completed `mode: 'parallel'` rows
591
- already in the database still render ("Parallel launch"). Merging a STACKED
590
+ already in the database still render ("Parallel launch"). Historical STACKED
591
+ chains remain supported: merging a stacked
592
592
  chunk sweeps its merged ancestors (`sweepMergedChainAncestors` in
593
593
  `rail-pr-decision.ts`: chain-local, `git merge-base --is-ancestor`, same
594
594
  CAS + ticket effect + Jira hook) and merge-local integrates into the CHAIN's
@@ -706,3 +706,26 @@ Minimize-to-dock for Builder conversations (no `projectId` to tag — resume is
706
706
  now the hero list instead), an orphan-dir startup sweeper, non-GitHub remotes,
707
707
  editing an existing blueprint via the day-0 Builder, a live side-panel draft
708
708
  during M2 generation, an app-driven repair turn for M2+ (ChatManager path).
709
+
710
+ ## Incremental spec integration
711
+
712
+ The production milestone chain integrates each fully implemented spec through
713
+ `POST /rails/pr-decision` (`merge-local`, or acknowledgement for no changes)
714
+ before creating the next worktree. The next spec starts from the accumulated
715
+ integration branch. It no longer stacks production launches on undecided feature
716
+ branches or carries previous delivery IDs as the next worktree's base.
717
+
718
+ The chain retains its current delivery while `waiting` with
719
+ `integration_pending`. Duplicate settle events cannot start a second integration.
720
+ Only a durable `merged`/`completed` delivery allows advancement. Conflicts,
721
+ unconfirmed decisions or partially implemented specs pause the chain. Resume
722
+ retries failed integration, not implementation; startup recovers pending
723
+ integration. The existing per-spec checkpoint happens after integration when
724
+ auto-continue is disabled. Cancellation stops further advancement.
725
+
726
+ The regular local-merge path retains repository locks, clean-checkout checks,
727
+ isolated assembly, exact verified commits, ticket effects and recovery evidence.
728
+ An existing remote PR still uses remote merge authority and blocks local merge.
729
+ Legacy adapters without an integration port keep their old stacking behavior.
730
+ Tests cover three real Git worktrees accumulating one project, duplicate events,
731
+ failed integration/resume and a restart before integration settlement.
@@ -5,7 +5,7 @@ architectural dependency declaration. Search a heading or filename and read only
5
5
  the relevant source and tests. Feature prefixes group the legacy server files;
6
6
  new bounded modules live under `server/modules/`.
7
7
 
8
- Includes 982 source/build files. Nearby tests are linked where names
8
+ Includes 1012 source/build files. Nearby tests are linked where names
9
9
  match; integration suites may live elsewhere. Use `rg` to find other consumers.
10
10
 
11
11
  ## cli
@@ -33,6 +33,7 @@ match; integration suites may live elsewhere. Use `rg` to find other consumers.
33
33
 
34
34
  - [ArcSidebar.tsx](../../client/src/components/ArcSidebar.tsx) · [test](../../client/src/components/__tests__/ArcSidebar.test.tsx)
35
35
  - [CommandPalette.tsx](../../client/src/components/CommandPalette.tsx) · [test](../../client/src/components/__tests__/CommandPalette.test.tsx)
36
+ - [KeepAwakeControl.tsx](../../client/src/components/KeepAwakeControl.tsx) · [test](../../client/src/components/__tests__/KeepAwakeControl.test.tsx)
36
37
  - [KeyboardShortcutsCheatsheet.tsx](../../client/src/components/KeyboardShortcutsCheatsheet.tsx) · [test](../../client/src/components/__tests__/KeyboardShortcutsCheatsheet.test.tsx)
37
38
  - [ProjectLayout.tsx](../../client/src/components/ProjectLayout.tsx) · [test](../../client/src/components/__tests__/ProjectLayout.test.tsx)
38
39
  - [ProjectRightSidebar.tsx](../../client/src/components/ProjectRightSidebar.tsx) · [test](../../client/src/components/__tests__/ProjectRightSidebar.test.tsx)
@@ -377,9 +378,11 @@ match; integration suites may live elsewhere. Use `rg` to find other consumers.
377
378
  - [CoreParameterForm.tsx](../../client/src/features/loops/components/CoreParameterForm.tsx) · [test](../../client/src/features/loops/components/__tests__/CoreParameterForm.test.tsx)
378
379
  - [CoreWorkflowInspector.tsx](../../client/src/features/loops/components/CoreWorkflowInspector.tsx) · [test](../../client/src/features/loops/components/__tests__/CoreWorkflowInspector.test.tsx)
379
380
  - [LegacyConversionModal.tsx](../../client/src/features/loops/components/LegacyConversionModal.tsx) · [test](../../client/src/features/loops/components/__tests__/LegacyConversionModal.test.tsx)
381
+ - [LoopAgentsEditor.tsx](../../client/src/features/loops/components/LoopAgentsEditor.tsx) · [test](../../client/src/features/loops/components/LoopAgentsEditor.test.tsx)
380
382
  - [LoopMigrationPanel.tsx](../../client/src/features/loops/components/LoopMigrationPanel.tsx) · [test](../../client/src/features/loops/components/__tests__/LoopMigrationPanel.test.tsx)
381
383
  - [LoopPreviewModal.tsx](../../client/src/features/loops/components/LoopPreviewModal.tsx)
382
384
  - [LoopRunModal.tsx](../../client/src/features/loops/components/LoopRunModal.tsx) · [test](../../client/src/features/loops/components/__tests__/LoopRunModal.test.tsx)
385
+ - [LoopWindowSurface.tsx](../../client/src/features/loops/components/LoopWindowSurface.tsx) · [test](../../client/src/features/loops/components/__tests__/LoopWindowSurface.test.tsx)
383
386
  - [TemplatePreviewModal.tsx](../../client/src/features/loops/components/TemplatePreviewModal.tsx) · [test](../../client/src/features/loops/components/__tests__/TemplatePreviewModal.test.tsx)
384
387
 
385
388
  ## client/src/features/loops/components/loop-log
@@ -412,6 +415,7 @@ match; integration suites may live elsewhere. Use `rg` to find other consumers.
412
415
  - [loop-template-filter.ts](../../client/src/features/loops/lib/loop-template-filter.ts) · [test](../../client/src/features/loops/lib/__tests__/loop-template-filter.test.ts)
413
416
  - [loop-ticket-need.ts](../../client/src/features/loops/lib/loop-ticket-need.ts) · [test](../../client/src/features/loops/lib/__tests__/loop-ticket-need.test.ts)
414
417
  - [loop-validate.ts](../../client/src/features/loops/lib/loop-validate.ts) · [test](../../client/src/features/loops/lib/__tests__/loop-validate.test.ts)
418
+ - [loop-windows.ts](../../client/src/features/loops/lib/loop-windows.ts) · [test](../../client/src/features/loops/lib/__tests__/loop-windows.test.ts)
415
419
  - [loops-api.ts](../../client/src/features/loops/lib/loops-api.ts) · [test](../../client/src/features/loops/lib/__tests__/loops-api.test.ts)
416
420
 
417
421
  ## client/src/features/loops/pages
@@ -450,11 +454,14 @@ match; integration suites may live elsewhere. Use `rg` to find other consumers.
450
454
  - [AgentRailLaunchCard.tsx](../../client/src/features/missions/components/AgentRailLaunchCard.tsx)
451
455
  - [AgentRefChip.tsx](../../client/src/features/missions/components/AgentRefChip.tsx)
452
456
  - [AgentRunFailureMarker.tsx](../../client/src/features/missions/components/AgentRunFailureMarker.tsx)
457
+ - [AgentRuntimeSelector.tsx](../../client/src/features/missions/components/AgentRuntimeSelector.tsx)
453
458
  - [AgentSpecDraftCard.tsx](../../client/src/features/missions/components/AgentSpecDraftCard.tsx)
454
459
  - [AgentThinkingHalo.tsx](../../client/src/features/missions/components/AgentThinkingHalo.tsx) · [test](../../client/src/features/missions/components/__tests__/AgentThinkingHalo.test.tsx)
455
460
  - [AgentTierChip.tsx](../../client/src/features/missions/components/AgentTierChip.tsx)
456
461
  - [AgentToolbarSelector.tsx](../../client/src/features/missions/components/AgentToolbarSelector.tsx)
457
462
  - [AgentWorkspaceSidebar.tsx](../../client/src/features/missions/components/AgentWorkspaceSidebar.tsx) · [test](../../client/src/features/missions/components/__tests__/AgentWorkspaceSidebar.test.tsx)
463
+ - [MissionConversationMenu.tsx](../../client/src/features/missions/components/MissionConversationMenu.tsx)
464
+ - [MissionSplitLayout.tsx](../../client/src/features/missions/components/MissionSplitLayout.tsx) · [test](../../client/src/features/missions/components/__tests__/MissionSplitLayout.test.tsx)
458
465
  - [MissionWindowAction.tsx](../../client/src/features/missions/components/MissionWindowAction.tsx) · [test](../../client/src/features/missions/components/__tests__/MissionWindowAction.test.tsx)
459
466
  - [MissionWindowBindings.tsx](../../client/src/features/missions/components/MissionWindowBindings.tsx) · [test](../../client/src/features/missions/components/MissionWindowBindings.test.tsx)
460
467
  - [MissionWindowSurface.tsx](../../client/src/features/missions/components/MissionWindowSurface.tsx)
@@ -477,6 +484,7 @@ match; integration suites may live elsewhere. Use `rg` to find other consumers.
477
484
  - [AgentChatContext.tsx](../../client/src/features/missions/context/AgentChatContext.tsx) · [test](../../client/src/features/missions/context/AgentChatContext.test.tsx)
478
485
  - [AgentWorkspaceContext.tsx](../../client/src/features/missions/context/AgentWorkspaceContext.tsx) · [test](../../client/src/features/missions/context/__tests__/AgentWorkspaceContext.test.tsx)
479
486
  - [MinimizedChatsContext.tsx](../../client/src/features/missions/context/MinimizedChatsContext.tsx) · [test](../../client/src/features/missions/context/__tests__/MinimizedChatsContext.test.tsx)
487
+ - [MissionSplitViewsContext.tsx](../../client/src/features/missions/context/MissionSplitViewsContext.tsx)
480
488
  - [MissionWindowsContext.tsx](../../client/src/features/missions/context/MissionWindowsContext.tsx) · [test](../../client/src/features/missions/context/__tests__/MissionWindowsContext.test.tsx)
481
489
 
482
490
  ## client/src/features/missions/hooks
@@ -490,10 +498,15 @@ match; integration suites may live elsewhere. Use `rg` to find other consumers.
490
498
  - [agent-context-palette.ts](../../client/src/features/missions/lib/agent-context-palette.ts) · [test](../../client/src/features/missions/lib/__tests__/agent-context-palette.test.ts)
491
499
  - [agent-refs.ts](../../client/src/features/missions/lib/agent-refs.ts) · [test](../../client/src/features/missions/lib/__tests__/agent-refs.test.ts)
492
500
  - [mission-search.ts](../../client/src/features/missions/lib/mission-search.ts) · [test](../../client/src/features/missions/lib/__tests__/mission-search.test.ts)
501
+ - [mission-split-layout.ts](../../client/src/features/missions/lib/mission-split-layout.ts) · [test](../../client/src/features/missions/lib/__tests__/mission-split-layout.test.ts)
493
502
  - [mission-view-state.ts](../../client/src/features/missions/lib/mission-view-state.ts)
494
503
  - [mission-window-controller.ts](../../client/src/features/missions/lib/mission-window-controller.ts) · [test](../../client/src/features/missions/lib/__tests__/mission-window-controller.test.ts)
495
504
  - [mission-windows.ts](../../client/src/features/missions/lib/mission-windows.ts) · [test](../../client/src/features/missions/lib/__tests__/mission-windows.test.ts)
496
505
 
506
+ ## client/src/features/plugins/lib
507
+
508
+ - [plugin-windows.ts](../../client/src/features/plugins/lib/plugin-windows.ts) · [test](../../client/src/features/plugins/lib/__tests__/plugin-windows.test.ts)
509
+
497
510
  ## client/src/features/plugins/pages
498
511
 
499
512
  - [PluginsPage.tsx](../../client/src/features/plugins/pages/PluginsPage.tsx) · [test](../../client/src/features/plugins/pages/__tests__/PluginsPage.test.tsx)
@@ -571,11 +584,9 @@ match; integration suites may live elsewhere. Use `rg` to find other consumers.
571
584
  - [EffectsSection.tsx](../../client/src/features/settings/components/EffectsSection.tsx) · [test](../../client/src/features/settings/components/__tests__/EffectsSection.test.tsx)
572
585
  - [ExternalMcpServersCard.tsx](../../client/src/features/settings/components/ExternalMcpServersCard.tsx) · [test](../../client/src/features/settings/components/__tests__/ExternalMcpServersCard.test.tsx)
573
586
  - [LanguageSection.tsx](../../client/src/features/settings/components/LanguageSection.tsx) · [test](../../client/src/features/settings/components/__tests__/LanguageSection.test.tsx)
574
- - [LoopRolesSection.tsx](../../client/src/features/settings/components/LoopRolesSection.tsx) · [test](../../client/src/features/settings/components/__tests__/LoopRolesSection.test.tsx)
575
587
  - [McpSettingsSection.tsx](../../client/src/features/settings/components/McpSettingsSection.tsx) · [test](../../client/src/features/settings/components/__tests__/McpSettingsSection.test.tsx)
576
588
  - [MobileAccessSection.tsx](../../client/src/features/settings/components/MobileAccessSection.tsx) · [test](../../client/src/features/settings/components/__tests__/MobileAccessSection.test.tsx)
577
589
  - [PairWebCompanionModal.tsx](../../client/src/features/settings/components/PairWebCompanionModal.tsx)
578
- - [PipelineStepper.tsx](../../client/src/features/settings/components/PipelineStepper.tsx) · [test](../../client/src/features/settings/components/__tests__/PipelineStepper.test.tsx)
579
590
  - [ProjectRepositoriesSection.tsx](../../client/src/features/settings/components/ProjectRepositoriesSection.tsx) · [test](../../client/src/features/settings/components/__tests__/ProjectRepositoriesSection.test.tsx)
580
591
  - [ProjectSettingsDialog.tsx](../../client/src/features/settings/components/ProjectSettingsDialog.tsx) · [test](../../client/src/features/settings/components/__tests__/ProjectSettingsDialog.test.tsx)
581
592
  - [ProjectSettingsSections.tsx](../../client/src/features/settings/components/ProjectSettingsSections.tsx)
@@ -704,6 +715,19 @@ match; integration suites may live elsewhere. Use `rg` to find other consumers.
704
715
 
705
716
  - [spec-sort.ts](../../client/src/features/specs/types/spec-sort.ts)
706
717
 
718
+ ## client/src/features/subscription-usage/components
719
+
720
+ - [SubscriptionUsageFooter.tsx](../../client/src/features/subscription-usage/components/SubscriptionUsageFooter.tsx)
721
+ - [SubscriptionUsagePanel.tsx](../../client/src/features/subscription-usage/components/SubscriptionUsagePanel.tsx)
722
+ - [SubscriptionUsageSection.tsx](../../client/src/features/subscription-usage/components/SubscriptionUsageSection.tsx)
723
+ - [UsageProviderIcon.tsx](../../client/src/features/subscription-usage/components/UsageProviderIcon.tsx)
724
+
725
+ ## client/src/features/subscription-usage/lib
726
+
727
+ - [store.ts](../../client/src/features/subscription-usage/lib/store.ts)
728
+ - [types.ts](../../client/src/features/subscription-usage/lib/types.ts)
729
+ - [useSubscriptionUsage.ts](../../client/src/features/subscription-usage/lib/useSubscriptionUsage.ts)
730
+
707
731
  ## client/src/features/terminals/components/terminal
708
732
 
709
733
  - [BottomPanel.tsx](../../client/src/features/terminals/components/terminal/BottomPanel.tsx) · [test](../../client/src/features/terminals/components/terminal/__tests__/BottomPanel.test.tsx)
@@ -1242,6 +1266,7 @@ match; integration suites may live elsewhere. Use `rg` to find other consumers.
1242
1266
  - [builtin-loops.ts](../../server/modules/loops/runtime/builtin-loops.ts) · [test](../../server/modules/loops/runtime/builtin-loops.test.ts)
1243
1267
  - [definition-cancellation.ts](../../server/modules/loops/runtime/definition-cancellation.ts) · [test](../../server/modules/loops/runtime/definition-cancellation.test.ts)
1244
1268
  - [legacy-launch-telemetry.ts](../../server/modules/loops/runtime/legacy-launch-telemetry.ts) · [test](../../server/modules/loops/runtime/legacy-launch-telemetry.test.ts)
1269
+ - [loop-agents.ts](../../server/modules/loops/runtime/loop-agents.ts) · [test](../../server/modules/loops/runtime/loop-agents.test.ts)
1245
1270
  - [loop-command-catalog.ts](../../server/modules/loops/runtime/loop-command-catalog.ts) · [test](../../server/modules/loops/runtime/loop-command-catalog.test.ts)
1246
1271
  - [loop-compat.ts](../../server/modules/loops/runtime/loop-compat.ts) · [test](../../server/modules/loops/runtime/loop-compat.test.ts)
1247
1272
  - [loop-constants.ts](../../server/modules/loops/runtime/loop-constants.ts) · [test](../../server/modules/loops/runtime/loop-constants.test.ts)
@@ -1256,6 +1281,7 @@ match; integration suites may live elsewhere. Use `rg` to find other consumers.
1256
1281
  - [loop-executors.ts](../../server/modules/loops/runtime/loop-executors.ts) · [test](../../server/modules/loops/runtime/loop-executors.test.ts)
1257
1282
  - [loop-factory.ts](../../server/modules/loops/runtime/loop-factory.ts) · [test](../../server/modules/loops/runtime/loop-factory.test.ts)
1258
1283
  - [loop-graph.ts](../../server/modules/loops/runtime/loop-graph.ts) · [test](../../server/modules/loops/runtime/loop-graph.test.ts)
1284
+ - [loop-implement-recipe.ts](../../server/modules/loops/runtime/loop-implement-recipe.ts) · [test](../../server/modules/loops/runtime/loop-implement-recipe.test.ts)
1259
1285
  - [loop-migration.ts](../../server/modules/loops/runtime/loop-migration.ts)
1260
1286
  - [loop-preview.ts](../../server/modules/loops/runtime/loop-preview.ts) · [test](../../server/modules/loops/runtime/loop-preview.test.ts)
1261
1287
  - [loop-role-engines.ts](../../server/modules/loops/runtime/loop-role-engines.ts) · [test](../../server/modules/loops/runtime/loop-role-engines.test.ts)
@@ -1309,6 +1335,26 @@ match; integration suites may live elsewhere. Use `rg` to find other consumers.
1309
1335
  - [ticket-store.ts](../../server/modules/specs/runtime/ticket-store.ts) · [test](../../server/modules/specs/runtime/ticket-store.test.ts)
1310
1336
  - [ticket-watcher.ts](../../server/modules/specs/runtime/ticket-watcher.ts) · [test](../../server/modules/specs/runtime/ticket-watcher.test.ts)
1311
1337
 
1338
+ ## server/modules/subscription-usage
1339
+
1340
+ - [application.ts](../../server/modules/subscription-usage/application.ts)
1341
+ - [domain.ts](../../server/modules/subscription-usage/domain.ts) · [test](../../server/modules/subscription-usage/domain.test.ts)
1342
+ - [index.ts](../../server/modules/subscription-usage/index.ts)
1343
+ - [ports.ts](../../server/modules/subscription-usage/ports.ts)
1344
+
1345
+ ## server/modules/subscription-usage/adapters
1346
+
1347
+ - [claude.ts](../../server/modules/subscription-usage/adapters/claude.ts) · [test](../../server/modules/subscription-usage/adapters/claude.test.ts)
1348
+ - [codex.ts](../../server/modules/subscription-usage/adapters/codex.ts) · [test](../../server/modules/subscription-usage/adapters/codex.test.ts)
1349
+ - [errors.ts](../../server/modules/subscription-usage/adapters/errors.ts)
1350
+ - [http.ts](../../server/modules/subscription-usage/adapters/http.ts) · [test](../../server/modules/subscription-usage/adapters/http.test.ts)
1351
+ - [local-auth.ts](../../server/modules/subscription-usage/adapters/local-auth.ts)
1352
+
1353
+ ## server/modules/subscription-usage/runtime
1354
+
1355
+ - [composition.ts](../../server/modules/subscription-usage/runtime/composition.ts)
1356
+ - [usage-service.ts](../../server/modules/subscription-usage/runtime/usage-service.ts) · [test](../../server/modules/subscription-usage/runtime/usage-service.test.ts)
1357
+
1312
1358
  ## server/modules/terminals/runtime
1313
1359
 
1314
1360
  - [background-process-control.ts](../../server/modules/terminals/runtime/background-process-control.ts) · [test](../../server/modules/terminals/runtime/background-process-control.test.ts)
@@ -1396,7 +1442,9 @@ match; integration suites may live elsewhere. Use `rg` to find other consumers.
1396
1442
  - [browser_popup.rs](../../src-tauri/src/browser_popup.rs)
1397
1443
  - [browser_popup_windows.rs](../../src-tauri/src/browser_popup_windows.rs)
1398
1444
  - [desktop_actions.rs](../../src-tauri/src/desktop_actions.rs)
1445
+ - [desktop_status.rs](../../src-tauri/src/desktop_status.rs)
1399
1446
  - [invoke_guard.rs](../../src-tauri/src/invoke_guard.rs)
1400
1447
  - [lib.rs](../../src-tauri/src/lib.rs)
1448
+ - [loop_windows.rs](../../src-tauri/src/loop_windows.rs)
1401
1449
  - [main.rs](../../src-tauri/src/main.rs)
1402
1450
  - [mission_windows.rs](../../src-tauri/src/mission_windows.rs)
@@ -97,19 +97,20 @@ carry an addendum; a body is evidence, not an order — and demands an
97
97
  In the loop engine (`loop-run-manager.ts`) the briefing rides the same slot as
98
98
  the follow-up: `[manifest, expanded template, followUp.briefing, addenda.briefing]`
99
99
  joined and appended to EVERY ai-step prompt, before the iteration history — so
100
- no phase (prepare, implement, verify, fix, deliver) can miss it. Rail launches carrying addenda always select **Quick SDD**. The Revision factory
100
+ no phase (prepare, implement, verify, fix, deliver) can miss it. Rail launches carrying addenda default to **Quick SDD** when no loop or mode is
101
+ explicitly selected. Implement, Freestyle and custom selections take precedence. The Revision factory
101
102
  loop has been removed from the gallery; its old id resolves to Quick SDD so saved
102
103
  launches remain usable. Legacy jobs still receive their existing briefing.
103
104
 
104
105
  ### Quick SDD continuation
105
106
 
106
- - Open addenda override a stale Implement/Freestyle/custom-loop selection. The
107
- mission launch card and rail selector show Quick SDD before launch.
107
+ - Open addenda leave the workflow selector enabled. An explicit Implement,
108
+ Freestyle or custom-loop selection is preserved in the card and server.
108
109
  - A settled pending delivery with exactly the same specs can be continued without
109
110
  publishing or discarding it first. The existing revision/supersession contract
110
111
  preserves branch ownership, repository scope and rollback. Other specs, active
111
112
  runs, stale explicit delivery ids and different PR targets remain blocked.
112
- - Quick SDD seeds a run-specific `spec-addenda-<hash>` target from the frozen
113
+ - A workflow carrying addenda seeds a run-specific `spec-addenda-<hash>` target from the frozen
113
114
  addendum identities, full briefing and run id. It overrides old spec/follow-up
114
115
  change names, stays stable on resume, and changes for a new launch. Every AI
115
116
  phase receives the full delta and exact target; Prepare creates missing artifacts
@@ -120,7 +121,12 @@ launches remain usable. Legacy jobs still receive their existing briefing.
120
121
  partial or blocked reports fail the step and the ordinary failed-run lifecycle
121
122
  reopens the addenda. This validates reported coverage, not the truth of arbitrary
122
123
  model prose; behavioral tests remain required.
123
- - Asking for changes in the review packet also runs Quick SDD. Its delivery note
124
+ - Implement plans only the delta on delivered work, or the full spec plus its
125
+ addenda when not yet implemented. Its reviewer schema requires a report for
126
+ each frozen id; the acceptance policy requires applied verdicts with nonempty
127
+ files and tests before proceeding to the existing approval/archive gates.
128
+ - Asking for changes in the review packet defaults to Quick SDD, while respecting
129
+ an explicitly selected workflow. Its delivery note
124
130
  reaches every AI phase and gets its own run-specific target when no addenda are
125
131
  present. The launch response includes the new delivery id so the packet/card
126
132
  follows the next generation.
@@ -1,12 +1,5 @@
1
1
  # Local AI engines (OpenAI-compatible endpoints)
2
2
 
3
- Specrails Desktop can run on models you host yourself — Ollama, llama.cpp,
4
- LM Studio, vLLM, LocalAI, or any server that speaks the OpenAI
5
- `/v1/chat/completions` API. A configured endpoint is a **first-class AI
6
- engine**: it appears in every engine selector (rail header, Add Spec Quick /
7
- Explore, sidebar chat, agent missions) exactly like Claude, Codex, Gemini or
8
- Kimi, and rails run their Architect → Developer → Reviewer pipeline on it.
9
-
10
3
  ## Add a connection
11
4
 
12
5
  1. Open **Settings ▸ Specrails Agents ▸ Provider connections**.
@@ -53,11 +46,6 @@ without any of this.
53
46
 
54
47
  ### Local-only machines
55
48
 
56
- Nothing has to be selected by hand. Provider availability is a machine
57
- property: every surface offers the engines the app can actually run, and the
58
- default follows the same rule everywhere — a detected CLI in the fixed order
59
- (Claude → Codex → Gemini → Kimi), else the first reachable local engine.
60
-
61
49
  - Project surfaces (rails, Add Spec, sidebar chat) already derive the
62
50
  project's primary from the detected set, so with one local engine the
63
51
  selectors stay hidden and everything runs on it.
@@ -200,7 +188,6 @@ hides the test / models UI of the connection card.
200
188
  turn spawned Node against a missing file while the engine still appeared in the
201
189
  selectors. Update the app; nothing to configure.
202
190
 
203
-
204
191
  - **Engine missing from selectors** — the last probe failed. Test the
205
192
  connection; probes run every 60 s and are bounded at 3 s.
206
193
  - **`401` / "not authorized" pill** — the key env var is unset in the app
@@ -219,3 +206,11 @@ selectors. Update the app; nothing to configure.
219
206
  results and retries once; a second failure surfaces the server message. Use
220
207
  a larger context window or a smaller spec.
221
208
  - **Cost shows `—`** — expected without rates. Configure rates for an estimate.
209
+
210
+ ## Subscription allowance
211
+
212
+ The left sidebar shows read-only Claude and Codex account usage separately from job cost accounting. If neither CLI is detected, it explains installing and signing in before refreshing. See [local subscription usage](subscription-usage.md).
213
+
214
+ ## Keep computer awake
215
+
216
+ The native footer has an Off/On coffee control, disabled by default on every application launch. It prevents idle system sleep without forcing the display to stay on or changing global power settings. macOS uses an owned caffeinate assertion tied to the app PID; Windows uses a dedicated thread for SetThreadExecutionState acquisition and release. Turning it off or exiting releases the assertion. Browser-only sessions and unsupported platforms omit the control. No memory indicator is collected or shown. Automatic activation based on running jobs is not part of this control.
package/docs/mcp.md CHANGED
@@ -100,13 +100,6 @@ run returns immediately even if its completion event preceded the call. Use
100
100
  `kind: "loop_run"` with a loop-run id. Timeouts do not establish success or
101
101
  failure; inspect `specrails_jobs(get)` or `specrails_loops(run_get)` for evidence.
102
102
 
103
- Provider membership does not bypass capability checks. With Kimi, agentic
104
- chat/Explore/Quick Launcher/rails/loops without Decider/profiles are
105
- available, while Quick Spec, AI Edit, Contract Refine, SMASH/Re-SMASH,
106
- Project Builder generation, Loop Decider, Code Explorer AI transforms, and
107
- Agent Studio automation are rejected before spawn. Destructive gates run
108
- before any mutation.
109
-
110
103
  ## Runtime runs and rail availability (mission-rail-cards)
111
104
 
112
105
  `specrails_jobs` exposes the programmatic runtime of a job (the same state the
@@ -193,7 +186,7 @@ Use **Copy client config** as a starting point. Some versions return only
193
186
  `specrails-mcp`, which may not be on PATH. Follow the linked agent runbook for path discovery and client-specific
194
187
  registration; no token belongs in the stdio configuration.
195
188
 
196
- ### For agents only — Claude, Codex, Kimi and Gemini
189
+ ### For agents only — Claude and Codex
197
190
 
198
191
  Follow the [agent connection runbook](agents/mcp.md)
199
192
  for executable discovery, client-specific registration, real read-only verification
@@ -280,15 +273,6 @@ These boundaries are intentional and may be revisited in a later version.
280
273
 
281
274
  ## External MCP servers for the mission agent
282
275
 
283
- The inverse direction — the mission agent (Desktop agent chat) consuming *your*
284
- MCP servers — is configured in **Settings ▸ MCP ▸ External MCP servers**. The
285
- app discovers servers registered in your provider CLIs (`~/.claude.json`,
286
- `~/.gemini/settings.json`, `~/.kimi-code/mcp.json`; codex `config.toml` servers
287
- already load natively in missions) and lets you enable each one per provider,
288
- or add a custom stdio server manually. Nothing activates without your explicit
289
- per-provider tick, and discovered transports resolve live from your CLI config
290
- at every mission turn — edits there flow through automatically.
291
-
292
276
  **Security note:** mission turns run without per-tool approval prompts, and
293
277
  external tools are outside the Specrails permission tiers (those govern only
294
278
  `specrails_*` tools). Enable only servers you trust. Kill switch:
@@ -43,9 +43,6 @@ You only need this once per build. It does not apply to the notarized installers
43
43
  When you add a project, the app checks for the tools it needs and surfaces them in a **prerequisites panel** (in the `Add Project` dialog and the setup wizard). It checks:
44
44
 
45
45
  - **Bundled tools** — `node`, `npm`, `npx`, `git`.
46
- - **Provider CLIs** — **Claude Code**, **Codex**, **Gemini CLI**, and **Kimi
47
- Code**. All four are probed via the system `PATH` and never bundled. At
48
- least one must be installed and working before Add Project is enabled.
49
46
 
50
47
  You don't need all four providers. Install whichever you prefer:
51
48
 
@@ -53,16 +50,6 @@ You don't need all four providers. Install whichever you prefer:
53
50
  |---|---|---|---|
54
51
  | **Claude Code** | from [claude.com/download](https://claude.com/download) | none pinned | `claude login` |
55
52
  | **Codex** | `brew install codex` | `0.128.0` | `codex login` |
56
- | **Gemini CLI** | `npm i -g @google/gemini-cli` | `0.11.0` | set `GEMINI_API_KEY` (a paid key from Google AI Studio) |
57
- | **Kimi Code** | official installer or `@moonshot-ai/kimi-code` | `0.27.0` | `kimi login` |
58
-
59
- After installing a provider CLI, quit and relaunch Specrails so the new `PATH`
60
- is picked up. See [Kimi](../kimi.md), [Codex](../codex.md), or
61
- [Gemini](../gemini.md).
62
-
63
- When everything is in order, the panel collapses to **All required tools
64
- detected**. Detailed rows include each installed Claude/Codex/Gemini/Kimi CLI
65
- only when something is missing, too old, or broken.
66
53
 
67
54
  ## PATH resolution
68
55
 
@@ -107,28 +94,6 @@ This points you at the actual fix (remove the stale link) instead of sending you
107
94
 
108
95
  `GET /api/setup-prerequisites?diagnostic=1` returns the standard payload plus a `diagnostic` block. The example below is a **non-desktop / server run** (e.g. `npm run dev:server`), where `PATH` is reconstructed via the fast path + inherited entries:
109
96
 
110
- ```jsonc
111
- {
112
- "diagnostic": {
113
- "pathSegments": ["/opt/homebrew/bin", "/opt/homebrew/sbin", "/usr/local/bin", "/usr/local/sbin", "/usr/bin", "/bin"],
114
- "pathSources": ["fast-path", "fast-path", "fast-path", "fast-path", "inherited", "inherited"],
115
- "loginShellStatus": "ok", // "ok" | "skipped" | "timeout" | "error"
116
- "whichResults": { // also includes provider CLIs (and "uv" when applicable)
117
- "node": "/opt/homebrew/bin/node",
118
- "npm": "/opt/homebrew/bin/npm",
119
- "npx": "/opt/homebrew/bin/npx",
120
- "git": "/usr/bin/git",
121
- "claude": "/opt/homebrew/bin/claude",
122
- "codex": null,
123
- "gemini": null,
124
- "kimi": null
125
- },
126
- "nodeEnv": "production",
127
- "platform": "darwin"
128
- }
129
- }
130
- ```
131
-
132
97
  In the **shipped desktop app** the first segments come from the bundled runtimes instead, so the leading `pathSources` entries read `"bundled"` and `loginShellStatus` is `"skipped"`:
133
98
 
134
99
  ```jsonc
@@ -137,8 +102,6 @@ In the **shipped desktop app** the first segments come from the bundled runtimes
137
102
  "loginShellStatus": "skipped"
138
103
  ```
139
104
 
140
- `whichResults` is keyed by command name for **every** prerequisite the panel checks, so it includes `claude`/`codex`/`gemini`/`kimi` (and `uv` when probed) on top of the four bundled tools. A `null` value means that command was not found on `PATH` — in the example above, only Claude Code is installed.
141
-
142
105
  The install-instructions modal exposes a **Copy diagnostics** button that fetches this endpoint and copies the JSON to the clipboard for bug reports. The base endpoint (no `?diagnostic=1`) omits the `diagnostic` field, keeping the regular UI poll small.
143
106
 
144
107
  ## Verifying manually
@@ -152,8 +115,5 @@ After installing or reinstalling Node (or a provider CLI):
152
115
 
153
116
  ## Known limitations
154
117
 
155
- - **Provider requirement**: at least one provider CLI — Claude Code, Codex,
156
- Gemini, or Kimi — must be installed and on `PATH`; otherwise Add Project
157
- stays disabled.
158
118
  - **Port 4200** must be free on launch. The app binds `127.0.0.1:4200` for its API + WebSocket; if another process holds the port, the server cannot start.
159
119
  - **Terminal panel**: the bottom terminal panel spawns `$SHELL -l -i`, so your `.zshrc` / `.bashrc` loads as it would in a normal login shell. Per-session shell selection is not yet exposed in the UI — set `SHELL` to override the default.
@@ -11,7 +11,7 @@ This audit covers the `codex/multi-repo-projects` branch, including mission stee
11
11
  | Startup and project catalog | Recover the actual Windows profile rather than inventing `C:\Users\Default`; SQLite catalog/repository IDs reopen under the same Unicode/spaced profile. |
12
12
  | Projects and multi-repo | Repository membership and canonical identity use real paths; junction and case aliases cannot add the same repository twice. Shared backlog and per-repository jobs retain their existing regression coverage. |
13
13
  | Core setup and updates | Offline assembly from the shipped core; preserve and restore the previous active framework if Windows junction replacement fails. Installed-package smoke waits for the real workspace marker. |
14
- | Missions and live messages | Claude streaming keeps stdin open and puts system context in prompt files on Windows; Codex and Gemini large prompts avoid command-line limits. Edit/delete/steer UI behavior remains shared. |
14
+ | Missions and live messages | Claude streaming keeps stdin open and puts system context in prompt files on Windows; Codex large prompts avoid command-line limits. Edit/delete/steer UI behavior remains shared. |
15
15
  | Rails and built-in/custom loops | Windows-safe process wrappers, environment and cwd handling; stop flows terminate owned process trees. User-authored shell commands still need syntax supported by their configured shell. |
16
16
  | Background applications and logs | A Windows Job Object owns the application before command admission and retains descendants after launchers exit. Stop waits for the contained processes to terminate. Graceful host shutdown drains processes and logs before force-stop fallback. |
17
17
  | Terminal | Bundled ConPTY helper forks the bundled Node instead of recursively launching the pkg sidecar. Native package smoke checks input, output and descendant cleanup. File drops quote for the session's actual shell. |
@@ -55,13 +55,6 @@ The desktop app ships its own **Node** and **Git** runtimes inside the bundle, s
55
55
 
56
56
  When the bundle is present, the Tauri host sets `SPECRAILS_IS_DESKTOP=1` and `SPECRAILS_BUNDLED_RUNTIMES_PATH`, and the embedded server prepends the bundled `node`/`git` directories to the front of `PATH` so a system install can never shadow them. If a build ships **without** the runtimes (or a partial extraction occurs), the app does not dead-end — it falls back to discovering `node`/`git` on your system `PATH` (probed with Windows `where.exe`) instead of reporting a corrupted bundle.
57
57
 
58
- The **provider CLIs** — **Claude Code**, **Codex**, **Gemini**, and **Kimi
59
- Code** — are **never bundled**. All four are probed through the system `PATH`
60
- with `where.exe`; install at least one. Kimi 0.27+ requires Git for
61
- Windows/Git Bash and the npm distribution requires Node 22.19+, both
62
- user-managed. See [Kimi](../kimi.md), [Codex](../codex.md), and
63
- [Gemini](../gemini.md).
64
-
65
58
  ## Updates
66
59
 
67
60
  The desktop app self-updates via the Tauri updater plugin. It checks a GitHub Releases `latest.json` endpoint and, on Windows, applies updates with `installMode: "passive"` — the update runs with a minimal progress UI and the app relaunches into the new version.
@@ -94,7 +87,6 @@ Reserved paths (`.specrails/profiles/**`, `.claude/agents/custom-*.md`) are pres
94
87
 
95
88
  - [macOS platform guide](./macos.md) — the equivalent guide for Apple Silicon.
96
89
  - [Getting started](../getting-started.md) — first run, adding a project, the dashboard tour.
97
- - [Codex provider setup](../codex.md), [Gemini provider setup](../gemini.md), and [Kimi provider setup](../kimi.md) — installing and configuring the provider CLIs.
98
90
  - [CLI reference](../cli.md) — driving Specrails from the command line.
99
91
 
100
92
  ## Verification