specrails-desktop 2.64.2 → 2.65.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/cli/dist/status.js +3 -0
- package/client/dist/assets/ActivityFeedPage-ByVKYII-.js +1 -0
- package/client/dist/assets/AgentBrowserCapture-BGUTjhUr.js +1 -0
- package/client/dist/assets/AgentModeAnalyticsPane-CtOLDDjB.js +2 -0
- package/client/dist/assets/AgentModeCodePane-CDhUKarT.js +2 -0
- package/client/dist/assets/AgentModeJobsPane-BAa_oEHJ.js +1 -0
- package/client/dist/assets/AgentsPage-D32hG4Ve.js +120 -0
- package/client/dist/assets/AnalyticsPage-BU50zeG6.js +5 -0
- package/client/dist/assets/BudgetCard-DP_jxwaD.js +55 -0
- package/client/dist/assets/CodePage-jiYnKGpp.js +3 -0
- package/client/dist/assets/CostValue-Bvn8674q.js +1 -0
- package/client/dist/assets/DesktopAnalyticsPage-CF__H4e3.js +1 -0
- package/client/dist/assets/DocView-RrAp70zp.js +11 -0
- package/client/dist/assets/DocsDialog-DkqHU-JF.js +1 -0
- package/client/dist/assets/DocsPage-C6X089zC.js +1 -0
- package/client/dist/assets/ExportDropdown-C5-o8y3K.js +1 -0
- package/client/dist/assets/HelpHint-Crf9_uoR.js +1 -0
- package/client/dist/assets/IntegrationsPage-aflU3KHK.js +1 -0
- package/client/dist/assets/InteractiveJobComposer-CEMMhyyJ.js +19 -0
- package/client/dist/assets/JobDetailModal-BVJ6hyRs.js +1 -0
- package/client/dist/assets/JobDetailPage-DHzBUmox.js +1 -0
- package/client/dist/assets/JobsPage-o-LAqkwC.js +1 -0
- package/client/dist/assets/LoopBuilderPage-DbSVmXBM.js +1 -0
- package/client/dist/assets/LoopPreviewModal-DbJcVyN1.js +1 -0
- package/client/dist/assets/{LoopWindowSurface-DE0v2K1p.js → LoopWindowSurface-Co1ZK26V.js} +1 -1
- package/client/dist/assets/LoopsPage-C4lgkPXB.js +2 -0
- package/client/dist/assets/MinimizedChatsContext-742ypO8n.js +1 -0
- package/client/dist/assets/PluginsPage-Acks9ges.js +2 -0
- package/client/dist/assets/RailTrack-BfLmBzBh.js +1 -0
- package/client/dist/assets/{RepositoryScopeSelector-2eSqR9WK.js → RepositoryScopeSelector-DcxbKI9w.js} +1 -1
- package/client/dist/assets/ReviewPacketPage-CAVSIOAJ.js +7 -0
- package/client/dist/assets/TemplatePreviewModal-C23SYCTm.js +1 -0
- package/client/dist/assets/TicketDetailModalContext-B-Gtm6Ob.js +23 -0
- package/client/dist/assets/Trans-C6J0cLyh.js +1 -0
- package/client/dist/assets/a11y-prefs-BqoP5goK.js +1 -0
- package/client/dist/assets/activity-BBWfoUOG.js +1 -0
- package/client/dist/assets/activity-BM_skann.js +1 -0
- package/client/dist/assets/activity-Cevl82ke.js +1 -0
- package/client/dist/assets/activity-CmACk5W5.js +1 -0
- package/client/dist/assets/activity-D9LBw3PQ.js +1 -0
- package/client/dist/assets/activity-Dspbb9lz.js +1 -0
- package/client/dist/assets/activity-FPjYIjv9.js +1 -0
- package/client/dist/assets/activity-nLCKMUKt.js +1 -0
- package/client/dist/assets/addspec-BI4jDMhA.js +1 -0
- package/client/dist/assets/addspec-BldTv7Tl.js +1 -0
- package/client/dist/assets/addspec-Cdq-2EcC.js +1 -0
- package/client/dist/assets/addspec-DH5M16BQ.js +1 -0
- package/client/dist/assets/addspec-DOFo9pD5.js +1 -0
- package/client/dist/assets/addspec-DPkwhdmL.js +1 -0
- package/client/dist/assets/addspec-Dzy12Pv3.js +1 -0
- package/client/dist/assets/addspec-skTs6EEW.js +1 -0
- package/client/dist/assets/agent-B_UEUy7Y.js +1 -0
- package/client/dist/assets/agent-BarjlhTA.js +1 -0
- package/client/dist/assets/agent-BfqIITo5.js +1 -0
- package/client/dist/assets/agent-Bt9a7Kyj.js +1 -0
- package/client/dist/assets/agent-C3689RwP.js +1 -0
- package/client/dist/assets/agent-CrmboTAi.js +1 -0
- package/client/dist/assets/agent-DcsoTnuE.js +1 -0
- package/client/dist/assets/agent-GDZoYwd4.js +1 -0
- package/client/dist/assets/{agentRuntime-es2ymSl-.js → agentRuntime-BYH70bKY.js} +1 -1
- package/client/dist/assets/agentRuntime-BijLh8I9.js +1 -0
- package/client/dist/assets/{agentRuntime-BzuwQQgn.js → agentRuntime-BvyuETPe.js} +1 -1
- package/client/dist/assets/{agentRuntime-BDvbJMmS.js → agentRuntime-C2WI6HQh.js} +1 -1
- package/client/dist/assets/{agentRuntime-BKJfv5YD.js → agentRuntime-CZPIlQsr.js} +1 -1
- package/client/dist/assets/{agentRuntime-DiCldqGG.js → agentRuntime-D2dDvCyJ.js} +1 -1
- package/client/dist/assets/agentRuntime-DWZedEbn.js +1 -0
- package/client/dist/assets/agentRuntime-DkIruUNw.js +1 -0
- package/client/dist/assets/agents-35_PDKx9.js +1 -0
- package/client/dist/assets/agents-8fZnHhEQ.js +1 -0
- package/client/dist/assets/agents-Bgimtw8z.js +1 -0
- package/client/dist/assets/agents-C4P160Us.js +1 -0
- package/client/dist/assets/agents-Clg67zbp.js +1 -0
- package/client/dist/assets/agents-DJfF4o6G.js +1 -0
- package/client/dist/assets/agents-Dc9-Y5cw.js +1 -0
- package/client/dist/assets/agents-EN1Zl4YZ.js +1 -0
- package/client/dist/assets/agentstudio-Bm4-NYaG.js +1 -0
- package/client/dist/assets/agentstudio-CD1fuj2o.js +1 -0
- package/client/dist/assets/agentstudio-CQGWFSst.js +1 -0
- package/client/dist/assets/agentstudio-CqVSb65S.js +1 -0
- package/client/dist/assets/agentstudio-DIE_HjsX.js +1 -0
- package/client/dist/assets/agentstudio-D_OmQK-k.js +1 -0
- package/client/dist/assets/agentstudio-Djz9aUfb.js +1 -0
- package/client/dist/assets/agentstudio-Qa3v9o5J.js +1 -0
- package/client/dist/assets/{aiedit-DNXxq_Dr.js → aiedit-1VzLs37W.js} +1 -1
- package/client/dist/assets/{aiedit-DCjA7jLJ.js → aiedit-BNp6GSik.js} +1 -1
- package/client/dist/assets/{aiedit-BoG24nlg.js → aiedit-BOY5xRPi.js} +1 -1
- package/client/dist/assets/{aiedit-iIjz2_Qk.js → aiedit-BrqMZvbc.js} +1 -1
- package/client/dist/assets/{aiedit-CjlSRQVP.js → aiedit-CVgtl7hm.js} +1 -1
- package/client/dist/assets/{aiedit-DQ-0_pvE.js → aiedit-CrFW9Jd2.js} +1 -1
- package/client/dist/assets/{aiedit-olnv3QSt.js → aiedit-YE2lILp7.js} +1 -1
- package/client/dist/assets/{aiedit-B0KUbpB6.js → aiedit-iA_R1AVQ.js} +1 -1
- package/client/dist/assets/analytics-3w0t-4ic.js +1 -0
- package/client/dist/assets/analytics-BRi4KQD6.js +1 -0
- package/client/dist/assets/analytics-BtjAqzke.js +1 -0
- package/client/dist/assets/analytics-COSQ1h47.js +1 -0
- package/client/dist/assets/analytics-CP2HjESk.js +1 -0
- package/client/dist/assets/analytics-DY65TC62.js +1 -0
- package/client/dist/assets/analytics-Den_vvxn.js +1 -0
- package/client/dist/assets/analytics-LmBS96O8.js +1 -0
- package/client/dist/assets/api-DOGbyfTO.js +2 -0
- package/client/dist/assets/builder-BMVvSr4v.js +1 -0
- package/client/dist/assets/builder-BN-MuLZt.js +1 -0
- package/client/dist/assets/builder-BQOZi4CF.js +1 -0
- package/client/dist/assets/builder-BjUPjsyu.js +1 -0
- package/client/dist/assets/builder-BoBtN18T.js +1 -0
- package/client/dist/assets/builder-C5g5NhxL.js +1 -0
- package/client/dist/assets/builder-RUHXw3yx.js +1 -0
- package/client/dist/assets/builder-fyS_AiyC.js +1 -0
- package/client/dist/assets/button-CHPkroew.js +1 -0
- package/client/dist/assets/chat-C9L5T7KI.js +1 -0
- package/client/dist/assets/chevron-right-CwMAj0w_.js +1 -0
- package/client/dist/assets/chevron-up-BAMuP0XD.js +1 -0
- package/client/dist/assets/chunk-OB3PAWPO-BBaq6pUk.js +3 -0
- package/client/dist/assets/code-4le5IIbf.js +1 -0
- package/client/dist/assets/code-B-jCVIbm.js +1 -0
- package/client/dist/assets/code-BRfrn5ix.js +1 -0
- package/client/dist/assets/code-CC9NCrDM.js +1 -0
- package/client/dist/assets/code-CK6pm8wY.js +1 -0
- package/client/dist/assets/code-DDiOzd6c.js +1 -0
- package/client/dist/assets/code-tGifiyf5.js +1 -0
- package/client/dist/assets/code-xkn8kQTg.js +1 -0
- package/client/dist/assets/commands-Bv1QshHR.js +1 -0
- package/client/dist/assets/commands-BvxTxboW.js +1 -0
- package/client/dist/assets/commands-C5ORR0fO.js +1 -0
- package/client/dist/assets/commands-CBKMFSTV.js +1 -0
- package/client/dist/assets/commands-CFJIRsJv.js +1 -0
- package/client/dist/assets/commands-D9o3ZcXl.js +1 -0
- package/client/dist/assets/commands-DNox0Edk.js +1 -0
- package/client/dist/assets/commands-DmIUMLdV.js +1 -0
- package/client/dist/assets/common-5H4TkaoI.js +1 -0
- package/client/dist/assets/common-9S3OdPjx.js +1 -0
- package/client/dist/assets/common-BqnwIcjs.js +1 -0
- package/client/dist/assets/common-CQP3VafS.js +1 -0
- package/client/dist/assets/common-CZnAfkB2.js +1 -0
- package/client/dist/assets/common-D5sNttV4.js +1 -0
- package/client/dist/assets/common-k_qX9nlv.js +1 -0
- package/client/dist/assets/common-s4HIi9XI.js +1 -0
- package/client/dist/assets/compass-B7guwBlY.js +1 -0
- package/client/dist/assets/confirm-dialog-ChZdHL3Q.js +1 -0
- package/client/dist/assets/copy-DOPlLymH.js +1 -0
- package/client/dist/assets/core-BozBzB6Y.js +1 -0
- package/client/dist/assets/dashboard-6zGLGcEz.js +1 -0
- package/client/dist/assets/dashboard-8Gi0FBDq.js +1 -0
- package/client/dist/assets/dashboard-B7E5YrSy.js +1 -0
- package/client/dist/assets/dashboard-BhdKV8xK.js +1 -0
- package/client/dist/assets/dashboard-Bu3zzH_s.js +1 -0
- package/client/dist/assets/dashboard-Ce_6rELA.js +1 -0
- package/client/dist/assets/dashboard-DWY-oz8P.js +1 -0
- package/client/dist/assets/dashboard-gUzlWk0o.js +1 -0
- package/client/dist/assets/date-input-Cdlr8kHz.js +1 -0
- package/client/dist/assets/dialog-C23lB2iP.js +5 -0
- package/client/dist/assets/dist-Di-oOFkX.js +1 -0
- package/client/dist/assets/dist-js-CBmS6MsJ.js +1 -0
- package/client/dist/assets/{dist-js-Rlh4FLH5.js → dist-js-DaJmKapi.js} +1 -1
- package/client/dist/assets/dropdown-menu-Bfp2CK6H.js +1 -0
- package/client/dist/assets/empty-state-D5w9OWj-.js +1 -0
- package/client/dist/assets/es2015-DfnECntk.js +41 -0
- package/client/dist/assets/esm-BKF6CE7v.js +1 -0
- package/client/dist/assets/event-BEnMLqAi.js +1 -0
- package/client/dist/assets/explore--NOz9LCN.js +1 -0
- package/client/dist/assets/explore-B2ulH6dO.js +1 -0
- package/client/dist/assets/explore-BD-QiLdg.js +1 -0
- package/client/dist/assets/explore-BOqd4_1j.js +1 -0
- package/client/dist/assets/explore-Be_Zh5zu.js +1 -0
- package/client/dist/assets/explore-CLjzPSKo.js +1 -0
- package/client/dist/assets/explore-D_-vHm29.js +1 -0
- package/client/dist/assets/explore-yEQTF6ro.js +1 -0
- package/client/dist/assets/file-text-CNXzL3wj.js +1 -0
- package/client/dist/assets/format-BODoFIw6.js +1 -0
- package/client/dist/assets/formatDistanceToNow-DLMIOS0N.js +1 -0
- package/client/dist/assets/getTimezoneOffsetInMilliseconds-O61feXch.js +1 -0
- package/client/dist/assets/git-compare-arrows-Cu6tICCq.js +1 -0
- package/client/dist/assets/humanise-command-CB4ybLwq.js +1 -0
- package/client/dist/assets/inbox-BLZ8cm6_.js +1 -0
- package/client/dist/assets/inbox-BQ3VmNYY.js +1 -0
- package/client/dist/assets/inbox-BdcXWCuT.js +1 -0
- package/client/dist/assets/inbox-CF1PHjns.js +1 -0
- package/client/dist/assets/inbox-CFNPDhso.js +1 -0
- package/client/dist/assets/inbox-DIttK_NW.js +1 -0
- package/client/dist/assets/inbox-Dfdv1Ykl.js +1 -0
- package/client/dist/assets/inbox-JS1inmeO.js +1 -0
- package/client/dist/assets/index-4UWY7Xyz.css +2 -0
- package/client/dist/assets/index-DHzB0T26.js +120 -0
- package/client/dist/assets/integrations-BcKgzgPD.js +1 -0
- package/client/dist/assets/integrations-BmX_XyJq.js +1 -0
- package/client/dist/assets/integrations-CHpwMjlY.js +1 -0
- package/client/dist/assets/integrations-CT3kr8e-.js +1 -0
- package/client/dist/assets/integrations-C_5XAkgz.js +1 -0
- package/client/dist/assets/integrations-Ct9zLX7N.js +1 -0
- package/client/dist/assets/integrations-DEYemxUv.js +1 -0
- package/client/dist/assets/integrations-DWvsB_WB.js +1 -0
- package/client/dist/assets/{jira-Cq6yvN4q.js → jira-B_ERkFRv.js} +1 -1
- package/client/dist/assets/jira-Bn-A5lwD.js +1 -0
- package/client/dist/assets/jira-C71Ybnhp.js +1 -0
- package/client/dist/assets/jira-CkwjeJz6.js +1 -0
- package/client/dist/assets/jira-D9pSLXjI.js +1 -0
- package/client/dist/assets/jira-DBRS_lcp.js +1 -0
- package/client/dist/assets/jira-DHS6CsKh.js +1 -0
- package/client/dist/assets/jira-MInHRUb1.js +1 -0
- package/client/dist/assets/jira-api-DHme7Upx.js +1 -0
- package/client/dist/assets/jobs-BMLTDo63.js +1 -0
- package/client/dist/assets/jobs-BO8q4Mi1.js +1 -0
- package/client/dist/assets/jobs-Ck8uOWMM.js +1 -0
- package/client/dist/assets/jobs-CyFfPCpg.js +1 -0
- package/client/dist/assets/jobs-DT5s4fZ6.js +1 -0
- package/client/dist/assets/jobs-DZAgVPcD.js +1 -0
- package/client/dist/assets/jobs-b5gPYaKr.js +1 -0
- package/client/dist/assets/jobs-xsZK1440.js +1 -0
- package/client/dist/assets/launch-forecast-BTa-p3RP.js +1 -0
- package/client/dist/assets/{loop-layout-DtxX27Jz.css → loop-layout-DLioOiRN.css} +1 -1
- package/client/dist/assets/loop-layout-Sl9cfTvs.js +7 -0
- package/client/dist/assets/loops-BEEOVJDR.js +1 -0
- package/client/dist/assets/loops-BcrQ2vk7.js +1 -0
- package/client/dist/assets/loops-BjWxzJIZ.js +1 -0
- package/client/dist/assets/loops-BogV595N.js +1 -0
- package/client/dist/assets/loops-CU0BLZiz.js +1 -0
- package/client/dist/assets/loops-CrNBgi1G.js +1 -0
- package/client/dist/assets/loops-CwalwS_i.js +1 -0
- package/client/dist/assets/loops-_TDVN-fX.js +1 -0
- package/client/dist/assets/mcp-BNs8gxoL.js +1 -0
- package/client/dist/assets/mcp-BvRh_xO5.js +1 -0
- package/client/dist/assets/mcp-C2F1pghi.js +1 -0
- package/client/dist/assets/mcp-D9RLKAs2.js +1 -0
- package/client/dist/assets/mcp-DAghcsR0.js +1 -0
- package/client/dist/assets/mcp-DWWAPi1G.js +1 -0
- package/client/dist/assets/mcp-DbGSFC3f.js +1 -0
- package/client/dist/assets/mcp-FelCicrv.js +1 -0
- package/client/dist/assets/narration-C3NBkAR4.js +1 -0
- package/client/dist/assets/narration-CkoJq-Lf.js +1 -0
- package/client/dist/assets/narration-Cr0NeW9K.js +1 -0
- package/client/dist/assets/narration-DJUXOs-W.js +1 -0
- package/client/dist/assets/narration-DgL8TMvN.js +1 -0
- package/client/dist/assets/narration-DjBafgv0.js +1 -0
- package/client/dist/assets/narration-Dle6Iv0c.js +1 -0
- package/client/dist/assets/narration-MYlfktga.js +1 -0
- package/client/dist/assets/nav-BSQ8KW1c.js +1 -0
- package/client/dist/assets/nav-BauVof8Z.js +1 -0
- package/client/dist/assets/nav-BfOAH1se.js +1 -0
- package/client/dist/assets/nav-D3bOsipX.js +1 -0
- package/client/dist/assets/nav-DOMMhlLx.js +1 -0
- package/client/dist/assets/nav-DPzVlgZU.js +1 -0
- package/client/dist/assets/nav-DZJbFbah.js +1 -0
- package/client/dist/assets/nav-D_5aojd2.js +1 -0
- package/client/dist/assets/notify-error-BsWANx1T.js +1 -0
- package/client/dist/assets/onboarding-BdZQnNm3.js +1 -0
- package/client/dist/assets/onboarding-CJQEv1vp.js +1 -0
- package/client/dist/assets/onboarding-CWJGYUW3.js +1 -0
- package/client/dist/assets/onboarding-ChfYN7dA.js +1 -0
- package/client/dist/assets/onboarding-CjvDUR3V.js +1 -0
- package/client/dist/assets/onboarding-I6vS-zTB.js +1 -0
- package/client/dist/assets/onboarding-dgC_9dTB.js +1 -0
- package/client/dist/assets/onboarding-mlXSyKzX.js +1 -0
- package/client/dist/assets/origin-03nTuaOb.js +1 -0
- package/client/dist/assets/packet-BjpyRnZr.js +1 -0
- package/client/dist/assets/packet-BwgG5mBt.js +1 -0
- package/client/dist/assets/packet-C3eAUFkV.js +1 -0
- package/client/dist/assets/packet-C8wZuSld.js +1 -0
- package/client/dist/assets/packet-CNXEy_85.js +1 -0
- package/client/dist/assets/packet-DsV5Aa_8.js +1 -0
- package/client/dist/assets/packet-aasskOE7.js +1 -0
- package/client/dist/assets/packet-phxCc2gJ.js +1 -0
- package/client/dist/assets/page-header-BStSHkP8.js +1 -0
- package/client/dist/assets/project-repositories-DJPeAVBK.js +1 -0
- package/client/dist/assets/{provider-capabilities-lePfeT_Y.js → provider-capabilities-DtwcTme4.js} +1 -1
- package/client/dist/assets/recovery-BPDOsC92.js +1 -0
- package/client/dist/assets/recovery-BluNHoXM.js +1 -0
- package/client/dist/assets/recovery-CRvEmB0C.js +1 -0
- package/client/dist/assets/recovery-CeIoRnkR.js +1 -0
- package/client/dist/assets/recovery-DHCo8KGi.js +1 -0
- package/client/dist/assets/recovery-OxAIpbBF.js +1 -0
- package/client/dist/assets/recovery-XXexYGOJ.js +1 -0
- package/client/dist/assets/recovery-pITlc--v.js +1 -0
- package/client/dist/assets/refresh-cw-DfyTkbsf.js +1 -0
- package/client/dist/assets/select-xA3pSmqE.js +1 -0
- package/client/dist/assets/settings--yzDbX9r.js +1 -0
- package/client/dist/assets/settings-5_heTv8s.js +1 -0
- package/client/dist/assets/settings-BSf27MDg.js +1 -0
- package/client/dist/assets/settings-BSj6FakR.js +1 -0
- package/client/dist/assets/settings-BZDo_8Nn.js +1 -0
- package/client/dist/assets/settings-BdWgmNc0.js +1 -0
- package/client/dist/assets/settings-DRouxKqb.js +1 -0
- package/client/dist/assets/settings-DnWFoY-F.js +1 -0
- package/client/dist/assets/setup-BJWy62ri.js +1 -0
- package/client/dist/assets/setup-BgKOIuzc.js +1 -0
- package/client/dist/assets/setup-BvVIyUlz.js +1 -0
- package/client/dist/assets/setup-BxCk2pe1.js +1 -0
- package/client/dist/assets/setup-C-xQTL7R.js +1 -0
- package/client/dist/assets/setup-CbaVoiwV.js +1 -0
- package/client/dist/assets/setup-DxTBkX3P.js +1 -0
- package/client/dist/assets/setup-oGoVAzOD.js +1 -0
- package/client/dist/assets/specs-7tAb4IKr.js +1 -0
- package/client/dist/assets/specs-BUcY4s5v.js +1 -0
- package/client/dist/assets/specs-Bk5LeBAA.js +1 -0
- package/client/dist/assets/specs-CAA4Lrlg.js +1 -0
- package/client/dist/assets/specs-CS091AnA.js +1 -0
- package/client/dist/assets/specs-DJ6gmFcK.js +1 -0
- package/client/dist/assets/specs-GfCcrBSC.js +1 -0
- package/client/dist/assets/specs-xQgyc7WL.js +1 -0
- package/client/dist/assets/spending-CVH8VREb.js +1 -0
- package/client/dist/assets/square-Co6h5vZg.js +1 -0
- package/client/dist/assets/tauri-shell-43ixPGfa.js +2 -0
- package/client/dist/assets/terminal-0v9sBylD.js +1 -0
- package/client/dist/assets/terminal-AbUAmCxE.js +1 -0
- package/client/dist/assets/terminal-BJayIbIP.js +1 -0
- package/client/dist/assets/terminal-C2RUlXyi.js +1 -0
- package/client/dist/assets/terminal-CMmSb_Nj.js +1 -0
- package/client/dist/assets/terminal-DKWjj7HJ.js +1 -0
- package/client/dist/assets/terminal-KlFu7_pV.js +1 -0
- package/client/dist/assets/terminal-i99yqFvm.js +1 -0
- package/client/dist/assets/tickets-846Oq3i3.js +1 -0
- package/client/dist/assets/tickets-B5LJTe_b.js +1 -0
- package/client/dist/assets/tickets-Bfo2GGmH.js +1 -0
- package/client/dist/assets/tickets-BhdZ1yY2.js +1 -0
- package/client/dist/assets/tickets-CgjWJHAW.js +1 -0
- package/client/dist/assets/tickets-Ct9DbDUR.js +1 -0
- package/client/dist/assets/tickets-rptLEJB1.js +1 -0
- package/client/dist/assets/tickets-xQ6DpYdu.js +1 -0
- package/client/dist/assets/trending-up-BGvb4zZt.js +1 -0
- package/client/dist/assets/undo-6zuS4-sL.js +1 -0
- package/client/dist/assets/undo-BeM4gDOP.js +1 -0
- package/client/dist/assets/undo-BeppX8xS.js +1 -0
- package/client/dist/assets/undo-BqvNZ5MG.js +1 -0
- package/client/dist/assets/undo-BzwEPf_k.js +1 -0
- package/client/dist/assets/undo-CJ9Cu1NN.js +1 -0
- package/client/dist/assets/undo-ds8nMFbX.js +1 -0
- package/client/dist/assets/undo-x_gA-knG.js +1 -0
- package/client/dist/assets/useDesktop-BuOp2-MR.js +1 -0
- package/client/dist/assets/useRuntimeRuns-BRS6ncnO.js +1 -0
- package/client/dist/assets/utils-ELimjS2Y.js +1 -0
- package/client/dist/assets/wrench-Br2n1Lxd.js +1 -0
- package/client/dist/index.html +75 -60
- package/docs/ci-cd.md +29 -1
- package/docs/cli.md +10 -31
- package/docs/codex.md +1 -1
- package/docs/creating-specs.md +15 -12
- package/docs/customizing.md +16 -13
- package/docs/getting-started.md +12 -11
- package/docs/guide/de/agents/1-meet-the-agents.md +1 -1
- package/docs/guide/de/getting-started/2-installing-and-first-run.md +2 -0
- package/docs/guide/de/getting-started/3-try-the-sample-project.md +35 -0
- package/docs/guide/de/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
- package/docs/guide/de/getting-started/6-universal-search.md +34 -0
- package/docs/guide/de/insights/1-analytics-and-cost-tracking.md +20 -6
- package/docs/guide/de/insights/2-the-integrated-terminal.md +1 -1
- package/docs/guide/de/insights/3-code-explorer.md +1 -1
- package/docs/guide/de/integrations/1-ai-providers.md +1 -1
- package/docs/guide/de/integrations/2-plugins.md +1 -1
- package/docs/guide/de/integrations/3-jira-integration.md +3 -3
- package/docs/guide/de/integrations/4-mobile-companion.md +1 -1
- package/docs/guide/de/integrations/5-mcp-server.md +1 -1
- package/docs/guide/de/integrations/6-agent-chat.md +12 -5
- package/docs/guide/de/integrations/8-flow-mode.md +69 -0
- package/docs/guide/de/pipeline/1-rails-and-jobs.md +21 -1
- package/docs/guide/de/pipeline/2-the-job-detail-view.md +12 -0
- package/docs/guide/de/pipeline/3-reviewing-a-delivery.md +43 -0
- package/docs/guide/de/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/de/pipeline/5-the-loop-builder.md +1 -1
- package/docs/guide/de/settings/1-themes.md +1 -1
- package/docs/guide/de/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
- package/docs/guide/de/settings/5-project-environment.md +1 -1
- package/docs/guide/de/settings/6-updates.md +24 -0
- package/docs/guide/de/settings/7-existing-projects.md +33 -0
- package/docs/guide/de/settings/8-accessibility.md +23 -0
- package/docs/guide/de/specs/1-specs-and-the-backlog.md +41 -3
- package/docs/guide/de/specs/2-add-spec-quick-mode.md +1 -1
- package/docs/guide/de/specs/3-add-spec-explore-mode.md +1 -1
- package/docs/guide/en/agents/1-meet-the-agents.md +1 -1
- package/docs/guide/en/getting-started/1-what-is-specrails.md +1 -1
- package/docs/guide/en/getting-started/2-installing-and-first-run.md +2 -0
- package/docs/guide/en/getting-started/3-try-the-sample-project.md +35 -0
- package/docs/guide/en/getting-started/5-the-dashboard-tour.md +52 -0
- package/docs/guide/en/getting-started/6-universal-search.md +34 -0
- package/docs/guide/en/insights/1-analytics-and-cost-tracking.md +24 -10
- package/docs/guide/en/insights/2-the-integrated-terminal.md +1 -1
- package/docs/guide/en/insights/3-code-explorer.md +5 -5
- package/docs/guide/en/integrations/1-ai-providers.md +1 -1
- package/docs/guide/en/integrations/2-plugins.md +1 -1
- package/docs/guide/en/integrations/3-jira-integration.md +4 -4
- package/docs/guide/en/integrations/4-mobile-companion.md +1 -1
- package/docs/guide/en/integrations/5-mcp-server.md +4 -4
- package/docs/guide/en/integrations/6-agent-chat.md +12 -5
- package/docs/guide/en/integrations/8-flow-mode.md +69 -0
- package/docs/guide/en/pipeline/1-rails-and-jobs.md +22 -3
- package/docs/guide/en/pipeline/2-the-job-detail-view.md +19 -7
- package/docs/guide/en/pipeline/3-reviewing-a-delivery.md +43 -0
- package/docs/guide/en/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/en/pipeline/5-the-loop-builder.md +2 -2
- package/docs/guide/en/settings/1-themes.md +1 -1
- package/docs/guide/en/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
- package/docs/guide/en/settings/5-project-environment.md +1 -1
- package/docs/guide/en/settings/6-updates.md +24 -0
- package/docs/guide/en/settings/7-existing-projects.md +33 -0
- package/docs/guide/en/settings/8-accessibility.md +23 -0
- package/docs/guide/en/specs/1-specs-and-the-backlog.md +42 -6
- package/docs/guide/en/specs/2-add-spec-quick-mode.md +1 -1
- package/docs/guide/en/specs/3-add-spec-explore-mode.md +2 -2
- package/docs/guide/es/agents/1-meet-the-agents.md +1 -1
- package/docs/guide/es/agents/2-profiles-and-the-balanced-default.md +1 -1
- package/docs/guide/es/agents/3-customizing-models-per-agent.md +2 -2
- package/docs/guide/es/agents/4-custom-agents-catalog.md +1 -1
- package/docs/guide/es/getting-started/1-what-is-specrails.md +3 -3
- package/docs/guide/es/getting-started/2-installing-and-first-run.md +2 -0
- package/docs/guide/es/getting-started/3-try-the-sample-project.md +35 -0
- package/docs/guide/es/getting-started/5-the-dashboard-tour.md +52 -0
- package/docs/guide/es/getting-started/6-universal-search.md +34 -0
- package/docs/guide/es/insights/1-analytics-and-cost-tracking.md +26 -12
- package/docs/guide/es/insights/2-the-integrated-terminal.md +1 -1
- package/docs/guide/es/insights/3-code-explorer.md +5 -5
- package/docs/guide/es/integrations/1-ai-providers.md +1 -1
- package/docs/guide/es/integrations/2-plugins.md +1 -1
- package/docs/guide/es/integrations/3-jira-integration.md +4 -4
- package/docs/guide/es/integrations/4-mobile-companion.md +1 -1
- package/docs/guide/es/integrations/5-mcp-server.md +4 -4
- package/docs/guide/es/integrations/6-agent-chat.md +14 -7
- package/docs/guide/es/integrations/7-local-engines.md +1 -1
- package/docs/guide/es/integrations/8-flow-mode.md +69 -0
- package/docs/guide/es/pipeline/1-rails-and-jobs.md +33 -13
- package/docs/guide/es/pipeline/2-the-job-detail-view.md +38 -26
- package/docs/guide/es/pipeline/3-reviewing-a-delivery.md +43 -0
- package/docs/guide/es/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/es/pipeline/5-the-loop-builder.md +4 -4
- package/docs/guide/es/settings/1-themes.md +1 -1
- package/docs/guide/es/settings/3-pipeline-telemetry-and-diagnostics.md +10 -10
- package/docs/guide/es/settings/5-project-environment.md +1 -1
- package/docs/guide/es/settings/6-updates.md +24 -0
- package/docs/guide/es/settings/7-existing-projects.md +33 -0
- package/docs/guide/es/settings/8-accessibility.md +23 -0
- package/docs/guide/es/specs/1-specs-and-the-backlog.md +43 -7
- package/docs/guide/es/specs/2-add-spec-quick-mode.md +1 -1
- package/docs/guide/es/specs/3-add-spec-explore-mode.md +3 -3
- package/docs/guide/fr/agents/1-meet-the-agents.md +1 -1
- package/docs/guide/fr/getting-started/2-installing-and-first-run.md +2 -0
- package/docs/guide/fr/getting-started/3-try-the-sample-project.md +35 -0
- package/docs/guide/fr/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
- package/docs/guide/fr/getting-started/6-universal-search.md +34 -0
- package/docs/guide/fr/insights/1-analytics-and-cost-tracking.md +18 -4
- package/docs/guide/fr/insights/2-the-integrated-terminal.md +1 -1
- package/docs/guide/fr/insights/3-code-explorer.md +1 -1
- package/docs/guide/fr/integrations/1-ai-providers.md +1 -1
- package/docs/guide/fr/integrations/2-plugins.md +1 -1
- package/docs/guide/fr/integrations/3-jira-integration.md +3 -3
- package/docs/guide/fr/integrations/4-mobile-companion.md +1 -1
- package/docs/guide/fr/integrations/5-mcp-server.md +1 -1
- package/docs/guide/fr/integrations/6-agent-chat.md +11 -4
- package/docs/guide/fr/integrations/8-flow-mode.md +69 -0
- package/docs/guide/fr/pipeline/1-rails-and-jobs.md +21 -1
- package/docs/guide/fr/pipeline/2-the-job-detail-view.md +12 -0
- package/docs/guide/fr/pipeline/3-reviewing-a-delivery.md +43 -0
- package/docs/guide/fr/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/fr/pipeline/5-the-loop-builder.md +1 -1
- package/docs/guide/fr/settings/1-themes.md +1 -1
- package/docs/guide/fr/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
- package/docs/guide/fr/settings/5-project-environment.md +1 -1
- package/docs/guide/fr/settings/6-updates.md +24 -0
- package/docs/guide/fr/settings/7-existing-projects.md +33 -0
- package/docs/guide/fr/settings/8-accessibility.md +23 -0
- package/docs/guide/fr/specs/1-specs-and-the-backlog.md +41 -3
- package/docs/guide/fr/specs/2-add-spec-quick-mode.md +1 -1
- package/docs/guide/fr/specs/3-add-spec-explore-mode.md +1 -1
- package/docs/guide/it/agents/1-meet-the-agents.md +1 -1
- package/docs/guide/it/getting-started/2-installing-and-first-run.md +2 -0
- package/docs/guide/it/getting-started/3-try-the-sample-project.md +35 -0
- package/docs/guide/it/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
- package/docs/guide/it/getting-started/6-universal-search.md +34 -0
- package/docs/guide/it/insights/1-analytics-and-cost-tracking.md +18 -4
- package/docs/guide/it/insights/2-the-integrated-terminal.md +1 -1
- package/docs/guide/it/insights/3-code-explorer.md +1 -1
- package/docs/guide/it/integrations/1-ai-providers.md +1 -1
- package/docs/guide/it/integrations/2-plugins.md +1 -1
- package/docs/guide/it/integrations/3-jira-integration.md +3 -3
- package/docs/guide/it/integrations/4-mobile-companion.md +1 -1
- package/docs/guide/it/integrations/5-mcp-server.md +1 -1
- package/docs/guide/it/integrations/6-agent-chat.md +11 -4
- package/docs/guide/it/integrations/8-flow-mode.md +69 -0
- package/docs/guide/it/pipeline/1-rails-and-jobs.md +21 -1
- package/docs/guide/it/pipeline/2-the-job-detail-view.md +12 -0
- package/docs/guide/it/pipeline/3-reviewing-a-delivery.md +43 -0
- package/docs/guide/it/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/it/pipeline/5-the-loop-builder.md +1 -1
- package/docs/guide/it/settings/1-themes.md +1 -1
- package/docs/guide/it/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
- package/docs/guide/it/settings/5-project-environment.md +1 -1
- package/docs/guide/it/settings/6-updates.md +24 -0
- package/docs/guide/it/settings/7-existing-projects.md +33 -0
- package/docs/guide/it/settings/8-accessibility.md +23 -0
- package/docs/guide/it/specs/1-specs-and-the-backlog.md +41 -3
- package/docs/guide/it/specs/2-add-spec-quick-mode.md +1 -1
- package/docs/guide/it/specs/3-add-spec-explore-mode.md +1 -1
- package/docs/guide/ja/agents/1-meet-the-agents.md +1 -1
- package/docs/guide/ja/getting-started/2-installing-and-first-run.md +2 -0
- package/docs/guide/ja/getting-started/3-try-the-sample-project.md +35 -0
- package/docs/guide/ja/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
- package/docs/guide/ja/getting-started/6-universal-search.md +34 -0
- package/docs/guide/ja/insights/1-analytics-and-cost-tracking.md +18 -4
- package/docs/guide/ja/insights/2-the-integrated-terminal.md +1 -1
- package/docs/guide/ja/insights/3-code-explorer.md +1 -1
- package/docs/guide/ja/integrations/1-ai-providers.md +1 -1
- package/docs/guide/ja/integrations/2-plugins.md +1 -1
- package/docs/guide/ja/integrations/3-jira-integration.md +3 -3
- package/docs/guide/ja/integrations/4-mobile-companion.md +1 -1
- package/docs/guide/ja/integrations/5-mcp-server.md +1 -1
- package/docs/guide/ja/integrations/6-agent-chat.md +11 -4
- package/docs/guide/ja/integrations/8-flow-mode.md +69 -0
- package/docs/guide/ja/pipeline/1-rails-and-jobs.md +21 -1
- package/docs/guide/ja/pipeline/2-the-job-detail-view.md +12 -0
- package/docs/guide/ja/pipeline/3-reviewing-a-delivery.md +43 -0
- package/docs/guide/ja/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/ja/pipeline/5-the-loop-builder.md +1 -1
- package/docs/guide/ja/settings/1-themes.md +1 -1
- package/docs/guide/ja/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
- package/docs/guide/ja/settings/5-project-environment.md +1 -1
- package/docs/guide/ja/settings/6-updates.md +24 -0
- package/docs/guide/ja/settings/7-existing-projects.md +33 -0
- package/docs/guide/ja/settings/8-accessibility.md +23 -0
- package/docs/guide/ja/specs/1-specs-and-the-backlog.md +41 -3
- package/docs/guide/ja/specs/2-add-spec-quick-mode.md +1 -1
- package/docs/guide/ja/specs/3-add-spec-explore-mode.md +1 -1
- package/docs/guide/pt/agents/1-meet-the-agents.md +1 -1
- package/docs/guide/pt/getting-started/2-installing-and-first-run.md +2 -0
- package/docs/guide/pt/getting-started/3-try-the-sample-project.md +35 -0
- package/docs/guide/pt/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
- package/docs/guide/pt/getting-started/6-universal-search.md +34 -0
- package/docs/guide/pt/insights/1-analytics-and-cost-tracking.md +18 -4
- package/docs/guide/pt/insights/2-the-integrated-terminal.md +1 -1
- package/docs/guide/pt/insights/3-code-explorer.md +1 -1
- package/docs/guide/pt/integrations/1-ai-providers.md +1 -1
- package/docs/guide/pt/integrations/2-plugins.md +1 -1
- package/docs/guide/pt/integrations/3-jira-integration.md +3 -3
- package/docs/guide/pt/integrations/4-mobile-companion.md +1 -1
- package/docs/guide/pt/integrations/5-mcp-server.md +1 -1
- package/docs/guide/pt/integrations/6-agent-chat.md +12 -5
- package/docs/guide/pt/integrations/8-flow-mode.md +69 -0
- package/docs/guide/pt/pipeline/1-rails-and-jobs.md +21 -1
- package/docs/guide/pt/pipeline/2-the-job-detail-view.md +12 -0
- package/docs/guide/pt/pipeline/3-reviewing-a-delivery.md +43 -0
- package/docs/guide/pt/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/pt/pipeline/5-the-loop-builder.md +1 -1
- package/docs/guide/pt/settings/1-themes.md +1 -1
- package/docs/guide/pt/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
- package/docs/guide/pt/settings/5-project-environment.md +1 -1
- package/docs/guide/pt/settings/6-updates.md +24 -0
- package/docs/guide/pt/settings/7-existing-projects.md +33 -0
- package/docs/guide/pt/settings/8-accessibility.md +23 -0
- package/docs/guide/pt/specs/1-specs-and-the-backlog.md +41 -3
- package/docs/guide/pt/specs/2-add-spec-quick-mode.md +1 -1
- package/docs/guide/pt/specs/3-add-spec-explore-mode.md +1 -1
- package/docs/guide/zh/agents/1-meet-the-agents.md +1 -1
- package/docs/guide/zh/getting-started/2-installing-and-first-run.md +2 -0
- package/docs/guide/zh/getting-started/3-try-the-sample-project.md +35 -0
- package/docs/guide/zh/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
- package/docs/guide/zh/getting-started/6-universal-search.md +34 -0
- package/docs/guide/zh/insights/1-analytics-and-cost-tracking.md +18 -4
- package/docs/guide/zh/insights/2-the-integrated-terminal.md +1 -1
- package/docs/guide/zh/insights/3-code-explorer.md +1 -1
- package/docs/guide/zh/integrations/1-ai-providers.md +1 -1
- package/docs/guide/zh/integrations/2-plugins.md +1 -1
- package/docs/guide/zh/integrations/3-jira-integration.md +3 -3
- package/docs/guide/zh/integrations/4-mobile-companion.md +1 -1
- package/docs/guide/zh/integrations/5-mcp-server.md +1 -1
- package/docs/guide/zh/integrations/6-agent-chat.md +11 -4
- package/docs/guide/zh/integrations/8-flow-mode.md +69 -0
- package/docs/guide/zh/pipeline/1-rails-and-jobs.md +21 -1
- package/docs/guide/zh/pipeline/2-the-job-detail-view.md +12 -0
- package/docs/guide/zh/pipeline/3-reviewing-a-delivery.md +43 -0
- package/docs/guide/zh/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/zh/pipeline/5-the-loop-builder.md +1 -1
- package/docs/guide/zh/settings/1-themes.md +1 -1
- package/docs/guide/zh/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
- package/docs/guide/zh/settings/5-project-environment.md +1 -1
- package/docs/guide/zh/settings/6-updates.md +24 -0
- package/docs/guide/zh/settings/7-existing-projects.md +33 -0
- package/docs/guide/zh/settings/8-accessibility.md +23 -0
- package/docs/guide/zh/specs/1-specs-and-the-backlog.md +41 -3
- package/docs/guide/zh/specs/2-add-spec-quick-mode.md +1 -1
- package/docs/guide/zh/specs/3-add-spec-explore-mode.md +1 -1
- package/docs/internals/README.md +8 -0
- package/docs/internals/adding-a-provider.md +19 -2
- package/docs/internals/agent-actions-audit.md +101 -0
- package/docs/internals/agent-sessions.md +36 -1
- package/docs/internals/api-reference.md +190 -45
- package/docs/internals/architecture.md +53 -47
- package/docs/internals/companion-inbox-decisions.md +42 -0
- package/docs/internals/companion-rails-as-loops-contract.md +17 -6
- package/docs/internals/configuration.md +140 -9
- package/docs/internals/core-runtime-updates.md +4 -4
- package/docs/internals/existing-project-anchoring.md +168 -0
- package/docs/internals/flow-mode.md +668 -0
- package/docs/internals/legacy-implementation-notes.md +13 -0
- package/docs/internals/local-testing-feedback-2026-10.md +210 -0
- package/docs/internals/mcp-mission-audit.md +4 -0
- package/docs/internals/mission-rail-cards.md +10 -5
- package/docs/internals/mission-read-only-policy.md +152 -0
- package/docs/internals/modal-standard.md +181 -0
- package/docs/internals/openspec-workflow.md +32 -0
- package/docs/internals/operations-runbook.md +30 -0
- package/docs/internals/profiles.md +6 -3
- package/docs/internals/programmatic-agent-runtime.md +8 -0
- package/docs/internals/project-builder.md +1 -1
- package/docs/internals/review-packet.md +161 -9
- package/docs/internals/safe-pr-review-flow.md +135 -6
- package/docs/internals/source-map.md +413 -18
- package/docs/internals/spec-addenda.md +10 -0
- package/docs/internals/spec-triage.md +140 -0
- package/docs/internals/visual-design-audit.md +15 -2
- package/docs/local-providers.md +3 -0
- package/docs/mcp.md +21 -3
- package/docs/platforms/macos.md +1 -1
- package/docs/platforms/windows.md +2 -2
- package/docs/running-pipelines.md +22 -6
- package/docs/tracking-cost.md +54 -10
- package/local-runner/dist/specrails-local-runner.js +3851 -1178
- package/mcp-bridge/dist/specrails-mcp.js +3864 -1143
- package/package.json +10 -9
- package/server/dist/agent-mcp-config.js +37 -1
- package/server/dist/api-version.js +19 -0
- package/server/dist/command-resolver.js +4 -2
- package/server/dist/core-compat.js +1 -1
- package/server/dist/core-execution.js +2 -1
- package/server/dist/core-update-manager.js +71 -13
- package/server/dist/db/job-search.js +248 -0
- package/server/dist/db/jobs.js +6 -0
- package/server/dist/db/migrations.js +239 -0
- package/server/dist/db.js +9 -2
- package/server/dist/desktop-db.js +99 -5
- package/server/dist/desktop-router.js +126 -13
- package/server/dist/docs-router.js +67 -1
- package/server/dist/feature-flags.js +22 -0
- package/server/dist/index.js +30 -15
- package/server/dist/jira/jira-adf.js +13 -1
- package/server/dist/jira/jira-clarifications.js +146 -0
- package/server/dist/jira/jira-client.js +8 -1
- package/server/dist/jira/jira-db.js +41 -0
- package/server/dist/jira/jira-sync-manager.js +328 -25
- package/server/dist/mcp/guide.js +17 -7
- package/server/dist/mcp/tools/agents.js +1 -1
- package/server/dist/mcp/tools/analytics.js +15 -3
- package/server/dist/mcp/tools/app-settings.js +14 -1
- package/server/dist/mcp/tools/chat.js +1 -1
- package/server/dist/mcp/tools/env.js +4 -2
- package/server/dist/mcp/tools/jobs.js +96 -7
- package/server/dist/mcp/tools/loops.js +1 -1
- package/server/dist/mcp/tools/meta.js +10 -13
- package/server/dist/mcp/tools/rails.js +15 -1
- package/server/dist/mcp/tools/setup.js +1 -1
- package/server/dist/mcp/tools/specs.js +8 -5
- package/server/dist/mcp/tools/support.js +6 -3
- package/server/dist/mcp/tools/types.js +38 -1
- package/server/dist/mobile/mobile-admin-router.js +0 -16
- package/server/dist/mobile/mobile-gateway.js +0 -18
- package/server/dist/mobile/mobile-inbox.js +240 -0
- package/server/dist/mobile/mobile-missions.js +6 -8
- package/server/dist/mobile/mobile-router.js +9 -9
- package/server/dist/mobile/mobile-webrtc-peer.js +4 -54
- package/server/dist/mobile/mobile-ws.js +27 -4
- package/server/dist/modules/accounting/runtime/ai-invocations.js +4 -0
- package/server/dist/modules/accounting/runtime/decision-times.js +102 -0
- package/server/dist/modules/accounting/runtime/loop-economics.js +284 -0
- package/server/dist/modules/accounting/runtime/spending.js +7 -2
- package/server/dist/modules/accounting/runtime/what-if.js +87 -0
- package/server/dist/modules/agent-runtime/runtime/agent-runtime-bridge.js +86 -5
- package/server/dist/modules/agent-runtime/runtime/agent-runtime-controls.js +28 -2
- package/server/dist/modules/agent-runtime/runtime/agent-runtime-metrics.js +15 -2
- package/server/dist/modules/agent-runtime/runtime/agent-runtime-settings-router.js +21 -2
- package/server/dist/modules/agent-runtime/runtime/core-capabilities.js +55 -0
- package/server/dist/modules/agent-sessions/adapters/host-process.js +1 -1
- package/server/dist/modules/agent-sessions/domain/availability.js +16 -0
- package/server/dist/modules/agent-sessions/domain/protocol.js +8 -1
- package/server/dist/modules/agent-sessions/index.js +3 -1
- package/server/dist/modules/agent-sessions/runtime/core-sessions-availability.js +16 -0
- package/server/dist/modules/agents/runtime/agent-refine-manager.js +3 -1
- package/server/dist/modules/agents/runtime/agent-store.js +60 -73
- package/server/dist/modules/audit/adapters/http.js +66 -0
- package/server/dist/modules/audit/adapters/runtime.js +60 -0
- package/server/dist/modules/audit/adapters/sqlite.js +73 -0
- package/server/dist/modules/audit/application.js +190 -0
- package/server/dist/modules/audit/domain.js +434 -0
- package/server/dist/modules/audit/index.js +27 -0
- package/server/dist/modules/audit/ports.js +2 -0
- package/server/dist/modules/browser/runtime/browser-capture-manager.js +18 -141
- package/server/dist/modules/browser/runtime/browser-capture-types.js +1 -10
- package/server/dist/modules/browser/runtime/browser-playwright.js +0 -19
- package/server/dist/modules/code/runtime/file-provenance.js +23 -0
- package/server/dist/modules/conversations/runtime/chat-manager.js +5 -2
- package/server/dist/modules/delivery/adapters/decisions/chains.js +1 -0
- package/server/dist/modules/delivery/adapters/decisions/create.js +19 -1
- package/server/dist/modules/delivery/adapters/decisions/discard.js +2 -0
- package/server/dist/modules/delivery/adapters/decisions/local-changes.js +427 -0
- package/server/dist/modules/delivery/adapters/decisions/merge-local.js +80 -6
- package/server/dist/modules/delivery/adapters/decisions/observations.js +5 -0
- package/server/dist/modules/delivery/adapters/decisions/ownership.js +2 -1
- package/server/dist/modules/delivery/adapters/decisions/transitions.js +9 -0
- package/server/dist/modules/delivery/adapters/review-wip-store.js +37 -0
- package/server/dist/modules/delivery/domain/review-wip.js +71 -0
- package/server/dist/modules/delivery/index.js +9 -1
- package/server/dist/modules/delivery/runtime/delivery-changes.js +355 -0
- package/server/dist/modules/delivery/runtime/delivery-evidence.js +249 -8
- package/server/dist/modules/delivery/runtime/flow-review-legacy.js +99 -0
- package/server/dist/modules/delivery/runtime/flow-review-outcome.js +107 -0
- package/server/dist/modules/delivery/runtime/flow-worktree-handoff.js +32 -0
- package/server/dist/modules/delivery/runtime/flow-worktree-return.js +87 -0
- package/server/dist/modules/delivery/runtime/isolated-worktree.js +380 -0
- package/server/dist/modules/delivery/runtime/local-restore-branch.js +325 -0
- package/server/dist/modules/delivery/runtime/local-restore-resolver.js +48 -0
- package/server/dist/modules/delivery/runtime/local-stash.js +423 -0
- package/server/dist/modules/delivery/runtime/multi-repo-execution.js +27 -1
- package/server/dist/modules/delivery/runtime/phase3-harvest.js +40 -0
- package/server/dist/modules/delivery/runtime/pr-body.js +50 -0
- package/server/dist/modules/delivery/runtime/rail-isolated-launch.js +169 -166
- package/server/dist/modules/delivery/runtime/rail-launch-parser.js +5 -2
- package/server/dist/modules/delivery/runtime/rail-pr-decision.js +7 -1
- package/server/dist/modules/delivery/runtime/rail-pr-store.js +193 -12
- package/server/dist/modules/delivery/runtime/rails-router.js +267 -5
- package/server/dist/modules/delivery/runtime/review-brief.js +208 -0
- package/server/dist/modules/delivery/runtime/review-packet.js +41 -2
- package/server/dist/modules/delivery/runtime/review-wip-gate.js +67 -0
- package/server/dist/modules/delivery/runtime/run-records.js +267 -0
- package/server/dist/modules/delivery/runtime/run-review-diagnosis.js +102 -0
- package/server/dist/modules/execution/adapters/budget-storage.js +76 -0
- package/server/dist/modules/execution/application/enforce-budget.js +17 -2
- package/server/dist/modules/execution/domain/agent-env.js +98 -0
- package/server/dist/modules/execution/domain/daily-budget.js +36 -0
- package/server/dist/modules/execution/domain/spend-caps.js +166 -0
- package/server/dist/modules/execution/index.js +34 -1
- package/server/dist/modules/execution/runtime/budget-overview.js +76 -0
- package/server/dist/modules/execution/runtime/daily-budget-gate.js +86 -0
- package/server/dist/modules/execution/runtime/interactive-job-session.js +8 -0
- package/server/dist/modules/execution/runtime/launch-forecast.js +33 -0
- package/server/dist/modules/execution/runtime/queue-manager.js +54 -15
- package/server/dist/modules/execution/runtime/run-duration-stats.js +31 -13
- package/server/dist/modules/flow/adapters/bindings.js +1089 -0
- package/server/dist/modules/flow/adapters/http.js +147 -0
- package/server/dist/modules/flow/adapters/sqlite.js +121 -0
- package/server/dist/modules/flow/application.js +805 -0
- package/server/dist/modules/flow/domain.js +790 -0
- package/server/dist/modules/flow/index.js +34 -0
- package/server/dist/modules/flow/ports.js +2 -0
- package/server/dist/modules/inbox/adapters/http.js +21 -0
- package/server/dist/modules/inbox/adapters/project-source.js +233 -0
- package/server/dist/modules/inbox/application.js +28 -0
- package/server/dist/modules/inbox/domain.js +43 -0
- package/server/dist/modules/inbox/index.js +10 -0
- package/server/dist/modules/inbox/ports.js +2 -0
- package/server/dist/modules/loops/runtime/loop-definition-run.js +9 -0
- package/server/dist/modules/loops/runtime/loop-definition.js +5 -2
- package/server/dist/modules/loops/runtime/loop-executors.js +90 -9
- package/server/dist/modules/loops/runtime/loop-factory.js +30 -2
- package/server/dist/modules/loops/runtime/loop-flow-spec-recipe.js +166 -0
- package/server/dist/modules/loops/runtime/loop-graph.js +1 -1
- package/server/dist/modules/loops/runtime/loop-role-engines.js +4 -1
- package/server/dist/modules/loops/runtime/loop-run-manager.js +267 -10
- package/server/dist/modules/loops/runtime/loop-runs-store.js +21 -5
- package/server/dist/modules/loops/runtime/loop-templates.js +55 -12
- package/server/dist/modules/missions/runtime/agent-chat-manager.js +283 -20
- package/server/dist/modules/missions/runtime/agent-chat-router.js +96 -21
- package/server/dist/modules/missions/runtime/agent-failure-briefing.js +11 -3
- package/server/dist/modules/missions/runtime/agent-fence-promotion.js +9 -1
- package/server/dist/modules/missions/runtime/agent-flow-prompt.js +64 -0
- package/server/dist/modules/missions/runtime/agent-input-store.js +9 -4
- package/server/dist/modules/missions/runtime/agent-operator-prompt.js +100 -14
- package/server/dist/modules/missions/runtime/agent-session-store.js +88 -27
- package/server/dist/modules/missions/runtime/core-session-runner.js +89 -9
- package/server/dist/modules/missions/runtime/flow-turn-context.js +17 -0
- package/server/dist/modules/missions/runtime/mission-core-sessions.js +295 -55
- package/server/dist/modules/missions/runtime/mission-run-notify.js +2 -0
- package/server/dist/modules/missions/runtime/mission-session-projector.js +56 -19
- package/server/dist/modules/missions/runtime/mission-tool-policy.js +47 -0
- package/server/dist/modules/onboarding/adapters/http.js +78 -0
- package/server/dist/modules/onboarding/adapters/providers.js +41 -0
- package/server/dist/modules/onboarding/adapters/runtime.js +130 -0
- package/server/dist/modules/onboarding/application.js +133 -0
- package/server/dist/modules/onboarding/catalog.js +217 -0
- package/server/dist/modules/onboarding/domain.js +102 -0
- package/server/dist/modules/onboarding/index.js +20 -0
- package/server/dist/modules/onboarding/ports.js +2 -0
- package/server/dist/modules/project-rules/adapters/http.js +91 -0
- package/server/dist/modules/project-rules/domain.js +122 -0
- package/server/dist/modules/project-rules/runtime/rules-inventory-runs.js +97 -0
- package/server/dist/modules/project-rules/runtime/rules-store.js +109 -0
- package/server/dist/modules/project-settings/adapters/http.js +13 -0
- package/server/dist/modules/project-settings/adapters/sqlite.js +78 -8
- package/server/dist/modules/project-settings/domain.js +47 -1
- package/server/dist/modules/project-settings/index.js +7 -1
- package/server/dist/modules/recovery/adapters/sqlite.js +28 -0
- package/server/dist/modules/recovery/domain.js +162 -0
- package/server/dist/modules/recovery/index.js +16 -0
- package/server/dist/modules/specs/adapters/timeline-http.js +101 -0
- package/server/dist/modules/specs/domain/handoff-labels.js +371 -0
- package/server/dist/modules/specs/domain/handoff.js +260 -0
- package/server/dist/modules/specs/domain/non-goals.js +101 -0
- package/server/dist/modules/specs/domain/timeline.js +164 -0
- package/server/dist/modules/specs/domain/triage.js +320 -0
- package/server/dist/modules/specs/runtime/contract-refine-runner.js +3 -2
- package/server/dist/modules/specs/runtime/generated-spec-parser.js +75 -0
- package/server/dist/modules/specs/runtime/proposal-manager.js +4 -3
- package/server/dist/modules/specs/runtime/smash-runner.js +2 -1
- package/server/dist/modules/specs/runtime/spec-addenda.js +31 -0
- package/server/dist/modules/specs/runtime/spec-draft-parser.js +6 -1
- package/server/dist/modules/specs/runtime/spec-generation.js +431 -0
- package/server/dist/modules/specs/runtime/spec-handoff.js +103 -0
- package/server/dist/modules/specs/runtime/spec-history.js +376 -0
- package/server/dist/modules/specs/runtime/spec-launcher-manager.js +4 -3
- package/server/dist/modules/specs/runtime/spec-search.js +117 -0
- package/server/dist/modules/specs/runtime/ticket-store.js +47 -2
- package/server/dist/modules/specs/runtime/ticket-trash-service.js +62 -0
- package/server/dist/modules/specs/runtime/ticket-trash.js +193 -0
- package/server/dist/modules/specs/runtime/triage-runner.js +171 -0
- package/server/dist/modules/specs/runtime/triage.js +365 -0
- package/server/dist/modules/terminals/domain/app-urls.js +96 -0
- package/server/dist/modules/terminals/runtime/app-urls.js +77 -0
- package/server/dist/modules/terminals/runtime/background-process-service.js +25 -28
- package/server/dist/project-env.js +60 -0
- package/server/dist/project-git.js +65 -0
- package/server/dist/project-registry.js +264 -27
- package/server/dist/project-router-background-processes.js +27 -3
- package/server/dist/project-router-git.js +30 -0
- package/server/dist/project-router-helpers.js +5 -30
- package/server/dist/project-router-jobs.js +49 -1
- package/server/dist/project-router-loop-runs.js +72 -2
- package/server/dist/project-router-rules.js +54 -0
- package/server/dist/project-router-search.js +52 -0
- package/server/dist/project-router-settings.js +6 -0
- package/server/dist/project-router-setup.js +1 -1
- package/server/dist/project-router-spending.js +138 -0
- package/server/dist/project-router-tickets.js +246 -427
- package/server/dist/project-router.js +7 -0
- package/server/dist/providers/claude-adapter.js +25 -3
- package/server/dist/providers/codex-adapter.js +9 -1
- package/server/dist/providers/gemini-adapter.js +6 -1
- package/server/dist/providers/kimi-adapter.js +2 -0
- package/server/dist/providers/local-adapter.js +2 -0
- package/server/dist/providers/runtime.js +8 -0
- package/server/dist/schemas/agent-runtime.schema.json +3 -1
- package/server/dist/schemas/workflow-definition.schema.json +1 -0
- package/server/dist/setup-manager.js +19 -1
- package/server/dist/transient-children.js +25 -8
- package/server/dist/update-channel.js +21 -0
- package/server/dist/util/search-snippet.js +74 -0
- package/server/dist/worktree-manager.js +19 -8
- package/client/dist/assets/ActivityFeedPage-Dtp7EyHc.js +0 -1
- package/client/dist/assets/AgentBrowserCapture-CLqlEFw8.js +0 -1
- package/client/dist/assets/AgentModeAnalyticsPane-B8_hM3Tw.js +0 -2
- package/client/dist/assets/AgentModeCodePane-CNF8ZNjE.js +0 -2
- package/client/dist/assets/AgentModeJobsPane-CJpJbO9m.js +0 -1
- package/client/dist/assets/AgentsPage-BC8XSR79.js +0 -120
- package/client/dist/assets/AnalyticsPage-Cdv4jLtW.js +0 -1
- package/client/dist/assets/BarChart-BDMqVFJy.js +0 -55
- package/client/dist/assets/CodePage-DI1kegAr.js +0 -3
- package/client/dist/assets/DesktopAnalyticsPage-Bdp8E8U6.js +0 -1
- package/client/dist/assets/DocsDialog-Bm4RS7FX.js +0 -11
- package/client/dist/assets/DocsPage-DihYcU8r.js +0 -11
- package/client/dist/assets/ExportDropdown-Bb1lHx3r.js +0 -1
- package/client/dist/assets/IntegrationsPage-EAipiDWm.js +0 -1
- package/client/dist/assets/InteractiveJobComposer-BO6ASN-2.js +0 -19
- package/client/dist/assets/JobDetailModal-CuPYq7tP.js +0 -1
- package/client/dist/assets/JobDetailPage-BusMjJi9.js +0 -1
- package/client/dist/assets/JobsPage-C0QbsF2d.js +0 -1
- package/client/dist/assets/LoopBuilderPage-B7TlU4iS.js +0 -1
- package/client/dist/assets/LoopPreviewModal-BRWtXOD2.js +0 -1
- package/client/dist/assets/LoopsPage-C4q1DmCE.js +0 -2
- package/client/dist/assets/MinimizedChatsContext-DHfigjHS.js +0 -1
- package/client/dist/assets/PluginsPage-Z1JHSMdR.js +0 -2
- package/client/dist/assets/ProjectSettingsDialog-BUNj0tvN.js +0 -1
- package/client/dist/assets/RepositoryDeliveries-B4ybHOyB.js +0 -5
- package/client/dist/assets/ReviewPacketPage-hwfPNjyy.js +0 -4
- package/client/dist/assets/TemplatePreviewModal-V7FpMWuw.js +0 -1
- package/client/dist/assets/TicketDetailModalContext-Dkwo2cDs.js +0 -16
- package/client/dist/assets/Trans-BbFxRFtR.js +0 -1
- package/client/dist/assets/activity-B-rp4h_v.js +0 -1
- package/client/dist/assets/activity-C6kJpm9q.js +0 -1
- package/client/dist/assets/activity-CGx4kb_j.js +0 -1
- package/client/dist/assets/activity-CnoX2bH7.js +0 -1
- package/client/dist/assets/activity-DAyekdlt.js +0 -1
- package/client/dist/assets/activity-DCxtpT7j.js +0 -1
- package/client/dist/assets/activity-DiyjsgQV.js +0 -1
- package/client/dist/assets/activity-JzwRaWPD.js +0 -1
- package/client/dist/assets/addspec-BOvgmcgk.js +0 -1
- package/client/dist/assets/addspec-Clmyfn_R.js +0 -1
- package/client/dist/assets/addspec-CsNaBpHp.js +0 -1
- package/client/dist/assets/addspec-D2tvWmmV.js +0 -1
- package/client/dist/assets/addspec-D3nFwvD0.js +0 -1
- package/client/dist/assets/addspec-DVLEhK3w.js +0 -1
- package/client/dist/assets/addspec-DXbK-tb0.js +0 -1
- package/client/dist/assets/addspec-OHG8DFEn.js +0 -1
- package/client/dist/assets/agent-5bSixVzz.js +0 -1
- package/client/dist/assets/agent-BR4EHfhq.js +0 -1
- package/client/dist/assets/agent-C0IKkJP8.js +0 -1
- package/client/dist/assets/agent-C7li9ayC.js +0 -1
- package/client/dist/assets/agent-D0dRmEen.js +0 -1
- package/client/dist/assets/agent-DZVGHm7H.js +0 -1
- package/client/dist/assets/agent-Dip4h2YE.js +0 -1
- package/client/dist/assets/agent-Pp-P-n1p.js +0 -1
- package/client/dist/assets/agentRuntime-BxF81z52.js +0 -1
- package/client/dist/assets/agentRuntime-BxYS5V7u.js +0 -1
- package/client/dist/assets/agentRuntime-Dc9HG3BA.js +0 -1
- package/client/dist/assets/agents-B6ZsnARo.js +0 -1
- package/client/dist/assets/agents-BORdhe0K.js +0 -1
- package/client/dist/assets/agents-C6aq9Oqs.js +0 -1
- package/client/dist/assets/agents-Cbsc4bcX.js +0 -1
- package/client/dist/assets/agents-D0uYR6hq.js +0 -1
- package/client/dist/assets/agents-Doe1sHY5.js +0 -1
- package/client/dist/assets/agents-DyNi_I9m.js +0 -1
- package/client/dist/assets/agents-StKxiTg0.js +0 -1
- package/client/dist/assets/agentstudio-7cYCXn-L.js +0 -1
- package/client/dist/assets/agentstudio-BHWQh8G3.js +0 -1
- package/client/dist/assets/agentstudio-BjnWHyRs.js +0 -1
- package/client/dist/assets/agentstudio-BkV8vcK4.js +0 -1
- package/client/dist/assets/agentstudio-BzugqB_N.js +0 -1
- package/client/dist/assets/agentstudio-CWbp7KvH.js +0 -1
- package/client/dist/assets/agentstudio-DG6plf5o.js +0 -1
- package/client/dist/assets/agentstudio-DkZVF-Cc.js +0 -1
- package/client/dist/assets/analytics-B1DIQd4m.js +0 -1
- package/client/dist/assets/analytics-BAIZ9vE_.js +0 -1
- package/client/dist/assets/analytics-BTqgmgBd.js +0 -1
- package/client/dist/assets/analytics-BWynXPEm.js +0 -1
- package/client/dist/assets/analytics-DGcUsQ44.js +0 -1
- package/client/dist/assets/analytics-GnSnpJ4W.js +0 -1
- package/client/dist/assets/analytics-TWgYaoO0.js +0 -1
- package/client/dist/assets/analytics-kJy6Tuko.js +0 -1
- package/client/dist/assets/atom-one-dark-qiGhVQxg.js +0 -1
- package/client/dist/assets/builder-B9gorTnT.js +0 -1
- package/client/dist/assets/builder-Bvw5s3Mi.js +0 -1
- package/client/dist/assets/builder-CL5l4dU3.js +0 -1
- package/client/dist/assets/builder-CVDTVrQX.js +0 -1
- package/client/dist/assets/builder-CpS9liE9.js +0 -1
- package/client/dist/assets/builder-DNctIL9Q.js +0 -1
- package/client/dist/assets/builder-De2NxX6o.js +0 -1
- package/client/dist/assets/builder-DeYT7Y-m.js +0 -1
- package/client/dist/assets/button-4FS1ZDTp.js +0 -1
- package/client/dist/assets/chat-D_I7nU5K.js +0 -1
- package/client/dist/assets/chevron-up-6EFqEHBj.js +0 -1
- package/client/dist/assets/chunk-OB3PAWPO-B1EMk45A.js +0 -3
- package/client/dist/assets/clsx-CjueKrWZ.js +0 -1
- package/client/dist/assets/code-B37GRg9C.js +0 -1
- package/client/dist/assets/code-BBOEZbf9.js +0 -1
- package/client/dist/assets/code-BRm-jcyx.js +0 -1
- package/client/dist/assets/code-CF7w62CR.js +0 -1
- package/client/dist/assets/code-CLuvJt2r.js +0 -1
- package/client/dist/assets/code-D0RCm59f.js +0 -1
- package/client/dist/assets/code-DaZ-ZwCT.js +0 -1
- package/client/dist/assets/code-iIHkGaCL.js +0 -1
- package/client/dist/assets/commands-0XjAftla.js +0 -1
- package/client/dist/assets/commands-BAWSYHjQ.js +0 -1
- package/client/dist/assets/commands-BBwowgiE.js +0 -1
- package/client/dist/assets/commands-BacjIZLN.js +0 -1
- package/client/dist/assets/commands-Bs62IAZ3.js +0 -1
- package/client/dist/assets/commands-CLPdh-Hh.js +0 -1
- package/client/dist/assets/commands-DlbFzgrp.js +0 -1
- package/client/dist/assets/commands-LjPSsi5F.js +0 -1
- package/client/dist/assets/common-Bdi0qN4S.js +0 -1
- package/client/dist/assets/common-Bhb9zN1P.js +0 -1
- package/client/dist/assets/common-BykKlZg1.js +0 -1
- package/client/dist/assets/common-CvnNNSJA.js +0 -1
- package/client/dist/assets/common-D5zk_mqq.js +0 -1
- package/client/dist/assets/common-DQNO_al5.js +0 -1
- package/client/dist/assets/common-Dax30Vmp.js +0 -1
- package/client/dist/assets/common-DkllpVSb.js +0 -1
- package/client/dist/assets/core-B3mKBIh5.js +0 -1
- package/client/dist/assets/dashboard-B1ndRHuC.js +0 -1
- package/client/dist/assets/dashboard-BX7KXiqA.js +0 -1
- package/client/dist/assets/dashboard-B_BSNxcN.js +0 -1
- package/client/dist/assets/dashboard-CCeFN7-V.js +0 -1
- package/client/dist/assets/dashboard-CRl0WtFJ.js +0 -1
- package/client/dist/assets/dashboard-XGdQ5mjw.js +0 -1
- package/client/dist/assets/dashboard-_oltA6Jd.js +0 -1
- package/client/dist/assets/dashboard-bAuf5KVk.js +0 -1
- package/client/dist/assets/dialog-DtdR05v1.js +0 -45
- package/client/dist/assets/dist-js-CJ_2XX1Y.js +0 -1
- package/client/dist/assets/event-Bt7f3wXe.js +0 -1
- package/client/dist/assets/explore-BG99VGpL.js +0 -1
- package/client/dist/assets/explore-C0TjprJW.js +0 -1
- package/client/dist/assets/explore-C2dgEo7q.js +0 -1
- package/client/dist/assets/explore-C8NDHbob.js +0 -1
- package/client/dist/assets/explore-CWWgzQGR.js +0 -1
- package/client/dist/assets/explore-CcQXpdtS.js +0 -1
- package/client/dist/assets/explore-DgBACn39.js +0 -1
- package/client/dist/assets/explore-DsXAgnmJ.js +0 -1
- package/client/dist/assets/file-text-C0blZHLh.js +0 -1
- package/client/dist/assets/formatDistanceToNow-NjPHBLfB.js +0 -1
- package/client/dist/assets/getTimezoneOffsetInMilliseconds-vJ7qUoqN.js +0 -1
- package/client/dist/assets/git-branch-yf6LE1Bw.js +0 -1
- package/client/dist/assets/index-BgbCbIua.css +0 -2
- package/client/dist/assets/index-Ce4yZtKf.js +0 -83
- package/client/dist/assets/integrations-BkpRUbvp.js +0 -1
- package/client/dist/assets/integrations-Bo8qbJf4.js +0 -1
- package/client/dist/assets/integrations-CmSrKzZb.js +0 -1
- package/client/dist/assets/integrations-DGtq26Rr.js +0 -1
- package/client/dist/assets/integrations-De38GFnQ.js +0 -1
- package/client/dist/assets/integrations-Dw6zdtb-.js +0 -1
- package/client/dist/assets/integrations-Dwl9KQp0.js +0 -1
- package/client/dist/assets/integrations-Refg_d2I.js +0 -1
- package/client/dist/assets/jira-B6OYw4CJ.js +0 -1
- package/client/dist/assets/jira-BTF6RaOe.js +0 -1
- package/client/dist/assets/jira-CEetIB2q.js +0 -1
- package/client/dist/assets/jira-CIzsZLw5.js +0 -1
- package/client/dist/assets/jira-Daw9tmpI.js +0 -1
- package/client/dist/assets/jira-FXr7u2lh.js +0 -1
- package/client/dist/assets/jira-LaNQn7yl.js +0 -1
- package/client/dist/assets/jira-api-Cabj-H0J.js +0 -1
- package/client/dist/assets/job-time-BCL7wee9.js +0 -1
- package/client/dist/assets/jobs-ARwD85B9.js +0 -1
- package/client/dist/assets/jobs-BMF1w4WT.js +0 -1
- package/client/dist/assets/jobs-CBfzGLwm.js +0 -1
- package/client/dist/assets/jobs-CPjiluBY.js +0 -1
- package/client/dist/assets/jobs-CQQd58pY.js +0 -1
- package/client/dist/assets/jobs-De3EqaO0.js +0 -1
- package/client/dist/assets/jobs-Du9-Ei9a.js +0 -1
- package/client/dist/assets/jobs-qMHbnxwC.js +0 -1
- package/client/dist/assets/layers-BCLTgHXO.js +0 -1
- package/client/dist/assets/loader-circle-BqV9xYGf.js +0 -1
- package/client/dist/assets/loop-layout-CyXj9223.js +0 -7
- package/client/dist/assets/loops-B2PhQLKR.js +0 -1
- package/client/dist/assets/loops-BqbF46st.js +0 -1
- package/client/dist/assets/loops-CINnHbfI.js +0 -1
- package/client/dist/assets/loops-D-3XhH04.js +0 -1
- package/client/dist/assets/loops-DKkEEjZ_.js +0 -1
- package/client/dist/assets/loops-DzWR5-v6.js +0 -1
- package/client/dist/assets/loops-WyWDkhok.js +0 -1
- package/client/dist/assets/loops-scD5fIBf.js +0 -1
- package/client/dist/assets/mcp-6rMoZfEO.js +0 -1
- package/client/dist/assets/mcp-BD8sL5mP.js +0 -1
- package/client/dist/assets/mcp-BkcA3I5s.js +0 -1
- package/client/dist/assets/mcp-CCpSelOh.js +0 -1
- package/client/dist/assets/mcp-CUAN6ORK.js +0 -1
- package/client/dist/assets/mcp-CqbRxRTE.js +0 -1
- package/client/dist/assets/mcp-DP2YfVhO.js +0 -1
- package/client/dist/assets/mcp-DUVQamDz.js +0 -1
- package/client/dist/assets/narration-BEKMVxGm.js +0 -1
- package/client/dist/assets/narration-CjLwGKap.js +0 -1
- package/client/dist/assets/narration-DANWuGsW.js +0 -1
- package/client/dist/assets/narration-DGeEDWiT.js +0 -1
- package/client/dist/assets/narration-DJgpGwIP.js +0 -1
- package/client/dist/assets/narration-DbHnz0qV.js +0 -1
- package/client/dist/assets/narration-bZSsTZG8.js +0 -1
- package/client/dist/assets/narration-i6aKJKEc.js +0 -1
- package/client/dist/assets/nav--u7iPYlS.js +0 -1
- package/client/dist/assets/nav-C5Jgfaby.js +0 -1
- package/client/dist/assets/nav-CAna_Wpt.js +0 -1
- package/client/dist/assets/nav-CCLqeyHo.js +0 -1
- package/client/dist/assets/nav-Cf3c90Jk.js +0 -1
- package/client/dist/assets/nav-DMYQaQjR.js +0 -1
- package/client/dist/assets/nav-Df_PkZ9F.js +0 -1
- package/client/dist/assets/nav-VyNGBJwj.js +0 -1
- package/client/dist/assets/packet-8nn9RsU7.js +0 -1
- package/client/dist/assets/packet-B0H15elv.js +0 -1
- package/client/dist/assets/packet-BQvBgrwh.js +0 -1
- package/client/dist/assets/packet-BR7mO0-a.js +0 -1
- package/client/dist/assets/packet-BgcQ6q_K.js +0 -1
- package/client/dist/assets/packet-D2s92Jnn.js +0 -1
- package/client/dist/assets/packet-YbtcD1HS.js +0 -1
- package/client/dist/assets/packet-c0Qj_9eX.js +0 -1
- package/client/dist/assets/project-repositories-Cnnuj9Ia.js +0 -1
- package/client/dist/assets/rotate-ccw-DalJAQQX.js +0 -1
- package/client/dist/assets/settings-B1NV8Ow9.js +0 -1
- package/client/dist/assets/settings-BQ8XFZeE.js +0 -1
- package/client/dist/assets/settings-BRkxfBbO.js +0 -1
- package/client/dist/assets/settings-C_CcU1dP.js +0 -1
- package/client/dist/assets/settings-Cto9n0eL.js +0 -1
- package/client/dist/assets/settings-Pyw8uYtL.js +0 -1
- package/client/dist/assets/settings-b3HVCNNd.js +0 -1
- package/client/dist/assets/settings-hdive4u6.js +0 -1
- package/client/dist/assets/setup-Be485n2u.js +0 -1
- package/client/dist/assets/setup-CKGUxKr-.js +0 -1
- package/client/dist/assets/setup-Ck1Uwd7_.js +0 -1
- package/client/dist/assets/setup-Cm774a6v.js +0 -1
- package/client/dist/assets/setup-DIqMQpxt.js +0 -1
- package/client/dist/assets/setup-DfCsoNFL.js +0 -1
- package/client/dist/assets/setup-DkeE8mP0.js +0 -1
- package/client/dist/assets/setup-xVntVaz1.js +0 -1
- package/client/dist/assets/specs-Bqvtz2kz.js +0 -1
- package/client/dist/assets/specs-CKes-kz6.js +0 -1
- package/client/dist/assets/specs-CfXxPDNB.js +0 -1
- package/client/dist/assets/specs-CyF9HuTI.js +0 -1
- package/client/dist/assets/specs-DMj035Mt.js +0 -1
- package/client/dist/assets/specs-DfIdoU5L.js +0 -1
- package/client/dist/assets/specs-j5pGLQeU.js +0 -1
- package/client/dist/assets/specs-xW5pkkB7.js +0 -1
- package/client/dist/assets/spending-CQnrWiR3.js +0 -1
- package/client/dist/assets/square-D0JTbRSR.js +0 -1
- package/client/dist/assets/tauri-shell-DE6LfGPw.js +0 -2
- package/client/dist/assets/terminal-BAzpHtpY.js +0 -1
- package/client/dist/assets/terminal-C7dHeR3x.js +0 -1
- package/client/dist/assets/terminal-CMla5Qsz.js +0 -1
- package/client/dist/assets/terminal-CdNXH-n9.js +0 -1
- package/client/dist/assets/terminal-Cw5bZsmV.js +0 -1
- package/client/dist/assets/terminal-DFUP4eNv.js +0 -1
- package/client/dist/assets/terminal-DGqljeK_.js +0 -1
- package/client/dist/assets/terminal-cU70NodO.js +0 -1
- package/client/dist/assets/tickets--tiSOCcn.js +0 -1
- package/client/dist/assets/tickets-BUJ3DMWU.js +0 -1
- package/client/dist/assets/tickets-C1WNPODq.js +0 -1
- package/client/dist/assets/tickets-CDjhWmiE.js +0 -1
- package/client/dist/assets/tickets-CLgPC3uO.js +0 -1
- package/client/dist/assets/tickets-D41ZMQpf.js +0 -1
- package/client/dist/assets/tickets-DEaQC06P.js +0 -1
- package/client/dist/assets/tickets-kcMzbLCp.js +0 -1
- package/client/dist/assets/trash-D8zYUmTg.js +0 -1
- package/client/dist/assets/useDesktop-BjLT0_EE.js +0 -1
- package/client/dist/assets/useRuntimeRuns-C97qEqMg.js +0 -1
- package/client/dist/assets/useSharedWebSocket-Bj4LMp7b.js +0 -2
- package/client/dist/assets/utils-BC4DHlz2.js +0 -1
- package/docs/guide/en/getting-started/4-the-dashboard-tour.md +0 -48
- package/docs/guide/es/getting-started/4-the-dashboard-tour.md +0 -48
- package/server/dist/mobile/mobile-preview-channel.js +0 -179
- package/server/dist/mobile/mobile-preview.js +0 -366
- package/server/dist/modules/browser/domain/preview-origins.js +0 -117
- package/server/dist/modules/browser/runtime/preview-targets.js +0 -80
- /package/client/dist/assets/{atom-one-dark-B-oHczHB.css → DocView-B-oHczHB.css} +0 -0
- /package/docs/guide/de/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
- /package/docs/guide/en/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
- /package/docs/guide/es/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
- /package/docs/guide/fr/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
- /package/docs/guide/it/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
- /package/docs/guide/ja/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
- /package/docs/guide/pt/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
- /package/docs/guide/zh/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
|
@@ -66,16 +66,18 @@ const legacy_launch_telemetry_1 = require("../../loops/runtime/legacy-launch-tel
|
|
|
66
66
|
*/
|
|
67
67
|
const path = __importStar(require("path"));
|
|
68
68
|
const fs = __importStar(require("fs"));
|
|
69
|
-
const artifact_registry_1 = require("../../../artifact-registry");
|
|
70
69
|
const ids_1 = require("../../../ids");
|
|
71
70
|
const loop_constants_1 = require("../../loops/runtime/loop-constants");
|
|
72
71
|
const worktree_manager_1 = require("../../../worktree-manager");
|
|
73
72
|
const agent_runtime_paths_1 = require("../../agent-runtime/runtime/agent-runtime-paths");
|
|
74
73
|
const rail_worktrees_store_1 = require("./rail-worktrees-store");
|
|
74
|
+
const flow_worktree_handoff_1 = require("./flow-worktree-handoff");
|
|
75
75
|
const pr_naming_1 = require("./pr-naming");
|
|
76
|
-
const
|
|
76
|
+
const isolated_worktree_1 = require("./isolated-worktree");
|
|
77
77
|
const db_1 = require("../../../db");
|
|
78
|
+
const flow_review_outcome_1 = require("./flow-review-outcome");
|
|
78
79
|
const delivery_evidence_1 = require("./delivery-evidence");
|
|
80
|
+
const phase3_harvest_1 = require("./phase3-harvest");
|
|
79
81
|
const isolated_settlement_store_1 = require("./isolated-settlement-store");
|
|
80
82
|
const loop_runs_store_1 = require("../../loops/runtime/loop-runs-store");
|
|
81
83
|
const loop_definition_recovery_1 = require("../../loops/runtime/loop-definition-recovery");
|
|
@@ -97,10 +99,7 @@ const revision_seed_1 = require("../../execution/runtime/revision-seed");
|
|
|
97
99
|
const pr_follow_up_1 = require("./pr-follow-up");
|
|
98
100
|
const spec_addenda_1 = require("../../specs/runtime/spec-addenda");
|
|
99
101
|
const workspace_resolution_1 = require("../../../workspace-resolution");
|
|
100
|
-
const feature_flags_1 = require("../../../feature-flags");
|
|
101
|
-
const file_provenance_1 = require("../../code/runtime/file-provenance");
|
|
102
102
|
const file_story_1 = require("../../code/runtime/file-story");
|
|
103
|
-
const providers_1 = require("../../../providers");
|
|
104
103
|
const pr_publisher_1 = require("./pr-publisher");
|
|
105
104
|
const active_pr_continuation_1 = require("./active-pr-continuation");
|
|
106
105
|
const pr_lifecycle_1 = require("./pr-lifecycle");
|
|
@@ -117,32 +116,6 @@ class PrContinuationIsolationError extends Error {
|
|
|
117
116
|
}
|
|
118
117
|
}
|
|
119
118
|
exports.PrContinuationIsolationError = PrContinuationIsolationError;
|
|
120
|
-
/**
|
|
121
|
-
* Ticket data for the conventional branch name (pr-naming): title/labels from
|
|
122
|
-
* the ticket-spec reader, the Jira key resolved with the authoritative
|
|
123
|
-
* `jira_links` row prevailing over the ticket's own `jira_key` field (JIRA
|
|
124
|
-
* ALWAYS PREVAILS). Fully failure-tolerant — a missing store/link degrades to
|
|
125
|
-
* the bare local ticket id.
|
|
126
|
-
*/
|
|
127
|
-
function unitNamingInput(ctx, ticketId) {
|
|
128
|
-
let spec;
|
|
129
|
-
try {
|
|
130
|
-
spec = ctx.getTicketSpec(ticketId);
|
|
131
|
-
}
|
|
132
|
-
catch {
|
|
133
|
-
/* tolerated */
|
|
134
|
-
}
|
|
135
|
-
let jiraKey = spec?.jira_key ?? null;
|
|
136
|
-
try {
|
|
137
|
-
const link = (0, jira_db_1.getLinkByLocalId)(ctx.db, ticketId);
|
|
138
|
-
if (link && !link.tombstoned && link.jiraKey)
|
|
139
|
-
jiraKey = link.jiraKey;
|
|
140
|
-
}
|
|
141
|
-
catch {
|
|
142
|
-
/* tolerated */
|
|
143
|
-
}
|
|
144
|
-
return { ticketId, title: spec?.title ?? null, labels: spec?.labels ?? null, jiraKey };
|
|
145
|
-
}
|
|
146
119
|
/**
|
|
147
120
|
* Assemble the revision briefing from the generation being revised. Reads only
|
|
148
121
|
* durable rows, tolerates every one of them being absent (a legacy row carries
|
|
@@ -211,7 +184,7 @@ function buildSpecSnapshot(ctx, ticketIds) {
|
|
|
211
184
|
* key. Keep the local id as a fallback/cross-reference for Specrails.
|
|
212
185
|
*/
|
|
213
186
|
function worktreeCommitMessage(ctx, ticketId, runId, partial = false) {
|
|
214
|
-
const input =
|
|
187
|
+
const input = (0, isolated_worktree_1.ticketNamingInput)(ctx, ticketId);
|
|
215
188
|
const ref = (0, pr_naming_1.ticketRef)(input);
|
|
216
189
|
const subjectRef = ref === String(ticketId) ? `ticket-${ticketId}` : `${ref} ticket-${ticketId}`;
|
|
217
190
|
return `specrails: ${subjectRef}${partial ? ' partial' : ''} (run ${runId})`;
|
|
@@ -295,16 +268,28 @@ async function verifyContinuationWorktree(git, repoDir, handle, target, expected
|
|
|
295
268
|
}
|
|
296
269
|
return headSha;
|
|
297
270
|
}
|
|
298
|
-
|
|
271
|
+
function canonicalPath(value) {
|
|
299
272
|
try {
|
|
300
|
-
|
|
301
|
-
const sha = result.code === 0 ? result.stdout.trim() : '';
|
|
302
|
-
return COMMIT_SHA_RE.test(sha) ? sha : null;
|
|
273
|
+
return fs.realpathSync.native(value);
|
|
303
274
|
}
|
|
304
275
|
catch {
|
|
305
|
-
return
|
|
276
|
+
return path.resolve(value);
|
|
306
277
|
}
|
|
307
278
|
}
|
|
279
|
+
/** The adopted mount must be the Flow's own path, on its branch, at its frozen HEAD. */
|
|
280
|
+
async function verifyFlowWorktree(git, mounted, required) {
|
|
281
|
+
if (canonicalPath(mounted.worktreePath) !== canonicalPath(required.worktreePath)) {
|
|
282
|
+
throw new flow_worktree_handoff_1.FlowWorktreeMismatchError(`The Flow worktree is not mounted at ${required.worktreePath}`);
|
|
283
|
+
}
|
|
284
|
+
if (mounted.branch !== required.branch) {
|
|
285
|
+
throw new flow_worktree_handoff_1.FlowWorktreeMismatchError(`The Flow worktree is on ${mounted.branch}, not ${required.branch}`);
|
|
286
|
+
}
|
|
287
|
+
const head = await (0, isolated_worktree_1.readHeadSha)(git, mounted.worktreePath);
|
|
288
|
+
if (!head || head !== required.headSha) {
|
|
289
|
+
throw new flow_worktree_handoff_1.FlowWorktreeMismatchError(`The Flow worktree HEAD ${head ?? 'unknown'} does not match the frozen ${required.headSha}`);
|
|
290
|
+
}
|
|
291
|
+
return head;
|
|
292
|
+
}
|
|
308
293
|
async function branchHasDelta(git, cwd, baseRef) {
|
|
309
294
|
try {
|
|
310
295
|
const result = await git.run(['diff', '--quiet', `${baseRef}...HEAD`, '--'], cwd);
|
|
@@ -419,7 +404,7 @@ function createIsolatedRunSettlement(ports) {
|
|
|
419
404
|
if (isAborted?.()) {
|
|
420
405
|
// The coordinator never started. Do not commit incidental edits or
|
|
421
406
|
// release a mount borrowed from a previous delivery while rolling back.
|
|
422
|
-
const finalSha = await readHeadSha(git, a.handle.worktreePath);
|
|
407
|
+
const finalSha = await (0, isolated_worktree_1.readHeadSha)(git, a.handle.worktreePath);
|
|
423
408
|
if (a.worktreeOwnership !== 'created')
|
|
424
409
|
markWorktree(a, 'needs-review');
|
|
425
410
|
return {
|
|
@@ -445,7 +430,7 @@ function createIsolatedRunSettlement(ports) {
|
|
|
445
430
|
markWorktree(a, 'needs-review');
|
|
446
431
|
return {
|
|
447
432
|
run: a, implementationOutcome, deliveryOutcome: 'blocked',
|
|
448
|
-
initialSha: a.initialSha, finalSha: await readHeadSha(git, a.handle.worktreePath),
|
|
433
|
+
initialSha: a.initialSha, finalSha: await (0, isolated_worktree_1.readHeadSha)(git, a.handle.worktreePath),
|
|
449
434
|
failureCode: 'settlement_interrupted',
|
|
450
435
|
failureDetail: 'Programmatic workflow stopped before delivery; partial changes stay in its original worktree. The run log names the failing step. A resumable step offers Resume on the job page; a raised loop limit (such as a step\'s Maximum turns) needs a new launch.',
|
|
451
436
|
safeToRelease: false,
|
|
@@ -487,7 +472,7 @@ function createIsolatedRunSettlement(ports) {
|
|
|
487
472
|
implementationOutcome,
|
|
488
473
|
deliveryOutcome: 'blocked',
|
|
489
474
|
initialSha: a.initialSha,
|
|
490
|
-
finalSha: await readHeadSha(git, a.handle.worktreePath),
|
|
475
|
+
finalSha: await (0, isolated_worktree_1.readHeadSha)(git, a.handle.worktreePath),
|
|
491
476
|
failureCode: 'commit_failed',
|
|
492
477
|
failureDetail: detail,
|
|
493
478
|
safeToRelease: false,
|
|
@@ -509,7 +494,7 @@ function createIsolatedRunSettlement(ports) {
|
|
|
509
494
|
}
|
|
510
495
|
}
|
|
511
496
|
else {
|
|
512
|
-
finalSha = await readHeadSha(git, a.handle.worktreePath);
|
|
497
|
+
finalSha = await (0, isolated_worktree_1.readHeadSha)(git, a.handle.worktreePath);
|
|
513
498
|
}
|
|
514
499
|
const changed = commit.committed || Boolean(a.initialSha && finalSha && a.initialSha !== finalSha);
|
|
515
500
|
// A successful commit without a provable object is not retryable or safe to
|
|
@@ -569,7 +554,8 @@ function createIsolatedRunSettlement(ports) {
|
|
|
569
554
|
// A resumed non-PR branch may already contain reviewable commits from an
|
|
570
555
|
// earlier attempt, even when this iteration itself did not add one.
|
|
571
556
|
let resumedBranchDelta = null;
|
|
572
|
-
|
|
557
|
+
// An adopted Flow branch already carries the Flow's commits ahead of base.
|
|
558
|
+
if (!changed && a.continuationTarget === null && (a.branchOwnership === 'preexisting' || a.branchOwnership === 'adopted')) {
|
|
573
559
|
resumedBranchDelta = await branchHasDelta(git, a.handle.worktreePath, a.baseRef);
|
|
574
560
|
if (resumedBranchDelta === null) {
|
|
575
561
|
const detail = `cannot prove whether resumed branch ${a.handle.branch} has commits ahead of ${a.baseRef}`;
|
|
@@ -625,13 +611,11 @@ async function launchIsolatedRail(input, io = {}) {
|
|
|
625
611
|
}
|
|
626
612
|
const git = io.git ?? worktree_manager_1.defaultGitRunner;
|
|
627
613
|
const exec = io.exec ?? pr_publisher_1.defaultExec;
|
|
628
|
-
const create = io.create ?? worktree_manager_1.createWorktree;
|
|
629
614
|
const remove = io.remove ?? worktree_manager_1.removeWorktree;
|
|
630
|
-
const overlay = io.overlay ?? worktree_overlay_1.applyWorktreeOverlay;
|
|
631
615
|
const resolveExecution = io.resolveExecution ?? workspace_resolution_1.resolveProjectExecution;
|
|
632
616
|
const baseRepo = ctx.project.path;
|
|
633
617
|
const slug = ctx.project.slug;
|
|
634
|
-
const worktreesRoot =
|
|
618
|
+
const worktreesRoot = (0, isolated_worktree_1.isolatedWorktreesRoot)(slug, input.repositoryExecution?.repositoryId);
|
|
635
619
|
// A revision run is seeded with a full briefing (the instruction PLUS the
|
|
636
620
|
// frozen spec, the branch that carries the work and what the previous run
|
|
637
621
|
// actually reported) rather than the bare sentence — the run starts a FRESH
|
|
@@ -708,16 +692,25 @@ async function launchIsolatedRail(input, io = {}) {
|
|
|
708
692
|
if (!row?.origin_conversation_id)
|
|
709
693
|
return;
|
|
710
694
|
const snapshot = (0, rail_pr_store_1.toPrDeliverySnapshot)(row);
|
|
711
|
-
const envelope = (0, rail_pr_store_1.toPrDecisionCardEnvelope)(ctx.project.id, snapshot);
|
|
712
695
|
const primaryRunId = runId ?? snapshot.runIds[0] ?? deliveryId;
|
|
696
|
+
// A Flow → Spec run that failed outright goes back to its Flow on its own
|
|
697
|
+
// (flow module, `rail.pr_state` observer); the Flow's return card and
|
|
698
|
+
// automatic turn carry the failure, so the mission gets only the card
|
|
699
|
+
// update — no second trace row, no second briefing turn.
|
|
700
|
+
const flowCrash = row.loop_id === flow_review_outcome_1.FLOW_SPEC_DELIVERY_LOOP_ID && failure.code === 'implementation_failed';
|
|
713
701
|
void (async () => {
|
|
714
702
|
const summary = runId ? await (0, agent_runtime_controls_router_1.runtimeRunSummary)(ctx, runId).catch(() => null) : null;
|
|
703
|
+
// Re-read after the await: the delivery may have moved on meanwhile
|
|
704
|
+
// (Back to Flow closes it) and the card must never regress to the old decision.
|
|
705
|
+
const current = (0, rail_pr_store_1.getPrDelivery)(ctx.db, deliveryId) ?? row;
|
|
706
|
+
const envelope = (0, rail_pr_store_1.toPrDecisionCardEnvelope)(ctx.project.id, (0, rail_pr_store_1.toPrDeliverySnapshot)(current));
|
|
715
707
|
await (0, mission_run_notify_1.notifyMissionRunFailure)({
|
|
716
708
|
originConversationId: row.origin_conversation_id,
|
|
717
709
|
projectId: ctx.project.id, runId: primaryRunId, railIndex, ticketIds: [...ticketIds],
|
|
718
710
|
railName: getRailName(ctx, railIndex),
|
|
719
711
|
failure, envelope, summary, hasDelivery: true, prDeliveryId: deliveryId,
|
|
720
712
|
tickets: ticketIds.map((id) => ({ id, title: ctx.getTicketSpec(id)?.title ?? null })),
|
|
713
|
+
...(flowCrash ? { cardOnly: true } : {}),
|
|
721
714
|
});
|
|
722
715
|
})().catch((err) => console.error('[rail-isolated] mission failure notify failed:', err));
|
|
723
716
|
};
|
|
@@ -753,36 +746,11 @@ async function launchIsolatedRail(input, io = {}) {
|
|
|
753
746
|
let units = input.repositoryExecution && ticketIds.length === 0 ? [{ ticketId: 0, ticketIds: [] }] : scope === 'all'
|
|
754
747
|
? [{ ticketId: ticketIds[0], ticketIds: [...ticketIds] }]
|
|
755
748
|
: ticketIds.map((id) => ({ ticketId: id, ticketIds: [id] }));
|
|
756
|
-
// Effective artifact root for the per-worktree overlay
|
|
757
|
-
//
|
|
758
|
-
//
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
// overlay their repo's own untracked on-disk entries instead. Resolved ONCE
|
|
762
|
-
// per launch; a resolution failure degrades to the legacy (repo) source.
|
|
763
|
-
let overlaySourceRoot = baseRepo;
|
|
764
|
-
let overlayFallbackRoots;
|
|
765
|
-
try {
|
|
766
|
-
const exec = resolveExecution({ slug, path: baseRepo });
|
|
767
|
-
if (exec.relocated && exec.workspaceDir) {
|
|
768
|
-
overlaySourceRoot = exec.workspaceDir;
|
|
769
|
-
// The repo as FALLBACK root: repo-resident untracked carve-outs
|
|
770
|
-
// (OpenSpec's `/opsx:*` commands, `openspec-*` skills, user extras)
|
|
771
|
-
// are absent from both the checkout (untracked) and the workspace
|
|
772
|
-
// (the framework ships only `specrails/`), so without this the claude
|
|
773
|
-
// CLI reports `Unknown command: /opsx:ff` inside isolated rails.
|
|
774
|
-
overlayFallbackRoots = [baseRepo];
|
|
775
|
-
}
|
|
776
|
-
}
|
|
777
|
-
catch { /* legacy fallback */ }
|
|
778
|
-
let overlayProviderDir = '.claude';
|
|
779
|
-
let overlayInstructions = 'CLAUDE.md';
|
|
780
|
-
try {
|
|
781
|
-
const adapter = (0, providers_1.getAdapter)(input.provider);
|
|
782
|
-
overlayProviderDir = adapter.projectDirName;
|
|
783
|
-
overlayInstructions = adapter.instructionsFilename;
|
|
784
|
-
}
|
|
785
|
-
catch { /* unknown provider — claude-shaped defaults */ }
|
|
749
|
+
// Effective artifact root for the per-worktree overlay (relocated workspace
|
|
750
|
+
// vs the repo's own untracked entries, plus the provider's dir/instruction
|
|
751
|
+
// file). Resolved ONCE per launch; see resolveOverlaySources.
|
|
752
|
+
const overlaySources = (0, isolated_worktree_1.resolveOverlaySources)({ slug, baseRepo, provider: input.provider }, resolveExecution);
|
|
753
|
+
const { sourceRoot: overlaySourceRoot, fallbackSourceRoots: overlayFallbackRoots, providerDir: overlayProviderDir, instructionsFilename: overlayInstructions, } = overlaySources;
|
|
786
754
|
// Degraded overlay = the run may be missing native commands/agents. Never
|
|
787
755
|
// aborts the rail (a partial surface beats no run) but MUST be visible:
|
|
788
756
|
// stderr-style server log + a project-scoped WS event.
|
|
@@ -836,6 +804,8 @@ async function launchIsolatedRail(input, io = {}) {
|
|
|
836
804
|
const worktreeBaseRef = await (0, integration_branch_1.resolveWorktreeBaseRef)(git, {
|
|
837
805
|
repoDir: baseRepo, integration, fetchOk: fetchResult.ok,
|
|
838
806
|
});
|
|
807
|
+
// Unborn HEAD: refuse before the decision row, branches or worktrees exist.
|
|
808
|
+
await (0, isolated_worktree_1.assertRepositoryHasCommits)(git, baseRepo, worktreeBaseRef.baseRef);
|
|
839
809
|
if (worktreeBaseRef.warning) {
|
|
840
810
|
console.warn(`[rail-isolated] ${worktreeBaseRef.warning} (repo ${baseRepo})`);
|
|
841
811
|
try {
|
|
@@ -923,9 +893,23 @@ async function launchIsolatedRail(input, io = {}) {
|
|
|
923
893
|
ticketIds: units.flatMap((unit) => unit.ticketIds),
|
|
924
894
|
}];
|
|
925
895
|
}
|
|
896
|
+
// A Flow hand-off adopts ONE existing worktree for the Flow's single spec.
|
|
897
|
+
// It never combines with continuation, revision or retry contracts. Checked
|
|
898
|
+
// before the delivery row exists, so a rejection leaves nothing behind.
|
|
899
|
+
const flowWorktree = input.requiredFlowWorktree ?? null;
|
|
900
|
+
// A Flow in a non-primary repository runs as the ONE child of a
|
|
901
|
+
// single-repository group: only that repository's leg may adopt it.
|
|
902
|
+
const flowRepositoryLeg = !input.repositoryExecution
|
|
903
|
+
? !flowWorktree?.repositoryId
|
|
904
|
+
: Boolean(flowWorktree?.repositoryId) && input.repositoryExecution.repositoryId === flowWorktree?.repositoryId;
|
|
905
|
+
if (flowWorktree && (units.length !== 1 || launchContinuation || input.requiredPrContinuation || input.revision ||
|
|
906
|
+
input.retryOfDelivery || !flowRepositoryLeg || input.explicitPrTarget)) {
|
|
907
|
+
throw new flow_worktree_handoff_1.FlowWorktreeMismatchError('A Flow hand-off launches exactly its own spec on a fresh delivery');
|
|
908
|
+
}
|
|
926
909
|
if (prMode) {
|
|
927
910
|
const generation = (0, rail_pr_store_1.createPrDeliveryGeneration)(ctx.db, {
|
|
928
911
|
launchConfig: input.launchConfig,
|
|
912
|
+
loopChoice: input.loopChoice ?? null,
|
|
929
913
|
parentDeliveryId: input.repositoryExecution?.parentDeliveryId,
|
|
930
914
|
repositoryId: input.repositoryExecution?.repositoryId,
|
|
931
915
|
repositoryPath: input.repositoryExecution ? baseRepo : undefined,
|
|
@@ -1011,6 +995,10 @@ async function launchIsolatedRail(input, io = {}) {
|
|
|
1011
995
|
}
|
|
1012
996
|
}
|
|
1013
997
|
const unitBranchName = (ticketId) => {
|
|
998
|
+
if (flowWorktree) {
|
|
999
|
+
takenBranches.add(flowWorktree.branch);
|
|
1000
|
+
return { branch: flowWorktree.branch, ownership: 'adopted' };
|
|
1001
|
+
}
|
|
1014
1002
|
const revisionBranch = revisionBranches.get(ticketId);
|
|
1015
1003
|
if (revisionBranch)
|
|
1016
1004
|
return { branch: revisionBranch.branch, ownership: 'preexisting' };
|
|
@@ -1019,7 +1007,7 @@ async function launchIsolatedRail(input, io = {}) {
|
|
|
1019
1007
|
takenBranches.add(continuation.branch);
|
|
1020
1008
|
return { branch: continuation.branch, ownership: 'borrowed-pr' };
|
|
1021
1009
|
}
|
|
1022
|
-
const preferred = (0, pr_naming_1.ticketBranchName)(
|
|
1010
|
+
const preferred = (0, pr_naming_1.ticketBranchName)((0, isolated_worktree_1.ticketNamingInput)(ctx, ticketId));
|
|
1023
1011
|
const branch = (0, pr_naming_1.resolveCollisionFreeName)(preferred, {
|
|
1024
1012
|
// A run can reuse a branch only through the exact revision/PR
|
|
1025
1013
|
// evidence above. An accepted predecessor may now lag the integration
|
|
@@ -1049,95 +1037,64 @@ async function launchIsolatedRail(input, io = {}) {
|
|
|
1049
1037
|
throw new Error(`Revision branch ${revisionBranch.branch} no longer matches its recorded delivery commit`);
|
|
1050
1038
|
}
|
|
1051
1039
|
}
|
|
1052
|
-
|
|
1040
|
+
const prepared = await (0, isolated_worktree_1.materializeIsolatedWorktree)({
|
|
1053
1041
|
repoDir: baseRepo,
|
|
1054
1042
|
worktreesRoot: path.join(worktreesRoot, runId),
|
|
1055
1043
|
slug,
|
|
1056
1044
|
ticketId: unit.ticketId,
|
|
1057
|
-
baseRef: revisionBranch?.sha ?? continuationTarget?.baseRef ?? worktreeBaseRef.baseRef,
|
|
1045
|
+
baseRef: flowWorktree?.baseSha ?? revisionBranch?.sha ?? continuationTarget?.baseRef ?? worktreeBaseRef.baseRef,
|
|
1058
1046
|
branch: branchPlan.branch,
|
|
1047
|
+
branchOwnership: branchPlan.ownership,
|
|
1048
|
+
pinBranchOwnership: Boolean(continuationTarget || flowWorktree),
|
|
1059
1049
|
refreshFromBaseRef: Boolean(continuationTarget?.baseRef),
|
|
1060
|
-
fresh: !revisionBranch && !continuationTarget,
|
|
1061
|
-
reuseBranchWorktree: Boolean(revisionBranch || continuationTarget),
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
sourceRoot: overlaySourceRoot,
|
|
1086
|
-
fallbackSourceRoots: overlayFallbackRoots,
|
|
1087
|
-
providerDir: overlayProviderDir,
|
|
1088
|
-
instructionsFilename: overlayInstructions,
|
|
1089
|
-
});
|
|
1090
|
-
overlayExcludes = res.createdPaths;
|
|
1091
|
-
overlayCleanupEvidence = res.cleanupEvidence ?? [];
|
|
1092
|
-
if (res.warnings.length > 0)
|
|
1093
|
-
notifyOverlayDegraded(unit.ticketId, res.warnings);
|
|
1094
|
-
}
|
|
1095
|
-
catch (err) {
|
|
1096
|
-
// applyWorktreeOverlay never throws; this guards injected test doubles
|
|
1097
|
-
// and future edits — the spawn proceeds regardless.
|
|
1098
|
-
notifyOverlayDegraded(unit.ticketId, [err instanceof Error ? err.message : String(err)]);
|
|
1099
|
-
}
|
|
1100
|
-
// Warm-dependency reuse: link the base checkout's node_modules trees
|
|
1101
|
-
// into the fresh worktree (best-effort; a failure just leaves the run
|
|
1102
|
-
// on the legacy cold start). Linked paths join the overlay exclusion
|
|
1103
|
-
// list so they inherit the commit-time guarantees.
|
|
1104
|
-
let warmLinkEvidence = [];
|
|
1105
|
-
try {
|
|
1106
|
-
const nm = (io.linkNodeModules ?? worktree_node_modules_1.linkNodeModulesIntoWorktree)(baseRepo, handle.worktreePath);
|
|
1107
|
-
// `authenticated` (not `linked`) is the authorized set: it also covers
|
|
1108
|
-
// links a previous pass created, which a resumed launch would
|
|
1109
|
-
// otherwise leave both un-excluded from the commit and unauthorized
|
|
1110
|
-
// for release.
|
|
1111
|
-
const authorized = nm.authenticated ?? nm.linked ?? [];
|
|
1112
|
-
if (authorized.length > 0)
|
|
1113
|
-
overlayExcludes = overlayExcludes.concat(authorized);
|
|
1114
|
-
warmLinkEvidence = nm.evidence ?? [];
|
|
1115
|
-
if (nm.warnings.length > 0)
|
|
1116
|
-
notifyOverlayDegraded(unit.ticketId, nm.warnings);
|
|
1117
|
-
}
|
|
1118
|
-
catch (err) {
|
|
1119
|
-
notifyOverlayDegraded(unit.ticketId, [err instanceof Error ? err.message : String(err)]);
|
|
1120
|
-
}
|
|
1121
|
-
// Code-Explorer provenance: freeze the worktree's pre-run state (HEAD sha
|
|
1122
|
-
// + the overlay's untracked set) so the settle diff attributes exactly
|
|
1123
|
-
// the run's own writes. Best-effort — a snapshot failure only loses
|
|
1124
|
-
// provenance, never the run.
|
|
1125
|
-
let provenanceSnapshot = null;
|
|
1126
|
-
if ((0, feature_flags_1.isCodeExplorerEnabled)()) {
|
|
1127
|
-
try {
|
|
1128
|
-
provenanceSnapshot = (io.snapshot ?? file_provenance_1.snapshotWorkingTree)(handle.worktreePath);
|
|
1129
|
-
}
|
|
1130
|
-
catch (err) {
|
|
1131
|
-
console.warn(`[rail-isolated] provenance snapshot failed: ${err.message}`);
|
|
1132
|
-
}
|
|
1133
|
-
}
|
|
1050
|
+
fresh: !revisionBranch && !continuationTarget && !flowWorktree,
|
|
1051
|
+
reuseBranchWorktree: Boolean(revisionBranch || continuationTarget || flowWorktree),
|
|
1052
|
+
verifyHead: async (mounted) => {
|
|
1053
|
+
if (flowWorktree)
|
|
1054
|
+
return verifyFlowWorktree(git, mounted, flowWorktree);
|
|
1055
|
+
if (continuationTarget) {
|
|
1056
|
+
return verifyContinuationWorktree(git, baseRepo, mounted, continuationTarget, continuationTarget.deliverySha);
|
|
1057
|
+
}
|
|
1058
|
+
const headSha = await (0, isolated_worktree_1.readHeadSha)(git, mounted.worktreePath);
|
|
1059
|
+
if (expectedRepositoryBaseSha && headSha !== expectedRepositoryBaseSha)
|
|
1060
|
+
throw new Error('The repository base changed before its worktree could be frozen');
|
|
1061
|
+
if (revisionBranch && (mounted.branch !== revisionBranch.branch || headSha !== revisionBranch.sha)) {
|
|
1062
|
+
throw new Error(`Revision checkout does not expose the exact recorded branch ${revisionBranch.branch}`);
|
|
1063
|
+
}
|
|
1064
|
+
return headSha;
|
|
1065
|
+
},
|
|
1066
|
+
overlay: overlaySources,
|
|
1067
|
+
onDegraded: (warnings) => notifyOverlayDegraded(unit.ticketId, warnings),
|
|
1068
|
+
}, io);
|
|
1069
|
+
handle = prepared.handle;
|
|
1070
|
+
branchOwnership = prepared.branchOwnership;
|
|
1071
|
+
// The verified Flow mount pre-existed by construction; the rail adopts it.
|
|
1072
|
+
worktreeOwnership = flowWorktree && prepared.worktreeOwnership === 'preexisting' ? 'adopted' : prepared.worktreeOwnership;
|
|
1073
|
+
initialSha = prepared.initialSha;
|
|
1074
|
+
const { overlayExcludes, overlayCleanupEvidence, warmLinkEvidence, provenanceSnapshot } = prepared;
|
|
1134
1075
|
const ledgerId = (0, ids_1.newId)();
|
|
1135
|
-
|
|
1076
|
+
const ledgerRow = {
|
|
1136
1077
|
id: ledgerId, railIndex, ticketId: unit.ticketId, runId,
|
|
1137
1078
|
repositoryId: input.repositoryExecution?.repositoryId,
|
|
1138
1079
|
repositoryPath: input.repositoryExecution ? baseRepo : undefined,
|
|
1139
1080
|
branch: handle.branch, worktreePath: handle.worktreePath,
|
|
1140
|
-
}
|
|
1081
|
+
};
|
|
1082
|
+
if (flowWorktree) {
|
|
1083
|
+
// Ownership transfer: the rail ledger row and the Flow's handed_off
|
|
1084
|
+
// state commit together or not at all.
|
|
1085
|
+
const adoptedHead = initialSha;
|
|
1086
|
+
if (!adoptedHead)
|
|
1087
|
+
throw new flow_worktree_handoff_1.FlowWorktreeMismatchError('The Flow worktree HEAD could not be verified');
|
|
1088
|
+
ctx.db.transaction(() => {
|
|
1089
|
+
(0, rail_worktrees_store_1.createRailWorktree)(ctx.db, ledgerRow);
|
|
1090
|
+
// A repository leg reports the GROUP delivery: the Flow settles on
|
|
1091
|
+
// the parent's `rail.pr_state`, which is the only one broadcast.
|
|
1092
|
+
flowWorktree.adopt({ railIndex, runId, ledgerId, deliveryId: input.repositoryExecution?.parentDeliveryId ?? prDeliveryId, headSha: adoptedHead });
|
|
1093
|
+
})();
|
|
1094
|
+
}
|
|
1095
|
+
else {
|
|
1096
|
+
(0, rail_worktrees_store_1.createRailWorktree)(ctx.db, ledgerRow);
|
|
1097
|
+
}
|
|
1141
1098
|
allocated.push({
|
|
1142
1099
|
ticketId: unit.ticketId,
|
|
1143
1100
|
ticketIds: unit.ticketIds,
|
|
@@ -1149,8 +1106,8 @@ async function launchIsolatedRail(input, io = {}) {
|
|
|
1149
1106
|
warmLinkEvidence,
|
|
1150
1107
|
provenanceSnapshot,
|
|
1151
1108
|
continuationTarget,
|
|
1152
|
-
baseRef: continuationTarget?.baseRef ?? worktreeBaseRef.baseRef,
|
|
1153
|
-
hygieneBaseSha,
|
|
1109
|
+
baseRef: flowWorktree?.baseSha ?? continuationTarget?.baseRef ?? worktreeBaseRef.baseRef,
|
|
1110
|
+
hygieneBaseSha: flowWorktree?.baseSha ?? hygieneBaseSha,
|
|
1154
1111
|
initialSha,
|
|
1155
1112
|
branchOwnership,
|
|
1156
1113
|
worktreeOwnership,
|
|
@@ -1200,6 +1157,20 @@ async function launchIsolatedRail(input, io = {}) {
|
|
|
1200
1157
|
for (const a of allocated) {
|
|
1201
1158
|
if (claimedAddendaByRun.has(a.runId))
|
|
1202
1159
|
(0, spec_addenda_1.broadcastSpecAddendaChange)(msg => ctx.broadcast(msg), ctx.project.id, (0, spec_addenda_1.settleSpecAddendaAt)(addendaStorePath, a.ticketIds, a.runId, 'failed'));
|
|
1160
|
+
if (a.worktreeOwnership === 'adopted' && flowWorktree) {
|
|
1161
|
+
// Never remove an adopted Flow worktree on rollback: give it back.
|
|
1162
|
+
try {
|
|
1163
|
+
ctx.db.transaction(() => {
|
|
1164
|
+
(0, rail_worktrees_store_1.deleteRailWorktree)(ctx.db, a.ledgerId);
|
|
1165
|
+
flowWorktree.release(errorDetail(err));
|
|
1166
|
+
})();
|
|
1167
|
+
}
|
|
1168
|
+
catch (releaseError) {
|
|
1169
|
+
console.error(`[rail-isolated] could not return Flow worktree ${a.handle.worktreePath}: ${errorDetail(releaseError)}`);
|
|
1170
|
+
(0, rail_worktrees_store_1.updateRailWorktreeState)(ctx.db, a.ledgerId, 'needs-review');
|
|
1171
|
+
}
|
|
1172
|
+
continue;
|
|
1173
|
+
}
|
|
1203
1174
|
if (a.worktreeOwnership === 'created') {
|
|
1204
1175
|
await remove(git, {
|
|
1205
1176
|
repoDir: baseRepo,
|
|
@@ -1327,8 +1298,11 @@ async function launchIsolatedRail(input, io = {}) {
|
|
|
1327
1298
|
deferTerminalOutcome: true,
|
|
1328
1299
|
constants, provider, model, effort, ...(deciderEngine ? { deciderEngine } : {}),
|
|
1329
1300
|
profileName: input.profileName,
|
|
1301
|
+
...(input.runCapUsd !== undefined ? { runCapUsd: input.runCapUsd } : {}),
|
|
1330
1302
|
...(input.followUp ? { followUp: { id: input.followUp.id, version: input.followUp.version, hash: input.followUp.hash, openspecChangeName: input.followUp.openspecChangeName ?? null, briefing: (0, pr_follow_up_1.renderFollowUpBriefing)(input.followUp, { prNumber: launchContinuation?.prNumber ?? input.explicitPrTarget?.prNumber ?? null, ticketIds }) } } : {}),
|
|
1331
1303
|
...(claimedAddenda.briefing ? { addenda: { ids: claimedAddenda.snapshot.map((e) => e.id), briefing: claimedAddenda.briefing } } : {}),
|
|
1304
|
+
// Flow hand-off: Core derives the change from the Flow reservation commit.
|
|
1305
|
+
...(input.requiredFlowWorktree ? { flowDerivation: { baseSha: input.requiredFlowWorktree.baseSha ?? null, summary: input.requiredFlowWorktree.summary ?? '', ...(input.requiredFlowWorktree.changeId ? { changeId: input.requiredFlowWorktree.changeId } : {}) } } : {}),
|
|
1332
1306
|
});
|
|
1333
1307
|
runPromises.push(settleAllocatedRun(a, enginePromise).then(async (result) => {
|
|
1334
1308
|
if (prDeliveryId && (0, loop_graph_1.isDefinitionGraph)(loopGraph))
|
|
@@ -1373,7 +1347,7 @@ async function launchIsolatedRail(input, io = {}) {
|
|
|
1373
1347
|
implementationOutcome,
|
|
1374
1348
|
deliveryOutcome: 'blocked',
|
|
1375
1349
|
initialSha: run.initialSha,
|
|
1376
|
-
finalSha: await readHeadSha(git, run.handle.worktreePath),
|
|
1350
|
+
finalSha: await (0, isolated_worktree_1.readHeadSha)(git, run.handle.worktreePath),
|
|
1377
1351
|
failureCode: 'settlement_interrupted',
|
|
1378
1352
|
failureDetail: detail,
|
|
1379
1353
|
safeToRelease: false,
|
|
@@ -1673,7 +1647,9 @@ async function launchIsolatedRail(input, io = {}) {
|
|
|
1673
1647
|
let settleEvidence;
|
|
1674
1648
|
try {
|
|
1675
1649
|
const definitionEvidence = await (0, loop_definition_recovery_1.probeDefinitionRuns)({ db: ctx.db, cwd: ctx.project.path, env: process.env }, results.filter(result => (0, loop_runs_store_1.getLoopRun)(ctx.db, result.run.runId)?.engine_version === 2).map(result => result.run.runId), true);
|
|
1676
|
-
|
|
1650
|
+
const reviewBrief = await (io.reviewBriefCapability ?? delivery_evidence_1.coreAnnouncesReviewBrief)();
|
|
1651
|
+
const phase3 = await (0, phase3_harvest_1.phase3HarvestOptions)({ db: ctx.db, project: ctx.project, capabilities: io.phase3Capabilities });
|
|
1652
|
+
settleEvidence = harvest({ readEvents: (runId) => (0, db_1.getJobEvents)(ctx.db, runId), reviewBrief, ...phase3 }, results.map((result) => ({
|
|
1677
1653
|
ticketId: result.run.ticketId,
|
|
1678
1654
|
runId: result.run.runId,
|
|
1679
1655
|
definitionStatus: definitionEvidence.get(result.run.runId),
|
|
@@ -1689,14 +1665,25 @@ async function launchIsolatedRail(input, io = {}) {
|
|
|
1689
1665
|
console.warn(`[rail-isolated] evidence harvest failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
1690
1666
|
settleEvidence = undefined;
|
|
1691
1667
|
}
|
|
1668
|
+
// Flow -> Spec: a run that stopped because the work still needs changes
|
|
1669
|
+
// (review rejected / checks failing after the repair rounds) is not an
|
|
1670
|
+
// opaque implementation failure. Say so, with the reviewer's own words.
|
|
1671
|
+
const flowReview = (0, flow_review_outcome_1.flowReviewOutcome)({ loopId, implementationOutcome, evidence: settleEvidence });
|
|
1672
|
+
const settledStatusCode = flowReview ? 'review_changes_requested' : statusCode;
|
|
1673
|
+
const settledStatusDetail = flowReview ? (0, flow_review_outcome_1.flowReviewStatusDetail)(flowReview) : statusDetail;
|
|
1674
|
+
if (flowReview) {
|
|
1675
|
+
for (const unit of settledBranchRecords)
|
|
1676
|
+
if (unit.failureCode === 'settlement_interrupted')
|
|
1677
|
+
unit.failureCode = 'review_changes_requested';
|
|
1678
|
+
}
|
|
1692
1679
|
const patch = {
|
|
1693
1680
|
settleEvidence,
|
|
1694
1681
|
branches: settledBranchRecords,
|
|
1695
1682
|
worktreeIds,
|
|
1696
1683
|
implementationOutcome,
|
|
1697
1684
|
deliveryOutcome,
|
|
1698
|
-
statusCode,
|
|
1699
|
-
statusDetail,
|
|
1685
|
+
statusCode: settledStatusCode,
|
|
1686
|
+
statusDetail: settledStatusDetail,
|
|
1700
1687
|
deliverySha,
|
|
1701
1688
|
...(launchContinuation ? {
|
|
1702
1689
|
branch: launchContinuation.branch,
|
|
@@ -1745,8 +1732,8 @@ async function launchIsolatedRail(input, io = {}) {
|
|
|
1745
1732
|
if (implementationOutcome === 'failed') {
|
|
1746
1733
|
const failedUnit = results.find((result) => result.implementationOutcome === 'failed') ?? results[0];
|
|
1747
1734
|
notifyOriginRunFailure(prDeliveryId, {
|
|
1748
|
-
code: 'implementation_failed',
|
|
1749
|
-
detail:
|
|
1735
|
+
code: flowReview ? 'review_changes_requested' : 'implementation_failed',
|
|
1736
|
+
detail: settledStatusDetail,
|
|
1750
1737
|
stepId: null,
|
|
1751
1738
|
}, failedUnit?.run.runId ?? null);
|
|
1752
1739
|
}
|
|
@@ -1940,8 +1927,12 @@ async function reattachIsolatedSettlement(ctx, deliveryId, runId, io = {}) {
|
|
|
1940
1927
|
const partial = complete && ready.length > 0 && results.some(item => item.implementationOutcome !== 'succeeded' || !['ready', 'no_changes'].includes(item.deliveryOutcome));
|
|
1941
1928
|
const next = !complete ? 'building' : !successes.length ? 'implementation_failed' : row.pr_url ? 'pr_failed' : ready.length ? 'on_review' : noChanges ? 'no_changes' : 'pr_failed';
|
|
1942
1929
|
const definitionEvidence = await (0, loop_definition_recovery_1.probeDefinitionRuns)({ db: ctx.db, cwd: ctx.project.path, env: process.env }, results.map(item => item.run.runId), true);
|
|
1943
|
-
const
|
|
1930
|
+
const reviewBrief = await (io.reviewBriefCapability ?? delivery_evidence_1.coreAnnouncesReviewBrief)();
|
|
1931
|
+
const phase3 = await (0, phase3_harvest_1.phase3HarvestOptions)({ db: ctx.db, project: ctx.project, capabilities: io.phase3Capabilities });
|
|
1932
|
+
const evidence = (io.harvestEvidence ?? delivery_evidence_1.harvestDeliveryEvidence)({ readEvents: id => (0, db_1.getJobEvents)(ctx.db, id), reviewBrief, ...phase3 }, results.map(item => ({
|
|
1944
1933
|
ticketId: item.run.ticketId, runId: item.run.runId, worktreePath: item.run.handle.worktreePath,
|
|
1934
|
+
// Phase-3 run records only (spec trace, baseline); runtime evidence keeps its probe.
|
|
1935
|
+
recordsDir: path.join((io.resolveExecution ?? workspace_resolution_1.resolveProjectExecution)(ctx.project).specrailsDir, 'pipeline', item.run.runId),
|
|
1945
1936
|
definitionStatus: definitionEvidence.get(item.run.runId),
|
|
1946
1937
|
reviewerStepId: (0, loop_runs_store_1.readDefinitionRun)(ctx.db, item.run.runId)?.request.graph.config.reviewerStepId,
|
|
1947
1938
|
})));
|
|
@@ -1967,8 +1958,20 @@ async function reattachIsolatedSettlement(ctx, deliveryId, runId, io = {}) {
|
|
|
1967
1958
|
}
|
|
1968
1959
|
for (const row of allRows) {
|
|
1969
1960
|
const latest = (0, rail_pr_store_1.getPrDelivery)(ctx.db, row.id);
|
|
1970
|
-
if (latest)
|
|
1971
|
-
|
|
1961
|
+
if (!latest)
|
|
1962
|
+
continue;
|
|
1963
|
+
const snapshot = (0, rail_pr_store_1.toPrDeliverySnapshot)(latest);
|
|
1964
|
+
ctx.broadcast((0, rail_pr_store_1.toRailPrStateMessage)(ctx.project.id, snapshot));
|
|
1965
|
+
// A recovered settlement (server restart mid-run, then resume/reattach)
|
|
1966
|
+
// has no launch closure left to refresh the origin mission card. Without
|
|
1967
|
+
// this the persisted card stays `building` after the delivery reached
|
|
1968
|
+
// review, and every client hydration faithfully re-reads the stale card.
|
|
1969
|
+
if (latest.origin_conversation_id) {
|
|
1970
|
+
try {
|
|
1971
|
+
(0, agent_chat_registry_1.getAgentChatManager)()?.updatePrDecisionCard(latest.origin_conversation_id, (0, rail_pr_store_1.toPrDecisionCardEnvelope)(ctx.project.id, snapshot));
|
|
1972
|
+
}
|
|
1973
|
+
catch { /* the durable row is authoritative; startup reprojection heals */ }
|
|
1974
|
+
}
|
|
1972
1975
|
}
|
|
1973
1976
|
}
|
|
1974
1977
|
function recoveryOverlayExcludes(repoDir, worktreePath) {
|
|
@@ -75,8 +75,11 @@ function coerceRailLaunchProposal(value) {
|
|
|
75
75
|
const mode = modeRaw === 'batch' || modeRaw === 'batch-implement' ? 'implement' : modeRaw;
|
|
76
76
|
if (!exports.RAIL_LAUNCH_MODES.includes(mode))
|
|
77
77
|
return { ok: false, reason: 'invalid_mode' };
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
// Agents (Codex in particular) spell "no restriction" as null or an empty
|
|
79
|
+
// map. Treat exactly those as omitted; any other malformed selection still
|
|
80
|
+
// rejects the card so a bad selection can never broaden the scope.
|
|
81
|
+
const repositoryIds = value.repositoryIds === null ? undefined : value.repositoryIds;
|
|
82
|
+
const workspaceSelection = value.workspaceSelection === null || (isRecord(value.workspaceSelection) && Object.keys(value.workspaceSelection).length === 0) ? undefined : value.workspaceSelection;
|
|
80
83
|
if (repositoryIds !== undefined && (!Array.isArray(repositoryIds) || !repositoryIds.length || repositoryIds.length > 50 || repositoryIds.some(id => typeof id !== 'string' || !id.trim()) || new Set(repositoryIds).size !== repositoryIds.length))
|
|
81
84
|
return { ok: false, reason: 'invalid_workspace_selection' };
|
|
82
85
|
if (workspaceSelection !== undefined && (!isRecord(workspaceSelection) || !Object.keys(workspaceSelection).length || Object.keys(workspaceSelection).length > 50 || Object.entries(workspaceSelection).some(([id, paths]) => !id.trim() || !Array.isArray(paths) || !paths.length || paths.length > 50 || paths.some(item => typeof item !== 'string' || !item.trim() || item.length > 4096) || new Set(paths).size !== paths.length)))
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.sweepMergedChainAncestors = exports.executePrDecision = exports.actionAllowed = exports.isPrDecisionAction = exports.PR_DECISION_ACTIONS = void 0;
|
|
3
|
+
exports.waitForLocalRestores = exports.recoverLocalStashes = exports.runDiscardRestoreBranch = exports.runBringBackLocalChanges = exports.runRestoreLocalChanges = exports.sweepMergedChainAncestors = exports.executePrDecision = exports.actionAllowed = exports.isPrDecisionAction = exports.PR_DECISION_ACTIONS = void 0;
|
|
4
4
|
/** Compatibility entry point; decision workflows have capability-owned implementations. */
|
|
5
5
|
var __1 = require("..");
|
|
6
6
|
Object.defineProperty(exports, "PR_DECISION_ACTIONS", { enumerable: true, get: function () { return __1.PR_DECISION_ACTIONS; } });
|
|
@@ -10,3 +10,9 @@ var dispatch_1 = require("../adapters/decisions/dispatch");
|
|
|
10
10
|
Object.defineProperty(exports, "executePrDecision", { enumerable: true, get: function () { return dispatch_1.executePrDecision; } });
|
|
11
11
|
var chains_1 = require("../adapters/decisions/chains");
|
|
12
12
|
Object.defineProperty(exports, "sweepMergedChainAncestors", { enumerable: true, get: function () { return chains_1.sweepMergedChainAncestors; } });
|
|
13
|
+
var local_changes_1 = require("../adapters/decisions/local-changes");
|
|
14
|
+
Object.defineProperty(exports, "runRestoreLocalChanges", { enumerable: true, get: function () { return local_changes_1.runRestoreLocalChanges; } });
|
|
15
|
+
Object.defineProperty(exports, "runBringBackLocalChanges", { enumerable: true, get: function () { return local_changes_1.runBringBackLocalChanges; } });
|
|
16
|
+
Object.defineProperty(exports, "runDiscardRestoreBranch", { enumerable: true, get: function () { return local_changes_1.runDiscardRestoreBranch; } });
|
|
17
|
+
Object.defineProperty(exports, "recoverLocalStashes", { enumerable: true, get: function () { return local_changes_1.recoverLocalStashes; } });
|
|
18
|
+
Object.defineProperty(exports, "waitForLocalRestores", { enumerable: true, get: function () { return local_changes_1.waitForLocalRestores; } });
|