specrails-desktop 2.64.1 → 2.65.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1117) hide show
  1. package/README.md +1 -1
  2. package/cli/dist/status.js +3 -0
  3. package/client/dist/assets/ActivityFeedPage-ByVKYII-.js +1 -0
  4. package/client/dist/assets/AgentBrowserCapture-BGUTjhUr.js +1 -0
  5. package/client/dist/assets/AgentModeAnalyticsPane-CtOLDDjB.js +2 -0
  6. package/client/dist/assets/AgentModeCodePane-CDhUKarT.js +2 -0
  7. package/client/dist/assets/AgentModeJobsPane-BAa_oEHJ.js +1 -0
  8. package/client/dist/assets/AgentsPage-D32hG4Ve.js +120 -0
  9. package/client/dist/assets/AnalyticsPage-BU50zeG6.js +5 -0
  10. package/client/dist/assets/BudgetCard-DP_jxwaD.js +55 -0
  11. package/client/dist/assets/CodePage-jiYnKGpp.js +3 -0
  12. package/client/dist/assets/CostValue-Bvn8674q.js +1 -0
  13. package/client/dist/assets/DesktopAnalyticsPage-CF__H4e3.js +1 -0
  14. package/client/dist/assets/DocView-RrAp70zp.js +11 -0
  15. package/client/dist/assets/DocsDialog-DkqHU-JF.js +1 -0
  16. package/client/dist/assets/DocsPage-C6X089zC.js +1 -0
  17. package/client/dist/assets/ExportDropdown-C5-o8y3K.js +1 -0
  18. package/client/dist/assets/HelpHint-Crf9_uoR.js +1 -0
  19. package/client/dist/assets/IntegrationsPage-aflU3KHK.js +1 -0
  20. package/client/dist/assets/InteractiveJobComposer-CEMMhyyJ.js +19 -0
  21. package/client/dist/assets/JobDetailModal-BVJ6hyRs.js +1 -0
  22. package/client/dist/assets/JobDetailPage-DHzBUmox.js +1 -0
  23. package/client/dist/assets/JobsPage-o-LAqkwC.js +1 -0
  24. package/client/dist/assets/LoopBuilderPage-DbSVmXBM.js +1 -0
  25. package/client/dist/assets/LoopPreviewModal-DbJcVyN1.js +1 -0
  26. package/client/dist/assets/{LoopWindowSurface-DE0v2K1p.js → LoopWindowSurface-Co1ZK26V.js} +1 -1
  27. package/client/dist/assets/LoopsPage-C4lgkPXB.js +2 -0
  28. package/client/dist/assets/MinimizedChatsContext-742ypO8n.js +1 -0
  29. package/client/dist/assets/PluginsPage-Acks9ges.js +2 -0
  30. package/client/dist/assets/RailTrack-BfLmBzBh.js +1 -0
  31. package/client/dist/assets/{RepositoryScopeSelector-2eSqR9WK.js → RepositoryScopeSelector-DcxbKI9w.js} +1 -1
  32. package/client/dist/assets/ReviewPacketPage-CAVSIOAJ.js +7 -0
  33. package/client/dist/assets/TemplatePreviewModal-C23SYCTm.js +1 -0
  34. package/client/dist/assets/TicketDetailModalContext-B-Gtm6Ob.js +23 -0
  35. package/client/dist/assets/Trans-C6J0cLyh.js +1 -0
  36. package/client/dist/assets/a11y-prefs-BqoP5goK.js +1 -0
  37. package/client/dist/assets/activity-BBWfoUOG.js +1 -0
  38. package/client/dist/assets/activity-BM_skann.js +1 -0
  39. package/client/dist/assets/activity-Cevl82ke.js +1 -0
  40. package/client/dist/assets/activity-CmACk5W5.js +1 -0
  41. package/client/dist/assets/activity-D9LBw3PQ.js +1 -0
  42. package/client/dist/assets/activity-Dspbb9lz.js +1 -0
  43. package/client/dist/assets/activity-FPjYIjv9.js +1 -0
  44. package/client/dist/assets/activity-nLCKMUKt.js +1 -0
  45. package/client/dist/assets/addspec-BI4jDMhA.js +1 -0
  46. package/client/dist/assets/addspec-BldTv7Tl.js +1 -0
  47. package/client/dist/assets/addspec-Cdq-2EcC.js +1 -0
  48. package/client/dist/assets/addspec-DH5M16BQ.js +1 -0
  49. package/client/dist/assets/addspec-DOFo9pD5.js +1 -0
  50. package/client/dist/assets/addspec-DPkwhdmL.js +1 -0
  51. package/client/dist/assets/addspec-Dzy12Pv3.js +1 -0
  52. package/client/dist/assets/addspec-skTs6EEW.js +1 -0
  53. package/client/dist/assets/agent-B_UEUy7Y.js +1 -0
  54. package/client/dist/assets/agent-BarjlhTA.js +1 -0
  55. package/client/dist/assets/agent-BfqIITo5.js +1 -0
  56. package/client/dist/assets/agent-Bt9a7Kyj.js +1 -0
  57. package/client/dist/assets/agent-C3689RwP.js +1 -0
  58. package/client/dist/assets/agent-CrmboTAi.js +1 -0
  59. package/client/dist/assets/agent-DcsoTnuE.js +1 -0
  60. package/client/dist/assets/agent-GDZoYwd4.js +1 -0
  61. package/client/dist/assets/{agentRuntime-es2ymSl-.js → agentRuntime-BYH70bKY.js} +1 -1
  62. package/client/dist/assets/agentRuntime-BijLh8I9.js +1 -0
  63. package/client/dist/assets/{agentRuntime-BzuwQQgn.js → agentRuntime-BvyuETPe.js} +1 -1
  64. package/client/dist/assets/{agentRuntime-BDvbJMmS.js → agentRuntime-C2WI6HQh.js} +1 -1
  65. package/client/dist/assets/{agentRuntime-BKJfv5YD.js → agentRuntime-CZPIlQsr.js} +1 -1
  66. package/client/dist/assets/{agentRuntime-DiCldqGG.js → agentRuntime-D2dDvCyJ.js} +1 -1
  67. package/client/dist/assets/agentRuntime-DWZedEbn.js +1 -0
  68. package/client/dist/assets/agentRuntime-DkIruUNw.js +1 -0
  69. package/client/dist/assets/agents-35_PDKx9.js +1 -0
  70. package/client/dist/assets/agents-8fZnHhEQ.js +1 -0
  71. package/client/dist/assets/agents-Bgimtw8z.js +1 -0
  72. package/client/dist/assets/agents-C4P160Us.js +1 -0
  73. package/client/dist/assets/agents-Clg67zbp.js +1 -0
  74. package/client/dist/assets/agents-DJfF4o6G.js +1 -0
  75. package/client/dist/assets/agents-Dc9-Y5cw.js +1 -0
  76. package/client/dist/assets/agents-EN1Zl4YZ.js +1 -0
  77. package/client/dist/assets/agentstudio-Bm4-NYaG.js +1 -0
  78. package/client/dist/assets/agentstudio-CD1fuj2o.js +1 -0
  79. package/client/dist/assets/agentstudio-CQGWFSst.js +1 -0
  80. package/client/dist/assets/agentstudio-CqVSb65S.js +1 -0
  81. package/client/dist/assets/agentstudio-DIE_HjsX.js +1 -0
  82. package/client/dist/assets/agentstudio-D_OmQK-k.js +1 -0
  83. package/client/dist/assets/agentstudio-Djz9aUfb.js +1 -0
  84. package/client/dist/assets/agentstudio-Qa3v9o5J.js +1 -0
  85. package/client/dist/assets/{aiedit-DNXxq_Dr.js → aiedit-1VzLs37W.js} +1 -1
  86. package/client/dist/assets/{aiedit-DCjA7jLJ.js → aiedit-BNp6GSik.js} +1 -1
  87. package/client/dist/assets/{aiedit-BoG24nlg.js → aiedit-BOY5xRPi.js} +1 -1
  88. package/client/dist/assets/{aiedit-iIjz2_Qk.js → aiedit-BrqMZvbc.js} +1 -1
  89. package/client/dist/assets/{aiedit-CjlSRQVP.js → aiedit-CVgtl7hm.js} +1 -1
  90. package/client/dist/assets/{aiedit-DQ-0_pvE.js → aiedit-CrFW9Jd2.js} +1 -1
  91. package/client/dist/assets/{aiedit-olnv3QSt.js → aiedit-YE2lILp7.js} +1 -1
  92. package/client/dist/assets/{aiedit-B0KUbpB6.js → aiedit-iA_R1AVQ.js} +1 -1
  93. package/client/dist/assets/analytics-3w0t-4ic.js +1 -0
  94. package/client/dist/assets/analytics-BRi4KQD6.js +1 -0
  95. package/client/dist/assets/analytics-BtjAqzke.js +1 -0
  96. package/client/dist/assets/analytics-COSQ1h47.js +1 -0
  97. package/client/dist/assets/analytics-CP2HjESk.js +1 -0
  98. package/client/dist/assets/analytics-DY65TC62.js +1 -0
  99. package/client/dist/assets/analytics-Den_vvxn.js +1 -0
  100. package/client/dist/assets/analytics-LmBS96O8.js +1 -0
  101. package/client/dist/assets/api-DOGbyfTO.js +2 -0
  102. package/client/dist/assets/builder-BMVvSr4v.js +1 -0
  103. package/client/dist/assets/builder-BN-MuLZt.js +1 -0
  104. package/client/dist/assets/builder-BQOZi4CF.js +1 -0
  105. package/client/dist/assets/builder-BjUPjsyu.js +1 -0
  106. package/client/dist/assets/builder-BoBtN18T.js +1 -0
  107. package/client/dist/assets/builder-C5g5NhxL.js +1 -0
  108. package/client/dist/assets/builder-RUHXw3yx.js +1 -0
  109. package/client/dist/assets/builder-fyS_AiyC.js +1 -0
  110. package/client/dist/assets/button-CHPkroew.js +1 -0
  111. package/client/dist/assets/chat-C9L5T7KI.js +1 -0
  112. package/client/dist/assets/chevron-right-CwMAj0w_.js +1 -0
  113. package/client/dist/assets/chevron-up-BAMuP0XD.js +1 -0
  114. package/client/dist/assets/chunk-OB3PAWPO-BBaq6pUk.js +3 -0
  115. package/client/dist/assets/code-4le5IIbf.js +1 -0
  116. package/client/dist/assets/code-B-jCVIbm.js +1 -0
  117. package/client/dist/assets/code-BRfrn5ix.js +1 -0
  118. package/client/dist/assets/code-CC9NCrDM.js +1 -0
  119. package/client/dist/assets/code-CK6pm8wY.js +1 -0
  120. package/client/dist/assets/code-DDiOzd6c.js +1 -0
  121. package/client/dist/assets/code-tGifiyf5.js +1 -0
  122. package/client/dist/assets/code-xkn8kQTg.js +1 -0
  123. package/client/dist/assets/commands-Bv1QshHR.js +1 -0
  124. package/client/dist/assets/commands-BvxTxboW.js +1 -0
  125. package/client/dist/assets/commands-C5ORR0fO.js +1 -0
  126. package/client/dist/assets/commands-CBKMFSTV.js +1 -0
  127. package/client/dist/assets/commands-CFJIRsJv.js +1 -0
  128. package/client/dist/assets/commands-D9o3ZcXl.js +1 -0
  129. package/client/dist/assets/commands-DNox0Edk.js +1 -0
  130. package/client/dist/assets/commands-DmIUMLdV.js +1 -0
  131. package/client/dist/assets/common-5H4TkaoI.js +1 -0
  132. package/client/dist/assets/common-9S3OdPjx.js +1 -0
  133. package/client/dist/assets/common-BqnwIcjs.js +1 -0
  134. package/client/dist/assets/common-CQP3VafS.js +1 -0
  135. package/client/dist/assets/common-CZnAfkB2.js +1 -0
  136. package/client/dist/assets/common-D5sNttV4.js +1 -0
  137. package/client/dist/assets/common-k_qX9nlv.js +1 -0
  138. package/client/dist/assets/common-s4HIi9XI.js +1 -0
  139. package/client/dist/assets/compass-B7guwBlY.js +1 -0
  140. package/client/dist/assets/confirm-dialog-ChZdHL3Q.js +1 -0
  141. package/client/dist/assets/copy-DOPlLymH.js +1 -0
  142. package/client/dist/assets/core-BozBzB6Y.js +1 -0
  143. package/client/dist/assets/dashboard-6zGLGcEz.js +1 -0
  144. package/client/dist/assets/dashboard-8Gi0FBDq.js +1 -0
  145. package/client/dist/assets/dashboard-B7E5YrSy.js +1 -0
  146. package/client/dist/assets/dashboard-BhdKV8xK.js +1 -0
  147. package/client/dist/assets/dashboard-Bu3zzH_s.js +1 -0
  148. package/client/dist/assets/dashboard-Ce_6rELA.js +1 -0
  149. package/client/dist/assets/dashboard-DWY-oz8P.js +1 -0
  150. package/client/dist/assets/dashboard-gUzlWk0o.js +1 -0
  151. package/client/dist/assets/date-input-Cdlr8kHz.js +1 -0
  152. package/client/dist/assets/dialog-C23lB2iP.js +5 -0
  153. package/client/dist/assets/dist-Di-oOFkX.js +1 -0
  154. package/client/dist/assets/dist-js-CBmS6MsJ.js +1 -0
  155. package/client/dist/assets/{dist-js-Rlh4FLH5.js → dist-js-DaJmKapi.js} +1 -1
  156. package/client/dist/assets/dropdown-menu-Bfp2CK6H.js +1 -0
  157. package/client/dist/assets/empty-state-D5w9OWj-.js +1 -0
  158. package/client/dist/assets/es2015-DfnECntk.js +41 -0
  159. package/client/dist/assets/esm-BKF6CE7v.js +1 -0
  160. package/client/dist/assets/event-BEnMLqAi.js +1 -0
  161. package/client/dist/assets/explore--NOz9LCN.js +1 -0
  162. package/client/dist/assets/explore-B2ulH6dO.js +1 -0
  163. package/client/dist/assets/explore-BD-QiLdg.js +1 -0
  164. package/client/dist/assets/explore-BOqd4_1j.js +1 -0
  165. package/client/dist/assets/explore-Be_Zh5zu.js +1 -0
  166. package/client/dist/assets/explore-CLjzPSKo.js +1 -0
  167. package/client/dist/assets/explore-D_-vHm29.js +1 -0
  168. package/client/dist/assets/explore-yEQTF6ro.js +1 -0
  169. package/client/dist/assets/file-text-CNXzL3wj.js +1 -0
  170. package/client/dist/assets/format-BODoFIw6.js +1 -0
  171. package/client/dist/assets/formatDistanceToNow-DLMIOS0N.js +1 -0
  172. package/client/dist/assets/getTimezoneOffsetInMilliseconds-O61feXch.js +1 -0
  173. package/client/dist/assets/git-compare-arrows-Cu6tICCq.js +1 -0
  174. package/client/dist/assets/humanise-command-CB4ybLwq.js +1 -0
  175. package/client/dist/assets/inbox-BLZ8cm6_.js +1 -0
  176. package/client/dist/assets/inbox-BQ3VmNYY.js +1 -0
  177. package/client/dist/assets/inbox-BdcXWCuT.js +1 -0
  178. package/client/dist/assets/inbox-CF1PHjns.js +1 -0
  179. package/client/dist/assets/inbox-CFNPDhso.js +1 -0
  180. package/client/dist/assets/inbox-DIttK_NW.js +1 -0
  181. package/client/dist/assets/inbox-Dfdv1Ykl.js +1 -0
  182. package/client/dist/assets/inbox-JS1inmeO.js +1 -0
  183. package/client/dist/assets/index-4UWY7Xyz.css +2 -0
  184. package/client/dist/assets/index-DHzB0T26.js +120 -0
  185. package/client/dist/assets/integrations-BcKgzgPD.js +1 -0
  186. package/client/dist/assets/integrations-BmX_XyJq.js +1 -0
  187. package/client/dist/assets/integrations-CHpwMjlY.js +1 -0
  188. package/client/dist/assets/integrations-CT3kr8e-.js +1 -0
  189. package/client/dist/assets/integrations-C_5XAkgz.js +1 -0
  190. package/client/dist/assets/integrations-Ct9zLX7N.js +1 -0
  191. package/client/dist/assets/integrations-DEYemxUv.js +1 -0
  192. package/client/dist/assets/integrations-DWvsB_WB.js +1 -0
  193. package/client/dist/assets/{jira-Cq6yvN4q.js → jira-B_ERkFRv.js} +1 -1
  194. package/client/dist/assets/jira-Bn-A5lwD.js +1 -0
  195. package/client/dist/assets/jira-C71Ybnhp.js +1 -0
  196. package/client/dist/assets/jira-CkwjeJz6.js +1 -0
  197. package/client/dist/assets/jira-D9pSLXjI.js +1 -0
  198. package/client/dist/assets/jira-DBRS_lcp.js +1 -0
  199. package/client/dist/assets/jira-DHS6CsKh.js +1 -0
  200. package/client/dist/assets/jira-MInHRUb1.js +1 -0
  201. package/client/dist/assets/jira-api-DHme7Upx.js +1 -0
  202. package/client/dist/assets/jobs-BMLTDo63.js +1 -0
  203. package/client/dist/assets/jobs-BO8q4Mi1.js +1 -0
  204. package/client/dist/assets/jobs-Ck8uOWMM.js +1 -0
  205. package/client/dist/assets/jobs-CyFfPCpg.js +1 -0
  206. package/client/dist/assets/jobs-DT5s4fZ6.js +1 -0
  207. package/client/dist/assets/jobs-DZAgVPcD.js +1 -0
  208. package/client/dist/assets/jobs-b5gPYaKr.js +1 -0
  209. package/client/dist/assets/jobs-xsZK1440.js +1 -0
  210. package/client/dist/assets/launch-forecast-BTa-p3RP.js +1 -0
  211. package/client/dist/assets/{loop-layout-DtxX27Jz.css → loop-layout-DLioOiRN.css} +1 -1
  212. package/client/dist/assets/loop-layout-Sl9cfTvs.js +7 -0
  213. package/client/dist/assets/loops-BEEOVJDR.js +1 -0
  214. package/client/dist/assets/loops-BcrQ2vk7.js +1 -0
  215. package/client/dist/assets/loops-BjWxzJIZ.js +1 -0
  216. package/client/dist/assets/loops-BogV595N.js +1 -0
  217. package/client/dist/assets/loops-CU0BLZiz.js +1 -0
  218. package/client/dist/assets/loops-CrNBgi1G.js +1 -0
  219. package/client/dist/assets/loops-CwalwS_i.js +1 -0
  220. package/client/dist/assets/loops-_TDVN-fX.js +1 -0
  221. package/client/dist/assets/mcp-BNs8gxoL.js +1 -0
  222. package/client/dist/assets/mcp-BvRh_xO5.js +1 -0
  223. package/client/dist/assets/mcp-C2F1pghi.js +1 -0
  224. package/client/dist/assets/mcp-D9RLKAs2.js +1 -0
  225. package/client/dist/assets/mcp-DAghcsR0.js +1 -0
  226. package/client/dist/assets/mcp-DWWAPi1G.js +1 -0
  227. package/client/dist/assets/mcp-DbGSFC3f.js +1 -0
  228. package/client/dist/assets/mcp-FelCicrv.js +1 -0
  229. package/client/dist/assets/narration-C3NBkAR4.js +1 -0
  230. package/client/dist/assets/narration-CkoJq-Lf.js +1 -0
  231. package/client/dist/assets/narration-Cr0NeW9K.js +1 -0
  232. package/client/dist/assets/narration-DJUXOs-W.js +1 -0
  233. package/client/dist/assets/narration-DgL8TMvN.js +1 -0
  234. package/client/dist/assets/narration-DjBafgv0.js +1 -0
  235. package/client/dist/assets/narration-Dle6Iv0c.js +1 -0
  236. package/client/dist/assets/narration-MYlfktga.js +1 -0
  237. package/client/dist/assets/nav-BSQ8KW1c.js +1 -0
  238. package/client/dist/assets/nav-BauVof8Z.js +1 -0
  239. package/client/dist/assets/nav-BfOAH1se.js +1 -0
  240. package/client/dist/assets/nav-D3bOsipX.js +1 -0
  241. package/client/dist/assets/nav-DOMMhlLx.js +1 -0
  242. package/client/dist/assets/nav-DPzVlgZU.js +1 -0
  243. package/client/dist/assets/nav-DZJbFbah.js +1 -0
  244. package/client/dist/assets/nav-D_5aojd2.js +1 -0
  245. package/client/dist/assets/notify-error-BsWANx1T.js +1 -0
  246. package/client/dist/assets/onboarding-BdZQnNm3.js +1 -0
  247. package/client/dist/assets/onboarding-CJQEv1vp.js +1 -0
  248. package/client/dist/assets/onboarding-CWJGYUW3.js +1 -0
  249. package/client/dist/assets/onboarding-ChfYN7dA.js +1 -0
  250. package/client/dist/assets/onboarding-CjvDUR3V.js +1 -0
  251. package/client/dist/assets/onboarding-I6vS-zTB.js +1 -0
  252. package/client/dist/assets/onboarding-dgC_9dTB.js +1 -0
  253. package/client/dist/assets/onboarding-mlXSyKzX.js +1 -0
  254. package/client/dist/assets/origin-03nTuaOb.js +1 -0
  255. package/client/dist/assets/packet-BjpyRnZr.js +1 -0
  256. package/client/dist/assets/packet-BwgG5mBt.js +1 -0
  257. package/client/dist/assets/packet-C3eAUFkV.js +1 -0
  258. package/client/dist/assets/packet-C8wZuSld.js +1 -0
  259. package/client/dist/assets/packet-CNXEy_85.js +1 -0
  260. package/client/dist/assets/packet-DsV5Aa_8.js +1 -0
  261. package/client/dist/assets/packet-aasskOE7.js +1 -0
  262. package/client/dist/assets/packet-phxCc2gJ.js +1 -0
  263. package/client/dist/assets/page-header-BStSHkP8.js +1 -0
  264. package/client/dist/assets/project-repositories-DJPeAVBK.js +1 -0
  265. package/client/dist/assets/{provider-capabilities-lePfeT_Y.js → provider-capabilities-DtwcTme4.js} +1 -1
  266. package/client/dist/assets/recovery-BPDOsC92.js +1 -0
  267. package/client/dist/assets/recovery-BluNHoXM.js +1 -0
  268. package/client/dist/assets/recovery-CRvEmB0C.js +1 -0
  269. package/client/dist/assets/recovery-CeIoRnkR.js +1 -0
  270. package/client/dist/assets/recovery-DHCo8KGi.js +1 -0
  271. package/client/dist/assets/recovery-OxAIpbBF.js +1 -0
  272. package/client/dist/assets/recovery-XXexYGOJ.js +1 -0
  273. package/client/dist/assets/recovery-pITlc--v.js +1 -0
  274. package/client/dist/assets/refresh-cw-DfyTkbsf.js +1 -0
  275. package/client/dist/assets/select-xA3pSmqE.js +1 -0
  276. package/client/dist/assets/settings--yzDbX9r.js +1 -0
  277. package/client/dist/assets/settings-5_heTv8s.js +1 -0
  278. package/client/dist/assets/settings-BSf27MDg.js +1 -0
  279. package/client/dist/assets/settings-BSj6FakR.js +1 -0
  280. package/client/dist/assets/settings-BZDo_8Nn.js +1 -0
  281. package/client/dist/assets/settings-BdWgmNc0.js +1 -0
  282. package/client/dist/assets/settings-DRouxKqb.js +1 -0
  283. package/client/dist/assets/settings-DnWFoY-F.js +1 -0
  284. package/client/dist/assets/setup-BJWy62ri.js +1 -0
  285. package/client/dist/assets/setup-BgKOIuzc.js +1 -0
  286. package/client/dist/assets/setup-BvVIyUlz.js +1 -0
  287. package/client/dist/assets/setup-BxCk2pe1.js +1 -0
  288. package/client/dist/assets/setup-C-xQTL7R.js +1 -0
  289. package/client/dist/assets/setup-CbaVoiwV.js +1 -0
  290. package/client/dist/assets/setup-DxTBkX3P.js +1 -0
  291. package/client/dist/assets/setup-oGoVAzOD.js +1 -0
  292. package/client/dist/assets/specs-7tAb4IKr.js +1 -0
  293. package/client/dist/assets/specs-BUcY4s5v.js +1 -0
  294. package/client/dist/assets/specs-Bk5LeBAA.js +1 -0
  295. package/client/dist/assets/specs-CAA4Lrlg.js +1 -0
  296. package/client/dist/assets/specs-CS091AnA.js +1 -0
  297. package/client/dist/assets/specs-DJ6gmFcK.js +1 -0
  298. package/client/dist/assets/specs-GfCcrBSC.js +1 -0
  299. package/client/dist/assets/specs-xQgyc7WL.js +1 -0
  300. package/client/dist/assets/spending-CVH8VREb.js +1 -0
  301. package/client/dist/assets/square-Co6h5vZg.js +1 -0
  302. package/client/dist/assets/tauri-shell-43ixPGfa.js +2 -0
  303. package/client/dist/assets/terminal-0v9sBylD.js +1 -0
  304. package/client/dist/assets/terminal-AbUAmCxE.js +1 -0
  305. package/client/dist/assets/terminal-BJayIbIP.js +1 -0
  306. package/client/dist/assets/terminal-C2RUlXyi.js +1 -0
  307. package/client/dist/assets/terminal-CMmSb_Nj.js +1 -0
  308. package/client/dist/assets/terminal-DKWjj7HJ.js +1 -0
  309. package/client/dist/assets/terminal-KlFu7_pV.js +1 -0
  310. package/client/dist/assets/terminal-i99yqFvm.js +1 -0
  311. package/client/dist/assets/tickets-846Oq3i3.js +1 -0
  312. package/client/dist/assets/tickets-B5LJTe_b.js +1 -0
  313. package/client/dist/assets/tickets-Bfo2GGmH.js +1 -0
  314. package/client/dist/assets/tickets-BhdZ1yY2.js +1 -0
  315. package/client/dist/assets/tickets-CgjWJHAW.js +1 -0
  316. package/client/dist/assets/tickets-Ct9DbDUR.js +1 -0
  317. package/client/dist/assets/tickets-rptLEJB1.js +1 -0
  318. package/client/dist/assets/tickets-xQ6DpYdu.js +1 -0
  319. package/client/dist/assets/trending-up-BGvb4zZt.js +1 -0
  320. package/client/dist/assets/undo-6zuS4-sL.js +1 -0
  321. package/client/dist/assets/undo-BeM4gDOP.js +1 -0
  322. package/client/dist/assets/undo-BeppX8xS.js +1 -0
  323. package/client/dist/assets/undo-BqvNZ5MG.js +1 -0
  324. package/client/dist/assets/undo-BzwEPf_k.js +1 -0
  325. package/client/dist/assets/undo-CJ9Cu1NN.js +1 -0
  326. package/client/dist/assets/undo-ds8nMFbX.js +1 -0
  327. package/client/dist/assets/undo-x_gA-knG.js +1 -0
  328. package/client/dist/assets/useDesktop-BuOp2-MR.js +1 -0
  329. package/client/dist/assets/useRuntimeRuns-BRS6ncnO.js +1 -0
  330. package/client/dist/assets/utils-ELimjS2Y.js +1 -0
  331. package/client/dist/assets/wrench-Br2n1Lxd.js +1 -0
  332. package/client/dist/index.html +75 -60
  333. package/docs/ci-cd.md +29 -1
  334. package/docs/cli.md +10 -31
  335. package/docs/codex.md +1 -1
  336. package/docs/creating-specs.md +15 -12
  337. package/docs/customizing.md +16 -13
  338. package/docs/getting-started.md +12 -11
  339. package/docs/guide/de/agents/1-meet-the-agents.md +1 -1
  340. package/docs/guide/de/getting-started/2-installing-and-first-run.md +2 -0
  341. package/docs/guide/de/getting-started/3-try-the-sample-project.md +35 -0
  342. package/docs/guide/de/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
  343. package/docs/guide/de/getting-started/6-universal-search.md +34 -0
  344. package/docs/guide/de/insights/1-analytics-and-cost-tracking.md +20 -6
  345. package/docs/guide/de/insights/2-the-integrated-terminal.md +1 -1
  346. package/docs/guide/de/insights/3-code-explorer.md +1 -1
  347. package/docs/guide/de/integrations/1-ai-providers.md +1 -1
  348. package/docs/guide/de/integrations/2-plugins.md +1 -1
  349. package/docs/guide/de/integrations/3-jira-integration.md +3 -3
  350. package/docs/guide/de/integrations/4-mobile-companion.md +1 -1
  351. package/docs/guide/de/integrations/5-mcp-server.md +1 -1
  352. package/docs/guide/de/integrations/6-agent-chat.md +12 -5
  353. package/docs/guide/de/integrations/8-flow-mode.md +69 -0
  354. package/docs/guide/de/pipeline/1-rails-and-jobs.md +21 -1
  355. package/docs/guide/de/pipeline/2-the-job-detail-view.md +12 -0
  356. package/docs/guide/de/pipeline/3-reviewing-a-delivery.md +43 -0
  357. package/docs/guide/de/pipeline/4-picking-an-engine-per-rail.md +2 -2
  358. package/docs/guide/de/pipeline/5-the-loop-builder.md +1 -1
  359. package/docs/guide/de/settings/1-themes.md +1 -1
  360. package/docs/guide/de/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
  361. package/docs/guide/de/settings/5-project-environment.md +1 -1
  362. package/docs/guide/de/settings/6-updates.md +24 -0
  363. package/docs/guide/de/settings/7-existing-projects.md +33 -0
  364. package/docs/guide/de/settings/8-accessibility.md +23 -0
  365. package/docs/guide/de/specs/1-specs-and-the-backlog.md +41 -3
  366. package/docs/guide/de/specs/2-add-spec-quick-mode.md +1 -1
  367. package/docs/guide/de/specs/3-add-spec-explore-mode.md +1 -1
  368. package/docs/guide/en/agents/1-meet-the-agents.md +1 -1
  369. package/docs/guide/en/getting-started/1-what-is-specrails.md +1 -1
  370. package/docs/guide/en/getting-started/2-installing-and-first-run.md +2 -0
  371. package/docs/guide/en/getting-started/3-try-the-sample-project.md +35 -0
  372. package/docs/guide/en/getting-started/5-the-dashboard-tour.md +52 -0
  373. package/docs/guide/en/getting-started/6-universal-search.md +34 -0
  374. package/docs/guide/en/insights/1-analytics-and-cost-tracking.md +24 -10
  375. package/docs/guide/en/insights/2-the-integrated-terminal.md +1 -1
  376. package/docs/guide/en/insights/3-code-explorer.md +5 -5
  377. package/docs/guide/en/integrations/1-ai-providers.md +1 -1
  378. package/docs/guide/en/integrations/2-plugins.md +1 -1
  379. package/docs/guide/en/integrations/3-jira-integration.md +4 -4
  380. package/docs/guide/en/integrations/4-mobile-companion.md +1 -1
  381. package/docs/guide/en/integrations/5-mcp-server.md +4 -4
  382. package/docs/guide/en/integrations/6-agent-chat.md +12 -5
  383. package/docs/guide/en/integrations/8-flow-mode.md +69 -0
  384. package/docs/guide/en/pipeline/1-rails-and-jobs.md +22 -3
  385. package/docs/guide/en/pipeline/2-the-job-detail-view.md +19 -7
  386. package/docs/guide/en/pipeline/3-reviewing-a-delivery.md +43 -0
  387. package/docs/guide/en/pipeline/4-picking-an-engine-per-rail.md +2 -2
  388. package/docs/guide/en/pipeline/5-the-loop-builder.md +2 -2
  389. package/docs/guide/en/settings/1-themes.md +1 -1
  390. package/docs/guide/en/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
  391. package/docs/guide/en/settings/5-project-environment.md +1 -1
  392. package/docs/guide/en/settings/6-updates.md +24 -0
  393. package/docs/guide/en/settings/7-existing-projects.md +33 -0
  394. package/docs/guide/en/settings/8-accessibility.md +23 -0
  395. package/docs/guide/en/specs/1-specs-and-the-backlog.md +42 -6
  396. package/docs/guide/en/specs/2-add-spec-quick-mode.md +1 -1
  397. package/docs/guide/en/specs/3-add-spec-explore-mode.md +2 -2
  398. package/docs/guide/es/agents/1-meet-the-agents.md +1 -1
  399. package/docs/guide/es/agents/2-profiles-and-the-balanced-default.md +1 -1
  400. package/docs/guide/es/agents/3-customizing-models-per-agent.md +2 -2
  401. package/docs/guide/es/agents/4-custom-agents-catalog.md +1 -1
  402. package/docs/guide/es/getting-started/1-what-is-specrails.md +3 -3
  403. package/docs/guide/es/getting-started/2-installing-and-first-run.md +2 -0
  404. package/docs/guide/es/getting-started/3-try-the-sample-project.md +35 -0
  405. package/docs/guide/es/getting-started/5-the-dashboard-tour.md +52 -0
  406. package/docs/guide/es/getting-started/6-universal-search.md +34 -0
  407. package/docs/guide/es/insights/1-analytics-and-cost-tracking.md +26 -12
  408. package/docs/guide/es/insights/2-the-integrated-terminal.md +1 -1
  409. package/docs/guide/es/insights/3-code-explorer.md +5 -5
  410. package/docs/guide/es/integrations/1-ai-providers.md +1 -1
  411. package/docs/guide/es/integrations/2-plugins.md +1 -1
  412. package/docs/guide/es/integrations/3-jira-integration.md +4 -4
  413. package/docs/guide/es/integrations/4-mobile-companion.md +1 -1
  414. package/docs/guide/es/integrations/5-mcp-server.md +4 -4
  415. package/docs/guide/es/integrations/6-agent-chat.md +14 -7
  416. package/docs/guide/es/integrations/7-local-engines.md +1 -1
  417. package/docs/guide/es/integrations/8-flow-mode.md +69 -0
  418. package/docs/guide/es/pipeline/1-rails-and-jobs.md +33 -13
  419. package/docs/guide/es/pipeline/2-the-job-detail-view.md +38 -26
  420. package/docs/guide/es/pipeline/3-reviewing-a-delivery.md +43 -0
  421. package/docs/guide/es/pipeline/4-picking-an-engine-per-rail.md +2 -2
  422. package/docs/guide/es/pipeline/5-the-loop-builder.md +4 -4
  423. package/docs/guide/es/settings/1-themes.md +1 -1
  424. package/docs/guide/es/settings/3-pipeline-telemetry-and-diagnostics.md +10 -10
  425. package/docs/guide/es/settings/5-project-environment.md +1 -1
  426. package/docs/guide/es/settings/6-updates.md +24 -0
  427. package/docs/guide/es/settings/7-existing-projects.md +33 -0
  428. package/docs/guide/es/settings/8-accessibility.md +23 -0
  429. package/docs/guide/es/specs/1-specs-and-the-backlog.md +43 -7
  430. package/docs/guide/es/specs/2-add-spec-quick-mode.md +1 -1
  431. package/docs/guide/es/specs/3-add-spec-explore-mode.md +3 -3
  432. package/docs/guide/fr/agents/1-meet-the-agents.md +1 -1
  433. package/docs/guide/fr/getting-started/2-installing-and-first-run.md +2 -0
  434. package/docs/guide/fr/getting-started/3-try-the-sample-project.md +35 -0
  435. package/docs/guide/fr/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
  436. package/docs/guide/fr/getting-started/6-universal-search.md +34 -0
  437. package/docs/guide/fr/insights/1-analytics-and-cost-tracking.md +18 -4
  438. package/docs/guide/fr/insights/2-the-integrated-terminal.md +1 -1
  439. package/docs/guide/fr/insights/3-code-explorer.md +1 -1
  440. package/docs/guide/fr/integrations/1-ai-providers.md +1 -1
  441. package/docs/guide/fr/integrations/2-plugins.md +1 -1
  442. package/docs/guide/fr/integrations/3-jira-integration.md +3 -3
  443. package/docs/guide/fr/integrations/4-mobile-companion.md +1 -1
  444. package/docs/guide/fr/integrations/5-mcp-server.md +1 -1
  445. package/docs/guide/fr/integrations/6-agent-chat.md +11 -4
  446. package/docs/guide/fr/integrations/8-flow-mode.md +69 -0
  447. package/docs/guide/fr/pipeline/1-rails-and-jobs.md +21 -1
  448. package/docs/guide/fr/pipeline/2-the-job-detail-view.md +12 -0
  449. package/docs/guide/fr/pipeline/3-reviewing-a-delivery.md +43 -0
  450. package/docs/guide/fr/pipeline/4-picking-an-engine-per-rail.md +2 -2
  451. package/docs/guide/fr/pipeline/5-the-loop-builder.md +1 -1
  452. package/docs/guide/fr/settings/1-themes.md +1 -1
  453. package/docs/guide/fr/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
  454. package/docs/guide/fr/settings/5-project-environment.md +1 -1
  455. package/docs/guide/fr/settings/6-updates.md +24 -0
  456. package/docs/guide/fr/settings/7-existing-projects.md +33 -0
  457. package/docs/guide/fr/settings/8-accessibility.md +23 -0
  458. package/docs/guide/fr/specs/1-specs-and-the-backlog.md +41 -3
  459. package/docs/guide/fr/specs/2-add-spec-quick-mode.md +1 -1
  460. package/docs/guide/fr/specs/3-add-spec-explore-mode.md +1 -1
  461. package/docs/guide/it/agents/1-meet-the-agents.md +1 -1
  462. package/docs/guide/it/getting-started/2-installing-and-first-run.md +2 -0
  463. package/docs/guide/it/getting-started/3-try-the-sample-project.md +35 -0
  464. package/docs/guide/it/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
  465. package/docs/guide/it/getting-started/6-universal-search.md +34 -0
  466. package/docs/guide/it/insights/1-analytics-and-cost-tracking.md +18 -4
  467. package/docs/guide/it/insights/2-the-integrated-terminal.md +1 -1
  468. package/docs/guide/it/insights/3-code-explorer.md +1 -1
  469. package/docs/guide/it/integrations/1-ai-providers.md +1 -1
  470. package/docs/guide/it/integrations/2-plugins.md +1 -1
  471. package/docs/guide/it/integrations/3-jira-integration.md +3 -3
  472. package/docs/guide/it/integrations/4-mobile-companion.md +1 -1
  473. package/docs/guide/it/integrations/5-mcp-server.md +1 -1
  474. package/docs/guide/it/integrations/6-agent-chat.md +11 -4
  475. package/docs/guide/it/integrations/8-flow-mode.md +69 -0
  476. package/docs/guide/it/pipeline/1-rails-and-jobs.md +21 -1
  477. package/docs/guide/it/pipeline/2-the-job-detail-view.md +12 -0
  478. package/docs/guide/it/pipeline/3-reviewing-a-delivery.md +43 -0
  479. package/docs/guide/it/pipeline/4-picking-an-engine-per-rail.md +2 -2
  480. package/docs/guide/it/pipeline/5-the-loop-builder.md +1 -1
  481. package/docs/guide/it/settings/1-themes.md +1 -1
  482. package/docs/guide/it/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
  483. package/docs/guide/it/settings/5-project-environment.md +1 -1
  484. package/docs/guide/it/settings/6-updates.md +24 -0
  485. package/docs/guide/it/settings/7-existing-projects.md +33 -0
  486. package/docs/guide/it/settings/8-accessibility.md +23 -0
  487. package/docs/guide/it/specs/1-specs-and-the-backlog.md +41 -3
  488. package/docs/guide/it/specs/2-add-spec-quick-mode.md +1 -1
  489. package/docs/guide/it/specs/3-add-spec-explore-mode.md +1 -1
  490. package/docs/guide/ja/agents/1-meet-the-agents.md +1 -1
  491. package/docs/guide/ja/getting-started/2-installing-and-first-run.md +2 -0
  492. package/docs/guide/ja/getting-started/3-try-the-sample-project.md +35 -0
  493. package/docs/guide/ja/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
  494. package/docs/guide/ja/getting-started/6-universal-search.md +34 -0
  495. package/docs/guide/ja/insights/1-analytics-and-cost-tracking.md +18 -4
  496. package/docs/guide/ja/insights/2-the-integrated-terminal.md +1 -1
  497. package/docs/guide/ja/insights/3-code-explorer.md +1 -1
  498. package/docs/guide/ja/integrations/1-ai-providers.md +1 -1
  499. package/docs/guide/ja/integrations/2-plugins.md +1 -1
  500. package/docs/guide/ja/integrations/3-jira-integration.md +3 -3
  501. package/docs/guide/ja/integrations/4-mobile-companion.md +1 -1
  502. package/docs/guide/ja/integrations/5-mcp-server.md +1 -1
  503. package/docs/guide/ja/integrations/6-agent-chat.md +11 -4
  504. package/docs/guide/ja/integrations/8-flow-mode.md +69 -0
  505. package/docs/guide/ja/pipeline/1-rails-and-jobs.md +21 -1
  506. package/docs/guide/ja/pipeline/2-the-job-detail-view.md +12 -0
  507. package/docs/guide/ja/pipeline/3-reviewing-a-delivery.md +43 -0
  508. package/docs/guide/ja/pipeline/4-picking-an-engine-per-rail.md +2 -2
  509. package/docs/guide/ja/pipeline/5-the-loop-builder.md +1 -1
  510. package/docs/guide/ja/settings/1-themes.md +1 -1
  511. package/docs/guide/ja/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
  512. package/docs/guide/ja/settings/5-project-environment.md +1 -1
  513. package/docs/guide/ja/settings/6-updates.md +24 -0
  514. package/docs/guide/ja/settings/7-existing-projects.md +33 -0
  515. package/docs/guide/ja/settings/8-accessibility.md +23 -0
  516. package/docs/guide/ja/specs/1-specs-and-the-backlog.md +41 -3
  517. package/docs/guide/ja/specs/2-add-spec-quick-mode.md +1 -1
  518. package/docs/guide/ja/specs/3-add-spec-explore-mode.md +1 -1
  519. package/docs/guide/pt/agents/1-meet-the-agents.md +1 -1
  520. package/docs/guide/pt/getting-started/2-installing-and-first-run.md +2 -0
  521. package/docs/guide/pt/getting-started/3-try-the-sample-project.md +35 -0
  522. package/docs/guide/pt/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
  523. package/docs/guide/pt/getting-started/6-universal-search.md +34 -0
  524. package/docs/guide/pt/insights/1-analytics-and-cost-tracking.md +18 -4
  525. package/docs/guide/pt/insights/2-the-integrated-terminal.md +1 -1
  526. package/docs/guide/pt/insights/3-code-explorer.md +1 -1
  527. package/docs/guide/pt/integrations/1-ai-providers.md +1 -1
  528. package/docs/guide/pt/integrations/2-plugins.md +1 -1
  529. package/docs/guide/pt/integrations/3-jira-integration.md +3 -3
  530. package/docs/guide/pt/integrations/4-mobile-companion.md +1 -1
  531. package/docs/guide/pt/integrations/5-mcp-server.md +1 -1
  532. package/docs/guide/pt/integrations/6-agent-chat.md +12 -5
  533. package/docs/guide/pt/integrations/8-flow-mode.md +69 -0
  534. package/docs/guide/pt/pipeline/1-rails-and-jobs.md +21 -1
  535. package/docs/guide/pt/pipeline/2-the-job-detail-view.md +12 -0
  536. package/docs/guide/pt/pipeline/3-reviewing-a-delivery.md +43 -0
  537. package/docs/guide/pt/pipeline/4-picking-an-engine-per-rail.md +2 -2
  538. package/docs/guide/pt/pipeline/5-the-loop-builder.md +1 -1
  539. package/docs/guide/pt/settings/1-themes.md +1 -1
  540. package/docs/guide/pt/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
  541. package/docs/guide/pt/settings/5-project-environment.md +1 -1
  542. package/docs/guide/pt/settings/6-updates.md +24 -0
  543. package/docs/guide/pt/settings/7-existing-projects.md +33 -0
  544. package/docs/guide/pt/settings/8-accessibility.md +23 -0
  545. package/docs/guide/pt/specs/1-specs-and-the-backlog.md +41 -3
  546. package/docs/guide/pt/specs/2-add-spec-quick-mode.md +1 -1
  547. package/docs/guide/pt/specs/3-add-spec-explore-mode.md +1 -1
  548. package/docs/guide/zh/agents/1-meet-the-agents.md +1 -1
  549. package/docs/guide/zh/getting-started/2-installing-and-first-run.md +2 -0
  550. package/docs/guide/zh/getting-started/3-try-the-sample-project.md +35 -0
  551. package/docs/guide/zh/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
  552. package/docs/guide/zh/getting-started/6-universal-search.md +34 -0
  553. package/docs/guide/zh/insights/1-analytics-and-cost-tracking.md +18 -4
  554. package/docs/guide/zh/insights/2-the-integrated-terminal.md +1 -1
  555. package/docs/guide/zh/insights/3-code-explorer.md +1 -1
  556. package/docs/guide/zh/integrations/1-ai-providers.md +1 -1
  557. package/docs/guide/zh/integrations/2-plugins.md +1 -1
  558. package/docs/guide/zh/integrations/3-jira-integration.md +3 -3
  559. package/docs/guide/zh/integrations/4-mobile-companion.md +1 -1
  560. package/docs/guide/zh/integrations/5-mcp-server.md +1 -1
  561. package/docs/guide/zh/integrations/6-agent-chat.md +11 -4
  562. package/docs/guide/zh/integrations/8-flow-mode.md +69 -0
  563. package/docs/guide/zh/pipeline/1-rails-and-jobs.md +21 -1
  564. package/docs/guide/zh/pipeline/2-the-job-detail-view.md +12 -0
  565. package/docs/guide/zh/pipeline/3-reviewing-a-delivery.md +43 -0
  566. package/docs/guide/zh/pipeline/4-picking-an-engine-per-rail.md +2 -2
  567. package/docs/guide/zh/pipeline/5-the-loop-builder.md +1 -1
  568. package/docs/guide/zh/settings/1-themes.md +1 -1
  569. package/docs/guide/zh/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
  570. package/docs/guide/zh/settings/5-project-environment.md +1 -1
  571. package/docs/guide/zh/settings/6-updates.md +24 -0
  572. package/docs/guide/zh/settings/7-existing-projects.md +33 -0
  573. package/docs/guide/zh/settings/8-accessibility.md +23 -0
  574. package/docs/guide/zh/specs/1-specs-and-the-backlog.md +41 -3
  575. package/docs/guide/zh/specs/2-add-spec-quick-mode.md +1 -1
  576. package/docs/guide/zh/specs/3-add-spec-explore-mode.md +1 -1
  577. package/docs/internals/README.md +8 -0
  578. package/docs/internals/adding-a-provider.md +19 -2
  579. package/docs/internals/agent-actions-audit.md +101 -0
  580. package/docs/internals/agent-sessions.md +36 -1
  581. package/docs/internals/api-reference.md +190 -45
  582. package/docs/internals/architecture.md +53 -47
  583. package/docs/internals/companion-inbox-decisions.md +42 -0
  584. package/docs/internals/companion-rails-as-loops-contract.md +17 -6
  585. package/docs/internals/configuration.md +140 -9
  586. package/docs/internals/core-runtime-updates.md +4 -4
  587. package/docs/internals/existing-project-anchoring.md +168 -0
  588. package/docs/internals/flow-mode.md +668 -0
  589. package/docs/internals/legacy-implementation-notes.md +13 -0
  590. package/docs/internals/local-testing-feedback-2026-10.md +210 -0
  591. package/docs/internals/mcp-mission-audit.md +4 -0
  592. package/docs/internals/mission-rail-cards.md +10 -5
  593. package/docs/internals/mission-read-only-policy.md +152 -0
  594. package/docs/internals/modal-standard.md +181 -0
  595. package/docs/internals/openspec-workflow.md +32 -0
  596. package/docs/internals/operations-runbook.md +30 -0
  597. package/docs/internals/profiles.md +6 -3
  598. package/docs/internals/programmatic-agent-runtime.md +8 -0
  599. package/docs/internals/project-builder.md +1 -1
  600. package/docs/internals/review-packet.md +161 -9
  601. package/docs/internals/safe-pr-review-flow.md +135 -6
  602. package/docs/internals/source-map.md +413 -18
  603. package/docs/internals/spec-addenda.md +10 -0
  604. package/docs/internals/spec-triage.md +140 -0
  605. package/docs/internals/visual-design-audit.md +15 -2
  606. package/docs/local-providers.md +3 -0
  607. package/docs/mcp.md +21 -3
  608. package/docs/platforms/macos.md +1 -1
  609. package/docs/platforms/windows.md +2 -2
  610. package/docs/running-pipelines.md +22 -6
  611. package/docs/tracking-cost.md +54 -10
  612. package/local-runner/dist/specrails-local-runner.js +3851 -1178
  613. package/mcp-bridge/dist/specrails-mcp.js +3864 -1143
  614. package/package.json +10 -9
  615. package/server/dist/agent-mcp-config.js +37 -1
  616. package/server/dist/api-version.js +19 -0
  617. package/server/dist/command-resolver.js +4 -2
  618. package/server/dist/core-compat.js +1 -1
  619. package/server/dist/core-execution.js +2 -1
  620. package/server/dist/core-update-manager.js +71 -13
  621. package/server/dist/db/job-search.js +248 -0
  622. package/server/dist/db/jobs.js +6 -0
  623. package/server/dist/db/migrations.js +239 -0
  624. package/server/dist/db.js +9 -2
  625. package/server/dist/desktop-db.js +99 -5
  626. package/server/dist/desktop-router.js +126 -13
  627. package/server/dist/docs-router.js +67 -1
  628. package/server/dist/feature-flags.js +22 -0
  629. package/server/dist/index.js +30 -15
  630. package/server/dist/jira/jira-adf.js +13 -1
  631. package/server/dist/jira/jira-clarifications.js +146 -0
  632. package/server/dist/jira/jira-client.js +8 -1
  633. package/server/dist/jira/jira-db.js +41 -0
  634. package/server/dist/jira/jira-sync-manager.js +328 -25
  635. package/server/dist/mcp/guide.js +17 -7
  636. package/server/dist/mcp/tools/agents.js +1 -1
  637. package/server/dist/mcp/tools/analytics.js +15 -3
  638. package/server/dist/mcp/tools/app-settings.js +14 -1
  639. package/server/dist/mcp/tools/chat.js +1 -1
  640. package/server/dist/mcp/tools/env.js +4 -2
  641. package/server/dist/mcp/tools/jobs.js +96 -7
  642. package/server/dist/mcp/tools/loops.js +1 -1
  643. package/server/dist/mcp/tools/meta.js +10 -13
  644. package/server/dist/mcp/tools/rails.js +15 -1
  645. package/server/dist/mcp/tools/setup.js +1 -1
  646. package/server/dist/mcp/tools/specs.js +8 -5
  647. package/server/dist/mcp/tools/support.js +6 -3
  648. package/server/dist/mcp/tools/types.js +38 -1
  649. package/server/dist/mobile/mobile-admin-router.js +0 -16
  650. package/server/dist/mobile/mobile-gateway.js +0 -18
  651. package/server/dist/mobile/mobile-inbox.js +240 -0
  652. package/server/dist/mobile/mobile-missions.js +6 -8
  653. package/server/dist/mobile/mobile-router.js +9 -9
  654. package/server/dist/mobile/mobile-webrtc-peer.js +4 -54
  655. package/server/dist/mobile/mobile-ws.js +27 -4
  656. package/server/dist/modules/accounting/runtime/ai-invocations.js +4 -0
  657. package/server/dist/modules/accounting/runtime/decision-times.js +102 -0
  658. package/server/dist/modules/accounting/runtime/loop-economics.js +284 -0
  659. package/server/dist/modules/accounting/runtime/spending.js +7 -2
  660. package/server/dist/modules/accounting/runtime/what-if.js +87 -0
  661. package/server/dist/modules/agent-runtime/runtime/agent-runtime-bridge.js +86 -5
  662. package/server/dist/modules/agent-runtime/runtime/agent-runtime-controls.js +28 -2
  663. package/server/dist/modules/agent-runtime/runtime/agent-runtime-metrics.js +15 -2
  664. package/server/dist/modules/agent-runtime/runtime/agent-runtime-settings-router.js +21 -2
  665. package/server/dist/modules/agent-runtime/runtime/core-capabilities.js +55 -0
  666. package/server/dist/modules/agent-sessions/adapters/host-process.js +1 -1
  667. package/server/dist/modules/agent-sessions/domain/availability.js +16 -0
  668. package/server/dist/modules/agent-sessions/domain/protocol.js +8 -1
  669. package/server/dist/modules/agent-sessions/index.js +3 -1
  670. package/server/dist/modules/agent-sessions/runtime/core-sessions-availability.js +16 -0
  671. package/server/dist/modules/agents/runtime/agent-refine-manager.js +3 -1
  672. package/server/dist/modules/agents/runtime/agent-store.js +60 -73
  673. package/server/dist/modules/audit/adapters/http.js +66 -0
  674. package/server/dist/modules/audit/adapters/runtime.js +60 -0
  675. package/server/dist/modules/audit/adapters/sqlite.js +73 -0
  676. package/server/dist/modules/audit/application.js +190 -0
  677. package/server/dist/modules/audit/domain.js +434 -0
  678. package/server/dist/modules/audit/index.js +27 -0
  679. package/server/dist/modules/audit/ports.js +2 -0
  680. package/server/dist/modules/browser/runtime/browser-capture-manager.js +18 -141
  681. package/server/dist/modules/browser/runtime/browser-capture-types.js +1 -10
  682. package/server/dist/modules/browser/runtime/browser-playwright.js +0 -19
  683. package/server/dist/modules/code/runtime/file-provenance.js +23 -0
  684. package/server/dist/modules/conversations/runtime/chat-manager.js +5 -2
  685. package/server/dist/modules/delivery/adapters/decisions/chains.js +1 -0
  686. package/server/dist/modules/delivery/adapters/decisions/create.js +19 -1
  687. package/server/dist/modules/delivery/adapters/decisions/discard.js +2 -0
  688. package/server/dist/modules/delivery/adapters/decisions/local-changes.js +427 -0
  689. package/server/dist/modules/delivery/adapters/decisions/merge-local.js +80 -6
  690. package/server/dist/modules/delivery/adapters/decisions/observations.js +5 -0
  691. package/server/dist/modules/delivery/adapters/decisions/ownership.js +2 -1
  692. package/server/dist/modules/delivery/adapters/decisions/transitions.js +9 -0
  693. package/server/dist/modules/delivery/adapters/review-wip-store.js +37 -0
  694. package/server/dist/modules/delivery/domain/review-wip.js +71 -0
  695. package/server/dist/modules/delivery/index.js +9 -1
  696. package/server/dist/modules/delivery/runtime/delivery-changes.js +355 -0
  697. package/server/dist/modules/delivery/runtime/delivery-evidence.js +249 -8
  698. package/server/dist/modules/delivery/runtime/flow-review-legacy.js +99 -0
  699. package/server/dist/modules/delivery/runtime/flow-review-outcome.js +107 -0
  700. package/server/dist/modules/delivery/runtime/flow-worktree-handoff.js +32 -0
  701. package/server/dist/modules/delivery/runtime/flow-worktree-return.js +87 -0
  702. package/server/dist/modules/delivery/runtime/isolated-worktree.js +380 -0
  703. package/server/dist/modules/delivery/runtime/local-restore-branch.js +325 -0
  704. package/server/dist/modules/delivery/runtime/local-restore-resolver.js +48 -0
  705. package/server/dist/modules/delivery/runtime/local-stash.js +423 -0
  706. package/server/dist/modules/delivery/runtime/multi-repo-execution.js +27 -1
  707. package/server/dist/modules/delivery/runtime/phase3-harvest.js +40 -0
  708. package/server/dist/modules/delivery/runtime/pr-body.js +50 -0
  709. package/server/dist/modules/delivery/runtime/rail-isolated-launch.js +169 -166
  710. package/server/dist/modules/delivery/runtime/rail-launch-parser.js +5 -2
  711. package/server/dist/modules/delivery/runtime/rail-pr-decision.js +7 -1
  712. package/server/dist/modules/delivery/runtime/rail-pr-store.js +193 -12
  713. package/server/dist/modules/delivery/runtime/rails-router.js +267 -5
  714. package/server/dist/modules/delivery/runtime/review-brief.js +208 -0
  715. package/server/dist/modules/delivery/runtime/review-packet.js +41 -2
  716. package/server/dist/modules/delivery/runtime/review-wip-gate.js +67 -0
  717. package/server/dist/modules/delivery/runtime/run-records.js +267 -0
  718. package/server/dist/modules/delivery/runtime/run-review-diagnosis.js +102 -0
  719. package/server/dist/modules/execution/adapters/budget-storage.js +76 -0
  720. package/server/dist/modules/execution/application/enforce-budget.js +17 -2
  721. package/server/dist/modules/execution/domain/agent-env.js +98 -0
  722. package/server/dist/modules/execution/domain/daily-budget.js +36 -0
  723. package/server/dist/modules/execution/domain/spend-caps.js +166 -0
  724. package/server/dist/modules/execution/index.js +34 -1
  725. package/server/dist/modules/execution/runtime/budget-overview.js +76 -0
  726. package/server/dist/modules/execution/runtime/daily-budget-gate.js +86 -0
  727. package/server/dist/modules/execution/runtime/interactive-job-session.js +8 -0
  728. package/server/dist/modules/execution/runtime/launch-forecast.js +33 -0
  729. package/server/dist/modules/execution/runtime/queue-manager.js +54 -15
  730. package/server/dist/modules/execution/runtime/run-duration-stats.js +31 -13
  731. package/server/dist/modules/flow/adapters/bindings.js +1089 -0
  732. package/server/dist/modules/flow/adapters/http.js +147 -0
  733. package/server/dist/modules/flow/adapters/sqlite.js +121 -0
  734. package/server/dist/modules/flow/application.js +805 -0
  735. package/server/dist/modules/flow/domain.js +790 -0
  736. package/server/dist/modules/flow/index.js +34 -0
  737. package/server/dist/modules/flow/ports.js +2 -0
  738. package/server/dist/modules/inbox/adapters/http.js +21 -0
  739. package/server/dist/modules/inbox/adapters/project-source.js +233 -0
  740. package/server/dist/modules/inbox/application.js +28 -0
  741. package/server/dist/modules/inbox/domain.js +43 -0
  742. package/server/dist/modules/inbox/index.js +10 -0
  743. package/server/dist/modules/inbox/ports.js +2 -0
  744. package/server/dist/modules/loops/runtime/loop-definition-run.js +9 -0
  745. package/server/dist/modules/loops/runtime/loop-definition.js +5 -2
  746. package/server/dist/modules/loops/runtime/loop-executors.js +90 -9
  747. package/server/dist/modules/loops/runtime/loop-factory.js +30 -2
  748. package/server/dist/modules/loops/runtime/loop-flow-spec-recipe.js +166 -0
  749. package/server/dist/modules/loops/runtime/loop-graph.js +1 -1
  750. package/server/dist/modules/loops/runtime/loop-role-engines.js +4 -1
  751. package/server/dist/modules/loops/runtime/loop-run-manager.js +267 -10
  752. package/server/dist/modules/loops/runtime/loop-runs-store.js +21 -5
  753. package/server/dist/modules/loops/runtime/loop-templates.js +55 -12
  754. package/server/dist/modules/missions/runtime/agent-chat-manager.js +283 -20
  755. package/server/dist/modules/missions/runtime/agent-chat-router.js +96 -21
  756. package/server/dist/modules/missions/runtime/agent-failure-briefing.js +11 -3
  757. package/server/dist/modules/missions/runtime/agent-fence-promotion.js +9 -1
  758. package/server/dist/modules/missions/runtime/agent-flow-prompt.js +64 -0
  759. package/server/dist/modules/missions/runtime/agent-input-store.js +9 -4
  760. package/server/dist/modules/missions/runtime/agent-operator-prompt.js +100 -14
  761. package/server/dist/modules/missions/runtime/agent-session-store.js +88 -27
  762. package/server/dist/modules/missions/runtime/core-session-runner.js +89 -9
  763. package/server/dist/modules/missions/runtime/flow-turn-context.js +17 -0
  764. package/server/dist/modules/missions/runtime/mission-core-sessions.js +295 -55
  765. package/server/dist/modules/missions/runtime/mission-run-notify.js +2 -0
  766. package/server/dist/modules/missions/runtime/mission-session-projector.js +56 -19
  767. package/server/dist/modules/missions/runtime/mission-tool-policy.js +47 -0
  768. package/server/dist/modules/onboarding/adapters/http.js +78 -0
  769. package/server/dist/modules/onboarding/adapters/providers.js +41 -0
  770. package/server/dist/modules/onboarding/adapters/runtime.js +130 -0
  771. package/server/dist/modules/onboarding/application.js +133 -0
  772. package/server/dist/modules/onboarding/catalog.js +217 -0
  773. package/server/dist/modules/onboarding/domain.js +102 -0
  774. package/server/dist/modules/onboarding/index.js +20 -0
  775. package/server/dist/modules/onboarding/ports.js +2 -0
  776. package/server/dist/modules/project-rules/adapters/http.js +91 -0
  777. package/server/dist/modules/project-rules/domain.js +122 -0
  778. package/server/dist/modules/project-rules/runtime/rules-inventory-runs.js +97 -0
  779. package/server/dist/modules/project-rules/runtime/rules-store.js +109 -0
  780. package/server/dist/modules/project-settings/adapters/http.js +13 -0
  781. package/server/dist/modules/project-settings/adapters/sqlite.js +78 -8
  782. package/server/dist/modules/project-settings/domain.js +47 -1
  783. package/server/dist/modules/project-settings/index.js +7 -1
  784. package/server/dist/modules/recovery/adapters/sqlite.js +28 -0
  785. package/server/dist/modules/recovery/domain.js +162 -0
  786. package/server/dist/modules/recovery/index.js +16 -0
  787. package/server/dist/modules/specs/adapters/timeline-http.js +101 -0
  788. package/server/dist/modules/specs/domain/handoff-labels.js +371 -0
  789. package/server/dist/modules/specs/domain/handoff.js +260 -0
  790. package/server/dist/modules/specs/domain/non-goals.js +101 -0
  791. package/server/dist/modules/specs/domain/timeline.js +164 -0
  792. package/server/dist/modules/specs/domain/triage.js +320 -0
  793. package/server/dist/modules/specs/runtime/contract-refine-runner.js +3 -2
  794. package/server/dist/modules/specs/runtime/generated-spec-parser.js +75 -0
  795. package/server/dist/modules/specs/runtime/proposal-manager.js +4 -3
  796. package/server/dist/modules/specs/runtime/smash-runner.js +2 -1
  797. package/server/dist/modules/specs/runtime/spec-addenda.js +31 -0
  798. package/server/dist/modules/specs/runtime/spec-draft-parser.js +6 -1
  799. package/server/dist/modules/specs/runtime/spec-generation.js +431 -0
  800. package/server/dist/modules/specs/runtime/spec-handoff.js +103 -0
  801. package/server/dist/modules/specs/runtime/spec-history.js +376 -0
  802. package/server/dist/modules/specs/runtime/spec-launcher-manager.js +4 -3
  803. package/server/dist/modules/specs/runtime/spec-search.js +117 -0
  804. package/server/dist/modules/specs/runtime/ticket-store.js +47 -2
  805. package/server/dist/modules/specs/runtime/ticket-trash-service.js +62 -0
  806. package/server/dist/modules/specs/runtime/ticket-trash.js +193 -0
  807. package/server/dist/modules/specs/runtime/triage-runner.js +171 -0
  808. package/server/dist/modules/specs/runtime/triage.js +365 -0
  809. package/server/dist/modules/terminals/domain/app-urls.js +96 -0
  810. package/server/dist/modules/terminals/runtime/app-urls.js +77 -0
  811. package/server/dist/modules/terminals/runtime/background-process-service.js +25 -28
  812. package/server/dist/openspec-shim.js +1 -1
  813. package/server/dist/project-env.js +60 -0
  814. package/server/dist/project-git.js +65 -0
  815. package/server/dist/project-registry.js +264 -27
  816. package/server/dist/project-router-background-processes.js +27 -3
  817. package/server/dist/project-router-git.js +30 -0
  818. package/server/dist/project-router-helpers.js +5 -30
  819. package/server/dist/project-router-jobs.js +49 -1
  820. package/server/dist/project-router-loop-runs.js +72 -2
  821. package/server/dist/project-router-rules.js +54 -0
  822. package/server/dist/project-router-search.js +52 -0
  823. package/server/dist/project-router-settings.js +6 -0
  824. package/server/dist/project-router-setup.js +1 -1
  825. package/server/dist/project-router-spending.js +138 -0
  826. package/server/dist/project-router-tickets.js +246 -427
  827. package/server/dist/project-router.js +7 -0
  828. package/server/dist/providers/claude-adapter.js +25 -3
  829. package/server/dist/providers/codex-adapter.js +9 -1
  830. package/server/dist/providers/gemini-adapter.js +6 -1
  831. package/server/dist/providers/kimi-adapter.js +2 -0
  832. package/server/dist/providers/local-adapter.js +2 -0
  833. package/server/dist/providers/runtime.js +8 -0
  834. package/server/dist/schemas/agent-runtime.schema.json +3 -1
  835. package/server/dist/schemas/workflow-definition.schema.json +1 -0
  836. package/server/dist/setup-manager.js +19 -1
  837. package/server/dist/transient-children.js +25 -8
  838. package/server/dist/update-channel.js +21 -0
  839. package/server/dist/util/search-snippet.js +74 -0
  840. package/server/dist/worktree-manager.js +19 -8
  841. package/client/dist/assets/ActivityFeedPage-Dtp7EyHc.js +0 -1
  842. package/client/dist/assets/AgentBrowserCapture-CLqlEFw8.js +0 -1
  843. package/client/dist/assets/AgentModeAnalyticsPane-B8_hM3Tw.js +0 -2
  844. package/client/dist/assets/AgentModeCodePane-CNF8ZNjE.js +0 -2
  845. package/client/dist/assets/AgentModeJobsPane-CJpJbO9m.js +0 -1
  846. package/client/dist/assets/AgentsPage-BC8XSR79.js +0 -120
  847. package/client/dist/assets/AnalyticsPage-Cdv4jLtW.js +0 -1
  848. package/client/dist/assets/BarChart-BDMqVFJy.js +0 -55
  849. package/client/dist/assets/CodePage-DI1kegAr.js +0 -3
  850. package/client/dist/assets/DesktopAnalyticsPage-Bdp8E8U6.js +0 -1
  851. package/client/dist/assets/DocsDialog-Bm4RS7FX.js +0 -11
  852. package/client/dist/assets/DocsPage-DihYcU8r.js +0 -11
  853. package/client/dist/assets/ExportDropdown-Bb1lHx3r.js +0 -1
  854. package/client/dist/assets/IntegrationsPage-EAipiDWm.js +0 -1
  855. package/client/dist/assets/InteractiveJobComposer-BO6ASN-2.js +0 -19
  856. package/client/dist/assets/JobDetailModal-CuPYq7tP.js +0 -1
  857. package/client/dist/assets/JobDetailPage-BusMjJi9.js +0 -1
  858. package/client/dist/assets/JobsPage-C0QbsF2d.js +0 -1
  859. package/client/dist/assets/LoopBuilderPage-B7TlU4iS.js +0 -1
  860. package/client/dist/assets/LoopPreviewModal-BRWtXOD2.js +0 -1
  861. package/client/dist/assets/LoopsPage-C4q1DmCE.js +0 -2
  862. package/client/dist/assets/MinimizedChatsContext-DHfigjHS.js +0 -1
  863. package/client/dist/assets/PluginsPage-Z1JHSMdR.js +0 -2
  864. package/client/dist/assets/ProjectSettingsDialog-BUNj0tvN.js +0 -1
  865. package/client/dist/assets/RepositoryDeliveries-B4ybHOyB.js +0 -5
  866. package/client/dist/assets/ReviewPacketPage-hwfPNjyy.js +0 -4
  867. package/client/dist/assets/TemplatePreviewModal-V7FpMWuw.js +0 -1
  868. package/client/dist/assets/TicketDetailModalContext-Dkwo2cDs.js +0 -16
  869. package/client/dist/assets/Trans-BbFxRFtR.js +0 -1
  870. package/client/dist/assets/activity-B-rp4h_v.js +0 -1
  871. package/client/dist/assets/activity-C6kJpm9q.js +0 -1
  872. package/client/dist/assets/activity-CGx4kb_j.js +0 -1
  873. package/client/dist/assets/activity-CnoX2bH7.js +0 -1
  874. package/client/dist/assets/activity-DAyekdlt.js +0 -1
  875. package/client/dist/assets/activity-DCxtpT7j.js +0 -1
  876. package/client/dist/assets/activity-DiyjsgQV.js +0 -1
  877. package/client/dist/assets/activity-JzwRaWPD.js +0 -1
  878. package/client/dist/assets/addspec-BOvgmcgk.js +0 -1
  879. package/client/dist/assets/addspec-Clmyfn_R.js +0 -1
  880. package/client/dist/assets/addspec-CsNaBpHp.js +0 -1
  881. package/client/dist/assets/addspec-D2tvWmmV.js +0 -1
  882. package/client/dist/assets/addspec-D3nFwvD0.js +0 -1
  883. package/client/dist/assets/addspec-DVLEhK3w.js +0 -1
  884. package/client/dist/assets/addspec-DXbK-tb0.js +0 -1
  885. package/client/dist/assets/addspec-OHG8DFEn.js +0 -1
  886. package/client/dist/assets/agent-5bSixVzz.js +0 -1
  887. package/client/dist/assets/agent-BR4EHfhq.js +0 -1
  888. package/client/dist/assets/agent-C0IKkJP8.js +0 -1
  889. package/client/dist/assets/agent-C7li9ayC.js +0 -1
  890. package/client/dist/assets/agent-D0dRmEen.js +0 -1
  891. package/client/dist/assets/agent-DZVGHm7H.js +0 -1
  892. package/client/dist/assets/agent-Dip4h2YE.js +0 -1
  893. package/client/dist/assets/agent-Pp-P-n1p.js +0 -1
  894. package/client/dist/assets/agentRuntime-BxF81z52.js +0 -1
  895. package/client/dist/assets/agentRuntime-BxYS5V7u.js +0 -1
  896. package/client/dist/assets/agentRuntime-Dc9HG3BA.js +0 -1
  897. package/client/dist/assets/agents-B6ZsnARo.js +0 -1
  898. package/client/dist/assets/agents-BORdhe0K.js +0 -1
  899. package/client/dist/assets/agents-C6aq9Oqs.js +0 -1
  900. package/client/dist/assets/agents-Cbsc4bcX.js +0 -1
  901. package/client/dist/assets/agents-D0uYR6hq.js +0 -1
  902. package/client/dist/assets/agents-Doe1sHY5.js +0 -1
  903. package/client/dist/assets/agents-DyNi_I9m.js +0 -1
  904. package/client/dist/assets/agents-StKxiTg0.js +0 -1
  905. package/client/dist/assets/agentstudio-7cYCXn-L.js +0 -1
  906. package/client/dist/assets/agentstudio-BHWQh8G3.js +0 -1
  907. package/client/dist/assets/agentstudio-BjnWHyRs.js +0 -1
  908. package/client/dist/assets/agentstudio-BkV8vcK4.js +0 -1
  909. package/client/dist/assets/agentstudio-BzugqB_N.js +0 -1
  910. package/client/dist/assets/agentstudio-CWbp7KvH.js +0 -1
  911. package/client/dist/assets/agentstudio-DG6plf5o.js +0 -1
  912. package/client/dist/assets/agentstudio-DkZVF-Cc.js +0 -1
  913. package/client/dist/assets/analytics-B1DIQd4m.js +0 -1
  914. package/client/dist/assets/analytics-BAIZ9vE_.js +0 -1
  915. package/client/dist/assets/analytics-BTqgmgBd.js +0 -1
  916. package/client/dist/assets/analytics-BWynXPEm.js +0 -1
  917. package/client/dist/assets/analytics-DGcUsQ44.js +0 -1
  918. package/client/dist/assets/analytics-GnSnpJ4W.js +0 -1
  919. package/client/dist/assets/analytics-TWgYaoO0.js +0 -1
  920. package/client/dist/assets/analytics-kJy6Tuko.js +0 -1
  921. package/client/dist/assets/atom-one-dark-qiGhVQxg.js +0 -1
  922. package/client/dist/assets/builder-B9gorTnT.js +0 -1
  923. package/client/dist/assets/builder-Bvw5s3Mi.js +0 -1
  924. package/client/dist/assets/builder-CL5l4dU3.js +0 -1
  925. package/client/dist/assets/builder-CVDTVrQX.js +0 -1
  926. package/client/dist/assets/builder-CpS9liE9.js +0 -1
  927. package/client/dist/assets/builder-DNctIL9Q.js +0 -1
  928. package/client/dist/assets/builder-De2NxX6o.js +0 -1
  929. package/client/dist/assets/builder-DeYT7Y-m.js +0 -1
  930. package/client/dist/assets/button-4FS1ZDTp.js +0 -1
  931. package/client/dist/assets/chat-D_I7nU5K.js +0 -1
  932. package/client/dist/assets/chevron-up-6EFqEHBj.js +0 -1
  933. package/client/dist/assets/chunk-OB3PAWPO-B1EMk45A.js +0 -3
  934. package/client/dist/assets/clsx-CjueKrWZ.js +0 -1
  935. package/client/dist/assets/code-B37GRg9C.js +0 -1
  936. package/client/dist/assets/code-BBOEZbf9.js +0 -1
  937. package/client/dist/assets/code-BRm-jcyx.js +0 -1
  938. package/client/dist/assets/code-CF7w62CR.js +0 -1
  939. package/client/dist/assets/code-CLuvJt2r.js +0 -1
  940. package/client/dist/assets/code-D0RCm59f.js +0 -1
  941. package/client/dist/assets/code-DaZ-ZwCT.js +0 -1
  942. package/client/dist/assets/code-iIHkGaCL.js +0 -1
  943. package/client/dist/assets/commands-0XjAftla.js +0 -1
  944. package/client/dist/assets/commands-BAWSYHjQ.js +0 -1
  945. package/client/dist/assets/commands-BBwowgiE.js +0 -1
  946. package/client/dist/assets/commands-BacjIZLN.js +0 -1
  947. package/client/dist/assets/commands-Bs62IAZ3.js +0 -1
  948. package/client/dist/assets/commands-CLPdh-Hh.js +0 -1
  949. package/client/dist/assets/commands-DlbFzgrp.js +0 -1
  950. package/client/dist/assets/commands-LjPSsi5F.js +0 -1
  951. package/client/dist/assets/common-Bdi0qN4S.js +0 -1
  952. package/client/dist/assets/common-Bhb9zN1P.js +0 -1
  953. package/client/dist/assets/common-BykKlZg1.js +0 -1
  954. package/client/dist/assets/common-CvnNNSJA.js +0 -1
  955. package/client/dist/assets/common-D5zk_mqq.js +0 -1
  956. package/client/dist/assets/common-DQNO_al5.js +0 -1
  957. package/client/dist/assets/common-Dax30Vmp.js +0 -1
  958. package/client/dist/assets/common-DkllpVSb.js +0 -1
  959. package/client/dist/assets/core-B3mKBIh5.js +0 -1
  960. package/client/dist/assets/dashboard-B1ndRHuC.js +0 -1
  961. package/client/dist/assets/dashboard-BX7KXiqA.js +0 -1
  962. package/client/dist/assets/dashboard-B_BSNxcN.js +0 -1
  963. package/client/dist/assets/dashboard-CCeFN7-V.js +0 -1
  964. package/client/dist/assets/dashboard-CRl0WtFJ.js +0 -1
  965. package/client/dist/assets/dashboard-XGdQ5mjw.js +0 -1
  966. package/client/dist/assets/dashboard-_oltA6Jd.js +0 -1
  967. package/client/dist/assets/dashboard-bAuf5KVk.js +0 -1
  968. package/client/dist/assets/dialog-DtdR05v1.js +0 -45
  969. package/client/dist/assets/dist-js-CJ_2XX1Y.js +0 -1
  970. package/client/dist/assets/event-Bt7f3wXe.js +0 -1
  971. package/client/dist/assets/explore-BG99VGpL.js +0 -1
  972. package/client/dist/assets/explore-C0TjprJW.js +0 -1
  973. package/client/dist/assets/explore-C2dgEo7q.js +0 -1
  974. package/client/dist/assets/explore-C8NDHbob.js +0 -1
  975. package/client/dist/assets/explore-CWWgzQGR.js +0 -1
  976. package/client/dist/assets/explore-CcQXpdtS.js +0 -1
  977. package/client/dist/assets/explore-DgBACn39.js +0 -1
  978. package/client/dist/assets/explore-DsXAgnmJ.js +0 -1
  979. package/client/dist/assets/file-text-C0blZHLh.js +0 -1
  980. package/client/dist/assets/formatDistanceToNow-NjPHBLfB.js +0 -1
  981. package/client/dist/assets/getTimezoneOffsetInMilliseconds-vJ7qUoqN.js +0 -1
  982. package/client/dist/assets/git-branch-yf6LE1Bw.js +0 -1
  983. package/client/dist/assets/index-BgbCbIua.css +0 -2
  984. package/client/dist/assets/index-Ce4yZtKf.js +0 -83
  985. package/client/dist/assets/integrations-BkpRUbvp.js +0 -1
  986. package/client/dist/assets/integrations-Bo8qbJf4.js +0 -1
  987. package/client/dist/assets/integrations-CmSrKzZb.js +0 -1
  988. package/client/dist/assets/integrations-DGtq26Rr.js +0 -1
  989. package/client/dist/assets/integrations-De38GFnQ.js +0 -1
  990. package/client/dist/assets/integrations-Dw6zdtb-.js +0 -1
  991. package/client/dist/assets/integrations-Dwl9KQp0.js +0 -1
  992. package/client/dist/assets/integrations-Refg_d2I.js +0 -1
  993. package/client/dist/assets/jira-B6OYw4CJ.js +0 -1
  994. package/client/dist/assets/jira-BTF6RaOe.js +0 -1
  995. package/client/dist/assets/jira-CEetIB2q.js +0 -1
  996. package/client/dist/assets/jira-CIzsZLw5.js +0 -1
  997. package/client/dist/assets/jira-Daw9tmpI.js +0 -1
  998. package/client/dist/assets/jira-FXr7u2lh.js +0 -1
  999. package/client/dist/assets/jira-LaNQn7yl.js +0 -1
  1000. package/client/dist/assets/jira-api-Cabj-H0J.js +0 -1
  1001. package/client/dist/assets/job-time-BCL7wee9.js +0 -1
  1002. package/client/dist/assets/jobs-ARwD85B9.js +0 -1
  1003. package/client/dist/assets/jobs-BMF1w4WT.js +0 -1
  1004. package/client/dist/assets/jobs-CBfzGLwm.js +0 -1
  1005. package/client/dist/assets/jobs-CPjiluBY.js +0 -1
  1006. package/client/dist/assets/jobs-CQQd58pY.js +0 -1
  1007. package/client/dist/assets/jobs-De3EqaO0.js +0 -1
  1008. package/client/dist/assets/jobs-Du9-Ei9a.js +0 -1
  1009. package/client/dist/assets/jobs-qMHbnxwC.js +0 -1
  1010. package/client/dist/assets/layers-BCLTgHXO.js +0 -1
  1011. package/client/dist/assets/loader-circle-BqV9xYGf.js +0 -1
  1012. package/client/dist/assets/loop-layout-CyXj9223.js +0 -7
  1013. package/client/dist/assets/loops-B2PhQLKR.js +0 -1
  1014. package/client/dist/assets/loops-BqbF46st.js +0 -1
  1015. package/client/dist/assets/loops-CINnHbfI.js +0 -1
  1016. package/client/dist/assets/loops-D-3XhH04.js +0 -1
  1017. package/client/dist/assets/loops-DKkEEjZ_.js +0 -1
  1018. package/client/dist/assets/loops-DzWR5-v6.js +0 -1
  1019. package/client/dist/assets/loops-WyWDkhok.js +0 -1
  1020. package/client/dist/assets/loops-scD5fIBf.js +0 -1
  1021. package/client/dist/assets/mcp-6rMoZfEO.js +0 -1
  1022. package/client/dist/assets/mcp-BD8sL5mP.js +0 -1
  1023. package/client/dist/assets/mcp-BkcA3I5s.js +0 -1
  1024. package/client/dist/assets/mcp-CCpSelOh.js +0 -1
  1025. package/client/dist/assets/mcp-CUAN6ORK.js +0 -1
  1026. package/client/dist/assets/mcp-CqbRxRTE.js +0 -1
  1027. package/client/dist/assets/mcp-DP2YfVhO.js +0 -1
  1028. package/client/dist/assets/mcp-DUVQamDz.js +0 -1
  1029. package/client/dist/assets/narration-BEKMVxGm.js +0 -1
  1030. package/client/dist/assets/narration-CjLwGKap.js +0 -1
  1031. package/client/dist/assets/narration-DANWuGsW.js +0 -1
  1032. package/client/dist/assets/narration-DGeEDWiT.js +0 -1
  1033. package/client/dist/assets/narration-DJgpGwIP.js +0 -1
  1034. package/client/dist/assets/narration-DbHnz0qV.js +0 -1
  1035. package/client/dist/assets/narration-bZSsTZG8.js +0 -1
  1036. package/client/dist/assets/narration-i6aKJKEc.js +0 -1
  1037. package/client/dist/assets/nav--u7iPYlS.js +0 -1
  1038. package/client/dist/assets/nav-C5Jgfaby.js +0 -1
  1039. package/client/dist/assets/nav-CAna_Wpt.js +0 -1
  1040. package/client/dist/assets/nav-CCLqeyHo.js +0 -1
  1041. package/client/dist/assets/nav-Cf3c90Jk.js +0 -1
  1042. package/client/dist/assets/nav-DMYQaQjR.js +0 -1
  1043. package/client/dist/assets/nav-Df_PkZ9F.js +0 -1
  1044. package/client/dist/assets/nav-VyNGBJwj.js +0 -1
  1045. package/client/dist/assets/packet-8nn9RsU7.js +0 -1
  1046. package/client/dist/assets/packet-B0H15elv.js +0 -1
  1047. package/client/dist/assets/packet-BQvBgrwh.js +0 -1
  1048. package/client/dist/assets/packet-BR7mO0-a.js +0 -1
  1049. package/client/dist/assets/packet-BgcQ6q_K.js +0 -1
  1050. package/client/dist/assets/packet-D2s92Jnn.js +0 -1
  1051. package/client/dist/assets/packet-YbtcD1HS.js +0 -1
  1052. package/client/dist/assets/packet-c0Qj_9eX.js +0 -1
  1053. package/client/dist/assets/project-repositories-Cnnuj9Ia.js +0 -1
  1054. package/client/dist/assets/rotate-ccw-DalJAQQX.js +0 -1
  1055. package/client/dist/assets/settings-B1NV8Ow9.js +0 -1
  1056. package/client/dist/assets/settings-BQ8XFZeE.js +0 -1
  1057. package/client/dist/assets/settings-BRkxfBbO.js +0 -1
  1058. package/client/dist/assets/settings-C_CcU1dP.js +0 -1
  1059. package/client/dist/assets/settings-Cto9n0eL.js +0 -1
  1060. package/client/dist/assets/settings-Pyw8uYtL.js +0 -1
  1061. package/client/dist/assets/settings-b3HVCNNd.js +0 -1
  1062. package/client/dist/assets/settings-hdive4u6.js +0 -1
  1063. package/client/dist/assets/setup-Be485n2u.js +0 -1
  1064. package/client/dist/assets/setup-CKGUxKr-.js +0 -1
  1065. package/client/dist/assets/setup-Ck1Uwd7_.js +0 -1
  1066. package/client/dist/assets/setup-Cm774a6v.js +0 -1
  1067. package/client/dist/assets/setup-DIqMQpxt.js +0 -1
  1068. package/client/dist/assets/setup-DfCsoNFL.js +0 -1
  1069. package/client/dist/assets/setup-DkeE8mP0.js +0 -1
  1070. package/client/dist/assets/setup-xVntVaz1.js +0 -1
  1071. package/client/dist/assets/specs-Bqvtz2kz.js +0 -1
  1072. package/client/dist/assets/specs-CKes-kz6.js +0 -1
  1073. package/client/dist/assets/specs-CfXxPDNB.js +0 -1
  1074. package/client/dist/assets/specs-CyF9HuTI.js +0 -1
  1075. package/client/dist/assets/specs-DMj035Mt.js +0 -1
  1076. package/client/dist/assets/specs-DfIdoU5L.js +0 -1
  1077. package/client/dist/assets/specs-j5pGLQeU.js +0 -1
  1078. package/client/dist/assets/specs-xW5pkkB7.js +0 -1
  1079. package/client/dist/assets/spending-CQnrWiR3.js +0 -1
  1080. package/client/dist/assets/square-D0JTbRSR.js +0 -1
  1081. package/client/dist/assets/tauri-shell-DE6LfGPw.js +0 -2
  1082. package/client/dist/assets/terminal-BAzpHtpY.js +0 -1
  1083. package/client/dist/assets/terminal-C7dHeR3x.js +0 -1
  1084. package/client/dist/assets/terminal-CMla5Qsz.js +0 -1
  1085. package/client/dist/assets/terminal-CdNXH-n9.js +0 -1
  1086. package/client/dist/assets/terminal-Cw5bZsmV.js +0 -1
  1087. package/client/dist/assets/terminal-DFUP4eNv.js +0 -1
  1088. package/client/dist/assets/terminal-DGqljeK_.js +0 -1
  1089. package/client/dist/assets/terminal-cU70NodO.js +0 -1
  1090. package/client/dist/assets/tickets--tiSOCcn.js +0 -1
  1091. package/client/dist/assets/tickets-BUJ3DMWU.js +0 -1
  1092. package/client/dist/assets/tickets-C1WNPODq.js +0 -1
  1093. package/client/dist/assets/tickets-CDjhWmiE.js +0 -1
  1094. package/client/dist/assets/tickets-CLgPC3uO.js +0 -1
  1095. package/client/dist/assets/tickets-D41ZMQpf.js +0 -1
  1096. package/client/dist/assets/tickets-DEaQC06P.js +0 -1
  1097. package/client/dist/assets/tickets-kcMzbLCp.js +0 -1
  1098. package/client/dist/assets/trash-D8zYUmTg.js +0 -1
  1099. package/client/dist/assets/useDesktop-BjLT0_EE.js +0 -1
  1100. package/client/dist/assets/useRuntimeRuns-C97qEqMg.js +0 -1
  1101. package/client/dist/assets/useSharedWebSocket-Bj4LMp7b.js +0 -2
  1102. package/client/dist/assets/utils-BC4DHlz2.js +0 -1
  1103. package/docs/guide/en/getting-started/4-the-dashboard-tour.md +0 -48
  1104. package/docs/guide/es/getting-started/4-the-dashboard-tour.md +0 -48
  1105. package/server/dist/mobile/mobile-preview-channel.js +0 -179
  1106. package/server/dist/mobile/mobile-preview.js +0 -366
  1107. package/server/dist/modules/browser/domain/preview-origins.js +0 -117
  1108. package/server/dist/modules/browser/runtime/preview-targets.js +0 -80
  1109. /package/client/dist/assets/{atom-one-dark-B-oHczHB.css → DocView-B-oHczHB.css} +0 -0
  1110. /package/docs/guide/de/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
  1111. /package/docs/guide/en/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
  1112. /package/docs/guide/es/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
  1113. /package/docs/guide/fr/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
  1114. /package/docs/guide/it/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
  1115. /package/docs/guide/ja/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
  1116. /package/docs/guide/pt/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
  1117. /package/docs/guide/zh/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
@@ -1,10 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RUNTIME_HOST_ENV_KEYS = void 0;
3
+ exports.BASELINE_CHARACTERIZATION_FAILED = exports.RUNTIME_HOST_ENV_KEYS = void 0;
4
4
  exports.runtimeChangeName = runtimeChangeName;
5
5
  exports.scopedHostChecks = scopedHostChecks;
6
6
  exports.readFrozenRuntimeHost = readFrozenRuntimeHost;
7
+ exports.coreProviderEnv = coreProviderEnv;
8
+ exports.runtimeErrorText = runtimeErrorText;
9
+ exports.applyPhase3RuntimeSwitches = applyPhase3RuntimeSwitches;
7
10
  exports.runAgentRuntimeInvocation = runAgentRuntimeInvocation;
11
+ exports.retainedRuntimeSupportsPause = retainedRuntimeSupportsPause;
8
12
  exports.assertRetainedForkSupport = assertRetainedForkSupport;
9
13
  exports.runAgentRuntimeControl = runAgentRuntimeControl;
10
14
  const agent_runtime_verification_suggestions_1 = require("./agent-runtime-verification-suggestions");
@@ -129,6 +133,50 @@ function readFrozenRuntimeHost(contextPath, baseEnv, runId) {
129
133
  delete env[key];
130
134
  return { cwd: host.cwd, env: { ...env, ...host.env, SPECRAILS_EXECUTION_CONTEXT: contextPath } };
131
135
  }
136
+ /** Provider CLIs that Core spawns inherit this environment. Gemini CLI refuses
137
+ * headless runs in a folder the user never trusted interactively (exit 55), and
138
+ * rail worktrees and fresh projects never are. Every other Desktop Gemini spawn
139
+ * already trusts its admitted workspace the same way; an explicit value wins. */
140
+ function coreProviderEnv(env) {
141
+ return env.GEMINI_CLI_TRUST_WORKSPACE === undefined ? { ...env, GEMINI_CLI_TRUST_WORKSPACE: 'true' } : env;
142
+ }
143
+ /** Core's blocker when characterization tests fail on the unchanged code (baseline on touch). */
144
+ exports.BASELINE_CHARACTERIZATION_FAILED = 'baseline_characterization_failed';
145
+ /**
146
+ * Human-readable text of a structured runtime error. The baseline blocker is
147
+ * spelled out: the run stopped BEFORE the module was edited because the tests
148
+ * that describe today's behaviour do not pass on today's code.
149
+ */
150
+ function runtimeErrorText(error) {
151
+ if (!error)
152
+ return undefined;
153
+ if (error.code === exports.BASELINE_CHARACTERIZATION_FAILED) {
154
+ const detail = error.message?.trim();
155
+ return `Baseline blocked: the characterization tests do not pass on the unchanged code, so the run stopped before editing the module. Fix the tests (or the verification plan) so they describe today's behaviour, then resume.${detail ? ` Core: ${detail}` : ''}`;
156
+ }
157
+ return error.message;
158
+ }
159
+ /**
160
+ * Phase-3 config keys (Core contract 5.7). An older Core rejects unknown
161
+ * keys, so `baselineOnTouch` and `architect.clarifications` reach Core only
162
+ * when it announces `baselineOnTouch: 1` / `architectClarifications: 1`; the
163
+ * project's `baselineOnTouch` setting turns the switch on. Mutates `config`.
164
+ */
165
+ function applyPhase3RuntimeSwitches(config, capabilities, project) {
166
+ if (capabilities?.baselineOnTouch === 1) {
167
+ if (project?.baselineOnTouch)
168
+ config.baselineOnTouch = true;
169
+ }
170
+ else
171
+ delete config.baselineOnTouch;
172
+ if (capabilities?.architectClarifications !== 1 && config.architect?.clarifications !== undefined) {
173
+ const { clarifications: _dropped, ...architect } = config.architect;
174
+ if (Object.keys(architect).length)
175
+ config.architect = architect;
176
+ else
177
+ delete config.architect;
178
+ }
179
+ }
132
180
  /** Core owns the complete agent workflow in one managed process. The existing
133
181
  * rail's cancellation and worktree ownership remain in Desktop. */
134
182
  async function runAgentRuntimeInvocation(options) {
@@ -179,6 +227,7 @@ async function runAgentRuntimeInvocation(options) {
179
227
  }
180
228
  else if (config.setup)
181
229
  config.setup = scopedHostChecks(config.setup, admittedContext.repositories);
230
+ applyPhase3RuntimeSwitches(config, runtime.api?.capabilities, options.projectRuntime);
182
231
  if (definitionEngine && (runtime.api?.capabilities?.engineV2 !== 1 || runtime.api?.capabilities?.workflowDefinitions !== 1))
183
232
  throw new Error('engine_unsupported: Update Core to run workflow definitions');
184
233
  const compilationConfig = structuredClone(config);
@@ -304,7 +353,7 @@ async function runAgentRuntimeInvocation(options) {
304
353
  const stepFailures = new Map();
305
354
  let timer;
306
355
  const child = (0, node_child_process_1.spawn)((0, core_node_runtime_1.resolveCoreNodeRuntime)(), args, {
307
- cwd: options.cwd, env: (0, win_spawn_1.windowsSpawnEnv)(options.env), shell: false, windowsHide: true,
356
+ cwd: options.cwd, env: (0, win_spawn_1.windowsSpawnEnv)(coreProviderEnv(options.env)), shell: false, windowsHide: true,
308
357
  stdio: ['ignore', 'pipe', 'pipe'],
309
358
  });
310
359
  // Always leave a terminal result, including synchronous observer failures.
@@ -446,14 +495,15 @@ async function runAgentRuntimeInvocation(options) {
446
495
  invalidProtocol = true;
447
496
  const acceptanceBlocked = definitionEngine && result?.status === 'succeeded' && result.completion && (!result.completion.ok || requiresVerified && !result.completion.verified);
448
497
  const validPause = definitionEngine && code === 2 && result?.status === 'paused';
498
+ const hostPause = validPause ? readHostPause(result?.pause) : undefined;
449
499
  const failed = (!validPause && (code !== 0 || result?.status !== 'succeeded')) || invalidProtocol || timedOut || Boolean(observerError) || Boolean(acceptanceBlocked);
450
- const runtimeError = typeof result?.error === 'string' ? result.error : result?.error?.message;
500
+ const runtimeError = typeof result?.error === 'string' ? result.error : runtimeErrorText(result?.error);
451
501
  const completionError = Array.isArray(result?.completion?.reasons) ? result.completion.reasons.filter(reason => typeof reason === 'string' && reason.trim()).join('; ').slice(0, 4_000) : '';
452
502
  const runtimeStatus = invalidProtocol || timedOut || observerError || (result?.status === 'paused' && !validPause) || (result?.status === 'succeeded' && code !== 0) ? 'failed' : acceptanceBlocked ? 'blocked' : ['succeeded', 'paused', 'failed', 'blocked', 'cancelled'].includes(result?.status ?? '') ? result.status : 'failed';
453
503
  const errorText = observerError ?? (timedOut ? 'Programmatic workflow timed out; inspect its checkpoint before recovery'
454
504
  : invalidProtocol ? 'Core returned an invalid runtime event stream'
455
505
  : acceptanceBlocked ? result?.completion?.reasons.join('; ') || 'Core workflow acceptance or required verification is not satisfied'
456
- : runtimeError ?? (result?.status === 'paused' ? (typeof result.pendingQuestion?.question === 'string' && result.pendingQuestion.question.trim()
506
+ : runtimeError ?? (result?.status === 'paused' ? hostPause ? `Workflow paused by the host (${hostPause.reason})` : (typeof result.pendingQuestion?.question === 'string' && result.pendingQuestion.question.trim()
457
507
  ? `Workflow awaits an answer in Agent Runtime settings: ${result.pendingQuestion.question.trim().slice(0, 500)}`
458
508
  : 'Workflow awaits approval in Agent Runtime settings')
459
509
  : failed ? completionError || [...stepFailures.values()].at(-1) || stderr || 'Core exited without a successful programmatic workflow result' : undefined));
@@ -464,13 +514,29 @@ async function runAgentRuntimeInvocation(options) {
464
514
  resolve({
465
515
  text: summary || (failed ? errorText ?? '' : definitionEngine ? 'Workflow execution completed.' : 'Programmatic implementation verified and archived.'),
466
516
  provider: 'agent-runtime', model: 'per-role', failed, errorText,
467
- ...(definitionEngine ? { runtimeStatus, completion: result?.completion, pendingInterrupts: result?.pendingInterrupts, pendingQuestion: result?.pendingQuestion, pendingApproval: result?.pendingApproval, graph } : {}),
517
+ ...(definitionEngine ? { runtimeStatus, ...(result?.failure !== undefined ? { failure: result.failure } : {}), completion: result?.completion, pendingInterrupts: result?.pendingInterrupts, pendingQuestion: result?.pendingQuestion, pendingApproval: result?.pendingApproval, ...(hostPause ? { pause: hostPause } : {}), graph } : {}),
468
518
  cost, tokensIn, tokensOut, tokens: tokensIn === undefined || tokensOut === undefined ? undefined : tokensIn + tokensOut,
469
519
  estimated: cost === undefined, durationMs: definitionEngine ? known(result?.usage?.durationMs) : Date.now() - started,
470
520
  });
471
521
  });
472
522
  });
473
523
  }
524
+ const PAUSE_OUTCOMES = ['requested', 'paused', 'already-paused', 'not-running', 'terminal'];
525
+ const PAUSE_REASON = /^[a-z][a-z0-9_-]{0,63}$/;
526
+ function readHostPause(value) {
527
+ if (!value || typeof value !== 'object' || Array.isArray(value))
528
+ return undefined;
529
+ const pause = value;
530
+ return typeof pause.requestId === 'string' && typeof pause.reason === 'string' && typeof pause.at === 'string'
531
+ ? { requestId: pause.requestId, reason: pause.reason, at: pause.at } : undefined;
532
+ }
533
+ /** True when the run's retained Core announces cooperative pause (`pauseRuns`). */
534
+ async function retainedRuntimeSupportsPause(options) {
535
+ const cli = (0, agent_runtime_package_1.resolveRetainedAgentRuntime)(options.contextPath);
536
+ const events = await runControlProcess([cli, 'api'], options);
537
+ const capabilities = events.find(event => event.type === 'runtime-api')?.capabilities;
538
+ return capabilities?.pauseRuns === 1;
539
+ }
474
540
  const CONTROL_RUN_ID = /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/;
475
541
  const CONTROL_TIMEOUT_MS = 60_000;
476
542
  /** Check the retained package before recording a host operation that requires
@@ -609,6 +675,21 @@ async function runAgentRuntimeControl(options) {
609
675
  throw new Error('Core did not acknowledge the steering request');
610
676
  return { kind: 'signal', id: accepted.id, acceptedAt: accepted.acceptedAt };
611
677
  }
678
+ if (options.kind === 'pause') {
679
+ if (typeof options.requestId !== 'string' || !options.requestId.trim() || options.requestId.length > 256 || options.requestId.includes('\0'))
680
+ throw new Error('invalid_arguments: Pause requires a request id of 1–256 characters');
681
+ if (!PAUSE_REASON.test(options.reason))
682
+ throw new Error('invalid_arguments: Pause reason must be a lowercase token');
683
+ // An older retained Core has no pause verb: say so instead of failing the spawn.
684
+ if (!await retainedRuntimeSupportsPause(options))
685
+ throw new Error('engine_unsupported: Retained Core does not support cooperative pause');
686
+ args.push('--request-id', options.requestId, '--reason', options.reason);
687
+ const events = await runControlProcess(args, options);
688
+ const paused = events.find(event => event.type === 'runtime-pause-result');
689
+ if (paused?.requestId !== options.requestId || paused.runId !== options.runId || !PAUSE_OUTCOMES.includes(paused.outcome))
690
+ throw new Error('Core did not acknowledge the pause request');
691
+ return { kind: 'pause', requestId: options.requestId, reason: options.reason, outcome: paused.outcome, status: typeof paused.status === 'string' ? paused.status : 'unknown' };
692
+ }
612
693
  if (options.kind === 'cancel') {
613
694
  if (typeof options.requestId !== 'string' || !options.requestId.trim() || options.requestId.length > 256 || options.requestId.includes('\0'))
614
695
  throw new Error('invalid_arguments: Cancellation requires a request id of 1–256 characters');
@@ -27,11 +27,15 @@ const core_node_runtime_1 = require("../../../core-node-runtime");
27
27
  const win_spawn_1 = require("../../../util/win-spawn");
28
28
  const workspace_resolution_1 = require("../../../workspace-resolution");
29
29
  const project_env_1 = require("../../../project-env");
30
+ const registry_1 = require("../../../providers/registry");
31
+ const runtime_1 = require("../../../providers/runtime");
30
32
  const loop_runs_store_1 = require("../../loops/runtime/loop-runs-store");
31
33
  const multi_repo_execution_store_1 = require("../../delivery/runtime/multi-repo-execution-store");
32
34
  const db_1 = require("../../../db");
33
35
  const loop_run_manager_1 = require("../../loops/runtime/loop-run-manager");
34
36
  const agent_runtime_recovery_1 = require("./agent-runtime-recovery");
37
+ const run_review_diagnosis_1 = require("../../delivery/runtime/run-review-diagnosis");
38
+ const loop_definition_recovery_1 = require("../../loops/runtime/loop-definition-recovery");
35
39
  const SAFE_ID = /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/;
36
40
  const LEGACY_STEP_IDS = ['architect', 'developer', 'fixer', 'verify', 'reviewer', 'archive'];
37
41
  const NODE_PATH = /^[A-Za-z0-9][A-Za-z0-9_-]{0,119}(\/[A-Za-z0-9][A-Za-z0-9_-]{0,119}){0,3}$/;
@@ -310,7 +314,8 @@ class AgentRuntimeControls {
310
314
  const host = JSON.parse(node_fs_1.default.readFileSync(hostFile, 'utf8'));
311
315
  if (host.schemaVersion !== 1 || typeof host.cwd !== 'string' || ![frozen.backlogRoot, ...frozen.repositories.map((repository) => repository.path)].includes(host.cwd) || !host.env || typeof host.env !== 'object' || Array.isArray(host.env) || Object.entries(host.env).some(([key, value]) => !agent_runtime_bridge_1.RUNTIME_HOST_ENV_KEYS.includes(key) || typeof value !== 'string'))
312
316
  throw new RuntimeControlError(409, 'runtime_host_invalid', 'The saved runtime host settings are invalid');
313
- const env = { ...(0, workspace_resolution_1.resolveLoopBaseEnv)(this.ctx.project, undefined, (0, project_env_1.applyWorktreeEnvPassthrough)(this.ctx.db, process.env)) };
317
+ // Core may resume any role provider: minimal mode passes every adapter's names.
318
+ const env = { ...(0, workspace_resolution_1.resolveLoopBaseEnv)(this.ctx.project, undefined, (0, project_env_1.resolveProjectAgentEnv)(this.ctx.db, { providerAllowlist: (0, runtime_1.providerEnvAllowlist)((0, registry_1.listAdapters)()) })) };
314
319
  for (const key of agent_runtime_bridge_1.RUNTIME_HOST_ENV_KEYS)
315
320
  delete env[key];
316
321
  Object.assign(env, host.env, { SPECRAILS_EXECUTION_CONTEXT: file });
@@ -329,8 +334,26 @@ class AgentRuntimeControls {
329
334
  const result = JSON.parse(stdout);
330
335
  if (result.schemaVersion !== 1 || typeof result.available !== 'boolean' || typeof result.truncated !== 'boolean')
331
336
  throw new RuntimeControlError(503, 'evidence_unavailable', 'Core evidence is unavailable or incompatible');
337
+ // The overview page also answers "why did the review say no".
338
+ if (query.id === undefined && query.cursor === undefined)
339
+ return { ...result, reviewer: await this.reviewer(runId) };
332
340
  return result;
333
341
  }
342
+ /** The reviewer's latest verdict for the run (settle evidence, else the retained run, read-only). Never throws. */
343
+ async reviewer(runId) {
344
+ try {
345
+ if (this.dependencies.reviewer)
346
+ return await this.dependencies.reviewer(runId);
347
+ return await (0, run_review_diagnosis_1.readRunReviewDiagnosis)({
348
+ db: this.ctx.db, runId,
349
+ pipelineDir: node_path_1.default.join((0, workspace_resolution_1.resolveProjectExecution)(this.ctx.project).specrailsDir, 'pipeline'),
350
+ probe: (runIds) => (0, loop_definition_recovery_1.probeDefinitionRuns)({ db: this.ctx.db, cwd: this.ctx.project.path, env: process.env }, runIds, true),
351
+ });
352
+ }
353
+ catch {
354
+ return null;
355
+ }
356
+ }
334
357
  async recovery(runId, input) {
335
358
  const parsed = agent_runtime_recovery_1.recoveryRequestSchema.safeParse(input);
336
359
  if (!parsed.success)
@@ -401,11 +424,12 @@ class AgentRuntimeControls {
401
424
  reason: 'The run was rejected before Core started, so there is no runtime state or evidence. Fix the reported precondition (or change the launch settings) before launching again; Resume is not possible.',
402
425
  launchError, repeatFailureCount: null, recentFailures: [],
403
426
  };
427
+ const reviewer = await this.reviewer(runId);
404
428
  if (summary.historical || summary.status === 'unavailable')
405
429
  return {
406
430
  runId, summary, recommendation: 'inspect_saved_evidence',
407
431
  reason: 'Live original runtime scope is unavailable. Preserve saved work and inspect the missing scope before proposing a fresh run.',
408
- repeatFailureCount: null, recentFailures: [],
432
+ repeatFailureCount: null, recentFailures: [], reviewer,
409
433
  };
410
434
  const { file, frozen, cwd, env } = this.context(runId);
411
435
  const state = await this.dependencies.status(file, cwd, env);
@@ -440,10 +464,12 @@ class AgentRuntimeControls {
440
464
  verification: state.inspection?.verification ? { valid: state.inspection.verification.valid, reasons: state.inspection.verification.reasons } : null,
441
465
  acceptance: state.inspection?.acceptance ? { valid: state.inspection.acceptance.valid, reasons: state.inspection.acceptance.reasons } : null,
442
466
  resumePhase: state.inspection?.resumePhase ?? null,
467
+ reviewer,
443
468
  limitations: [
444
469
  'Recent failure history is bounded to eight attempts; null means the retained Core does not expose it.',
445
470
  'Completed steps are historical outcomes. Resume revalidates receipts and may repeat verification/review after changes; do not promise zero cost.',
446
471
  'This diagnostic does not execute repairs, resume, relaunch, publish or discard work.',
472
+ 'reviewer is the latest recorded verdict (AI-reported, bounded); failingChecks are host-run. null means no review attempt recorded one.',
447
473
  ],
448
474
  };
449
475
  }
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.readRuntimeEfficiency = readRuntimeEfficiency;
4
+ exports.readRuntimeBaselineSpend = readRuntimeBaselineSpend;
4
5
  exports.readRuntimeEfficiencySummary = readRuntimeEfficiencySummary;
5
6
  exports.applyRuntimeSelectionOrigins = applyRuntimeSelectionOrigins;
6
7
  const COUNTS = ['attempts', 'measuredAttempts', 'providerCalls', 'toolCalls', 'inputTokens', 'outputTokens', 'uncachedInputTokens', 'cacheReadInputTokens', 'cacheWriteInputTokens'];
@@ -50,6 +51,15 @@ function readRuntimeEfficiency(value, catalog) {
50
51
  }
51
52
  return { schemaVersion: 1, total, phases };
52
53
  }
54
+ /** Tolerant read of `efficiencySummary.baseline`; undefined when absent or malformed. */
55
+ function readRuntimeBaselineSpend(value) {
56
+ const raw = object(value);
57
+ if (!raw || typeof raw.invocations !== 'number' || !Number.isSafeInteger(raw.invocations) || raw.invocations < 0)
58
+ return undefined;
59
+ const amount = (input, integer) => typeof input === 'number' && Number.isFinite(input) && input >= 0 && (!integer || Number.isSafeInteger(input)) ? input : null;
60
+ const roles = Array.isArray(raw.roles) ? raw.roles.filter((role) => typeof role === 'string' && role.length > 0 && role.length <= 64).slice(0, 16) : [];
61
+ return { invocations: raw.invocations, roles, costUsd: amount(raw.costUsd, false), inputTokens: amount(raw.inputTokens, true), outputTokens: amount(raw.outputTokens, true) };
62
+ }
53
63
  function readRuntimeEfficiencySummary(value, catalog) {
54
64
  const input = object(value), invocations = object(input?.invocations), checks = object(input?.checks);
55
65
  const roleIds = catalog?.roleIds ?? ROLES;
@@ -77,7 +87,9 @@ function readRuntimeEfficiencySummary(value, catalog) {
77
87
  if (!Array.isArray(input.currentEvidenceIds) || input.currentEvidenceIds.length > 100 || !input.currentEvidenceIds.every(id => typeof id === 'string' && /^[a-f0-9]{64}$/.test(id)))
78
88
  return undefined;
79
89
  const kinds = object(invocations.byKind);
80
- if (!kinds || Object.keys(kinds).length !== 5 || !['initial', 'correction', 'repair', 'deepen', 'session-fallback'].every(key => count(kinds[key], false)))
90
+ // Contract 5.7 adds the `baseline` kind; earlier Cores report exactly five.
91
+ const kindKeys = Object.keys(kinds ?? {});
92
+ if (!kinds || kindKeys.length !== 5 + (kindKeys.includes('baseline') ? 1 : 0) || !['initial', 'correction', 'repair', 'deepen', 'session-fallback'].every(key => count(kinds[key], false)) || kindKeys.includes('baseline') && !count(kinds.baseline, false))
81
93
  return undefined;
82
94
  const roles = [];
83
95
  for (const raw of input.roles) {
@@ -112,7 +124,8 @@ function readRuntimeEfficiencySummary(value, catalog) {
112
124
  escalations.push(row);
113
125
  }
114
126
  }
115
- return { ...(escalations ? { escalations, escalationsTruncated: input.escalationsTruncated } : {}), schemaVersion: 1, currentEvidenceIds: [...input.currentEvidenceIds], planHash: input.planHash, candidateHash: input.candidateHash, runId: input.runId, workflowVersion: input.workflowVersion, technicalAcceptance: input.technicalAcceptance, archive: input.archive, delivery: input.delivery, roles,
127
+ const baseline = readRuntimeBaselineSpend(input.baseline);
128
+ return { ...(escalations ? { escalations, escalationsTruncated: input.escalationsTruncated } : {}), ...(baseline ? { baseline } : {}), schemaVersion: 1, currentEvidenceIds: [...input.currentEvidenceIds], planHash: input.planHash, candidateHash: input.candidateHash, runId: input.runId, workflowVersion: input.workflowVersion, technicalAcceptance: input.technicalAcceptance, archive: input.archive, delivery: input.delivery, roles,
116
129
  invocations: { total: invocations.total, complete: invocations.complete, byKind: { ...kinds }, promptBytes: invocations.promptBytes, contextBytes: invocations.contextBytes, handoffBytes: invocations.handoffBytes, fullContexts: invocations.fullContexts, incrementalContexts: invocations.incrementalContexts },
117
130
  checks: { ...(checks.complete === undefined ? {} : { complete: checks.complete }), ...(checks.invalidated === undefined ? {} : { invalidated: checks.invalidated }), available: checks.available, executed: checks.executed, reused: checks.reused, notRun: checks.notRun, durationMs: checks.durationMs } };
118
131
  }
@@ -1,11 +1,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.rulesGateSuggestions = rulesGateSuggestions;
3
4
  exports.registerAgentRuntimeSettingsRoutes = registerAgentRuntimeSettingsRoutes;
4
5
  const node_fs_1 = require("node:fs");
5
6
  const agent_runtime_loader_1 = require("./agent-runtime-loader");
6
7
  const agent_runtime_settings_1 = require("./agent-runtime-settings");
7
8
  const agent_runtime_settings_2 = require("./agent-runtime-settings");
8
9
  const agent_runtime_verification_suggestions_1 = require("./agent-runtime-verification-suggestions");
10
+ const core_capabilities_1 = require("./core-capabilities");
11
+ const rules_store_1 = require("../../project-rules/runtime/rules-store");
12
+ const domain_1 = require("../../project-rules/domain");
13
+ /** The inventory's gates as verification suggestions (plain commands only). */
14
+ function rulesGateSuggestions(inventory, repositoryId) {
15
+ return (inventory?.gates ?? []).flatMap((gate) => {
16
+ const command = (0, domain_1.gateToVerificationCommand)(gate);
17
+ return command ? [{ repositoryId, ...command, reason: `project rules gate "${gate.id}" (${gate.kind})` }] : [];
18
+ });
19
+ }
9
20
  const project_repositories_1 = require("../../../project-repositories");
10
21
  const agent_runtime_effective_config_1 = require("./agent-runtime-effective-config");
11
22
  /** Raw request body → same body with every local role's missing model filled (validation then passes). */
@@ -85,11 +96,19 @@ function registerAgentRuntimeSettingsRoutes({ router, ctx }) {
85
96
  /** Offline detection of each repository's own checks; never invokes a model.
86
97
  * Verification stays optional: the architect proposes commands for uncovered
87
98
  * repositories at run time, and Core admits repositories without any check. */
88
- router.get('/:projectId/agent-runtime/verification-suggestions', (req, res) => {
99
+ router.get('/:projectId/agent-runtime/verification-suggestions', async (req, res) => {
89
100
  try {
90
101
  const project = ctx(req).project;
91
102
  const repositories = (0, project_repositories_1.getProjectRepositories)(project).map((repository) => ({ id: repository.id, name: repository.name, path: repository.path, workspacePath: repository.workspacePath, workspacePaths: repository.workspacePaths }));
92
- res.json({ repositories: repositories.map(({ id, name }) => ({ id, name })), suggestions: (0, agent_runtime_verification_suggestions_1.suggestVerificationCommands)(repositories) });
103
+ // Project rules (task 4.4): the gates Core's inventory discovered come
104
+ // first, so they become the default plan of a project with no checks.
105
+ const primary = (0, project_repositories_1.getProjectRepositories)(project).find((repository) => repository.isPrimary) ?? repositories[0];
106
+ const gates = primary && (await (0, core_capabilities_1.corePhase3Capabilities)()).rulesInventory
107
+ ? rulesGateSuggestions((0, rules_store_1.readProjectRulesInventory)(project), primary.id) : [];
108
+ const detected = (0, agent_runtime_verification_suggestions_1.suggestVerificationCommands)(repositories);
109
+ const key = (item) => JSON.stringify([item.repositoryId, item.command, item.args]);
110
+ const seen = new Set(gates.map(key));
111
+ res.json({ repositories: repositories.map(({ id, name }) => ({ id, name })), suggestions: [...gates, ...detected.filter((item) => !seen.has(key(item)))] });
93
112
  }
94
113
  catch {
95
114
  res.status(500).json({ error: 'verification_suggestions_failed', message: 'Could not inspect the project repositories' });
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.NO_PHASE3_CAPABILITIES = void 0;
37
+ exports.phase3CapabilitiesFrom = phase3CapabilitiesFrom;
38
+ exports.corePhase3Capabilities = corePhase3Capabilities;
39
+ exports.NO_PHASE3_CAPABILITIES = Object.freeze({
40
+ architectClarifications: false, specTrace: false, baselineOnTouch: false, rulesInventory: false,
41
+ });
42
+ /** Pure projection of a `runtime api` capability map. */
43
+ function phase3CapabilitiesFrom(capabilities) {
44
+ const on = (key) => capabilities?.[key] === 1;
45
+ return { architectClarifications: on('architectClarifications'), specTrace: on('specTrace'), baselineOnTouch: on('baselineOnTouch'), rulesInventory: on('rulesInventory') };
46
+ }
47
+ async function corePhase3Capabilities() {
48
+ try {
49
+ const { loadCoreAgentRuntime } = await Promise.resolve().then(() => __importStar(require('./agent-runtime-loader')));
50
+ return phase3CapabilitiesFrom((await loadCoreAgentRuntime()).api?.capabilities);
51
+ }
52
+ catch {
53
+ return { ...exports.NO_PHASE3_CAPABILITIES };
54
+ }
55
+ }
@@ -22,7 +22,7 @@ class CoreHostLauncher {
22
22
  const cli = (this.options.cli ?? agent_runtime_loader_1.findCoreAgentRuntimeCli)();
23
23
  if (!cli)
24
24
  throw new errors_1.SessionRequestError('The selected Core runtime does not include the agent runtime CLI', { code: 'driver_unavailable', retryable: false });
25
- const env = (0, win_spawn_1.windowsSpawnEnv)(this.options.env ?? process.env);
25
+ const env = (0, win_spawn_1.windowsSpawnEnv)((typeof this.options.env === 'function' ? this.options.env(scope) : this.options.env) ?? process.env);
26
26
  const args = [cli, 'host', '--stdio', '--scope', scope];
27
27
  const command = (this.options.node ?? core_node_runtime_1.resolveCoreNodeRuntime)();
28
28
  const child = (this.options.spawnProcess ?? ((cmd, argv, opts) => (0, node_child_process_1.spawn)(cmd, argv, { env: opts.env, shell: false, windowsHide: true, stdio: ['pipe', 'pipe', 'pipe'] })))(command, args, { env });
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DEFAULT_CORE_SESSIONS_FLAG = void 0;
4
4
  exports.parseCoreSessionsFlag = parseCoreSessionsFlag;
5
5
  exports.resolveCoreSessionsAvailability = resolveCoreSessionsAvailability;
6
+ exports.resolveFlowAvailability = resolveFlowAvailability;
6
7
  exports.DEFAULT_CORE_SESSIONS_FLAG = 'auto';
7
8
  function parseCoreSessionsFlag(raw) {
8
9
  const value = raw?.trim().toLowerCase();
@@ -23,3 +24,18 @@ function resolveCoreSessionsAvailability(flag, capabilities, contractCompatible
23
24
  return { enabled: false, flag, reason: 'The selected Core session contract is not compatible with this Desktop; using legacy transports' };
24
25
  return { enabled: true, flag, reason: flag === 'on' ? 'Core sessions forced on' : 'Core sessions available' };
25
26
  }
27
+ function resolveFlowAvailability(sessions, capabilities) {
28
+ const missing = [];
29
+ if (!sessions.enabled)
30
+ missing.push('sessions');
31
+ if ((capabilities?.flowSessions ?? 0) < 1)
32
+ missing.push('flowSessions');
33
+ if ((capabilities?.deriveChange ?? 0) < 1)
34
+ missing.push('deriveChange');
35
+ if (missing.length === 0)
36
+ return { available: true, reason: 'Flow is available', missing };
37
+ const reason = !sessions.enabled
38
+ ? `Flow needs Core agent sessions: ${sessions.reason}`
39
+ : `Flow needs a Core that advertises ${missing.join(' and ')}; update Core to use Flow`;
40
+ return { available: false, reason, missing };
41
+ }
@@ -9,6 +9,7 @@
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.KNOWN_EVENT_TYPES = exports.SUPPORTED_PROTOCOL_VERSIONS = void 0;
11
11
  exports.checkSessionContract = checkSessionContract;
12
+ exports.hostSupportsFlowSessions = hostSupportsFlowSessions;
12
13
  exports.SUPPORTED_PROTOCOL_VERSIONS = Object.freeze([1]);
13
14
  /** Event types this Desktop understands; newer Cores may send more (ignored). */
14
15
  exports.KNOWN_EVENT_TYPES = Object.freeze([
@@ -37,7 +38,7 @@ exports.KNOWN_EVENT_TYPES = Object.freeze([
37
38
  /** Compare a Core contract block with what this Desktop speaks. Pure. */
38
39
  function checkSessionContract(block) {
39
40
  if (!block)
40
- return { compatible: false, protocolVersion: null, unknownEventTypes: [], missingEventTypes: [], reasons: ['Core does not declare agentRuntime.sessions'] };
41
+ return { compatible: false, protocolVersion: null, unknownEventTypes: [], missingEventTypes: [], flowSessions: false, reasons: ['Core does not declare agentRuntime.sessions'] };
41
42
  const common = block.protocolVersions.filter((version) => exports.SUPPORTED_PROTOCOL_VERSIONS.includes(version));
42
43
  const declared = new Set(block.eventTypes);
43
44
  const known = new Set(exports.KNOWN_EVENT_TYPES);
@@ -54,6 +55,12 @@ function checkSessionContract(block) {
54
55
  protocolVersion: common.length ? Math.max(...common) : null,
55
56
  unknownEventTypes: block.eventTypes.filter((type) => !known.has(type)),
56
57
  missingEventTypes,
58
+ // Additive and tolerant: older contracts omit both fields and stay compatible.
59
+ flowSessions: (block.capabilities ?? []).includes('flowSessions') && (block.deliveries ?? []).includes('interrupt'),
57
60
  reasons,
58
61
  };
59
62
  }
63
+ /** True when this session host accepts `delivery: 'interrupt'` (initialize `flowSessions: 1`). */
64
+ function hostSupportsFlowSessions(initialize) {
65
+ return (initialize?.capabilities?.flowSessions ?? 0) >= 1;
66
+ }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SessionEventPump = exports.resolveCoreSessionsAvailability = exports.parseCoreSessionsFlag = exports.DEFAULT_CORE_SESSIONS_FLAG = exports.acceptsSessions = exports.DEFAULT_SUPERVISION = exports.resolveSubagentRuntime = exports.resolveSubagentPolicy = exports.reduceEnvelope = exports.liveSubagentCount = exports.initialProjection = exports.isSessionRequestError = exports.SessionRequestError = exports.checkSessionContract = exports.KNOWN_EVENT_TYPES = exports.SUPPORTED_PROTOCOL_VERSIONS = void 0;
3
+ exports.SessionEventPump = exports.resolveFlowAvailability = exports.resolveCoreSessionsAvailability = exports.parseCoreSessionsFlag = exports.DEFAULT_CORE_SESSIONS_FLAG = exports.acceptsSessions = exports.DEFAULT_SUPERVISION = exports.resolveSubagentRuntime = exports.resolveSubagentPolicy = exports.reduceEnvelope = exports.liveSubagentCount = exports.initialProjection = exports.isSessionRequestError = exports.SessionRequestError = exports.hostSupportsFlowSessions = exports.checkSessionContract = exports.KNOWN_EVENT_TYPES = exports.SUPPORTED_PROTOCOL_VERSIONS = void 0;
4
4
  /**
5
5
  * Agent sessions: Desktop as the host of Core's agent session runtime.
6
6
  * Public API for conversational features (missions first). Adapters and the
@@ -10,6 +10,7 @@ var protocol_1 = require("./domain/protocol");
10
10
  Object.defineProperty(exports, "SUPPORTED_PROTOCOL_VERSIONS", { enumerable: true, get: function () { return protocol_1.SUPPORTED_PROTOCOL_VERSIONS; } });
11
11
  Object.defineProperty(exports, "KNOWN_EVENT_TYPES", { enumerable: true, get: function () { return protocol_1.KNOWN_EVENT_TYPES; } });
12
12
  Object.defineProperty(exports, "checkSessionContract", { enumerable: true, get: function () { return protocol_1.checkSessionContract; } });
13
+ Object.defineProperty(exports, "hostSupportsFlowSessions", { enumerable: true, get: function () { return protocol_1.hostSupportsFlowSessions; } });
13
14
  var errors_1 = require("./domain/errors");
14
15
  Object.defineProperty(exports, "SessionRequestError", { enumerable: true, get: function () { return errors_1.SessionRequestError; } });
15
16
  Object.defineProperty(exports, "isSessionRequestError", { enumerable: true, get: function () { return errors_1.isSessionRequestError; } });
@@ -27,5 +28,6 @@ var availability_1 = require("./domain/availability");
27
28
  Object.defineProperty(exports, "DEFAULT_CORE_SESSIONS_FLAG", { enumerable: true, get: function () { return availability_1.DEFAULT_CORE_SESSIONS_FLAG; } });
28
29
  Object.defineProperty(exports, "parseCoreSessionsFlag", { enumerable: true, get: function () { return availability_1.parseCoreSessionsFlag; } });
29
30
  Object.defineProperty(exports, "resolveCoreSessionsAvailability", { enumerable: true, get: function () { return availability_1.resolveCoreSessionsAvailability; } });
31
+ Object.defineProperty(exports, "resolveFlowAvailability", { enumerable: true, get: function () { return availability_1.resolveFlowAvailability; } });
30
32
  var session_event_pump_1 = require("./application/session-event-pump");
31
33
  Object.defineProperty(exports, "SessionEventPump", { enumerable: true, get: function () { return session_event_pump_1.SessionEventPump; } });
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.readSelectedSessionContract = readSelectedSessionContract;
7
7
  exports.coreSessionsAvailability = coreSessionsAvailability;
8
+ exports.flowAvailability = flowAvailability;
8
9
  const node_fs_1 = __importDefault(require("node:fs"));
9
10
  const node_path_1 = __importDefault(require("node:path"));
10
11
  const agent_runtime_loader_1 = require("../../agent-runtime/runtime/agent-runtime-loader");
@@ -41,3 +42,18 @@ async function coreSessionsAvailability(env = process.env) {
41
42
  return { enabled: false, flag, reason: `Core runtime probe failed: ${error.message}` };
42
43
  }
43
44
  }
45
+ /**
46
+ * Whether Flow mode can be offered with the selected Core: Core sessions are
47
+ * usable and the runtime advertises `flowSessions` and `deriveChange`.
48
+ */
49
+ async function flowAvailability(env = process.env) {
50
+ const sessions = await coreSessionsAvailability(env);
51
+ let capabilities;
52
+ try {
53
+ capabilities = (await (0, agent_runtime_loader_1.loadCoreAgentRuntime)()).api?.capabilities;
54
+ }
55
+ catch {
56
+ capabilities = undefined;
57
+ }
58
+ return (0, availability_1.resolveFlowAvailability)(sessions, capabilities);
59
+ }
@@ -18,6 +18,8 @@ const ai_invocations_1 = require("../../accounting/runtime/ai-invocations");
18
18
  const result_event_1 = require("../../accounting/runtime/result-event");
19
19
  const spawn_lifecycle_1 = require("../../execution/runtime/spawn-lifecycle");
20
20
  const workspace_resolution_1 = require("../../../workspace-resolution");
21
+ const project_env_1 = require("../../../project-env");
22
+ const runtime_1 = require("../../../providers/runtime");
21
23
  const providers_1 = require("../../../providers");
22
24
  const agent_refine_db_1 = require("./agent-refine-db");
23
25
  const CUSTOM_PREFIX = /^custom-[a-z0-9][a-z0-9-]*$/;
@@ -322,7 +324,7 @@ class AgentRefineManager {
322
324
  action,
323
325
  buildOpts,
324
326
  cwd: refineExec.cwd,
325
- env: (0, providers_1.buildProviderEnv)(this._adapter, buildOpts, refineEnv),
327
+ env: (0, providers_1.buildProviderEnv)(this._adapter, buildOpts, (0, project_env_1.projectAgentSourceEnv)(this._db, (0, runtime_1.providerEnvAllowlist)(this._adapter), refineEnv)),
326
328
  onSpawn: (child) => this._activeProcesses.set(refineId, child),
327
329
  onSpawnError: (err) => { spawnState.err = err; },
328
330
  onEvent: (ev) => {