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