specrails-desktop 2.7.0 → 2.9.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 +23 -19
- package/client/dist/assets/{ActivityFeedPage-LKqd18-G.js → ActivityFeedPage-DNqnf1fZ.js} +1 -1
- package/client/dist/assets/{AgentsPage-Cb-b-6Ot.js → AgentsPage-vmNIEbGM.js} +1 -1
- package/client/dist/assets/{AnalyticsPage-HVxQQ1wy.js → AnalyticsPage-CdfN0ofZ.js} +1 -1
- package/client/dist/assets/{BarChart-BOyHB0dw.js → BarChart-CIkopHjl.js} +1 -1
- package/client/dist/assets/{CodePage-DnOnwKGB.js → CodePage-DDRNU5FN.js} +1 -1
- package/client/dist/assets/{DesktopAnalyticsPage-D2auU39x.js → DesktopAnalyticsPage-Cl3sKKSG.js} +1 -1
- package/client/dist/assets/{DocsDialog-CTuDX3GK.js → DocsDialog-BGrBOfUr.js} +2 -2
- package/client/dist/assets/{DocsPage-DRyMmu0Z.js → DocsPage-CY-2SSzw.js} +2 -2
- package/client/dist/assets/{ExportDropdown-DO-GGiMh.js → ExportDropdown-BRHcvP0r.js} +1 -1
- package/client/dist/assets/{IntegrationsPage-BhbO4jFT.js → IntegrationsPage-nKdLB4Ub.js} +1 -1
- package/client/dist/assets/{JobDetailPage-DJooEg1s.js → JobDetailPage-Bf0A6WWQ.js} +1 -1
- package/client/dist/assets/{JobsPage-BbaC-YOg.js → JobsPage-Vg4nXPdL.js} +1 -1
- package/client/dist/assets/{dist-js-CiIVMsx3.js → dist-js-0i_klubI.js} +1 -1
- package/client/dist/assets/{dist-js-Xc2lRKp2.js → dist-js-CUs5GjwA.js} +1 -1
- package/client/dist/assets/{index-DK214dak.js → index-BXoHFtfG.js} +8 -8
- package/client/dist/assets/index-D6BaYRRU.css +2 -0
- package/client/dist/assets/{integrations-2C7MkGT0.js → integrations-7YyTBuU9.js} +1 -1
- package/client/dist/assets/{integrations-CX4p_bij.js → integrations-B9CEpNF0.js} +1 -1
- package/client/dist/assets/{integrations-C2jQtv-s.js → integrations-BlvAdewo.js} +1 -1
- package/client/dist/assets/{integrations-eQPHAYsE.js → integrations-Bw8UM9Xd.js} +1 -1
- package/client/dist/assets/{integrations-BDC670cg.js → integrations-C5SxNKnG.js} +1 -1
- package/client/dist/assets/{integrations-BqUmRUef.js → integrations-CJQKMmdW.js} +1 -1
- package/client/dist/assets/{integrations-CB98NeH5.js → integrations-DWz1eU_K.js} +1 -1
- package/client/dist/assets/{integrations-_SuVeQIG.js → integrations-DiPR8Fzp.js} +1 -1
- package/client/dist/assets/{lib-Bo5s6xpe.js → lib-D6M_MvoC.js} +1 -1
- package/client/dist/assets/setup-B6egeeTM.js +1 -0
- package/client/dist/assets/setup-BHroXlke.js +1 -0
- package/client/dist/assets/setup-BIXsWUp1.js +1 -0
- package/client/dist/assets/setup-BJRdg1iE.js +1 -0
- package/client/dist/assets/setup-C0rVGnCy.js +1 -0
- package/client/dist/assets/setup-Cpu17hJv.js +1 -0
- package/client/dist/assets/setup-D-1r0uSx.js +1 -0
- package/client/dist/assets/setup-Dn2-veYO.js +1 -0
- package/client/dist/assets/{useProjectCache-DVNypkmR.js → useProjectCache-BeyBSNpD.js} +1 -1
- package/client/dist/index.html +4 -4
- package/docs/README.md +5 -2
- package/docs/agy-cli-provider-study.md +78 -0
- package/docs/cli.md +23 -4
- package/docs/codex.md +116 -58
- package/docs/creating-specs.md +19 -5
- package/docs/customizing.md +27 -6
- package/docs/gemini.md +225 -73
- package/docs/getting-started.md +18 -9
- package/docs/guide/de/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/de/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/de/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/de/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/de/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/de/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/de/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/de/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/de/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/de/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/de/insights/3-code-explorer.md +50 -0
- package/docs/guide/de/integrations/1-ai-providers.md +64 -0
- package/docs/guide/de/integrations/2-plugins.md +44 -0
- package/docs/guide/de/integrations/3-jira-integration.md +71 -0
- package/docs/guide/de/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/de/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/de/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/de/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/de/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/de/settings/1-themes.md +37 -0
- package/docs/guide/de/settings/2-language.md +39 -0
- package/docs/guide/de/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/de/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/de/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/de/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/de/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/de/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/guide/en/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/en/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/en/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/en/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/en/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/en/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/en/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/en/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/en/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/en/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/en/insights/3-code-explorer.md +50 -0
- package/docs/guide/en/integrations/1-ai-providers.md +64 -0
- package/docs/guide/en/integrations/2-plugins.md +44 -0
- package/docs/guide/en/integrations/3-jira-integration.md +71 -0
- package/docs/guide/en/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/en/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/en/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/en/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/en/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/en/settings/1-themes.md +37 -0
- package/docs/guide/en/settings/2-language.md +39 -0
- package/docs/guide/en/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/en/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/en/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/en/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/en/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/en/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/guide/es/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/es/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/es/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/es/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/es/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/es/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/es/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/es/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/es/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/es/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/es/insights/3-code-explorer.md +50 -0
- package/docs/guide/es/integrations/1-ai-providers.md +64 -0
- package/docs/guide/es/integrations/2-plugins.md +44 -0
- package/docs/guide/es/integrations/3-jira-integration.md +71 -0
- package/docs/guide/es/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/es/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/es/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/es/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/es/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/es/settings/1-themes.md +37 -0
- package/docs/guide/es/settings/2-language.md +39 -0
- package/docs/guide/es/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/es/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/es/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/es/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/es/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/es/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/guide/fr/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/fr/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/fr/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/fr/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/fr/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/fr/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/fr/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/fr/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/fr/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/fr/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/fr/insights/3-code-explorer.md +50 -0
- package/docs/guide/fr/integrations/1-ai-providers.md +64 -0
- package/docs/guide/fr/integrations/2-plugins.md +44 -0
- package/docs/guide/fr/integrations/3-jira-integration.md +71 -0
- package/docs/guide/fr/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/fr/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/fr/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/fr/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/fr/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/fr/settings/1-themes.md +37 -0
- package/docs/guide/fr/settings/2-language.md +39 -0
- package/docs/guide/fr/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/fr/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/fr/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/fr/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/fr/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/fr/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/guide/it/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/it/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/it/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/it/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/it/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/it/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/it/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/it/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/it/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/it/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/it/insights/3-code-explorer.md +50 -0
- package/docs/guide/it/integrations/1-ai-providers.md +64 -0
- package/docs/guide/it/integrations/2-plugins.md +44 -0
- package/docs/guide/it/integrations/3-jira-integration.md +71 -0
- package/docs/guide/it/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/it/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/it/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/it/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/it/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/it/settings/1-themes.md +37 -0
- package/docs/guide/it/settings/2-language.md +39 -0
- package/docs/guide/it/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/it/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/it/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/it/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/it/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/it/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/guide/ja/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/ja/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/ja/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/ja/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/ja/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/ja/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/ja/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/ja/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/ja/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/ja/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/ja/insights/3-code-explorer.md +50 -0
- package/docs/guide/ja/integrations/1-ai-providers.md +64 -0
- package/docs/guide/ja/integrations/2-plugins.md +44 -0
- package/docs/guide/ja/integrations/3-jira-integration.md +71 -0
- package/docs/guide/ja/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/ja/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/ja/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/ja/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/ja/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/ja/settings/1-themes.md +37 -0
- package/docs/guide/ja/settings/2-language.md +39 -0
- package/docs/guide/ja/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/ja/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/ja/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/ja/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/ja/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/ja/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/guide/pt/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/pt/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/pt/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/pt/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/pt/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/pt/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/pt/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/pt/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/pt/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/pt/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/pt/insights/3-code-explorer.md +50 -0
- package/docs/guide/pt/integrations/1-ai-providers.md +64 -0
- package/docs/guide/pt/integrations/2-plugins.md +44 -0
- package/docs/guide/pt/integrations/3-jira-integration.md +71 -0
- package/docs/guide/pt/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/pt/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/pt/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/pt/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/pt/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/pt/settings/1-themes.md +37 -0
- package/docs/guide/pt/settings/2-language.md +39 -0
- package/docs/guide/pt/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/pt/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/pt/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/pt/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/pt/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/pt/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/guide/zh/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/zh/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/zh/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/zh/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/zh/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/zh/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/zh/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/zh/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/zh/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/zh/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/zh/insights/3-code-explorer.md +50 -0
- package/docs/guide/zh/integrations/1-ai-providers.md +64 -0
- package/docs/guide/zh/integrations/2-plugins.md +44 -0
- package/docs/guide/zh/integrations/3-jira-integration.md +71 -0
- package/docs/guide/zh/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/zh/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/zh/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/zh/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/zh/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/zh/settings/1-themes.md +37 -0
- package/docs/guide/zh/settings/2-language.md +39 -0
- package/docs/guide/zh/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/zh/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/zh/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/zh/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/zh/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/zh/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/internals/README.md +1 -1
- package/docs/internals/adding-a-provider.md +192 -59
- package/docs/internals/api-reference.md +130 -21
- package/docs/internals/architecture.md +22 -9
- package/docs/internals/bundled-framework-build-plan.md +264 -0
- package/docs/internals/configuration.md +33 -8
- package/docs/internals/global-artifacts-alignment-contract.md +486 -0
- package/docs/internals/global-artifacts-relocation-evaluation.md +294 -0
- package/docs/internals/operations-runbook.md +16 -5
- package/docs/internals/profiles.md +42 -14
- package/docs/platforms/macos.md +27 -8
- package/docs/platforms/windows.md +20 -6
- package/docs/running-pipelines.md +17 -9
- package/docs/terminal.md +9 -3
- package/docs/tracking-cost.md +17 -11
- package/package.json +1 -1
- package/server/dist/agent-refine-manager.js +20 -5
- package/server/dist/artifact-registry.js +468 -0
- package/server/dist/attachment-manager.js +5 -8
- package/server/dist/browser-capture-manager.js +4 -4
- package/server/dist/bundled-core.js +72 -0
- package/server/dist/bundled-openspec.js +58 -0
- package/server/dist/chat-manager.js +42 -5
- package/server/dist/code-explorer-router.js +10 -7
- package/server/dist/config.js +7 -2
- package/server/dist/context-budget.js +17 -6
- package/server/dist/context-scope.js +6 -2
- package/server/dist/contract-refine-runner.js +31 -9
- package/server/dist/desktop-router.js +39 -14
- package/server/dist/docs-router.js +210 -132
- package/server/dist/file-summary-manager.js +41 -16
- package/server/dist/framework-manager.js +248 -0
- package/server/dist/framework-migration.js +308 -0
- package/server/dist/index.js +30 -0
- package/server/dist/install-config-path.js +73 -0
- package/server/dist/jira/jira-sync-manager.js +23 -11
- package/server/dist/openspec-shim.js +153 -0
- package/server/dist/plugins-router.js +19 -8
- package/server/dist/profiles-router.js +38 -16
- package/server/dist/project-registry.js +101 -3
- package/server/dist/project-router-chat.js +1 -1
- package/server/dist/project-router-helpers.js +25 -12
- package/server/dist/project-router-jobs.js +3 -3
- package/server/dist/project-router-settings.js +8 -6
- package/server/dist/project-router-setup.js +27 -10
- package/server/dist/project-router-spending.js +6 -1
- package/server/dist/project-router-tickets.js +30 -10
- package/server/dist/project-router.js +16 -1
- package/server/dist/providers/gemini-adapter.js +4 -0
- package/server/dist/providers/gemini-agent-ack.js +65 -0
- package/server/dist/queue-manager.js +156 -12
- package/server/dist/setup-manager.js +131 -29
- package/server/dist/smash-runner.js +21 -6
- package/server/dist/ticket-store.js +6 -2
- package/server/dist/ticket-watcher.js +5 -1
- package/server/dist/util/stream-display.js +18 -3
- package/server/dist/vitest-setup.js +25 -0
- package/server/dist/workspace-manager.js +199 -0
- package/server/dist/workspace-resolution.js +147 -0
- package/client/dist/assets/index-DgKfQFcf.css +0 -2
- package/client/dist/assets/setup-BIIkb-_K.js +0 -1
- package/client/dist/assets/setup-BeQxu9kD.js +0 -1
- package/client/dist/assets/setup-CPa6GnlI.js +0 -1
- package/client/dist/assets/setup-CZl4OEJx.js +0 -1
- package/client/dist/assets/setup-ChpodNfn.js +0 -1
- package/client/dist/assets/setup-D_fjJH6u.js +0 -1
- package/client/dist/assets/setup-YzD8DX4O.js +0 -1
- package/client/dist/assets/setup-fRpDozmq.js +0 -1
- package/docs/adding-a-provider.md +0 -107
package/docs/codex.md
CHANGED
|
@@ -1,23 +1,33 @@
|
|
|
1
1
|
# Using Specrails with the Codex CLI
|
|
2
2
|
|
|
3
|
-
Specrails supports **
|
|
4
|
-
|
|
5
|
-
[Codex CLI](https://developers.openai.com/codex).
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
Specrails supports **three AI providers** — Claude, Codex, and Gemini —
|
|
4
|
+
and they are interchangeable. This guide covers OpenAI's
|
|
5
|
+
[Codex CLI](https://developers.openai.com/codex). For the others, see
|
|
6
|
+
[Claude Code](https://claude.com/claude-code) and the
|
|
7
|
+
[Gemini guide](gemini.md).
|
|
8
|
+
|
|
9
|
+
> **Just want to get going?** Install the `codex` CLI, log in, then in
|
|
10
|
+
> the app click **Add Project → check Codex → Submit**. The rest of the
|
|
11
|
+
> app (specs, rails, chat, analytics) works the same as it does for
|
|
12
|
+
> Claude. Everything below is detail for when you need it.
|
|
13
|
+
|
|
14
|
+
You pick one, two, or all three providers when you add a project — and
|
|
15
|
+
you can mix them in a single project too (see [Running more than one
|
|
16
|
+
provider in one project](#running-more-than-one-provider-in-one-project)
|
|
17
|
+
below). All three are enabled by default.
|
|
9
18
|
|
|
10
19
|
> The codex path is enabled by default. To temporarily disable it
|
|
11
|
-
> (e.g. as an emergency rollback
|
|
12
|
-
>
|
|
20
|
+
> (e.g. as an emergency rollback), set `SPECRAILS_CODEX_BETA=0` in the
|
|
21
|
+
> app's environment. **Only the exact string `0` disables it** — `false`,
|
|
22
|
+
> `off`, `1`, or leaving it unset all mean "enabled". The legacy
|
|
13
23
|
> `SPECRAILS_HUB_CODEX_BETA` name is still read as a fallback when the
|
|
14
|
-
> new variable is unset
|
|
24
|
+
> new variable is unset.
|
|
15
25
|
|
|
16
26
|
## Prerequisites
|
|
17
27
|
|
|
18
28
|
| What | Why | How |
|
|
19
29
|
|---|---|---|
|
|
20
|
-
| `codex` CLI ≥ 0.128.0 | Earlier versions don't support `exec --json` + `exec resume` semantics the app relies on | `
|
|
30
|
+
| `codex` CLI ≥ 0.128.0 | Earlier versions don't support `exec --json` + `exec resume` semantics the app relies on | `npm i -g @openai/codex` · or download from https://developers.openai.com/codex |
|
|
21
31
|
| Authentication | Codex needs OAuth or an API key | `codex login` (ChatGPT OAuth) or set `OPENAI_API_KEY` |
|
|
22
32
|
| `uv` ≥ 0.1.0 (optional) | Required if you want to install the Serena plugin | `brew install uv` · `pipx install uv` · or the curl installer at https://docs.astral.sh/uv |
|
|
23
33
|
| `git`, `node`, `npm`, `npx` | Same as Claude — needed for `specrails-core init` | Use your usual installer |
|
|
@@ -31,13 +41,16 @@ binary isn't on `PATH`; it shows install commands if you click "More info".
|
|
|
31
41
|
1. Open the app UI and click **Add Project**.
|
|
32
42
|
2. Pick the project's path.
|
|
33
43
|
3. In the **AI providers** row, check **Codex** (you can check
|
|
34
|
-
**Claude** too — see [Running
|
|
35
|
-
project](#running-
|
|
36
|
-
provider you select becomes the project default.
|
|
44
|
+
**Claude** and/or **Gemini** too — see [Running more than one
|
|
45
|
+
provider in one project](#running-more-than-one-provider-in-one-project)).
|
|
46
|
+
The first provider you select becomes the project default.
|
|
37
47
|
4. Submit. The app writes `.specrails/install-config.yaml` (with
|
|
38
48
|
`provider: codex` and `tier: quick` as YAML keys) and spawns
|
|
39
|
-
`npx specrails-core
|
|
40
|
-
and tier live in the YAML, not as CLI flags. The
|
|
49
|
+
`npx --yes --prefer-online specrails-core@^4.8.0 init --yes --from-config <file>`
|
|
50
|
+
— the provider and tier live in the YAML, not as CLI flags. (The app
|
|
51
|
+
pins `specrails-core@^4.8.0`; that floor is the version that ships the
|
|
52
|
+
per-provider targets, including the Codex skill set.) The install
|
|
53
|
+
produces:
|
|
41
54
|
- `.codex/config.toml` — model, reasoning effort, sandbox mode, and
|
|
42
55
|
approval policy (all top-level keys per the codex 0.128.0+ schema).
|
|
43
56
|
- `.codex/skills/sr-*/SKILL.md` — general specrails skills
|
|
@@ -53,21 +66,23 @@ binary isn't on `PATH`; it shows install commands if you click "More info".
|
|
|
53
66
|
|
|
54
67
|
The provider **set** you choose is immutable after creation — you
|
|
55
68
|
can't add or remove a provider on an existing project (the on-disk
|
|
56
|
-
layouts are disjoint and we don't want to ask you to migrate
|
|
57
|
-
in place). Install
|
|
69
|
+
layouts are disjoint and we don't want to ask you to migrate the trees
|
|
70
|
+
in place). Install every provider you might want up front if you want
|
|
71
|
+
the choice later.
|
|
58
72
|
|
|
59
|
-
## Running
|
|
73
|
+
## Running more than one provider in one project
|
|
60
74
|
|
|
61
|
-
A single project can install **
|
|
62
|
-
**Add Project** dialog the **AI providers** control is a
|
|
63
|
-
check
|
|
64
|
-
first provider you select is the
|
|
65
|
-
spells this out: *"
|
|
66
|
-
project default. Cannot be changed after
|
|
75
|
+
A single project can install **any combination** of Claude, Codex, and
|
|
76
|
+
Gemini. In the **Add Project** dialog the **AI providers** control is a
|
|
77
|
+
multi-select — check the ones you want and the app runs each provider's
|
|
78
|
+
install sequentially. The first provider you select is the
|
|
79
|
+
**primary/default**; the helper text spells this out: *"The engines will
|
|
80
|
+
be set up. The first is the project default. Cannot be changed after
|
|
81
|
+
creation."*
|
|
67
82
|
|
|
68
|
-
Once
|
|
83
|
+
Once more than one is installed:
|
|
69
84
|
|
|
70
|
-
- **Per-invocation engine pickers** let you choose
|
|
85
|
+
- **Per-invocation engine pickers** let you choose which engine runs each
|
|
71
86
|
time you spawn work. The picker appears in the **Add Spec** dialog
|
|
72
87
|
(`AiEngineSelector`), in the **rail header** (`RailEngineSelector`),
|
|
73
88
|
and in the terminal's **Open AI CLI** menu (`CliLaunchMenu`). On
|
|
@@ -77,28 +92,51 @@ Once both are installed:
|
|
|
77
92
|
primary), so you don't have to re-pick on every spawn.
|
|
78
93
|
- **Capability intersection.** The right sidebar only shows sections
|
|
79
94
|
that *every* installed provider supports. Because Codex has no agent
|
|
80
|
-
profiles
|
|
81
|
-
|
|
82
|
-
|
|
95
|
+
profiles, the **Agents** section is **hidden** whenever a non-Claude
|
|
96
|
+
provider is installed. The **Integrations** section stays **visible** —
|
|
97
|
+
it hosts the provider-agnostic Jira card. What gets filtered there is
|
|
98
|
+
the **Serena plugin** entry, which needs a Claude-style project MCP
|
|
99
|
+
registration (so it shows for Claude and Gemini, but not for Codex).
|
|
100
|
+
See [Plugins and MCP on codex projects](#plugins-and-mcp-on-codex-projects).
|
|
101
|
+
Single-provider projects are unaffected.
|
|
83
102
|
|
|
84
103
|
When only one provider is installed the app behaves byte-identically to
|
|
85
104
|
a single-provider project — no engine pickers, no provider persisted on
|
|
86
105
|
spawns, no overrides.
|
|
87
106
|
|
|
88
|
-
## What's different vs Claude
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
|
95
|
-
|
|
96
|
-
| **
|
|
97
|
-
| **
|
|
98
|
-
| **
|
|
99
|
-
| **
|
|
100
|
-
| **
|
|
101
|
-
| **
|
|
107
|
+
## What's different vs Claude (and Gemini)
|
|
108
|
+
|
|
109
|
+
The table below puts Codex side by side with Claude, plus a Gemini column
|
|
110
|
+
so you can see where each provider lands. (For the full Gemini picture see
|
|
111
|
+
the [Gemini guide](gemini.md).)
|
|
112
|
+
|
|
113
|
+
| Surface | Claude | Codex | Gemini |
|
|
114
|
+
|---|---|---|---|
|
|
115
|
+
| **CLI** | `claude` | `codex` | `gemini` |
|
|
116
|
+
| **Min CLI version** | none pinned | `0.128.0` | `0.11.0` |
|
|
117
|
+
| **Project dir** | `.claude/` | `.codex/` | `.gemini/` |
|
|
118
|
+
| **Instructions file** | `CLAUDE.md` | `AGENTS.md` | `GEMINI.md` |
|
|
119
|
+
| **Default model** | `sonnet` | `gpt-5.5` | `gemini-3.5-flash` |
|
|
120
|
+
| **Agent format** | `.claude/agents/<id>.md` with `model:` frontmatter | `.codex/skills/<id>/SKILL.md` Skill format | `.gemini/` command + agent target |
|
|
121
|
+
| **Agent profiles** | Full support (rail `RailProfileSelector`) | **None** — rails force the profile to `null` | **None** — rails force the profile to `null` |
|
|
122
|
+
| **Pipeline rails** | ✅ all rail types | ✅ (except Ultracode) | ✅ (except Ultracode) |
|
|
123
|
+
| **Ultracode rails** | ✅ Claude-only | ❌ rejected (`Ultracode requires the Claude provider`) | ❌ rejected |
|
|
124
|
+
| **Contract Refine** | Claude-only (it `--resume`s the Explore session and runs `/specrails:contract-refine`) | **Skipped** — toggling "Enrich with Contract Layer" is a no-op | **Skipped** |
|
|
125
|
+
| **MCP registration** | Surgical merge of `<project>/.mcp.json` | `codex mcp add` against per-project `CODEX_HOME=~/.specrails/projects/<slug>/codex-home/` (isolated) | Project `.mcp.json` (so Serena-style plugins **do** resolve) |
|
|
126
|
+
| **Session resume** | `--resume <session_id>` | `exec resume <thread_id>` | `--resume` |
|
|
127
|
+
| **Native cost report** | `result.total_cost_usd` from `--output-format stream-json` | None — cost is **estimated** by the app from `turn.completed.usage` and the local pricing table at `server/pricing.ts` | None — **estimated** the same way as Codex |
|
|
128
|
+
| **Telemetry** | `OTEL_EXPORTER_OTLP_*` env vars consumed by claude itself | **Synthesised** by the app from `codex exec --json` events and POSTed to the same in-process OTLP receiver | **Native** OTLP — Gemini honours the same `OTEL_*` env vars Claude does (no synthetic bridge) |
|
|
129
|
+
|
|
130
|
+
A few Codex-specific behaviours worth calling out:
|
|
131
|
+
|
|
132
|
+
- **Rail sandbox.** Codex rail jobs spawn with `--sandbox danger-full-access`
|
|
133
|
+
(not the `workspace-write` sandbox used for one-off `codex exec` runs), so
|
|
134
|
+
a rail can read and write anywhere in the project. This is intentional —
|
|
135
|
+
rails need to apply edits across the repo — but it's worth knowing if
|
|
136
|
+
you're surprised by a rail touching files outside the working tree.
|
|
137
|
+
- **Ultracode rails are Claude-only.** Launching an Ultracode rail on a
|
|
138
|
+
Codex (or Gemini) engine is rejected with a 400 (`Ultracode requires the
|
|
139
|
+
Claude provider`). Pick Claude for that rail.
|
|
102
140
|
|
|
103
141
|
## Estimated cost
|
|
104
142
|
|
|
@@ -115,9 +153,11 @@ The Analytics page surfaces this in two places:
|
|
|
115
153
|
- **The Hero** shows a small italic suffix next to the invocation
|
|
116
154
|
count (`· includes ~$X.XX estimated`) when any row in the active
|
|
117
155
|
window came from the fallback.
|
|
118
|
-
- **A
|
|
119
|
-
|
|
120
|
-
|
|
156
|
+
- **A "By provider" card** between the Hero and the Timeline splits
|
|
157
|
+
cost per provider into authoritative vs estimated whenever the project
|
|
158
|
+
has invoked more than one. Claude rows are authoritative (the CLI
|
|
159
|
+
reports cost); Codex and Gemini rows are estimated from token counts
|
|
160
|
+
and the local rate-card.
|
|
121
161
|
|
|
122
162
|
The pricing table is reviewed quarterly. The reference date sits on
|
|
123
163
|
each entry as `lastReviewedAt`. If OpenAI raises prices mid-quarter,
|
|
@@ -125,12 +165,20 @@ ship an out-of-band update to `server/pricing.ts`.
|
|
|
125
165
|
|
|
126
166
|
## Plugins and MCP on codex projects
|
|
127
167
|
|
|
128
|
-
The **Integrations**
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
`
|
|
133
|
-
codex project
|
|
168
|
+
The **Integrations** section stays **visible** on codex projects — it hosts
|
|
169
|
+
the provider-agnostic **Jira** integration, which works for any provider.
|
|
170
|
+
What's filtered out is the **Serena plugin**: it requires a project-level
|
|
171
|
+
`.mcp.json` registration that Codex doesn't use (Codex registers MCP servers
|
|
172
|
+
via `codex mcp add`, Claude and Gemini use the project `.mcp.json`). So a
|
|
173
|
+
codex-only project still has the Integrations tab and the Jira card, but no
|
|
174
|
+
Serena plugin entry.
|
|
175
|
+
|
|
176
|
+
> Why: the right sidebar shows the capability intersection (sections every
|
|
177
|
+
> installed provider supports). Only **Agents** is Claude-only; **Integrations**
|
|
178
|
+
> is not. The per-provider filter lives inside the Integrations page
|
|
179
|
+
> (`client/src/pages/IntegrationsPage.tsx`, `showPlugins` requires a
|
|
180
|
+
> Claude-style provider), not in the section-level intersection
|
|
181
|
+
> (`provider-capabilities.ts`).
|
|
134
182
|
|
|
135
183
|
To give a codex project MCP servers, register them with `codex mcp add` from your
|
|
136
184
|
terminal: codex chat / Explore turns spawn with your own environment and read your global
|
|
@@ -170,7 +218,9 @@ spec just commits without a Contract Layer block.
|
|
|
170
218
|
## Emergency rollback
|
|
171
219
|
|
|
172
220
|
If you need to disable the codex path, set `SPECRAILS_CODEX_BETA=0`
|
|
173
|
-
in the app's environment.
|
|
221
|
+
in the app's environment. **Only the exact string `0` disables Codex** —
|
|
222
|
+
`false`, `off`, `1`, or unset all leave it enabled. For a source checkout
|
|
223
|
+
that's:
|
|
174
224
|
|
|
175
225
|
```bash
|
|
176
226
|
SPECRAILS_CODEX_BETA=0 npm run dev
|
|
@@ -179,10 +229,13 @@ SPECRAILS_CODEX_BETA=0 npm run dev
|
|
|
179
229
|
For the packaged desktop app, set the variable in the environment the app
|
|
180
230
|
process inherits (the `npm run dev` form is for source runs only).
|
|
181
231
|
|
|
232
|
+
(Gemini has the same kill switch, `SPECRAILS_GEMINI_BETA=0`, but **no**
|
|
233
|
+
legacy `SPECRAILS_HUB_*` fallback name.)
|
|
234
|
+
|
|
182
235
|
`GET /api/available-providers` will report `codex: false` and
|
|
183
236
|
`POST /api/projects` will refuse new codex projects. Existing
|
|
184
|
-
codex projects keep functioning —
|
|
185
|
-
|
|
237
|
+
codex projects keep functioning — the env var only gates creating
|
|
238
|
+
*new* codex projects.
|
|
186
239
|
|
|
187
240
|
## Architecture pointers (for specrails-desktop developers)
|
|
188
241
|
|
|
@@ -198,13 +251,18 @@ The codex integration lives in:
|
|
|
198
251
|
with per-project `CODEX_HOME`.
|
|
199
252
|
|
|
200
253
|
The contract every provider implements is at
|
|
201
|
-
`server/providers/types.ts`. Adding a
|
|
202
|
-
|
|
254
|
+
`server/providers/types.ts`. Adding a provider is essentially one new
|
|
255
|
+
adapter file + one `register(...)` entry in `server/providers/index.ts`
|
|
256
|
+
(the rest of the codebase is registry-driven and provider-id-agnostic).
|
|
257
|
+
`server/providers/gemini-adapter.ts` is the freshest worked example —
|
|
258
|
+
see [Adding a provider](internals/adding-a-provider.md).
|
|
203
259
|
|
|
204
260
|
## See also
|
|
205
261
|
|
|
262
|
+
- [Using Gemini](gemini.md) — the Gemini CLI provider (the other
|
|
263
|
+
provider with estimated cost).
|
|
206
264
|
- [Adding a provider](internals/adding-a-provider.md) — the developer
|
|
207
|
-
guide to wiring
|
|
265
|
+
guide to wiring an AI CLI adapter.
|
|
208
266
|
- [Tracking cost](tracking-cost.md) — how the Analytics page surfaces
|
|
209
267
|
per-invocation cost across every surface (including the estimated
|
|
210
268
|
codex rows described above).
|
package/docs/creating-specs.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# Creating specs
|
|
2
2
|
|
|
3
|
-
A **spec** in specrails-desktop is a description of work you want done — what the AI agents will read and act on. This guide walks through every way you can create, refine, compare, and organise them.
|
|
3
|
+
A **spec** in specrails-desktop is a description of work you want done — what the AI agents will read and act on. This guide walks through every way you can create, refine, compare, and organise them.
|
|
4
|
+
|
|
5
|
+
Specs are engine-agnostic: depending on how the project was set up, they can be generated by **Claude, Codex, or Gemini** — whichever providers you installed for the project. The flows below are identical no matter which one you use; only the engine picker and the default model differ.
|
|
4
6
|
|
|
5
7
|
## Creating a spec
|
|
6
8
|
|
|
@@ -10,7 +12,7 @@ Open the Dashboard and click **Add** (the Plus button on the SpecsBoard toolbar)
|
|
|
10
12
|
- **Explore** — you converse with the AI and shape the spec turn by turn.
|
|
11
13
|
- **Raw** — your prompt is saved verbatim as a spec, with **no AI** involved.
|
|
12
14
|
|
|
13
|
-
|
|
15
|
+
If the project has **more than one provider installed** — any combination of Claude, Codex, and Gemini — an **AI engine** selector sits at the top of the dialog so you can pick which engine generates this spec. The choice is remembered per project. Projects with a single provider don't show the selector; it would have nothing to choose between.
|
|
14
16
|
|
|
15
17
|
### Quick mode
|
|
16
18
|
|
|
@@ -53,9 +55,11 @@ For when the spec needs shaping. You converse with the AI; a live draft updates
|
|
|
53
55
|
|
|
54
56
|
Rich and Max both load the full codebase — they differ only in whether the Contract Layer pass runs. The decision is per-conversation (saved on `chat_conversations.context_scope`) so it doesn't bleed into other Explore sessions.
|
|
55
57
|
|
|
58
|
+
The **Desktop** preset is Explore-only — Quick mode caps the slider at **Max** (no project/approved MCPs), as noted under [Quick mode](#quick-mode) above.
|
|
59
|
+
|
|
56
60
|
Click **Fine-tune** to set the flags individually. One toggle only appears here:
|
|
57
61
|
|
|
58
|
-
- **My approved MCPs** — loads the MCP servers you've already approved locally (`claude mcp add` / `codex mcp add`) without changing where the spawn runs. Explore-only; disabled in Quick mode.
|
|
62
|
+
- **My approved MCPs** — loads the MCP servers you've already approved locally (`claude mcp add` / `codex mcp add`) without changing where the spawn runs. Explore-only; disabled in Quick mode. On a **Gemini** project, Gemini reads your own approved MCP servers from its native config (`~/.gemini`) automatically, so this toggle isn't needed there.
|
|
59
63
|
|
|
60
64
|
**Buttons in the shell:**
|
|
61
65
|
|
|
@@ -120,7 +124,7 @@ Got an epic that's clearly too big? Open it and click **SMASH Spec into Sub-Spec
|
|
|
120
124
|
|
|
121
125
|
- Gets `parent_epic_id` pointing back at the epic.
|
|
122
126
|
- Carries an execution order (the SMASH agent decides the right order).
|
|
123
|
-
- Carries a short summary
|
|
127
|
+
- Carries a short summary surfaced on its postit card. The agent is asked to keep it to ~120 characters; the server hard-caps it at 240 characters as a safety net.
|
|
124
128
|
|
|
125
129
|
Inside the epic's modal you'll see an **Epic Family Sidebar** listing all children. Inside each child's modal, an **Epic Breadcrumb** lets you jump back to the parent. If the epic already has children, the button reads **Re-SMASH** and regenerates the family (after a confirmation).
|
|
126
130
|
|
|
@@ -152,13 +156,20 @@ Every spec card shows a status indicator that stays consistent across view modes
|
|
|
152
156
|
|
|
153
157
|
## Filtering and sorting
|
|
154
158
|
|
|
155
|
-
The SpecsBoard toolbar
|
|
159
|
+
The SpecsBoard toolbar always shows these four controls plus the Add button:
|
|
156
160
|
|
|
157
161
|
- **Status filter** — a single-select dropdown with three values: **All**, **ToDo**, **Done**. Defaults to **All**, which shows everything (including drafts and done specs).
|
|
158
162
|
- **Label dropdown** — multi-select across every label used in the project.
|
|
159
163
|
- **Sort** — **Default**, **Ticket #**, or **Priority**, each with an ascending/descending toggle.
|
|
160
164
|
- **View toggle** — switch between List view and Post-it view (see below).
|
|
161
165
|
|
|
166
|
+
Two more filters appear **only once your board has the data for them**, so don't be surprised if you see five or six controls. Both are surfaced only on **Jira-linked** projects:
|
|
167
|
+
|
|
168
|
+
- **Epic filter** — appears once at least one spec carries a Jira epic, letting you narrow the board to one epic's children.
|
|
169
|
+
- **Sprint filter** — appears when specs carry Jira sprint data.
|
|
170
|
+
|
|
171
|
+
On a **Jira-linked** project the Sort dropdown also gains a fourth mode, **Jira key**, so you can order the board by Jira ticket number.
|
|
172
|
+
|
|
162
173
|
Priority itself is set per spec from the right-click menu (below), not from a toolbar filter — there is no priority filter and no search box on the board.
|
|
163
174
|
|
|
164
175
|
## Right-click context menu
|
|
@@ -169,6 +180,8 @@ Right-click any spec card (in any view mode):
|
|
|
169
180
|
- **Change status → Todo / Done**
|
|
170
181
|
- **Set priority → Critical / High / Medium / Low**
|
|
171
182
|
|
|
183
|
+
On a **Jira-backed** spec the first item changes from **Delete ticket** to **Move to `<status>`** (which transitions the linked Jira issue) with a separate **Discard** flow, since a Jira-backed spec can't simply be deleted locally.
|
|
184
|
+
|
|
172
185
|
## View modes
|
|
173
186
|
|
|
174
187
|
The SpecsBoard has **two** view modes, switched from a toolbar toggle and remembered per project:
|
|
@@ -195,3 +208,4 @@ You don't need this to use the feature, but it's nice to know:
|
|
|
195
208
|
- [Running pipelines](running-pipelines.md) — drag those specs onto rails and launch the implementation pipeline.
|
|
196
209
|
- [Tracking cost](tracking-cost.md) — see what each spec is costing you.
|
|
197
210
|
- [Customising the app](customizing.md) — set a daily budget so you can stop worrying.
|
|
211
|
+
- [Using Codex](codex.md) / [Using Gemini](gemini.md) — provider-specific notes if you generate specs with Codex or Gemini.
|
package/docs/customizing.md
CHANGED
|
@@ -59,7 +59,7 @@ Open **Settings** from the project navbar (top right of any project page).
|
|
|
59
59
|
| **Daily budget (USD)** | The queue auto-pauses when this project's spend for the current calendar day exceeds the cap. Blank = no cap. |
|
|
60
60
|
| **Per-job cost alert (USD)** | OS notification when a single job in this project exceeds this amount. Blank = disabled. |
|
|
61
61
|
|
|
62
|
-
The daily counter is the sum of completed-job cost since midnight, so it resets at the start of each calendar day. When the cap is hit you see a "Daily budget exceeded — Queue is paused" banner on the project (plus a toast). Resume by raising or clearing the budget (and waiting for the next day if you've genuinely spent it).
|
|
62
|
+
The daily counter is the sum of completed-job cost since midnight, so it resets at the start of each calendar day. When the cap is hit you see a "Daily budget exceeded — spent $X of $Y. Queue is paused." banner on the project (plus a toast). Resume by raising or clearing the budget (and waiting for the next day if you've genuinely spent it).
|
|
63
63
|
|
|
64
64
|
### Rail pre-prompt
|
|
65
65
|
|
|
@@ -109,6 +109,8 @@ Open **Desktop Settings** from the Arc sidebar. These apply across every project
|
|
|
109
109
|
| Section | What it does |
|
|
110
110
|
|---------|--------------|
|
|
111
111
|
| **Appearance** | Theme picker — see above. |
|
|
112
|
+
| **Language** | UI language picker. Eight locales (English, Spanish, French, German, Portuguese, Italian, Chinese, Japanese). Hot-switches the whole app — no restart. First run follows your OS language until you pick one explicitly. |
|
|
113
|
+
| **Code section** | Defaults for the Code section: the plain-language file-summary language (English or Spanish) and a monthly summary budget cap in USD. Hidden when the Code section is disabled. |
|
|
112
114
|
| **Registered Projects** | The project registry. Re-resolve, rename, or remove projects. |
|
|
113
115
|
| **specrails-tech** | Base URL for the external specrails-tech agents service (default `http://localhost:3000`). |
|
|
114
116
|
| **Budget & Alerts** | App-wide daily budget (a global spend cap across all projects — queues auto-pause when exceeded) plus a per-job cost alert threshold. Distinct from the per-project budget. |
|
|
@@ -126,26 +128,41 @@ On first run the app generates a token and persists it to `~/.specrails/desktop.
|
|
|
126
128
|
|
|
127
129
|
The app binds to `127.0.0.1` only, so it's never exposed to your network. To rotate the token, stop the app, delete `~/.specrails/desktop.token`, and start it again — a fresh token is generated on the next boot.
|
|
128
130
|
|
|
131
|
+
## Providers
|
|
132
|
+
|
|
133
|
+
The app works with **three interchangeable AI providers — Claude, Codex, and Gemini — all enabled by default.** When you add a project you pick which provider(s) to install (you can install any subset; the first one becomes the project's default). The engine pickers on Add Spec, the rail header, and the terminal's "Open AI CLI" button appear automatically whenever more than one provider is installed.
|
|
134
|
+
|
|
135
|
+
You normally don't configure anything here — providers are selected per project in the UI. The only knobs are the **emergency rollback** env vars below (one per provider), which force a provider back to "unavailable" without redeploying. See [codex.md](codex.md) and [gemini.md](gemini.md) for each provider's setup, auth, and limitations.
|
|
136
|
+
|
|
129
137
|
## Environment variables
|
|
130
138
|
|
|
131
139
|
Most settings live in the UI. A few app-level switches are env-only because they're guardrails ops people want to flip without opening the dashboard.
|
|
132
140
|
|
|
141
|
+
> **How values are read** (the rules differ by flag type):
|
|
142
|
+
> - **Section gates** (`SPECRAILS_*_SECTION`, `SPECRAILS_TERMINAL_PANEL`, `SPECRAILS_CODE_EXPLORER`, …) are ON unless set to the **exact string `false`**.
|
|
143
|
+
> - **Provider rollbacks** (`SPECRAILS_CODEX_BETA`, `SPECRAILS_GEMINI_BETA`) disable on the **exact string `0`** only — `false`/`off` do *not* disable them.
|
|
144
|
+
> - **Kill switches** (`SPECRAILS_SMASH`, `SPECRAILS_EXPLORE_CONTRACT_REFINE`) accept `0` / `false` / `off`.
|
|
145
|
+
> - **Opt-in hatches** (`SPECRAILS_EXPLORE_LEGACY_CWD`, `SPECRAILS_ALLOW_LOCAL_WEBHOOKS`) enable on the **exact string `1`**.
|
|
146
|
+
|
|
133
147
|
### Server-side (read at app startup or by spawned children)
|
|
134
148
|
|
|
135
149
|
| Variable | Effect |
|
|
136
150
|
|----------|--------|
|
|
137
|
-
| `SPECRAILS_CORE_BIN` | Override the `specrails-core` binary (default: `npx --yes --prefer-online specrails-core
|
|
151
|
+
| `SPECRAILS_CORE_BIN` | Override the `specrails-core` binary (default: `npx --yes --prefer-online specrails-core@^4.8.0` — the 4.8.0 floor is the release that ships the Gemini provider target) |
|
|
138
152
|
| `SPECRAILS_TECH_URL` | Override the specrails-tech proxy base URL |
|
|
139
153
|
| `SPECRAILS_AGENTS_SECTION=false` | Hide the Agents section from every project |
|
|
140
154
|
| `SPECRAILS_PLUGINS_SECTION=false` | Hide the Integrations section from every project |
|
|
155
|
+
| `SPECRAILS_JIRA_SECTION=false` | Hide the Jira integration and 404 its routes |
|
|
141
156
|
| `SPECRAILS_TERMINAL_PANEL=false` | Disable the bottom terminal panel everywhere |
|
|
142
|
-
| `SPECRAILS_CODE_EXPLORER=false` | Disable the
|
|
157
|
+
| `SPECRAILS_CODE_EXPLORER=false` | Disable the Code section server-side |
|
|
158
|
+
| `SPECRAILS_INTERACTIVE_JOBS=false` | Reject the interactive-ultracode toggle and the per-job message/finalize routes |
|
|
143
159
|
| `SPECRAILS_BROWSER_CAPTURE=false` | Disable Add-Spec-from-browser capture |
|
|
144
|
-
| `SPECRAILS_CODEX_BETA=0` | Emergency rollback — disable the Codex provider (legacy `SPECRAILS_HUB_CODEX_BETA`
|
|
160
|
+
| `SPECRAILS_CODEX_BETA=0` | Emergency rollback — disable the Codex provider (only the exact string `0`; the legacy `SPECRAILS_HUB_CODEX_BETA` is read as a fallback **only when `SPECRAILS_CODEX_BETA` is unset**) |
|
|
161
|
+
| `SPECRAILS_GEMINI_BETA=0` | Emergency rollback — disable the Gemini provider (default unset = enabled; only the exact string `0` disables; **no legacy fallback name**) |
|
|
145
162
|
| `SPECRAILS_SMASH=0` | Kill switch for SMASH spec decomposition (`0` / `false` / `off`; endpoints return 409) |
|
|
146
163
|
| `SPECRAILS_EXPLORE_CONTRACT_REFINE=0` | App-wide kill switch for Contract Refine (auto-fire + retry endpoint; accepts `0` / `false` / `off`) |
|
|
147
164
|
| `SPECRAILS_EXPLORE_LEGACY_CWD=1` | Force Explore spawns to use the project root instead of the app-managed `explore-cwd/` |
|
|
148
|
-
| `SPECRAILS_FILE_SUMMARY_MODEL` | Override the model used for Code-section file summaries |
|
|
165
|
+
| `SPECRAILS_FILE_SUMMARY_MODEL` | Override the model used for Code-section file summaries. Per-provider overrides take precedence: `SPECRAILS_FILE_SUMMARY_MODEL_CLAUDE` (Claude) and `SPECRAILS_FILE_SUMMARY_MODEL_CODEX` (Codex); the generic var is the fallback |
|
|
149
166
|
| `SPECRAILS_ALLOW_LOCAL_WEBHOOKS=1` | Allow outbound webhooks to target loopback / private-network addresses |
|
|
150
167
|
|
|
151
168
|
### Client-side (Vite — set at build time)
|
|
@@ -156,7 +173,9 @@ These feature flags are **default ON**. Set the flag to `false` to hide the feat
|
|
|
156
173
|
|----------|--------|
|
|
157
174
|
| `VITE_FEATURE_TERMINAL_PANEL=false` | Hide the bottom terminal panel |
|
|
158
175
|
| `VITE_FEATURE_AGENTS_SECTION=false` | Hide the Agents section |
|
|
159
|
-
| `VITE_FEATURE_CODE_EXPLORER=false` | Hide the
|
|
176
|
+
| `VITE_FEATURE_CODE_EXPLORER=false` | Hide the Code section |
|
|
177
|
+
| `VITE_FEATURE_JIRA=false` | Hide the Jira integration UI (settings section + spec badges) |
|
|
178
|
+
| `VITE_FEATURE_INTERACTIVE_JOBS=false` | Hide the interactive-ultracode UI (rail "Interactive" toggle + in-job chat + Finalize) |
|
|
160
179
|
| `VITE_FEATURE_EXPLORE_REVIEW=false` | Disable the Review step in the Explore shell |
|
|
161
180
|
| `VITE_FEATURE_EXPLORE_PREMIUM_UX=false` | Disable the "Conectando…/Pensando…/Consultando código…" pills above the Explore streaming bubble |
|
|
162
181
|
|
|
@@ -164,6 +183,8 @@ These feature flags are **default ON**. Set the flag to `false` to hide the feat
|
|
|
164
183
|
|
|
165
184
|
Set them in the shell that launches the app. Desktop app users can set them in their shell rc files since the desktop app inherits the launchd PATH and env.
|
|
166
185
|
|
|
186
|
+
> **Not env vars:** a few `SPECRAILS_*` names you might spot in the source are *not* settings you can flip. `SPECRAILS_DIR` is a code constant; `SPECRAILS_PROFILE_PATH`, `SPECRAILS_PLUGINS_ACTIVE`, and `SPECRAILS_PLUGINS_SNAPSHOT` are values the app injects *into* the AI CLI it spawns. Setting them yourself has no effect. The desktop-only `SPECRAILS_IS_DESKTOP` / `SPECRAILS_BUNDLED_RUNTIMES_PATH` are set by the packaged app, never by you.
|
|
187
|
+
|
|
167
188
|
## Resetting the app
|
|
168
189
|
|
|
169
190
|
To wipe all app state (project registry, settings, theme) but keep your project source code intact:
|