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
|
@@ -6,6 +6,19 @@ reflect older implementations; current code, tests, AGENTS.md and the architectu
|
|
|
6
6
|
decision take precedence. Search the relevant feature instead of loading the
|
|
7
7
|
whole document. Relative links below were originally relative to the repo root.
|
|
8
8
|
|
|
9
|
+
Known superseded entries (verified 2026-10-21; the current behaviour wins):
|
|
10
|
+
|
|
11
|
+
- **Revision loop.** `factory:revision` is no longer a fourth factory loop; it is a
|
|
12
|
+
legacy id aliased to `factory:sdd-quick-openspec` (see [review packet](review-packet.md)).
|
|
13
|
+
- **Setup wizard.** Retired; projects are added silently with background workspace
|
|
14
|
+
assembly (see [architecture](architecture.md#project-add-and-workspace-assembly)).
|
|
15
|
+
- **Ultracode.** Renamed Freestyle; `ultracode` survives only as an input alias that
|
|
16
|
+
`normalizeRailMode` maps to `freestyle` for older Companion builds.
|
|
17
|
+
- **`sr:why` / explanations, health-check, compat-check, refactor-recommender.**
|
|
18
|
+
Retired from Core; Core 6 ships only the `implement` and `retry` commands.
|
|
19
|
+
- **Core pins.** Any `^4.x` / `^5.x` range quoted below is historical; the current
|
|
20
|
+
range is `CORE_PACKAGE_SPEC` in `server/core-package.ts`.
|
|
21
|
+
|
|
9
22
|
---
|
|
10
23
|
|
|
11
24
|
# CLAUDE.md
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
# Local testing: feedback-2026-10 program
|
|
2
|
+
|
|
3
|
+
How to run this Desktop branch (`local/feedback-2026-10`, worktree
|
|
4
|
+
`/Users/javi/repos/wt/desktop-local`) in dev against the local Core branch
|
|
5
|
+
(`local/feedback-2026-10`, worktree `/Users/javi/repos/wt/core-local`), and a
|
|
6
|
+
smoke checklist covering every feature of the program. Nothing here pushes or
|
|
7
|
+
publishes anything.
|
|
8
|
+
|
|
9
|
+
## 1. How Desktop finds Core in dev
|
|
10
|
+
|
|
11
|
+
`npm run dev` starts `tsx watch server/index.ts` (API on `127.0.0.1:4200`) and
|
|
12
|
+
Vite (`4201`, proxies `/api`). There is no bundled Core in dev.
|
|
13
|
+
|
|
14
|
+
- **`SPECRAILS_CORE_BIN`** is the override for everything (`server/core-runtime.ts`
|
|
15
|
+
`resolveCoreRuntime`): framework install, `check-core-compat`, the update
|
|
16
|
+
card and the agent runtime (`<core>/dist/agent-runtime/{index,cli}.js`, found
|
|
17
|
+
next to the selected package). It may point at `bin/specrails-core.mjs` of a
|
|
18
|
+
checkout; Desktop walks up to its `package.json` and needs
|
|
19
|
+
`dist/installer/cli.js`. It is rejected when its version is older than
|
|
20
|
+
`~/.specrails/framework/current` (no downgrades) or its major is not 4–6.
|
|
21
|
+
- **`SPECRAILS_CORE_RUNTIME_PATH`** (optional) pins the agent runtime entry
|
|
22
|
+
(`<core>/dist/agent-runtime/index.js`) explicitly.
|
|
23
|
+
- **`SPECRAILS_FRAMEWORK_AUTOSWAP=false`** stops the boot-time framework swap.
|
|
24
|
+
Without it, a newer local Core is materialized into
|
|
25
|
+
`~/.specrails/framework/<version>` and `current` moves there, which your normal
|
|
26
|
+
Desktop then cannot resolve without the override.
|
|
27
|
+
- `npm link` is not used.
|
|
28
|
+
|
|
29
|
+
## 2. Build the local Core
|
|
30
|
+
|
|
31
|
+
The Core branch exposes contract 5.7, role instructions 17, node kinds 8 and
|
|
32
|
+
the `runtime api` capabilities `sessions`, `flowSessions`, `reviewBrief`,
|
|
33
|
+
`deriveChange`, `architectClarifications`, `specTrace`, `baselineOnTouch` and
|
|
34
|
+
`rulesInventory`. Build it before running Desktop or the paired tests.
|
|
35
|
+
|
|
36
|
+
```sh
|
|
37
|
+
git -C /Users/javi/repos/wt/core-local status --short # expect no "UU" lines
|
|
38
|
+
cd /Users/javi/repos/wt/core-local
|
|
39
|
+
npm ci # only if dependencies changed (node_modules is shared with /Users/javi/repos/specrails-core)
|
|
40
|
+
npm run build # tsc → dist/
|
|
41
|
+
node bin/specrails-core.mjs runtime api | node -e 'let s="";process.stdin.on("data",d=>s+=d).on("end",()=>{const c=JSON.parse(s).capabilities;console.log({architectClarifications:c.architectClarifications,specTrace:c.specTrace,baselineOnTouch:c.baselineOnTouch,rulesInventory:c.rulesInventory,reviewBrief:c.reviewBrief,deriveChange:c.deriveChange,flowSessions:c.flowSessions,sessions:c.sessions})})'
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
If `runtime api` does not print JSON in your build, check the capabilities
|
|
45
|
+
from Desktop instead (step 4). The version in `core-local/package.json` equals
|
|
46
|
+
the released 6.6.5, so the version number alone does not prove the local
|
|
47
|
+
checkout is active.
|
|
48
|
+
|
|
49
|
+
## 3. Run Desktop dev against it
|
|
50
|
+
|
|
51
|
+
Run with your real `HOME`, after backing up the SQLite databases.
|
|
52
|
+
|
|
53
|
+
**Why not an isolated `HOME`.** On macOS, changing `HOME` breaks the provider
|
|
54
|
+
logins: the Claude CLI keeps its credentials in the login keychain keyed to
|
|
55
|
+
the real home, so `claude`, `codex` and `gemini` look unauthenticated and every
|
|
56
|
+
run fails. Running against your real data is safe because migrations 72–78 of
|
|
57
|
+
this branch are additive (new tables and columns only): the released Desktop
|
|
58
|
+
keeps working on the same databases after you go back to it.
|
|
59
|
+
|
|
60
|
+
1. Close the released Desktop app, then back up every SQLite file
|
|
61
|
+
(`desktop.sqlite` and each project's `jobs.sqlite`, with their WAL/SHM
|
|
62
|
+
siblings), skipping the tool and runtime caches:
|
|
63
|
+
|
|
64
|
+
```sh
|
|
65
|
+
BACKUP=~/specrails-db-backup-$(date +%Y%m%d)
|
|
66
|
+
mkdir -p "$BACKUP" && cd ~/.specrails && find . -name "*.sqlite*" -not -path "./tools/*" -not -path "./runtimes/*" | cpio -pdm "$BACKUP"
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
2. Start Desktop dev against the local Core:
|
|
70
|
+
|
|
71
|
+
```sh
|
|
72
|
+
cd /Users/javi/repos/wt/desktop-local
|
|
73
|
+
SPECRAILS_CORE_BIN=/Users/javi/repos/wt/core-local/bin/specrails-core.mjs \
|
|
74
|
+
SPECRAILS_CORE_RUNTIME_PATH=/Users/javi/repos/wt/core-local/dist/agent-runtime/index.js \
|
|
75
|
+
SPECRAILS_FRAMEWORK_AUTOSWAP=false \
|
|
76
|
+
npm run dev
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Keep `SPECRAILS_FRAMEWORK_AUTOSWAP=false`: without it the newer local Core
|
|
80
|
+
is materialized into `~/.specrails/framework/<version>` and `current` moves
|
|
81
|
+
there, which the released Desktop then cannot resolve.
|
|
82
|
+
|
|
83
|
+
3. Restore (only if needed): close both the dev server and the released app,
|
|
84
|
+
then copy the backup back over `~/.specrails`
|
|
85
|
+
(`cd "$BACKUP" && find . -name "*.sqlite*" | cpio -pdmu ~/.specrails`).
|
|
86
|
+
|
|
87
|
+
- Use other ports if your normal Desktop is running:
|
|
88
|
+
`SPECRAILS_DEV_SERVER_PORT=4300 SPECRAILS_DEV_CLIENT_PORT=4301`.
|
|
89
|
+
- After rebuilding Core, restart `npm run dev` (`tsx watch` only watches
|
|
90
|
+
Desktop files, and capabilities are read at startup).
|
|
91
|
+
- Contract check against the same Core (optional):
|
|
92
|
+
`SPECRAILS_CORE_BIN=/Users/javi/repos/wt/core-local/bin/specrails-core.mjs npm run check-core-compat`.
|
|
93
|
+
A new Core checkpoint or verb makes it report incompatible; that is expected
|
|
94
|
+
until the Core branch is released and paired.
|
|
95
|
+
|
|
96
|
+
Open `http://127.0.0.1:4201`.
|
|
97
|
+
|
|
98
|
+
## 4. Verify which Core is active
|
|
99
|
+
|
|
100
|
+
```sh
|
|
101
|
+
TOKEN=$(cat ~/.specrails/desktop.token)
|
|
102
|
+
curl -s -H "x-desktop-token: $TOKEN" http://127.0.0.1:4200/api/core-update/status # runtimeSource: "override", runtimeVersion
|
|
103
|
+
curl -s -H "x-desktop-token: $TOKEN" http://127.0.0.1:4200/api/meta # apiVersion and versions
|
|
104
|
+
curl -si http://127.0.0.1:4200/api/health | grep -i x-specrails-api-version
|
|
105
|
+
curl -s -H "x-desktop-token: $TOKEN" http://127.0.0.1:4200/api/projects/<projectId>/core/phase3-capabilities
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
The server log prints `[SetupManager] spawning core: …/core-local/bin/specrails-core.mjs`
|
|
109
|
+
when a project is set up. `phase3-capabilities` must show `true` for every
|
|
110
|
+
capability (all four are `true` with the local Core).
|
|
111
|
+
|
|
112
|
+
## 5. Test project
|
|
113
|
+
|
|
114
|
+
Use a throwaway repository with a test runner, at least one OpenSpec
|
|
115
|
+
capability and a `CLAUDE.md`/`AGENTS.md` with a few rules:
|
|
116
|
+
|
|
117
|
+
```sh
|
|
118
|
+
mkdir -p /tmp/sr-smoke && cd /tmp/sr-smoke && git init -q && npm init -y >/dev/null
|
|
119
|
+
npm i -D vitest >/dev/null && npm pkg set scripts.test="vitest run" scripts.lint="node -e 0"
|
|
120
|
+
mkdir -p openspec/specs/search src && printf '### Requirement: Finds by title\nThe search SHALL match titles.\n\n### Requirement: Empty query\nAn empty query SHALL return nothing.\n' > openspec/specs/search/spec.md
|
|
121
|
+
printf '# Rules\n- API calls use getApiBase()\n- Copy is reviewed by design\n' > AGENTS.md
|
|
122
|
+
git add -A && git commit -qm init
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Test projects need at least one commit: Flow and isolated rail launches
|
|
126
|
+
create a worktree from the base branch, so a repository with an unborn HEAD is
|
|
127
|
+
refused with "This repository has no commits yet" (`409
|
|
128
|
+
repository_has_no_commits`). The `git commit` above covers it.
|
|
129
|
+
|
|
130
|
+
Add it in Desktop (Add project), configure a provider, and set
|
|
131
|
+
`.specrails/agent-runtime.json` verification to `npm test` (or accept the
|
|
132
|
+
suggestion in Project settings ▸ Agent runtime).
|
|
133
|
+
|
|
134
|
+
## 6. Smoke checklist
|
|
135
|
+
|
|
136
|
+
Mark each line. "Core" means the capability must be announced by the local
|
|
137
|
+
Core; without it the feature must be absent and nothing else may change.
|
|
138
|
+
|
|
139
|
+
### Phase 0–1: review capacity
|
|
140
|
+
- [ ] **Budget guard.** Project settings ▸ Budget: set a tiny daily cap, launch a rail → `409 daily_budget_exceeded` card; a running loop pauses between AI steps (`budget_paused`) and resumes after raising the cap.
|
|
141
|
+
- [ ] **WIP limit.** Project settings ▸ Review limit = 1. With one delivery on review, the board badge reads "In review 1/1", Play is disabled with a tooltip, Launch all holds rails back; a Relaunch/revision of the existing delivery still works.
|
|
142
|
+
- [ ] **Risk brief** (Core `reviewBrief`). After a run, the review packet opens with **What to look at** (risks high first); the draft PR body has the brief; mission/delivery cards show the top risk.
|
|
143
|
+
- [ ] **Decision times.** Analytics shows time to decision / merge per loop; deciding a delivery updates it.
|
|
144
|
+
- [ ] **Reviewer suggestion.** In a loop's agents editor, put reviewer and developer on the same model family → the "use another family" suggestion appears; Dismiss persists per project.
|
|
145
|
+
|
|
146
|
+
### Phase 2: Flow (Core `sessions`, `flowSessions`, `deriveChange`)
|
|
147
|
+
- [ ] **Triage chip.** A new spec gets a triage chip (size, recommended loop); the rail launch preselects the recommended loop; `POST /tickets/:id/triage` recomputes.
|
|
148
|
+
- [ ] **Offer → entry.** In a mission, ask to explore an idea → a Flow offer card; accept → Flow bar, In Flow label on the board.
|
|
149
|
+
- [ ] **Interrupt.** Send a message while the agent works → it is delivered mid-turn (no queue wait).
|
|
150
|
+
- [ ] **"This is it".** Press it → launch card with **Flow → Spec** preselected; Launch.
|
|
151
|
+
- [ ] **Flow → Spec loop.** The run derives the OpenSpec change; the packet shows **Derivation** (N/M files explained).
|
|
152
|
+
- [ ] **Summary carries the conversation.** `.specrails/pipeline/<runId>/flow-summary.md` lists every message you typed in Flow (`transcriptTurns` > 0) with `↳ Agent:` first lines; the packet's Derivation shows the same turn count.
|
|
153
|
+
- [ ] **Change name.** The derived change is `openspec/changes/<kebab spec title>` (no `ticket-N-addenda-…`).
|
|
154
|
+
- [ ] **Repair round.** When the review rejects (or a check fails), the run log shows `fix` (fixer stance) then `derive` again, and the change is updated in place; an approval after the round archives normally.
|
|
155
|
+
- [ ] **Requested changes.** With rounds exhausted, the mission card reads **The reviewer requested changes** with the issues and failing checks (no "Implementation failed · settlement_interrupted"); the rail strip shows **Changes requested** and no Discard.
|
|
156
|
+
- [ ] **Back to Flow.** Press it → the Flow bar returns on the same worktree (files intact), the spec shows In Flow again, the delivery card reads **Back in Flow**, and your next message reaches the agent with the review.
|
|
157
|
+
- [ ] **Relaunch.** From a requested-changes card, Relaunch → a new Flow → Spec run on the same rail and worktree re-derives the same change.
|
|
158
|
+
- [ ] **Spec rewrite.** After settle, the placeholder spec is rewritten from the derived change (Contract Layer applied).
|
|
159
|
+
- [ ] **Jira on review.** With Jira linked, the Flow spec gets its issue created and moved to review only after settle (never while In Flow).
|
|
160
|
+
- [ ] **Companion «In Flow».** In the companion app (`/Users/javi/repos/wt/companion-in-flow`, commit `02c4b79`), the spec shows the In Flow label.
|
|
161
|
+
|
|
162
|
+
### Phase 4: adoption
|
|
163
|
+
- [ ] **Freestyle on Codex/Gemini.** Launch Freestyle on a rail with Codex, then Gemini → runs and verifies; no capability error.
|
|
164
|
+
- [ ] **Minimal env.** Project settings ▸ Agent environment = minimal; `GET /api/projects/:id/agent-env/status` lists only allowlisted names; a run still authenticates its provider.
|
|
165
|
+
- [ ] **Audit log.** After a run, `GET /api/projects/:id/jobs/:runId/audit?format=csv` lists reads/writes/execs; retention setting saves.
|
|
166
|
+
- [ ] **API meta / update channels.** `X-Specrails-Api-Version: 1` on every `/api` response; `/api/meta` returns the version set; Settings ▸ Updates switches Latest/Stable without downgrading.
|
|
167
|
+
- [ ] **Loop economics.** Analytics ▸ Loop economics lists loops with delivered/merged/discarded, cost split, rounds; unknown values show "no data", never 0.
|
|
168
|
+
|
|
169
|
+
### Phase 3 + 4.4: this branch
|
|
170
|
+
- [ ] **Out of scope (Quick).** Add spec (Quick) → the spec window shows **Out of scope** under the description, and the description has no Out of Scope section. Edit it (one item per line) and save; reopen → kept.
|
|
171
|
+
- [ ] **Out of scope (Explore).** Explore a spec → the draft panel has an Out of scope list; Create Spec → the ticket has it. Continue editing a spec → its non-goals are kept after Update Spec.
|
|
172
|
+
- [ ] **Agents see non-goals.** Launch Freestyle on that spec → the run log prompt contains `## Out of Scope`.
|
|
173
|
+
- [ ] **Clarifications** (Core `architectClarifications`). Launch Implement on a deliberately ambiguous spec ("Add search; decide whether archived projects appear") → the run pauses with the question. With **Post architect clarifications to Jira** on and the spec linked to Jira, one comment appears on the issue. Reply in Jira; within a poll (≤ 60 s) the spec gets an open **clarification** addendum. A clear spec proceeds and, with the setting on, posts its assumptions instead. Setting off → no comment.
|
|
174
|
+
- [ ] **Requirements demonstrated** (Core `specTrace`). Have the run tag one test `[spec:search/finds-by-title]` → the packet shows **Requirements demonstrated 1/2** with the touched requirement flagged; Analytics ▸ Loop economics shows `1/2 · 50%`.
|
|
175
|
+
- [ ] **CI snippet.** In the test repo, `npx specrails-core pipeline trace --check --tests-passed` exits 1 naming the undemonstrated touched requirement (with an active change), 0 without `--check`.
|
|
176
|
+
- [ ] **Drift sweep.** Loops library lists **Drift sweep** (read-only); running it changes no files and reports contradictions.
|
|
177
|
+
- [ ] **Baseline on touch** (Core `baselineOnTouch`). Settings ▸ Existing-project anchoring ▸ Baseline on touch on. Spec a change to `src/` code no spec mentions → the packet shows **Spec created where the work passed** (module, requirements, tests) and the cost line adds "baseline $X of it". Break a characterization test on purpose → the run stops with "Baseline blocked: the characterization tests do not pass on the unchanged code…".
|
|
178
|
+
- [ ] **Old Core.** Run Desktop without `SPECRAILS_CORE_BIN` (released Core) → anchoring switches disabled with an update note, no new packet sections, drift sweep absent, settle evidence unchanged.
|
|
179
|
+
- [ ] **Rules inventory** (Core `rulesInventory`). Right after adding the project, Project settings ▸ Project rules shows the gates and the rules as **Unclassified** with an "inventoried offline" note (Core `init` runs it offline). **Re-run inventory** (provider configured in agent runtime settings) classifies them into automatable / human only / enforced. **Create spec** on an automatable rule adds a `todo` spec (source `rules`). The packet of the next delivery lists **Needs human eyes**. With no verification commands, Agent runtime ▸ verification shows the plain gates first; saving is explicit. The root `CLAUDE.md` of a Claude project has the `<!-- specrails-managed:start -->` block pointing at `.specrails/rules.json`.
|
|
180
|
+
|
|
181
|
+
## 7. Automated checks
|
|
182
|
+
|
|
183
|
+
```sh
|
|
184
|
+
cd /Users/javi/repos/wt/desktop-local
|
|
185
|
+
npm run typecheck
|
|
186
|
+
npx vitest run # server
|
|
187
|
+
npm run test --prefix client
|
|
188
|
+
npm run test:scripts
|
|
189
|
+
npm run audit:architecture
|
|
190
|
+
npm run build
|
|
191
|
+
for c in ticket-non-goals-and-jira-clarifications spec-trace-surfaces baseline-on-touch-settings project-rules-inventory; do openspec validate $c --strict; done
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Paired engine suites against the local Core (what the CI `paired-core-engine`
|
|
195
|
+
job runs; about 11 minutes):
|
|
196
|
+
|
|
197
|
+
```sh
|
|
198
|
+
cd /Users/javi/repos/wt/core-local && npm run build
|
|
199
|
+
cd /Users/javi/repos/wt/desktop-local
|
|
200
|
+
export SPECRAILS_CORE_SOURCE_DIR=/Users/javi/repos/wt/core-local
|
|
201
|
+
export SPECRAILS_EFFICIENCY_CORE_ROOT=/Users/javi/repos/wt/core-local
|
|
202
|
+
export SPECRAILS_CORE_BIN=/Users/javi/repos/wt/core-local/bin/specrails-core.mjs
|
|
203
|
+
npm run check-core-compat # contract 5.7 (paired target 5.7) ✓ Compatible
|
|
204
|
+
node scripts/paired-core-shards.mjs run 1/1 /tmp/paired.xml
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
The vendored `server/schemas/agent-runtime.schema.json`,
|
|
208
|
+
`workflow-definition.schema.json` and `fixtures/` are byte-identical to
|
|
209
|
+
`core-local/schemas/`; the schema parity tests compare them when
|
|
210
|
+
`SPECRAILS_EFFICIENCY_CORE_ROOT` is set.
|
|
@@ -27,6 +27,10 @@ and no remote PRs were created. Source changes are retained on this branch.
|
|
|
27
27
|
| Operational tools omitted useful review evidence and conversational launch defaults. | Add PR candidates/review packets, Git/worktree information, PR lookup and phase breakdowns. Preserve conversation provider/model/effort when launching compatible jobs/loops, and report when isolation is unavailable. |
|
|
28
28
|
| Binary attachments were forwarded through a text response path. | Return attachment metadata and a download reference instead of decoding arbitrary bytes as text. |
|
|
29
29
|
|
|
30
|
+
Follow-up (2026-10-21): mission agents now run with each provider's native
|
|
31
|
+
read-only boundary while keeping MCP tools callable. See
|
|
32
|
+
[read-only missions](mission-read-only-policy.md).
|
|
33
|
+
|
|
30
34
|
## New investigation workflow
|
|
31
35
|
|
|
32
36
|
1. Identify the intended project from the conversation pin or durable catalog.
|
|
@@ -28,8 +28,8 @@ Mission mode (Agent Mode) replaces the routed dashboard, so `RailsBoard`, `Specs
|
|
|
28
28
|
+ ONE automatic briefing turn
|
|
29
29
|
```
|
|
30
30
|
|
|
31
|
-
- **Proposal** — an assistant message with one or more fenced `rail-launch` blocks. Each block is one `AgentRailLaunchCard`; undecided proposals are
|
|
32
|
-
- **Launched** — Play succeeded (202). The proposal freezes into a "Launched → Rail N" stub (persisted on the message row), and the run
|
|
31
|
+
- **Proposal** — an assistant message with one or more fenced `rail-launch` blocks. Each block is one `AgentRailLaunchCard`; undecided proposals are live runs of the mission's run strip (above the composer; Launch performs the card's Play) and leave a one-line "Launch proposed" event in their history slot.
|
|
32
|
+
- **Launched** — Play succeeded (202). The proposal freezes into a "Launched → Rail N" stub (persisted on the message row), and the run takes over the run strip (a launching skeleton until its first step shows).
|
|
33
33
|
- **Running / settled / delivery** — the SAME envelope (`PrDecisionCardEnvelope`) carries `phase`, `runtime` and `hasDelivery`. With git, the delivery phase is the pre-existing PR-decision card. Without git, the card is run-only and ends at `completed` / `implementation_failed` / `discarded`.
|
|
34
34
|
|
|
35
35
|
## Protocol contract
|
|
@@ -107,10 +107,15 @@ WS messages: `agent_pr_decision` (existing, now carries the new fields), `agent_
|
|
|
107
107
|
- `client/src/features/missions/components/AgentMessage.tsx` — extraction step after spec-draft (flag `FEATURE_MISSION_RAIL_CARDS`); renders `AgentRailLaunchCard` per proposal, `AgentRailLaunchPending`, `AgentRailLaunchUnreadable`.
|
|
108
108
|
- `AgentRailLaunchCard.tsx` — live reconciliation (`/rails` availability, `/tickets`, `/profiles`, `useProviderDetection`, model/effort catalogs, loops), New rail, Play flow (`POST /rails` → `PUT /tickets` → `POST /launch` with `originConversationId` + `originSurface:'agent-chat'` → `notifyGitChanged` → intent PATCH), inline 400/409, launched/dismissed stubs, `FOCUS_PR_CARD_EVENT`.
|
|
109
109
|
- Repository context (`/repositories`) is required before Play. The card shows launch targets and each spec's saved scope, including primary-only historical specs. **Edit → Save repositories** persists only `repositoryIds` through the pinned project's existing ticket PATCH; Cancel leaves it untouched. Saved scope and spec-list changes reconcile required targets while retaining extra launch targets and dropping workspace entries for removed repositories. Optional launch targets do not edit specs. Omitted required targets and missing/offline/context-only implementation targets block Play visibly. **Refresh** reloads assignments; failed loads expose **Retry loading**. The resolved launch scope and filtered workspace selection are frozen in the launched intent, and server admission remains authoritative.
|
|
110
|
-
- `client/src/features/rails/lib/rail-launch-intents.ts` — session overlay (`recordLocalIntent`, `intentFor`); `useRailLaunchProposals.ts` — undecided proposals for the
|
|
110
|
+
- `client/src/features/rails/lib/rail-launch-intents.ts` — session overlay (`recordLocalIntent`, `intentFor`); `useRailLaunchProposals.ts` — undecided proposals for the run strip.
|
|
111
111
|
- `AgentPrDecisionCard.tsx` — run phase header (`deriveMissionRunStatus`, live `useRuntimeRuns` first), run-only rendering for `hasDelivery === false`, `RunFailureBlock`, Resume / Approve / Recover / Relaunch, focus-bus scroll + flash.
|
|
112
|
-
- `agent-pr-pinning.ts` `isPrEnvelopePinned
|
|
112
|
+
- `agent-pr-pinning.ts` `isPrEnvelopePinned` (a live delivery: the strip shows it); `agent-run-failure.ts` (`parseRunFailureRow`, `systemBriefingRunId`, `FOCUS_PR_CARD_EVENT`, `OPEN_RUN_STRIP_EVENT`, `MISSION_OPEN_RUN_EVENT`, `requestMissionOpenRun`); `AgentRunFailureMarker.tsx` (the failure as one history line in plain words).
|
|
113
|
+
- **Run strip** (`AgentRunStrip.tsx`, model `mission-run-strip.ts`): the ONE live representation of a mission's runs, above the composer in the floating panel and the Agent-Mode inline view alike. It shows one run — the most urgent (waiting for you › failed › running › paused; ties: the newest) unless the person holds another — a switcher pick (session-only), the open panel, or focus inside the strip; a held strip is never swapped, a run that newly waits or fails gets a "needs you" dot and words in the switcher (or on "+N") and a polite "Rail N needs you"; only an idle strip follows urgency (`heldStripKey`); more than three runs ⇒ the shown one, the two most urgent and "+N" — as a status mark with a shape per state (spinner launching, pulsing dot running, bell waiting, triangle failed, pause, info circle for settled information — "Finished without changes" and "PR closed without merging" are `info`, not decisions: no bell, no sidebar attention dot, lowest urgency, no strip primary; their cards keep their actions) plus a screen-reader state word, the step in plain words (extension `describeRun`, else the humanized step id), progress (finished/total runs, only for several), elapsed time and billed cost (`—` until billed, `*` when some runs are unpriced). Red is only the failed mark and headline. A primary action shows only when the run needs the person and while its panel is closed. The card DECLARES it (`run-primary.tsx`: `RunPrimaryButton` / `useRunPrimary` register `{ id, label, kind, rank, disabled, run, focus }` in a registry the strip scopes per run; the lowest rank wins — Approve › paused Resume › Create PR / Publish / Reopen / retry › Resume › Recover › Relaunch). `local` actions (Resume, Back to Flow, Mark as done, Verify PR) run in one click without opening the panel or moving focus; `outward` ones (Create PR, Publish, Reopen, Approve, Recover and retry, Retry delivery, Launch / Play, and Recover and Relaunch, which spend money on a new run) never fire from the strip: it opens the panel and moves focus to the card's own control, which the person confirms. A run that needs the person without a declared action gets a specific way in ("See what failed", "See why it paused", "Open the decision"). Clicking the strip opens the run's full card as a panel anchored above the strip over the conversation (capped to the space above, so never clipped; not a modal: Esc or a click in the conversation closes it and focus returns to the strip). Every live card stays mounted (hidden) and reports its step and run vitals to the strip. Changes are announced politely ("Rail 1: Waiting for you: Ready for your review", "Rail 1 finished"). Motion only conveys state (strip morph and panel, 180–200 ms, none under reduced motion). Keyboard (`run-strip-keys.ts`, one app-wide `keydown` listener and a registry of mounted strips) is conversation-scoped: a shortcut acts on the strip of the mission containing the focused element, else the most recently focused mission (split views), else the most recently mounted. **⌥R** jumps to the strip (from the composer too; by physical key, so the Option character is not typed) and, pressed again inside it, shows or hides the details; **Esc** with nothing open returns focus to where ⌥R came from; **⌥[ / ⌥]** switch the shown run (announced "Showing Rail 1: …") only outside text fields, because Option+[ types a bracket on several layouts; **← / →** move along the switcher. A row control may claim one letter while the strip (not its panel) has focus with `data-strip-key` (Flow: P, H): never a global or destructive shortcut. ⌘/Ctrl combinations and keys inside other dialogs are left to the app; the floating mission panel counts as the mission's own surface. The toggle's tooltip and `aria-keyshortcuts` name ⌥R, switch tooltips name ⌥[ ⌥], and the app cheatsheet (`?`) lists them under Missions.
|
|
114
|
+
- **History** never repeats the live run: a live delivery's slot is `AgentRunLaunchedLine` ("Launched on Rail 1 · #4 #7 · loop"), the failure row is "Rail 1 failed: <plain words>", an undecided proposal is "Launch proposed — waiting for you"; each opens the run. A settled Implement delivery keeps its full card in the history; a settled Flow → Spec run is `AgentSettledRunLine` ("Delivered: PR #812", "… went back to Flow") that expands its card in place (the Flow's closing summary is the full card of that story).
|
|
115
|
+
- Focus bus: the history lines dispatch `FOCUS_PR_CARD_EVENT` scoped by `conversationId` (proposals use `OPEN_RUN_STRIP_EVENT`). The strip opens the matching live run's panel and re-dispatches once (`expanded: true`); a hidden card ignores the first dispatch; the visible card scrolls (`block: 'nearest'`, instant under reduced motion), takes focus as a labelled `region` (`tabIndex=-1`) and pulses (`motion-safe`). A settled Flow → Spec line expands its card the same way. An unknown run is a no-op.
|
|
116
|
+
- Mission list: `AgentChatContext.attentionConversationIds` (from `agent_pr_decision` envelopes and the open conversation's rows, `deliveryNeedsPerson`) marks missions waiting for the person with a dot and its words: "Waiting for your decision" for a decision, "Needs attention: a run failed" (a destructive dot) for a failure (`attentionKinds`, `deliveryAttention`; a waiting decision outranks a failure; an extension's app-wide source reads as a decision). Extension runs feed the same dot with the strip's rule (`decision` or `failed` tone): an extension with an app-wide source (`MissionExtensions.useRunAttention`, Flow's per-project watch) reports every listed mission live, open or not, and the strip then leaves those runs to it; any other extension is reported by its mounted strip (`reportRunAttention`).
|
|
113
117
|
- `client/src/features/missions/context/AgentChatContext.tsx` — appends the `run-failure` row live on `agent_run_failure`; `AgentWorkspaceContext.tsx` / `AgentModeJobsPane.tsx` — `specrails:mission-open-run` opens the Jobs pane + `JobDetailModal`; `hooks/useOsNotifications.ts` — stays in Mission mode.
|
|
118
|
+
- Type scale on the strip, its panels and event lines (Flow's too): text and controls are **12px** at **≥ /75** foreground (labels, notes, errors, switcher entries, the single-run name, history event lines, Flow failure and run-card copy, the Preview menu URLs). Only compact chips and pills (`h-5`-class: the mode badge, status pills) may stay **11px**, and then at **≥ /70**. Never 10px.
|
|
114
119
|
- Palette: `client/src/features/missions/lib/agent-context-palette.ts` (`rail` kind, `railsFromResponse`, `railChip`), `AgentComposer.tsx`, `AgentComposerEditor.tsx`, `AgentContextPalette.tsx`.
|
|
115
120
|
|
|
116
121
|
## Honesty rules
|
|
@@ -148,5 +153,5 @@ Migration 29 and the envelope fields are additive; persisted intents are inert w
|
|
|
148
153
|
| Failure trigger / briefing / system turn | `server/modules/missions/runtime/mission-run-notify.test.ts`, `server/modules/missions/runtime/agent-failure-briefing.test.ts`, `server/agent-chat-mission-turn.test.ts`, `server/modules/delivery/runtime/rail-isolated-launch.test.ts` |
|
|
149
154
|
| MCP runtime actions | `server/mcp/tools/jobs-runtime.test.ts` |
|
|
150
155
|
| Launch card, proposals hook, stubs | `client/src/features/missions/components/__tests__/agent-rail-launch-card.test.tsx` |
|
|
151
|
-
| Run card phases / failure block / pinning / marker | `mission-run-card.test.tsx`, `mission-run-pinning.test.ts`, `agent-run-failure.test.ts`, `agent-run-failure-marker.test.tsx` |
|
|
156
|
+
| Run card phases / failure block / pinning / marker | `mission-run-card.test.tsx`, `mission-run-pinning.test.ts`, `agent-run-failure.test.ts`, `agent-run-failure-marker.test.tsx`, `agent-run-strip.test.tsx` (strip states, switcher, panel, primary action, history focus, inline surface), `mission-run-strip.test.ts` (tone/urgency/totals model) |
|
|
152
157
|
| Palette rails, Mission-mode notifications | `client/src/lib/__tests__/agent-context-palette-rails.test.ts`, `client/src/hooks/__tests__/useOsNotifications.mission-mode.test.ts` |
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# Read-only missions
|
|
2
|
+
|
|
3
|
+
Mission agents (the in-app agent chat) drive Specrails through the
|
|
4
|
+
`specrails_*` MCP tools. They do not edit workspaces themselves. Until
|
|
5
|
+
2026-10 that rule was held up by an app-owned working directory
|
|
6
|
+
(`~/.specrails/agent-cwd`), the operator prompt and the MCP permission ladder:
|
|
7
|
+
every provider still spawned in its write-capable mode. Since the
|
|
8
|
+
`mission-read-only-policy` change, mission turns use each provider's native
|
|
9
|
+
read-only boundary, so the rule holds even if a model ignores its prompt. Flow
|
|
10
|
+
(see [Flow mode](flow-mode.md)) is the only write-capable mission mode, and it
|
|
11
|
+
uses its own session; see [The Flow exception](#the-flow-exception).
|
|
12
|
+
|
|
13
|
+
Source: [`mission-tool-policy.ts`](../../server/modules/missions/runtime/mission-tool-policy.ts).
|
|
14
|
+
Kill switch: `SPECRAILS_MISSION_READ_ONLY=false` (see
|
|
15
|
+
[configuration](configuration.md#mission-read-only-policy)).
|
|
16
|
+
|
|
17
|
+
## Per-provider mapping
|
|
18
|
+
|
|
19
|
+
The legacy transport covers one-shot turns and native live sessions (Claude
|
|
20
|
+
stream-json, Codex app-server). The Core session column applies when the
|
|
21
|
+
mission runs on Core agent sessions.
|
|
22
|
+
|
|
23
|
+
| Provider | Legacy transport argv | Core session policy | MCP tools |
|
|
24
|
+
| --- | --- | --- | --- |
|
|
25
|
+
| Claude | `--dangerously-skip-permissions --tools Read,Grep,Glob,Agent,WebFetch,WebSearch` | `permissions: 'bypass'`, `tools: { mode: 'read-only' }` (Core's `--tools Read,Grep,Glob`) | ✅ |
|
|
26
|
+
| Codex | `--sandbox read-only` (resume: `-c sandbox_mode="read-only"`; app-server `sandbox: 'read-only'`) | `permissions: 'read-only'` (read-only sandbox; the driver has no tool filtering) | ✅ |
|
|
27
|
+
| Gemini | `--approval-mode plan --policy <cwd>/.gemini/specrails-plan-mcp-policy.toml` | no Core session driver | ✅ through the policy file |
|
|
28
|
+
| Local engines | runner `--tools Read,Grep,Glob` | not applicable | ✅ (runner always adds `--mcp-config` tools) |
|
|
29
|
+
| Kimi | unchanged (prompt mode auto-approves every tool) | not applicable | ✅ |
|
|
30
|
+
|
|
31
|
+
### Why Claude does not use plan mode
|
|
32
|
+
|
|
33
|
+
`toolPolicy: 'read-only'` alone maps Claude to `--permission-mode plan
|
|
34
|
+
--safe-mode --tools Read,Grep,Glob`, which is correct for pure-output transforms
|
|
35
|
+
but breaks missions. This was checked on claude 2.1.299 with a stub MCP server
|
|
36
|
+
whose tool is described as state-changing:
|
|
37
|
+
|
|
38
|
+
| Argv | MCP call | Write refused |
|
|
39
|
+
| --- | --- | --- |
|
|
40
|
+
| `--permission-mode plan --safe-mode --tools Read,Grep,Glob` | ❌ `--safe-mode` unloads `--mcp-config` servers | ✅ |
|
|
41
|
+
| `--permission-mode plan --tools Read,Grep,Glob` | ❌ the model refuses state-changing calls in plan mode | ✅ |
|
|
42
|
+
| same + `--allowedTools mcp__specrails` | ❌ still refused by the model | ✅ |
|
|
43
|
+
| `--permission-mode dontAsk --tools Read,Grep,Glob --allowedTools mcp__specrails` | ✅ | ✅ (but connectors and external servers would need explicit allow rules) |
|
|
44
|
+
| `--dangerously-skip-permissions --tools Read,Grep,Glob` | ✅ | ✅ |
|
|
45
|
+
|
|
46
|
+
Missions use the last row, so MCP behaviour is unchanged. The boundary is the
|
|
47
|
+
tool set: no built-in tool that writes files or runs commands exists in the
|
|
48
|
+
session. `SpawnOptions.retainMcpTools` selects it. The added `Agent` tool is
|
|
49
|
+
safe because native sub-agents inherit the restricted set. In the test, a
|
|
50
|
+
sub-agent asked to create a file reported only read-only tools and could not.
|
|
51
|
+
The Core claude driver maps `tools.mode: 'read-only'` to Core's fixed
|
|
52
|
+
`Read,Grep,Glob`, and Core's plan-mode mapping for `permissions: 'read-only'`
|
|
53
|
+
has the same MCP problem. The Core policy therefore keeps `bypass` and requests
|
|
54
|
+
the read-only tool set.
|
|
55
|
+
|
|
56
|
+
### Gemini plan mode and MCP
|
|
57
|
+
|
|
58
|
+
Gemini's plan mode (gemini-cli 0.49.0) removes every MCP tool from the session.
|
|
59
|
+
Its built-in `plan.toml` denies `toolName = "*"` at priority 40. When a mission
|
|
60
|
+
turn is read-only, the MCP wiring writes a user-tier policy file with one rule
|
|
61
|
+
per registered server (`specrails` plus injected external servers whose names
|
|
62
|
+
match `[A-Za-z0-9_-]`):
|
|
63
|
+
|
|
64
|
+
```toml
|
|
65
|
+
[[rule]]
|
|
66
|
+
toolName = "*"
|
|
67
|
+
mcpName = "specrails"
|
|
68
|
+
decision = "allow"
|
|
69
|
+
priority = 100
|
|
70
|
+
modes = ["plan"]
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
The rules apply only in plan mode, so they cannot widen a default or yolo turn.
|
|
74
|
+
Built-in write and shell tools stay denied by plan mode. Plan mode still lets
|
|
75
|
+
Gemini write plan Markdown files under its own `~/.gemini` plans directory,
|
|
76
|
+
outside every workspace.
|
|
77
|
+
|
|
78
|
+
## What stays outside the boundary
|
|
79
|
+
|
|
80
|
+
- **MCP servers.** The boundary covers the provider's own built-in tools. MCP
|
|
81
|
+
servers keep their own semantics: Specrails' tools are governed by the mission
|
|
82
|
+
permission ladder (observe / edit / operate / autonomous). Claude.ai connectors
|
|
83
|
+
and user-configured external MCP servers run as before. Specrails does not
|
|
84
|
+
vet the tools those servers expose.
|
|
85
|
+
- **Kimi.** Kimi Code prompt mode installs an approval handler that approves
|
|
86
|
+
every tool call and rejects `--plan`. Kimi has no native read-only mode, so
|
|
87
|
+
Kimi missions keep the previous behaviour. The adapter rejects `read-only`
|
|
88
|
+
explicitly, so Kimi never pretends to enforce it. The turn log records
|
|
89
|
+
`tools=default(unsupported)`.
|
|
90
|
+
- **Codex shell reads.** Codex's read-only sandbox still runs shell commands
|
|
91
|
+
that do not write, such as `git status` or `ls`. Writes fail inside the
|
|
92
|
+
sandbox.
|
|
93
|
+
- **Core sessions without tool filtering.** If a Core driver for an adapter that
|
|
94
|
+
needs `tools: 'read-only'` does not advertise `toolFiltering`, Desktop keeps
|
|
95
|
+
the legacy policy. Core would otherwise reject the session with
|
|
96
|
+
`policy_unenforceable`.
|
|
97
|
+
- **Claude native sub-agents on Core sessions.** Core's read-only tool set has
|
|
98
|
+
no `Agent` tool, so a Claude mission on Core sessions cannot start native
|
|
99
|
+
sub-agents. Delegated sub-agents (`subagentRuntime.mode: 'delegated'`) are
|
|
100
|
+
launched by Core, so the missing `Agent` tool does not affect them. Keeping
|
|
101
|
+
`Agent` with read-only tools requires a Core change.
|
|
102
|
+
|
|
103
|
+
## The Flow exception
|
|
104
|
+
|
|
105
|
+
A conversation with an ACTIVE Flow runs its turns in a separate Core session
|
|
106
|
+
(`flow:<flowId>`) whose cwd is the Flow worktree and whose policy is the rail
|
|
107
|
+
write-role level: `permissions: 'bypass'`, default tools (Claude
|
|
108
|
+
`--dangerously-skip-permissions`, Codex `--sandbox danger-full-access`). The
|
|
109
|
+
agent can therefore write, run the typecheck and tests, and install
|
|
110
|
+
dependencies in the worktree without interactive approvals. Long-lived apps
|
|
111
|
+
run as Specrails background processes in the worktree, admitted below the
|
|
112
|
+
Autonomous level after the user's explicit confirmation, and stopped with the
|
|
113
|
+
Flow.
|
|
114
|
+
|
|
115
|
+
The containment is honest but not a sandbox, exactly as for rails: the cwd,
|
|
116
|
+
the persona rule never to touch anything outside the worktree, and the
|
|
117
|
+
worktree's own branch (Flow delivers only that worktree). Details:
|
|
118
|
+
[Flow mode › Permissions](flow-mode.md#permissions).
|
|
119
|
+
|
|
120
|
+
Everything in this document still applies to every other mission turn: when
|
|
121
|
+
the Flow is paused or ended, the conversation's next turn is a normal
|
|
122
|
+
read-only mission turn again.
|
|
123
|
+
|
|
124
|
+
## Operator features that need no native write tool
|
|
125
|
+
|
|
126
|
+
Everything the operator manual asks for already goes through MCP on the server
|
|
127
|
+
side. That includes code reads (`specrails_code`), git and gh diagnostics
|
|
128
|
+
(`specrails_git`), background applications and their logs
|
|
129
|
+
(`specrails_jobs background_*`), rails, specs, recovery patches
|
|
130
|
+
(`specrails_recovery`) and support. The manual no longer promises a raw shell.
|
|
131
|
+
It says that a shell, if one exists, is only for read-only git/gh diagnostics.
|
|
132
|
+
|
|
133
|
+
## Verification
|
|
134
|
+
|
|
135
|
+
- Unit and integration tests:
|
|
136
|
+
[`mission-tool-policy.test.ts`](../../server/modules/missions/runtime/mission-tool-policy.test.ts),
|
|
137
|
+
the read-only block of
|
|
138
|
+
[`agent-chat-manager.test.ts`](../../server/modules/missions/runtime/agent-chat-manager.test.ts),
|
|
139
|
+
the read-only block of
|
|
140
|
+
[`mission-core-sessions.test.ts`](../../server/modules/missions/runtime/mission-core-sessions.test.ts),
|
|
141
|
+
adapter argv tests, and the Gemini policy tests in
|
|
142
|
+
[`agent-mcp-config.test.ts`](../../server/agent-mcp-config.test.ts).
|
|
143
|
+
- Live smokes (2026-10-21) used the adapter-built argv against a temporary
|
|
144
|
+
directory with a stub MCP server.
|
|
145
|
+
- **Claude 2.1.299 (haiku):** the MCP call ran, `secret.txt` was read, and no
|
|
146
|
+
file was created, including by a sub-agent.
|
|
147
|
+
- **Codex 0.160.1:** `exec --sandbox read-only` with the `-c mcp_servers.*`
|
|
148
|
+
overrides. The MCP call ran, the read succeeded, and the write was refused
|
|
149
|
+
by the sandbox.
|
|
150
|
+
- **Gemini 0.49.0:** plan mode with the generated policy. The MCP call ran,
|
|
151
|
+
the read succeeded, and `write_file` was denied by policy. Without the
|
|
152
|
+
policy, the MCP tool was absent.
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
# Modal standard
|
|
2
|
+
|
|
3
|
+
Every modal surface in the client follows one standard: one primitive, five
|
|
4
|
+
sizes, one anatomy, one scrim, named layers and one entrance animation. The
|
|
5
|
+
primitive lives in [`client/src/components/ui/dialog.tsx`](../../client/src/components/ui/dialog.tsx);
|
|
6
|
+
the layer scale lives in [`client/src/lib/layers.ts`](../../client/src/lib/layers.ts).
|
|
7
|
+
Tests for the contract: [`dialog-standard.test.tsx`](../../client/src/components/ui/__tests__/dialog-standard.test.tsx),
|
|
8
|
+
[`dialog-movable.test.tsx`](../../client/src/components/ui/__tests__/dialog-movable.test.tsx)
|
|
9
|
+
and the source guard [`modal-standard-guard.test.ts`](../../client/src/components/ui/__tests__/modal-standard-guard.test.ts).
|
|
10
|
+
|
|
11
|
+
## When a modal is the right pattern
|
|
12
|
+
|
|
13
|
+
Use a modal for a decision (confirm, launch) or a protected, focused task
|
|
14
|
+
(Add Spec, Settings). Do not use one for something a user consults while
|
|
15
|
+
working.
|
|
16
|
+
|
|
17
|
+
| Surface | Pattern |
|
|
18
|
+
|---|---|
|
|
19
|
+
| Confirms, launch dialogs, Add Spec | Modal |
|
|
20
|
+
| Settings | Modal (AGENTS.md: app settings are a modal; project settings are a route in board mode and `ProjectSettingsDialog` in Agent Mode, which has no routed dashboard) |
|
|
21
|
+
| Spec detail, Job detail | Entity modal (`layer="entity"`), resizable, geometry persisted |
|
|
22
|
+
| Loops, Plugins, Review packet | `fullscreen` modal with the standard header and a visible close. Candidates for routes. |
|
|
23
|
+
| Docs, Analytics, agent activity log, background-process logs | `workspace` modal today. These are read while working, so they are candidates for a right-side sheet. |
|
|
24
|
+
| Move to rail, Subscription usage, floating agent chat | Non-modal popovers and panels. Not dialogs. |
|
|
25
|
+
|
|
26
|
+
The route and sheet conversions are deliberately not done yet. Each needs its
|
|
27
|
+
own plan that keeps deep links working (`lib/global-route-mode-transition.ts`
|
|
28
|
+
and the Mission-mode review entry).
|
|
29
|
+
|
|
30
|
+
## Primitive
|
|
31
|
+
|
|
32
|
+
Every modal is a Radix dialog, either through `DialogContent` or, for full-screen
|
|
33
|
+
shells with custom key handling, through `DialogPrimitive.Content` wrapped in
|
|
34
|
+
`DialogLayerProvider`. Radix provides the focus trap, initial focus, Escape
|
|
35
|
+
stacking (only the top layer closes), `aria-labelledby`/`aria-describedby` and
|
|
36
|
+
`hideOthers`, so the page behind is inert. Do not hand-roll
|
|
37
|
+
`createPortal(<div role="dialog" aria-modal>)`. The source guard test rejects
|
|
38
|
+
new hand-rolled `aria-modal` dialogs outside `components/ui`.
|
|
39
|
+
|
|
40
|
+
Focus return is built in. On close, `DialogContent` refocuses the element that
|
|
41
|
+
had focus at open. If that node was remounted while the modal was open (sidebar
|
|
42
|
+
buttons are), it refocuses the live element with the same `id`, `data-testid`
|
|
43
|
+
or `aria-label`. Give modal triggers one of these.
|
|
44
|
+
|
|
45
|
+
## Sizes
|
|
46
|
+
|
|
47
|
+
Pass `size` to `DialogContent`. Call sites do not set `max-w-*`, `w-*` or `h-*`.
|
|
48
|
+
|
|
49
|
+
| Size | Geometry | Use |
|
|
50
|
+
|---|---|---|
|
|
51
|
+
| `confirm` | `max-w-md` (448px), auto height | All confirms |
|
|
52
|
+
| `form` | `max-w-lg` (512px), auto height | Short forms and pickers |
|
|
53
|
+
| `wide` (default) | `max-w-2xl` (672px), auto height up to 85dvh | Previews and multi-section forms |
|
|
54
|
+
| `workspace` | `92vw × 82vh`, `max-w-5xl` | Settings, Project settings, Docs, Analytics, Add Spec, Agents catalog, background-process logs |
|
|
55
|
+
| `fullscreen` | `96vw × 92vh` | Loops, Plugins, Review packet, Runtime graph |
|
|
56
|
+
|
|
57
|
+
Below 640px every size fills the window minus a 16px gutter, and `workspace`
|
|
58
|
+
and `fullscreen` fill it minus 8px. Heights are capped below the desktop title
|
|
59
|
+
bar (`lib/modal-safe-area.ts`).
|
|
60
|
+
|
|
61
|
+
## Anatomy
|
|
62
|
+
|
|
63
|
+
```tsx
|
|
64
|
+
<Dialog open={open} onOpenChange={setOpen}>
|
|
65
|
+
<DialogContent size="form">
|
|
66
|
+
<DialogHeader icon={<Rocket />} actions={/* optional */}>
|
|
67
|
+
<DialogTitle>Launch all specs?</DialogTitle>
|
|
68
|
+
<DialogDescription>Each spec starts on its own rail.</DialogDescription>
|
|
69
|
+
</DialogHeader>
|
|
70
|
+
<DialogBody>…</DialogBody>
|
|
71
|
+
<DialogFooter start={<CostEstimate />}>
|
|
72
|
+
<Button variant="ghost" onClick={cancel}>Cancel</Button>
|
|
73
|
+
<Button ref={primaryRef}>Launch 3 specs</Button>
|
|
74
|
+
</DialogFooter>
|
|
75
|
+
</DialogContent>
|
|
76
|
+
</Dialog>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
- The panel is a flex column with no padding. The header and footer never
|
|
80
|
+
scroll. `DialogBody` is the only scrolling region.
|
|
81
|
+
- **Header** (`px-5 py-4`, bottom border): optional 16px accent icon, then the
|
|
82
|
+
title (16px semibold) and an optional description (13px muted, at most two
|
|
83
|
+
lines), then right-aligned actions, then the close button.
|
|
84
|
+
- **Close**: one 28×28 button with a 16px icon. It sits in the header row, or
|
|
85
|
+
top-right when a surface renders no header. Hide it
|
|
86
|
+
(`showCloseButton={false}`) only when the footer has an explicit Cancel or
|
|
87
|
+
Close.
|
|
88
|
+
- **Footer** (`px-5 py-3`, top border): the `start` slot holds left-aligned
|
|
89
|
+
secondary info or a destructive action such as Delete. On the right, Cancel
|
|
90
|
+
(`variant="ghost"`) comes first, then the primary action (`default`, or
|
|
91
|
+
`destructive` when it destroys data). Footer buttons use the Button default
|
|
92
|
+
size. On narrow viewports the footer stacks with the primary on top.
|
|
93
|
+
- **Initial focus**: the primary for confirms and launch dialogs
|
|
94
|
+
(`onOpenAutoFocus` → `primaryRef`), the first field for forms. `⌘↵` submits,
|
|
95
|
+
and the primary shows the kbd hint.
|
|
96
|
+
- **Confirms** use `ConfirmDialog` (`components/ui/confirm-dialog.tsx`). It
|
|
97
|
+
takes `tone` (`destructive` by default, `default` for non-destructive
|
|
98
|
+
confirms such as merge or recover), `layer`, `busy`, `confirmDisabled`,
|
|
99
|
+
`secondaryAction` and test ids. Initial focus goes to the confirm button.
|
|
100
|
+
|
|
101
|
+
## Copy
|
|
102
|
+
|
|
103
|
+
The title names the object or the decision ("Discard local changes?"). The
|
|
104
|
+
primary names the verb ("Discard changes"), never "OK" or "Confirm". The
|
|
105
|
+
description states the consequence, not instructions about the UI. Every
|
|
106
|
+
dialog has a `DialogDescription`, either visible or `sr-only`. A dialog that
|
|
107
|
+
truly has none passes `aria-describedby={undefined}`.
|
|
108
|
+
|
|
109
|
+
## Layers
|
|
110
|
+
|
|
111
|
+
| Layer | z | Members |
|
|
112
|
+
|---|---|---|
|
|
113
|
+
| `base` | 50 | Ordinary dialogs (default) |
|
|
114
|
+
| floating chat | 60 (grips 61) | Floating agent panel |
|
|
115
|
+
| `entity` | 65 | Spec detail, Job detail, compare, agent activity log, loop and blueprint previews |
|
|
116
|
+
| `stacked` | 70 | Anything opened from inside an entity modal or the floating panel: Flow prompts, SMASH, nested confirms |
|
|
117
|
+
| dock | 75 | Minimized chats dock (stays clickable over modals) |
|
|
118
|
+
| `capture` | 80 | Browser capture, web view, native browser pane, background-process logs, runtime graph |
|
|
119
|
+
| `media` | 100 | Lightboxes |
|
|
120
|
+
| toast | 110 | Toasts. Sonner portals to `<body>` (its own rule in `globals.css` pins it even higher) and switches to top-right while a modal is open, so a toast never covers a modal footer |
|
|
121
|
+
|
|
122
|
+
Pass `layer` to `DialogContent` (or to `ConfirmDialog`). A dialog rendered
|
|
123
|
+
inside another dialog inherits a layer automatically. Inside an `entity` modal
|
|
124
|
+
it climbs to `stacked`. Inside any other layer it stays on that layer, and
|
|
125
|
+
portal order puts the newer dialog on top. Do not write `z-[NN]` on overlay
|
|
126
|
+
surfaces. Use `DIALOG_LAYER_CLASS` / `LAYER_CLASS` from `lib/layers.ts`.
|
|
127
|
+
|
|
128
|
+
Two consequences of Radix modality to know about:
|
|
129
|
+
|
|
130
|
+
- While any modal is open, Radix sets `pointer-events: none` on `<body>` and
|
|
131
|
+
hides everything outside the panel from assistive tech. The minimized chats
|
|
132
|
+
dock paints above modals (layer 75) but is not clickable until the modal
|
|
133
|
+
closes. Making it interactive would need an outside-interaction allowance in
|
|
134
|
+
`dialog.tsx`.
|
|
135
|
+
- A raw-primitive surface (`DialogPrimitive.Content`) only gets automatic focus
|
|
136
|
+
return when it captures the opener itself. Spec detail, Job detail, the
|
|
137
|
+
lightbox (`MediaLightbox` in `features/chat/components/AttachmentPreviewLightbox.tsx`)
|
|
138
|
+
and the browser-capture shell (`CaptureDialogShell` in
|
|
139
|
+
`features/browser/components/browser-capture/NativeBrowserPane.tsx`) do.
|
|
140
|
+
|
|
141
|
+
## Shared surfaces
|
|
142
|
+
|
|
143
|
+
- `ConfirmDialog` (`components/ui/confirm-dialog.tsx`) for every confirm.
|
|
144
|
+
- `MediaLightbox` for every image/PDF preview (media layer, media scrim).
|
|
145
|
+
- `CaptureDialogShell` for the browser capture, web view and native browser
|
|
146
|
+
pane (capture layer). It forwards Tab/Space/arrow keys to the remote page
|
|
147
|
+
(`forwardsKey`) and only closes on a press on the scrim itself.
|
|
148
|
+
|
|
149
|
+
## Scrim, surface, motion
|
|
150
|
+
|
|
151
|
+
- Scrim: `bg-scrim backdrop-blur-sm`. `--color-scrim` is `rgb(0 0 0 / .6)` on
|
|
152
|
+
dark themes and `rgb(15 15 40 / .35)` on Aurora Light. Lightboxes use
|
|
153
|
+
`bg-scrim-media` (`rgb(0 0 0 / .85)`).
|
|
154
|
+
- Surface: `bg-popover`, `border-border/30`, `rounded-xl`, `shadow-xl`.
|
|
155
|
+
`shadow-2xl` is reserved for the floating chat. Modals do not use
|
|
156
|
+
`glass-card`.
|
|
157
|
+
- Motion: one entrance, fade plus 0.98 scale over 180ms with an exponential
|
|
158
|
+
ease-out, and a 120ms exit. Both are off under `prefers-reduced-motion`. The
|
|
159
|
+
`modal-panel` and `modal-scrim` classes in `globals.css` apply them through
|
|
160
|
+
the standalone `scale` property, so they compose with Tailwind v4's
|
|
161
|
+
`translate` centering. Non-Radix surfaces opt in with `modal-enter`.
|
|
162
|
+
|
|
163
|
+
## Resizing
|
|
164
|
+
|
|
165
|
+
Only the `workspace` size is resizable (`movableResizable`), plus Spec detail
|
|
166
|
+
and Job detail, which own their geometry. The modal stays centered and resizes
|
|
167
|
+
from corner and edge grips. There is no whole-panel drag. The grips render
|
|
168
|
+
inside the panel (`ResizeGrips placement="inset"`), so they paint above the
|
|
169
|
+
panel's own scrim and sit inside the focus trap, which keeps keyboard resize
|
|
170
|
+
(arrows, Shift for large steps, Home/End, 0 to reset) reachable. Pass
|
|
171
|
+
`persistKey="specrails.modal.<surface>"` so a workspace remembers its size.
|
|
172
|
+
Confirms, forms and previews are never movable. Below 900px the grips are
|
|
173
|
+
hidden.
|
|
174
|
+
|
|
175
|
+
## Type floor
|
|
176
|
+
|
|
177
|
+
The minimum for any text run inside a modal is 12px. 11px is allowed only on
|
|
178
|
+
`h-5` chips and pills at ≥70% foreground, and those carry a `data-chip`
|
|
179
|
+
attribute (see [mission rail cards](mission-rail-cards.md)). Chart axes are
|
|
180
|
+
12px. The guard test rejects `text-[9px]`, `text-[10px]` and `text-[10.5px]`
|
|
181
|
+
in modal files.
|