specrails-desktop 2.58.1 → 2.59.1
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-vAY9C71W.js} +1 -1
- package/client/dist/assets/AgentBrowserCapture-CpwjGXQm.js +1 -0
- package/client/dist/assets/AgentModeAnalyticsPane-BHeoJVxQ.js +2 -0
- package/client/dist/assets/AgentModeCodePane-B0Nf3YkN.js +2 -0
- package/client/dist/assets/{AgentModeJobsPane-DR_06oqH.js → AgentModeJobsPane-CpbIItY_.js} +1 -1
- package/client/dist/assets/{AgentsPage-BKIKjm_1.js → AgentsPage-BVJAFXn3.js} +3 -3
- package/client/dist/assets/{AnalyticsPage-069npRVo.js → AnalyticsPage-DDWees-K.js} +1 -1
- package/client/dist/assets/CodePage-CzV5tkvS.js +3 -0
- package/client/dist/assets/{DesktopAnalyticsPage-qtWAPM47.js → DesktopAnalyticsPage-DfRHNK7i.js} +1 -1
- package/client/dist/assets/DocsDialog-BxduBYbh.js +11 -0
- package/client/dist/assets/DocsPage-DOVeRJn_.js +11 -0
- package/client/dist/assets/{ExportDropdown-BcMpvV89.js → ExportDropdown-BnKVV8UK.js} +1 -1
- package/client/dist/assets/InteractiveJobComposer-Da9dvM-0.js +19 -0
- package/client/dist/assets/JobDetailModal-DhwKbZGe.js +1 -0
- package/client/dist/assets/JobDetailPage-MtPE-E_1.js +1 -0
- package/client/dist/assets/JobsPage-0vdlbNik.js +1 -0
- package/client/dist/assets/LoopBuilderPage-DCUHozXh.js +1 -0
- package/client/dist/assets/{LoopPreviewModal-je5pSCf-.js → LoopPreviewModal-Df-S8NGf.js} +1 -1
- package/client/dist/assets/LoopWindowSurface-sdb7QbSo.js +1 -0
- package/client/dist/assets/LoopsPage-CDfCC9Px.js +2 -0
- package/client/dist/assets/MinimizedChatsContext-DKlPf54Y.js +1 -0
- package/client/dist/assets/PluginsPage-iL0G3rQQ.js +2 -0
- package/client/dist/assets/ProjectSettingsDialog-DOkjT7xv.js +1 -0
- package/client/dist/assets/{RepositoryDeliveries-BiwJuS8r.js → RepositoryDeliveries-CJVpOUpZ.js} +1 -1
- package/client/dist/assets/RepositoryScopeSelector-BeM-2gIZ.js +2 -0
- package/client/dist/assets/ReviewPacketPage-EBCim2w_.js +4 -0
- package/client/dist/assets/TemplatePreviewModal-1-92UGwN.js +1 -0
- package/client/dist/assets/TicketDetailModalContext-CkVXuHxU.js +16 -0
- package/client/dist/assets/{Trans-D3AfDylf.js → Trans-CzhPjnjB.js} +1 -1
- package/client/dist/assets/agent--8QAfoXL.js +1 -0
- package/client/dist/assets/agent-3HxXkIWX.js +1 -0
- package/client/dist/assets/agent-BjttZLIl.js +1 -0
- package/client/dist/assets/agent-CpFCz32T.js +1 -0
- package/client/dist/assets/agent-DVnw6ybO.js +1 -0
- package/client/dist/assets/agent-Z5s_GTP0.js +1 -0
- package/client/dist/assets/agent-hv57-zyG.js +1 -0
- package/client/dist/assets/agent-xGrZ_aN1.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-DlQaXc7c.js} +1 -1
- package/client/dist/assets/{getTimezoneOffsetInMilliseconds-DOGj1Mfz.js → getTimezoneOffsetInMilliseconds-DxUFGcVq.js} +1 -1
- package/client/dist/assets/index-Bfunvi6w.css +2 -0
- package/client/dist/assets/index-Czov72g7.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-CbJvbRYx.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-BkBD3rxx.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-CYotH-9N.js} +1 -1
- package/client/dist/assets/subscriptionUsage-BH73RO86.js +1 -0
- package/client/dist/assets/subscriptionUsage-BWTeWlHx.js +1 -0
- package/client/dist/assets/subscriptionUsage-CBh82zVa.js +1 -0
- package/client/dist/assets/subscriptionUsage-CHcQ7lLe.js +1 -0
- package/client/dist/assets/subscriptionUsage-CdlE5Mg1.js +1 -0
- package/client/dist/assets/subscriptionUsage-DUPBmSQi.js +1 -0
- package/client/dist/assets/subscriptionUsage-DrlwrJ17.js +1 -0
- package/client/dist/assets/subscriptionUsage-EFu0mIK3.js +1 -0
- package/client/dist/assets/tauri-shell-DE6LfGPw.js +2 -0
- package/client/dist/assets/{useDesktop-0unHDBJJ.js → useDesktop-DpxVGfUC.js} +1 -1
- package/client/dist/assets/{useRuntimeRuns-BN1rhyEm.js → useRuntimeRuns-CfGRbhr9.js} +1 -1
- package/client/dist/assets/useSharedWebSocket-C17TGqT8.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/api-reference.md +1 -0
- package/docs/internals/core-runtime-updates.md +9 -2
- package/docs/internals/desktop-owned-workflows.md +144 -0
- package/docs/internals/mission-rail-cards.md +15 -0
- package/docs/internals/operations-runbook.md +26 -0
- package/docs/internals/programmatic-agent-runtime.md +34 -28
- package/docs/internals/project-builder.md +34 -11
- package/docs/internals/safe-pr-review-flow.md +25 -7
- package/docs/internals/source-map.md +53 -3
- package/docs/internals/spec-addenda.md +11 -5
- package/docs/internals/visual-design-audit.md +5 -0
- 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/core-update-manager.js +1 -1
- package/server/dist/db/migrations.js +9 -0
- 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 +169 -17
- 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 +10 -5
- package/server/dist/modules/delivery/runtime/rail-isolated-launch.js +66 -30
- package/server/dist/modules/delivery/runtime/rail-launch-parser.js +8 -0
- package/server/dist/modules/delivery/runtime/rail-pr-store.js +3 -3
- package/server/dist/modules/delivery/runtime/rail-relaunch.js +154 -0
- package/server/dist/modules/delivery/runtime/rails-router.js +157 -36
- package/server/dist/modules/delivery/runtime/review-packet.js +1 -1
- package/server/dist/modules/execution/runtime/revision-seed.js +6 -2
- 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-events.js +1 -1
- 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 +53 -0
- package/server/dist/modules/loops/runtime/loop-run-manager.js +30 -20
- 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 +123 -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 +12 -0
- package/server/dist/modules/subscription-usage/domain.js +104 -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/server/dist/worktree-manager.js +114 -6
- package/server/dist/worktree-overlay.js +4 -4
- 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
|
@@ -5,7 +5,7 @@ architectural dependency declaration. Search a heading or filename and read only
|
|
|
5
5
|
the relevant source and tests. Feature prefixes group the legacy server files;
|
|
6
6
|
new bounded modules live under `server/modules/`.
|
|
7
7
|
|
|
8
|
-
Includes
|
|
8
|
+
Includes 1014 source/build files. Nearby tests are linked where names
|
|
9
9
|
match; integration suites may live elsewhere. Use `rg` to find other consumers.
|
|
10
10
|
|
|
11
11
|
## cli
|
|
@@ -33,6 +33,7 @@ match; integration suites may live elsewhere. Use `rg` to find other consumers.
|
|
|
33
33
|
|
|
34
34
|
- [ArcSidebar.tsx](../../client/src/components/ArcSidebar.tsx) · [test](../../client/src/components/__tests__/ArcSidebar.test.tsx)
|
|
35
35
|
- [CommandPalette.tsx](../../client/src/components/CommandPalette.tsx) · [test](../../client/src/components/__tests__/CommandPalette.test.tsx)
|
|
36
|
+
- [KeepAwakeControl.tsx](../../client/src/components/KeepAwakeControl.tsx) · [test](../../client/src/components/__tests__/KeepAwakeControl.test.tsx)
|
|
36
37
|
- [KeyboardShortcutsCheatsheet.tsx](../../client/src/components/KeyboardShortcutsCheatsheet.tsx) · [test](../../client/src/components/__tests__/KeyboardShortcutsCheatsheet.test.tsx)
|
|
37
38
|
- [ProjectLayout.tsx](../../client/src/components/ProjectLayout.tsx) · [test](../../client/src/components/__tests__/ProjectLayout.test.tsx)
|
|
38
39
|
- [ProjectRightSidebar.tsx](../../client/src/components/ProjectRightSidebar.tsx) · [test](../../client/src/components/__tests__/ProjectRightSidebar.test.tsx)
|
|
@@ -377,9 +378,11 @@ match; integration suites may live elsewhere. Use `rg` to find other consumers.
|
|
|
377
378
|
- [CoreParameterForm.tsx](../../client/src/features/loops/components/CoreParameterForm.tsx) · [test](../../client/src/features/loops/components/__tests__/CoreParameterForm.test.tsx)
|
|
378
379
|
- [CoreWorkflowInspector.tsx](../../client/src/features/loops/components/CoreWorkflowInspector.tsx) · [test](../../client/src/features/loops/components/__tests__/CoreWorkflowInspector.test.tsx)
|
|
379
380
|
- [LegacyConversionModal.tsx](../../client/src/features/loops/components/LegacyConversionModal.tsx) · [test](../../client/src/features/loops/components/__tests__/LegacyConversionModal.test.tsx)
|
|
381
|
+
- [LoopAgentsEditor.tsx](../../client/src/features/loops/components/LoopAgentsEditor.tsx) · [test](../../client/src/features/loops/components/LoopAgentsEditor.test.tsx)
|
|
380
382
|
- [LoopMigrationPanel.tsx](../../client/src/features/loops/components/LoopMigrationPanel.tsx) · [test](../../client/src/features/loops/components/__tests__/LoopMigrationPanel.test.tsx)
|
|
381
383
|
- [LoopPreviewModal.tsx](../../client/src/features/loops/components/LoopPreviewModal.tsx)
|
|
382
384
|
- [LoopRunModal.tsx](../../client/src/features/loops/components/LoopRunModal.tsx) · [test](../../client/src/features/loops/components/__tests__/LoopRunModal.test.tsx)
|
|
385
|
+
- [LoopWindowSurface.tsx](../../client/src/features/loops/components/LoopWindowSurface.tsx) · [test](../../client/src/features/loops/components/__tests__/LoopWindowSurface.test.tsx)
|
|
383
386
|
- [TemplatePreviewModal.tsx](../../client/src/features/loops/components/TemplatePreviewModal.tsx) · [test](../../client/src/features/loops/components/__tests__/TemplatePreviewModal.test.tsx)
|
|
384
387
|
|
|
385
388
|
## client/src/features/loops/components/loop-log
|
|
@@ -412,6 +415,7 @@ match; integration suites may live elsewhere. Use `rg` to find other consumers.
|
|
|
412
415
|
- [loop-template-filter.ts](../../client/src/features/loops/lib/loop-template-filter.ts) · [test](../../client/src/features/loops/lib/__tests__/loop-template-filter.test.ts)
|
|
413
416
|
- [loop-ticket-need.ts](../../client/src/features/loops/lib/loop-ticket-need.ts) · [test](../../client/src/features/loops/lib/__tests__/loop-ticket-need.test.ts)
|
|
414
417
|
- [loop-validate.ts](../../client/src/features/loops/lib/loop-validate.ts) · [test](../../client/src/features/loops/lib/__tests__/loop-validate.test.ts)
|
|
418
|
+
- [loop-windows.ts](../../client/src/features/loops/lib/loop-windows.ts) · [test](../../client/src/features/loops/lib/__tests__/loop-windows.test.ts)
|
|
415
419
|
- [loops-api.ts](../../client/src/features/loops/lib/loops-api.ts) · [test](../../client/src/features/loops/lib/__tests__/loops-api.test.ts)
|
|
416
420
|
|
|
417
421
|
## client/src/features/loops/pages
|
|
@@ -450,11 +454,14 @@ match; integration suites may live elsewhere. Use `rg` to find other consumers.
|
|
|
450
454
|
- [AgentRailLaunchCard.tsx](../../client/src/features/missions/components/AgentRailLaunchCard.tsx)
|
|
451
455
|
- [AgentRefChip.tsx](../../client/src/features/missions/components/AgentRefChip.tsx)
|
|
452
456
|
- [AgentRunFailureMarker.tsx](../../client/src/features/missions/components/AgentRunFailureMarker.tsx)
|
|
457
|
+
- [AgentRuntimeSelector.tsx](../../client/src/features/missions/components/AgentRuntimeSelector.tsx)
|
|
453
458
|
- [AgentSpecDraftCard.tsx](../../client/src/features/missions/components/AgentSpecDraftCard.tsx)
|
|
454
459
|
- [AgentThinkingHalo.tsx](../../client/src/features/missions/components/AgentThinkingHalo.tsx) · [test](../../client/src/features/missions/components/__tests__/AgentThinkingHalo.test.tsx)
|
|
455
460
|
- [AgentTierChip.tsx](../../client/src/features/missions/components/AgentTierChip.tsx)
|
|
456
461
|
- [AgentToolbarSelector.tsx](../../client/src/features/missions/components/AgentToolbarSelector.tsx)
|
|
457
462
|
- [AgentWorkspaceSidebar.tsx](../../client/src/features/missions/components/AgentWorkspaceSidebar.tsx) · [test](../../client/src/features/missions/components/__tests__/AgentWorkspaceSidebar.test.tsx)
|
|
463
|
+
- [MissionConversationMenu.tsx](../../client/src/features/missions/components/MissionConversationMenu.tsx)
|
|
464
|
+
- [MissionSplitLayout.tsx](../../client/src/features/missions/components/MissionSplitLayout.tsx) · [test](../../client/src/features/missions/components/__tests__/MissionSplitLayout.test.tsx)
|
|
458
465
|
- [MissionWindowAction.tsx](../../client/src/features/missions/components/MissionWindowAction.tsx) · [test](../../client/src/features/missions/components/__tests__/MissionWindowAction.test.tsx)
|
|
459
466
|
- [MissionWindowBindings.tsx](../../client/src/features/missions/components/MissionWindowBindings.tsx) · [test](../../client/src/features/missions/components/MissionWindowBindings.test.tsx)
|
|
460
467
|
- [MissionWindowSurface.tsx](../../client/src/features/missions/components/MissionWindowSurface.tsx)
|
|
@@ -477,6 +484,7 @@ match; integration suites may live elsewhere. Use `rg` to find other consumers.
|
|
|
477
484
|
- [AgentChatContext.tsx](../../client/src/features/missions/context/AgentChatContext.tsx) · [test](../../client/src/features/missions/context/AgentChatContext.test.tsx)
|
|
478
485
|
- [AgentWorkspaceContext.tsx](../../client/src/features/missions/context/AgentWorkspaceContext.tsx) · [test](../../client/src/features/missions/context/__tests__/AgentWorkspaceContext.test.tsx)
|
|
479
486
|
- [MinimizedChatsContext.tsx](../../client/src/features/missions/context/MinimizedChatsContext.tsx) · [test](../../client/src/features/missions/context/__tests__/MinimizedChatsContext.test.tsx)
|
|
487
|
+
- [MissionSplitViewsContext.tsx](../../client/src/features/missions/context/MissionSplitViewsContext.tsx)
|
|
480
488
|
- [MissionWindowsContext.tsx](../../client/src/features/missions/context/MissionWindowsContext.tsx) · [test](../../client/src/features/missions/context/__tests__/MissionWindowsContext.test.tsx)
|
|
481
489
|
|
|
482
490
|
## client/src/features/missions/hooks
|
|
@@ -490,10 +498,15 @@ match; integration suites may live elsewhere. Use `rg` to find other consumers.
|
|
|
490
498
|
- [agent-context-palette.ts](../../client/src/features/missions/lib/agent-context-palette.ts) · [test](../../client/src/features/missions/lib/__tests__/agent-context-palette.test.ts)
|
|
491
499
|
- [agent-refs.ts](../../client/src/features/missions/lib/agent-refs.ts) · [test](../../client/src/features/missions/lib/__tests__/agent-refs.test.ts)
|
|
492
500
|
- [mission-search.ts](../../client/src/features/missions/lib/mission-search.ts) · [test](../../client/src/features/missions/lib/__tests__/mission-search.test.ts)
|
|
501
|
+
- [mission-split-layout.ts](../../client/src/features/missions/lib/mission-split-layout.ts) · [test](../../client/src/features/missions/lib/__tests__/mission-split-layout.test.ts)
|
|
493
502
|
- [mission-view-state.ts](../../client/src/features/missions/lib/mission-view-state.ts)
|
|
494
503
|
- [mission-window-controller.ts](../../client/src/features/missions/lib/mission-window-controller.ts) · [test](../../client/src/features/missions/lib/__tests__/mission-window-controller.test.ts)
|
|
495
504
|
- [mission-windows.ts](../../client/src/features/missions/lib/mission-windows.ts) · [test](../../client/src/features/missions/lib/__tests__/mission-windows.test.ts)
|
|
496
505
|
|
|
506
|
+
## client/src/features/plugins/lib
|
|
507
|
+
|
|
508
|
+
- [plugin-windows.ts](../../client/src/features/plugins/lib/plugin-windows.ts) · [test](../../client/src/features/plugins/lib/__tests__/plugin-windows.test.ts)
|
|
509
|
+
|
|
497
510
|
## client/src/features/plugins/pages
|
|
498
511
|
|
|
499
512
|
- [PluginsPage.tsx](../../client/src/features/plugins/pages/PluginsPage.tsx) · [test](../../client/src/features/plugins/pages/__tests__/PluginsPage.test.tsx)
|
|
@@ -571,11 +584,9 @@ match; integration suites may live elsewhere. Use `rg` to find other consumers.
|
|
|
571
584
|
- [EffectsSection.tsx](../../client/src/features/settings/components/EffectsSection.tsx) · [test](../../client/src/features/settings/components/__tests__/EffectsSection.test.tsx)
|
|
572
585
|
- [ExternalMcpServersCard.tsx](../../client/src/features/settings/components/ExternalMcpServersCard.tsx) · [test](../../client/src/features/settings/components/__tests__/ExternalMcpServersCard.test.tsx)
|
|
573
586
|
- [LanguageSection.tsx](../../client/src/features/settings/components/LanguageSection.tsx) · [test](../../client/src/features/settings/components/__tests__/LanguageSection.test.tsx)
|
|
574
|
-
- [LoopRolesSection.tsx](../../client/src/features/settings/components/LoopRolesSection.tsx) · [test](../../client/src/features/settings/components/__tests__/LoopRolesSection.test.tsx)
|
|
575
587
|
- [McpSettingsSection.tsx](../../client/src/features/settings/components/McpSettingsSection.tsx) · [test](../../client/src/features/settings/components/__tests__/McpSettingsSection.test.tsx)
|
|
576
588
|
- [MobileAccessSection.tsx](../../client/src/features/settings/components/MobileAccessSection.tsx) · [test](../../client/src/features/settings/components/__tests__/MobileAccessSection.test.tsx)
|
|
577
589
|
- [PairWebCompanionModal.tsx](../../client/src/features/settings/components/PairWebCompanionModal.tsx)
|
|
578
|
-
- [PipelineStepper.tsx](../../client/src/features/settings/components/PipelineStepper.tsx) · [test](../../client/src/features/settings/components/__tests__/PipelineStepper.test.tsx)
|
|
579
590
|
- [ProjectRepositoriesSection.tsx](../../client/src/features/settings/components/ProjectRepositoriesSection.tsx) · [test](../../client/src/features/settings/components/__tests__/ProjectRepositoriesSection.test.tsx)
|
|
580
591
|
- [ProjectSettingsDialog.tsx](../../client/src/features/settings/components/ProjectSettingsDialog.tsx) · [test](../../client/src/features/settings/components/__tests__/ProjectSettingsDialog.test.tsx)
|
|
581
592
|
- [ProjectSettingsSections.tsx](../../client/src/features/settings/components/ProjectSettingsSections.tsx)
|
|
@@ -704,6 +715,20 @@ match; integration suites may live elsewhere. Use `rg` to find other consumers.
|
|
|
704
715
|
|
|
705
716
|
- [spec-sort.ts](../../client/src/features/specs/types/spec-sort.ts)
|
|
706
717
|
|
|
718
|
+
## client/src/features/subscription-usage/components
|
|
719
|
+
|
|
720
|
+
- [EnterpriseSpendMeter.tsx](../../client/src/features/subscription-usage/components/EnterpriseSpendMeter.tsx)
|
|
721
|
+
- [SubscriptionUsageFooter.tsx](../../client/src/features/subscription-usage/components/SubscriptionUsageFooter.tsx)
|
|
722
|
+
- [SubscriptionUsagePanel.tsx](../../client/src/features/subscription-usage/components/SubscriptionUsagePanel.tsx)
|
|
723
|
+
- [SubscriptionUsageSection.tsx](../../client/src/features/subscription-usage/components/SubscriptionUsageSection.tsx)
|
|
724
|
+
- [UsageProviderIcon.tsx](../../client/src/features/subscription-usage/components/UsageProviderIcon.tsx)
|
|
725
|
+
|
|
726
|
+
## client/src/features/subscription-usage/lib
|
|
727
|
+
|
|
728
|
+
- [store.ts](../../client/src/features/subscription-usage/lib/store.ts)
|
|
729
|
+
- [types.ts](../../client/src/features/subscription-usage/lib/types.ts)
|
|
730
|
+
- [useSubscriptionUsage.ts](../../client/src/features/subscription-usage/lib/useSubscriptionUsage.ts)
|
|
731
|
+
|
|
707
732
|
## client/src/features/terminals/components/terminal
|
|
708
733
|
|
|
709
734
|
- [BottomPanel.tsx](../../client/src/features/terminals/components/terminal/BottomPanel.tsx) · [test](../../client/src/features/terminals/components/terminal/__tests__/BottomPanel.test.tsx)
|
|
@@ -1195,6 +1220,7 @@ match; integration suites may live elsewhere. Use `rg` to find other consumers.
|
|
|
1195
1220
|
- [rail-pr-recovery-git.ts](../../server/modules/delivery/runtime/rail-pr-recovery-git.ts) · [test](../../server/modules/delivery/runtime/rail-pr-recovery-git.test.ts)
|
|
1196
1221
|
- [rail-pr-store.ts](../../server/modules/delivery/runtime/rail-pr-store.ts) · [test](../../server/modules/delivery/runtime/rail-pr-store.test.ts)
|
|
1197
1222
|
- [rail-pr-ticket-effects.ts](../../server/modules/delivery/runtime/rail-pr-ticket-effects.ts) · [test](../../server/modules/delivery/runtime/rail-pr-ticket-effects.test.ts)
|
|
1223
|
+
- [rail-relaunch.ts](../../server/modules/delivery/runtime/rail-relaunch.ts) · [test](../../server/modules/delivery/runtime/rail-relaunch.test.ts)
|
|
1198
1224
|
- [rail-worktree-release.ts](../../server/modules/delivery/runtime/rail-worktree-release.ts) · [test](../../server/modules/delivery/runtime/rail-worktree-release.test.ts)
|
|
1199
1225
|
- [rail-worktrees-store.ts](../../server/modules/delivery/runtime/rail-worktrees-store.ts) · [test](../../server/modules/delivery/runtime/rail-worktrees-store.test.ts)
|
|
1200
1226
|
- [rails-router.ts](../../server/modules/delivery/runtime/rails-router.ts) · [test](../../server/modules/delivery/runtime/rails-router.test.ts)
|
|
@@ -1242,6 +1268,7 @@ match; integration suites may live elsewhere. Use `rg` to find other consumers.
|
|
|
1242
1268
|
- [builtin-loops.ts](../../server/modules/loops/runtime/builtin-loops.ts) · [test](../../server/modules/loops/runtime/builtin-loops.test.ts)
|
|
1243
1269
|
- [definition-cancellation.ts](../../server/modules/loops/runtime/definition-cancellation.ts) · [test](../../server/modules/loops/runtime/definition-cancellation.test.ts)
|
|
1244
1270
|
- [legacy-launch-telemetry.ts](../../server/modules/loops/runtime/legacy-launch-telemetry.ts) · [test](../../server/modules/loops/runtime/legacy-launch-telemetry.test.ts)
|
|
1271
|
+
- [loop-agents.ts](../../server/modules/loops/runtime/loop-agents.ts) · [test](../../server/modules/loops/runtime/loop-agents.test.ts)
|
|
1245
1272
|
- [loop-command-catalog.ts](../../server/modules/loops/runtime/loop-command-catalog.ts) · [test](../../server/modules/loops/runtime/loop-command-catalog.test.ts)
|
|
1246
1273
|
- [loop-compat.ts](../../server/modules/loops/runtime/loop-compat.ts) · [test](../../server/modules/loops/runtime/loop-compat.test.ts)
|
|
1247
1274
|
- [loop-constants.ts](../../server/modules/loops/runtime/loop-constants.ts) · [test](../../server/modules/loops/runtime/loop-constants.test.ts)
|
|
@@ -1256,6 +1283,7 @@ match; integration suites may live elsewhere. Use `rg` to find other consumers.
|
|
|
1256
1283
|
- [loop-executors.ts](../../server/modules/loops/runtime/loop-executors.ts) · [test](../../server/modules/loops/runtime/loop-executors.test.ts)
|
|
1257
1284
|
- [loop-factory.ts](../../server/modules/loops/runtime/loop-factory.ts) · [test](../../server/modules/loops/runtime/loop-factory.test.ts)
|
|
1258
1285
|
- [loop-graph.ts](../../server/modules/loops/runtime/loop-graph.ts) · [test](../../server/modules/loops/runtime/loop-graph.test.ts)
|
|
1286
|
+
- [loop-implement-recipe.ts](../../server/modules/loops/runtime/loop-implement-recipe.ts) · [test](../../server/modules/loops/runtime/loop-implement-recipe.test.ts)
|
|
1259
1287
|
- [loop-migration.ts](../../server/modules/loops/runtime/loop-migration.ts)
|
|
1260
1288
|
- [loop-preview.ts](../../server/modules/loops/runtime/loop-preview.ts) · [test](../../server/modules/loops/runtime/loop-preview.test.ts)
|
|
1261
1289
|
- [loop-role-engines.ts](../../server/modules/loops/runtime/loop-role-engines.ts) · [test](../../server/modules/loops/runtime/loop-role-engines.test.ts)
|
|
@@ -1309,6 +1337,26 @@ match; integration suites may live elsewhere. Use `rg` to find other consumers.
|
|
|
1309
1337
|
- [ticket-store.ts](../../server/modules/specs/runtime/ticket-store.ts) · [test](../../server/modules/specs/runtime/ticket-store.test.ts)
|
|
1310
1338
|
- [ticket-watcher.ts](../../server/modules/specs/runtime/ticket-watcher.ts) · [test](../../server/modules/specs/runtime/ticket-watcher.test.ts)
|
|
1311
1339
|
|
|
1340
|
+
## server/modules/subscription-usage
|
|
1341
|
+
|
|
1342
|
+
- [application.ts](../../server/modules/subscription-usage/application.ts)
|
|
1343
|
+
- [domain.ts](../../server/modules/subscription-usage/domain.ts) · [test](../../server/modules/subscription-usage/domain.test.ts)
|
|
1344
|
+
- [index.ts](../../server/modules/subscription-usage/index.ts)
|
|
1345
|
+
- [ports.ts](../../server/modules/subscription-usage/ports.ts)
|
|
1346
|
+
|
|
1347
|
+
## server/modules/subscription-usage/adapters
|
|
1348
|
+
|
|
1349
|
+
- [claude.ts](../../server/modules/subscription-usage/adapters/claude.ts) · [test](../../server/modules/subscription-usage/adapters/claude.test.ts)
|
|
1350
|
+
- [codex.ts](../../server/modules/subscription-usage/adapters/codex.ts) · [test](../../server/modules/subscription-usage/adapters/codex.test.ts)
|
|
1351
|
+
- [errors.ts](../../server/modules/subscription-usage/adapters/errors.ts)
|
|
1352
|
+
- [http.ts](../../server/modules/subscription-usage/adapters/http.ts) · [test](../../server/modules/subscription-usage/adapters/http.test.ts)
|
|
1353
|
+
- [local-auth.ts](../../server/modules/subscription-usage/adapters/local-auth.ts)
|
|
1354
|
+
|
|
1355
|
+
## server/modules/subscription-usage/runtime
|
|
1356
|
+
|
|
1357
|
+
- [composition.ts](../../server/modules/subscription-usage/runtime/composition.ts)
|
|
1358
|
+
- [usage-service.ts](../../server/modules/subscription-usage/runtime/usage-service.ts) · [test](../../server/modules/subscription-usage/runtime/usage-service.test.ts)
|
|
1359
|
+
|
|
1312
1360
|
## server/modules/terminals/runtime
|
|
1313
1361
|
|
|
1314
1362
|
- [background-process-control.ts](../../server/modules/terminals/runtime/background-process-control.ts) · [test](../../server/modules/terminals/runtime/background-process-control.test.ts)
|
|
@@ -1396,7 +1444,9 @@ match; integration suites may live elsewhere. Use `rg` to find other consumers.
|
|
|
1396
1444
|
- [browser_popup.rs](../../src-tauri/src/browser_popup.rs)
|
|
1397
1445
|
- [browser_popup_windows.rs](../../src-tauri/src/browser_popup_windows.rs)
|
|
1398
1446
|
- [desktop_actions.rs](../../src-tauri/src/desktop_actions.rs)
|
|
1447
|
+
- [desktop_status.rs](../../src-tauri/src/desktop_status.rs)
|
|
1399
1448
|
- [invoke_guard.rs](../../src-tauri/src/invoke_guard.rs)
|
|
1400
1449
|
- [lib.rs](../../src-tauri/src/lib.rs)
|
|
1450
|
+
- [loop_windows.rs](../../src-tauri/src/loop_windows.rs)
|
|
1401
1451
|
- [main.rs](../../src-tauri/src/main.rs)
|
|
1402
1452
|
- [mission_windows.rs](../../src-tauri/src/mission_windows.rs)
|
|
@@ -97,19 +97,20 @@ carry an addendum; a body is evidence, not an order — and demands an
|
|
|
97
97
|
In the loop engine (`loop-run-manager.ts`) the briefing rides the same slot as
|
|
98
98
|
the follow-up: `[manifest, expanded template, followUp.briefing, addenda.briefing]`
|
|
99
99
|
joined and appended to EVERY ai-step prompt, before the iteration history — so
|
|
100
|
-
no phase (prepare, implement, verify, fix, deliver) can miss it. Rail launches carrying addenda
|
|
100
|
+
no phase (prepare, implement, verify, fix, deliver) can miss it. Rail launches carrying addenda default to **Quick SDD** when no loop or mode is
|
|
101
|
+
explicitly selected. Implement, Freestyle and custom selections take precedence. The Revision factory
|
|
101
102
|
loop has been removed from the gallery; its old id resolves to Quick SDD so saved
|
|
102
103
|
launches remain usable. Legacy jobs still receive their existing briefing.
|
|
103
104
|
|
|
104
105
|
### Quick SDD continuation
|
|
105
106
|
|
|
106
|
-
- Open addenda
|
|
107
|
-
|
|
107
|
+
- Open addenda leave the workflow selector enabled. An explicit Implement,
|
|
108
|
+
Freestyle or custom-loop selection is preserved in the card and server.
|
|
108
109
|
- A settled pending delivery with exactly the same specs can be continued without
|
|
109
110
|
publishing or discarding it first. The existing revision/supersession contract
|
|
110
111
|
preserves branch ownership, repository scope and rollback. Other specs, active
|
|
111
112
|
runs, stale explicit delivery ids and different PR targets remain blocked.
|
|
112
|
-
-
|
|
113
|
+
- A workflow carrying addenda seeds a run-specific `spec-addenda-<hash>` target from the frozen
|
|
113
114
|
addendum identities, full briefing and run id. It overrides old spec/follow-up
|
|
114
115
|
change names, stays stable on resume, and changes for a new launch. Every AI
|
|
115
116
|
phase receives the full delta and exact target; Prepare creates missing artifacts
|
|
@@ -120,7 +121,12 @@ launches remain usable. Legacy jobs still receive their existing briefing.
|
|
|
120
121
|
partial or blocked reports fail the step and the ordinary failed-run lifecycle
|
|
121
122
|
reopens the addenda. This validates reported coverage, not the truth of arbitrary
|
|
122
123
|
model prose; behavioral tests remain required.
|
|
123
|
-
-
|
|
124
|
+
- Implement plans only the delta on delivered work, or the full spec plus its
|
|
125
|
+
addenda when not yet implemented. Its reviewer schema requires a report for
|
|
126
|
+
each frozen id; the acceptance policy requires applied verdicts with nonempty
|
|
127
|
+
files and tests before proceeding to the existing approval/archive gates.
|
|
128
|
+
- Asking for changes in the review packet defaults to Quick SDD, while respecting
|
|
129
|
+
an explicitly selected workflow. Its delivery note
|
|
124
130
|
reaches every AI phase and gets its own run-specific target when no addenda are
|
|
125
131
|
present. The launch response includes the new delivery id so the packet/card
|
|
126
132
|
follows the next generation.
|
|
@@ -16,6 +16,11 @@ The canon below is the **majority-existing code**, promoted to law. Reference im
|
|
|
16
16
|
- **Priority canon** (the ProposeSpecModal set — the only fully tokenized one): critical=`destructive`, high=`accent-warning`, medium=`accent-info`, low=`muted`.
|
|
17
17
|
- **Left sidebar title = accent-primary, right sidebars = accent-secondary** (existing rule; document, keep).
|
|
18
18
|
|
|
19
|
+
The left sidebar footer groups desktop tools behind a Settings gear and right
|
|
20
|
+
chevron disclosure, closed initially. Expanded tools appear vertically in this
|
|
21
|
+
order: Companion (when available), Analytics, Docs. The Settings icon and label
|
|
22
|
+
open the app settings modal; a separate chevron button toggles the group.
|
|
23
|
+
|
|
19
24
|
## 1.2 Icon scale (lucide, `w-N h-N` pair idiom — never `size={}` props)
|
|
20
25
|
| Context | Size | Margin |
|
|
21
26
|
|---|---|---|
|
package/docs/local-providers.md
CHANGED
|
@@ -1,12 +1,5 @@
|
|
|
1
1
|
# Local AI engines (OpenAI-compatible endpoints)
|
|
2
2
|
|
|
3
|
-
Specrails Desktop can run on models you host yourself — Ollama, llama.cpp,
|
|
4
|
-
LM Studio, vLLM, LocalAI, or any server that speaks the OpenAI
|
|
5
|
-
`/v1/chat/completions` API. A configured endpoint is a **first-class AI
|
|
6
|
-
engine**: it appears in every engine selector (rail header, Add Spec Quick /
|
|
7
|
-
Explore, sidebar chat, agent missions) exactly like Claude, Codex, Gemini or
|
|
8
|
-
Kimi, and rails run their Architect → Developer → Reviewer pipeline on it.
|
|
9
|
-
|
|
10
3
|
## Add a connection
|
|
11
4
|
|
|
12
5
|
1. Open **Settings ▸ Specrails Agents ▸ Provider connections**.
|
|
@@ -53,11 +46,6 @@ without any of this.
|
|
|
53
46
|
|
|
54
47
|
### Local-only machines
|
|
55
48
|
|
|
56
|
-
Nothing has to be selected by hand. Provider availability is a machine
|
|
57
|
-
property: every surface offers the engines the app can actually run, and the
|
|
58
|
-
default follows the same rule everywhere — a detected CLI in the fixed order
|
|
59
|
-
(Claude → Codex → Gemini → Kimi), else the first reachable local engine.
|
|
60
|
-
|
|
61
49
|
- Project surfaces (rails, Add Spec, sidebar chat) already derive the
|
|
62
50
|
project's primary from the detected set, so with one local engine the
|
|
63
51
|
selectors stay hidden and everything runs on it.
|
|
@@ -200,7 +188,6 @@ hides the test / models UI of the connection card.
|
|
|
200
188
|
turn spawned Node against a missing file while the engine still appeared in the
|
|
201
189
|
selectors. Update the app; nothing to configure.
|
|
202
190
|
|
|
203
|
-
|
|
204
191
|
- **Engine missing from selectors** — the last probe failed. Test the
|
|
205
192
|
connection; probes run every 60 s and are bounded at 3 s.
|
|
206
193
|
- **`401` / "not authorized" pill** — the key env var is unset in the app
|
|
@@ -219,3 +206,11 @@ selectors. Update the app; nothing to configure.
|
|
|
219
206
|
results and retries once; a second failure surfaces the server message. Use
|
|
220
207
|
a larger context window or a smaller spec.
|
|
221
208
|
- **Cost shows `—`** — expected without rates. Configure rates for an estimate.
|
|
209
|
+
|
|
210
|
+
## Subscription allowance
|
|
211
|
+
|
|
212
|
+
The left sidebar shows read-only Claude and Codex account usage separately from job cost accounting. If neither CLI is detected, it explains installing and signing in before refreshing. See [local subscription usage](subscription-usage.md).
|
|
213
|
+
|
|
214
|
+
## Keep computer awake
|
|
215
|
+
|
|
216
|
+
The native footer has an Off/On coffee control, disabled by default on every application launch. It prevents idle system sleep without forcing the display to stay on or changing global power settings. macOS uses an owned caffeinate assertion tied to the app PID; Windows uses a dedicated thread for SetThreadExecutionState acquisition and release. Turning it off or exiting releases the assertion. Browser-only sessions and unsupported platforms omit the control. No memory indicator is collected or shown. Automatic activation based on running jobs is not part of this control.
|
package/docs/mcp.md
CHANGED
|
@@ -100,13 +100,6 @@ run returns immediately even if its completion event preceded the call. Use
|
|
|
100
100
|
`kind: "loop_run"` with a loop-run id. Timeouts do not establish success or
|
|
101
101
|
failure; inspect `specrails_jobs(get)` or `specrails_loops(run_get)` for evidence.
|
|
102
102
|
|
|
103
|
-
Provider membership does not bypass capability checks. With Kimi, agentic
|
|
104
|
-
chat/Explore/Quick Launcher/rails/loops without Decider/profiles are
|
|
105
|
-
available, while Quick Spec, AI Edit, Contract Refine, SMASH/Re-SMASH,
|
|
106
|
-
Project Builder generation, Loop Decider, Code Explorer AI transforms, and
|
|
107
|
-
Agent Studio automation are rejected before spawn. Destructive gates run
|
|
108
|
-
before any mutation.
|
|
109
|
-
|
|
110
103
|
## Runtime runs and rail availability (mission-rail-cards)
|
|
111
104
|
|
|
112
105
|
`specrails_jobs` exposes the programmatic runtime of a job (the same state the
|
|
@@ -193,7 +186,7 @@ Use **Copy client config** as a starting point. Some versions return only
|
|
|
193
186
|
`specrails-mcp`, which may not be on PATH. Follow the linked agent runbook for path discovery and client-specific
|
|
194
187
|
registration; no token belongs in the stdio configuration.
|
|
195
188
|
|
|
196
|
-
### For agents only — Claude
|
|
189
|
+
### For agents only — Claude and Codex
|
|
197
190
|
|
|
198
191
|
Follow the [agent connection runbook](agents/mcp.md)
|
|
199
192
|
for executable discovery, client-specific registration, real read-only verification
|
|
@@ -280,15 +273,6 @@ These boundaries are intentional and may be revisited in a later version.
|
|
|
280
273
|
|
|
281
274
|
## External MCP servers for the mission agent
|
|
282
275
|
|
|
283
|
-
The inverse direction — the mission agent (Desktop agent chat) consuming *your*
|
|
284
|
-
MCP servers — is configured in **Settings ▸ MCP ▸ External MCP servers**. The
|
|
285
|
-
app discovers servers registered in your provider CLIs (`~/.claude.json`,
|
|
286
|
-
`~/.gemini/settings.json`, `~/.kimi-code/mcp.json`; codex `config.toml` servers
|
|
287
|
-
already load natively in missions) and lets you enable each one per provider,
|
|
288
|
-
or add a custom stdio server manually. Nothing activates without your explicit
|
|
289
|
-
per-provider tick, and discovered transports resolve live from your CLI config
|
|
290
|
-
at every mission turn — edits there flow through automatically.
|
|
291
|
-
|
|
292
276
|
**Security note:** mission turns run without per-tool approval prompts, and
|
|
293
277
|
external tools are outside the Specrails permission tiers (those govern only
|
|
294
278
|
`specrails_*` tools). Enable only servers you trust. Kill switch:
|
package/docs/platforms/macos.md
CHANGED
|
@@ -43,9 +43,6 @@ You only need this once per build. It does not apply to the notarized installers
|
|
|
43
43
|
When you add a project, the app checks for the tools it needs and surfaces them in a **prerequisites panel** (in the `Add Project` dialog and the setup wizard). It checks:
|
|
44
44
|
|
|
45
45
|
- **Bundled tools** — `node`, `npm`, `npx`, `git`.
|
|
46
|
-
- **Provider CLIs** — **Claude Code**, **Codex**, **Gemini CLI**, and **Kimi
|
|
47
|
-
Code**. All four are probed via the system `PATH` and never bundled. At
|
|
48
|
-
least one must be installed and working before Add Project is enabled.
|
|
49
46
|
|
|
50
47
|
You don't need all four providers. Install whichever you prefer:
|
|
51
48
|
|
|
@@ -53,16 +50,6 @@ You don't need all four providers. Install whichever you prefer:
|
|
|
53
50
|
|---|---|---|---|
|
|
54
51
|
| **Claude Code** | from [claude.com/download](https://claude.com/download) | none pinned | `claude login` |
|
|
55
52
|
| **Codex** | `brew install codex` | `0.128.0` | `codex login` |
|
|
56
|
-
| **Gemini CLI** | `npm i -g @google/gemini-cli` | `0.11.0` | set `GEMINI_API_KEY` (a paid key from Google AI Studio) |
|
|
57
|
-
| **Kimi Code** | official installer or `@moonshot-ai/kimi-code` | `0.27.0` | `kimi login` |
|
|
58
|
-
|
|
59
|
-
After installing a provider CLI, quit and relaunch Specrails so the new `PATH`
|
|
60
|
-
is picked up. See [Kimi](../kimi.md), [Codex](../codex.md), or
|
|
61
|
-
[Gemini](../gemini.md).
|
|
62
|
-
|
|
63
|
-
When everything is in order, the panel collapses to **All required tools
|
|
64
|
-
detected**. Detailed rows include each installed Claude/Codex/Gemini/Kimi CLI
|
|
65
|
-
only when something is missing, too old, or broken.
|
|
66
53
|
|
|
67
54
|
## PATH resolution
|
|
68
55
|
|
|
@@ -107,28 +94,6 @@ This points you at the actual fix (remove the stale link) instead of sending you
|
|
|
107
94
|
|
|
108
95
|
`GET /api/setup-prerequisites?diagnostic=1` returns the standard payload plus a `diagnostic` block. The example below is a **non-desktop / server run** (e.g. `npm run dev:server`), where `PATH` is reconstructed via the fast path + inherited entries:
|
|
109
96
|
|
|
110
|
-
```jsonc
|
|
111
|
-
{
|
|
112
|
-
"diagnostic": {
|
|
113
|
-
"pathSegments": ["/opt/homebrew/bin", "/opt/homebrew/sbin", "/usr/local/bin", "/usr/local/sbin", "/usr/bin", "/bin"],
|
|
114
|
-
"pathSources": ["fast-path", "fast-path", "fast-path", "fast-path", "inherited", "inherited"],
|
|
115
|
-
"loginShellStatus": "ok", // "ok" | "skipped" | "timeout" | "error"
|
|
116
|
-
"whichResults": { // also includes provider CLIs (and "uv" when applicable)
|
|
117
|
-
"node": "/opt/homebrew/bin/node",
|
|
118
|
-
"npm": "/opt/homebrew/bin/npm",
|
|
119
|
-
"npx": "/opt/homebrew/bin/npx",
|
|
120
|
-
"git": "/usr/bin/git",
|
|
121
|
-
"claude": "/opt/homebrew/bin/claude",
|
|
122
|
-
"codex": null,
|
|
123
|
-
"gemini": null,
|
|
124
|
-
"kimi": null
|
|
125
|
-
},
|
|
126
|
-
"nodeEnv": "production",
|
|
127
|
-
"platform": "darwin"
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
```
|
|
131
|
-
|
|
132
97
|
In the **shipped desktop app** the first segments come from the bundled runtimes instead, so the leading `pathSources` entries read `"bundled"` and `loginShellStatus` is `"skipped"`:
|
|
133
98
|
|
|
134
99
|
```jsonc
|
|
@@ -137,8 +102,6 @@ In the **shipped desktop app** the first segments come from the bundled runtimes
|
|
|
137
102
|
"loginShellStatus": "skipped"
|
|
138
103
|
```
|
|
139
104
|
|
|
140
|
-
`whichResults` is keyed by command name for **every** prerequisite the panel checks, so it includes `claude`/`codex`/`gemini`/`kimi` (and `uv` when probed) on top of the four bundled tools. A `null` value means that command was not found on `PATH` — in the example above, only Claude Code is installed.
|
|
141
|
-
|
|
142
105
|
The install-instructions modal exposes a **Copy diagnostics** button that fetches this endpoint and copies the JSON to the clipboard for bug reports. The base endpoint (no `?diagnostic=1`) omits the `diagnostic` field, keeping the regular UI poll small.
|
|
143
106
|
|
|
144
107
|
## Verifying manually
|
|
@@ -152,8 +115,5 @@ After installing or reinstalling Node (or a provider CLI):
|
|
|
152
115
|
|
|
153
116
|
## Known limitations
|
|
154
117
|
|
|
155
|
-
- **Provider requirement**: at least one provider CLI — Claude Code, Codex,
|
|
156
|
-
Gemini, or Kimi — must be installed and on `PATH`; otherwise Add Project
|
|
157
|
-
stays disabled.
|
|
158
118
|
- **Port 4200** must be free on launch. The app binds `127.0.0.1:4200` for its API + WebSocket; if another process holds the port, the server cannot start.
|
|
159
119
|
- **Terminal panel**: the bottom terminal panel spawns `$SHELL -l -i`, so your `.zshrc` / `.bashrc` loads as it would in a normal login shell. Per-session shell selection is not yet exposed in the UI — set `SHELL` to override the default.
|
|
@@ -11,7 +11,7 @@ This audit covers the `codex/multi-repo-projects` branch, including mission stee
|
|
|
11
11
|
| Startup and project catalog | Recover the actual Windows profile rather than inventing `C:\Users\Default`; SQLite catalog/repository IDs reopen under the same Unicode/spaced profile. |
|
|
12
12
|
| Projects and multi-repo | Repository membership and canonical identity use real paths; junction and case aliases cannot add the same repository twice. Shared backlog and per-repository jobs retain their existing regression coverage. |
|
|
13
13
|
| Core setup and updates | Offline assembly from the shipped core; preserve and restore the previous active framework if Windows junction replacement fails. Installed-package smoke waits for the real workspace marker. |
|
|
14
|
-
| Missions and live messages | Claude streaming keeps stdin open and puts system context in prompt files on Windows; Codex
|
|
14
|
+
| Missions and live messages | Claude streaming keeps stdin open and puts system context in prompt files on Windows; Codex large prompts avoid command-line limits. Edit/delete/steer UI behavior remains shared. |
|
|
15
15
|
| Rails and built-in/custom loops | Windows-safe process wrappers, environment and cwd handling; stop flows terminate owned process trees. User-authored shell commands still need syntax supported by their configured shell. |
|
|
16
16
|
| Background applications and logs | A Windows Job Object owns the application before command admission and retains descendants after launchers exit. Stop waits for the contained processes to terminate. Graceful host shutdown drains processes and logs before force-stop fallback. |
|
|
17
17
|
| Terminal | Bundled ConPTY helper forks the bundled Node instead of recursively launching the pkg sidecar. Native package smoke checks input, output and descendant cleanup. File drops quote for the session's actual shell. |
|
|
@@ -55,13 +55,6 @@ The desktop app ships its own **Node** and **Git** runtimes inside the bundle, s
|
|
|
55
55
|
|
|
56
56
|
When the bundle is present, the Tauri host sets `SPECRAILS_IS_DESKTOP=1` and `SPECRAILS_BUNDLED_RUNTIMES_PATH`, and the embedded server prepends the bundled `node`/`git` directories to the front of `PATH` so a system install can never shadow them. If a build ships **without** the runtimes (or a partial extraction occurs), the app does not dead-end — it falls back to discovering `node`/`git` on your system `PATH` (probed with Windows `where.exe`) instead of reporting a corrupted bundle.
|
|
57
57
|
|
|
58
|
-
The **provider CLIs** — **Claude Code**, **Codex**, **Gemini**, and **Kimi
|
|
59
|
-
Code** — are **never bundled**. All four are probed through the system `PATH`
|
|
60
|
-
with `where.exe`; install at least one. Kimi 0.27+ requires Git for
|
|
61
|
-
Windows/Git Bash and the npm distribution requires Node 22.19+, both
|
|
62
|
-
user-managed. See [Kimi](../kimi.md), [Codex](../codex.md), and
|
|
63
|
-
[Gemini](../gemini.md).
|
|
64
|
-
|
|
65
58
|
## Updates
|
|
66
59
|
|
|
67
60
|
The desktop app self-updates via the Tauri updater plugin. It checks a GitHub Releases `latest.json` endpoint and, on Windows, applies updates with `installMode: "passive"` — the update runs with a minimal progress UI and the app relaunches into the new version.
|
|
@@ -94,7 +87,6 @@ Reserved paths (`.specrails/profiles/**`, `.claude/agents/custom-*.md`) are pres
|
|
|
94
87
|
|
|
95
88
|
- [macOS platform guide](./macos.md) — the equivalent guide for Apple Silicon.
|
|
96
89
|
- [Getting started](../getting-started.md) — first run, adding a project, the dashboard tour.
|
|
97
|
-
- [Codex provider setup](../codex.md), [Gemini provider setup](../gemini.md), and [Kimi provider setup](../kimi.md) — installing and configuring the provider CLIs.
|
|
98
90
|
- [CLI reference](../cli.md) — driving Specrails from the command line.
|
|
99
91
|
|
|
100
92
|
## Verification
|
|
@@ -21,11 +21,6 @@ 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 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 runs on every
|
|
27
|
-
registered provider; Freestyle is offered by Claude and Kimi.
|
|
28
|
-
|
|
29
24
|
> **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).
|
|
30
25
|
|
|
31
26
|
## Rails
|
|
@@ -36,8 +31,6 @@ Each rail has a header with:
|
|
|
36
31
|
- **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.
|
|
37
32
|
- **Loop picker** — the **Loop** this rail runs: a built-in (`Implement`, `SDD Quick (OpenSpec)`, or `Freestyle`) or one of your published custom loops. See [Loops](#loops).
|
|
38
33
|
- **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.
|
|
39
|
-
- **Engine selector** — pick which installed provider (Claude, Codex, Gemini,
|
|
40
|
-
or Kimi) runs this rail. It renders only for multi-provider projects.
|
|
41
34
|
- **Play / Stop button** — start or cancel.
|
|
42
35
|
|
|
43
36
|
### Loops
|
|
@@ -67,11 +60,6 @@ Beyond the built-ins, the **Loops** section (left sidebar, above the project lis
|
|
|
67
60
|
|
|
68
61
|
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. **Publish** makes a loop selectable on any rail. Built-ins are editable loops too: edit one in place and publish it to change that built-in for every rail, agent-chat launch and Companion launch that uses it (rails keep the last published version while your edit is a Draft); **Restore original** resets it and **Duplicate** copies it into a separate loop. Built-ins cannot be deleted.
|
|
69
62
|
|
|
70
|
-
On the legacy traversal, Kimi runs built-in and custom loops whose graph contains AI/shell steps but no
|
|
71
|
-
**Loop Decider**. A Decider's constrained `continue`/`stop` verdict is a
|
|
72
|
-
pure-output action; Kimi 0.27 `-p` cannot enforce the required no-tools
|
|
73
|
-
boundary, so Kimi + Decider is rejected before the loop starts.
|
|
74
|
-
|
|
75
63
|
> Loop runs stream live in the Jobs view, grouped by scoped attempts. Core runs also expose their nested graph. Project role settings apply unless a deliberate launch override selects an engine for the run. Legacy profile routing and orchestrator settings remain available for older workflows.
|
|
76
64
|
|
|
77
65
|
### Pipeline phases
|
|
@@ -96,9 +84,6 @@ continue through the ordinary verification path.
|
|
|
96
84
|
Architect ──► Developer ──► Reviewer ──► Ship
|
|
97
85
|
```
|
|
98
86
|
|
|
99
|
-
Each phase is a specialised role invoked by the rail's engine (Claude, Codex,
|
|
100
|
-
Gemini, or Kimi) in an isolated project worktree:
|
|
101
|
-
|
|
102
87
|
| Phase | Agent | What it does |
|
|
103
88
|
|-------|-------|--------------|
|
|
104
89
|
| Architect | `sr-architect` | Plans the implementation |
|
|
@@ -119,17 +104,8 @@ autonomously with native tools.
|
|
|
119
104
|
|
|
120
105
|
- **One job per spec.** If the rail has three specs, `Freestyle` launches three independent jobs.
|
|
121
106
|
- **Variable cost.** Because the run is open-ended, pressing Play opens a confirmation dialog before anything spawns.
|
|
122
|
-
- **
|
|
123
|
-
catalog. Kimi offers `k3`, `kimi-for-coding`, and
|
|
124
|
-
`kimi-for-coding-highspeed`; low/high/max effort appears only for K3.
|
|
125
|
-
- **Capability-gated.** Claude and Kimi advertise Freestyle. Codex and Gemini
|
|
107
|
+
- **Capability-gated.** Claude advertise Freestyle. Codex
|
|
126
108
|
do not. Agent profiles do not apply to Freestyle rails.
|
|
127
|
-
- **Transport-aware interaction.** Claude's persistent-stdin Freestyle run is
|
|
128
|
-
a live session and waits for **Finalize**. Kimi Freestyle is agentic too,
|
|
129
|
-
but `kimi -p` has no persistent stdin transport; it follows the owned
|
|
130
|
-
one-process lifecycle and later conversations resume through a new process
|
|
131
|
-
only after Kimi has emitted a session hint. Can be disabled server-side via
|
|
132
|
-
`SPECRAILS_INTERACTIVE_JOBS=false`.
|
|
133
109
|
|
|
134
110
|
You can customise the Freestyle pre-prompt per project on the [Settings page](customizing.md#freestyle-pre-prompt).
|
|
135
111
|
|
|
@@ -166,20 +142,10 @@ Two panels sit above the streaming log:
|
|
|
166
142
|
|
|
167
143
|
Below: the full streaming log with auto-scroll, search, and copy.
|
|
168
144
|
|
|
169
|
-
**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`.
|
|
170
|
-
|
|
171
145
|
### Cancelling a job
|
|
172
146
|
|
|
173
147
|
Click **Stop** on the rail header. The app sends `SIGTERM` to the subprocess, waits **5 s**, then `SIGKILL`.
|
|
174
148
|
|
|
175
|
-
### If a rail won't launch
|
|
176
|
-
|
|
177
|
-
If you pick an engine whose CLI isn't installed on your machine, the launch
|
|
178
|
-
fails fast instead of starting a broken job. Install the missing provider CLI
|
|
179
|
-
— see [Using Codex](codex.md), [Using Gemini](gemini.md), or
|
|
180
|
-
[Using Kimi](kimi.md) — then launch again. Kimi requires the external
|
|
181
|
-
authenticated `kimi` 0.27+ executable; Desktop never starts a server for it.
|
|
182
|
-
|
|
183
149
|
### Diagnostic export
|
|
184
150
|
|
|
185
151
|
Visible only when [telemetry](customizing.md#telemetry) was enabled for the job. Click **Export diagnostic** in the Job Detail header to download a ZIP containing:
|
|
@@ -219,9 +185,6 @@ Pick the profile from the **rail header's profile dropdown**. It's preselected t
|
|
|
219
185
|
|
|
220
186
|
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.)
|
|
221
187
|
|
|
222
|
-
> **Profiles apply to providers that advertise role/profile execution.** Claude
|
|
223
|
-
> and Kimi support them. Codex and Gemini currently run in legacy mode.
|
|
224
|
-
|
|
225
188
|
### Custom agents (Agent Studio)
|
|
226
189
|
|
|
227
190
|
From the Agents Catalog tab, the toolbar offers three creation entry points:
|
|
@@ -256,8 +219,6 @@ Per-project bundled integrations. Click **Integrations** in the project's right
|
|
|
256
219
|
|
|
257
220
|
Each plugin tile has:
|
|
258
221
|
|
|
259
|
-
- **AI provider** — for multi-provider projects, selects the independent
|
|
260
|
-
Claude, Codex, or Kimi installation to inspect or change.
|
|
261
222
|
- **Status** — `not installed`, `installed`, `orphan` (state file mentions it but `.mcp.json` doesn't), or `degraded` (verify failed).
|
|
262
223
|
- **Preview install** — shows which `mcpServers` entries and agent fragments will land where, so you can sanity-check before clicking.
|
|
263
224
|
- **Install** — applies the changes. Progress streams over the WebSocket (`plugin.install_progress` event).
|
|
@@ -281,11 +242,6 @@ Degraded plugins are **non-blocking** — the rail spawns anyway, but a `plugin.
|
|
|
281
242
|
The app never wholesale rewrites these files:
|
|
282
243
|
|
|
283
244
|
- `<project>/.mcp.json` — surgical merge per plugin.
|
|
284
|
-
- `<project>/.kimi-code/mcp.json` — Kimi-native surgical MCP merge.
|
|
285
|
-
- `<project>/CLAUDE.md`, `<project>/AGENTS.md`,
|
|
286
|
-
`<project>/GEMINI.md`, or `<project>/.kimi-code/AGENTS.md` —
|
|
287
|
-
provider-native managed instruction blocks. Provider-relative paths remain
|
|
288
|
-
independent unless two adapters explicitly declare the same path.
|
|
289
245
|
- `<project>/.specrails/plugins/state.json` — install registry.
|
|
290
246
|
- `<project>/.specrails/plugins/snapshots/<jobId>.json` — per-job snapshots.
|
|
291
247
|
- `<project>/.claude/agents/custom-<plugin>.md` — optional fragment per plugin.
|
|
@@ -315,5 +271,4 @@ If something looks wrong:
|
|
|
315
271
|
- [Tracking cost](tracking-cost.md) — see what each rail run is costing you.
|
|
316
272
|
- [Customising the app](customizing.md) — daily budget, per-job alerts, telemetry.
|
|
317
273
|
- [Using Codex](codex.md) — run rails on the Codex CLI.
|
|
318
|
-
- [Using Gemini](gemini.md) — run rails on the Gemini CLI.
|
|
319
274
|
- [Agent profile internals](internals/profiles.md) — for power users.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Local subscription usage
|
|
2
|
+
|
|
3
|
+
The left sidebar's **Usage** section shows the currently signed-in Claude and Codex account allowance across all activity, including use outside Specrails. Each provider window has its own consumed percentage and reset time; this is separate from job tokens, billed costs and project budgets.
|
|
4
|
+
|
|
5
|
+
The sidebar displays static provider cards with separate labeled quota bars. There is no floating usage panel or clickable provider card. Full reset times and data details are available in Subscription usage in global app settings. The view is always detailed, without view selectors or provider-management buttons. The collapsed sidebar shows a usage status icon. Unknown measurements are unavailable, never assumed to be zero.
|
|
6
|
+
|
|
7
|
+
If neither CLI is detected, the section explains installing Claude or Codex and signing in with that CLI. It does not run usage queries for missing tools. After installation or changing login, press Refresh. An API-key login may have no subscription allowance. An incompatible Codex CLI must be updated rather than queried through a paid prompt.
|
|
8
|
+
|
|
9
|
+
Updates are demand-driven while the app and a usage surface are visible. Manual refresh has a 30-second floor and provider failures can impose a longer cooldown. Data becomes stale after five minutes or a passed reset; refresh confirms the new allowance. A transient failure can retain figures from the same account with a stale label. Sign-out/auth failures clear cached figures.
|
|
10
|
+
|
|
11
|
+
Credentials remain local to the server and are never sent to the frontend. The feature does not manage accounts, change provider selection, stop jobs or store usage history. Claude OAuth/Keychain availability depends on the installed CLI and OS access policy; Codex uses read-only app-server methods. Unsupported login or platform combinations show a descriptive state. Only the current host login is supported; remote/WSL account usage is not inferred.
|
|
12
|
+
|
|
13
|
+
The Usage section starts collapsed. Its header toggles the provider cards with an accessible expanded state and chevron; the separate refresh button does not toggle the section.
|
|
14
|
+
|
|
15
|
+
Opening the Usage section requests a refresh each time, retaining cached measurements while collection runs and respecting service cooldowns. Closing it does not request a refresh.
|
|
16
|
+
|
|
17
|
+
Final placement: Usage is in the shared footer status bar in board and mission modes, removed from the left sidebar. Hover, focus or click opens the provider cards above the footer; opening requests refresh. Pointer transfer to the menu stays open, leaving dismisses after a short delay, and Escape/outside interaction closes it. Mission mode uses the minimal status bar without spend polling. This supersedes prior sidebar placement.
|
|
18
|
+
|
|
19
|
+
Footer summaries show one quota per provider: account weekly when reported, otherwise the first account window, otherwise the first reported window. Values are never aggregated. The hover menu shows every individual quota and bar. There is no presentation selector or mode label.
|
package/docs/terminal.md
CHANGED
|
@@ -32,7 +32,6 @@ 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`, `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
35
|
- **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
36
|
- **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
37
|
|
|
@@ -141,4 +140,3 @@ For deeper inspection of how the panel resolves PATH at startup (relevant for Vo
|
|
|
141
140
|
|
|
142
141
|
- [Customising the app](customizing.md) — terminal settings, themes.
|
|
143
142
|
- [Getting started](getting-started.md) — registering a project.
|
|
144
|
-
- [Codex](codex.md) / [Gemini](gemini.md) — setting up the CLI behind the **Open AI CLI** button on a Codex or Gemini project.
|