specrails-desktop 2.8.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 +24 -1
- 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/queue-manager.js +149 -18
- 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/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
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Analytics et suivi des coûts
|
|
2
|
+
|
|
3
|
+
Chaque fois que Specrails lance une CLI IA pour vous — un job de pipeline, une spec rapide, une session Explore, un affinage IA, un résumé de fichier — il consigne ce qui s'est passé : quel modèle a tourné, combien de tokens sont entrés et sortis, combien de temps cela a pris et combien cela a coûté. La section **Analytics** transforme tout cela en un tableau de bord unique, pour que vous sachiez toujours où part votre budget IA.
|
|
4
|
+
|
|
5
|
+
Ouvrez-la depuis la barre latérale droite (elle est intitulée **Analytics**). Tout ce que vous y voyez se rapporte au projet dans lequel vous vous trouvez actuellement — changez de projet et les chiffres suivent.
|
|
6
|
+
|
|
7
|
+
## Ce qui compte comme dépense
|
|
8
|
+
|
|
9
|
+
Specrails suit cinq types d'activité IA, appelés *surfaces*. Chacune dispose d'un code couleur cohérent sur tous les graphiques, pour que vous puissiez la repérer d'un coup d'œil :
|
|
10
|
+
|
|
11
|
+
- **Job** — un rail de pipeline qui enchaîne Architect → Developer → Reviewer → Ship.
|
|
12
|
+
- **Quick spec** — une spec générée par la voie rapide d'Add Spec.
|
|
13
|
+
- **Explore spec** — une conversation Explore où vous façonnez une spec en discutant.
|
|
14
|
+
- **AI edit** — un affinage assisté par l'IA sur un agent ou un fichier.
|
|
15
|
+
- **File summary** — les résumés en langage clair qui alimentent le Code explorer.
|
|
16
|
+
|
|
17
|
+
Deux activités ne sont délibérément *pas* suivies : le panneau de chat latéral et l'assistant de configuration lancent tous deux des CLI IA, mais ils n'apparaissent jamais dans vos dépenses. Le tableau de bord reflète ainsi un travail réel et reproductible plutôt que des échanges anecdotiques.
|
|
18
|
+
|
|
19
|
+
## Lire le tableau de bord
|
|
20
|
+
|
|
21
|
+
La page est constituée d'une série de blocs, de haut en bas :
|
|
22
|
+
|
|
23
|
+
### La jauge de consommation (Hero)
|
|
24
|
+
|
|
25
|
+
Le grand chiffre en haut représente votre dépense totale pour la période sélectionnée, avec un écart **vs préc.** qui vous permet de voir en un coup d'œil si la tendance est à la hausse ou à la baisse par rapport à la fenêtre précédente. Si vous venez tout juste de commencer à utiliser un projet, l'état vide vous indique quand le suivi a démarré (« Suivi démarré le YYYY-MM-DD ») — il n'y a pas de récupération rétroactive de l'historique, donc la jauge ne connaît que les exécutions survenues alors que vous étiez sur cette version.
|
|
26
|
+
|
|
27
|
+
### Chronologie quotidienne
|
|
28
|
+
|
|
29
|
+
Un graphique à barres empilées de la dépense par jour, ventilée par surface. Les jours sans activité s'affichent à zéro plutôt que d'être omis, pour que la silhouette de votre semaine reste honnête. C'est le moyen le plus rapide de voir *quand* un lot coûteux a tourné.
|
|
30
|
+
|
|
31
|
+
### Quick vs Explore
|
|
32
|
+
|
|
33
|
+
Une carte côte à côte comparant vos deux styles de création de spec. Si vous avez lancé moins de cinq sessions Explore, elle affiche un appel à l'action tout en douceur plutôt que des moyennes trompeuses — les petits échantillons ne font pas de bonnes comparaisons.
|
|
34
|
+
|
|
35
|
+
### Par modèle
|
|
36
|
+
|
|
37
|
+
Vos principaux modèles par dépense (jusqu'à dix). Cliquez sur n'importe quel modèle pour filtrer l'ensemble du tableau de bord sur ce seul modèle — pratique quand vous voulez savoir combien vous coûte vraiment un modèle haut de gamme en particulier.
|
|
38
|
+
|
|
39
|
+
### Nuage de points coût vs tours
|
|
40
|
+
|
|
41
|
+
Chaque point représente une invocation, avec le coût en fonction du nombre de tours. Les valeurs aberrantes — les exécutions coûteuses à nombreux tours — sautent aux yeux. (Le nuage affiche vos 500 points les plus récents pour rester fluide.)
|
|
42
|
+
|
|
43
|
+
### Top tickets
|
|
44
|
+
|
|
45
|
+
Vos dix tickets les plus coûteux, toutes *surfaces* confondues, de sorte qu'un ticket qui a coûté un peu en Explore et beaucoup dans un job affiche son vrai total. Les tickets supprimés et les exécutions non attribuées disposent de leurs propres catégories, pour que rien ne disparaisse silencieusement des totaux.
|
|
46
|
+
|
|
47
|
+
### Table des invocations brutes
|
|
48
|
+
|
|
49
|
+
La vérité de terrain : une ligne par invocation. Ce bloc possède ses propres filtres secondaires qui n'affectent que la table, pour que vous puissiez creuser sans perturber les graphiques au-dessus.
|
|
50
|
+
|
|
51
|
+
## Filtrer
|
|
52
|
+
|
|
53
|
+
L'en-tête épinglé en haut porte les deux filtres principaux — **période** et **surface** — et tous deux sont enregistrés dans l'URL de la page. Cela signifie que vous pouvez mettre en favori ou partager une vue filtrée (« 30 derniers jours, jobs uniquement ») et elle se rouvrira exactement comme vous l'aviez laissée. Les filtres de la table brute sont distincts et restent locaux à ce bloc.
|
|
54
|
+
|
|
55
|
+
Un mot sur la précision : les exécutions en échec ou interrompues sont exclues des *moyennes de coût* (elles fausseraient les chiffres par exécution) mais elles comptent tout de même dans votre nombre total d'exécutions et votre taux d'échec. Les moyennes restent ainsi propres tandis que le portrait de la fiabilité reste complet.
|
|
56
|
+
|
|
57
|
+
## Coût par ticket
|
|
58
|
+
|
|
59
|
+
Pas besoin de passer par la page Analytics pour savoir ce qu'a coûté une spec. Ouvrez n'importe quel ticket et, s'il a une dépense rattachée, vous verrez un résumé sur une ligne juste sous le titre :
|
|
60
|
+
|
|
61
|
+
> $0.42 · 6 turns · 1m 12s active · breakdown
|
|
62
|
+
|
|
63
|
+
Cliquez dessus et vous arrivez sur la page Analytics déjà filtrée sur ce ticket. C'est le chemin le plus court entre « combien cette fonctionnalité m'a-t-elle coûté ? » et le détail complet.
|
|
64
|
+
|
|
65
|
+
## Exporter vos données
|
|
66
|
+
|
|
67
|
+
Quand vous avez besoin des chiffres en dehors de l'application — un tableur, un rapport financier, votre propre analyse — utilisez le menu déroulant **Export**. Il propose quatre formats :
|
|
68
|
+
|
|
69
|
+
- **CSV résumé** — un fichier multi-sections avec les totaux, la chronologie quotidienne, la ventilation par surface, par modèle et les top tickets.
|
|
70
|
+
- **JSON résumé** — le même résumé, structuré.
|
|
71
|
+
- **CSV brut** — chaque ligne d'invocation (jusqu'à 10 000 ; il signale s'il a dû tronquer).
|
|
72
|
+
- **JSON brut** — les mêmes lignes brutes, structurées.
|
|
73
|
+
|
|
74
|
+
Les exports respectent les filtres de période et de surface actuellement appliqués, et les fichiers sont nommés de manière à se trier logiquement : `<project>-analytics-<period>-<date>.csv`. Le bouton est désactivé quand il n'y a rien à exporter, et un message d'erreur clair s'affiche si un téléchargement échoue.
|
|
75
|
+
|
|
76
|
+
## Toujours à jour
|
|
77
|
+
|
|
78
|
+
Pas besoin d'actualiser. Quand une nouvelle invocation est enregistrée n'importe où dans le projet, le tableau de bord ouvert se recharge discrètement un instant plus tard, pour que la jauge de consommation suive le rythme du travail à mesure qu'il se termine.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Le terminal intégré
|
|
2
|
+
|
|
3
|
+
Specrails embarque un véritable terminal — le panneau qui remonte depuis le bas de la fenêtre, exactement comme celui de VS Code ou Cursor. Il fait tourner votre shell réel, dans le répertoire réel de votre projet, pour que vous puissiez lancer `git`, `npm`, vos tests, ou tout autre commande sans quitter l'application.
|
|
4
|
+
|
|
5
|
+
## L'ouvrir et le fermer
|
|
6
|
+
|
|
7
|
+
Le plus rapide passe par le clavier : **Cmd+J** (macOS) ou **Ctrl+J** (Windows/Linux) ouvre et ferme le panneau, et place le focus sur le terminal dès qu'il apparaît pour que vous puissiez taper immédiatement. Vous pouvez aussi utiliser le chevron dans la barre d'état.
|
|
8
|
+
|
|
9
|
+
Le panneau a trois états :
|
|
10
|
+
|
|
11
|
+
- **Masqué** — rangé hors de vue.
|
|
12
|
+
- **Restauré** — le panneau normal à mi-hauteur.
|
|
13
|
+
- **Agrandi** — qui prend toute la zone de travail quand vous avez besoin de place pour lire une sortie.
|
|
14
|
+
|
|
15
|
+
Replier le panneau (le chevron) **n'arrête** rien — vos shells continuent de tourner en arrière-plan. La seule chose qui met réellement fin à une session, c'est de la fermer (l'icône corbeille, ou le ✕ propre à chaque onglet).
|
|
16
|
+
|
|
17
|
+
## Plusieurs sessions
|
|
18
|
+
|
|
19
|
+
Vous pouvez faire tourner plusieurs terminaux à la fois dans le même projet — jusqu'à dix. Chacun a son propre onglet ; vous pouvez les renommer pour ne pas confondre « dev server » et « tests ». Ils démarrent tous dans le dossier de votre projet et chargent votre profil de shell (`.zshrc`, `.bashrc`, etc.), pour que vos alias et votre PATH soient exactement ceux que vous attendez.
|
|
20
|
+
|
|
21
|
+
Voici le point important : vos terminaux **survivent aux changements de projet et d'onglet**. Specrails maintient chaque session vivante et intacte en coulisses — historique de défilement, processus en cours, tout — de sorte que basculer vers Analytics puis revenir ne réinitialise pas votre shell ni n'interrompt une commande de longue durée. Les sessions ne se terminent que lorsque vous les fermez explicitement (ou lorsque vous supprimez le projet entier).
|
|
22
|
+
|
|
23
|
+
## Par projet, et mémorisé
|
|
24
|
+
|
|
25
|
+
Que le panneau soit ouvert, la hauteur à laquelle vous l'avez étiré, les onglets qui existent — tout cela est mémorisé **par projet**. Revenez sur un projet et il est configuré comme vous l'aviez laissé.
|
|
26
|
+
|
|
27
|
+
## Les fonctionnalités premium
|
|
28
|
+
|
|
29
|
+
Ce n'est pas une console minimaliste. Le terminal embarque tout le confort qu'on attend d'un terminal de premier ordre :
|
|
30
|
+
|
|
31
|
+
- **Un rendu rapide et net** grâce à WebGL (avec un repli automatique pour qu'il ne casse jamais), une gestion complète de la largeur Unicode et les ligatures de police.
|
|
32
|
+
- **La recherche dans l'historique de défilement** avec **Cmd+F** — idéal pour retrouver cette erreur enfouie 500 lignes plus haut.
|
|
33
|
+
- **Le zoom de police** avec **Cmd+=**, **Cmd+-** et **Cmd+0** pour réinitialiser.
|
|
34
|
+
- **Les raccourcis presse-papiers** — Cmd+C / Cmd+V pour copier et coller, Cmd+K pour effacer — ainsi qu'un menu contextuel au clic droit.
|
|
35
|
+
- **Le glisser-déposer de chemins de fichiers** (dans l'application desktop) : déposez un fichier sur le terminal et son chemin est inséré, correctement échappé pour votre shell.
|
|
36
|
+
- **Le redimensionnement fluide** — étirer la hauteur du panneau ou replier la barre latérale ne fait pas trembloter la sortie.
|
|
37
|
+
- **Les images en ligne** — les terminaux qui émettent des images au format Sixel ou iTerm2 les affichent directement sur place.
|
|
38
|
+
- **L'intégration au shell** — Specrails sait où commence et où finit chaque commande, ce qui lui permet de suivre votre historique de commandes et de vous prévenir quand une commande de longue durée se termine (une notification desktop, avec un repli navigateur). Si votre shell ne peut pas être instrumenté pour une raison quelconque, l'intégration se dégrade discrètement et vous le signale une seule fois.
|
|
39
|
+
|
|
40
|
+
## Paramètres
|
|
41
|
+
|
|
42
|
+
Les préférences du terminal vivent sur deux couches : une valeur par défaut à l'échelle de l'application et une surcharge optionnelle par projet. Le réglage par projet l'emporte lorsqu'il est présent, ce qui vous permet de conserver une apparence globale tout en ajustant un projet qui a besoin de quelque chose de différent.
|
|
43
|
+
|
|
44
|
+
## Le désactiver
|
|
45
|
+
|
|
46
|
+
Le terminal est activé par défaut. Si vous préférez vous en passer, vous pouvez le désactiver via les flags `VITE_FEATURE_TERMINAL_PANEL` (client) ou `SPECRAILS_TERMINAL_PANEL` (serveur) — mettez l'un ou l'autre à `false`. La plupart des gens le laisseront simplement activé.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Code explorer
|
|
2
|
+
|
|
3
|
+
La section **Code** vous offre une fenêtre conviviale et en lecture seule sur votre dépôt — pensée tout particulièrement pour celles et ceux qui veulent comprendre ce que l'IA construit sans devoir vivre dans un éditeur. Vous disposez d'une arborescence de fichiers à gauche, d'un afficheur de code à droite, et, au-dessus du code, d'un résumé en langage clair de ce que fait réellement chaque fichier.
|
|
4
|
+
|
|
5
|
+
Dans cette version, c'est strictement en lecture seule : rien de ce que vous faites ici ne modifie vos fichiers. Voyez-le comme une salle de lecture, pas comme un atelier.
|
|
6
|
+
|
|
7
|
+
Ouvrez-la depuis la barre latérale droite (**Code**) et, comme tout le reste, elle se rapporte à votre projet actuel.
|
|
8
|
+
|
|
9
|
+
## L'arborescence de fichiers
|
|
10
|
+
|
|
11
|
+
Le volet de gauche est une arborescence virtualisée des fichiers de votre projet — rapide même sur de gros dépôts. Elle respecte votre `.gitignore` et une liste d'exclusion intégrée, pour que vous voyiez les fichiers qui comptent, et non un océan d'artefacts de build et de `node_modules`.
|
|
12
|
+
|
|
13
|
+
À côté des fichiers, vous remarquerez des **pastilles de provenance** — de petits marqueurs qui vous indiquent qu'un fichier a été *touché par l'IA*. C'est le cœur du Code explorer : Specrails enregistre quels fichiers chaque job de pipeline a créés ou modifiés, et les relie au ticket qui a déclenché le travail. Vous pouvez ainsi répondre, d'un coup d'œil, à la question « est-ce l'IA qui a écrit ça, ou moi ? »
|
|
14
|
+
|
|
15
|
+
En haut de l'arborescence se trouve un filtre :
|
|
16
|
+
|
|
17
|
+
- **Touchés par l'IA** (par défaut) — uniquement les fichiers que l'IA a modifiés.
|
|
18
|
+
- **Tous les fichiers** — l'arborescence complète.
|
|
19
|
+
|
|
20
|
+
Votre choix est mémorisé par projet : si vous vous intéressez surtout aux changements produits par l'IA, vous les verrez en premier à chaque fois.
|
|
21
|
+
|
|
22
|
+
## L'afficheur de code
|
|
23
|
+
|
|
24
|
+
Cliquez sur un fichier et il s'ouvre dans un afficheur complet (propulsé par Monaco, le même moteur que VS Code) avec une coloration syntaxique soignée qui s'accorde au thème d'application que vous avez choisi. Quelques limites raisonnables gardent l'ensemble fluide : les fichiers binaires sont poliment refusés, et les très gros fichiers (au-delà de 2 Mo) ne se chargent pas.
|
|
25
|
+
|
|
26
|
+
Le fichier en cours est enregistré dans l'URL de la page, pour que vous puissiez mettre en favori ou partager un lien direct vers un fichier précis.
|
|
27
|
+
|
|
28
|
+
L'édition ne faisant pas partie de cette version, l'afficheur propose un bouton **Modifier dans un éditeur externe** qui copie le chemin absolu du fichier — collez-le dans l'éditeur de votre choix et reprenez le travail là-bas.
|
|
29
|
+
|
|
30
|
+
## Les résumés IA
|
|
31
|
+
|
|
32
|
+
Au-dessus du code, vous verrez un **résumé en langage clair** du fichier — à quoi il sert, ce qu'il fait — rédigé pour qu'une personne non développeuse puisse suivre. Ces résumés sont générés pour vous et mis en cache, de sorte que rouvrir un fichier déjà consulté est instantané.
|
|
33
|
+
|
|
34
|
+
Les résumés savent rester à jour : ils sont indexés sur le contenu du fichier, donc lorsqu'un fichier change réellement, le résumé est régénéré, mais les fichiers inchangés ne sont pas résumés à nouveau inutilement. Si vous modifiez vous-même un fichier, son résumé est marqué comme obsolète plutôt que silencieusement régénéré — vous gardez la main sur le moment où il est rafraîchi. Une action **régénérer** est disponible quand vous voulez un nouveau résumé à la demande.
|
|
35
|
+
|
|
36
|
+
Quelques garde-fous gardent les coûts raisonnables : la génération des résumés s'inscrit dans un **budget mensuel** (quelques dollars par défaut, configurable dans les Paramètres), et il existe des plafonds sur le nombre de résumés qu'un même job peut déclencher. Si un résumé est ignoré, l'application vous en dit la raison — budget atteint, plafond par job, ou fichier tout simplement introuvable.
|
|
37
|
+
|
|
38
|
+
Vous pouvez aussi choisir la **langue des résumés** (anglais ou espagnol) dans les paramètres globaux, sous la rubrique *Code section*.
|
|
39
|
+
|
|
40
|
+
## Relier le code aux specs
|
|
41
|
+
|
|
42
|
+
Le lien de provenance fonctionne dans les deux sens. Dans le Code explorer, cliquer sur la pastille d'un ticket attachée à un fichier ouvre le détail de ce ticket. Et dans l'autre sens, la vue **détail du ticket** comporte une section *Fichiers touchés par ce ticket* — cliquez-y sur un fichier et vous atterrissez directement dans le Code explorer avec ce fichier ouvert. La boucle est ainsi bouclée entre « voici la spec que nous avons écrite » et « voici le code qui en est sorti ».
|
|
43
|
+
|
|
44
|
+
## Ce qu'il ne fait pas (encore)
|
|
45
|
+
|
|
46
|
+
Pour poser les attentes clairement, cette première version laisse délibérément quelques éléments de côté : l'édition dans l'application, les résumés par symbole ou par répertoire, une vue de diff narrative, et le « pose une question à l'IA sur ce fichier » conversationnel. La provenance attribue un fichier à son ticket principal uniquement. Ce sont là le genre de choses qui pourront se développer au fil du temps.
|
|
47
|
+
|
|
48
|
+
## Le désactiver
|
|
49
|
+
|
|
50
|
+
Le Code explorer est activé par défaut. Il peut être désactivé avec les flags `VITE_FEATURE_CODE_EXPLORER` (client) ou `SPECRAILS_CODE_EXPLORER` (serveur) — mettez l'un ou l'autre à `false`. Le désactiver laisse toutes vos données enregistrées et vos résumés sagement sur le disque, intacts, au cas où vous le réactiveriez.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Fournisseurs d'IA (Claude, Codex, Gemini)
|
|
2
|
+
|
|
3
|
+
Specrails n'est lié à aucune IA en particulier. Chaque endroit de l'app qui dialogue avec une IA — Explore Spec, Quick spec, les rails, le chat, l'AI Edit, le bouton « Open AI CLI » du terminal — peut passer par l'un des trois fournisseurs de premier plan. Vous choisissez ceux qu'un projet utilise, et vous pouvez même changer de fournisseur tâche par tâche.
|
|
4
|
+
|
|
5
|
+
## Les trois fournisseurs
|
|
6
|
+
|
|
7
|
+
| Fournisseur | CLI | Édité par | Notes |
|
|
8
|
+
|---|---|---|---|
|
|
9
|
+
| **Claude** | `claude` | Anthropic | Le plus complet. Seul fournisseur pour les Agents (profils), les rails Ultracode et le Contract Refine. |
|
|
10
|
+
| **Codex** | `codex` | OpenAI | Nécessite codex `0.128.0+`. Lit ses serveurs MCP depuis votre fichier global `~/.codex/config.toml`. |
|
|
11
|
+
| **Gemini** | `gemini` | Google | Nécessite gemini `0.11.0+`. Utilise une télémétrie native et un fichier d'instructions `GEMINI.md`. |
|
|
12
|
+
|
|
13
|
+
Les trois sont **activés par défaut**. Un fournisseur apparaît dans **Ajouter un projet** dès que sa CLI est installée et présente dans votre `PATH`. La première étape est donc toujours la même : installez la CLI souhaitée et connectez-vous avec, exactement comme l'indique sa propre documentation. Dès que `claude --version` (ou `codex`, ou `gemini`) fonctionne dans votre terminal, Specrails peut l'utiliser.
|
|
14
|
+
|
|
15
|
+
## Installer un fournisseur pour un projet
|
|
16
|
+
|
|
17
|
+
Lorsque vous ajoutez un projet, l'assistant de configuration vous demande quel(s) fournisseur(s) installer. Choisissez-en un, déroulez l'étape d'installation, et c'est terminé. À partir de là, le projet *possède* simplement ce fournisseur — vous n'avez plus jamais à y penser. Les specs, les rails, le chat et les analytics fonctionnent de la même façon quel que soit votre choix.
|
|
18
|
+
|
|
19
|
+
Si une CLI que vous voulez n'apparaît pas dans Ajouter un projet, c'est presque toujours parce qu'elle n'est pas installée ou absente de votre `PATH`. Installez-la, puis rouvrez Ajouter un projet.
|
|
20
|
+
|
|
21
|
+
## Installer plusieurs fournisseurs pour un même projet
|
|
22
|
+
|
|
23
|
+
Vous pouvez installer **plus d'un** fournisseur dans le même projet — par exemple Claude *et* Gemini. Dans **Ajouter un projet**, la liste des fournisseurs devient une série de cases à cocher ; cochez tout ce que vous voulez. Le premier que vous sélectionnez devient le fournisseur **principal** (par défaut) du projet ; les autres restent disponibles comme alternatives.
|
|
24
|
+
|
|
25
|
+
Quelques points utiles à connaître sur les projets multi-fournisseurs :
|
|
26
|
+
|
|
27
|
+
- **Avec un seul fournisseur, rien ne change.** Si un projet n'a qu'un seul fournisseur, vous ne verrez jamais de sélecteur de fournisseur où que ce soit — l'app reste épurée et simple.
|
|
28
|
+
- **La barre latérale droite n'affiche que les sections prises en charge par tous les fournisseurs installés.** Comme les Agents (profils) sont un concept propre à Claude, la section **Agents** disparaît dès qu'un projet inclut un fournisseur autre que Claude. Tout le reste (Specs, Code, Analytics, Intégrations, Terminal, Chat) demeure.
|
|
29
|
+
- **Le choix des fournisseurs est verrouillé après la création.** Dans cette version, vous choisissez vos fournisseurs au moment d'ajouter le projet et vous ne pouvez plus les modifier ensuite depuis les Réglages. S'il vous faut une combinaison différente, créez un nouveau projet.
|
|
30
|
+
|
|
31
|
+
## Choisir un fournisseur à chaque invocation
|
|
32
|
+
|
|
33
|
+
Tout l'intérêt d'un projet multi-fournisseurs, c'est de choisir l'IA la plus adaptée à chaque tâche — sans toucher au moindre réglage global. Partout où une IA s'exécute, un petit sélecteur de fournisseur apparaît (uniquement lorsque le projet en compte plusieurs) :
|
|
34
|
+
|
|
35
|
+
- **Ajouter une spec** — un sélecteur de moteur vous permet d'Explorer ou de générer en Quick une spec avec le fournisseur de votre choix.
|
|
36
|
+
- **En-tête de rail** — choisissez le moteur de ce rail précis avant de le lancer.
|
|
37
|
+
- **Terminal** — le bouton « Open AI CLI » (Sparkles) ouvre un menu de fournisseurs pour basculer dans n'importe quelle CLI installée, dans le répertoire de ce projet.
|
|
38
|
+
|
|
39
|
+
Votre choix est mémorisé par projet, avec le fournisseur principal comme valeur par défaut, pour ne pas avoir à le refaire à chaque fois.
|
|
40
|
+
|
|
41
|
+
## Ce que seul Claude peut faire
|
|
42
|
+
|
|
43
|
+
Une poignée de fonctionnalités sont par nature propres à Claude : elles sont donc soit masquées, soit ignorées lorsqu'un autre fournisseur est en jeu :
|
|
44
|
+
|
|
45
|
+
- **Agents (profils)** — le catalogue d'agents par projet et le routage des modèles. Masqué sur tout projet incluant un fournisseur autre que Claude.
|
|
46
|
+
- **Rails Ultracode** — toujours exécutés sur Claude.
|
|
47
|
+
- **Contract Refine** — la passe supplémentaire « Contract Layer » sur une spec validée ne s'exécute que lorsque le fournisseur de la conversation est Claude.
|
|
48
|
+
- **Modes avancés d'Ajouter une spec** (SMASH / Contract Layer) — masqués pour les moteurs autres que Claude.
|
|
49
|
+
|
|
50
|
+
Tout le reste — Explore, Quick spec, le pipeline complet des rails, l'AI Edit, le chat, les analytics de coût — fonctionne avec les trois fournisseurs.
|
|
51
|
+
|
|
52
|
+
## Suivi des coûts entre fournisseurs
|
|
53
|
+
|
|
54
|
+
La page **Analytics** suit chaque invocation facturable, quel que soit le fournisseur. Sur les projets multi-fournisseurs, elle ajoute des puces de filtre par moteur pour comparer les dépenses par fournisseur. Claude rapporte son coût exact ; pour Codex et Gemini, Specrails estime le coût à partir d'une table de tarifs intégrée — ce sont donc des approximations proches plutôt que les montants réellement facturés.
|
|
55
|
+
|
|
56
|
+
## Dépannage
|
|
57
|
+
|
|
58
|
+
- **Un fournisseur que j'ai installé n'est pas proposé.** Vérifiez que la CLI est dans votre `PATH` (essayez `claude --version` / `codex --version` / `gemini --version` dans un terminal neuf). L'app sonde les CLI des fournisseurs via votre `PATH` système.
|
|
59
|
+
- **Les serveurs MCP de Codex ne se chargent pas dans le chat.** Codex lit ses serveurs MCP depuis votre fichier global `~/.codex/config.toml` — enregistrez-les là avec `codex mcp add`.
|
|
60
|
+
- **Désactivation d'urgence.** Un fournisseur peut être coupé à l'échelle de l'app via une variable d'environnement (`SPECRAILS_CODEX_BETA=0` ou `SPECRAILS_GEMINI_BETA=0`). Cela masque uniquement le fournisseur de la *sélection* ; c'est rarement nécessaire.
|
|
61
|
+
|
|
62
|
+
## Voir aussi
|
|
63
|
+
|
|
64
|
+
Les guides dédiés à chaque fournisseur entrent davantage dans le détail de chaque CLI : le guide Codex et le guide Gemini couvrent chacun l'installation, ce qui fonctionne et les particularités propres au fournisseur.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Plugins (Intégrations)
|
|
2
|
+
|
|
3
|
+
La section **Intégrations** est une place de marché par projet de modules optionnels qui étendent les capacités de l'IA. Chaque projet décide indépendamment des plugins qu'il souhaite — installer un plugin dans un projet ne touche jamais à un autre.
|
|
4
|
+
|
|
5
|
+
Les plugins fonctionnent en enregistrant discrètement un **serveur MCP** (Model Context Protocol) dans votre projet, ce qui donne à l'IA de nouveaux outils à appeler pendant les rails et le chat. Pas besoin de comprendre MCP pour vous en servir : installez-le, et il sera disponible au prochain rail.
|
|
6
|
+
|
|
7
|
+
## Ce qui est disponible aujourd'hui
|
|
8
|
+
|
|
9
|
+
Cette version est **fournie en mode intégré uniquement** : les plugins que vous pouvez installer sont ceux qui sont embarqués dans l'app. Il n'y a pas de registre distant, pas de plugin déposé par les utilisateurs, ni de chargement de code tiers — tout ce qui figure dans le catalogue est donc vérifié et livré avec Specrails.
|
|
10
|
+
|
|
11
|
+
Le plugin phare est :
|
|
12
|
+
|
|
13
|
+
- **Serena** — navigation sémantique du code. Il donne à l'IA une compréhension de votre code basée sur un serveur de langage (aller à la définition, trouver les références, recherche tenant compte des symboles) plutôt qu'une simple correspondance de texte. Idéal pour les dépôts volumineux ou inconnus, lorsque vous voulez que l'agent raisonne sur de vrais symboles.
|
|
14
|
+
|
|
15
|
+
Serena requiert l'outil `uv` dans votre `PATH` (il s'exécute via `uvx`). L'app détecte automatiquement la présence de `uv` et vous prévient s'il manque.
|
|
16
|
+
|
|
17
|
+
## Installer un plugin
|
|
18
|
+
|
|
19
|
+
1. Ouvrez **Intégrations** depuis la barre latérale droite.
|
|
20
|
+
2. Repérez le plugin dans le catalogue. Chaque carte affiche un statut : **Non installé**, **Installé**, **Dégradé** ou **Orphelin**.
|
|
21
|
+
3. Cliquez sur le plugin pour **prévisualiser l'installation** — cela vous montre exactement quels fichiers vont changer avant que quoi que ce soit ne se produise.
|
|
22
|
+
4. Cliquez sur **Installer**. Vous suivez la progression en direct pendant la mise en place.
|
|
23
|
+
|
|
24
|
+
En coulisses, l'installation est *chirurgicale et additive* : elle n'ajoute que ses propres entrées au `.mcp.json` de votre projet (et, pour certains plugins, un fichier de fragment dans l'espace de noms protégé `.claude/agents/`). Elle ne réécrit jamais votre configuration dans son ensemble, et l'ajout d'un second plugin ne peut jamais perturber le premier. Si l'installation ne parvient pas à se vérifier comme saine, elle effectue un retour arrière propre.
|
|
25
|
+
|
|
26
|
+
## Gérer les plugins installés
|
|
27
|
+
|
|
28
|
+
- **Santé.** Chaque plugin dispose d'une vérification de santé à la demande. Un plugin qui s'installe correctement mais ne démarre plus ensuite est marqué **Dégradé** — il ne bloquera pas vos rails ; vous verrez simplement le badge et la raison.
|
|
29
|
+
- **Désinstaller.** Retirer un plugin supprime chirurgicalement uniquement les entrées qu'il possède, en laissant le reste de votre configuration intact.
|
|
30
|
+
- **Orphelins.** Si les fichiers d'un plugin subsistent sans état correct (par exemple après une modification interrompue), il apparaît comme **Orphelin** et vous pouvez le nettoyer d'un clic.
|
|
31
|
+
|
|
32
|
+
## Comment les plugins interviennent dans votre travail
|
|
33
|
+
|
|
34
|
+
- **Rails.** Avant qu'un rail ne s'exécute, Specrails vérifie quels plugins sont installés et sains, et rend ces outils disponibles pour l'agent sur ce job. Un plugin dégradé est simplement ignoré pour cette exécution — le rail se lance quand même normalement. Chaque job enregistre un instantané des plugins actifs, visible dans l'export de diagnostic du job.
|
|
35
|
+
- **Chat.** Le chat reprend automatiquement la configuration MCP de votre projet, de sorte que les plugins installés y sont également disponibles.
|
|
36
|
+
- **Configuration.** Les plugins sont ignorés tant qu'un projet est encore en cours de configuration — ils entrent en jeu une fois le projet prêt.
|
|
37
|
+
|
|
38
|
+
## Notes sur les fournisseurs
|
|
39
|
+
|
|
40
|
+
Les plugins tiennent compte du fournisseur. Serena et les plugins MCP similaires s'activent pour les fournisseurs qui enregistrent MCP via le `.mcp.json` du projet (Claude et Gemini). Pour les projets Codex, les serveurs MCP sont gérés via la configuration globale propre à Codex ; les entrées de plugin dans **Intégrations** sont donc filtrées en conséquence. La carte Jira dans Intégrations est indépendante du fournisseur et s'affiche pour tout le monde — voir le guide Jira.
|
|
41
|
+
|
|
42
|
+
## Fichiers réservés
|
|
43
|
+
|
|
44
|
+
Les plugins gèrent un petit ensemble de fichiers bien défini dans votre projet : votre `.mcp.json` (fusionné chirurgicalement), un peu d'état sous `.specrails/plugins/`, et les fragments d'agent par plugin dans `.claude/agents/custom-<plugin>.md`. Ce sont des ressources d'équipe versionnables si vous souhaitez partager une intégration avec vos coéquipiers — l'app ne les écrase jamais aveuglément.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Intégration Jira
|
|
2
|
+
|
|
3
|
+
Vous voulez que vos specs vivent sur un véritable **tableau Jira** plutôt qu'à l'intérieur de Specrails ? L'intégration Jira adosse les specs d'un projet à des tickets Jira, maintient les statuts synchronisés au fil des rails, et reste discrète le reste du temps. Chaque projet se synchronise avec **son propre** tableau Jira.
|
|
4
|
+
|
|
5
|
+
## Comment ça marche (la version courte)
|
|
6
|
+
|
|
7
|
+
Specrails agit comme une **couche de synchronisation** entre Jira et votre projet. L'idée maîtresse : votre magasin de specs local reste la référence que lit le pipeline, et Specrails se charge de le maintenir en accord avec Jira.
|
|
8
|
+
|
|
9
|
+
- Lorsque vous lancez un rail, Specrails fait passer le ticket Jira lié à **En cours**.
|
|
10
|
+
- Lorsqu'un job se termine, Specrails fait transitionner le ticket (vers **Terminé**, ou de nouveau vers **À faire** en cas d'échec) et publie un commentaire de clôture avec l'identifiant du job, le coût et la durée.
|
|
11
|
+
- Périodiquement, Specrails **interroge** Jira pour récupérer les changements effectués par quiconque sur le tableau et les répercute dans vos specs.
|
|
12
|
+
|
|
13
|
+
Toutes les écritures vers Jira passent par une file d'attente durable et résistante aux pannes : un incident Jira passager ne casse donc jamais un job — la mise à jour est simplement retentée.
|
|
14
|
+
|
|
15
|
+
## Connecter un tableau
|
|
16
|
+
|
|
17
|
+
La connexion se fait depuis la page **Réglages** d'un projet (il existe aussi une étape facultative « Configurer Jira » à la fin de l'assistant d'ajout de projet). L'assistant de connexion vous guide :
|
|
18
|
+
|
|
19
|
+
1. **Tester** — saisissez l'URL et les identifiants de votre Jira, et Specrails vérifie la connexion.
|
|
20
|
+
2. **Choisir un projet** — sélectionnez le projet Jira avec lequel synchroniser.
|
|
21
|
+
3. **Association des statuts (facultatif)** — associez les statuts de votre workflow Jira aux états de Specrails si la détection automatique a besoin d'un coup de main (voir plus bas).
|
|
22
|
+
4. **Connecter** — c'est fait. Vos specs reflètent désormais ce tableau.
|
|
23
|
+
|
|
24
|
+
### Authentification
|
|
25
|
+
|
|
26
|
+
Cette version utilise une authentification par **collage de jeton** — rapide, locale, et sans aucun backend impliqué :
|
|
27
|
+
|
|
28
|
+
- **Jira Cloud :** l'e-mail de votre compte plus un jeton API.
|
|
29
|
+
- **Jira Data Center / Server :** un Personal Access Token (PAT).
|
|
30
|
+
|
|
31
|
+
Votre jeton est stocké **chiffré sur votre propre machine** et n'en sort jamais. L'app indique uniquement si un jeton est présent, jamais le jeton lui-même.
|
|
32
|
+
|
|
33
|
+
## Association des statuts
|
|
34
|
+
|
|
35
|
+
La partie la plus délicate de toute synchronisation Jira, c'est de faire correspondre *votre* workflow aux états simples de Specrails (À faire / En cours / Terminé, plus les variantes annulé/livré). Specrails résout cela en deux niveaux :
|
|
36
|
+
|
|
37
|
+
1. **Votre association de statuts explicite**, si vous en définissez une dans l'assistant — toujours prioritaire.
|
|
38
|
+
2. **La détection automatique** à partir de la catégorie de chaque statut (new / in-progress / done) plus une correspondance intelligente pour les statuts de type annulation et livraison.
|
|
39
|
+
|
|
40
|
+
Lorsqu'il doit déplacer un ticket à travers un workflow comportant des transitions conditionnées, il trouve un chemin valide étape par étape et renseigne au passage les champs requis (comme une résolution). Si un statut est réellement inaccessible, l'opération est mise de côté en lettre morte et vous est remontée plutôt que d'échouer en silence — vous verrez un indicateur **dégradé** et pourrez réessayer.
|
|
41
|
+
|
|
42
|
+
## Hot-swap : activez et désactivez en toute sécurité
|
|
43
|
+
|
|
44
|
+
Le lien Jira est **par spec**, capturé au moment où vous lancez un rail — ce n'est pas un interrupteur global et tout-ou-rien sur le tableau. C'est ce qui le rend sûr à basculer :
|
|
45
|
+
|
|
46
|
+
- **Activer ou désactiver** l'intégration ne déplace jamais vos specs existantes.
|
|
47
|
+
- **Se déconnecter** rend à votre projet son comportement normal de specs locales.
|
|
48
|
+
- Les specs déjà dotées d'un lien Jira conservent leur écriture vers Jira ; celles qui n'en ont pas sont laissées tranquilles.
|
|
49
|
+
|
|
50
|
+
Vous pouvez donc expérimenter librement — activez, lancez quelques rails, désactivez — sans chambouler ni votre tableau ni vos specs locales.
|
|
51
|
+
|
|
52
|
+
## Au quotidien
|
|
53
|
+
|
|
54
|
+
Une fois connecté, la page Réglages du projet affiche une **carte de connexion** où vous pouvez :
|
|
55
|
+
|
|
56
|
+
- **Synchroniser maintenant** — forcer une interrogation immédiate au lieu d'attendre le minuteur.
|
|
57
|
+
- **Réessayer les lettres mortes** — relancer les écritures vers Jira restées bloquées.
|
|
58
|
+
- **Interrupteur hot-swap** — mettre temporairement en pause / reprendre l'intégration.
|
|
59
|
+
- **Se déconnecter** — détacher proprement le tableau.
|
|
60
|
+
|
|
61
|
+
Les specs adossées à Jira affichent un **badge de clé Jira** (comme `PROJ-123`) sur leur carte, et un clic renvoie au ticket. Vous recevrez aussi de petites notifications lorsqu'une synchronisation s'achève, lorsqu'un jeton d'authentification expire (pour que vous puissiez le renouveler), ou lorsque l'intégration passe en état dégradé.
|
|
62
|
+
|
|
63
|
+
## Bon à savoir
|
|
64
|
+
|
|
65
|
+
- **Interrogation, pas webhooks.** Comme Specrails s'exécute localement, il interroge Jira pour les changements entrants plutôt que de recevoir des notifications push. Les changements apparaissent dans l'intervalle d'interrogation, pas instantanément.
|
|
66
|
+
- **Un tableau par projet.** Des projets différents peuvent se synchroniser avec des tableaux différents ; un même projet se synchronise avec un seul.
|
|
67
|
+
- **Le dernier qui écrit l'emporte en cas de conflit**, pour le cas rare où deux onglets modifient le même brouillon en même temps.
|
|
68
|
+
|
|
69
|
+
## Désactiver l'intégration
|
|
70
|
+
|
|
71
|
+
Si vous souhaitez tout arrêter, il suffit de cliquer sur **Se déconnecter** depuis les Réglages. Vos specs retrouvent leur comportement purement local, et les métadonnées Jira restent simplement inutilisées — rien n'est détruit.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# L'application compagnon mobile
|
|
2
|
+
|
|
3
|
+
Specrails dispose d'une application compagnon pour téléphone afin de garder un œil sur vos rails quand vous êtes loin de votre bureau — regardez les jobs s'exécuter, voyez-les se terminer et restez dans la boucle sans rester assis devant le tableau de bord.
|
|
4
|
+
|
|
5
|
+
## À quoi elle sert
|
|
6
|
+
|
|
7
|
+
Le compagnon est une surface de **supervision**. Il se connecte à votre app Specrails de bureau en cours d'exécution via votre réseau local et reflète sur votre téléphone l'activité en direct des projets et des jobs. Voyez-le comme une fenêtre d'un coup d'œil sur les mêmes rails que vous suivriez autrement sur le tableau de bord.
|
|
8
|
+
|
|
9
|
+
## Appairer votre téléphone
|
|
10
|
+
|
|
11
|
+
L'appairage repose sur un **QR code** pour ne rien avoir à saisir de fastidieux :
|
|
12
|
+
|
|
13
|
+
1. Assurez-vous que votre app Specrails de bureau est en cours d'exécution et que votre téléphone est sur le **même réseau local** (même Wi-Fi).
|
|
14
|
+
2. Dans l'app de bureau, ouvrez l'écran d'appairage pour afficher un QR code.
|
|
15
|
+
3. Dans l'app compagnon de votre téléphone, scannez ce code.
|
|
16
|
+
4. Le téléphone découvre l'app de bureau sur le réseau et s'y connecte.
|
|
17
|
+
|
|
18
|
+
À partir de là, le compagnon maintient une connexion en direct et diffuse les listes de projets et les mises à jour des jobs au fur et à mesure.
|
|
19
|
+
|
|
20
|
+
## Comment fonctionne la connexion
|
|
21
|
+
|
|
22
|
+
L'app de bureau s'annonce sur votre réseau local pour que le téléphone puisse la trouver, et le QR code transporte les informations dont le téléphone a besoin pour se connecter de façon sécurisée. Tout reste sur votre réseau local — le compagnon dialogue directement avec votre machine, sans passer par un quelconque service cloud.
|
|
23
|
+
|
|
24
|
+
Comme tout repose sur le réseau local, les deux appareils doivent pouvoir se joindre. Si l'appairage ne se fait pas :
|
|
25
|
+
|
|
26
|
+
- Vérifiez que les deux appareils sont sur le **même Wi-Fi** (et que le réseau n'isole pas les clients les uns des autres).
|
|
27
|
+
- Assurez-vous que l'app de bureau est **en cours d'exécution** au moment où vous scannez.
|
|
28
|
+
- Rouvrez l'écran d'appairage pour rafraîchir le QR code et réessayez de le scanner.
|
|
29
|
+
|
|
30
|
+
## Ce que vous verrez
|
|
31
|
+
|
|
32
|
+
Une fois appairé, le compagnon fait remonter vos projets et l'activité en direct de leurs jobs : vous obtenez ainsi les mêmes mises à jour de rails en temps réel que celles qui alimentent le tableau de bord de bureau — poussées vers votre téléphone dès qu'elles surviennent. C'est le moyen le plus simple de savoir au moment précis où un rail de longue durée se termine.
|
|
33
|
+
|
|
34
|
+
## À garder à l'esprit
|
|
35
|
+
|
|
36
|
+
- **La supervision d'abord.** Le compagnon est conçu pour surveiller les rails, pas pour piloter l'intégralité du workflow de bureau depuis votre téléphone.
|
|
37
|
+
- **Local uniquement.** Pas de compte, pas de relais cloud — votre machine et votre téléphone, sur votre réseau.
|
|
38
|
+
- **Gardez le bureau éveillé.** Le compagnon reflète une app de bureau en cours d'exécution ; si votre machine se met en veille ou que l'app se ferme, les mises à jour en direct se mettent en pause jusqu'à son retour.
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Rails et jobs
|
|
2
|
+
|
|
3
|
+
Vos specs sont sur le tableau. C'est ici qu'elles deviennent du code. Un **rail** est la voie qui fait passer une spec à travers tout le pipeline — Architect → Developer → Reviewer → Ship — en exécutant de vrais agents IA directement dans le répertoire de votre projet. Cette page couvre le lancement d'un rail, la file d'attente des jobs, et la possibilité de regarder le travail se dérouler en direct.
|
|
4
|
+
|
|
5
|
+
## Ce qu'est un rail
|
|
6
|
+
|
|
7
|
+
Imaginez votre écran coupé en deux :
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
SpecsBoard (gauche) Rails (droite)
|
|
11
|
+
───────────────── ─────────────────
|
|
12
|
+
#1 Login flow ─┐
|
|
13
|
+
#2 Webhook retry │ glisser sur
|
|
14
|
+
#3 Cost limits │ ────────────► Rail 1 ▶ Play
|
|
15
|
+
#4 Audit log │
|
|
16
|
+
└────────────► Rail 2 ▶ Play
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Un rail est une **voie d'exécution**. Vous glissez une carte de spec depuis le SpecsBoard sur un rail, puis vous appuyez sur **▶ Play**. Le rail lance le pipeline et traite la spec de bout en bout, directement dans le répertoire de travail de votre projet — en modifiant des fichiers, en lançant des tests, et tout le reste.
|
|
20
|
+
|
|
21
|
+
Vous pouvez avoir plusieurs rails pour organiser votre travail en voies nommées (une pour la fonctionnalité sur laquelle vous êtes concentré, une autre en attente derrière). Plus de détails sur le multi-rail et le traitement par lots dans [Batch implement et multi-fonctionnalité](batch-implement-and-multi-feature).
|
|
22
|
+
|
|
23
|
+
## Lancer un rail sur une spec
|
|
24
|
+
|
|
25
|
+
1. **Glissez une carte de spec** depuis le SpecsBoard sur un rail. L'ID de la spec apparaît dans la liste des specs du rail. (Vous préférez ne pas glisser ? Utilisez la fenêtre **Déplacer vers un rail** sur la carte de spec — elle affiche un point de statut par rail pour que vous ne déposiez pas votre travail sur une voie occupée.)
|
|
26
|
+
2. **Choisissez un mode** si vous voulez autre chose que celui par défaut — le sélecteur segmenté dans l'en-tête du rail propose `Implement`, `Batch`, et (rails Claude uniquement) `Ultra`.
|
|
27
|
+
3. **Appuyez sur ▶ Play.**
|
|
28
|
+
|
|
29
|
+
C'est tout. Le rail démarre un processus de CLI IA dans votre projet et lance le pipeline.
|
|
30
|
+
|
|
31
|
+
### Ce que contient un en-tête de rail
|
|
32
|
+
|
|
33
|
+
| Contrôle | Ce qu'il fait |
|
|
34
|
+
|---------|--------------|
|
|
35
|
+
| **Pastille de statut** | `idle`, `running` ou `failed`. Il n'y a pas d'état « completed » distinct — un rail revient à `idle` lorsque son job se termine proprement. |
|
|
36
|
+
| **Liste de specs** | Les ID assignés à ce rail. Glissez-en d'autres dedans, glissez-les dehors pour les détacher. |
|
|
37
|
+
| **Contrôle de mode** | `Implement` / `Batch` / `Ultra` — voir le tableau ci-dessous. Mémorisé par rail. |
|
|
38
|
+
| **Sélecteur de profil** | Quel profil d'agent s'exécute (rails Claude uniquement). N'apparaît qu'une fois que le projet possède au moins un profil. |
|
|
39
|
+
| **Sélecteur de moteur** | Quel fournisseur installé exécute ce rail — Claude, Codex ou Gemini. Ne s'affiche que lorsque le projet possède plus d'un fournisseur. Voir [Choisir un moteur par rail](picking-an-engine-per-rail). |
|
|
40
|
+
| **▶ Play / ■ Stop** | Démarrer ou annuler. |
|
|
41
|
+
|
|
42
|
+
### Les trois modes de rail
|
|
43
|
+
|
|
44
|
+
| Mode | Commande | Ce qu'il fait |
|
|
45
|
+
|------|---------|--------------|
|
|
46
|
+
| **Implement** | `/specrails:implement` | Un seul job couvrant toutes les specs du rail. Exécute le pipeline complet Architect → Developer → Reviewer → Ship. Le choix par défaut au quotidien. |
|
|
47
|
+
| **Batch** | `/specrails:batch-implement` | Un seul job qui traite les specs du rail de manière séquentielle, en vagues tenant compte des dépendances. Idéal pour plusieurs specs liées. |
|
|
48
|
+
| **Ultra** | Ultracode | Claude implémente chaque spec de façon autonome, en **contournant** le pipeline. Un job indépendant par spec. Claude uniquement. |
|
|
49
|
+
|
|
50
|
+
Ultra fait bande à part : il saute la chaîne d'agents et confie à Claude la spec brute pour qu'il la traite avec ses outils natifs. C'est ouvert et sans contraintes, donc appuyer sur Play ouvre d'abord une confirmation, et un sélecteur de modèle par rail vous laisse choisir Haiku / Sonnet / Opus. Il n'apparaît que lorsque le moteur du rail est Claude.
|
|
51
|
+
|
|
52
|
+
## La file d'attente des jobs
|
|
53
|
+
|
|
54
|
+
Chaque fois que vous appuyez sur Play, l'exécution du rail devient un **job**. La règle la plus importante à intégrer :
|
|
55
|
+
|
|
56
|
+
> **Un job à la fois, par projet.** Chaque projet a une seule file d'attente. Au sein d'un même projet, un seul job de rail s'exécute à la fois — les autres attendent derrière et démarrent automatiquement à mesure que des créneaux se libèrent.
|
|
57
|
+
|
|
58
|
+
Cela surprend les gens qui ajoutent trois rails en s'attendant à ce qu'ils s'exécutent en parallèle. Ce ne sera pas le cas — pas au sein du même projet. Ajouter des rails *organise* votre travail en voies ; cela ne rend pas ces voies concurrentes.
|
|
59
|
+
|
|
60
|
+
**Le vrai parallélisme se fait entre projets.** Chaque projet possède sa propre file d'attente indépendante, donc un rail dans le Projet A et un rail dans le Projet B s'exécutent en même temps sans se gêner. Vous voulez plus de débit ? Ouvrez plus de projets.
|
|
61
|
+
|
|
62
|
+
Il n'y a aucun réglage global de concurrence à ajuster. Le seul régulateur automatique est basé sur le budget : si vous avez défini un budget quotidien (par projet ou pour toute l'application), la file se met automatiquement en pause dès que la dépense du jour atteint le plafond.
|
|
63
|
+
|
|
64
|
+
## Regarder l'exécution
|
|
65
|
+
|
|
66
|
+
Retrouvez chaque job sous **Jobs** dans la barre latérale droite du projet — une liste de cartes, les plus récentes en premier. Chaque carte affiche un badge de statut, le badge de profil, un badge de priorité, la durée, le coût et la commande lancée. Au-dessus de la liste :
|
|
67
|
+
|
|
68
|
+
- **Puces de filtre par statut** — n'affichent que les jobs dans un statut donné.
|
|
69
|
+
- **Filtre par plage de dates** — restreint à une fenêtre temporelle.
|
|
70
|
+
- **Comparer** — choisissez deux jobs et affichez-les côte à côte.
|
|
71
|
+
|
|
72
|
+
Cliquez sur n'importe quelle carte pour ouvrir la **vue détaillée du job**, où vivent le log en streaming et les métriques en direct. C'est la page suivante : [La vue détaillée du job](the-job-detail-view).
|
|
73
|
+
|
|
74
|
+
## Annuler un job
|
|
75
|
+
|
|
76
|
+
Cliquez sur **■ Stop** dans l'en-tête du rail. L'application envoie `SIGTERM` au sous-processus, attend **5 secondes** une sortie propre, puis le `SIGKILL`. Rien n'est laissé à moitié démarré.
|
|
77
|
+
|
|
78
|
+
## Si un rail refuse de se lancer
|
|
79
|
+
|
|
80
|
+
Si vous choisissez un moteur dont la CLI n'est pas installée sur votre machine, le lancement **échoue immédiatement** au lieu de démarrer un job cassé — rien ne démarre. Installez la CLI du fournisseur manquant ([Utiliser Codex](../integrations/using-codex), [Utiliser Gemini](../integrations/using-gemini)) et relancez. Une CLI Claude ou Codex manquante donne un message précis « *<provider> CLI not found* » ; une CLI Gemini manquante affiche aujourd'hui une erreur de lancement générique, mais le résultat est le même.
|
|
81
|
+
|
|
82
|
+
## Tout arrêter
|
|
83
|
+
|
|
84
|
+
Si quelque chose semble anormal :
|
|
85
|
+
|
|
86
|
+
- **Un seul rail** — cliquez sur **■ Stop** dans son en-tête.
|
|
87
|
+
- **Pause auto sur budget** — définissez un budget quotidien et la file se met elle-même en pause lorsque la dépense du jour atteint le plafond.
|
|
88
|
+
- **Tout** — quittez l'application desktop, ou exécutez `specrails-desktop stop`.
|
|
89
|
+
|
|
90
|
+
## Où aller ensuite
|
|
91
|
+
|
|
92
|
+
- [La vue détaillée du job](the-job-detail-view) — phases, métriques en direct, cartes de ticket.
|
|
93
|
+
- [Batch implement et multi-fonctionnalité](batch-implement-and-multi-feature) — exécuter plusieurs specs à la fois.
|
|
94
|
+
- [Choisir un moteur par rail](picking-an-engine-per-rail) — Claude vs Codex vs Gemini.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# La vue détaillée du job
|
|
2
|
+
|
|
3
|
+
Cliquez sur n'importe quelle carte de job de la page **Jobs** et vous arrivez ici : le poste de pilotage d'une exécution de rail unique. Tout repose sur une promesse — **les chiffres en direct que vous voyez sont réels, jamais des estimations.** Cette page parcourt les phases, les métriques en direct et les cartes de ticket.
|
|
4
|
+
|
|
5
|
+
## La disposition
|
|
6
|
+
|
|
7
|
+
Deux panneaux se trouvent au-dessus du log en streaming complet :
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
┌─────────────────────────────────────────────┐
|
|
11
|
+
│ En-tête de statut (icône · durée en direct · …) │
|
|
12
|
+
├─────────────────────────────────────────────┤
|
|
13
|
+
│ En-tête de ticket ( #12 #14 #15 ) │
|
|
14
|
+
├─────────────────────────────────────────────┤
|
|
15
|
+
│ │
|
|
16
|
+
│ Log en streaming (auto-défilement · recherche · …) │
|
|
17
|
+
│ │
|
|
18
|
+
└─────────────────────────────────────────────┘
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Les phases du pipeline
|
|
22
|
+
|
|
23
|
+
Pour les jobs `Implement` et `Batch`, l'exécution traverse les phases définies par la slash command — par défaut :
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
Architect ──► Developer ──► Reviewer ──► Ship
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Chaque phase est un agent spécialisé que le moteur du rail invoque dans le répertoire de votre projet :
|
|
30
|
+
|
|
31
|
+
| Phase | Agent | Ce qu'il fait |
|
|
32
|
+
|-------|-------|--------------|
|
|
33
|
+
| **Architect** | `sr-architect` | Planifie l'implémentation. |
|
|
34
|
+
| **Developer** | `sr-developer` | Écrit le code. |
|
|
35
|
+
| **Reviewer** | `sr-reviewer` | Relit le résultat. |
|
|
36
|
+
| **Ship** | (variable) | Finalisation : tests, commit, brouillon de PR. |
|
|
37
|
+
|
|
38
|
+
Quel agent gère chaque phase est décidé par le **profil d'agent** du projet. Le trio de base (`sr-architect`, `sr-developer`, `sr-reviewer`) est toujours présent ; les règles de routage d'un profil peuvent ajouter des agents ou changer celui qui exécute une phase. La barre de progression des phases n'apparaît que lorsque la commande définit réellement des phases — les jobs Ultracode (qui contournent le pipeline) n'en affichent pas.
|
|
39
|
+
|
|
40
|
+
## Métriques en direct — honnêtes par conception
|
|
41
|
+
|
|
42
|
+
L'en-tête de statut est la vedette. Il affiche une icône de statut, une ligne d'activité décrivant ce que le job fait *en ce moment même*, un compteur des étapes effectuées, et une ligne de métriques :
|
|
43
|
+
|
|
44
|
+
| Métrique | Quand vous voyez la vraie valeur |
|
|
45
|
+
|--------|------------------------------|
|
|
46
|
+
| **Durée** | **En direct.** Un compteur d'une seconde s'incrémente pendant l'exécution du job — c'est le seul chiffre véritablement en direct. |
|
|
47
|
+
| **Tours** | Dérivés de façon incrémentale des événements d'assistant streamés à mesure qu'ils arrivent. |
|
|
48
|
+
| **Tokens** | Agrégés de façon incrémentale depuis ce même flux (tolérant aux événements dépourvus de champs d'usage). |
|
|
49
|
+
| **Coût** | Affiché comme `—` jusqu'à la sortie du job, puis révélé comme le `total_cost_usd` faisant autorité. |
|
|
50
|
+
|
|
51
|
+
Le principe de conception : **aucun chiffre approximatif ou estimé en cours d'exécution.** La durée est réelle car ce n'est qu'une horloge. Les tours et les tokens sont accumulés à partir d'une activité réellement streamée. Le coût n'est délibérément *pas* estimé pendant l'exécution — il s'affiche comme en attente et ne se résout en son chiffre final et faisant autorité que lorsque le fournisseur le rapporte à la sortie du job. Si un chiffre semble en attente, c'est intentionnel — on vous montre la vérité, pas une projection.
|
|
52
|
+
|
|
53
|
+
Le libellé et l'icône de l'en-tête correspondent au statut du job, et le panneau s'affiche aussi bien pour les jobs `running`, `completed` que `failed` — ainsi la vue détaillée d'un job terminé montre les mêmes métriques figées sur leurs valeurs finales.
|
|
54
|
+
|
|
55
|
+
## Les cartes de ticket
|
|
56
|
+
|
|
57
|
+
L'**en-tête de ticket** se trouve entre l'en-tête de statut et le log. C'est une carte d'identité premium qui affiche une puce pour chaque spec touchée par le job — issues de la commande lancée, donc elle reflète exactement quels tickets concernait cette exécution.
|
|
58
|
+
|
|
59
|
+
- **2 à 3 tickets** — affichés sous forme de liste de puces.
|
|
60
|
+
- **4 ou plus** — repliés en un mode compact `+ N de plus` avec un chevron de dépliage, pour que l'en-tête reste net.
|
|
61
|
+
|
|
62
|
+
Cliquer sur une puce ouvre le détail de cette spec **par-dessus la page du job** — vous ne perdez pas votre place et ne changez pas de route. C'est un moyen rapide de relire ce qu'un job est censé livrer pendant que vous le regardez travailler. (Sur les écrans de largeur tablette, vous pouvez même glisser une fenêtre de ticket sur le côté pour comparer deux specs côte à côte.)
|
|
63
|
+
|
|
64
|
+
## Le log en streaming
|
|
65
|
+
|
|
66
|
+
Sous les panneaux se trouve le log complet de l'exécution, streamé en temps réel via le WebSocket :
|
|
67
|
+
|
|
68
|
+
- **L'auto-défilement** garde la sortie la plus récente en vue (faites défiler vers le haut et il se met en pause pour vous laisser lire).
|
|
69
|
+
- **Recherche** pour sauter à une expression.
|
|
70
|
+
- **Copier** pour récupérer tout le log.
|
|
71
|
+
|
|
72
|
+
C'est la vérité brute de ce que fait l'IA — chaque appel d'outil, chaque modification de fichier, chaque exécution de test.
|
|
73
|
+
|
|
74
|
+
## Export de diagnostic
|
|
75
|
+
|
|
76
|
+
Si la [télémétrie](../settings/customizing) était activée pour le job, un bouton **Exporter le diagnostic** apparaît dans l'en-tête. Il télécharge un ZIP contenant :
|
|
77
|
+
|
|
78
|
+
- `job-metadata.json` — commande, statut, profil, plugins.
|
|
79
|
+
- `telemetry.ndjson` — signaux OTLP/JSON non compressés.
|
|
80
|
+
- `logs.txt` — le log en streaming complet.
|
|
81
|
+
- `summary.md` — points saillants en clair.
|
|
82
|
+
- `profile.json`, `plugins.json` — instantanés exacts de ce qui s'est exécuté (lorsque présents).
|
|
83
|
+
|
|
84
|
+
Pratique pour partager une exécution avec un coéquipier, ou pour déposer un rapport de bug précis.
|
|
85
|
+
|
|
86
|
+
## Où aller ensuite
|
|
87
|
+
|
|
88
|
+
- [Rails et jobs](rails-and-jobs) — lancement et mise en file.
|
|
89
|
+
- [Batch implement et multi-fonctionnalité](batch-implement-and-multi-feature) — plusieurs specs, vagues de dépendances.
|
|
90
|
+
- [Suivre le coût](../analytics/tracking-cost) — transformer les coûts par job en analytics de projet.
|