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
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
# Escolher um motor por rail
|
|
2
2
|
|
|
3
|
-
O Specrails desktop trata **Claude Code**, **Codex CLI**, **Gemini CLI** e
|
|
4
|
-
**Kimi Code** como motores de primeira classe. Pode instalar qualquer
|
|
5
|
-
combinação compatível.
|
|
6
|
-
|
|
7
3
|
## Quando o seletor aparece
|
|
8
4
|
|
|
9
5
|
O **seletor de motor** vive no cabeçalho do rail, mesmo ao lado do controlo de modo. Só aparece quando o projeto tem **mais do que um** fornecedor instalado.
|
|
@@ -14,10 +10,6 @@ Quando aparece, a sua escolha é **por rail e por lançamento** — rails difere
|
|
|
14
10
|
|
|
15
11
|
## Como escolher um motor
|
|
16
12
|
|
|
17
|
-
1. Certifique-se de que o seletor de motor do rail está visível (projeto com 2+ fornecedores).
|
|
18
|
-
2. Escolha **Claude**, **Codex**, **Gemini** ou **Kimi**.
|
|
19
|
-
3. Lance o rail com **▶ Play**.
|
|
20
|
-
|
|
21
13
|
O motor selecionado corre todas as fases do pipeline desse rail. Se a CLI do motor escolhido não estiver instalada, o lançamento falha de imediato — nada é criado. Instale a CLI em falta e tente de novo.
|
|
22
14
|
|
|
23
15
|
## Em que cada motor é bom
|
|
@@ -28,34 +20,21 @@ Os quatro correm o pipeline standard **Implement**:
|
|
|
28
20
|
|--------|--------------------|-------|
|
|
29
21
|
| **Claude** | Precisa de custo nativo, interação persistente ou tool policy rigorosa. | Perfis, Freestyle e transformações estruturadas. |
|
|
30
22
|
| **Codex** | Prefere o Codex CLI da OpenAI ou quer comparar implementações entre fornecedores. | `codex` ≥ 0.128.0. Sem reporte de custo nativo — a app preenche o custo a partir da sua tabela de preços. Os perfis não se aplicam. |
|
|
31
|
-
| **Gemini** | Quer o Gemini CLI da Google, telemetria nativa ou uma execução mais barata para specs de rotina. | `gemini` ≥ 0.11.0 (defina `GEMINI_API_KEY`). Telemetria OTLP nativa. Os perfis não se aplicam. |
|
|
32
|
-
| **Kimi** | Quer Kimi agentic para Implement, Freestyle ou loops sem Decider. | `kimi` ≥ 0.27.0 externo; perfis/roles, effort só K3; tokens/custo indisponíveis. |
|
|
33
|
-
|
|
34
|
-
### Diferenças de capability
|
|
35
|
-
|
|
36
|
-
Claude/Kimi suportam perfis e Freestyle; Codex/Gemini usam legacy. Kimi
|
|
37
|
-
recusa Loop Decider e os transforms pure-output do
|
|
38
|
-
[guia Kimi](../../../kimi.md). Perfis Claude/Kimi ficam separados.
|
|
39
23
|
|
|
40
24
|
## Um fluxo de trabalho prático
|
|
41
25
|
|
|
42
26
|
Os projetos com vários fornecedores brilham quando quer **comparar** ou **afinar custos**:
|
|
43
27
|
|
|
44
28
|
- **Comparar implementações.** Ponha a mesma spec em dois rails, defina um com Claude e outro com Codex, lance ambos (entre projetos, ou um a seguir ao outro na fila do mesmo projeto) e depois use o botão **Comparar** na página Jobs para comparar os resultados.
|
|
45
|
-
- **Afinar custos por spec.** Corra specs de alto risco no Claude com um perfil `max`; corra specs de limpeza de rotina no Gemini para poupar no gasto. Filtre `/analytics` por motor para ver a repartição.
|
|
46
29
|
- **Defina um default sensato.** Defina o motor que mais usa como primário do projeto para que os rails assumam-no por default, e só mude por rail quando uma spec específica pedir outro.
|
|
47
30
|
|
|
48
31
|
## Coisas a ter em conta
|
|
49
32
|
|
|
50
33
|
- **A escolha de fornecedor é imutável depois de criar o projeto** (v1). Escolhe os fornecedores instalados ao adicionar o projeto; não há um toggle nas Definições para acrescentar ou remover um mais tarde.
|
|
51
|
-
- **As métricas disponíveis são registadas.** Kimi não fornece tokens/custo
|
|
52
|
-
USD autoritativos; os campos ficam vazios.
|
|
53
34
|
- **O botão "Abrir CLI de IA" do terminal** também oferece um seletor de fornecedor em projetos com vários fornecedores, caso prefira conduzir uma CLI à mão.
|
|
54
35
|
|
|
55
36
|
## Para onde ir a seguir
|
|
56
37
|
|
|
57
38
|
- [Usar o Codex](../integrations/using-codex) — instalar e iniciar sessão.
|
|
58
|
-
- [Usar o Gemini](../integrations/using-gemini) — instalar, `GEMINI_API_KEY`, telemetria.
|
|
59
|
-
- [Usar Kimi](../../../kimi.md) — instalação e matriz completa.
|
|
60
39
|
- [Rails e jobs](rails-and-jobs) — a fila e o fluxo de lançamento.
|
|
61
40
|
- [Acompanhar o custo](../analytics/tracking-cost) — repartição de custo por motor.
|
|
@@ -26,7 +26,6 @@ Um **loop** é a *receita* do trabalho; um **rail** é a *pista* que o roda cont
|
|
|
26
26
|
|
|
27
27
|
- Os loops vivem na seção **Loops** (barra lateral esquerda, ao lado dos seus projetos) — eles são **globais**, compartilhados por todos os projetos.
|
|
28
28
|
- Um rail **escolhe um loop** no cabeçalho (o seletor de Loop) e o roda quando você aperta Play.
|
|
29
|
-
- O **rail** escolhe provider, modelo e effort compatível. Um loop compatível corre em Claude, Codex, Gemini ou Kimi.
|
|
30
29
|
|
|
31
30
|
Ou seja: construa um loop uma vez e depois escolha-o em qualquer rail, em qualquer projeto.
|
|
32
31
|
|
|
@@ -50,10 +49,6 @@ Um loop é um grafo de **nós** conectados por **arestas** (as setas). Cada nó
|
|
|
50
49
|
|
|
51
50
|
As arestas conectam os passos em ordem. O **Loop Decider** tem duas saídas rotuladas — **continue** e **stop** — então você liga o "ainda não terminei" de volta ao trabalho e o "terminei" para um End.
|
|
52
51
|
|
|
53
|
-
> **Kimi corre loops com passos AI/shell, mas não com Loop Decider.** O
|
|
54
|
-
> veredito é pure-output e `kimi -p` não consegue impor o limite no-tools; o
|
|
55
|
-
> run é recusado antes do primeiro passo.
|
|
56
|
-
|
|
57
52
|
### Escrevendo o texto dos passos
|
|
58
53
|
|
|
59
54
|
Dentro de qualquer AI Step ou Decider você pode referenciar:
|
|
@@ -70,7 +65,6 @@ Um loop que nunca para queimaria dinheiro para sempre, então toda execução te
|
|
|
70
65
|
|-------|--------------|
|
|
71
66
|
| **Max iterations** | Teto rígido de quantas vezes o Decider pode voltar atrás, independentemente do seu veredito. |
|
|
72
67
|
| **Timeout (min)** | Limite de tempo de relógio para toda a execução. |
|
|
73
|
-
| **Max cost ($)** | *Opcional.* Claude reporta custo; Codex/Gemini usam estimativas. Kimi não reporta custo USD autoritativo. |
|
|
74
68
|
|
|
75
69
|
## Construindo com confiança
|
|
76
70
|
|
|
@@ -2,10 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
O modo Quick é para quando já sabe o que quer. Escreve a sua ideia, a IA redige a spec completa, e ela aterra no seu quadro como **Por fazer**. Sem idas e vindas — basta descrever e avançar.
|
|
4
4
|
|
|
5
|
-
> **Kimi não está disponível no Quick Spec.** `kimi -p` não consegue impor
|
|
6
|
-
> o limite pure-output deste formulário. O pedido é recusado antes do spawn;
|
|
7
|
-
> use Explore, Raw ou Quick Launcher (`/opsx:ff`).
|
|
8
|
-
|
|
9
5
|
## Criar uma spec no modo Quick
|
|
10
6
|
|
|
11
7
|
Para criar uma spec rapidamente:
|
|
@@ -23,9 +19,6 @@ Enquanto a spec está a ser escrita, uma pequena notificação no canto mostra o
|
|
|
23
19
|
|
|
24
20
|
**Modelo** — por predefinição, a IA escolhe um modelo sensato. Pode substituí-lo por spec a partir do seletor de modelo se quiser um mais rápido ou mais capaz.
|
|
25
21
|
|
|
26
|
-
**Motor** — o seletor mostra apenas providers **compatíveis**; Kimi fica
|
|
27
|
-
excluído de Quick Spec.
|
|
28
|
-
|
|
29
22
|
**Contexto** — o modo Quick normalmente corre como um único turno, porque não precisa de ler a sua base de código para escrever uma spec a partir da sua descrição. Mas um seletor de contexto permite dar-lhe mais material para trabalhar:
|
|
30
23
|
|
|
31
24
|
- No nível mais baixo, lê apenas a sua descrição.
|
|
@@ -35,13 +35,6 @@ Profile 的选择就发生在你启动的地方——**rail 头部**,通过 Pr
|
|
|
35
35
|
|
|
36
36
|
整个流程就这么简单:选一个 Profile、启动、搞定。同一批次中并发运行的 rail 各自带着自己的 Profile,所以一个快速修复和一个重量级功能可以并排运行、采用各不相同的配置。
|
|
37
37
|
|
|
38
|
-
## 当 Agents 区悄无声息时
|
|
39
|
-
|
|
40
|
-
Profile 按 provider 隔离。Claude 和 Kimi 支持 profile/role;Codex 和
|
|
41
|
-
Gemini 使用 legacy mode。混合项目中相同名称也不会在 Claude/Kimi 之间
|
|
42
|
-
串用。Kimi 支持手动 role,但 Agent Studio 的 generation、smoke test
|
|
43
|
-
和 AI Refine 会在 spawn 前拒绝。Kimi 需要 `specrails-core` 4.12.0+。
|
|
44
|
-
|
|
45
38
|
## 接下来去哪儿
|
|
46
39
|
|
|
47
40
|
- [按 Agent 自定义模型](customizing-models-per-agent)——打造 `fast` 和 `max` Profile。
|
|
@@ -11,29 +11,14 @@ Profile 决定的是*哪些 Agent 运行、用什么模型*。但 Agent 本身
|
|
|
11
11
|
|
|
12
12
|
## 添加一个自定义 Agent
|
|
13
13
|
|
|
14
|
-
Role 是 provider-native asset:Claude 使用
|
|
15
|
-
`.claude/agents/custom-<name>.md`;Kimi 使用
|
|
16
|
-
`.kimi-code/skills/custom-<name>/SKILL.md`。
|
|
17
|
-
|
|
18
|
-
Asset 存在后会出现在对应 provider 的目录中,其 id 只能加入同 provider 的 Profile。`custom-docs` 在 Claude 中对应 `.claude/agents/custom-docs.md`,在 Kimi 中对应 `.kimi-code/skills/custom-docs/SKILL.md`;二者互不混用。
|
|
19
|
-
|
|
20
14
|
由于它们就住在你的仓库里,自定义 Agent 是**可提交的团队资产**:提交这个文件,你的整个团队就都拥有了这个 Agent。这呼应了贯穿整个 Agents 区的核心观念——
|
|
21
15
|
|
|
22
16
|
> **Agent 定义是共享的(它们住在仓库里,随 `git` 一起流转)。模型配置则因项目而异(它住在 Profile 里)。**
|
|
23
17
|
|
|
24
|
-
Core 保护两种格式。Kimi 支持手动 create/edit/run;Generate、Test 和
|
|
25
|
-
AI Refine 会在 spawn 前拒绝。
|
|
26
|
-
|
|
27
18
|
## 让自定义 Agent 上岗
|
|
28
19
|
|
|
29
20
|
典型流程如下:
|
|
30
21
|
|
|
31
|
-
1. 创建 native Claude asset 或 Kimi Skill,并使用有效指令/model。
|
|
32
|
-
2. 确认它出现在 **Agents → 目录** 的「自定义」分组下。
|
|
33
|
-
3. 在 **Agents → Profile** 中,把这个 Agent 加入某条 Profile 链(也可在该 Profile 内覆盖它的模型)。
|
|
34
|
-
4. 添加一条路由规则,让带有合适标签的任务到达它——或者依赖链的顺序。
|
|
35
|
-
5. 在 rail 头部用该 Profile 启动一条 rail。
|
|
36
|
-
|
|
37
22
|
## 观察 Profile 的表现
|
|
38
23
|
|
|
39
24
|
Agents 区还有一个 **用量** 标签页——按 Profile 拆分,展示在所选时间窗口内每个 Profile 各启动了多少个任务。这是个快速的途径,既能确认你的 `fast`/`max` 划分是否真按你设想的方式在被使用,也能看出你的团队更偏爱哪个 Profile。
|
|
@@ -20,10 +20,6 @@
|
|
|
20
20
|
|
|
21
21
|
整个表单就这些 — 点击**添加**即可。
|
|
22
22
|
|
|
23
|
-
## AI 提供商自动检测
|
|
24
|
-
|
|
25
|
-
你不再需要选择提供商。specrails 会检测你机器上安装的每个 AI CLI — **Claude**、**Codex**、**Gemini**、**Kimi** — 且每个项目始终可以使用它们全部。之后安装新的提供商,下次回到应用时它会自动出现在所有地方;无需重新配置,无需按项目设置。如果某个提供商已安装但未登录,其选择器会显示一个不显眼的*未登录*标记。
|
|
26
|
-
|
|
27
23
|
## 配置在后台静默完成
|
|
28
24
|
|
|
29
25
|
不再有设置向导。点击**添加**的那一刻,项目即注册完成并出现在侧边栏中 — 你可以立即打开它。specrails 会在后台组装项目的 workspace(几秒钟,完全离线):项目行上一个轻微闪烁的小点表示正在工作,一切就绪后它会自然消失。如果某个提供商的组装失败,项目仍可使用其他提供商 — 会出现一个琥珀色圆点,点击即可重试。
|
|
@@ -26,14 +26,9 @@
|
|
|
26
26
|
|
|
27
27
|
- **仪表盘**——spec 看板和 rails(你刚才待的地方)。
|
|
28
28
|
- **任务**——这个项目的每一次流水线运行,无论过去还是当下,都带有状态、耗时,并能深入查看任意一次运行的详情和日志。
|
|
29
|
-
- **分析**——按天、活动、模型和工单拆分的调用。Claude 报告账单成本,Codex/Gemini 使用估算值;Kimi 会把无法获得的 token/USD 字段留空。
|
|
30
|
-
- **Agent**——Claude 与 Kimi 各自独立的 Profile 和 Role 目录。Kimi Role 可手动创建/编辑;Generate、Test 和 AI Refine 不可用。
|
|
31
|
-
- **代码**——只读文件浏览器,以及显示 AI 动过哪些文件的标签。通俗 AI 摘要只对兼容 provider 显示,Kimi 不支持该转换。
|
|
32
29
|
- **集成**——可选的附加组件,比如把你的 spec 连接到 **Jira** 看板,或为 AI 启用额外的工具。
|
|
33
30
|
- **设置**——项目级选项(遥测、预算、提供商配置等等)。
|
|
34
31
|
|
|
35
|
-
> 区块和操作会遵循当前 provider 的 capability。例如 Profile 可用于 Claude/Kimi,但 Kimi 的 Agent Studio AI 操作会 fail closed。
|
|
36
|
-
|
|
37
32
|
## 状态栏
|
|
38
33
|
|
|
39
34
|
窗口最底部有一条细长的横条。它虽小,却很顺手:
|
|
@@ -1,67 +1 @@
|
|
|
1
|
-
# AI 提供方(Claude、Codex
|
|
2
|
-
|
|
3
|
-
Specrails 并不绑定某一个 AI。Claude、Codex、Gemini 和 Kimi 都是一流
|
|
4
|
-
提供方;每个界面只显示满足该功能 capability 合约的引擎。
|
|
5
|
-
|
|
6
|
-
## 四家提供方
|
|
7
|
-
|
|
8
|
-
| 提供方 | CLI | 出品方 | 说明 |
|
|
9
|
-
|---|---|---|---|
|
|
10
|
-
| **Claude** | `claude` | Anthropic | 原生成本和持久交互 transport。 |
|
|
11
|
-
| **Codex** | `codex` | OpenAI | 需要 codex `0.128.0+`。从你的全局 `~/.codex/config.toml` 读取 MCP 服务器。 |
|
|
12
|
-
| **Gemini** | `gemini` | Google | 需要 gemini `0.11.0+`。使用原生遥测,以及 `GEMINI.md` 指令文件。 |
|
|
13
|
-
| **Kimi Code** | `kimi` | Moonshot AI | 需要 Kimi `0.27.0+`。Desktop 用 `-p` 启动外部 CLI,不安装或启动 server。 |
|
|
14
|
-
|
|
15
|
-
四家都是**默认启用**的。CLI 在 `PATH` 上就会显示。Kimi 请先确认
|
|
16
|
-
`kimi --version`,再运行 `kimi login`。
|
|
17
|
-
|
|
18
|
-
## 提供方自动检测
|
|
19
|
-
|
|
20
|
-
你永远不需要按项目挑选提供方。specrails 会检测你机器上安装的每个提供方 CLI,并让**所有**项目始终可以使用**全部**提供方。之后各个界面会检查提供方声明的能力。Kimi 的确切能力矩阵参见[使用 Kimi](../../../kimi.md)。
|
|
21
|
-
|
|
22
|
-
如果你想要的提供方哪里都没出现,几乎总是因为该 CLI 未安装或不在 `PATH` 中。安装并登录后切回应用 — 检测会在窗口获得焦点时重新运行,该提供方会自动出现在所有地方,其项目 workspace 也会在后台组装完成。已安装但未登录的提供方仍会出现,只是在引擎选择器上带有*未登录*标记。
|
|
23
|
-
|
|
24
|
-
关于多提供方机器的几点说明:
|
|
25
|
-
|
|
26
|
-
- **只有一个提供方时行为与从前完全一致。** 只检测到一个提供方时,你不会在任何地方看到提供方选择器 — 应用保持干净简洁。
|
|
27
|
-
- **能力决定侧边栏。** 只要至少一个已检测的提供方支持某个版块,它就可见;版块内与引擎相关的操作只会提供有能力的提供方。Kimi 声明了配置文件、自定义角色和 Freestyle;不声明需要可强制执行的无工具边界的结构化操作。
|
|
28
|
-
- **没有任何锁定。** 安装或移除某个提供方 CLI 会自动更新所有项目 — 不存在需要管理的按项目提供方设置。
|
|
29
|
-
|
|
30
|
-
## 按调用逐个选择提供方
|
|
31
|
-
|
|
32
|
-
多提供方项目真正的价值,在于为每个任务挑到合适的 AI——而无需改动任何全局设置。凡是会运行 AI 的地方,都会出现一个小小的提供方选择器(仅当项目拥有不止一个提供方时):
|
|
33
|
-
|
|
34
|
-
- **Add Spec**——Explore 支持 Kimi;Quick Spec 只显示能够保证安全
|
|
35
|
-
pure-output 边界的提供方,因此不包含 Kimi。
|
|
36
|
-
- **rail 头部**——在启动某条具体的 rail 之前,为它挑选引擎。
|
|
37
|
-
- **终端**——「Open AI CLI」(Sparkles)按钮会打开一个提供方菜单,让你在该项目目录下进入任意已安装的 CLI。
|
|
38
|
-
|
|
39
|
-
你的选择会按项目被记住,默认是主提供方,所以你不用每次都重新选。
|
|
40
|
-
|
|
41
|
-
## Capability 差异
|
|
42
|
-
|
|
43
|
-
Kimi 支持 Project/Agent Chat、Explore/proposal、Quick Launcher
|
|
44
|
-
(`/opsx:ff`)、rail、Freestyle、没有 Decider 的 loop、profile/手动 role、
|
|
45
|
-
MCP、Serena、terminal 和附件。
|
|
46
|
-
|
|
47
|
-
`kimi -p` 会自动批准工具,无法强制 no-tools/read-only 边界。因此
|
|
48
|
-
Quick Spec、AI Edit、Contract Refine、SMASH/Re-SMASH、Project Builder
|
|
49
|
-
blueprint/milestone 生成、Loop Decider、文件摘要/construction story 和
|
|
50
|
-
Agent Studio automation 都会在 spawn 前拒绝。AI auto-title 使用确定性
|
|
51
|
-
fallback。详见 [Kimi 指南](../../../kimi.md)。
|
|
52
|
-
|
|
53
|
-
## 跨提供方的成本追踪
|
|
54
|
-
|
|
55
|
-
**Analytics** 记录实际启动的调用。Claude 报告成本,Codex/Gemini
|
|
56
|
-
使用估算。Kimi 不报告 authoritative token 或 USD cost,因此这些字段
|
|
57
|
-
保持为空。
|
|
58
|
-
|
|
59
|
-
## 疑难排查
|
|
60
|
-
|
|
61
|
-
- **我装了某个提供方,却没出现在选项里。** 检查 `claude --version` / `codex --version` / `gemini --version` / `kimi --version`。
|
|
62
|
-
- **聊天里没加载 Codex 的 MCP 服务器。** Codex 从你的全局 `~/.codex/config.toml` 读取 MCP 服务器——用 `codex mcp add` 在那里注册它们。
|
|
63
|
-
- **紧急停用。** 可以通过环境变量在应用范围内关闭某个提供方(`SPECRAILS_CODEX_BETA=0` 或 `SPECRAILS_GEMINI_BETA=0`)。这只会把提供方从*选择列表*中隐藏;很少会用到。
|
|
64
|
-
|
|
65
|
-
## 另见
|
|
66
|
-
|
|
67
|
-
请参阅 [Kimi 指南](../../../kimi.md)、Codex 指南和 Gemini 指南。
|
|
1
|
+
# AI 提供方(Claude、Codex、、)
|
|
@@ -34,11 +34,3 @@
|
|
|
34
34
|
- **rail。** 在 rail 运行之前,Specrails 会检查哪些插件已安装且健康,并把那些工具提供给本次任务的 agent。一个已降级的插件会在这次运行中被直接跳过——rail 照常启动。每个任务都会记录一份当时哪些插件处于活动状态的快照,你可以在该任务的诊断导出里看到。
|
|
35
35
|
- **聊天。** 聊天会自动采用你项目的 MCP 配置,所以已安装的插件在那里也同样可用。
|
|
36
36
|
- **Setup。** 在项目仍处于安装设置阶段时,插件会被忽略——等项目准备就绪后它们才会发挥作用。
|
|
37
|
-
|
|
38
|
-
## 提供方相关说明
|
|
39
|
-
|
|
40
|
-
插件是 provider-aware 的。Serena 通过 `.mcp.json` 支持 Claude,通过项目隔离的 `CODEX_HOME` 和 `codex mcp add` 支持 Codex,并通过 `.kimi-code/mcp.json` 支持 Kimi。只有 manifest 声明支持时才显示,因此 Gemini 不提供 Serena。Jira 卡片与 provider 无关。
|
|
41
|
-
|
|
42
|
-
## 受保留的文件
|
|
43
|
-
|
|
44
|
-
插件只管理 provider 的原生 MCP 配置、`.specrails/plugins/` 状态,以及 Claude 确实需要时的 `.claude/agents/custom-<plugin>.md` 片段。Kimi 条目位于 `.kimi-code/mcp.json`;应用不会为 Kimi 写 Claude-only 片段,也不会盲目覆盖配置。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 从任意 AI 操控 Specrails(MCP 服务器)
|
|
2
2
|
|
|
3
|
-
> **For agents (English):** use the [current connection runbook](../../../agents/mcp.md) for Claude
|
|
3
|
+
> **For agents (English):** use the [current connection runbook](../../../agents/mcp.md) for Claude and Codex. It includes verified bridge discovery, registration and read-only checks.
|
|
4
4
|
|
|
5
5
|
Specrails 可以把**自己**暴露给任何会说 [Model Context Protocol](https://modelcontextprotocol.io) 的 AI 助手——Claude Desktop、Claude Code、Cursor、Cline,或者你自己的 agent。打开这个功能,把你的助手指向 Specrails,你就能靠聊天来驱动整个应用:*「列出我的项目」「在 API 项目里为社交登录创建一份规格」「启动 rail 0,跑完了告诉我」「我这周花了多少钱?」*。你的助手会在幕后调用 Specrails 的工具,而不用你点来点去。
|
|
6
6
|
|
|
@@ -33,19 +33,6 @@ Specrails 可以把**自己**暴露给任何会说 [Model Context Protocol](http
|
|
|
33
33
|
|
|
34
34
|
支持远程 HTTP MCP 服务器的客户端,则可以直接指向 `http://127.0.0.1:4200/api/mcp`,并配上面板里的令牌。
|
|
35
35
|
|
|
36
|
-
### 从终端连接: Claude Code、Gemini CLI、Codex CLI
|
|
37
|
-
|
|
38
|
-
先在 **设置 ▸ MCP ▸ 复制令牌** 复制令牌, 然后:
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
# Claude Code
|
|
42
|
-
claude mcp add --transport http specrails http://localhost:4200/api/mcp \
|
|
43
|
-
--header "X-Desktop-Token: <你的令牌>"
|
|
44
|
-
|
|
45
|
-
# Gemini CLI
|
|
46
|
-
gemini mcp add --transport http specrails http://localhost:4200/api/mcp \
|
|
47
|
-
--header "X-Desktop-Token: <你的令牌>"
|
|
48
|
-
|
|
49
36
|
# Codex CLI (stdio — 注册 设置 ▸ MCP 中显示的 bridge 命令)
|
|
50
37
|
codex mcp add specrails -- <设置 ▸ MCP 中的 bridge 命令>
|
|
51
38
|
```
|
|
@@ -20,15 +20,6 @@ Agent Chat 通过内嵌的 **Specrails MCP 服务器**来驱动应用,因此
|
|
|
20
20
|
|
|
21
21
|
在这里选择项目**不会**移动你的仪表盘——智能体的目标和你正在看的内容是彼此独立的。
|
|
22
22
|
|
|
23
|
-
## 提供方与模型
|
|
24
|
-
|
|
25
|
-
在消息框上方可选择**提供方**(Claude、Codex、Gemini 或 Kimi)及其
|
|
26
|
-
**模型**。切换提供方会开始独立 session。
|
|
27
|
-
|
|
28
|
-
对于 Kimi,level 会限制 Specrails MCP 工具,但不会把 `kimi -p` 变成
|
|
29
|
-
sandbox:Kimi native 工具会自动批准。不安全的 pure-output action 会在
|
|
30
|
-
spawn 前拒绝;详见 [Kimi matrix](../../../kimi.md)。
|
|
31
|
-
|
|
32
23
|
## 权限级别——缰绳在你手里
|
|
33
24
|
|
|
34
25
|
智能体可以触及整个应用,因此由你来决定给它多大的自由,方法是按 **Shift+Tab** 实时切换的一个**级别**(与 Claude Code 使用的是同一套循环)。每个级别都包含其下方的一切:
|
|
@@ -24,10 +24,6 @@
|
|
|
24
24
|
|
|
25
25
|
> 任务需要服务器提供**较大的上下文窗口**(64k token 以上):operator 提示词加上 Specrails 工具 schema 体积很大。聊天和 Explore 在 32k 下即可。若某轮以 *exceeds the available context size* 失败,请增大窗口(Ollama `OLLAMA_CONTEXT_LENGTH`、llama.cpp `-c`、LM Studio *Context Length*)。
|
|
26
26
|
|
|
27
|
-
## 只安装了本地引擎?
|
|
28
|
-
|
|
29
|
-
无需任何配置。Specrails 只提供你的机器真正能运行的引擎,并在所有地方用同一条规则选择默认值:已安装的 CLI(Claude → Codex → Gemini → Kimi),否则是第一个端点有响应的本地引擎。在只有本地端点的机器上,rails、Add Spec、聊天、**agent 任务和 Project Builder** 都会直接在它上面启动,无需碰任何选择器。服务器未运行的引擎在恢复响应前不会被提供。已有任务保留创建时的引擎;选择器仍可切换。
|
|
30
|
-
|
|
31
27
|
## 选择模型
|
|
32
28
|
|
|
33
29
|
质量取决于模型而非 Specrails。运行 rails 请使用 30B 参数以上、针对工具调用调优的代码模型;较小的 instruct 模型足以应对聊天、Explore 和 Quick spec。将完整的 implement rail 交给新模型之前,先试试 **Freestyle** 或一次 Explore 会话。
|
|
@@ -35,8 +35,6 @@ rail 是一条**执行通道**。你从 SpecsBoard 上拖一张 spec 卡片放
|
|
|
35
35
|
| **状态标签** | `idle`、`running` 或 `failed`。这里没有单独的"completed"——任务干净地跑完后,rail 会回到 `idle`。 |
|
|
36
36
|
| **spec 列表** | 分配给这条 rail 的 ID。可以再拖进来,也可以拖出去解除关联。 |
|
|
37
37
|
| **Loop 选择器** | 这条 rail 运行的 Loop——内置的(`Implement` / `Freestyle` / `SDD Quick (OpenSpec)`)或某个自定义 loop。见下表。按 rail 单独记忆。 |
|
|
38
|
-
| **Profile 选择器** | 使用哪个 provider profile(Claude/Kimi rail)。 |
|
|
39
|
-
| **引擎选择器** | 哪个 provider 运行 rail——Claude、Codex、Gemini 或 Kimi。 |
|
|
40
38
|
| **▶ Play / ■ Stop** | 启动或取消。 |
|
|
41
39
|
|
|
42
40
|
### rail 运行的是什么:Loop
|
|
@@ -46,14 +44,9 @@ rail 是一条**执行通道**。你从 SpecsBoard 上拖一张 spec 卡片放
|
|
|
46
44
|
| 内置 loop | 命令 | 作用 |
|
|
47
45
|
|------|---------|--------------|
|
|
48
46
|
| **Implement** | `/specrails:implement` | 一个任务覆盖这条 rail 上的所有 spec。跑完整的 Architect → Developer → Reviewer → Ship 流水线。日常默认选项。 |
|
|
49
|
-
| **Freestyle** | Freestyle | Claude 或 Kimi 自主实现每个 spec,**绕过**流水线。 |
|
|
50
47
|
|
|
51
48
|
要运行多个 spec,可以把相关的(最多 3 个)放到同一条 rail 上——`Implement` 会把它们作为一个整体任务运行——或者把彼此独立的 spec 分到多条 rail:每条基于 git 的 rail 都在自己隔离的 worktree 中并行运行。
|
|
52
49
|
|
|
53
|
-
Freestyle 使用 provider 的 native tool/model。Claude 有 persistent
|
|
54
|
-
interactive transport;Kimi 使用没有 persistent stdin 的 agentic
|
|
55
|
-
`kimi -p` process。
|
|
56
|
-
|
|
57
50
|
内置 loop 也可以编辑:在 Loop Builder 里编辑并发布后,所有选用它的 rail 都会运行你的版本(用 **恢复原始版本** 可以改回去)。
|
|
58
51
|
|
|
59
52
|
除了这些内置 loop,你还可以**搭建自己的 loop**——重复一个 verify → fix → verify 的循环直到目标达成、在 AI 步骤之间串联 shell 命令,等等。这些自定义 loop 会出现在同一个 Loop 选择器里。这就是下一个大点子:[Loop Builder](the-loop-builder)。
|
|
@@ -84,11 +77,6 @@ interactive transport;Kimi 使用没有 persistent stdin 的 agentic
|
|
|
84
77
|
|
|
85
78
|
点击 rail 头部的 **■ Stop**。应用会向子进程发送 `SIGTERM`,等 **5 秒**让它干净退出,然后再 `SIGKILL` 掉它。不会留下半生不熟、还没启动完的进程。
|
|
86
79
|
|
|
87
|
-
## 如果一条 rail 启动不起来
|
|
88
|
-
|
|
89
|
-
如果缺少所选 CLI,会在 spawn 前失败。Kimi 需要安装并登录 `kimi`
|
|
90
|
-
0.27+;Desktop 不会启动 server。
|
|
91
|
-
|
|
92
80
|
## 全部停下
|
|
93
81
|
|
|
94
82
|
如果哪里看起来不对劲:
|
|
@@ -101,4 +89,3 @@ interactive transport;Kimi 使用没有 persistent stdin 的 agentic
|
|
|
101
89
|
|
|
102
90
|
- [Loop Builder](the-loop-builder)——rail 运行的是什么,以及如何搭建你自己的 loop。
|
|
103
91
|
- [任务详情视图](the-job-detail-view)——阶段、实时指标、工单卡片。
|
|
104
|
-
- [为每条 rail 选择引擎](picking-an-engine-per-rail)——Claude、Codex、Gemini 或 Kimi。
|
|
@@ -94,8 +94,6 @@ Architect ──► Developer ──► Reviewer ──► Ship
|
|
|
94
94
|
- **总计行是真实的。** 输入框会显示一条实时的 `N 轮 · $X` 摘要,由每个已完成轮次的真实用量累加而来——和本页"绝不猜数字"的承诺一致。
|
|
95
95
|
- **会话有两种结束方式。** 大多数任务**自己收尾**:一旦某轮结束且没有排队的消息,会话就自行落定、任务完成——你的消息是可选的引导,从来不是义务。一个低调的**立即收尾**操作可以提前结束它,保留到目前为止产出的一切。**Freestyle** 任务是例外:它们在轮次之间待命,直到你点击 **Finalize**——这正是它的设计,一场由你来关闭的往返会话。
|
|
96
96
|
- **loop 运行中,消息会送到活跃的步骤。** 在内置或自定义 loop 上,你的消息会到达**此刻正在运行的 AI 步骤**。步骤之间(Loop Decider 思考时,或 shell 命令运行时)输入框会短暂显示*"等待下一步……"*状态——你草拟的文字会保留,下一个 AI 步骤启动时发送会重新可用。**结算此步骤**可以提前结束当前步骤,让 loop 带着它的产出继续前进。
|
|
97
|
-
- **persistent interaction 仅限 Claude。** Codex、Gemini、Kimi 都是
|
|
98
|
-
one-shot;Kimi chat 在收到 resume hint 后用新的 `kimi --session=<id> -p` 恢复。
|
|
99
97
|
|
|
100
98
|
## 诊断导出
|
|
101
99
|
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
# 为每条 rail 选择引擎
|
|
2
2
|
|
|
3
|
-
Specrails desktop 把 **Claude Code**、**Codex CLI**、**Gemini CLI** 和
|
|
4
|
-
**Kimi Code** 都当作一等引擎。可安装任何 compatible 组合。
|
|
5
|
-
|
|
6
3
|
## 选择器何时出现
|
|
7
4
|
|
|
8
5
|
**引擎选择器**就在 rail 头部,紧挨着模式控件。只有当项目装了**不止一个**提供方时它才会出现。
|
|
@@ -13,10 +10,6 @@ Specrails desktop 把 **Claude Code**、**Codex CLI**、**Gemini CLI** 和
|
|
|
13
10
|
|
|
14
11
|
## 如何选择一个引擎
|
|
15
12
|
|
|
16
|
-
1. 确认这条 rail 的引擎选择器正在显示(项目有 2 个及以上提供方)。
|
|
17
|
-
2. 选择 **Claude**、**Codex**、**Gemini** 或 **Kimi**。
|
|
18
|
-
3. 用 **▶ Play** 启动这条 rail。
|
|
19
|
-
|
|
20
13
|
被选中的引擎会跑这条 rail 流水线的每一个阶段。如果所选引擎对应的 CLI 没装,启动会快速失败——什么都不会启动。装上缺失的 CLI 再试一次即可。
|
|
21
14
|
|
|
22
15
|
## 每个引擎擅长什么
|
|
@@ -27,34 +20,21 @@ Specrails desktop 把 **Claude Code**、**Codex CLI**、**Gemini CLI** 和
|
|
|
27
20
|
|--------|--------------------|-------|
|
|
28
21
|
| **Claude** | 需要原生成本、持久交互或严格 tool policy。 | Profile、Freestyle 和 structured transform。 |
|
|
29
22
|
| **Codex** | 你更喜欢 OpenAI Codex CLI,或想跨提供方对比实现。 | `codex` ≥ 0.128.0。无原生成本上报——应用会用自己的价格表来补上成本。Profile 不适用。 |
|
|
30
|
-
| **Gemini** | 你想用 Google 的 Gemini CLI、原生遥测,或为常规 spec 跑得更省钱。 | `gemini` ≥ 0.11.0(需设置 `GEMINI_API_KEY`)。原生 OTLP 遥测。Profile 不适用。 |
|
|
31
|
-
| **Kimi** | 用 agentic Kimi 跑 Implement、Freestyle 或无 Decider 的 loop。 | 外部 `kimi` ≥ 0.27.0;profile/role,effort 仅 K3;token/cost unavailable。 |
|
|
32
|
-
|
|
33
|
-
### Capability 差异
|
|
34
|
-
|
|
35
|
-
Claude/Kimi 支持 Profile 和 Freestyle;Codex/Gemini 使用 legacy。Kimi
|
|
36
|
-
拒绝 Loop Decider 和 [Kimi 指南](../../../kimi.md) 中的 pure-output
|
|
37
|
-
transform。Claude/Kimi Profile 彼此隔离。
|
|
38
23
|
|
|
39
24
|
## 一套实用的工作流
|
|
40
25
|
|
|
41
26
|
多提供方项目在你想要**对比**或**调成本**时格外出彩:
|
|
42
27
|
|
|
43
28
|
- **对比实现。** 把同一个 spec 放到两条 rail 上,一条设为 Claude、一条设为 Codex,两条都启动(跨项目,或在同一个项目的队列里一前一后),然后用 Jobs 页面上的**对比**按钮来 diff 结果。
|
|
44
|
-
- **按 spec 调成本。** 高风险的 spec 用 Claude 配 `max` Profile 来跑;常规清理类的 spec 用 Gemini 跑以省钱。在 `/analytics` 里按引擎筛选,看清各自的明细。
|
|
45
29
|
- **设好合理的默认。** 把你最常用的引擎设为项目的主引擎,让 rail 默认用它,只在某个特定 spec 想换引擎时才按 rail 临时切换。
|
|
46
30
|
|
|
47
31
|
## 几点需要记住
|
|
48
32
|
|
|
49
33
|
- **提供方选择在项目创建后不可更改**(v1)。你在添加项目时选定要安装的提供方;之后没有 Settings 开关可以再增删。
|
|
50
|
-
- **available metrics 会记录。** Kimi 不提供 authoritative token/USD
|
|
51
|
-
cost,字段保持为空。
|
|
52
34
|
- 在多提供方项目上,**终端的"Open AI CLI"按钮**也会提供一个提供方选择器,方便你想手动驱动某个 CLI 时使用。
|
|
53
35
|
|
|
54
36
|
## 接下来去哪儿
|
|
55
37
|
|
|
56
38
|
- [使用 Codex](../integrations/using-codex)——安装与登录。
|
|
57
|
-
- [使用 Gemini](../integrations/using-gemini)——安装、`GEMINI_API_KEY`、遥测。
|
|
58
|
-
- [使用 Kimi](../../../kimi.md)——安装与完整矩阵。
|
|
59
39
|
- [Rail 与任务](rails-and-jobs)——队列与启动流程。
|
|
60
40
|
- [追踪成本](../analytics/tracking-cost)——按引擎的成本明细。
|
|
@@ -26,7 +26,6 @@
|
|
|
26
26
|
|
|
27
27
|
- loop 住在 **Loops** 区里(左侧栏,和你的项目并列)——它们是**全局**的,跨所有项目共享。
|
|
28
28
|
- 一条 rail 在它的头部(Loop 选择器)**挑一个 loop**,按下 Play 时就运行它。
|
|
29
|
-
- **rail** 决定 provider、model 和 compatible effort。compatible loop 可在 Claude、Codex、Gemini 或 Kimi 上运行。
|
|
30
29
|
|
|
31
30
|
所以:一个 loop 只需搭一次,之后就能在任意项目的任意 rail 上挑来用。
|
|
32
31
|
|
|
@@ -50,10 +49,6 @@
|
|
|
50
49
|
|
|
51
50
|
边按顺序把各个步骤连起来。**Loop Decider** 有两个带标签的输出——**continue** 和 **stop**——所以你把"还没完"接回到活儿里去,把"完成了"接出去到一个 End。
|
|
52
51
|
|
|
53
|
-
> **Kimi 支持包含 AI/shell step 的 loop,但不支持 Loop Decider。**
|
|
54
|
-
> verdict 是 pure-output,`kimi -p` 无法强制 no-tools 边界;run 会在第一
|
|
55
|
-
> 个 step 前拒绝。
|
|
56
|
-
|
|
57
52
|
### 编写步骤文本
|
|
58
53
|
|
|
59
54
|
在任意 AI Step 或 Decider 里,你都可以引用:
|
|
@@ -70,7 +65,6 @@
|
|
|
70
65
|
|-------|--------------|
|
|
71
66
|
| **Max iterations** | 不管 Decider 怎么裁决,它最多能绕回多少次的硬上限。 |
|
|
72
67
|
| **Timeout (min)** | 整次运行的挂钟时间上限。 |
|
|
73
|
-
| **Max cost ($)** | *可选。* Claude 报告 cost;Codex/Gemini 使用估算。Kimi 不报告 authoritative USD cost。 |
|
|
74
68
|
|
|
75
69
|
## 有把握地搭建
|
|
76
70
|
|
|
@@ -2,10 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
当你已经清楚自己想要什么时,Quick 模式正合适。你输入想法,AI 写出完整的 spec,它就以 **待办** 状态落在你的看板上。不需要来回讨论——只管描述,然后开干。
|
|
4
4
|
|
|
5
|
-
> **Kimi 不支持 Quick Spec。** `kimi -p` 无法强制此表单的 pure-output
|
|
6
|
-
> 边界,因此请求会在 spawn 前拒绝。请使用 Explore、Raw 或 Quick
|
|
7
|
-
> Launcher(`/opsx:ff`)。
|
|
8
|
-
|
|
9
5
|
## 用 Quick 模式创建 spec
|
|
10
6
|
|
|
11
7
|
要快速创建一份 spec:
|
|
@@ -23,9 +19,6 @@
|
|
|
23
19
|
|
|
24
20
|
**模型**——默认情况下,AI 会挑选一个合适的模型。如果你想要更快或更强的模型,可以在模型选择器里按 spec 单独覆写。
|
|
25
21
|
|
|
26
|
-
**引擎**——选择器只显示 **compatible** provider;Quick Spec 不包含
|
|
27
|
-
Kimi。
|
|
28
|
-
|
|
29
22
|
**上下文**——Quick 模式通常作为单轮运行,因为它不需要读取你的代码库就能根据你的描述写出 spec。但一个上下文滑块可以给它更多素材:
|
|
30
23
|
|
|
31
24
|
- 在最低档时,它只读取你的描述。
|
|
@@ -404,3 +404,10 @@ The `opus` catalog value selects Claude Opus 5.5 (`claude-opus-5-5`). Keep the
|
|
|
404
404
|
Claude adapter pin, selector labels, Core CLI executor and cost estimates aligned
|
|
405
405
|
when advancing this alias. Concrete historical model IDs in usage events retain
|
|
406
406
|
their existing estimates; provider-reported cost remains authoritative.
|
|
407
|
+
|
|
408
|
+
Codex GPT-6.1 Sol (`gpt-6.1-sol`) is selectable in all static catalogs. Its
|
|
409
|
+
CLI effort list is low, medium, high, xhigh, max and ultra, as advertised by
|
|
410
|
+
Codex models/list on 2026-09-30. Codex defaults to GPT-6.1 Sol with medium effort. GPT-5.5, GPT-5.4, GPT-5.4 Mini
|
|
411
|
+
and GPT-5.3 Codex are omitted from selectable catalogs. The
|
|
412
|
+
[OpenAI model page](https://developers.openai.com/api/docs/models/gpt-6.1-sol)
|
|
413
|
+
describes the API model; Codex-specific effort metadata controls CLI selectors.
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# Desktop workflows and loop agents
|
|
2
|
+
|
|
3
|
+
Desktop owns workflow recipes, agent definitions and decisions. Core supplies
|
|
4
|
+
reusable execution primitives, scoped tools, durable checkpoints and real host
|
|
5
|
+
verification. `workflowAgentSteps: 1` (catalog version 7) enables the current
|
|
6
|
+
recipes. A new step is a `role-turn` bound to a loop-defined role, not a Core
|
|
7
|
+
implementation phase.
|
|
8
|
+
|
|
9
|
+
## Editable recipes
|
|
10
|
+
|
|
11
|
+
Implement and Ship and Green use loop roles `plan`, `build`, `assess` and
|
|
12
|
+
`correct`. Their names, instructions, engines, effort, turn limits, permissions,
|
|
13
|
+
OpenSpec skill, task prompts and structured result schemas are editable. The
|
|
14
|
+
graph defines confidence questions, review thresholds, correction edges, optional
|
|
15
|
+
candidate approval, archive routing and post-archive verification. These are
|
|
16
|
+
explicit nodes, not policies hidden behind a phase selector.
|
|
17
|
+
|
|
18
|
+
The recipe declares `ticketScope: all` to preserve a single execution for a
|
|
19
|
+
rail's selected specs. This Desktop launch setting is independent of Core's
|
|
20
|
+
journal format; other loops can declare `per-ticket`.
|
|
21
|
+
|
|
22
|
+
Add **Agent step** to any loop or component to create an independent agent
|
|
23
|
+
configuration. Select the node to edit it. Its role identifier accepts a new
|
|
24
|
+
name or an existing role; selecting an existing role intentionally shares that
|
|
25
|
+
role's definition within this loop. With no node selected, the inspector shows
|
|
26
|
+
a selection hint. Advanced settings holds workflow limits and composition.
|
|
27
|
+
|
|
28
|
+
Freestyle, Quick SDD and the remaining starter templates also own their agent
|
|
29
|
+
configuration. Their prompt and decider nodes retain their existing semantics.
|
|
30
|
+
Freestyle and free-form starters use agent definitions for direct code work,
|
|
31
|
+
without requiring an active OpenSpec change or an apply binding. Command
|
|
32
|
+
templates resolve their spec/constant placeholders at admission; inserted task
|
|
33
|
+
data remains literal and cannot introduce commands or Core runtime tokens.
|
|
34
|
+
Provider connections stay global; repository verification commands stay with
|
|
35
|
+
the project. Launch provider, model and effort supply inherited defaults;
|
|
36
|
+
explicit loop-owned assignments take precedence. Publishing a builtin edit applies to future runs in
|
|
37
|
+
all projects. Duplicate it for a specific flow.
|
|
38
|
+
|
|
39
|
+
## Host gates and recovery
|
|
40
|
+
|
|
41
|
+
`artifact-contract` freezes proposal, design, delta specs and task descriptions
|
|
42
|
+
in private state owned by the execution scope. Checks allow task checkbox
|
|
43
|
+
completion and can require all tasks complete. Workflow variables and fork
|
|
44
|
+
output patches cannot replace that private contract. Verification retains all
|
|
45
|
+
configured host checks; bounded planner proposals supply actual commands only
|
|
46
|
+
for repositories without configured checks. Scoped subprocess validation and
|
|
47
|
+
real candidate receipts apply to both sources.
|
|
48
|
+
Committed verification outputs include bounded actual command diagnostics for
|
|
49
|
+
the reviewer and fixer, prioritizing failures; full evidence stays in receipts.
|
|
50
|
+
|
|
51
|
+
Agent outputs include the host candidate hash. Optional approval captures its
|
|
52
|
+
candidate before interruption and retains it on resume. The archive gate checks
|
|
53
|
+
real committed full verification and the reviewed/approved candidate before
|
|
54
|
+
publishing the recoverable write set. The final host check certifies the archived
|
|
55
|
+
candidate. Reviewer assertions remain AI evidence and cannot create verification.
|
|
56
|
+
|
|
57
|
+
Admission freezes the graph, agents, Core package and repository checks. Resume
|
|
58
|
+
uses this snapshot. Generic forks copy an active change into a separate change,
|
|
59
|
+
carry scope-owned contracts forward, rebind `run.changeId`, and clear verification.
|
|
60
|
+
A changed candidate must be verified and reviewed again.
|
|
61
|
+
|
|
62
|
+
## Existing loops
|
|
63
|
+
|
|
64
|
+
Unedited builtin rows refresh when the selected Core supports the capability.
|
|
65
|
+
Edited graphs are preserved. **Restore original** adopts the new builtin recipe;
|
|
66
|
+
duplicating it leaves the existing customization intact. Older packages continue
|
|
67
|
+
to receive compatible recipes. Saved `implementation` and `implementation-step`
|
|
68
|
+
nodes remain executable for historical graphs and retained runs. They are hidden
|
|
69
|
+
from the new-node palette and marked historical in their inspector.
|
|
70
|
+
|
|
71
|
+
Historical project agent import remains an explicit draft operation. It copies
|
|
72
|
+
configuration without modifying the source project. The current recipe's role
|
|
73
|
+
names should be configured directly in each node.
|
|
74
|
+
|
|
75
|
+
## Validation and local development
|
|
76
|
+
|
|
77
|
+
`loop-factory-paired.test.ts` executes the actual Desktop bridge and Core CLI with
|
|
78
|
+
deterministic executors, including arbitrary roles and correction after failed
|
|
79
|
+
verification. Core contract, approval and fork tests check real files and durable
|
|
80
|
+
recovery. UI tests add two independent agents and save their separate definitions.
|
|
81
|
+
|
|
82
|
+
For paired checks, build Core and set `SPECRAILS_CORE_SOURCE_DIR` to its checkout.
|
|
83
|
+
For local Desktop execution, set `SPECRAILS_CORE_RUNTIME_PATH` to the built
|
|
84
|
+
`specrails-core/dist/agent-runtime/index.js` when starting the dev server or native
|
|
85
|
+
dev app. Restart after rebuilding Core so capability detection refreshes.
|
|
86
|
+
|
|
87
|
+
Loop agent providers default to `inherit`: resolve the launching mission/rail’s
|
|
88
|
+
provider, model and effort before freezing the Core runtime configuration. A
|
|
89
|
+
provider explicitly selected in the loop wins; its blank model uses that
|
|
90
|
+
provider’s default rather than an incompatible mission model. Inherited agents
|
|
91
|
+
may still override model or effort individually. The inheritance marker is never
|
|
92
|
+
passed to Core as a connection. Builtin refresh upgrades unchanged factory
|
|
93
|
+
recipes; customized loops retain their explicit selections.
|
|
94
|
+
|
|
95
|
+
## Projects and code workspaces
|
|
96
|
+
|
|
97
|
+
Registration and project settings accept `workspacePaths`, one directory per line,
|
|
98
|
+
absolute or relative to the registered repository. For `skills`, configure
|
|
99
|
+
`skills-studio` to work in that child directory. Configure several folders of the
|
|
100
|
+
same Git checkout under one membership to preserve one branch and delivery owner.
|
|
101
|
+
An omitted list means the registered folder is itself the code workspace.
|
|
102
|
+
Independent nested Git checkouts can be attached to a non-Git project container as
|
|
103
|
+
separate memberships; specs must select those members for isolated writes.
|
|
104
|
+
|
|
105
|
+
Rails and mission implementation cards expose workspace checkboxes.
|
|
106
|
+
`workspaceSelection` maps repository IDs to a nonempty subset of their registered
|
|
107
|
+
paths. The operator discovers these paths from project context and may include
|
|
108
|
+
`repositoryIds` and `workspaceSelection` in a `rail-launch` proposal or a direct MCP
|
|
109
|
+
launch. Unknown paths and memberships fail before resource allocation. A launch
|
|
110
|
+
never modifies project workspace configuration. Rail choices are saved with the
|
|
111
|
+
project's dashboard state; card choices are saved in the message's launch intent.
|
|
112
|
+
|
|
113
|
+
All three workflows freeze selected code scopes and configured checks. Checks
|
|
114
|
+
without a directory expand across selected workspaces; explicit checks for other
|
|
115
|
+
registered workspaces are excluded. Every executed check must remain inside a
|
|
116
|
+
selected code workspace, including after symlink resolution. Multiple scopes require
|
|
117
|
+
an explicit workspace directory for agent-proposed checks. Logs show actual command
|
|
118
|
+
directories, and agents receive the same absolute paths for manual checks. These
|
|
119
|
+
code workspaces are distinct from the internal agent/artifact workspace.
|
|
120
|
+
|
|
121
|
+
The MCP exposes workspace inventory and membership configuration through `specrails_projects` (`repositories`, `repository_add`, `repository_update`, `repository_remove`). Updates reuse the HTTP lifecycle guards. `specrails_setup(add_project)` accepts primary `workspacePaths` and additional `repositories`; both `specrails_rails(launch)` and `specrails_loops(run)` accept the same `workspaceSelection` map. Project resolution also recognizes registered workspace paths.
|