specrails-desktop 2.30.2 → 2.31.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 +28 -24
- package/client/dist/assets/{ActivityFeedPage-9DZOvIcY.js → ActivityFeedPage-CAhFRUO4.js} +1 -1
- package/client/dist/assets/{AgentBrowserCapture-DqyHbzk7.js → AgentBrowserCapture-Ct4G5lsE.js} +1 -1
- package/client/dist/assets/AgentModeCodePane-DQt9WIvu.js +2 -0
- package/client/dist/assets/{AgentModeJobsPane-CTIHMUKN.js → AgentModeJobsPane-podaJVl9.js} +1 -1
- package/client/dist/assets/AgentsPage-DTZdbW80.js +87 -0
- package/client/dist/assets/AnalyticsPage-BskgGPm0.js +1 -0
- package/client/dist/assets/CodePage-CvtYo1DU.js +2 -0
- package/client/dist/assets/{DesktopAnalyticsPage-CkXUFj3F.js → DesktopAnalyticsPage-Dnf99E8e.js} +1 -1
- package/client/dist/assets/{DocsDialog-PhdCJNVj.js → DocsDialog-DHi36rZ4.js} +1 -1
- package/client/dist/assets/{DocsPage-BY-wDthx.js → DocsPage-DIdVrQz1.js} +1 -1
- package/client/dist/assets/{InteractiveJobComposer-C9I0A4KR.js → InteractiveJobComposer-BHeB2inv.js} +1 -1
- package/client/dist/assets/{JobDetailModal-I_RoQJV4.js → JobDetailModal-CF1SKUHH.js} +1 -1
- package/client/dist/assets/JobDetailPage-De3rY18h.js +1 -0
- package/client/dist/assets/{JobsPage-DcllM4Ip.js → JobsPage-CfAqqJTx.js} +1 -1
- package/client/dist/assets/{LoopBuilderPage-DGm_iuff.js → LoopBuilderPage-DSBMuTb3.js} +2 -2
- package/client/dist/assets/{LoopPreviewModal-BC-TeFdD.js → LoopPreviewModal-B-c37kA0.js} +1 -1
- package/client/dist/assets/LoopsPage-DjnNXdmm.js +1 -0
- package/client/dist/assets/{MinimizedChatsContext-Cs34FPTz.js → MinimizedChatsContext-DIsnQMVz.js} +1 -1
- package/client/dist/assets/PluginsPage-DA5pQ_6u.js +2 -0
- package/client/dist/assets/{ProjectSettingsDialog-nEs-ENrE.js → ProjectSettingsDialog-DA23PSi6.js} +1 -1
- package/client/dist/assets/{TemplatePreviewModal-D4qW-J9B.js → TemplatePreviewModal-Cp7IQ-g2.js} +1 -1
- package/client/dist/assets/TicketDetailModal-BPD2i_0R.js +14 -0
- package/client/dist/assets/{Trans-CPISVji8.js → Trans-cWtExGkC.js} +1 -1
- package/client/dist/assets/addspec-4WmLJmBG.js +1 -0
- package/client/dist/assets/addspec-BRlk8jON.js +1 -0
- package/client/dist/assets/addspec-C7XRejU4.js +1 -0
- package/client/dist/assets/addspec-CHW9xf_X.js +1 -0
- package/client/dist/assets/addspec-DTmRrWrF.js +1 -0
- package/client/dist/assets/addspec-DhmnXER8.js +1 -0
- package/client/dist/assets/addspec-Di41DpYV.js +1 -0
- package/client/dist/assets/addspec-x3mizDxc.js +1 -0
- package/client/dist/assets/agent-BKsuIgIT.js +1 -0
- package/client/dist/assets/agent-Bs9NilfI.js +1 -0
- package/client/dist/assets/agent-C23h684q.js +1 -0
- package/client/dist/assets/agent-CqEjy3Z2.js +1 -0
- package/client/dist/assets/agent-D5DZTks1.js +1 -0
- package/client/dist/assets/agent-DE8hUYPl.js +1 -0
- package/client/dist/assets/agent-DsTuJGSc.js +1 -0
- package/client/dist/assets/agent-DwZM05-x.js +1 -0
- package/client/dist/assets/agents-45GbINfh.js +1 -0
- package/client/dist/assets/agents-BHp0_FQt.js +1 -0
- package/client/dist/assets/agents-Bvyi3y6R.js +1 -0
- package/client/dist/assets/agents-DMKFStHL.js +1 -0
- package/client/dist/assets/agents-DaYcxAr1.js +1 -0
- package/client/dist/assets/agents-IUOgqT5t.js +1 -0
- package/client/dist/assets/agents-ms7TwG16.js +1 -0
- package/client/dist/assets/agents-rzPnqoBR.js +1 -0
- package/client/dist/assets/agentstudio-8TQqBenW.js +1 -0
- package/client/dist/assets/agentstudio-B8Z_mmEX.js +1 -0
- package/client/dist/assets/agentstudio-BZR9YmLs.js +1 -0
- package/client/dist/assets/agentstudio-Bge9pAWb.js +1 -0
- package/client/dist/assets/agentstudio-Bz169Vzt.js +1 -0
- package/client/dist/assets/agentstudio-D6L2jpNi.js +1 -0
- package/client/dist/assets/agentstudio-K2-Z7CL0.js +1 -0
- package/client/dist/assets/agentstudio-Zmgzthv8.js +1 -0
- package/client/dist/assets/analytics-B8Qtptbl.js +1 -0
- package/client/dist/assets/analytics-BHqUazhP.js +1 -0
- package/client/dist/assets/analytics-BPptRY4f.js +1 -0
- package/client/dist/assets/analytics-BxDGOIwf.js +1 -0
- package/client/dist/assets/analytics-C9RaQcE3.js +1 -0
- package/client/dist/assets/analytics-CJIwqrEl.js +1 -0
- package/client/dist/assets/analytics-D_OZdQ9O.js +1 -0
- package/client/dist/assets/analytics-We6lUMI8.js +1 -0
- package/client/dist/assets/builder-3bygQtZi.js +1 -0
- package/client/dist/assets/builder-BiUG9Z5K.js +1 -0
- package/client/dist/assets/builder-CGRz_-zP.js +1 -0
- package/client/dist/assets/builder-CWYPw7Cw.js +1 -0
- package/client/dist/assets/builder-CX1437hF.js +1 -0
- package/client/dist/assets/{builder-CwA4T7gP.js → builder-Cowk9jtL.js} +1 -1
- package/client/dist/assets/builder-DwDexYRE.js +1 -0
- package/client/dist/assets/builder-skfnZ1uC.js +1 -0
- package/client/dist/assets/code-B0O8-p8k.js +1 -0
- package/client/dist/assets/code-B1VLZDhS.js +1 -0
- package/client/dist/assets/code-B86IMAfz.js +1 -0
- package/client/dist/assets/code-Bpj4Ddml.js +1 -0
- package/client/dist/assets/code-BykBZ5-e.js +1 -0
- package/client/dist/assets/code-CHPkOkDS.js +1 -0
- package/client/dist/assets/code-CkUuW4m9.js +1 -0
- package/client/dist/assets/code-cAqaqMTx.js +1 -0
- package/client/dist/assets/{dashboard-Dy2Um-US.js → dashboard-BVq6kRJe.js} +1 -1
- package/client/dist/assets/{dashboard-CHCEkds4.js → dashboard-BaKPPmLH.js} +1 -1
- package/client/dist/assets/{dashboard-CrlTV1ms.js → dashboard-Bm8e4zYG.js} +1 -1
- package/client/dist/assets/{dashboard-WhzOQw1S.js → dashboard-Bt6IesnM.js} +1 -1
- package/client/dist/assets/{dashboard-Cslu_GCH.js → dashboard-C_NQZle_.js} +1 -1
- package/client/dist/assets/{dashboard-DweT3Y4R.js → dashboard-CyZKoGoI.js} +1 -1
- package/client/dist/assets/{dashboard-DUU8-_Rg.js → dashboard-HIUdUBQ0.js} +1 -1
- package/client/dist/assets/{dashboard-Cqmmbh3l.js → dashboard-pm4Mr229.js} +1 -1
- package/client/dist/assets/{dist-js-jwoXo0YD.js → dist-js-BaP-xLOy.js} +1 -1
- package/client/dist/assets/{dist-js-Dj72W6qo.js → dist-js-CLlgOa5a.js} +1 -1
- package/client/dist/assets/format-command-C0D9IPmV.js +1 -0
- package/client/dist/assets/{formatDistanceToNow-ByKli7Q_.js → formatDistanceToNow-DUyzS4rr.js} +1 -1
- package/client/dist/assets/{getTimezoneOffsetInMilliseconds-qrcBaLW1.js → getTimezoneOffsetInMilliseconds-BCIwmmTj.js} +1 -1
- package/client/dist/assets/{i18n-Bf9Ckd10.js → i18n-D21Pr8Sj.js} +2 -2
- package/client/dist/assets/index-BdSDUFnA.css +2 -0
- package/client/dist/assets/index-Ci4-JKDr.js +77 -0
- package/client/dist/assets/{jobs-CVFD8rar.js → jobs-BAls3bWq.js} +1 -1
- package/client/dist/assets/{jobs-DoSaFzAa.js → jobs-B_TeSQxb.js} +1 -1
- package/client/dist/assets/jobs-Bgq-PZkC.js +1 -0
- package/client/dist/assets/jobs-Bpks6doU.js +1 -0
- package/client/dist/assets/jobs-CN_zv4Gr.js +1 -0
- package/client/dist/assets/jobs-DUlWSYq2.js +1 -0
- package/client/dist/assets/{jobs-B-sDHEay.js → jobs-DhxKgWFq.js} +1 -1
- package/client/dist/assets/{jobs-lk1_Dq1U.js → jobs-SwYS2M-B.js} +1 -1
- package/client/dist/assets/nav-BHDiSIVu.js +1 -0
- package/client/dist/assets/nav-CMiYAq4i.js +1 -0
- package/client/dist/assets/nav-CqS7NrDW.js +1 -0
- package/client/dist/assets/nav-D-0M7xfv.js +1 -0
- package/client/dist/assets/nav-D65O6u9I.js +1 -0
- package/client/dist/assets/nav-D_LKYvBr.js +1 -0
- package/client/dist/assets/nav-FDTJmU79.js +1 -0
- package/client/dist/assets/nav-VaB-C4k5.js +1 -0
- package/client/dist/assets/provider-capabilities-BvoExILy.js +1 -0
- package/client/dist/assets/settings-BveOJoaI.js +1 -0
- package/client/dist/assets/settings-Cj1C6F5k.js +1 -0
- package/client/dist/assets/settings-CuVwOpe0.js +1 -0
- package/client/dist/assets/settings-D5X4DfRc.js +1 -0
- package/client/dist/assets/settings-DXwxe-BW.js +1 -0
- package/client/dist/assets/settings-Di81Ba_V.js +1 -0
- package/client/dist/assets/settings-jbLjCYC_.js +1 -0
- package/client/dist/assets/settings-wIZNPFnn.js +1 -0
- package/client/dist/assets/setup-BBiHEO7h.js +1 -0
- package/client/dist/assets/setup-BlTWhNIQ.js +1 -0
- package/client/dist/assets/setup-Bp2L_oiP.js +1 -0
- package/client/dist/assets/setup-CInYXp1-.js +1 -0
- package/client/dist/assets/{setup-CITtPjed.js → setup-CYH3bP6K.js} +1 -1
- package/client/dist/assets/setup-DwcQ921P.js +1 -0
- package/client/dist/assets/setup-PBLjuDSs.js +1 -0
- package/client/dist/assets/setup-bx6FtoBp.js +1 -0
- package/client/dist/assets/{spending-DMnCXy84.js → spending-BCyUxoOI.js} +1 -1
- package/client/dist/assets/{tickets-B8BuAaj5.js → tickets-BL9r1G0e.js} +1 -1
- package/client/dist/assets/{tickets-DpmdE8tv.js → tickets-B_NyHJ8f.js} +1 -1
- package/client/dist/assets/{tickets-B_yh4qQk.js → tickets-BarF1wuG.js} +1 -1
- package/client/dist/assets/{tickets-pAUJkDTu.js → tickets-CclVhpQA.js} +1 -1
- package/client/dist/assets/{tickets-D_yDquEw.js → tickets-CqqOHbli.js} +1 -1
- package/client/dist/assets/{tickets-CFk2n2Or.js → tickets-DCkFSiqt.js} +1 -1
- package/client/dist/assets/{tickets-DQp7JS2R.js → tickets-Djn3ccfT.js} +1 -1
- package/client/dist/assets/{tickets-Bs37scwY.js → tickets-MiHBPsy_.js} +1 -1
- package/client/dist/assets/{useBrowserCaptureSession-CkBJShUw.js → useBrowserCaptureSession-CkVCDzer.js} +1 -1
- package/client/dist/assets/{useDesktop-B4pSBIDd.js → useDesktop-DCP_MHp9.js} +1 -1
- package/client/dist/index.html +25 -24
- package/docs/README.md +7 -3
- package/docs/cli.md +3 -3
- package/docs/codex.md +51 -64
- package/docs/creating-specs.md +36 -4
- package/docs/customizing.md +5 -5
- package/docs/gemini.md +35 -47
- package/docs/getting-started.md +15 -9
- package/docs/guide/de/agents/2-profiles-and-the-balanced-default.md +5 -1
- package/docs/guide/de/agents/4-custom-agents-catalog.md +7 -4
- package/docs/guide/de/getting-started/1-what-is-specrails.md +1 -0
- package/docs/guide/de/getting-started/2-installing-and-first-run.md +1 -0
- package/docs/guide/de/getting-started/4-the-dashboard-tour.md +4 -4
- package/docs/guide/de/integrations/1-ai-providers.md +29 -18
- package/docs/guide/de/integrations/2-plugins.md +3 -3
- package/docs/guide/de/integrations/6-agent-chat.md +8 -1
- package/docs/guide/de/pipeline/1-rails-and-jobs.md +9 -6
- package/docs/guide/de/pipeline/2-the-job-detail-view.md +3 -1
- package/docs/guide/de/pipeline/3-batch-implement-and-multi-feature.md +1 -1
- package/docs/guide/de/pipeline/4-picking-an-engine-per-rail.md +13 -13
- package/docs/guide/de/pipeline/5-the-loop-builder.md +6 -2
- package/docs/guide/de/specs/2-add-spec-quick-mode.md +6 -1
- package/docs/guide/en/agents/2-profiles-and-the-balanced-default.md +7 -1
- package/docs/guide/en/agents/4-custom-agents-catalog.md +17 -4
- package/docs/guide/en/getting-started/1-what-is-specrails.md +2 -1
- package/docs/guide/en/getting-started/2-installing-and-first-run.md +2 -1
- package/docs/guide/en/getting-started/4-the-dashboard-tour.md +5 -5
- package/docs/guide/en/insights/3-code-explorer.md +5 -0
- package/docs/guide/en/integrations/1-ai-providers.md +63 -22
- package/docs/guide/en/integrations/2-plugins.md +3 -3
- package/docs/guide/en/integrations/6-agent-chat.md +14 -2
- package/docs/guide/en/pipeline/1-rails-and-jobs.md +19 -7
- package/docs/guide/en/pipeline/2-the-job-detail-view.md +3 -1
- package/docs/guide/en/pipeline/3-batch-implement-and-multi-feature.md +1 -1
- package/docs/guide/en/pipeline/4-picking-an-engine-per-rail.md +25 -11
- package/docs/guide/en/pipeline/5-the-loop-builder.md +7 -2
- package/docs/guide/en/specs/2-add-spec-quick-mode.md +10 -1
- package/docs/guide/es/agents/2-profiles-and-the-balanced-default.md +5 -1
- package/docs/guide/es/agents/4-custom-agents-catalog.md +7 -4
- package/docs/guide/es/getting-started/1-what-is-specrails.md +1 -0
- package/docs/guide/es/getting-started/2-installing-and-first-run.md +1 -0
- package/docs/guide/es/getting-started/4-the-dashboard-tour.md +4 -4
- package/docs/guide/es/integrations/1-ai-providers.md +30 -18
- package/docs/guide/es/integrations/2-plugins.md +3 -3
- package/docs/guide/es/integrations/6-agent-chat.md +8 -1
- package/docs/guide/es/pipeline/1-rails-and-jobs.md +9 -6
- package/docs/guide/es/pipeline/2-the-job-detail-view.md +3 -1
- package/docs/guide/es/pipeline/3-batch-implement-and-multi-feature.md +1 -1
- package/docs/guide/es/pipeline/4-picking-an-engine-per-rail.md +15 -13
- package/docs/guide/es/pipeline/5-the-loop-builder.md +6 -2
- package/docs/guide/es/specs/2-add-spec-quick-mode.md +6 -1
- package/docs/guide/fr/agents/2-profiles-and-the-balanced-default.md +5 -1
- package/docs/guide/fr/agents/4-custom-agents-catalog.md +7 -4
- package/docs/guide/fr/getting-started/1-what-is-specrails.md +1 -0
- package/docs/guide/fr/getting-started/2-installing-and-first-run.md +1 -0
- package/docs/guide/fr/getting-started/4-the-dashboard-tour.md +4 -4
- package/docs/guide/fr/integrations/1-ai-providers.md +29 -18
- package/docs/guide/fr/integrations/2-plugins.md +3 -3
- package/docs/guide/fr/integrations/6-agent-chat.md +8 -1
- package/docs/guide/fr/pipeline/1-rails-and-jobs.md +9 -6
- package/docs/guide/fr/pipeline/2-the-job-detail-view.md +3 -1
- package/docs/guide/fr/pipeline/3-batch-implement-and-multi-feature.md +1 -1
- package/docs/guide/fr/pipeline/4-picking-an-engine-per-rail.md +15 -13
- package/docs/guide/fr/pipeline/5-the-loop-builder.md +6 -2
- package/docs/guide/fr/specs/2-add-spec-quick-mode.md +6 -1
- package/docs/guide/it/agents/2-profiles-and-the-balanced-default.md +5 -1
- package/docs/guide/it/agents/4-custom-agents-catalog.md +7 -4
- package/docs/guide/it/getting-started/1-what-is-specrails.md +1 -0
- package/docs/guide/it/getting-started/2-installing-and-first-run.md +1 -0
- package/docs/guide/it/getting-started/4-the-dashboard-tour.md +4 -4
- package/docs/guide/it/integrations/1-ai-providers.md +28 -18
- package/docs/guide/it/integrations/2-plugins.md +3 -3
- package/docs/guide/it/integrations/6-agent-chat.md +8 -1
- package/docs/guide/it/pipeline/1-rails-and-jobs.md +9 -6
- package/docs/guide/it/pipeline/2-the-job-detail-view.md +3 -1
- package/docs/guide/it/pipeline/3-batch-implement-and-multi-feature.md +1 -1
- package/docs/guide/it/pipeline/4-picking-an-engine-per-rail.md +13 -13
- package/docs/guide/it/pipeline/5-the-loop-builder.md +6 -2
- package/docs/guide/it/specs/2-add-spec-quick-mode.md +6 -1
- package/docs/guide/ja/agents/2-profiles-and-the-balanced-default.md +6 -1
- package/docs/guide/ja/agents/4-custom-agents-catalog.md +7 -4
- package/docs/guide/ja/getting-started/1-what-is-specrails.md +1 -0
- package/docs/guide/ja/getting-started/2-installing-and-first-run.md +1 -0
- package/docs/guide/ja/getting-started/4-the-dashboard-tour.md +4 -4
- package/docs/guide/ja/integrations/1-ai-providers.md +28 -18
- package/docs/guide/ja/integrations/2-plugins.md +3 -3
- package/docs/guide/ja/integrations/6-agent-chat.md +7 -1
- package/docs/guide/ja/pipeline/1-rails-and-jobs.md +9 -6
- package/docs/guide/ja/pipeline/2-the-job-detail-view.md +3 -1
- package/docs/guide/ja/pipeline/3-batch-implement-and-multi-feature.md +1 -1
- package/docs/guide/ja/pipeline/4-picking-an-engine-per-rail.md +14 -13
- package/docs/guide/ja/pipeline/5-the-loop-builder.md +6 -2
- package/docs/guide/ja/specs/2-add-spec-quick-mode.md +6 -1
- package/docs/guide/pt/agents/2-profiles-and-the-balanced-default.md +5 -1
- package/docs/guide/pt/agents/4-custom-agents-catalog.md +7 -4
- package/docs/guide/pt/getting-started/1-what-is-specrails.md +1 -0
- package/docs/guide/pt/getting-started/2-installing-and-first-run.md +1 -0
- package/docs/guide/pt/getting-started/4-the-dashboard-tour.md +4 -4
- package/docs/guide/pt/integrations/1-ai-providers.md +28 -18
- package/docs/guide/pt/integrations/2-plugins.md +3 -3
- package/docs/guide/pt/integrations/6-agent-chat.md +7 -1
- package/docs/guide/pt/pipeline/1-rails-and-jobs.md +9 -6
- package/docs/guide/pt/pipeline/2-the-job-detail-view.md +2 -1
- package/docs/guide/pt/pipeline/3-batch-implement-and-multi-feature.md +1 -1
- package/docs/guide/pt/pipeline/4-picking-an-engine-per-rail.md +14 -13
- package/docs/guide/pt/pipeline/5-the-loop-builder.md +6 -2
- package/docs/guide/pt/specs/2-add-spec-quick-mode.md +6 -1
- package/docs/guide/zh/agents/2-profiles-and-the-balanced-default.md +4 -1
- package/docs/guide/zh/agents/4-custom-agents-catalog.md +7 -4
- package/docs/guide/zh/getting-started/1-what-is-specrails.md +1 -0
- package/docs/guide/zh/getting-started/2-installing-and-first-run.md +1 -0
- package/docs/guide/zh/getting-started/4-the-dashboard-tour.md +4 -4
- package/docs/guide/zh/integrations/1-ai-providers.md +26 -18
- package/docs/guide/zh/integrations/2-plugins.md +3 -3
- package/docs/guide/zh/integrations/6-agent-chat.md +6 -1
- package/docs/guide/zh/pipeline/1-rails-and-jobs.md +9 -6
- package/docs/guide/zh/pipeline/2-the-job-detail-view.md +2 -1
- package/docs/guide/zh/pipeline/3-batch-implement-and-multi-feature.md +1 -1
- package/docs/guide/zh/pipeline/4-picking-an-engine-per-rail.md +12 -12
- package/docs/guide/zh/pipeline/5-the-loop-builder.md +6 -2
- package/docs/guide/zh/specs/2-add-spec-quick-mode.md +6 -1
- package/docs/internals/README.md +4 -1
- package/docs/internals/adding-a-provider.md +32 -28
- package/docs/internals/api-reference.md +37 -13
- package/docs/internals/architecture.md +5 -5
- package/docs/internals/bundled-framework-build-plan.md +3 -3
- package/docs/internals/code-explorer-story.md +4 -0
- package/docs/internals/configuration.md +17 -5
- package/docs/internals/global-artifacts-alignment-contract.md +1 -1
- package/docs/internals/operations-runbook.md +1 -1
- package/docs/internals/profiles.md +37 -45
- package/docs/internals/project-builder.md +16 -0
- package/docs/kimi.md +291 -0
- package/docs/mcp.md +9 -2
- package/docs/platforms/macos.md +17 -7
- package/docs/platforms/windows.md +9 -4
- package/docs/running-pipelines.md +46 -12
- package/docs/terminal.md +1 -1
- package/docs/tracking-cost.md +25 -6
- package/package.json +4 -2
- package/server/dist/agent-chat-manager.js +74 -32
- package/server/dist/agent-chat-router.js +40 -17
- package/server/dist/agent-cwd-manager.js +14 -7
- package/server/dist/agent-generator.js +69 -85
- package/server/dist/agent-mcp-config.js +17 -11
- package/server/dist/agent-operator-prompt.js +29 -20
- package/server/dist/agent-refine-manager.js +58 -38
- package/server/dist/ai-invocations.js +65 -20
- package/server/dist/attachment-manager.js +49 -15
- package/server/dist/blueprint-chat-manager.js +41 -16
- package/server/dist/blueprint-router.js +40 -6
- package/server/dist/chat-manager.js +165 -89
- package/server/dist/code-explorer-router.js +26 -7
- package/server/dist/contract-refine-runner.js +146 -113
- package/server/dist/core-compat.js +57 -2
- package/server/dist/core-package.js +3 -3
- package/server/dist/core-update-manager.js +17 -1
- package/server/dist/db.js +60 -5
- package/server/dist/desktop-analytics.js +44 -6
- package/server/dist/desktop-router.js +127 -11
- package/server/dist/explore-cwd-manager.js +19 -3
- package/server/dist/feature-flags.js +1 -1
- package/server/dist/file-story-manager.js +3 -3
- package/server/dist/file-summary-generator.js +21 -15
- package/server/dist/file-summary-manager.js +6 -6
- package/server/dist/framework-manager.js +19 -2
- package/server/dist/framework-migration.js +27 -12
- package/server/dist/install-config-path.js +1 -1
- package/server/dist/interactive-job-session.js +8 -6
- package/server/dist/loop-command-catalog.js +27 -10
- package/server/dist/loop-executors.js +59 -27
- package/server/dist/loop-factory.js +2 -2
- package/server/dist/loop-run-manager.js +100 -39
- package/server/dist/loops-router.js +1 -1
- package/server/dist/mcp/guide.js +23 -16
- package/server/dist/mcp/tools/agents.js +47 -41
- package/server/dist/mcp/tools/analytics.js +2 -2
- package/server/dist/mcp/tools/loops.js +2 -2
- package/server/dist/mcp/tools/plugins.js +14 -9
- package/server/dist/mcp/tools/rails.js +12 -13
- package/server/dist/mcp/tools/support.js +1 -1
- package/server/dist/mobile/mobile-router.js +5 -1
- package/server/dist/offline-assemble.js +13 -1
- package/server/dist/path-resolver.js +2 -2
- package/server/dist/plugin-manager.js +391 -106
- package/server/dist/plugins/claude-md-mutation.js +5 -4
- package/server/dist/plugins/drift.js +32 -29
- package/server/dist/plugins/rail-integration.js +13 -2
- package/server/dist/plugins/serena/install.js +25 -17
- package/server/dist/plugins/serena/manifest.js +22 -5
- package/server/dist/plugins/serena/verify.js +46 -16
- package/server/dist/plugins-router.js +59 -8
- package/server/dist/profile-manager.js +148 -36
- package/server/dist/profiles-router.js +311 -82
- package/server/dist/project-registry.js +2 -2
- package/server/dist/project-router-chat.js +17 -8
- package/server/dist/project-router-helpers.js +93 -5
- package/server/dist/project-router-jobs.js +76 -12
- package/server/dist/project-router-loop-runs.js +42 -14
- package/server/dist/project-router-settings.js +31 -10
- package/server/dist/project-router-setup.js +4 -5
- package/server/dist/project-router-spending.js +15 -3
- package/server/dist/project-router-tickets.js +187 -181
- package/server/dist/project-router.js +1 -0
- package/server/dist/proposal-manager.js +125 -85
- package/server/dist/providers/claude-adapter.js +14 -0
- package/server/dist/providers/codex-adapter.js +20 -0
- package/server/dist/providers/gemini-adapter.js +14 -0
- package/server/dist/providers/index.js +18 -1
- package/server/dist/providers/kimi-adapter.js +361 -0
- package/server/dist/providers/kimi-skill-prompt.js +332 -0
- package/server/dist/providers/runtime.js +137 -0
- package/server/dist/queue-manager.js +103 -78
- package/server/dist/rail-isolated-launch.js +1 -1
- package/server/dist/rails-router.js +51 -38
- package/server/dist/result-event.js +5 -0
- package/server/dist/schemas/profile.v1.json +3 -4
- package/server/dist/setup-manager.js +222 -101
- package/server/dist/setup-prerequisites.js +7 -1
- package/server/dist/smash-runner.js +104 -57
- package/server/dist/spawn-lifecycle.js +18 -14
- package/server/dist/spec-launcher-manager.js +66 -54
- package/server/dist/spec-models.js +15 -6
- package/server/dist/spending.js +110 -17
- package/server/dist/util/cli-prompt.js +142 -5
- package/server/dist/util/stream-display.js +46 -0
- package/server/dist/workspace-manager.js +100 -37
- package/server/dist/worktree-manager.js +4 -0
- package/server/dist/worktree-overlay.js +12 -3
- package/client/dist/assets/AgentModeCodePane-BAYyFRmY.js +0 -2
- package/client/dist/assets/AgentsPage-DuyJuaFs.js +0 -86
- package/client/dist/assets/AnalyticsPage-BY7gtCx6.js +0 -1
- package/client/dist/assets/CodePage-vyQr40Vl.js +0 -2
- package/client/dist/assets/JobDetailPage-CU4FEnUC.js +0 -1
- package/client/dist/assets/LoopsPage-SqglnXlp.js +0 -1
- package/client/dist/assets/PluginsPage-B89S8o1a.js +0 -2
- package/client/dist/assets/TicketDetailModal-CI47Dq9E.js +0 -14
- package/client/dist/assets/addspec-BXjvkh5q.js +0 -1
- package/client/dist/assets/addspec-C4bwrmpi.js +0 -1
- package/client/dist/assets/addspec-CArHXUDM.js +0 -1
- package/client/dist/assets/addspec-DTKJcXiR.js +0 -1
- package/client/dist/assets/addspec-DbNBbrha.js +0 -1
- package/client/dist/assets/addspec-Rw8uVBC1.js +0 -1
- package/client/dist/assets/addspec-htHGZHOe.js +0 -1
- package/client/dist/assets/addspec-lr_LP6jk.js +0 -1
- package/client/dist/assets/agent-BABjRt0P.js +0 -1
- package/client/dist/assets/agent-BuUpgqVx.js +0 -1
- package/client/dist/assets/agent-CCDZesgU.js +0 -1
- package/client/dist/assets/agent-CVn64zWH.js +0 -1
- package/client/dist/assets/agent-CWeOny0E.js +0 -1
- package/client/dist/assets/agent-DOysmad_.js +0 -1
- package/client/dist/assets/agent-DSsjTBhn.js +0 -1
- package/client/dist/assets/agent-DlZMxfM9.js +0 -1
- package/client/dist/assets/agents-6ZOJXWVk.js +0 -1
- package/client/dist/assets/agents-BZ0XQKjg.js +0 -1
- package/client/dist/assets/agents-BqWklnHR.js +0 -1
- package/client/dist/assets/agents-Bz-thHkB.js +0 -1
- package/client/dist/assets/agents-CJclElx6.js +0 -1
- package/client/dist/assets/agents-D_l9L0VA.js +0 -1
- package/client/dist/assets/agents-DhG7mg6-.js +0 -1
- package/client/dist/assets/agents-u_C0jPB5.js +0 -1
- package/client/dist/assets/agentstudio-BF19hbXj.js +0 -1
- package/client/dist/assets/agentstudio-BIUe1Im2.js +0 -1
- package/client/dist/assets/agentstudio-BLGvxWBx.js +0 -1
- package/client/dist/assets/agentstudio-D9UKiWTj.js +0 -1
- package/client/dist/assets/agentstudio-Drs37nIM.js +0 -1
- package/client/dist/assets/agentstudio-nEnKkcXM.js +0 -1
- package/client/dist/assets/agentstudio-pyFcSBKy.js +0 -1
- package/client/dist/assets/agentstudio-zfTzQh3U.js +0 -1
- package/client/dist/assets/analytics-BC7mwR4s.js +0 -1
- package/client/dist/assets/analytics-BiNg8edP.js +0 -1
- package/client/dist/assets/analytics-C0s_T2GN.js +0 -1
- package/client/dist/assets/analytics-CdsAPAwZ.js +0 -1
- package/client/dist/assets/analytics-Cr1_q-lC.js +0 -1
- package/client/dist/assets/analytics-DZ8Aoq3I.js +0 -1
- package/client/dist/assets/analytics-IEsKZvpW.js +0 -1
- package/client/dist/assets/analytics-SRPf84OT.js +0 -1
- package/client/dist/assets/builder-BH8Fua-g.js +0 -1
- package/client/dist/assets/builder-BoV7DgKd.js +0 -1
- package/client/dist/assets/builder-Cc_Lf79C.js +0 -1
- package/client/dist/assets/builder-CwZ7Bme2.js +0 -1
- package/client/dist/assets/builder-CxW-JFsR.js +0 -1
- package/client/dist/assets/builder-D94lrV7x.js +0 -1
- package/client/dist/assets/builder-cqHpCyGa.js +0 -1
- package/client/dist/assets/code-76gS0IdL.js +0 -1
- package/client/dist/assets/code-BDXEM4ml.js +0 -1
- package/client/dist/assets/code-C1VwxlML.js +0 -1
- package/client/dist/assets/code-CnMZyJpr.js +0 -1
- package/client/dist/assets/code-D20ef9Cf.js +0 -1
- package/client/dist/assets/code-DdOXaWRY.js +0 -1
- package/client/dist/assets/code-Duohuf9l.js +0 -1
- package/client/dist/assets/code-geHmknB9.js +0 -1
- package/client/dist/assets/format-command-Dfa1o2d-.js +0 -1
- package/client/dist/assets/index-Dh9i4CnN.css +0 -2
- package/client/dist/assets/index-F9r8mWP_.js +0 -76
- package/client/dist/assets/jobs-BCtGfgUA.js +0 -1
- package/client/dist/assets/jobs-BHR_EnDI.js +0 -1
- package/client/dist/assets/jobs-BMbZJjJJ.js +0 -1
- package/client/dist/assets/jobs-DzSIR8V6.js +0 -1
- package/client/dist/assets/nav-BRJBxaGt.js +0 -1
- package/client/dist/assets/nav-CAGKv3_F.js +0 -1
- package/client/dist/assets/nav-CNskRJKQ.js +0 -1
- package/client/dist/assets/nav-DY93irBL.js +0 -1
- package/client/dist/assets/nav-DhjvYgqt.js +0 -1
- package/client/dist/assets/nav-Gb-r4wop.js +0 -1
- package/client/dist/assets/nav-TvumAFD2.js +0 -1
- package/client/dist/assets/nav-myFaXRHD.js +0 -1
- package/client/dist/assets/settings-B0ypw9uw.js +0 -1
- package/client/dist/assets/settings-B9ilOSYO.js +0 -1
- package/client/dist/assets/settings-BqlWHRHA.js +0 -1
- package/client/dist/assets/settings-D8dlqt4d.js +0 -1
- package/client/dist/assets/settings-DAZqjX2a.js +0 -1
- package/client/dist/assets/settings-DRh39v1S.js +0 -1
- package/client/dist/assets/settings-Mj1OJbfd.js +0 -1
- package/client/dist/assets/settings-lRReaSYm.js +0 -1
- package/client/dist/assets/setup-3832BJCo.js +0 -1
- package/client/dist/assets/setup-B8J-gECe.js +0 -1
- package/client/dist/assets/setup-BCIOxVsc.js +0 -1
- package/client/dist/assets/setup-BciLj_tU.js +0 -1
- package/client/dist/assets/setup-CTkE3cfh.js +0 -1
- package/client/dist/assets/setup-ajB4rYm-.js +0 -1
- package/client/dist/assets/setup-xFO1wNl0.js +0 -1
|
@@ -4,6 +4,12 @@
|
|
|
4
4
|
> idea: a day-0 blueprint conversation, an orchestrated bootstrap commit, and a
|
|
5
5
|
> milestone lifecycle (Launch M1 batch rail, sidebar re-entry, Generate M2+).
|
|
6
6
|
|
|
7
|
+
> **Kimi capability boundary:** Kimi may be selected as a target provider for
|
|
8
|
+
> the materialized project, and it may launch an already committed milestone
|
|
9
|
+
> through the normal agentic Batch rail. Day-0 blueprint snapshots and M2+
|
|
10
|
+
> milestone generation are pure structured-output actions and therefore fail
|
|
11
|
+
> closed for Kimi 0.27 `-p`; no Kimi process is spawned for them.
|
|
12
|
+
|
|
7
13
|
## Entry + builder mode (reskin)
|
|
8
14
|
|
|
9
15
|
"+ Add Project" shows an **Existing | New** pre-screen (`AddProjectDialog`,
|
|
@@ -68,6 +74,11 @@ route).
|
|
|
68
74
|
|
|
69
75
|
## Day-0 chat (no project exists)
|
|
70
76
|
|
|
77
|
+
The provider selector excludes adapters that cannot enforce the blueprint
|
|
78
|
+
generator's pure-output policy. A direct Kimi request is rejected before
|
|
79
|
+
`BlueprintChatManager` spawns. This does not prevent the approved blueprint
|
|
80
|
+
from declaring Kimi among the new project's target providers.
|
|
81
|
+
|
|
71
82
|
- **Manager**: `server/blueprint-chat-manager.ts` `BlueprintChatManager` — an
|
|
72
83
|
app-level sibling of `AgentChatManager` reusing `runAiCliInvocation`. Spawns
|
|
73
84
|
from `~/.specrails/builder-cwd/` (`server/builder-cwd-manager.ts`: always
|
|
@@ -228,6 +239,11 @@ step 6 it is an ordinary project missing only the remote.
|
|
|
228
239
|
|
|
229
240
|
## Milestone lifecycle
|
|
230
241
|
|
|
242
|
+
Generating detailed M2+ specs uses the same pure-output capability gate as
|
|
243
|
+
day-0 blueprint generation. Kimi cannot be selected for that generation turn.
|
|
244
|
+
Launching the already committed M1/M2+ tickets is ordinary Batch rail
|
|
245
|
+
execution and can use Kimi.
|
|
246
|
+
|
|
231
247
|
- **Launch Milestone 1** (`client/src/lib/milestone-launch.ts`
|
|
232
248
|
`launchMilestone`): gather `M1`-labeled `todo` tickets → `POST /rails`
|
|
233
249
|
(server allocates the lowest free index) → `PUT /rails/:i/tickets` → `POST
|
package/docs/kimi.md
ADDED
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
# Using Kimi Code with Specrails Desktop
|
|
2
|
+
|
|
3
|
+
Kimi Code is a first-class, independent provider in Specrails Desktop. Desktop
|
|
4
|
+
launches the external `kimi` CLI directly; it does not bundle a Kimi runtime,
|
|
5
|
+
start `kimi server`, invoke `kimi acp`, or install a persistent service.
|
|
6
|
+
|
|
7
|
+
## Requirements
|
|
8
|
+
|
|
9
|
+
- Specrails Desktop with Kimi provider support.
|
|
10
|
+
- `specrails-core` 4.12.0 or newer with the `.kimi-code` framework target.
|
|
11
|
+
- Kimi Code 0.27.0 or newer.
|
|
12
|
+
- A completed Kimi login or a valid user-managed Kimi model configuration.
|
|
13
|
+
|
|
14
|
+
Install Kimi from its official documentation:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
# macOS / Linux
|
|
18
|
+
curl -fsSL https://code.kimi.com/kimi-code/install.sh | bash
|
|
19
|
+
kimi login
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
```powershell
|
|
23
|
+
# Windows PowerShell
|
|
24
|
+
irm https://code.kimi.com/kimi-code/install.ps1 | iex
|
|
25
|
+
kimi login
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
The official npm package (`@moonshot-ai/kimi-code`) is also supported, but its
|
|
29
|
+
current CLI requires Node.js 22.19 or newer. On Windows, Kimi also requires Git
|
|
30
|
+
for Windows because it uses Git Bash; set `KIMI_SHELL_PATH` when `bash.exe`
|
|
31
|
+
lives outside the standard locations. Specrails never installs any of these
|
|
32
|
+
dependencies for you.
|
|
33
|
+
|
|
34
|
+
Restart Desktop after changing `PATH`. Setup checks `kimi --version` without
|
|
35
|
+
sending a model prompt. Kimi 0.27 does not provide a non-billing command that
|
|
36
|
+
conclusively proves OAuth readiness, so the first real request may still ask
|
|
37
|
+
you to run `kimi login`.
|
|
38
|
+
|
|
39
|
+
### Windows prompt transport
|
|
40
|
+
|
|
41
|
+
Desktop never invokes a Kimi command shim through `cmd.exe`. For the standard
|
|
42
|
+
npm `kimi.cmd`/`kimi.bat`, it launches the package's JavaScript entry with Node
|
|
43
|
+
and carries the complete materialized prompt over `stdin`; multiline text,
|
|
44
|
+
Unicode, and long SpecRails workflows therefore do not consume the Win32
|
|
45
|
+
command-line budget.
|
|
46
|
+
|
|
47
|
+
A native `kimi.exe` is launched directly with no shell and works for prompts
|
|
48
|
+
whose complete command line is at most 30,000 UTF-16 code units. Kimi 0.27 has
|
|
49
|
+
no equivalent stdin or response-file option for that native executable, so
|
|
50
|
+
Desktop rejects a larger native invocation before spawn instead of truncating
|
|
51
|
+
the workflow. Install the official npm package
|
|
52
|
+
(`npm install -g @moonshot-ai/kimi-code`, Node.js 22.19+) when complete long
|
|
53
|
+
workflows are required on Windows. No Kimi server is involved in either path.
|
|
54
|
+
|
|
55
|
+
## Add or build a project
|
|
56
|
+
|
|
57
|
+
Kimi appears in Add Project and Project Builder when the executable is
|
|
58
|
+
available. Selecting it asks Core to materialize:
|
|
59
|
+
|
|
60
|
+
```text
|
|
61
|
+
.kimi-code/
|
|
62
|
+
├── AGENTS.md
|
|
63
|
+
├── mcp.json
|
|
64
|
+
├── rules/
|
|
65
|
+
└── skills/
|
|
66
|
+
├── specrails-*/SKILL.md
|
|
67
|
+
├── openspec-*/SKILL.md
|
|
68
|
+
└── sr-*/SKILL.md
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Kimi scans directory-form skills as direct children of the skills root.
|
|
72
|
+
SpecRails therefore keeps roles at `skills/sr-*/SKILL.md` rather than in a
|
|
73
|
+
nested catalog that the stable engine would not discover.
|
|
74
|
+
|
|
75
|
+
In a multi-provider project, Kimi is an independent engine choice on
|
|
76
|
+
capability-compatible chat, rail, loop, profile, integration, and terminal
|
|
77
|
+
surfaces. Switching to it does not rewrite a Claude, Codex, or Gemini tree.
|
|
78
|
+
Provider membership is fixed when the project is created; re-register the
|
|
79
|
+
project to choose a different set.
|
|
80
|
+
|
|
81
|
+
## Models and effort
|
|
82
|
+
|
|
83
|
+
Desktop stores Kimi's public model ids:
|
|
84
|
+
|
|
85
|
+
| Model id | UI label |
|
|
86
|
+
|----------|----------|
|
|
87
|
+
| `k3` | Kimi K3 |
|
|
88
|
+
| `kimi-for-coding` | Kimi for Coding |
|
|
89
|
+
| `kimi-for-coding-highspeed` | Kimi for Coding Highspeed |
|
|
90
|
+
|
|
91
|
+
At the CLI boundary only, those three ids map to managed aliases such as
|
|
92
|
+
`kimi-code/k3`. Already-prefixed and custom aliases pass through unchanged.
|
|
93
|
+
|
|
94
|
+
K3 offers `low`, `high`, and `max` reasoning effort. Those controls are shown
|
|
95
|
+
only when the effective model is `k3` or `kimi-code/k3`; the two
|
|
96
|
+
`kimi-for-coding` models and custom aliases do not inherit K3 effort. Desktop
|
|
97
|
+
defaults K3 to its upstream `high` setting and applies a valid selection to one
|
|
98
|
+
child process through
|
|
99
|
+
`KIMI_MODEL_THINKING_EFFORT` and removes inherited effort otherwise,
|
|
100
|
+
preventing cross-provider or cross-model leakage.
|
|
101
|
+
|
|
102
|
+
Every Desktop-managed spawn also removes `KIMI_CODE_EXPERIMENTAL_FLAG` from
|
|
103
|
+
the child environment. The integration is qualified against Kimi Code 0.27's
|
|
104
|
+
stable v1 engine and JSONL contract; a user-level opt-in to the experimental v2
|
|
105
|
+
engine must not silently switch Desktop to a different, unqualified runtime.
|
|
106
|
+
It also forces `KIMI_DISABLE_CRON=1`: prompt mode auto-approves tools, while
|
|
107
|
+
Desktop has no scheduler lifecycle or UI for Kimi's persistent `CronCreate`
|
|
108
|
+
facility, so an owned child must not leave scheduled work behind. Background
|
|
109
|
+
task drain/steer behavior inside the live child is unchanged. Finally,
|
|
110
|
+
`KIMI_CODE_NO_AUTO_UPDATE=1` disables Kimi's startup update preflight so a job
|
|
111
|
+
runs the external version that passed Desktop's compatibility check instead of
|
|
112
|
+
self-updating mid-invocation. All three controls replace inherited keys
|
|
113
|
+
case-insensitively.
|
|
114
|
+
|
|
115
|
+
## Execution and resume
|
|
116
|
+
|
|
117
|
+
A new Kimi turn uses:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
kimi -m kimi-code/k3 \
|
|
121
|
+
-p "<ordinary prompt or Desktop-materialized Kimi skill prompt>" \
|
|
122
|
+
--output-format stream-json
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
A subtle but load-bearing distinction applies here. Kimi's interactive TUI and
|
|
126
|
+
ACP client intercept `/skill:<name>` and call the skill-activation API, but the
|
|
127
|
+
0.27 print runner sends `-p` text directly to `session.prompt()`. Desktop
|
|
128
|
+
therefore never relies on a literal `/skill:…` surviving into `-p`. It resolves
|
|
129
|
+
the direct-child `SKILL.md`, substitutes Kimi's argument placeholders, adds the
|
|
130
|
+
same `<kimi-skill-loaded>` envelope used by upstream activation, and then
|
|
131
|
+
passes that materialized prompt to the external CLI. Missing or unsafe skill
|
|
132
|
+
paths fail before process creation instead of becoming a zero-work success.
|
|
133
|
+
The prompt seen by the model matches Kimi's activation format; because print
|
|
134
|
+
mode itself still receives an ordinary user prompt, Kimi does not emit its
|
|
135
|
+
internal `skill.activated`/`skill_invoked` telemetry for this host-side
|
|
136
|
+
materialization. Desktop does not depend on those private events.
|
|
137
|
+
|
|
138
|
+
On a resume, `${KIMI_SESSION_ID}` can be expanded from the known session value.
|
|
139
|
+
On a fresh print session Kimi creates the ID internally and reveals it only in
|
|
140
|
+
the terminal resume hint, so Desktop rejects a skill that requires that
|
|
141
|
+
placeholder instead of substituting a false value. SpecRails' generated
|
|
142
|
+
workflow and role skills do not use that placeholder.
|
|
143
|
+
|
|
144
|
+
A known session resumes with the bound `--session=<session-id>` form so even an
|
|
145
|
+
option-shaped value cannot become a new CLI flag. Desktop accepts only Kimi's
|
|
146
|
+
upstream-safe session alphabet (`A-Z`, `a-z`, digits, `.`, `_`, `-`), rejects
|
|
147
|
+
`.`/`..` and ids longer than 128 characters at both JSONL parsing and argv
|
|
148
|
+
construction, and trusts an id only after Kimi emits the terminal
|
|
149
|
+
`session.resume_hint`; it never invents one from process ids or local paths.
|
|
150
|
+
|
|
151
|
+
Kimi can put assistant text and several function calls in one JSONL record.
|
|
152
|
+
Desktop expands that record into every corresponding UI event, so text,
|
|
153
|
+
activity chips, errors, and session state are not dropped. Unknown future
|
|
154
|
+
events remain diagnostic records instead of crashing the stream.
|
|
155
|
+
|
|
156
|
+
Cancel, Stop, app shutdown, and project removal terminate the owned process
|
|
157
|
+
tree. There is no server lifecycle to manage.
|
|
158
|
+
|
|
159
|
+
Kimi Code does ship optional `kimi acp` and `kimi server` entry points. This
|
|
160
|
+
integration deliberately uses the documented `-p` non-interactive contract:
|
|
161
|
+
it already runs tools agentically under Kimi's automatic prompt-mode policy,
|
|
162
|
+
maps cleanly to Desktop's owned-child lifecycle, and avoids installing a
|
|
163
|
+
service, opening a local port, or retaining an extra daemon. “No server
|
|
164
|
+
lifecycle” means Specrails starts and owns no Kimi server; it does not mean the
|
|
165
|
+
upstream CLI lacks that optional subcommand.
|
|
166
|
+
|
|
167
|
+
## Feature coverage
|
|
168
|
+
|
|
169
|
+
The important distinction is not “chat versus command”; it is whether a
|
|
170
|
+
surface deliberately launches an **autonomous agent** or requires a
|
|
171
|
+
**pure-output/read-only transform**. `kimi -p` is agentic and automatically
|
|
172
|
+
approves tool use. Desktop therefore enables Kimi where that posture is part
|
|
173
|
+
of the feature, and fails closed where the feature contract promises no tools
|
|
174
|
+
or read-only behavior.
|
|
175
|
+
|
|
176
|
+
### Available with Kimi
|
|
177
|
+
|
|
178
|
+
| Surface | Kimi behavior |
|
|
179
|
+
|---|---|
|
|
180
|
+
| Project Chat and Agent Chat | Text, tools, errors, cancellation, session resume, attachments, and proposals use a fresh owned `kimi -p` process per turn. |
|
|
181
|
+
| Explore | Conversation and proposal/draft work are available under Kimi's autonomous prompt-mode policy. It is not a filesystem sandbox. |
|
|
182
|
+
| Quick Launcher | Agentic commands such as `/opsx:ff` are available. This is distinct from the pure-output **Quick Spec** form. |
|
|
183
|
+
| Rails | Implement, Batch, Freestyle, retry/rerun, worktree isolation, cancellation, and ask-first PR delivery use Core's Kimi skills. |
|
|
184
|
+
| Loops | Built-in and custom loops are available when the graph has no **Loop Decider**. AI and shell steps keep their normal agentic semantics. |
|
|
185
|
+
| Project Builder delivery | Selecting Kimi as a target project provider and launching an already committed milestone through its Batch rail are available. Blueprint and milestone generation are not. |
|
|
186
|
+
| Profiles and roles | Provider-scoped profiles, exact Kimi models, per-role routing, and manual `custom-*` role creation/editing/execution are available. |
|
|
187
|
+
| MCP and integrations | Project `.kimi-code/mcp.json`, the Desktop bridge, provider-scoped plugins, and Serena are available through additive merges. |
|
|
188
|
+
| Terminal and attachments | The integrated terminal launches the external CLI. Text and validated image references are available; Kimi reads images with `ReadMediaFile`. |
|
|
189
|
+
| Analytics | Provider, model, duration, outcome, and session metadata are recorded. Unreported tokens and cost remain unavailable. |
|
|
190
|
+
|
|
191
|
+
### Unavailable and rejected before spawn
|
|
192
|
+
|
|
193
|
+
| Surface | Why it fails closed for Kimi |
|
|
194
|
+
|---|---|
|
|
195
|
+
| Quick Spec generation | Its structured output contract assumes a hard no-tools/read-only boundary that `kimi -p` cannot express. Use Explore or an agentic Quick Launcher command. |
|
|
196
|
+
| AI Edit / Continue Editing refine | This pure-output rewrite must not be allowed to mutate the workspace with tools. |
|
|
197
|
+
| Contract Refine | Requires an enforceable no-tools transform. |
|
|
198
|
+
| SMASH and Re-SMASH | Structured decomposition requires a safe tool boundary; Re-SMASH is also destructive, so existing children are never deleted before the capability check. |
|
|
199
|
+
| Project Builder blueprint and milestone generation | Day-0 blueprint snapshots and later detailed milestone batches are pure structured output. Kimi can still be a target provider and run a committed milestone rail. |
|
|
200
|
+
| Loop Decider | The `continue`/`stop` verdict must be a constrained pure-output decision. Kimi loops containing a Decider are rejected. |
|
|
201
|
+
| File summaries and construction-story AI | Code Explorer's generated summaries/story are read-only transforms. Existing deterministic/read-only explorer data remains usable. |
|
|
202
|
+
| AI auto-title | No Kimi process is spawned; Desktop uses its deterministic title fallback. |
|
|
203
|
+
| Agent Studio automation | Agent generation, smoke test, and AI Refine require the same boundary. Manual custom roles remain available. |
|
|
204
|
+
|
|
205
|
+
These are server-side capability gates, not cosmetic UI omissions. A direct
|
|
206
|
+
request that bypasses the hidden/disabled control is rejected before Kimi is
|
|
207
|
+
spawned and, for destructive operations, before any state mutation.
|
|
208
|
+
|
|
209
|
+
### Serena and provider-scoped plugin state
|
|
210
|
+
|
|
211
|
+
In a project with more than one AI provider, Integrations asks which provider
|
|
212
|
+
the Serena install targets. A Kimi install:
|
|
213
|
+
|
|
214
|
+
- merges `mcpServers.serena` into `<project>/.kimi-code/mcp.json`;
|
|
215
|
+
- contributes the managed Serena guidance block to
|
|
216
|
+
`<project>/.kimi-code/AGENTS.md`;
|
|
217
|
+
- records Kimi independently under
|
|
218
|
+
`<project>/.specrails/plugins/state.json`;
|
|
219
|
+
- verifies both `uv` and the Kimi MCP registration before committing; and
|
|
220
|
+
- is included only in Kimi rail snapshots.
|
|
221
|
+
|
|
222
|
+
Claude's `.mcp.json`/`CLAUDE.md`, Codex's isolated MCP registry plus root
|
|
223
|
+
`AGENTS.md`, and Kimi's `.kimi-code/mcp.json` plus
|
|
224
|
+
`.kimi-code/AGENTS.md` remain independent. Removing a provider's Serena
|
|
225
|
+
installation therefore removes only that provider's managed guidance and MCP
|
|
226
|
+
registration.
|
|
227
|
+
|
|
228
|
+
## Native differences from Claude
|
|
229
|
+
|
|
230
|
+
Application feature parity does not make unlike CLI protocols identical:
|
|
231
|
+
|
|
232
|
+
- Kimi has no persistent stdin transport. Interactive conversations resume by
|
|
233
|
+
spawning a new `kimi -p` process with the recorded session id.
|
|
234
|
+
- Kimi stream JSON has no terminal token/cost result. Desktop records model,
|
|
235
|
+
duration, status, and session, and leaves cost/tokens unavailable.
|
|
236
|
+
- Kimi has no dedicated image argv; Desktop validates the managed attachment
|
|
237
|
+
path and includes explicit media-tool guidance in the prompt.
|
|
238
|
+
- Prompt mode runs under Kimi's autonomous permission behavior and cannot be
|
|
239
|
+
combined with `--auto`, `--yolo`, or `--plan`.
|
|
240
|
+
- Kimi has no per-spawn hard `none`/read-only tool flag. Desktop therefore
|
|
241
|
+
disables structured transforms that require a no-tools boundary instead of
|
|
242
|
+
treating prompt wording as a security sandbox.
|
|
243
|
+
- Kimi loads its user-level MCP configuration according to Kimi's own rules.
|
|
244
|
+
Because Desktop cannot isolate that source per spawn, the user-MCP opt-in
|
|
245
|
+
control stays unavailable for Kimi; project `.kimi-code/mcp.json` remains
|
|
246
|
+
supported.
|
|
247
|
+
|
|
248
|
+
## MCP
|
|
249
|
+
|
|
250
|
+
Desktop merges its project bridge and integrations into
|
|
251
|
+
`.kimi-code/mcp.json`. Existing server definitions are preserved. Invalid JSON
|
|
252
|
+
fails safely instead of being replaced, and credentials are never copied into
|
|
253
|
+
the project by the provider adapter.
|
|
254
|
+
|
|
255
|
+
## Troubleshooting
|
|
256
|
+
|
|
257
|
+
### Kimi is missing from the provider picker
|
|
258
|
+
|
|
259
|
+
Run `kimi --version` in a fresh terminal, then restart Desktop. On Windows,
|
|
260
|
+
confirm `where kimi` resolves `kimi.cmd`.
|
|
261
|
+
|
|
262
|
+
### The CLI is too old
|
|
263
|
+
|
|
264
|
+
Upgrade Kimi using its official installer. Desktop requires 0.27.0 or newer
|
|
265
|
+
because its prompt-mode stream and session contract is the tested baseline.
|
|
266
|
+
|
|
267
|
+
### Login or model alias error
|
|
268
|
+
|
|
269
|
+
Run `kimi login`. Managed login creates aliases under `kimi-code/`. If you use
|
|
270
|
+
a custom provider, make sure the exact alias stored in the profile exists in
|
|
271
|
+
your `~/.kimi-code/config.toml`.
|
|
272
|
+
|
|
273
|
+
### A Kimi project is missing skills
|
|
274
|
+
|
|
275
|
+
Update Core/framework from Setup. OpenSpec 1.4.1 writes Kimi skills to a legacy
|
|
276
|
+
`.kimi/skills` path; Core normalizes recognized `openspec-*` directories into
|
|
277
|
+
`.kimi-code/skills` while preserving unknown and user-owned files.
|
|
278
|
+
|
|
279
|
+
### A control is disabled for Kimi
|
|
280
|
+
|
|
281
|
+
Check the [feature coverage matrix](#feature-coverage). Quick Spec, AI Edit,
|
|
282
|
+
structured decomposition/refinement, blueprint/milestone generation, Loop
|
|
283
|
+
Decider, Code Explorer AI transforms, AI auto-title, and Agent Studio
|
|
284
|
+
automation deliberately do not spawn Kimi 0.27. This is a safety boundary, not
|
|
285
|
+
an installation or authentication error.
|
|
286
|
+
|
|
287
|
+
## References
|
|
288
|
+
|
|
289
|
+
- [Kimi Code documentation](https://www.kimi.com/code/docs/en/)
|
|
290
|
+
- [Kimi Code getting started](https://www.kimi.com/code/docs/en/kimi-code-cli/guides/getting-started)
|
|
291
|
+
- [Kimi Code environment variables](https://www.kimi.com/code/docs/en/kimi-code-cli/configuration/env-vars.html)
|
package/docs/mcp.md
CHANGED
|
@@ -41,11 +41,11 @@ reading one description. The tools are:
|
|
|
41
41
|
| `specrails_rails` | Assign tickets to a rail, configure it, and launch the pipeline — rails are dynamic (`create_rail`, up to 12) and `launch_all` starts every ready rail in parallel (worktree-isolated) |
|
|
42
42
|
| `specrails_jobs` | Inspect, stream, and stop pipeline jobs |
|
|
43
43
|
| `specrails_chat` | Explore / sidebar chat conversations and turns |
|
|
44
|
-
| `specrails_agents` |
|
|
44
|
+
| `specrails_agents` | Provider-scoped agent profiles and catalog (Claude and Kimi execution; Kimi manual roles only) |
|
|
45
45
|
| `specrails_plugins` | The per-project plugin marketplace (install / verify / uninstall) |
|
|
46
46
|
| `specrails_jira` | The Jira integration (connect, sync, outbox) |
|
|
47
47
|
| `specrails_loops` | Saved loop workflows |
|
|
48
|
-
| `specrails_code` | The
|
|
48
|
+
| `specrails_code` | The code explorer (tree/file/provenance are provider-neutral; AI transforms are capability-gated) |
|
|
49
49
|
| `specrails_setup` | Add-project setup wizard surface |
|
|
50
50
|
| `specrails_analytics` | Per-project spending analytics + budget |
|
|
51
51
|
| `specrails_settings` | App-level settings |
|
|
@@ -77,6 +77,13 @@ app's WebSocket bus. An agent gets the actual outcome by calling
|
|
|
77
77
|
returns the final result. Don't assume success from the acceptance alone — this
|
|
78
78
|
is spelled out in `specrails_guide`.
|
|
79
79
|
|
|
80
|
+
Provider membership does not bypass capability checks. With Kimi, agentic
|
|
81
|
+
chat/Explore/Quick Launcher/rails/loops without Decider/profiles are
|
|
82
|
+
available, while Quick Spec, AI Edit, Contract Refine, SMASH/Re-SMASH,
|
|
83
|
+
Project Builder generation, Loop Decider, Code Explorer AI transforms, and
|
|
84
|
+
Agent Studio automation are rejected before spawn. Destructive gates run
|
|
85
|
+
before any mutation.
|
|
86
|
+
|
|
80
87
|
## The four permission tiers
|
|
81
88
|
|
|
82
89
|
Every tool declares one tier. The server refuses any tool whose tier is not
|
package/docs/platforms/macos.md
CHANGED
|
@@ -43,19 +43,26 @@ 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**,
|
|
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.
|
|
47
49
|
|
|
48
|
-
You don't need all
|
|
50
|
+
You don't need all four providers. Install whichever you prefer:
|
|
49
51
|
|
|
50
52
|
| Provider | Install | Minimum CLI | Auth |
|
|
51
53
|
|---|---|---|---|
|
|
52
54
|
| **Claude Code** | from [claude.com/download](https://claude.com/download) | none pinned | `claude login` |
|
|
53
55
|
| **Codex** | `brew install codex` | `0.128.0` | `codex login` |
|
|
54
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` |
|
|
55
58
|
|
|
56
|
-
After installing a provider CLI, quit and relaunch Specrails so the new `PATH`
|
|
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).
|
|
57
62
|
|
|
58
|
-
When everything is in order, the panel collapses to
|
|
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.
|
|
59
66
|
|
|
60
67
|
## PATH resolution
|
|
61
68
|
|
|
@@ -113,7 +120,8 @@ This points you at the actual fix (remove the stale link) instead of sending you
|
|
|
113
120
|
"git": "/usr/bin/git",
|
|
114
121
|
"claude": "/opt/homebrew/bin/claude",
|
|
115
122
|
"codex": null,
|
|
116
|
-
"gemini": null
|
|
123
|
+
"gemini": null,
|
|
124
|
+
"kimi": null
|
|
117
125
|
},
|
|
118
126
|
"nodeEnv": "production",
|
|
119
127
|
"platform": "darwin"
|
|
@@ -129,7 +137,7 @@ In the **shipped desktop app** the first segments come from the bundled runtimes
|
|
|
129
137
|
"loginShellStatus": "skipped"
|
|
130
138
|
```
|
|
131
139
|
|
|
132
|
-
`whichResults` is keyed by command name for **every** prerequisite the panel checks, so it includes `claude`/`codex`/`gemini` (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.
|
|
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.
|
|
133
141
|
|
|
134
142
|
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.
|
|
135
143
|
|
|
@@ -144,6 +152,8 @@ After installing or reinstalling Node (or a provider CLI):
|
|
|
144
152
|
|
|
145
153
|
## Known limitations
|
|
146
154
|
|
|
147
|
-
- **Provider requirement**: at least one provider CLI — Claude Code, Codex,
|
|
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.
|
|
148
158
|
- **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.
|
|
149
159
|
- **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.
|
|
@@ -54,7 +54,12 @@ The desktop app ships its own **Node** and **Git** runtimes inside the bundle, s
|
|
|
54
54
|
|
|
55
55
|
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.
|
|
56
56
|
|
|
57
|
-
The **provider CLIs** — **Claude Code**, **Codex**,
|
|
57
|
+
The **provider CLIs** — **Claude Code**, **Codex**, **Gemini**, and **Kimi
|
|
58
|
+
Code** — are **never bundled**. All four are probed through the system `PATH`
|
|
59
|
+
with `where.exe`; install at least one. Kimi 0.27+ requires Git for
|
|
60
|
+
Windows/Git Bash and the npm distribution requires Node 22.19+, both
|
|
61
|
+
user-managed. See [Kimi](../kimi.md), [Codex](../codex.md), and
|
|
62
|
+
[Gemini](../gemini.md).
|
|
58
63
|
|
|
59
64
|
## Updates
|
|
60
65
|
|
|
@@ -64,11 +69,11 @@ Note that updates are delivered as the **MSI** (verified by an embedded **minisi
|
|
|
64
69
|
|
|
65
70
|
## Setup wizard
|
|
66
71
|
|
|
67
|
-
When you add a project, the setup wizard runs `npx specrails-core@^4.
|
|
72
|
+
When you add a project, the setup wizard runs `npx specrails-core@^4.12.0 init --from-config` under the hood (the full spawn is `npx --yes --prefer-online specrails-core@^4.12.0 init --yes --from-config <tempPath>`, with the app writing a temporary `install-config.yaml`). The wizard has three steps — **Configure / Install / Done**.
|
|
68
73
|
|
|
69
74
|
There are two distinct version floors to be aware of:
|
|
70
75
|
|
|
71
|
-
- The app **installs** `specrails-core@^4.
|
|
76
|
+
- The app **installs** `specrails-core@^4.12.0` — the major-pinned range it ships (4.12.0 is the release that adds the Kimi provider target). The exact package spec is the `CORE_PACKAGE_SPEC` constant in `server/core-package.ts`, so it stays verifiable in one place. You need internet access at install time so `npx` can resolve it.
|
|
72
77
|
- The minimum it will **accept** at runtime is **specrails-core ≥ 4.1.0** — the Node-native installer floor (`MIN_NODE_NATIVE_CORE_VERSION`). Anything below that is a legacy bash/python3 installer and cannot run on Windows without WSL.
|
|
73
78
|
|
|
74
79
|
You can point the app at a local or linked build with the `SPECRAILS_CORE_BIN` environment variable (it overrides the `npx` spec above).
|
|
@@ -91,5 +96,5 @@ Reserved paths (`.specrails/profiles/**`, `.claude/agents/custom-*.md`) are pres
|
|
|
91
96
|
|
|
92
97
|
- [macOS platform guide](./macos.md) — the equivalent guide for Apple Silicon.
|
|
93
98
|
- [Getting started](../getting-started.md) — first run, adding a project, the dashboard tour.
|
|
94
|
-
- [Codex provider setup](../codex.md)
|
|
99
|
+
- [Codex provider setup](../codex.md), [Gemini provider setup](../gemini.md), and [Kimi provider setup](../kimi.md) — installing and configuring the provider CLIs.
|
|
95
100
|
- [CLI reference](../cli.md) — driving Specrails from the command line.
|
|
@@ -21,7 +21,10 @@ SpecsBoard (left) Rails (right)
|
|
|
21
21
|
|
|
22
22
|
A **rail** is an execution lane. Drag a spec card from the SpecsBoard onto a rail and press **▶ Play** to launch the pipeline. Rails let you organise and queue work into named lanes.
|
|
23
23
|
|
|
24
|
-
Rails
|
|
24
|
+
Rails default to the project's primary provider. If several are installed, a
|
|
25
|
+
per-rail engine selector can launch on **Claude**, **Codex**, **Gemini**, or
|
|
26
|
+
**Kimi** — see [Using Kimi](kimi.md). Implement and Batch run on every
|
|
27
|
+
registered provider; Freestyle is offered by Claude and Kimi.
|
|
25
28
|
|
|
26
29
|
> **One job at a time per project.** Each project has a single queue, so within a project only one rail job runs at a time; the rest queue behind it. Real parallelism is **across projects** — open two projects and their rails run independently. See [Running multiple rails](#running-multiple-rails).
|
|
27
30
|
|
|
@@ -33,7 +36,8 @@ Each rail has a header with:
|
|
|
33
36
|
- **Spec list** — the IDs of the specs assigned to this rail. Drag in more, drag out to detach. You can also use the **Move to rail** popover from a spec card; it shows a status dot per rail so you don't push work onto a busy lane.
|
|
34
37
|
- **Loop picker** — the **Loop** this rail runs: a built-in (`Implement`, `Batch`, or `Freestyle`) or one of your published custom loops. See [Loops](#loops).
|
|
35
38
|
- **Profile picker** — which agent profile this rail uses. This only appears once the project has **at least one** profile (create them on the Agents page). When present, `No profile` runs the rail in legacy mode.
|
|
36
|
-
- **Engine selector** — pick which installed provider (Claude, Codex,
|
|
39
|
+
- **Engine selector** — pick which installed provider (Claude, Codex, Gemini,
|
|
40
|
+
or Kimi) runs this rail. It renders only for multi-provider projects.
|
|
37
41
|
- **Play / Stop button** — start or cancel.
|
|
38
42
|
|
|
39
43
|
### Loops
|
|
@@ -44,7 +48,7 @@ A rail runs a **Loop**, picked in the rail header and persisted per rail. The th
|
|
|
44
48
|
|------|---------|--------------|
|
|
45
49
|
| **Implement** | `/specrails:implement` | One job covering all the specs on the rail. Runs the full Architect → Developer → Reviewer → Ship pipeline. |
|
|
46
50
|
| **Batch** | `/specrails:batch-implement` | One job that works through the rail's specs sequentially, in dependency-aware waves. |
|
|
47
|
-
| **Freestyle** | (Freestyle) |
|
|
51
|
+
| **Freestyle** | (Freestyle) | A provider with native Freestyle capability implements each spec autonomously, bypassing the OpenSpec pipeline. Claude and Kimi support it. |
|
|
48
52
|
|
|
49
53
|
Beyond the built-ins, the **Loops** section (left sidebar, above the project list) is a global, n8n-style **visual builder** shared across all your projects. A loop is a graph of typed steps:
|
|
50
54
|
|
|
@@ -55,6 +59,11 @@ Beyond the built-ins, the **Loops** section (left sidebar, above the project lis
|
|
|
55
59
|
|
|
56
60
|
Each run is bounded by **max iterations**, a wall-clock **timeout**, and an optional **cost cap** (USD, checked between steps). The builder also has live validation, a dry-run preview (resolve every step's exact text without spawning), import/export to JSON, and copy/paste of steps across loops. **Fork** a built-in to start from a working graph, then **Publish** to make a loop selectable on any rail.
|
|
57
61
|
|
|
62
|
+
Kimi runs built-in and custom loops whose graph contains AI/shell steps but no
|
|
63
|
+
**Loop Decider**. A Decider's constrained `continue`/`stop` verdict is a
|
|
64
|
+
pure-output action; Kimi 0.27 `-p` cannot enforce the required no-tools
|
|
65
|
+
boundary, so Kimi + Decider is rejected before the loop starts.
|
|
66
|
+
|
|
58
67
|
> Loop runs stream live in the Jobs view like any rail job — and the Job Detail view groups a loop's log **by step**: a live chip map of the graph on top, one collapsible section per step below, with follow mode tracking the running step. Provider/model/effort are governed by the **rail**, not the loop's steps.
|
|
59
68
|
|
|
60
69
|
### Pipeline phases
|
|
@@ -65,7 +74,8 @@ Each run is bounded by **max iterations**, a wall-clock **timeout**, and an opti
|
|
|
65
74
|
Architect ──► Developer ──► Reviewer ──► Ship
|
|
66
75
|
```
|
|
67
76
|
|
|
68
|
-
Each phase is a specialised
|
|
77
|
+
Each phase is a specialised role invoked by the rail's engine (Claude, Codex,
|
|
78
|
+
Gemini, or Kimi) in an isolated project worktree:
|
|
69
79
|
|
|
70
80
|
| Phase | Agent | What it does |
|
|
71
81
|
|-------|-------|--------------|
|
|
@@ -80,13 +90,24 @@ In plain terms: the project's **agent profile** decides which AI agent handles e
|
|
|
80
90
|
|
|
81
91
|
### Freestyle
|
|
82
92
|
|
|
83
|
-
`Freestyle` (mode value `freestyle` on the API
|
|
93
|
+
`Freestyle` (mode value `freestyle` on the API) skips the Architect →
|
|
94
|
+
Developer → Reviewer → Ship pipeline. It hands the selected Freestyle-capable
|
|
95
|
+
provider a configurable pre-prompt plus the full spec and lets it work
|
|
96
|
+
autonomously with native tools.
|
|
84
97
|
|
|
85
98
|
- **One job per spec.** If the rail has three specs, `Freestyle` launches three independent jobs.
|
|
86
99
|
- **Variable cost.** Because the run is open-ended, pressing Play opens a confirmation dialog before anything spawns.
|
|
87
|
-
- **Model picker.** A per-rail control
|
|
88
|
-
|
|
89
|
-
-
|
|
100
|
+
- **Model picker.** A per-rail control uses the selected provider's model
|
|
101
|
+
catalog. Kimi offers `k3`, `kimi-for-coding`, and
|
|
102
|
+
`kimi-for-coding-highspeed`; low/high/max effort appears only for K3.
|
|
103
|
+
- **Capability-gated.** Claude and Kimi advertise Freestyle. Codex and Gemini
|
|
104
|
+
do not. Agent profiles do not apply to Freestyle rails.
|
|
105
|
+
- **Transport-aware interaction.** Claude's persistent-stdin Freestyle run is
|
|
106
|
+
a live session and waits for **Finalize**. Kimi Freestyle is agentic too,
|
|
107
|
+
but `kimi -p` has no persistent stdin transport; it follows the owned
|
|
108
|
+
one-process lifecycle and later conversations resume through a new process
|
|
109
|
+
only after Kimi has emitted a session hint. Can be disabled server-side via
|
|
110
|
+
`SPECRAILS_INTERACTIVE_JOBS=false`.
|
|
90
111
|
|
|
91
112
|
You can customise the Freestyle pre-prompt per project on the [Settings page](customizing.md#freestyle-pre-prompt).
|
|
92
113
|
|
|
@@ -123,7 +144,7 @@ Two panels sit above the streaming log:
|
|
|
123
144
|
|
|
124
145
|
Below: the full streaming log with auto-scroll, search, and copy.
|
|
125
146
|
|
|
126
|
-
**Talk to the running job.** Every Claude job (and every Claude AI step in a loop run) is an interactive session by default: a chat composer sits at the bottom of the Job Detail page — and of the job modal in mission mode — so you can ask the running agent a question or steer it mid-run. Messages sent while the model is streaming queue up and run next; the job keeps following its plan. The composer shows a live `N turns · $X` line summed from each completed turn's real usage (still no estimates). Most jobs finish on their own the moment a turn completes with nothing queued — a subtle **Wrap up now** ends them early; Freestyle jobs instead wait for your explicit **Finalize**. During a loop run your messages reach the currently running AI step (between steps the composer shows a short waiting state, and **Settle this step** advances the loop). Codex and
|
|
147
|
+
**Talk to the running job.** Every Claude job (and every Claude AI step in a loop run) is an interactive session by default: a chat composer sits at the bottom of the Job Detail page — and of the job modal in mission mode — so you can ask the running agent a question or steer it mid-run. Messages sent while the model is streaming queue up and run next; the job keeps following its plan. The composer shows a live `N turns · $X` line summed from each completed turn's real usage (still no estimates). Most jobs finish on their own the moment a turn completes with nothing queued — a subtle **Wrap up now** ends them early; Freestyle jobs instead wait for your explicit **Finalize**. During a loop run your messages reach the currently running AI step (between steps the composer shows a short waiting state, and **Settle this step** advances the loop). Codex, Gemini, and Kimi rail processes do not expose Claude's persistent-stdin transport; Kimi chat surfaces resume a recorded session by spawning a new `kimi -p` process. Server kill switch: `SPECRAILS_INTERACTIVE_JOBS=false`.
|
|
127
148
|
|
|
128
149
|
### Cancelling a job
|
|
129
150
|
|
|
@@ -131,7 +152,11 @@ Click **Stop** on the rail header. The app sends `SIGTERM` to the subprocess, wa
|
|
|
131
152
|
|
|
132
153
|
### If a rail won't launch
|
|
133
154
|
|
|
134
|
-
If you pick an engine whose CLI isn't installed on your machine, the launch
|
|
155
|
+
If you pick an engine whose CLI isn't installed on your machine, the launch
|
|
156
|
+
fails fast instead of starting a broken job. Install the missing provider CLI
|
|
157
|
+
— see [Using Codex](codex.md), [Using Gemini](gemini.md), or
|
|
158
|
+
[Using Kimi](kimi.md) — then launch again. Kimi requires the external
|
|
159
|
+
authenticated `kimi` 0.27+ executable; Desktop never starts a server for it.
|
|
135
160
|
|
|
136
161
|
### Diagnostic export
|
|
137
162
|
|
|
@@ -172,7 +197,8 @@ Pick the profile from the **rail header's profile dropdown**. It's preselected t
|
|
|
172
197
|
|
|
173
198
|
The **`No profile`** option always exists — use it to run a rail exactly as it did pre-4.1.0. (The dropdown itself only appears once the project has at least one profile.)
|
|
174
199
|
|
|
175
|
-
> **Profiles apply to
|
|
200
|
+
> **Profiles apply to providers that advertise role/profile execution.** Claude
|
|
201
|
+
> and Kimi support them. Codex and Gemini currently run in legacy mode.
|
|
176
202
|
|
|
177
203
|
### Custom agents (Agent Studio)
|
|
178
204
|
|
|
@@ -208,6 +234,8 @@ Per-project bundled integrations. Click **Integrations** in the project's right
|
|
|
208
234
|
|
|
209
235
|
Each plugin tile has:
|
|
210
236
|
|
|
237
|
+
- **AI provider** — for multi-provider projects, selects the independent
|
|
238
|
+
Claude, Codex, or Kimi installation to inspect or change.
|
|
211
239
|
- **Status** — `not installed`, `installed`, `orphan` (state file mentions it but `.mcp.json` doesn't), or `degraded` (verify failed).
|
|
212
240
|
- **Preview install** — shows which `mcpServers` entries and agent fragments will land where, so you can sanity-check before clicking.
|
|
213
241
|
- **Install** — applies the changes. Progress streams over the WebSocket (`plugin.install_progress` event).
|
|
@@ -218,7 +246,8 @@ Each plugin tile has:
|
|
|
218
246
|
|
|
219
247
|
Before each rail spawn, the app:
|
|
220
248
|
|
|
221
|
-
1. Resolves the
|
|
249
|
+
1. Resolves only the plugins installed for the rail's effective AI provider
|
|
250
|
+
(parallel verify, per-plugin 2 s timeout).
|
|
222
251
|
2. Classifies them into `active` and `degraded`.
|
|
223
252
|
3. Writes a per-job snapshot to `~/.specrails/projects/<slug>/jobs/<jobId>/plugins.json` (chmod 400).
|
|
224
253
|
4. Injects two env vars into the subprocess: `SPECRAILS_PLUGINS_ACTIVE` (CSV) and `SPECRAILS_PLUGINS_SNAPSHOT` (file path).
|
|
@@ -230,6 +259,11 @@ Degraded plugins are **non-blocking** — the rail spawns anyway, but a `plugin.
|
|
|
230
259
|
The app never wholesale rewrites these files:
|
|
231
260
|
|
|
232
261
|
- `<project>/.mcp.json` — surgical merge per plugin.
|
|
262
|
+
- `<project>/.kimi-code/mcp.json` — Kimi-native surgical MCP merge.
|
|
263
|
+
- `<project>/CLAUDE.md`, `<project>/AGENTS.md`,
|
|
264
|
+
`<project>/GEMINI.md`, or `<project>/.kimi-code/AGENTS.md` —
|
|
265
|
+
provider-native managed instruction blocks. Provider-relative paths remain
|
|
266
|
+
independent unless two adapters explicitly declare the same path.
|
|
233
267
|
- `<project>/.specrails/plugins/state.json` — install registry.
|
|
234
268
|
- `<project>/.specrails/plugins/snapshots/<jobId>.json` — per-job snapshots.
|
|
235
269
|
- `<project>/.claude/agents/custom-<plugin>.md` — optional fragment per plugin.
|
package/docs/terminal.md
CHANGED
|
@@ -32,7 +32,7 @@ You don't have to. You can keep using iTerm/Windows Terminal/Alacritty/whatever
|
|
|
32
32
|
|
|
33
33
|
The panel header carries three one-click shortcuts:
|
|
34
34
|
|
|
35
|
-
- **Open AI CLI** (✨ Sparkles) — spins up a fresh session and types the launch command for you. On a single-provider project it launches the project's provider CLI directly (`claude`, `codex`, or `
|
|
35
|
+
- **Open AI CLI** (✨ Sparkles) — spins up a fresh session and types the launch command for you. On a single-provider project it launches the project's provider CLI directly (`claude`, `codex`, `gemini`, or `kimi`); on a multi-provider project it opens a small picker so you choose which CLI to start. Kimi launches the CLI itself, not `kimi server`.
|
|
36
36
|
- **Open in browser** (🌐 Globe) — opens the URL from the `browserShortcutUrl` setting (default `https://specrails.dev`). Right-click it to jump to the setting and change the URL.
|
|
37
37
|
- **Paste quick script** (`</>`) — writes the snippet from the `quickScript` setting (which defaults to a personalised `echo "Wake up, <username> …"` reminder, editable in Settings) into the active session. Right-click it to edit the snippet in Settings. Disabled when there's no active terminal or the snippet is empty.
|
|
38
38
|
|