specrails-desktop 2.64.1 → 2.65.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/openspec-shim.js +1 -1
- 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
package/server/dist/mcp/guide.js
CHANGED
|
@@ -197,7 +197,7 @@ heading inside the description); \`labels\`; \`priority\`. Spec content is Engli
|
|
|
197
197
|
larger sets across several rails (they run in parallel) or sequential
|
|
198
198
|
launches. There is no separate batch mode.
|
|
199
199
|
- Freestyle: sends a free-form autonomous prompt to a capable provider — one
|
|
200
|
-
job per ticket; Claude and
|
|
200
|
+
job per ticket; Claude, Codex, Gemini, Kimi and local engines; \`model\` picker. Claude additionally
|
|
201
201
|
supports optional \`interactive\` in-job chat (settle with
|
|
202
202
|
\`specrails_jobs(finalize)\`). To launch it through the API, pass the canonical mode value \`freestyle\`. In user-facing language, call
|
|
203
203
|
the feature "Freestyle".
|
|
@@ -303,7 +303,7 @@ list/get/spending/watch = read; from_prompt, update, set_tickets,
|
|
|
303
303
|
create_rail, plugin install, Jira connect = write; spec create/generate, rail
|
|
304
304
|
launch/launch_all, chat send, job spawn = ai-spawn; spec delete, rail stop, job
|
|
305
305
|
purge, plugin uninstall, Jira disconnect, project unregister = destructive.
|
|
306
|
-
\`specrails_support(triage/core_update_status/core_update_check)\` is read;
|
|
306
|
+
\`specrails_support(triage/core_update_status/core_update_check/api_meta)\` is read;
|
|
307
307
|
\`specrails_support(core_update_apply)\` is ai-spawn because it runs longer
|
|
308
308
|
global update work. Note the
|
|
309
309
|
embedded spec-refinement happy path needs only read + write when using a fresh
|
|
@@ -314,7 +314,7 @@ can run Contract Refine require AI-spawn, including Explore conversions.
|
|
|
314
314
|
|
|
315
315
|
- Installed providers are per-project; AI-spawning calls may pick any installed
|
|
316
316
|
one (\`aiEngine\`); rails carry a per-rail engine.
|
|
317
|
-
- Claude
|
|
317
|
+
- Claude, Codex, Gemini, Kimi and local engines support Freestyle mode (pass the canonical
|
|
318
318
|
API value \`freestyle\`; call the feature "Freestyle" to users). Persistent
|
|
319
319
|
interactive jobs remain Claude-only.
|
|
320
320
|
- Kimi prompt mode cannot enforce a no-tools or read-only boundary. Consequently
|
|
@@ -351,7 +351,10 @@ can run Contract Refine require AI-spawn, including Explore conversions.
|
|
|
351
351
|
Truncated scans or skipped files do not prove that a symbol is absent.
|
|
352
352
|
- **Run failures & recovery**: Start with \`specrails_jobs(runtime_diagnose, jobId)\`
|
|
353
353
|
for original scope, completed steps, repeated failures and receipt validity.
|
|
354
|
-
|
|
354
|
+
Its \`reviewer\` field is the latest reviewer verdict of the run (approved,
|
|
355
|
+
score, bounded issues, summary lines, failing host checks and, for Flow →
|
|
356
|
+
Spec, derivation coverage with unexplained files); read it to explain why a
|
|
357
|
+
review said no — never present that as a hypothesis. Availability of Resume is not a repair recommendation. After the same failure,
|
|
355
358
|
identify and validate a changed precondition before retrying; do not default
|
|
356
359
|
to Relaunch. Evidence can be paged with evidenceId/section/sourceId/cursor/limit.
|
|
357
360
|
\`specrails_jobs(runtime_runs, jobId)\` reads
|
|
@@ -382,6 +385,13 @@ can run Contract Refine require AI-spawn, including Explore conversions.
|
|
|
382
385
|
economy. TWO budget knobs exist: \`specrails_analytics(budget_set,
|
|
383
386
|
dailyBudgetUsd)\` is PER-PROJECT and pauses that project's queue when
|
|
384
387
|
exceeded; \`specrails_settings(set, dailyBudgetUsd)\` is the APP-WIDE budget.
|
|
388
|
+
Both also take \`weeklyBudgetUsd\`, \`monthlyBudgetUsd\` and \`runCapUsd\` (a
|
|
389
|
+
per-run soft cap: the run pauses \`budget_paused\` when its own cost reaches it).
|
|
390
|
+
\`decision_times\` reports median/p90 time to decision and to merge per
|
|
391
|
+
project and loop; \`unknown\` counts missing instants, never zero durations.
|
|
392
|
+
\`loop_economics\` compares loops: delivered/merged/discarded, cost per
|
|
393
|
+
delivery (authoritative vs estimated), rounds, escaped defects
|
|
394
|
+
(\`metadata.regressionOf\` on bug tickets); nulls mean no data, not zero.
|
|
385
395
|
- **Plugins** (\`specrails_plugins\`): per-project MCP integrations; \`preview\`
|
|
386
396
|
the diff before \`install\`; a degraded plugin never blocks rail launches.
|
|
387
397
|
- **Profiles** (\`specrails_agents\`): per-project agent chains; the baseline
|
|
@@ -404,9 +414,9 @@ can run Contract Refine require AI-spawn, including Explore conversions.
|
|
|
404
414
|
a core problem and must not trigger \`specrails_setup(install)\`. If global
|
|
405
415
|
core is stale, offer \`core_update_check\` + \`core_update_apply\`. If global
|
|
406
416
|
core is current but a real job still reports missing core definitions, ask for
|
|
407
|
-
the job error/diagnostic and
|
|
408
|
-
|
|
409
|
-
|
|
417
|
+
the job error/diagnostic and report a framework-loading bug. Core 6 has no
|
|
418
|
+
standalone \`update\` command: Core updates go through \`core_update_check\`
|
|
419
|
+
+ \`core_update_apply\` (humans: Settings → Updates in the app).
|
|
410
420
|
- **Loops lifecycle** (\`specrails_loops\`): Draft → \`publish\` (graph-validated)
|
|
411
421
|
→ runnable; \`update\` reverts to Draft and returns 409 while running;
|
|
412
422
|
\`preview\` dry-runs token resolution without spawning; constants are shared
|
|
@@ -103,7 +103,7 @@ function agentsTools() {
|
|
|
103
103
|
.optional()
|
|
104
104
|
.describe('Explicit profile name to preview in `resolve` (omit to resolve the project default)'),
|
|
105
105
|
profile: zod_1.z
|
|
106
|
-
.record(zod_1.z.unknown())
|
|
106
|
+
.record(zod_1.z.string(), zod_1.z.unknown())
|
|
107
107
|
.optional()
|
|
108
108
|
.describe('Full Profile body for create/update: { schemaVersion:1, name, description?, provider?, orchestrator:{model}, agents:[], routing:[] }'),
|
|
109
109
|
windowDays: zod_1.z.number().int().optional().describe('analytics time window in days (1-365, default 30)'),
|
|
@@ -32,14 +32,16 @@ function analyticsTools() {
|
|
|
32
32
|
'ticket_summary (per-ticket cost aggregate across all surfaces), ' +
|
|
33
33
|
'export (download summary/raw analytics as CSV or JSON — file download, returns a note + headers), ' +
|
|
34
34
|
'budget_get (daily budget, per-job threshold, cost-today, utilization %), ' +
|
|
35
|
-
'budget_set (write — set/clear daily budget cap + per-job cost threshold; a too-low budget pauses the job queue)
|
|
35
|
+
'budget_set (write — set/clear daily budget cap + per-job cost threshold; a too-low budget pauses the job queue), ' +
|
|
36
|
+
'decision_times (time to decision and time to merge per delivery: median/p90 ms per project and per loop, from when the delivery became reviewable; counts measured/pending/unknown — unknown is never zero; honours period/from/to only), ' +
|
|
37
|
+
'loop_economics (per loop over the period: delivered (reached on_review or beyond) / merged / discarded counts, discardRate, cost per delivery split authoritative vs estimated with unpriced deliveries excluded, decision times, review/fixer rounds per delivery from loop_step events, escapedDefects from tickets linked with metadata.regressionOf; requirementsDemonstrated {demonstrated,total,deliveries} sums the spec traces of delivered deliveries (Core specTrace) and is null when none carries one; triageAccuracy is null until its producer exists; hasData=false loops have no data — unknown is never zero; honours period/from/to only). ' +
|
|
36
38
|
'Prefer spending over invocations/export-raw for token economy. ' +
|
|
37
39
|
'Filters: period(7d|30d|90d|all|custom), from/to (ISO, required for custom), surface[], model[], modelProvider[] (index-aligned to model), provider[], status(success|failed|aborted), minCostUsd, ticketId, tzOffsetMinutes(±840 — pass the user local offset so "today" lines up), sortBy.',
|
|
38
40
|
hintTier: 'read',
|
|
39
41
|
tier: (a) => (a.action === 'budget_set' ? 'write' : 'read'),
|
|
40
42
|
inputSchema: {
|
|
41
43
|
action: zod_1.z
|
|
42
|
-
.enum(['spending', 'invocations', 'ticket_summary', 'export', 'budget_get', 'budget_set'])
|
|
44
|
+
.enum(['spending', 'invocations', 'ticket_summary', 'export', 'budget_get', 'budget_set', 'decision_times', 'loop_economics'])
|
|
43
45
|
.describe('Operation to perform'),
|
|
44
46
|
projectId: zod_1.z.string().optional().describe('Project id (defaults to the active project)'),
|
|
45
47
|
// ─── Filters shared by spending / invocations / export ────────────────
|
|
@@ -97,6 +99,9 @@ function analyticsTools() {
|
|
|
97
99
|
.nullable()
|
|
98
100
|
.optional()
|
|
99
101
|
.describe('budget_set: per-job cost alert threshold USD (>0); null clears it'),
|
|
102
|
+
weeklyBudgetUsd: zod_1.z.number().nullable().optional().describe('budget_set: PER-PROJECT weekly cap USD (>0, week starts Monday local); null clears it. Enforced by the same gate as the daily budget.'),
|
|
103
|
+
monthlyBudgetUsd: zod_1.z.number().nullable().optional().describe('budget_set: PER-PROJECT monthly cap USD (>0, local calendar month); null clears it.'),
|
|
104
|
+
runCapUsd: zod_1.z.number().nullable().optional().describe('budget_set: per-run soft cap USD (>0): a loop run pauses (budget_paused) when its provider-reported cost reaches it and resumes after Continue/Raise. null clears it.'),
|
|
100
105
|
},
|
|
101
106
|
async handler(ctx, args) {
|
|
102
107
|
const base = (0, types_1.projectPath)(ctx, args.projectId);
|
|
@@ -118,6 +123,10 @@ function analyticsTools() {
|
|
|
118
123
|
switch (action) {
|
|
119
124
|
case 'spending':
|
|
120
125
|
return (0, types_1.apiCall)(ctx, 'GET', `${base}/spending${buildQuery(filters)}`);
|
|
126
|
+
case 'decision_times':
|
|
127
|
+
return (0, types_1.apiCall)(ctx, 'GET', `${base}/analytics/decision-times${buildQuery({ period: filters.period, from: filters.from, to: filters.to })}`);
|
|
128
|
+
case 'loop_economics':
|
|
129
|
+
return (0, types_1.apiCall)(ctx, 'GET', `${base}/analytics/loop-economics${buildQuery({ period: filters.period, from: filters.from, to: filters.to })}`);
|
|
121
130
|
case 'invocations':
|
|
122
131
|
return (0, types_1.apiCall)(ctx, 'GET', `${base}/invocations${buildQuery({
|
|
123
132
|
...filters,
|
|
@@ -154,8 +163,11 @@ function analyticsTools() {
|
|
|
154
163
|
body.dailyBudgetUsd = args.dailyBudgetUsd;
|
|
155
164
|
if ('jobCostThresholdUsd' in args)
|
|
156
165
|
body.jobCostThresholdUsd = args.jobCostThresholdUsd;
|
|
166
|
+
for (const field of ['weeklyBudgetUsd', 'monthlyBudgetUsd', 'runCapUsd'])
|
|
167
|
+
if (field in args)
|
|
168
|
+
body[field] = args[field];
|
|
157
169
|
if (Object.keys(body).length === 0) {
|
|
158
|
-
throw new Error('budget_set requires dailyBudgetUsd and/or jobCostThresholdUsd (number>0 to set, null to clear).');
|
|
170
|
+
throw new Error('budget_set requires dailyBudgetUsd, weeklyBudgetUsd, monthlyBudgetUsd, runCapUsd and/or jobCostThresholdUsd (number>0 to set, null to clear).');
|
|
159
171
|
}
|
|
160
172
|
return (0, types_1.apiCall)(ctx, 'PATCH', `${base}/budget`, body);
|
|
161
173
|
}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.appTools = appTools;
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
5
|
const desktop_db_1 = require("../../desktop-db");
|
|
6
|
+
const budget_storage_1 = require("../../modules/execution/adapters/budget-storage");
|
|
6
7
|
const mcp_tiers_1 = require("../mcp-tiers");
|
|
7
8
|
const types_1 = require("./types");
|
|
8
9
|
// App-level settings the MCP may read/write. NOTE: the MCP enable flag and the
|
|
@@ -43,6 +44,9 @@ function appTools() {
|
|
|
43
44
|
.nullable()
|
|
44
45
|
.optional()
|
|
45
46
|
.describe('APP-WIDE daily budget cap USD across all projects; null clears it. Per-project caps live in specrails_analytics(budget_set).'),
|
|
47
|
+
weeklyBudgetUsd: zod_1.z.number().min(0).nullable().optional().describe('APP-WIDE weekly cap USD across all projects (week starts Monday local); null clears it.'),
|
|
48
|
+
monthlyBudgetUsd: zod_1.z.number().min(0).nullable().optional().describe('APP-WIDE monthly cap USD across all projects (local calendar month); null clears it.'),
|
|
49
|
+
runCapUsd: zod_1.z.number().min(0).nullable().optional().describe('APP-WIDE default per-run soft cap USD: a loop run pauses when its provider-reported cost reaches it; null clears it.'),
|
|
46
50
|
costAlertThresholdUsd: zod_1.z.number().min(0).nullable().optional(),
|
|
47
51
|
projectId: zod_1.z.string().optional().describe('get: also report this project\'s "Allow sub-agents" setting'),
|
|
48
52
|
summaryLanguage: zod_1.z
|
|
@@ -81,6 +85,9 @@ function appTools() {
|
|
|
81
85
|
theme,
|
|
82
86
|
language: (0, desktop_db_1.getDesktopSetting)(db, 'ui_language') ?? null,
|
|
83
87
|
dailyBudgetUsd: num((0, desktop_db_1.getDesktopSetting)(db, 'desktop_daily_budget_usd')),
|
|
88
|
+
weeklyBudgetUsd: num((0, desktop_db_1.getDesktopSetting)(db, budget_storage_1.DESKTOP_CAP_KEYS.week)),
|
|
89
|
+
monthlyBudgetUsd: num((0, desktop_db_1.getDesktopSetting)(db, budget_storage_1.DESKTOP_CAP_KEYS.month)),
|
|
90
|
+
runCapUsd: num((0, desktop_db_1.getDesktopSetting)(db, budget_storage_1.DESKTOP_CAP_KEYS.run)),
|
|
84
91
|
costAlertThresholdUsd: num((0, desktop_db_1.getDesktopSetting)(db, 'cost_alert_threshold_usd')),
|
|
85
92
|
// Code Explorer settings (same keys + defaults as GET /api/code-explorer-settings)
|
|
86
93
|
summaryLanguage: (0, desktop_db_1.getDesktopSetting)(db, 'summary_language') === 'es' ? 'es' : 'en',
|
|
@@ -112,6 +119,12 @@ function appTools() {
|
|
|
112
119
|
writeNumOrClear(db, 'desktop_daily_budget_usd', args.dailyBudgetUsd);
|
|
113
120
|
changed.push('dailyBudgetUsd');
|
|
114
121
|
}
|
|
122
|
+
for (const [field, key] of [['weeklyBudgetUsd', budget_storage_1.DESKTOP_CAP_KEYS.week], ['monthlyBudgetUsd', budget_storage_1.DESKTOP_CAP_KEYS.month], ['runCapUsd', budget_storage_1.DESKTOP_CAP_KEYS.run]]) {
|
|
123
|
+
if (args[field] !== undefined) {
|
|
124
|
+
writeNumOrClear(db, key, args[field]);
|
|
125
|
+
changed.push(field);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
115
128
|
if (args.costAlertThresholdUsd !== undefined) {
|
|
116
129
|
writeNumOrClear(db, 'cost_alert_threshold_usd', args.costAlertThresholdUsd);
|
|
117
130
|
changed.push('costAlertThresholdUsd');
|
|
@@ -170,5 +183,5 @@ function writeNumOrClear(db, key, value) {
|
|
|
170
183
|
}
|
|
171
184
|
async function projectSubagentSettings(ctx, projectId) {
|
|
172
185
|
const settings = (await (0, types_1.apiCall)(ctx, 'GET', `/projects/${encodeURIComponent(projectId)}/settings`));
|
|
173
|
-
return { projectAllowSubagents: settings.allowSubagents
|
|
186
|
+
return { projectAllowSubagents: settings.allowSubagents !== false, projectSubagentRuntime: settings.subagentRuntime ?? null };
|
|
174
187
|
}
|
|
@@ -62,7 +62,7 @@ function chatTools() {
|
|
|
62
62
|
provider: zod_1.z.string().optional().describe('AI engine for create — must be installed on the project (alias of aiEngine); defaults to the primary provider'),
|
|
63
63
|
model: zod_1.z.string().optional().describe('Model for create/update — must be valid for the conversation\'s provider'),
|
|
64
64
|
contextScope: zod_1.z
|
|
65
|
-
.record(zod_1.z.unknown())
|
|
65
|
+
.record(zod_1.z.string(), zod_1.z.unknown())
|
|
66
66
|
.optional()
|
|
67
67
|
.describe('Explore-only context scope flags for create: {full: repo-wide investigation, specrails: specs context, ' +
|
|
68
68
|
'openspec: openspec context, mcp: load project .mcp.json (spawns from repo cwd, slower), ' +
|
|
@@ -43,6 +43,7 @@ function envTools() {
|
|
|
43
43
|
description: 'Read, scan, and configure the per-project environment variable NAME allowlist used for rail jobs and isolated loop worktrees. ' +
|
|
44
44
|
'Values are never read or stored by this tool; runs read them from the server environment and can recover configured names from the login shell when the desktop process is missing them. scan inspects safe repo config files such as package.json, .npmrc, .yarnrc.yml and pnpm-workspace.yaml for ${VAR} / process.env.VAR references and private scoped package auth hints. ' +
|
|
45
45
|
'Each configured name reports a value-free resolution status: inherited, recovered (from the login shell), not-defined, probe-timeout or probe-failed. ' +
|
|
46
|
+
'get also reports the project agentEnvMode (inherit | minimal); that mode is read-only here so an agent cannot widen its own environment. ' +
|
|
46
47
|
'Actions: get (read current names and their statuses), status (statuses only), recheck (probe the login shell now, then return statuses), scan (discover candidates), set (write names), auto_configure (scan then merge discovered names into settings).',
|
|
47
48
|
hintTier: 'read',
|
|
48
49
|
tier: (args) => (args.action === 'set' || args.action === 'auto_configure' ? 'write' : 'read'),
|
|
@@ -58,13 +59,14 @@ function envTools() {
|
|
|
58
59
|
if (action === 'get') {
|
|
59
60
|
const settings = await (0, types_1.apiCall)(ctx, 'GET', `${base}/settings`);
|
|
60
61
|
const names = Array.isArray(settings.worktreeEnvPassthrough) ? settings.worktreeEnvPassthrough : [];
|
|
62
|
+
const agentEnvMode = settings.agentEnvMode === 'minimal' ? 'minimal' : 'inherit';
|
|
61
63
|
// Statuses are best-effort: an older server without the route still answers names.
|
|
62
64
|
try {
|
|
63
65
|
const { statuses } = sanitizeStatus(await (0, types_1.apiCall)(ctx, 'GET', `${base}/env-passthrough/status`));
|
|
64
|
-
return { names, statuses };
|
|
66
|
+
return { names, agentEnvMode, statuses };
|
|
65
67
|
}
|
|
66
68
|
catch {
|
|
67
|
-
return { names };
|
|
69
|
+
return { names, agentEnvMode };
|
|
68
70
|
}
|
|
69
71
|
}
|
|
70
72
|
if (action === 'status') {
|
|
@@ -1,10 +1,64 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.activeFlowWorkspace = activeFlowWorkspace;
|
|
3
4
|
exports.jobsTools = jobsTools;
|
|
4
5
|
const zod_1 = require("zod");
|
|
5
6
|
const types_1 = require("./types");
|
|
6
7
|
const transient_children_1 = require("../../transient-children");
|
|
7
8
|
const background_process_service_1 = require("../../modules/terminals/runtime/background-process-service");
|
|
9
|
+
const app_urls_1 = require("../../modules/terminals/runtime/app-urls");
|
|
10
|
+
const project_repositories_1 = require("../../project-repositories");
|
|
11
|
+
const APP_URLS_HINT = 'appUrls are the addresses this process announced. Give the user each as a clickable markdown link: local opens on this computer; network opens from a phone or another device on the same Wi-Fi/VPN. No network URL means the server only listens on this computer (it was started without its host/LAN flag).';
|
|
12
|
+
const FLOW_APP_HINT = 'Started in the Flow worktree. Read background_logs now for the listening URL or a startup failure, then give the user the appUrls as clickable links. The Flow bar shows Preview and Stop while it runs; Specrails stops it when the Flow is paused, discarded or handed off.';
|
|
13
|
+
/**
|
|
14
|
+
* The ACTIVE Flow of the authenticated conversation in this project, through
|
|
15
|
+
* the project's Flow use cases (bound at composition). A paused or settling
|
|
16
|
+
* Flow, a missing Flow service or a failing lookup all mean "no Flow".
|
|
17
|
+
*/
|
|
18
|
+
function activeFlowWorkspace(projectCtx, conversationId) {
|
|
19
|
+
if (!conversationId)
|
|
20
|
+
return null;
|
|
21
|
+
try {
|
|
22
|
+
const flow = projectCtx.flow?.getByConversation(conversationId);
|
|
23
|
+
if (!flow || flow.state !== 'active' || flow.step !== null || !flow.worktreePath)
|
|
24
|
+
return null;
|
|
25
|
+
// `repositoryId`: the non-primary repository the Flow runs in (absent ⇒ primary).
|
|
26
|
+
return { flowId: flow.id, worktreePath: flow.worktreePath, ...(flow.repositoryId ? { repositoryId: flow.repositoryId } : {}) };
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Entering Flow already granted write and execution in the Flow worktree, so
|
|
34
|
+
* inside an ACTIVE Flow the in-app agent may start (with the user's explicit
|
|
35
|
+
* confirmation) and stop that Flow's background processes below the
|
|
36
|
+
* Autonomous level. Everything else keeps the ladder.
|
|
37
|
+
*/
|
|
38
|
+
function flowBackgroundException(ctx, args) {
|
|
39
|
+
const action = args.action;
|
|
40
|
+
if (action !== 'background_start' && action !== 'background_kill')
|
|
41
|
+
return false;
|
|
42
|
+
if (action === 'background_start' && args.confirmed !== true)
|
|
43
|
+
return false;
|
|
44
|
+
let projectCtx;
|
|
45
|
+
try {
|
|
46
|
+
projectCtx = (0, types_1.requireProject)(ctx, args.projectId);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
const flow = activeFlowWorkspace(projectCtx, ctx.originConversationId);
|
|
52
|
+
if (!flow)
|
|
53
|
+
return false;
|
|
54
|
+
if (action === 'background_start')
|
|
55
|
+
return true;
|
|
56
|
+
const pid = args.pid;
|
|
57
|
+
if (typeof pid !== 'number' || !Number.isSafeInteger(pid) || pid <= 0)
|
|
58
|
+
return false;
|
|
59
|
+
const process = (0, transient_children_1.getBackgroundProcess)(pid, typeof args.processId === 'string' ? args.processId : undefined);
|
|
60
|
+
return process?.flowId === flow.flowId && process.projectId === projectCtx.project.id && process.chatId === ctx.originConversationId;
|
|
61
|
+
}
|
|
8
62
|
function requireFirstPartyConversation(ctx, action) {
|
|
9
63
|
if (!ctx.firstPartyAgent || !ctx.originConversationId) {
|
|
10
64
|
throw new Error(`${action} is available only to an authenticated in-app agent turn.`);
|
|
@@ -28,7 +82,7 @@ function jobsTools() {
|
|
|
28
82
|
title: 'Jobs & Queue',
|
|
29
83
|
description: 'Manage a project\'s AI-pipeline job queue and individual jobs. ' +
|
|
30
84
|
'Actions: list, get, queue, spawn (ai-spawn — enqueues a direct slash-command job in the primary repository only, returns {jobId,position}, async; repositoryId is required for multi-repository projects; use specrails_rails launch for spec implementations or specrails_loops run for coordinated secondary/multi-repository work; from the in-app agent chat the engine defaults to your conversation\'s provider — pass aiEngine to override), ' +
|
|
31
|
-
'background_start (in-app-agent-only destructive shell command tied to the authenticated chat; requires confirmed:true after explicit user confirmation), background_list (read scoped running/recent applications), background_logs (read bounded stdout/stderr and actual lifecycle), background_kill (in-app-agent-only destructive; stopping is not yet stopped), ' +
|
|
85
|
+
'background_start (in-app-agent-only destructive shell command tied to the authenticated chat; requires confirmed:true after explicit user confirmation; inside an active Flow it runs in the Flow worktree, is tagged with the Flow and is allowed below the Autonomous level), background_list (read scoped running/recent applications), background_logs (read bounded stdout/stderr and actual lifecycle), background_kill (in-app-agent-only destructive; stopping is not yet stopped; a Flow\'s own processes can be stopped from that Flow below the Autonomous level), ' +
|
|
32
86
|
'cancel (destructive — requests cancellation of a running/queued job; it does not delete terminal history), ' +
|
|
33
87
|
'purge (destructive — bulk-delete persisted job rows in a date range), ' +
|
|
34
88
|
'pause / resume (queue), reorder (queued-job order), priority (change a queued job\'s priority), ' +
|
|
@@ -39,14 +93,15 @@ function jobsTools() {
|
|
|
39
93
|
'interactive_turn (ai-spawn — send a steering prompt to any running interactive job; claude jobs are interactive by default), ' +
|
|
40
94
|
'finalize (settle a running interactive job now — Freestyle jobs otherwise wait for it, others auto-settle), ' +
|
|
41
95
|
'runtime_runs (read the programmatic runtime state of jobId — or every run when omitted — status, nextStep, canResume, recoverableSteps, pendingApproval, pendingQuestion; THIS is how you learn why a run failed and what recovery it offers), ' +
|
|
42
|
-
'runtime_diagnose (read-only recovery assessment for jobId: original scope, completed steps, repeated failures
|
|
43
|
-
'runtime_evidence (read the durable runtime evidence of jobId; page with evidenceId/section/sourceId/cursor/limit), ' +
|
|
96
|
+
'runtime_diagnose (read-only recovery assessment for jobId: original scope, completed steps, repeated failures, verification invalidation reasons and `reviewer` — the latest reviewer verdict: approved, score, issues, summary, failing host checks, Flow → Spec derivation coverage; use before recommending retry or relaunch and to explain a rejected review), ' +
|
|
97
|
+
'runtime_evidence (read the durable runtime evidence of jobId; the overview page also carries `reviewer`; page with evidenceId/section/sourceId/cursor/limit), ' +
|
|
44
98
|
'runtime_steer (write — queue steeringText in an engine v2 run with a stable requestId; acceptance is not consumption; inspect runtime_runs steering receipts), ' +
|
|
45
99
|
'runtime_resume (ai-spawn — continue a resumable run: optional approve/recover/invalidate step-id lists + answer for a pending question; act ONLY after the user confirmed on the card), ' +
|
|
46
100
|
'runtime_recover (ai-spawn — shorthand for runtime_resume with recover:[stepIds] over the recoverable steps), ' +
|
|
47
101
|
'runtime_approve (write — shorthand for runtime_resume with approve:[stepId] for a pending approval), ' +
|
|
48
102
|
'runtime_settle (write — prepare delivery for a succeeded-but-unsettled run), runtime_dismiss (write — dismiss a settled continuation from the rail card), ' +
|
|
49
|
-
'runtime_cancel (destructive — cancel an active runtime continuation)
|
|
103
|
+
'runtime_cancel (destructive — cancel an active runtime continuation), ' +
|
|
104
|
+
'audit (read — what the agents of jobId read, wrote, executed, called over MCP or fetched, as JSONL or CSV via format; omit jobId for a project-wide export bounded by from/to; reads are only as complete as each provider\'s stream).',
|
|
50
105
|
hintTier: 'read',
|
|
51
106
|
tier: (a) => {
|
|
52
107
|
const action = a.action;
|
|
@@ -58,6 +113,7 @@ function jobsTools() {
|
|
|
58
113
|
return 'write';
|
|
59
114
|
return 'read';
|
|
60
115
|
},
|
|
116
|
+
tierException: flowBackgroundException,
|
|
61
117
|
inputSchema: {
|
|
62
118
|
action: zod_1.z
|
|
63
119
|
.enum([
|
|
@@ -97,6 +153,7 @@ function jobsTools() {
|
|
|
97
153
|
'runtime_settle',
|
|
98
154
|
'runtime_dismiss',
|
|
99
155
|
'runtime_cancel',
|
|
156
|
+
'audit',
|
|
100
157
|
])
|
|
101
158
|
.describe('Operation to perform'),
|
|
102
159
|
projectId: zod_1.z.string().optional().describe('Project id (defaults to the active project)'),
|
|
@@ -138,14 +195,14 @@ function jobsTools() {
|
|
|
138
195
|
text: zod_1.z.string().optional().describe('Prompt text for interactive_turn'),
|
|
139
196
|
chatId: zod_1.z.string().optional().describe('Conversation id for background_logs ownership. background_start/background_kill ignore this field and use the authenticated in-app capability.'),
|
|
140
197
|
repositoryId: zod_1.z.string().min(1).optional().describe('spawn/background_start: repository membership ID; required when the project has several repositories. spawn accepts only the primary repository; use specrails_rails launch or specrails_loops run for other repositories.'),
|
|
141
|
-
cwd: zod_1.z.string().optional().describe('Optional cwd for background_start; resolved inside the selected repository root. For tests/dev servers, discover workspacePaths with specrails_projects get and pass the intended code workspace cwd explicitly'),
|
|
198
|
+
cwd: zod_1.z.string().optional().describe('Optional cwd for background_start; resolved inside the selected repository root (inside an active Flow: inside the Flow worktree, and repositoryId is ignored). For tests/dev servers, discover workspacePaths with specrails_projects get and pass the intended code workspace cwd explicitly'),
|
|
142
199
|
pid: zod_1.z.number().int().positive().optional().describe('Background process pid for background_logs/background_kill'),
|
|
143
200
|
processId: zod_1.z.string().min(1).max(200).optional().describe('Background execution UUID returned by background_start/list. Pass with pid on logs/kill to avoid targeting a reused PID.'),
|
|
144
201
|
includeFinished: zod_1.z.boolean().optional().describe('background_list: include persisted completed/disconnected executions (default true). Active applications are listed first; use limit/offset for older history.'),
|
|
145
202
|
confirmed: zod_1.z.boolean().optional().describe('background_start only: must be true after explicit user confirmation for this exact command'),
|
|
146
203
|
allowWhileBusy: zod_1.z.boolean().optional().describe('background_start only: override active job/loop guard after explicit user confirmation'),
|
|
147
204
|
// ── export ──
|
|
148
|
-
format: zod_1.z.enum(['json', 'csv']).optional().describe('Export format (default json)'),
|
|
205
|
+
format: zod_1.z.enum(['json', 'csv', 'jsonl']).optional().describe('Export format: export json|csv (default json); audit jsonl|csv (default jsonl)'),
|
|
149
206
|
// ── default_spec_model ──
|
|
150
207
|
provider: zod_1.z.string().optional().describe('Provider to resolve the default spec model for (default_spec_model)'),
|
|
151
208
|
// ── runtime_* (mission-rail-cards: the agent's eyes + hands on a failed run) ──
|
|
@@ -272,6 +329,23 @@ function jobsTools() {
|
|
|
272
329
|
const qs = new URLSearchParams({ jobIds: jobIds.join(',') });
|
|
273
330
|
return (0, types_1.apiCall)(ctx, 'GET', `${base}/jobs/compare?${qs.toString()}`);
|
|
274
331
|
}
|
|
332
|
+
case 'audit': {
|
|
333
|
+
const format = args.format === 'csv' ? 'csv' : 'jsonl';
|
|
334
|
+
const qs = new URLSearchParams({ format });
|
|
335
|
+
const id = args.jobId;
|
|
336
|
+
if (!id) {
|
|
337
|
+
if (args.from)
|
|
338
|
+
qs.set('from', args.from);
|
|
339
|
+
if (args.to)
|
|
340
|
+
qs.set('to', args.to);
|
|
341
|
+
}
|
|
342
|
+
const path = id ? `${base}/jobs/${encodeURIComponent(id)}/audit?${qs.toString()}` : `${base}/agent-actions?${qs.toString()}`;
|
|
343
|
+
const raw = await (0, types_1.apiCall)(ctx, 'GET', path);
|
|
344
|
+
// The loopback client parses a single JSONL line as JSON; keep the export textual.
|
|
345
|
+
const data = typeof raw === 'string' ? raw : raw == null ? '' : `${JSON.stringify(raw)}\n`;
|
|
346
|
+
const rows = data ? data.split('\n').filter(Boolean).length - (format === 'csv' ? 1 : 0) : 0;
|
|
347
|
+
return { format, ...(id ? { jobId: id } : {}), rows, note: 'Reads are only as complete as each provider stream reports them.', data };
|
|
348
|
+
}
|
|
275
349
|
case 'export': {
|
|
276
350
|
const qs = new URLSearchParams();
|
|
277
351
|
qs.set('format', args.format ?? 'json');
|
|
@@ -447,6 +521,19 @@ function jobsTools() {
|
|
|
447
521
|
throw new Error('background_start requires confirmed:true after explicit user confirmation for this exact command.');
|
|
448
522
|
const chatId = requireFirstPartyConversation(ctx, 'background_start');
|
|
449
523
|
const projectCtx = (0, types_1.requireProject)(ctx, args.projectId);
|
|
524
|
+
// Inside an active Flow the app runs in the Flow worktree (never the
|
|
525
|
+
// project checkout), tagged with the Flow so it stops with it. The
|
|
526
|
+
// worktree is isolated, so the project's busy guard does not apply.
|
|
527
|
+
const flow = activeFlowWorkspace(projectCtx, chatId);
|
|
528
|
+
if (flow) {
|
|
529
|
+
const cwd = (0, background_process_service_1.resolveBackgroundCwd)(flow.worktreePath, args.cwd, 'the Flow worktree');
|
|
530
|
+
const repository = flow.repositoryId ? (0, project_repositories_1.getProjectRepositories)(projectCtx.project).find((member) => member.id === flow.repositoryId) : undefined;
|
|
531
|
+
const process = (0, transient_children_1.startBackgroundProcess)(command.trim(), cwd, chatId.trim(), projectCtx.project.id, (0, background_process_service_1.backgroundProcessHooks)(ctx.broadcast), { flowId: flow.flowId, ...(repository ? { repositoryId: repository.id, repositoryName: repository.name } : {}) });
|
|
532
|
+
return { ok: true, flowId: flow.flowId, cwd, process, hint: FLOW_APP_HINT };
|
|
533
|
+
}
|
|
534
|
+
// The Flow exception admitted this call, but the Flow ended meanwhile.
|
|
535
|
+
if (ctx.agentTierLevel !== undefined && !(0, types_1.toolTierAllowed)(ctx, 'destructive'))
|
|
536
|
+
throw new Error('The Flow is no longer active, so background_start needs the Autonomous permission level again.');
|
|
450
537
|
const busyReason = (0, background_process_service_1.backgroundStartBusyReason)(projectCtx);
|
|
451
538
|
if (busyReason && args.allowWhileBusy !== true) {
|
|
452
539
|
throw new Error(`background_start refused because ${busyReason}. Wait for it to finish, or pass allowWhileBusy:true only after explicit user confirmation.`);
|
|
@@ -467,7 +554,7 @@ function jobsTools() {
|
|
|
467
554
|
.sort((a, b) => Number(terminal.has(a.status)) - Number(terminal.has(b.status)) || b.startedAt - a.startedAt);
|
|
468
555
|
const limit = typeof args.limit === 'number' && Number.isFinite(args.limit) ? Math.min(200, Math.max(1, Math.floor(args.limit))) : 50;
|
|
469
556
|
const offset = typeof args.offset === 'number' && Number.isFinite(args.offset) ? Math.max(0, Math.floor(args.offset)) : 0;
|
|
470
|
-
return { processes: processes.slice(offset, offset + limit), total: processes.length, offset, limit, hasMore: offset + limit < processes.length,
|
|
557
|
+
return { processes: processes.slice(offset, offset + limit).map(app_urls_1.withAppUrls), total: processes.length, offset, limit, hasMore: offset + limit < processes.length,
|
|
471
558
|
...(Number.isSafeInteger(ctx.desktopPort) && ctx.desktopPort > 0 ? { specrailsApi: { host: '127.0.0.1', port: ctx.desktopPort } } : {}),
|
|
472
559
|
hint: 'History includes persisted executions. interrupted means supervision ended after restart; current OS state is unknown and the historical PID cannot be signalled. Keep application ports separate from the Specrails API. Inspect persisted failure logs before proposing another launch.' };
|
|
473
560
|
}
|
|
@@ -508,9 +595,11 @@ function jobsTools() {
|
|
|
508
595
|
});
|
|
509
596
|
if (!logs)
|
|
510
597
|
throw new Error('background_logs requires a registered pid in the same project/chat; logs may have expired.');
|
|
598
|
+
const { appUrls } = (0, app_urls_1.withAppUrls)(logs.process);
|
|
511
599
|
return {
|
|
512
600
|
ok: true,
|
|
513
601
|
...logs,
|
|
602
|
+
...(appUrls ? { appUrls, appUrlsHint: APP_URLS_HINT } : {}),
|
|
514
603
|
hint: logs.lines.length > 0
|
|
515
604
|
? 'Inspect stdout/stderr to explain why the background process exited or failed.'
|
|
516
605
|
: 'No stdout/stderr output has been captured yet. Check the returned process status; empty logs do not prove application readiness.',
|
|
@@ -117,7 +117,7 @@ function loopsTools() {
|
|
|
117
117
|
.describe('Loop or constant name (required for create / constant_create; optional override for from_template / fork / duplicate / update)'),
|
|
118
118
|
description: zod_1.z.string().optional().describe('Loop description (for create / update)'),
|
|
119
119
|
graph: zod_1.z
|
|
120
|
-
.record(zod_1.z.unknown())
|
|
120
|
+
.record(zod_1.z.string(), zod_1.z.unknown())
|
|
121
121
|
.optional()
|
|
122
122
|
.describe('Loop graph object { nodes, edges, ... } (for create / update; required for preview)'),
|
|
123
123
|
value: zod_1.z.string().optional().describe('Constant value (for constant_create / constant_update)'),
|
|
@@ -6,12 +6,11 @@ const project_repositories_1 = require("../../project-repositories");
|
|
|
6
6
|
const zod_json_schema_compat_js_1 = require("@modelcontextprotocol/sdk/server/zod-json-schema-compat.js");
|
|
7
7
|
const guide_1 = require("../guide");
|
|
8
8
|
const types_1 = require("./types");
|
|
9
|
-
/**
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
*/
|
|
9
|
+
/** Lower-case kind of a zod schema: zod 3 exposes `_def.typeName` ('ZodOptional'), zod 4 `_def.type` ('optional'). */
|
|
10
|
+
function zodKind(schema) {
|
|
11
|
+
const def = schema._def;
|
|
12
|
+
return (def?.typeName?.replace(/^Zod/, '') ?? def?.type ?? 'unknown').toLowerCase();
|
|
13
|
+
}
|
|
15
14
|
function describeZodField(name, field) {
|
|
16
15
|
let current = field;
|
|
17
16
|
let optional = false;
|
|
@@ -21,22 +20,20 @@ function describeZodField(name, field) {
|
|
|
21
20
|
if (description === undefined && current.description !== undefined)
|
|
22
21
|
description = current.description;
|
|
23
22
|
const def = current._def;
|
|
24
|
-
const
|
|
25
|
-
if ((
|
|
23
|
+
const kind = zodKind(current);
|
|
24
|
+
if ((kind === 'optional' || kind === 'default') && def?.innerType) {
|
|
26
25
|
optional = true;
|
|
27
26
|
current = def.innerType;
|
|
28
27
|
continue;
|
|
29
28
|
}
|
|
30
|
-
if (
|
|
29
|
+
if (kind === 'nullable' && def?.innerType) {
|
|
31
30
|
nullable = true;
|
|
32
31
|
current = def.innerType;
|
|
33
32
|
continue;
|
|
34
33
|
}
|
|
35
34
|
break;
|
|
36
35
|
}
|
|
37
|
-
const baseName = (current
|
|
38
|
-
.replace(/^Zod/, '')
|
|
39
|
-
.toLowerCase();
|
|
36
|
+
const baseName = zodKind(current);
|
|
40
37
|
const type = nullable ? `${baseName} | null` : baseName;
|
|
41
38
|
const out = { name, type, optional };
|
|
42
39
|
if (description !== undefined)
|
|
@@ -123,7 +120,7 @@ function metaTools(getSpecs) {
|
|
|
123
120
|
tier: 'read',
|
|
124
121
|
inputSchema: {
|
|
125
122
|
name: zod_1.z.string().describe('Tool name, e.g. "specrails_rails"'),
|
|
126
|
-
arguments: zod_1.z.record(zod_1.z.unknown()).optional().describe('Optional prospective tool arguments to validate and preview permissions; never executes the tool'),
|
|
123
|
+
arguments: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()).optional().describe('Optional prospective tool arguments to validate and preview permissions; never executes the tool'),
|
|
127
124
|
},
|
|
128
125
|
handler: (ctx, args) => {
|
|
129
126
|
const name = String(args.name ?? '');
|
|
@@ -43,6 +43,8 @@ function railsTools() {
|
|
|
43
43
|
'Actions: list (rails + active jobs/loop runs; every rail carries availability free|busy|pending_decision|on_review — prefer a free rail when proposing a launch card, else create_rail), pr_candidates (read compatible open PR targets for railIndex), review_packet (read durable evidence, verification and acceptance capability by prDeliveryId), create_rail (add a new rail slot; returns its railIndex), set_tickets (assign ticket IDs), set_profile (default agent profile, null=legacy), ' +
|
|
44
44
|
'set_engine (provider override, null=primary), set_name (display label, null clears), ' +
|
|
45
45
|
'launch (ai-spawn — spawns the selected installed provider CLI job(s), including Kimi when installed, that WRITE CODE, RUN TESTS, COMMIT, and INCUR TOKEN COST; returns 202 with jobId/jobIds/loopRunIds), ' +
|
|
46
|
+
'launch and launch_all are refused with 409 daily_budget_exceeded (scope project|desktop, budgetUsd, spentUsd, resetsAt) while a daily budget is exhausted — nothing spawns; tell the user to raise the budget or wait for the reset, never retry in a loop. ' +
|
|
47
|
+
'They are also refused with 409 review_wip_limit_reached (limit, pending[{ deliveryId, railIndex, ticketIds, since }]) when the project\'s review limit of deliveries waiting for review is reached — nothing spawns; continuations of an existing delivery (revision, relaunch, PR follow-up) are exempt. Tell the user which deliveries are waiting and that deciding one (Create PR, merge, discard) or raising the limit in Project settings frees a slot; never retry in a loop. list returns reviewWip { limit, pending, reached }. ' +
|
|
46
48
|
'launch_all (ai-spawn — launches EVERY rail that has tickets and no active run/uncontinuable pending PR decision, in parallel, using each rail\'s stored mode/engine/profile; returns per-rail outcomes with skip reasons), ' +
|
|
47
49
|
'stop (destructive — kills all active jobs and loop runs for the rail). ' +
|
|
48
50
|
'For on_review tickets with an already-open GitHub PR (including a published pr_ready delivery), launch automatically tries to continue that PR head branch; Jira-linked in_progress tickets can do the same when the PR match is explicit; fresh tickets still start from the project integration branch. ' +
|
|
@@ -104,7 +106,7 @@ function railsTools() {
|
|
|
104
106
|
mode: zod_1.z
|
|
105
107
|
.enum(['implement', 'freestyle', 'loop'])
|
|
106
108
|
.optional()
|
|
107
|
-
.describe('Launch mode (launch; default "implement"). Implement runs all of the rail\'s tickets in one aggregate run; propose at most 3 specs per rail and split larger sets across rails. Use "freestyle" as the canonical API enum value for Freestyle. It invokes the selected provider\'s native free-form autonomous workflow (
|
|
109
|
+
.describe('Launch mode (launch; default "implement"). Implement runs all of the rail\'s tickets in one aggregate run; propose at most 3 specs per rail and split larger sets across rails. Use "freestyle" as the canonical API enum value for Freestyle. It invokes the selected provider\'s native free-form autonomous workflow (Claude, Codex, Gemini, Kimi and local engines; only Claude is interactive), one job per ticket. In prose, call it "Freestyle". Loop runs an app-driven loop per ticket.'),
|
|
108
110
|
model: zod_1.z
|
|
109
111
|
.string()
|
|
110
112
|
.optional()
|
|
@@ -409,6 +411,18 @@ function railsTools() {
|
|
|
409
411
|
else if (err instanceof types_1.McpApiError && err.status === 409 && err.code === 'tickets_in_flight') {
|
|
410
412
|
results.push({ railIndex: idx, outcome: 'skipped', reason: 'tickets-in-flight', ticketIds });
|
|
411
413
|
}
|
|
414
|
+
else if (err instanceof types_1.McpApiError && err.status === 409 && err.code === 'daily_budget_exceeded') {
|
|
415
|
+
// Nothing spawned: the project or app-wide daily budget is exhausted.
|
|
416
|
+
const budget = err.data;
|
|
417
|
+
results.push({ railIndex: idx, outcome: 'skipped', reason: 'daily-budget-exceeded', ticketIds,
|
|
418
|
+
...(typeof budget?.detail === 'string' ? { error: [budget.detail, budget.action].filter(v => typeof v === 'string').join(' ') } : {}) });
|
|
419
|
+
}
|
|
420
|
+
else if (err instanceof types_1.McpApiError && err.status === 409 && err.code === 'review_wip_limit_reached') {
|
|
421
|
+
// Nothing spawned: the project's review WIP limit is reached.
|
|
422
|
+
const wip = err.data;
|
|
423
|
+
results.push({ railIndex: idx, outcome: 'skipped', reason: 'review-wip-limit', ticketIds,
|
|
424
|
+
...(typeof wip?.detail === 'string' ? { error: [wip.detail, wip.action].filter(v => typeof v === 'string').join(' ') } : {}) });
|
|
425
|
+
}
|
|
412
426
|
else {
|
|
413
427
|
results.push({ railIndex: idx, outcome: 'failed', ticketIds, error: message });
|
|
414
428
|
}
|
|
@@ -92,7 +92,7 @@ function setupTools() {
|
|
|
92
92
|
repositories: zod_1.z.array(zod_1.z.object({ path: zod_1.z.string().min(1), name: zod_1.z.string().optional(), workspacePaths: zod_1.z.array(zod_1.z.string().min(1)).min(1).max(50).optional(), integrationBranch: zod_1.z.string().nullable().optional() })).max(50).optional().describe('add_project: additional repository memberships with their code workspaces'),
|
|
93
93
|
// install_config
|
|
94
94
|
config: zod_1.z
|
|
95
|
-
.record(zod_1.z.unknown())
|
|
95
|
+
.record(zod_1.z.string(), zod_1.z.unknown())
|
|
96
96
|
.optional()
|
|
97
97
|
.describe('install_config: the install-config object to serialize (e.g. { tier:"quick", provider, agents }); required for install_config'),
|
|
98
98
|
},
|
|
@@ -13,7 +13,7 @@ const AI_SPAWN_ACTIONS = new Set(['create', 'generate', 'ai_edit', 'contract_ref
|
|
|
13
13
|
// using its actual side effects, not the synchronous HTTP response alone.
|
|
14
14
|
const WRITE_ACTIONS = new Set([
|
|
15
15
|
'update', 'from_prompt', 'save_draft', 'commit_draft', 'cancel_ai_edit',
|
|
16
|
-
'add_addendum', 'update_addendum', 'dismiss_addendum', 'reopen_addendum',
|
|
16
|
+
'add_addendum', 'update_addendum', 'dismiss_addendum', 'reopen_addendum', 'restore',
|
|
17
17
|
]);
|
|
18
18
|
function resolveSpecsTier(action, args) {
|
|
19
19
|
if (action === 'commit_draft') {
|
|
@@ -47,7 +47,7 @@ function specsTools() {
|
|
|
47
47
|
description: 'Manage the spec/ticket backlog for a project (the local-tickets.json store). ' +
|
|
48
48
|
'Actions: list, get, ' +
|
|
49
49
|
'create (ai-spawn — THE way to add a spec: routes through Quick Add Spec, so the specrails agent generates a structured spec with AI from the user request, exactly matching the app\'s "Add Spec → Quick" flow; pass the request as title/description, it becomes the idea; async), ' +
|
|
50
|
-
'update, delete (destructive), ' +
|
|
50
|
+
'update, delete (destructive; a soft delete: the spec moves to Recently deleted for 30 days), restore (write; bring a deleted spec back), ' +
|
|
51
51
|
'from_prompt (verbatim insert, no AI — use ONLY when you already have a complete finished spec to store as-is; ' +
|
|
52
52
|
'cannot set acceptanceCriteria or shortSummary — prefer commit_draft for structured specs), ' +
|
|
53
53
|
'save_draft (persist an Explore conversation as a draft), ' +
|
|
@@ -84,6 +84,7 @@ function specsTools() {
|
|
|
84
84
|
'create',
|
|
85
85
|
'update',
|
|
86
86
|
'delete',
|
|
87
|
+
'restore',
|
|
87
88
|
'from_prompt',
|
|
88
89
|
'save_draft',
|
|
89
90
|
'commit_draft',
|
|
@@ -114,7 +115,7 @@ function specsTools() {
|
|
|
114
115
|
.number()
|
|
115
116
|
.int()
|
|
116
117
|
.optional()
|
|
117
|
-
.describe('Numeric ticket id (get/update/delete/contract_refine/smash/smash_undo/delete_epic_children/spending_summary/files_touched/ai_edit/list_addenda/add_addendum/update_addendum/dismiss_addendum/reopen_addendum/delete_addendum)'),
|
|
118
|
+
.describe('Numeric ticket id (get/update/delete/restore/contract_refine/smash/smash_undo/delete_epic_children/spending_summary/files_touched/ai_edit/list_addenda/add_addendum/update_addendum/dismiss_addendum/reopen_addendum/delete_addendum)'),
|
|
118
119
|
// ── list filters ─────────────────────────────────────────────────
|
|
119
120
|
status: zod_1.z
|
|
120
121
|
.string()
|
|
@@ -138,7 +139,7 @@ function specsTools() {
|
|
|
138
139
|
labels: zod_1.z.array(zod_1.z.string()).optional().describe('update/from_prompt/save_draft/commit_draft: labels array'),
|
|
139
140
|
assignee: zod_1.z.string().nullable().optional().describe('update/commit_draft: assignee; null clears'),
|
|
140
141
|
prerequisites: zod_1.z.array(zod_1.z.number().int()).optional().describe('update/commit_draft: prerequisite ticket ids'),
|
|
141
|
-
metadata: zod_1.z.record(zod_1.z.unknown()).optional().describe('update/commit_draft: free-form metadata object (update merges keys)'),
|
|
142
|
+
metadata: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()).optional().describe('update/commit_draft: free-form metadata object (update merges keys). regressionOf: delivery id that introduced this bug (escaped defect, loop_economics); null clears'),
|
|
142
143
|
acceptanceCriteria: zod_1.z
|
|
143
144
|
.array(zod_1.z.string())
|
|
144
145
|
.optional()
|
|
@@ -166,7 +167,7 @@ function specsTools() {
|
|
|
166
167
|
.optional()
|
|
167
168
|
.describe('create/generate/contract_refine: provider/engine override (must be installed; contract_refine cannot switch an Explore-origin provider)'),
|
|
168
169
|
contextScope: zod_1.z
|
|
169
|
-
.record(zod_1.z.unknown())
|
|
170
|
+
.record(zod_1.z.string(), zod_1.z.unknown())
|
|
170
171
|
.optional()
|
|
171
172
|
.describe('create/generate: context-awareness flags {specrails,openspec,full,mcp,userMcp,contractRefine}'),
|
|
172
173
|
contractRefine: zod_1.z
|
|
@@ -462,6 +463,8 @@ function specsTools() {
|
|
|
462
463
|
// ── destructive ────────────────────────────────────────────────
|
|
463
464
|
case 'delete':
|
|
464
465
|
return (0, types_1.apiCall)(ctx, 'DELETE', `${base}/tickets/${requireId()}`);
|
|
466
|
+
case 'restore':
|
|
467
|
+
return (0, types_1.apiCall)(ctx, 'POST', `${base}/tickets/${requireId()}/restore`);
|
|
465
468
|
case 'smash_undo': {
|
|
466
469
|
if (!args.smashedAt)
|
|
467
470
|
throw new Error('smash_undo requires the "smashedAt" timestamp.');
|