specrails-desktop 2.8.0 → 2.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -19
- package/client/dist/assets/{ActivityFeedPage-LKqd18-G.js → ActivityFeedPage-DpQzYMBz.js} +1 -1
- package/client/dist/assets/{AgentsPage-Cb-b-6Ot.js → AgentsPage-29fCY8qV.js} +1 -1
- package/client/dist/assets/{AnalyticsPage-HVxQQ1wy.js → AnalyticsPage-BwGtS6Hf.js} +1 -1
- package/client/dist/assets/{BarChart-BOyHB0dw.js → BarChart-CTR97DVC.js} +1 -1
- package/client/dist/assets/{CodePage-DnOnwKGB.js → CodePage-yAAxKasA.js} +1 -1
- package/client/dist/assets/{DesktopAnalyticsPage-D2auU39x.js → DesktopAnalyticsPage-BdK_XpsD.js} +1 -1
- package/client/dist/assets/{DocsDialog-CTuDX3GK.js → DocsDialog-BaE0cLlL.js} +2 -2
- package/client/dist/assets/{DocsPage-DRyMmu0Z.js → DocsPage-c1FgZX8_.js} +2 -2
- package/client/dist/assets/{ExportDropdown-DO-GGiMh.js → ExportDropdown-lPv_yDen.js} +1 -1
- package/client/dist/assets/{IntegrationsPage-BhbO4jFT.js → IntegrationsPage-DOpxRe7G.js} +1 -1
- package/client/dist/assets/{JobDetailPage-DJooEg1s.js → JobDetailPage-5ExzXY-F.js} +1 -1
- package/client/dist/assets/{JobsPage-BbaC-YOg.js → JobsPage-iW7WuPAc.js} +1 -1
- package/client/dist/assets/{dist-js-Xc2lRKp2.js → dist-js-A8aSaLng.js} +1 -1
- package/client/dist/assets/{dist-js-CiIVMsx3.js → dist-js-CD_m3Xj5.js} +1 -1
- package/client/dist/assets/index-D6BaYRRU.css +2 -0
- package/client/dist/assets/{index-DK214dak.js → index-DRhFPNAv.js} +44 -44
- 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-1vkTuLY7.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/{tickets-9kdPXInd.js → tickets-CG_mo-Bg.js} +1 -1
- package/client/dist/assets/{tickets-n23kDqJT.js → tickets-CVJQ-vRm.js} +1 -1
- package/client/dist/assets/{tickets-tGx5AR5b.js → tickets-D5MSAPe_.js} +1 -1
- package/client/dist/assets/{tickets-1UIGf_oA.js → tickets-DBV3wgQZ.js} +1 -1
- package/client/dist/assets/{tickets-DNmXcAwu.js → tickets-Q0_pONEh.js} +1 -1
- package/client/dist/assets/{tickets-C6pwZwt4.js → tickets-RZ0LyeQe.js} +1 -1
- package/client/dist/assets/{tickets-DAjtxAVb.js → tickets-d1A6EOHa.js} +1 -1
- package/client/dist/assets/{tickets-0rM0lIXd.js → tickets-r4-oNV0R.js} +1 -1
- package/client/dist/assets/{useProjectCache-DVNypkmR.js → useProjectCache-CSi2xHri.js} +1 -1
- package/client/dist/index.html +5 -5
- 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,44 @@
|
|
|
1
|
+
# Plugin (Integrazioni)
|
|
2
|
+
|
|
3
|
+
La sezione **Integrazioni** è un marketplace per progetto di componenti aggiuntivi opzionali che ampliano ciò che l'AI può fare. Ogni progetto decide in autonomia quali plugin vuole — installare un plugin in un progetto non tocca mai gli altri.
|
|
4
|
+
|
|
5
|
+
I plugin funzionano registrando in modo silenzioso un **server MCP** (Model Context Protocol) nel tuo progetto, dando all'AI nuovi strumenti da richiamare durante i rail e la chat. Non serve capire l'MCP per usarli — installa e saranno disponibili alla prossima esecuzione di un rail.
|
|
6
|
+
|
|
7
|
+
## Cosa è disponibile oggi
|
|
8
|
+
|
|
9
|
+
Questa versione è **solo inclusa**: i plugin che puoi installare sono quelli integrati nell'app. Non c'è un registro remoto, non ci sono plugin caricati dagli utenti, né caricamento di codice di terze parti — quindi tutto ciò che trovi nel catalogo è verificato e distribuito con Specrails.
|
|
10
|
+
|
|
11
|
+
Il plugin di punta è:
|
|
12
|
+
|
|
13
|
+
- **Serena** — navigazione semantica del codice. Dà all'AI una comprensione del tuo codebase basata su un language server (vai alla definizione, trova i riferimenti, ricerca consapevole dei simboli) invece di una semplice corrispondenza di testo. Ottimo per repository ampi o poco familiari, dove vuoi che l'agente ragioni su simboli reali.
|
|
14
|
+
|
|
15
|
+
Serena richiede lo strumento `uv` nel tuo `PATH` (viene eseguito tramite `uvx`). L'app rileva automaticamente se `uv` è presente e ti avvisa se manca.
|
|
16
|
+
|
|
17
|
+
## Installare un plugin
|
|
18
|
+
|
|
19
|
+
1. Apri **Integrazioni** dalla barra laterale destra.
|
|
20
|
+
2. Trova il plugin nel catalogo. Ogni scheda mostra uno stato: **Non installato**, **Installato**, **Degradato** o **Orfano**.
|
|
21
|
+
3. Entra nel plugin per **vedere l'anteprima dell'installazione** — ti mostra esattamente quali file cambieranno prima che succeda qualsiasi cosa.
|
|
22
|
+
4. Clicca **Installa**. Vedrai l'avanzamento in tempo reale durante la configurazione.
|
|
23
|
+
|
|
24
|
+
Dietro le quinte l'installazione è *chirurgica e additiva*: aggiunge soltanto le proprie voci al `.mcp.json` del tuo progetto (e, per alcuni plugin, un file frammento nel namespace protetto `.claude/agents/`). Non riscrive mai integralmente la tua configurazione, e l'aggiunta di un secondo plugin non può mai disturbare il primo. Se l'installazione non riesce a verificarsi come integra, viene annullata in modo pulito.
|
|
25
|
+
|
|
26
|
+
## Gestire i plugin installati
|
|
27
|
+
|
|
28
|
+
- **Salute.** Ogni plugin ha un controllo di salute su richiesta. Un plugin che si installa correttamente ma in seguito non riesce ad avviarsi viene contrassegnato come **Degradato** — non blocca i tuoi rail, vedrai solo il badge e un motivo.
|
|
29
|
+
- **Disinstalla.** Rimuovere un plugin elimina in modo chirurgico solo le voci di sua proprietà, lasciando intatto il resto della configurazione.
|
|
30
|
+
- **Orfani.** Se i file di un plugin rimangono indietro senza uno stato corretto (per esempio dopo una modifica interrotta), il plugin appare come **Orfano** e puoi ripulirlo con un clic.
|
|
31
|
+
|
|
32
|
+
## Come i plugin compaiono nel tuo lavoro
|
|
33
|
+
|
|
34
|
+
- **Rail.** Prima che un rail venga eseguito, Specrails controlla quali plugin sono installati e integri e rende quegli strumenti disponibili all'agente per quel job. Un plugin degradato viene semplicemente saltato per quell'esecuzione — il rail si avvia comunque normalmente. Ogni job registra uno snapshot di quali plugin erano attivi, che puoi vedere nell'esportazione diagnostica del job.
|
|
35
|
+
- **Chat.** La chat eredita automaticamente la configurazione MCP del tuo progetto, quindi i plugin installati sono disponibili anche lì.
|
|
36
|
+
- **Setup.** I plugin vengono ignorati mentre un progetto è ancora in fase di configurazione — entrano in gioco una volta che il progetto è pronto.
|
|
37
|
+
|
|
38
|
+
## Note sui provider
|
|
39
|
+
|
|
40
|
+
I plugin sono consapevoli del provider. Serena e i plugin MCP analoghi si risolvono per i provider che registrano l'MCP tramite il `.mcp.json` del progetto (Claude e Gemini). Per i progetti Codex, i server MCP vengono gestiti invece tramite la configurazione globale di Codex, quindi le voci dei plugin in **Integrazioni** vengono filtrate di conseguenza. La scheda Jira nelle Integrazioni è indipendente dal provider e viene mostrata a tutti — consulta la guida di Jira.
|
|
41
|
+
|
|
42
|
+
## File riservati
|
|
43
|
+
|
|
44
|
+
I plugin gestiscono un insieme ristretto e ben definito di file nel tuo progetto: il tuo `.mcp.json` (unito in modo chirurgico), un po' di stato sotto `.specrails/plugins/` e i frammenti agente specifici per plugin in `.claude/agents/custom-<plugin>.md`. Questi sono asset di team committabili, se vuoi condividere un'integrazione con i tuoi colleghi — l'app non li sovrascrive mai ciecamente.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Integrazione Jira
|
|
2
|
+
|
|
3
|
+
Vuoi che le tue spec vivano su una vera **board Jira** invece che dentro Specrails? L'integrazione Jira appoggia le spec di un progetto ai ticket Jira, mantiene gli stati sincronizzati man mano che i rail vengono eseguiti e per il resto resta fuori dai piedi. Ogni progetto si sincronizza con la **propria** board Jira.
|
|
4
|
+
|
|
5
|
+
## Come funziona (in breve)
|
|
6
|
+
|
|
7
|
+
Specrails funge da **livello di sincronizzazione** tra Jira e il tuo progetto. L'idea di fondo: il tuo archivio locale delle spec resta l'elemento canonico che la pipeline legge, e Specrails è responsabile di mantenerlo allineato con Jira.
|
|
8
|
+
|
|
9
|
+
- Quando avvii un rail, Specrails sposta il ticket Jira collegato su **In corso**.
|
|
10
|
+
- Quando un job termina, Specrails fa transitare il ticket (su **Fatto**, o di nuovo su **Da fare** se è fallito) e pubblica un commento di completamento con l'id del job, il costo e la durata.
|
|
11
|
+
- Periodicamente Specrails interroga (**polling**) Jira per le modifiche apportate da chiunque sulla board e le riporta nelle tue spec.
|
|
12
|
+
|
|
13
|
+
Tutti i riscritti verso Jira passano attraverso un outbox durevole e resistente ai crash, così un'interruzione momentanea di Jira non blocca mai un job — l'aggiornamento viene semplicemente ritentato.
|
|
14
|
+
|
|
15
|
+
## Connettere una board
|
|
16
|
+
|
|
17
|
+
Ti connetti dalla pagina **Impostazioni** di un progetto (c'è anche un passo facoltativo "Configura Jira" alla fine della procedura guidata di Add Project). La procedura guidata di connessione ti accompagna passo dopo passo:
|
|
18
|
+
|
|
19
|
+
1. **Prova** — inserisci l'URL e le credenziali di Jira, e Specrails verifica la connessione.
|
|
20
|
+
2. **Scegli un progetto** — scegli con quale progetto Jira sincronizzarti.
|
|
21
|
+
3. **Mappa degli stati (facoltativo)** — associa gli stati del tuo workflow Jira agli stati di Specrails se il rilevamento automatico ha bisogno di un aiuto (più sotto).
|
|
22
|
+
4. **Connetti** — fatto. Le tue spec ora rispecchiano quella board.
|
|
23
|
+
|
|
24
|
+
### Autenticazione
|
|
25
|
+
|
|
26
|
+
Questa versione usa l'autenticazione con **incollatura del token** — veloce, sul dispositivo e senza alcun backend coinvolto:
|
|
27
|
+
|
|
28
|
+
- **Jira Cloud:** l'email del tuo account più un token API.
|
|
29
|
+
- **Jira Data Center / Server:** un Personal Access Token (PAT).
|
|
30
|
+
|
|
31
|
+
Il tuo token viene memorizzato **cifrato sulla tua macchina** e non la lascia mai. L'app mostra soltanto se un token è presente, mai il token stesso.
|
|
32
|
+
|
|
33
|
+
## Mappatura degli stati
|
|
34
|
+
|
|
35
|
+
La parte più delicata di qualsiasi sincronizzazione con Jira è far corrispondere il *tuo* workflow agli stati semplici di Specrails (Da fare / In corso / Fatto, più le varianti di annullamento e di rilascio). Specrails risolve la cosa su due livelli:
|
|
36
|
+
|
|
37
|
+
1. **La tua mappa degli stati esplicita**, se ne hai impostata una nella procedura guidata — vince sempre.
|
|
38
|
+
2. **Il rilevamento automatico** dalla categoria di ciascuno stato (nuovo / in corso / fatto) più un'associazione intelligente per gli stati di tipo annullamento e rilascio.
|
|
39
|
+
|
|
40
|
+
Quando deve spostare un ticket attraverso un workflow con transizioni vincolate, trova un percorso valido passo dopo passo e compila lungo il tragitto eventuali campi obbligatori (come una risoluzione). Se uno stato è davvero irraggiungibile, l'operazione viene parcheggiata come dead-letter e ti viene segnalata invece di fallire silenziosamente — vedrai un indicatore **degradato** e potrai riprovare.
|
|
41
|
+
|
|
42
|
+
## Hot-swap: attivala e disattivala in tutta sicurezza
|
|
43
|
+
|
|
44
|
+
Il collegamento Jira è **per spec**, catturato nel momento in cui avvii un rail — non un interruttore globale, tutto-o-niente, sulla board. Questo lo rende sicuro da attivare e disattivare:
|
|
45
|
+
|
|
46
|
+
- **Abilitare o disabilitare** l'integrazione non riassegna mai le tue spec esistenti.
|
|
47
|
+
- **Disconnettere** riporta il tuo progetto al normale comportamento con spec locali.
|
|
48
|
+
- Le spec che hanno già un collegamento Jira mantengono il loro riscritto; quelle che non lo hanno restano intatte.
|
|
49
|
+
|
|
50
|
+
Così puoi sperimentare liberamente — attivala, esegui qualche rail, disattivala — senza scombussolare la tua board o le tue spec locali.
|
|
51
|
+
|
|
52
|
+
## Il giorno per giorno
|
|
53
|
+
|
|
54
|
+
Una volta connesso, la pagina Impostazioni del progetto mostra una **scheda di connessione** dove puoi:
|
|
55
|
+
|
|
56
|
+
- **Sincronizza ora** — forza un polling immediato invece di aspettare il timer.
|
|
57
|
+
- **Riprova i dead-letter** — riesegui qualsiasi riscritto rimasto bloccato.
|
|
58
|
+
- **Interruttore hot-swap** — metti temporaneamente in pausa/riprendi l'integrazione.
|
|
59
|
+
- **Disconnetti** — stacca la board in modo pulito.
|
|
60
|
+
|
|
61
|
+
Le spec appoggiate a Jira mostrano un **badge con la chiave Jira** (come `PROJ-123`) sulla loro scheda, e cliccandolo si torna al ticket. Riceverai anche piccole notifiche quando una sincronizzazione si completa, quando un token di autenticazione scade (così puoi rinnovarlo) o quando l'integrazione entra in stato degradato.
|
|
62
|
+
|
|
63
|
+
## Cose da tenere a mente
|
|
64
|
+
|
|
65
|
+
- **Polling, non webhook.** Poiché Specrails gira in locale, interroga Jira per le modifiche in arrivo invece di ricevere notifiche push. Le modifiche compaiono entro l'intervallo di polling, non istantaneamente.
|
|
66
|
+
- **Una board per progetto.** Progetti diversi possono sincronizzarsi con board diverse; un singolo progetto si sincronizza con esattamente una board.
|
|
67
|
+
- **L'ultima scrittura vince in caso di conflitti** per il caso raro in cui due schede modificano contemporaneamente la stessa bozza.
|
|
68
|
+
|
|
69
|
+
## Disattivarla
|
|
70
|
+
|
|
71
|
+
Se in qualsiasi momento vuoi tornare completamente indietro, basta **Disconnettere** dalle Impostazioni. Le tue spec tornano al comportamento solo-locale e i metadati Jira semplicemente restano inutilizzati — niente viene distrutto.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# L'app companion per il telefono
|
|
2
|
+
|
|
3
|
+
Specrails ha un'app companion per il telefono così puoi tenere d'occhio i tuoi rail anche quando sei lontano dalla scrivania — guarda i job in esecuzione, vedili terminare e resta aggiornato senza dover stare davanti alla dashboard.
|
|
4
|
+
|
|
5
|
+
## A cosa serve
|
|
6
|
+
|
|
7
|
+
La companion è una superficie di **monitoraggio**. Si connette alla tua app desktop Specrails in esecuzione tramite la rete locale e rispecchia in tempo reale l'attività di progetti e job sul tuo telefono. Pensala come una finestra a colpo d'occhio sugli stessi rail che altrimenti seguiresti dalla dashboard.
|
|
8
|
+
|
|
9
|
+
## Abbinare il telefono
|
|
10
|
+
|
|
11
|
+
L'abbinamento ruota attorno a un **codice QR**, così non devi digitare nulla di scomodo:
|
|
12
|
+
|
|
13
|
+
1. Assicurati che la tua app desktop Specrails sia in esecuzione e che il telefono sia sulla **stessa rete locale** (stessa Wi-Fi).
|
|
14
|
+
2. Nell'app desktop, apri la schermata di abbinamento per mostrare un codice QR.
|
|
15
|
+
3. Nell'app companion sul telefono, scansiona quel codice.
|
|
16
|
+
4. Il telefono individua l'app desktop sulla rete e si connette.
|
|
17
|
+
|
|
18
|
+
Da quel momento in poi la companion mantiene una connessione in tempo reale e trasmette gli elenchi dei progetti e gli aggiornamenti dei job man mano che avvengono.
|
|
19
|
+
|
|
20
|
+
## Come funziona la connessione
|
|
21
|
+
|
|
22
|
+
L'app desktop si annuncia sulla tua rete locale così il telefono può trovarla, e il codice QR contiene i dettagli di cui il telefono ha bisogno per connettersi in modo sicuro. Tutto resta sulla tua rete locale — la companion dialoga direttamente con la tua macchina, non attraverso alcun servizio cloud.
|
|
23
|
+
|
|
24
|
+
Poiché si basa sulla rete locale, i due dispositivi devono potersi raggiungere a vicenda. Se l'abbinamento non riesce:
|
|
25
|
+
|
|
26
|
+
- Verifica che entrambi i dispositivi siano sulla **stessa Wi-Fi** (e che la rete non isoli i client l'uno dall'altro).
|
|
27
|
+
- Assicurati che l'app desktop sia **in esecuzione** quando esegui la scansione.
|
|
28
|
+
- Riapri la schermata di abbinamento per aggiornare il codice QR e prova a scansionare di nuovo.
|
|
29
|
+
|
|
30
|
+
## Cosa vedrai
|
|
31
|
+
|
|
32
|
+
Una volta abbinata, la companion mostra i tuoi progetti e la loro attività di job in tempo reale, così ottieni gli stessi aggiornamenti dei rail in tempo reale che confluiscono nella dashboard desktop — inviati al tuo telefono nel momento in cui avvengono. È il modo più semplice per sapere nell'istante in cui un rail di lunga durata si conclude.
|
|
33
|
+
|
|
34
|
+
## Buono a sapersi
|
|
35
|
+
|
|
36
|
+
- **Prima il monitoraggio.** La companion è pensata per tenere d'occhio i rail, non per gestire l'intero flusso di lavoro desktop dal telefono.
|
|
37
|
+
- **Solo in locale.** Nessun account, nessun relay cloud — la tua macchina e il tuo telefono, sulla tua rete.
|
|
38
|
+
- **Tieni il desktop attivo.** La companion rispecchia un'app desktop in esecuzione; se la tua macchina va in sospensione o l'app si chiude, gli aggiornamenti in tempo reale si fermano finché non torna attiva.
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Rail e job
|
|
2
|
+
|
|
3
|
+
Hai le tue spec sulla board. È qui che si trasformano in codice. Un **rail** è la corsia che porta una spec attraverso l'intera pipeline — Architect → Developer → Reviewer → Ship — eseguendo veri agenti AI dentro la cartella del tuo progetto. Questa pagina spiega come avviare un rail, come funziona la coda dei job e come seguire il lavoro dal vivo mentre accade.
|
|
4
|
+
|
|
5
|
+
## Cos'è un rail
|
|
6
|
+
|
|
7
|
+
Immagina lo schermo diviso in due:
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
SpecsBoard (sinistra) Rail (destra)
|
|
11
|
+
───────────────── ─────────────────
|
|
12
|
+
#1 Login flow ─┐
|
|
13
|
+
#2 Webhook retry │ trascina su
|
|
14
|
+
#3 Cost limits │ ────────────► Rail 1 ▶ Play
|
|
15
|
+
#4 Audit log │
|
|
16
|
+
└────────────► Rail 2 ▶ Play
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Un rail è una **corsia di esecuzione**. Trascini una scheda spec dalla SpecsBoard su un rail e poi premi **▶ Play**. Il rail avvia la pipeline e lavora la spec dall'inizio alla fine, direttamente nella cartella di lavoro del tuo progetto — modificando file, eseguendo test, tutto quanto.
|
|
20
|
+
|
|
21
|
+
Puoi avere diversi rail per organizzare il lavoro in corsie con un nome (una per la feature su cui sei concentrato, un'altra in attesa dietro). Trovi più dettagli su multi-rail e batching in [Batch implement e multi-feature](batch-implement-and-multi-feature).
|
|
22
|
+
|
|
23
|
+
## Avviare un rail su una spec
|
|
24
|
+
|
|
25
|
+
1. **Trascina una scheda spec** dalla SpecsBoard su un rail. L'ID della spec compare nell'elenco di spec del rail. (Preferisci non trascinare? Usa il popover **Sposta su un rail** sulla scheda spec — mostra un pallino di stato per ogni rail, così non scarichi del lavoro su una corsia già occupata.)
|
|
26
|
+
2. **Scegli una modalità** se vuoi qualcosa di diverso da quella predefinita — il controllo segmentato nell'intestazione del rail offre `Implement`, `Batch` e (solo per i rail Claude) `Ultra`.
|
|
27
|
+
3. **Premi ▶ Play.**
|
|
28
|
+
|
|
29
|
+
Tutto qui. Il rail avvia un processo CLI AI nel tuo progetto e dà il via alla pipeline.
|
|
30
|
+
|
|
31
|
+
### Cosa c'è nell'intestazione di un rail
|
|
32
|
+
|
|
33
|
+
| Controllo | Cosa fa |
|
|
34
|
+
|---------|--------------|
|
|
35
|
+
| **Pillola di stato** | `idle`, `running` o `failed`. Non esiste uno stato "completed" separato — un rail torna a `idle` quando il suo job termina senza errori. |
|
|
36
|
+
| **Elenco spec** | Gli ID assegnati a questo rail. Trascinane altri dentro, oppure fuori per staccarli. |
|
|
37
|
+
| **Controllo modalità** | `Implement` / `Batch` / `Ultra` — vedi la tabella più sotto. Viene salvato per ogni rail. |
|
|
38
|
+
| **Selettore profilo** | Quale profilo agente viene eseguito (solo per i rail Claude). Compare solo quando il progetto ha almeno un profilo. |
|
|
39
|
+
| **Selettore engine** | Quale provider installato esegue questo rail — Claude, Codex o Gemini. Viene mostrato solo quando il progetto ha più di un provider. Vedi [Scegliere un engine per ogni rail](picking-an-engine-per-rail). |
|
|
40
|
+
| **▶ Play / ■ Stop** | Avvia o annulla. |
|
|
41
|
+
|
|
42
|
+
### Le tre modalità di un rail
|
|
43
|
+
|
|
44
|
+
| Modalità | Comando | Cosa fa |
|
|
45
|
+
|------|---------|--------------|
|
|
46
|
+
| **Implement** | `/specrails:implement` | Un unico job che copre tutte le spec sul rail. Esegue l'intera pipeline Architect → Developer → Reviewer → Ship. L'impostazione predefinita di tutti i giorni. |
|
|
47
|
+
| **Batch** | `/specrails:batch-implement` | Un unico job che lavora le spec del rail in sequenza, in ondate consapevoli delle dipendenze. Ideale per più spec correlate. |
|
|
48
|
+
| **Ultra** | Ultracode | Claude implementa ogni spec in autonomia, **bypassando** la pipeline. Un job indipendente per ogni spec. Solo Claude. |
|
|
49
|
+
|
|
50
|
+
Ultra è la modalità a sé stante: salta la catena di agenti e affida a Claude la spec grezza, lasciandolo lavorare con i suoi strumenti nativi. È a finalità aperta, quindi premendo Play si apre prima una conferma, e un selettore di modello per rail ti permette di scegliere tra Haiku / Sonnet / Opus. Compare solo quando l'engine del rail è Claude.
|
|
51
|
+
|
|
52
|
+
## La coda dei job
|
|
53
|
+
|
|
54
|
+
Ogni volta che premi Play, l'esecuzione del rail diventa un **job**. La regola più importante da fare propria:
|
|
55
|
+
|
|
56
|
+
> **Un job alla volta, per progetto.** Ogni progetto ha un'unica coda. All'interno di un progetto viene eseguito un solo job di rail alla volta — gli altri si mettono in coda dietro e partono automaticamente man mano che si liberano gli slot.
|
|
57
|
+
|
|
58
|
+
Questo sorprende chi aggiunge tre rail aspettandosi che vadano in parallelo. Non succede — non all'interno dello stesso progetto. Aggiungere rail *organizza* il tuo lavoro in corsie; non fa sì che quelle corsie vadano in contemporanea.
|
|
59
|
+
|
|
60
|
+
**Il vero parallelismo è tra progetti diversi.** Ogni progetto ha la sua coda indipendente, quindi un rail nel Progetto A e un rail nel Progetto B vengono eseguiti nello stesso momento senza contendersi le risorse. Vuoi più throughput? Apri più progetti.
|
|
61
|
+
|
|
62
|
+
Non c'è una manopola globale di concorrenza da regolare. L'unico freno automatico è basato sul budget: se hai impostato un budget giornaliero (di progetto o per tutta l'app), la coda si mette automaticamente in pausa quando la spesa della giornata raggiunge il limite.
|
|
63
|
+
|
|
64
|
+
## Seguire l'esecuzione
|
|
65
|
+
|
|
66
|
+
Trovi ogni job in **Job**, nella barra laterale destra del progetto — un elenco di schede, dalla più recente. Ogni scheda mostra un badge di stato, il badge del profilo, un badge di priorità, la durata, il costo e il comando avviato. Sopra l'elenco:
|
|
67
|
+
|
|
68
|
+
- **Chip di filtro per stato** — mostra solo i job in un determinato stato.
|
|
69
|
+
- **Filtro per intervallo di date** — restringi a una finestra temporale.
|
|
70
|
+
- **Confronta** — scegli due job e visualizzali fianco a fianco.
|
|
71
|
+
|
|
72
|
+
Clicca su una scheda qualsiasi per aprire la **vista Dettaglio job**, dove vivono il log in streaming in tempo reale e le metriche live. È la pagina successiva: [La vista Dettaglio job](the-job-detail-view).
|
|
73
|
+
|
|
74
|
+
## Annullare un job
|
|
75
|
+
|
|
76
|
+
Clicca su **■ Stop** nell'intestazione del rail. L'app invia `SIGTERM` al sottoprocesso, attende **5 secondi** un'uscita pulita e poi gli invia `SIGKILL`. Niente resta avviato a metà.
|
|
77
|
+
|
|
78
|
+
## Se un rail non parte
|
|
79
|
+
|
|
80
|
+
Se scegli un engine la cui CLI non è installata sulla tua macchina, l'avvio **fallisce subito** invece di avviare un job difettoso — non viene avviato nulla. Installa la CLI del provider mancante ([Usare Codex](../integrations/using-codex), [Usare Gemini](../integrations/using-gemini)) e riprova ad avviare. Se mancano Claude o Codex compare un messaggio preciso "*<provider> CLI not found*"; se manca Gemini oggi viene mostrato un errore di avvio generico, ma il risultato è lo stesso.
|
|
81
|
+
|
|
82
|
+
## Fermare tutto
|
|
83
|
+
|
|
84
|
+
Se qualcosa sembra non andare:
|
|
85
|
+
|
|
86
|
+
- **Un solo rail** — clicca su **■ Stop** nella sua intestazione.
|
|
87
|
+
- **Pausa automatica sul budget** — imposta un budget giornaliero e la coda si mette in pausa da sola quando la spesa della giornata raggiunge il limite.
|
|
88
|
+
- **Tutto** — chiudi l'app desktop, oppure esegui `specrails-desktop stop`.
|
|
89
|
+
|
|
90
|
+
## Dove andare ora
|
|
91
|
+
|
|
92
|
+
- [La vista Dettaglio job](the-job-detail-view) — fasi, metriche live, schede ticket.
|
|
93
|
+
- [Batch implement e multi-feature](batch-implement-and-multi-feature) — esegui più spec insieme.
|
|
94
|
+
- [Scegliere un engine per ogni rail](picking-an-engine-per-rail) — Claude vs Codex vs Gemini.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# La vista Dettaglio job
|
|
2
|
+
|
|
3
|
+
Clicca su una qualsiasi scheda job nella pagina **Job** e arrivi qui: la cabina di pilotaggio di una singola esecuzione di rail. È costruita attorno a una promessa — **i numeri live che vedi sono reali, mai ipotesi.** Questa pagina ti accompagna tra le fasi, le metriche live e le schede ticket.
|
|
4
|
+
|
|
5
|
+
## Il layout
|
|
6
|
+
|
|
7
|
+
Due pannelli stanno sopra il log completo in streaming:
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
┌─────────────────────────────────────────────┐
|
|
11
|
+
│ Intestazione di stato (icona · durata live · …) │
|
|
12
|
+
├─────────────────────────────────────────────┤
|
|
13
|
+
│ Intestazione ticket ( #12 #14 #15 ) │
|
|
14
|
+
├─────────────────────────────────────────────┤
|
|
15
|
+
│ │
|
|
16
|
+
│ Log in streaming (auto-scroll · ricerca · …) │
|
|
17
|
+
│ │
|
|
18
|
+
└─────────────────────────────────────────────┘
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Fasi della pipeline
|
|
22
|
+
|
|
23
|
+
Per i job `Implement` e `Batch`, l'esecuzione attraversa le fasi definite dallo slash command — per impostazione predefinita:
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
Architect ──► Developer ──► Reviewer ──► Ship
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Ogni fase è un agente specializzato che l'engine del rail invoca nella cartella del tuo progetto:
|
|
30
|
+
|
|
31
|
+
| Fase | Agente | Cosa fa |
|
|
32
|
+
|-------|-------|--------------|
|
|
33
|
+
| **Architect** | `sr-architect` | Pianifica l'implementazione. |
|
|
34
|
+
| **Developer** | `sr-developer` | Scrive il codice. |
|
|
35
|
+
| **Reviewer** | `sr-reviewer` | Revisiona il risultato. |
|
|
36
|
+
| **Ship** | (variabile) | Conclusione finale: test, commit, bozza di PR. |
|
|
37
|
+
|
|
38
|
+
Quale agente gestisce ogni fase lo decide il **profilo agente** del progetto. Il trio di base (`sr-architect`, `sr-developer`, `sr-reviewer`) è sempre presente; le regole di routing in un profilo possono aggiungere agenti o cambiare quale di essi esegue una fase. La barra di avanzamento delle fasi compare solo quando il comando definisce effettivamente delle fasi — i job Ultracode (che bypassano la pipeline) non ne mostrano alcuna.
|
|
39
|
+
|
|
40
|
+
## Metriche live — oneste per scelta
|
|
41
|
+
|
|
42
|
+
L'intestazione di stato è il titolo principale. Mostra un'icona di stato, una riga di attività che descrive cosa sta facendo il job *in questo momento*, un conteggio dei passi compiuti e una riga di metriche:
|
|
43
|
+
|
|
44
|
+
| Metrica | Quando vedi il valore reale |
|
|
45
|
+
|--------|------------------------------|
|
|
46
|
+
| **Durata** | **Live.** Un ticker da 1 secondo conta in avanti mentre il job è in esecuzione — è l'unico numero davvero live. |
|
|
47
|
+
| **Turni** | Derivati in modo incrementale dagli eventi assistant in streaming man mano che arrivano. |
|
|
48
|
+
| **Token** | Aggregati in modo incrementale dallo stesso stream (tollera gli eventi privi dei campi di utilizzo). |
|
|
49
|
+
| **Costo** | Mostrato come `—` finché il job non termina, poi rivelato come l'autorevole `total_cost_usd`. |
|
|
50
|
+
|
|
51
|
+
Il principio di progettazione: **nessun numero approssimato o stimato durante l'esecuzione.** La durata è reale perché è semplicemente un orologio. Turni e token vengono accumulati dall'attività realmente trasmessa in streaming. Il costo deliberatamente *non* viene stimato durante l'esecuzione — appare come in attesa e si risolve solo nel suo valore finale e autorevole quando il provider lo riporta all'uscita del job. Se un numero sembra in attesa, è intenzionale — ti viene mostrata la verità, non una proiezione.
|
|
52
|
+
|
|
53
|
+
L'etichetta e l'icona dell'intestazione corrispondono allo stato del job, e il pannello viene mostrato per i job `running`, `completed` e `failed` allo stesso modo — così la vista di dettaglio di un job concluso mostra le stesse metriche congelate ai loro valori finali.
|
|
54
|
+
|
|
55
|
+
## Le schede ticket
|
|
56
|
+
|
|
57
|
+
L'**intestazione ticket** sta tra l'intestazione di stato e il log. È una scheda d'identità premium che mostra un chip per ogni spec toccata dal job — ricavati dal comando avviato, così riflette esattamente quali ticket riguardava questa esecuzione.
|
|
58
|
+
|
|
59
|
+
- **2–3 ticket** — mostrati come elenco di chip.
|
|
60
|
+
- **4 o più** — si comprimono in una modalità compatta `+ N more` con un chevron per espandere, così l'intestazione resta ordinata.
|
|
61
|
+
|
|
62
|
+
Cliccando su un chip si apre il dettaglio di quella spec **sopra la pagina del job** — non perdi il segno né cambi pagina. È un modo rapido per rileggere cosa un job dovrebbe consegnare mentre lo guardi lavorare. (Sugli schermi in formato tablet puoi persino trascinare di lato una modale ticket per confrontare due spec fianco a fianco.)
|
|
63
|
+
|
|
64
|
+
## Il log in streaming
|
|
65
|
+
|
|
66
|
+
Sotto i pannelli c'è il log completo dell'esecuzione, trasmesso in tempo reale tramite WebSocket:
|
|
67
|
+
|
|
68
|
+
- L'**auto-scroll** mantiene in vista l'output più recente (scorri verso l'alto e si mette in pausa così puoi leggere).
|
|
69
|
+
- La **ricerca** per saltare a una frase.
|
|
70
|
+
- **Copia** per prendere l'intero log.
|
|
71
|
+
|
|
72
|
+
Questa è la verità grezza di ciò che l'AI sta facendo — ogni chiamata a uno strumento, ogni modifica a un file, ogni test eseguito.
|
|
73
|
+
|
|
74
|
+
## Esportazione diagnostica
|
|
75
|
+
|
|
76
|
+
Se la [telemetria](../settings/customizing) era abilitata per il job, nell'intestazione compare un pulsante **Esporta diagnostica**. Scarica uno ZIP che contiene:
|
|
77
|
+
|
|
78
|
+
- `job-metadata.json` — comando, stato, profilo, plugin.
|
|
79
|
+
- `telemetry.ndjson` — segnali OTLP/JSON non compressi.
|
|
80
|
+
- `logs.txt` — il log completo in streaming.
|
|
81
|
+
- `summary.md` — i punti salienti in formato leggibile.
|
|
82
|
+
- `profile.json`, `plugins.json` — snapshot esatti di ciò che è stato eseguito (quando presenti).
|
|
83
|
+
|
|
84
|
+
Comodo per condividere un'esecuzione con un collega, o per inviare una segnalazione di bug precisa.
|
|
85
|
+
|
|
86
|
+
## Dove andare ora
|
|
87
|
+
|
|
88
|
+
- [Rail e job](rails-and-jobs) — avvio e accodamento.
|
|
89
|
+
- [Batch implement e multi-feature](batch-implement-and-multi-feature) — molte spec, ondate di dipendenze.
|
|
90
|
+
- [Tracciare i costi](../analytics/tracking-cost) — trasforma i costi per job in analytics di progetto.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Batch implement e multi-feature
|
|
2
|
+
|
|
3
|
+
Una spec alla volta va benissimo, ma molto del lavoro reale arriva a grappoli — una feature più i suoi test più la sua migrazione, oppure un backlog che vuoi smaltire in un'unica sessione. Questa pagina spiega come eseguire più spec insieme: la modalità Batch, le ondate di dipendenze e come la pipeline evita che il lavoro concorrente entri in collisione.
|
|
4
|
+
|
|
5
|
+
## Eseguire più spec in una volta sola
|
|
6
|
+
|
|
7
|
+
Il modo più semplice per eseguire un mucchio di spec da un unico rail è la modalità **Batch**:
|
|
8
|
+
|
|
9
|
+
1. **Trascina tutte le spec** che vuoi su un singolo rail. Si accumulano nell'elenco di spec di quel rail.
|
|
10
|
+
2. **Imposta la modalità del rail su Batch** (il controllo segmentato nell'intestazione del rail).
|
|
11
|
+
3. **Premi ▶ Play.**
|
|
12
|
+
|
|
13
|
+
Il rail avvia **un solo** job `/specrails:batch-implement` che lavora ogni spec assegnata. Monitoralo come qualsiasi altro job nella pagina Job — è un unico job che copre l'intero gruppo, non un job per ogni spec.
|
|
14
|
+
|
|
15
|
+
Questo è importante per via della **coda a un job per progetto**. Dato che un progetto esegue un solo job di rail alla volta, la modalità Batch è anche il modo più pulito per *concatenare* un elenco di spec senza dover gestire più rail e aspettare che ciascuno si svuoti.
|
|
16
|
+
|
|
17
|
+
### Implement vs Batch — quale modalità?
|
|
18
|
+
|
|
19
|
+
| | **Implement** | **Batch** |
|
|
20
|
+
|---|---|---|
|
|
21
|
+
| Comando | `/specrails:implement` | `/specrails:batch-implement` |
|
|
22
|
+
| Spec per job | Tutte sul rail, trattate come un'unica unità di lavoro | Tutte sul rail, lavorate **in sequenza** |
|
|
23
|
+
| Ideale per | Una modifica strettamente accoppiata | Più feature distinte che vuoi smaltire in ordine |
|
|
24
|
+
| Ordinamento | n/d | Ondate consapevoli delle dipendenze (vedi sotto) |
|
|
25
|
+
|
|
26
|
+
Se le spec sono davvero un'unica modifica, usa **Implement**. Se sono un elenco di feature separate, usa **Batch** e lascia che le metta in sequenza.
|
|
27
|
+
|
|
28
|
+
## Ondate di dipendenze
|
|
29
|
+
|
|
30
|
+
La modalità Batch non si limita a eseguire le spec dall'alto verso il basso — calcola un **ordine di esecuzione consapevole delle dipendenze** e raggruppa le spec in *ondate*. L'orchestratore (`/specrails:batch-implement`) capisce quali spec dipendono da quali altre, poi le pianifica in modo che nulla parta prima del lavoro su cui si appoggia.
|
|
31
|
+
|
|
32
|
+
Concettualmente:
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
Ondata 1: #2 (modello dati) ← nessuna dipendenza, parte per prima
|
|
36
|
+
Ondata 2: #4 (API sul modello) ← attende #2
|
|
37
|
+
#5 (CLI sul modello) ← attende #2
|
|
38
|
+
Ondata 3: #7 (docs su tutto) ← attende #4 e #5
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
All'interno del job, le spec di ogni ondata vengono implementate prima che inizi l'ondata successiva. Non lo configuri a mano — l'orchestratore ricava le ondate dalle spec stesse. Guarda tutto svolgersi nella [vista Dettaglio job](the-job-detail-view): il log in streaming racconta su quale spec sta lavorando il batch, e l'intestazione ticket mostra ogni spec toccata dal job.
|
|
42
|
+
|
|
43
|
+
## Isolamento worktree
|
|
44
|
+
|
|
45
|
+
Quando più spec vengono implementate in un'unica esecuzione, la pipeline mantiene isolata ogni unità di lavoro, così che le modifiche concorrenti o sequenziali non si calpestino i file a vicenda. L'orchestratore del batch esegue l'implementazione di ogni spec nel suo contesto di lavoro pulito, poi integra i risultati — così una spec lasciata a metà non lascia mai il tuo tree in uno stato intermedio rotto visibile alla successiva.
|
|
46
|
+
|
|
47
|
+
In pratica questo significa:
|
|
48
|
+
|
|
49
|
+
- Ogni spec parte da una tabula rasa su cui implementare, invece di ereditare le modifiche ancora in corso della spec precedente.
|
|
50
|
+
- Le revisioni e i passi di ship operano su uno snapshot coerente, non su un bersaglio in movimento.
|
|
51
|
+
- Un fallimento in un'ondata viene contenuto — non corrompe in silenzio le spec già consegnate.
|
|
52
|
+
|
|
53
|
+
L'app registra, per ogni job, esattamente quali file sono stati toccati e quale ticket li ha toccati (lo vedrai comparire come chip di provenance nella sezione **Code** e come elenco "File toccati da questo ticket" nella modale di dettaglio di ogni spec). È proprio questa attribuzione a renderti possibile fidarti di un'esecuzione multi-spec: puoi sempre risalire da una modifica a un file alla spec che l'ha causata.
|
|
54
|
+
|
|
55
|
+
## Multi-feature tra progetti
|
|
56
|
+
|
|
57
|
+
Se vuoi un vero parallelismo — due grandi feature che vengono costruite nello stesso momento — dividile **tra progetti diversi**, non tra rail nello stesso progetto. Ogni progetto ha la sua coda indipendente, quindi:
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
Progetto A ▶ Rail che esegue la feature X ┐
|
|
61
|
+
├─ vengono eseguiti in contemporanea
|
|
62
|
+
Progetto B ▶ Rail che esegue la feature Y ┘
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Non c'è alcun limite globale di concorrenza né contesa tra progetti. Apri entrambi, avvia un rail in ciascuno e procedono insieme. L'unico freno condiviso è il tuo limite di budget, che mette in pausa le code per progetto o per tutta l'app quando la spesa della giornata raggiunge il limite.
|
|
66
|
+
|
|
67
|
+
## Consigli per i batch grandi
|
|
68
|
+
|
|
69
|
+
- **Raggruppa le spec correlate su un unico rail** prima di passare a Batch — le ondate di dipendenze vedono solo ciò che si trova su quel rail.
|
|
70
|
+
- **Imposta un budget giornaliero** prima di un batch grande, così un'esecuzione inaspettatamente costosa va in pausa automatica invece di andare fuori controllo. Configuralo in [Budget](../settings/customizing).
|
|
71
|
+
- **Usa il pulsante Confronta** nella pagina Job dopo l'esecuzione per mettere a confronto due batch fianco a fianco.
|
|
72
|
+
- **Esporta una diagnostica** (se la telemetria era attiva) per ottenere lo snapshot esatto di profilo + plugin dell'intero batch.
|
|
73
|
+
|
|
74
|
+
## Dove andare ora
|
|
75
|
+
|
|
76
|
+
- [Rail e job](rails-and-jobs) — il modello della coda in dettaglio.
|
|
77
|
+
- [La vista Dettaglio job](the-job-detail-view) — guarda un batch in esecuzione dal vivo.
|
|
78
|
+
- [Scegliere un engine per ogni rail](picking-an-engine-per-rail) — nota che il Batch gira su qualsiasi provider; Ultra è solo Claude.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Scegliere un engine per ogni rail
|
|
2
|
+
|
|
3
|
+
Specrails desktop tratta **Claude Code**, **Codex CLI** e **Gemini CLI** come engine di prima classe. Un progetto può averne installato uno, due o tutti e tre — e quando ne è presente più di uno, scegli quale engine esegue ogni rail. Questa pagina spiega il selettore di engine per rail e quando ricorrere a ciascuno.
|
|
4
|
+
|
|
5
|
+
## Quando compare il selettore
|
|
6
|
+
|
|
7
|
+
Il **selettore di engine** vive nell'intestazione del rail, proprio accanto al controllo della modalità. Viene mostrato solo quando il progetto ha installato **più di un** provider.
|
|
8
|
+
|
|
9
|
+
> **I progetti con un solo provider si comportano in modo byte-identico.** Se un progetto ha un solo engine, non compare alcun selettore e nulla cambia nella selezione del provider — gira semplicemente su quell'engine. Il selettore è pensato esclusivamente per i progetti multi-provider.
|
|
10
|
+
|
|
11
|
+
Quando compare, la tua scelta è **per rail e per avvio** — rail diversi possono usare engine diversi, e la tua scelta viene ricordata per ogni progetto (con default sull'engine primario del progetto).
|
|
12
|
+
|
|
13
|
+
## Come scegliere un engine
|
|
14
|
+
|
|
15
|
+
1. Assicurati che il selettore di engine del rail sia visibile (il progetto ha 2+ provider).
|
|
16
|
+
2. Cliccaci sopra e scegli **Claude**, **Codex** o **Gemini**.
|
|
17
|
+
3. Avvia il rail con **▶ Play**.
|
|
18
|
+
|
|
19
|
+
L'engine selezionato esegue ogni fase della pipeline di quel rail. Se la CLI dell'engine scelto non è installata, l'avvio fallisce subito — non viene avviato nulla. Installa la CLI mancante e riprova.
|
|
20
|
+
|
|
21
|
+
## In cosa è bravo ciascun engine
|
|
22
|
+
|
|
23
|
+
Tutti e tre eseguono le pipeline standard **Implement** e **Batch**. Ecco una guida pratica alla scelta:
|
|
24
|
+
|
|
25
|
+
| Engine | Scegli questo quando… | Note |
|
|
26
|
+
|--------|--------------------|-------|
|
|
27
|
+
| **Claude** | Vuoi l'intero set di funzionalità: profili agente, Ultracode, reportistica nativa dei costi, il supporto agli strumenti più ricco. L'impostazione predefinita per la maggior parte del lavoro. | L'unico engine che supporta i **profili agente**, **Ultracode** e alcune funzionalità delle spec esclusive di Claude (Contract Layer, SMASH). |
|
|
28
|
+
| **Codex** | Preferisci la CLI Codex di OpenAI o vuoi confrontare le implementazioni tra provider diversi. | `codex` ≥ 0.128.0. Nessuna reportistica nativa dei costi — l'app ricava il costo dalla sua tabella prezzi. I profili non si applicano. |
|
|
29
|
+
| **Gemini** | Vuoi la CLI Gemini di Google, telemetria nativa o un'esecuzione più economica per le spec di routine. | `gemini` ≥ 0.11.0 (imposta `GEMINI_API_KEY`). Telemetria OTLP nativa. I profili non si applicano. |
|
|
30
|
+
|
|
31
|
+
### Le funzionalità esclusive di Claude
|
|
32
|
+
|
|
33
|
+
Alcune cose funzionano solo sui rail Claude — scegli Claude se ne hai bisogno:
|
|
34
|
+
|
|
35
|
+
- **Profili agente** — routing del modello per ogni agente. Sui rail Codex o Gemini l'esecuzione usa sempre la modalità legacy e qualsiasi profilo selezionato viene **ignorato**. Il selettore di profilo è nascosto per gli engine diversi da Claude.
|
|
36
|
+
- **Ultracode (modalità `Ultra`)** — la modalità autonoma che bypassa la pipeline. Il segmento `Ultra` e il suo selettore di modello Haiku/Sonnet/Opus compaiono solo quando l'engine del rail è Claude.
|
|
37
|
+
- **Contract Layer e SMASH** — funzionalità di affinamento delle spec esclusive di Claude (sono opzioni di Add Spec, non opzioni del rail, ma vale lo stesso vincolo).
|
|
38
|
+
|
|
39
|
+
Se un progetto mescola engine, la barra laterale destra mostra solo le sezioni supportate da **ogni** provider installato — quindi la sezione **Agenti** sparisce del tutto su un progetto che include un provider diverso da Claude, perché i profili sono specifici di Claude.
|
|
40
|
+
|
|
41
|
+
## Un flusso di lavoro pratico
|
|
42
|
+
|
|
43
|
+
I progetti multi-provider danno il meglio quando vuoi **confrontare** o **ottimizzare i costi**:
|
|
44
|
+
|
|
45
|
+
- **Confronta le implementazioni.** Metti la stessa spec su due rail, imposta uno su Claude e uno su Codex, avviali entrambi (su progetti diversi, oppure uno dopo l'altro nella coda dello stesso progetto), poi usa il pulsante **Confronta** nella pagina Job per mettere a confronto i risultati.
|
|
46
|
+
- **Ottimizza i costi per spec.** Esegui le spec ad alto rischio su Claude con un profilo `max`; esegui le spec di pulizia di routine su Gemini per risparmiare. Filtra `/analytics` per engine per vedere la ripartizione.
|
|
47
|
+
- **Imposta un default sensato.** Imposta l'engine che usi più spesso come primario del progetto, così i rail partono da quello, e cambia per ogni rail solo quando una spec specifica vuole un engine diverso.
|
|
48
|
+
|
|
49
|
+
## Cose da tenere a mente
|
|
50
|
+
|
|
51
|
+
- **La selezione del provider è immutabile dopo la creazione del progetto** (v1). Scegli i provider installati quando aggiungi il progetto; non c'è alcun interruttore nelle Impostazioni per aggiungerne o rimuoverne uno in seguito.
|
|
52
|
+
- **Il costo viene sempre tracciato**, anche per gli engine privi di reportistica nativa dei costi — l'app ripiega su una tabella prezzi, così anche le esecuzioni Codex e Gemini compaiono in [analytics](../analytics/tracking-cost).
|
|
53
|
+
- **Il pulsante "Open AI CLI" del terminale** offre anch'esso un selettore di provider sui progetti multi-provider, se preferisci pilotare una CLI a mano.
|
|
54
|
+
|
|
55
|
+
## Dove andare ora
|
|
56
|
+
|
|
57
|
+
- [Usare Codex](../integrations/using-codex) — installazione e accesso.
|
|
58
|
+
- [Usare Gemini](../integrations/using-gemini) — installazione, `GEMINI_API_KEY`, telemetria.
|
|
59
|
+
- [Rail e job](rails-and-jobs) — la coda e il flusso di avvio.
|
|
60
|
+
- [Tracciare i costi](../analytics/tracking-cost) — ripartizione dei costi per engine.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Temi
|
|
2
|
+
|
|
3
|
+
Dai a Specrails l'aspetto che preferisci. L'app include cinque temi rifiniti a mano tra cui passare all'istante — senza riavvii, senza ricompilazioni, senza niente da configurare.
|
|
4
|
+
|
|
5
|
+
## I cinque temi integrati
|
|
6
|
+
|
|
7
|
+
| Tema | Atmosfera |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| **Specrails** | Quello predefinito. Equilibrato, sobrio, in linea con il brand. |
|
|
10
|
+
| **Dracula** | Il classico viola scuro. Riposante per gli occhi di notte. |
|
|
11
|
+
| **Aurora Light** | Un tema chiaro luminoso e arioso per lavorare di giorno. |
|
|
12
|
+
| **Obsidian Dark** | Modalità scura profonda e ad alto contrasto. |
|
|
13
|
+
| **Matrix** | Verde su nero, per quando vuoi sentirti dentro il mainframe. |
|
|
14
|
+
|
|
15
|
+
## Come cambiarlo
|
|
16
|
+
|
|
17
|
+
1. Apri le **Impostazioni** (la finestra delle impostazioni globali dell'app).
|
|
18
|
+
2. Vai alla sezione **Aspetto**.
|
|
19
|
+
3. Scegli un tema. Si applica subito a tutta l'app.
|
|
20
|
+
|
|
21
|
+
Tutto qui. La modifica ha effetto nell'istante in cui clicchi — l'interfaccia si riveste dal vivo.
|
|
22
|
+
|
|
23
|
+
## Dove si applica
|
|
24
|
+
|
|
25
|
+
La scelta del tema è **valida per tutta l'app**, non per singolo progetto. Ogni progetto, ogni pagina, ogni pannello segue lo stesso tema. E raggiunge anche posti che forse non ti aspetti:
|
|
26
|
+
|
|
27
|
+
- **Il pannello terminale** si ricolora dal vivo, mantenendo intatti lo scrollback e qualsiasi sessione di shell in corso.
|
|
28
|
+
- **I grafici** della pagina Analytics si ritingono di conseguenza.
|
|
29
|
+
- **L'evidenziazione della sintassi del codice** nel visualizzatore Code segue anch'essa il tema.
|
|
30
|
+
|
|
31
|
+
## Ricorda la tua scelta
|
|
32
|
+
|
|
33
|
+
La tua selezione viene salvata insieme all'app, quindi resta anche dopo i riavvii. Per evitare quel breve lampo dei colori sbagliati quando l'app si apre, Specrails applica il tema salvato ancora prima che l'interfaccia finisca di caricarsi — così quello che vedi è già corretto fin dal primo fotogramma.
|
|
34
|
+
|
|
35
|
+
## Una nota per i curiosi
|
|
36
|
+
|
|
37
|
+
I temi sono costruiti su un piccolo insieme di ruoli cromatici semantici (un colore "accent", un colore "surface" e così via) anziché su tonalità fisse e codificate a mano. È per questo che aggiungere il tema successivo è semplice ed è per questo che ogni tema resta coerente al suo interno — ciascuno si limita a rimappare quei ruoli. Non devi pensare a nulla di tutto questo per usarlo; è semplicemente il motivo per cui il theming risulta così fluido.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Lingua
|
|
2
|
+
|
|
3
|
+
Specrails parla la tua lingua. L'interfaccia è interamente tradotta in otto lingue e, per impostazione predefinita, segue la lingua impostata sul tuo computer — così per la maggior parte delle persone appare già nella lingua giusta al primo avvio.
|
|
4
|
+
|
|
5
|
+
## Lingue supportate
|
|
6
|
+
|
|
7
|
+
- English
|
|
8
|
+
- Español (Spagnolo)
|
|
9
|
+
- Français (Francese)
|
|
10
|
+
- Deutsch (Tedesco)
|
|
11
|
+
- Português (Portoghese)
|
|
12
|
+
- Italiano
|
|
13
|
+
- 中文 (Cinese)
|
|
14
|
+
- 日本語 (Giapponese)
|
|
15
|
+
|
|
16
|
+
## Parte nella lingua del tuo sistema operativo
|
|
17
|
+
|
|
18
|
+
La prima volta che apri Specrails, l'app guarda le preferenze di lingua del tuo sistema operativo e le abbina alla lingua supportata più vicina. Se il tuo Mac o PC è impostato in spagnolo, vedrai lo spagnolo. Se è impostato su una variante regionale (come `es-ES` o `zh-Hans-CN`), Specrails lo mappa automaticamente sulla lingua di base corretta.
|
|
19
|
+
|
|
20
|
+
Non devi fare nulla — e se non tocchi mai l'impostazione della lingua, Specrails continua a seguire il tuo sistema operativo. Cambi la lingua del computer in seguito? Specrails si adegua di conseguenza.
|
|
21
|
+
|
|
22
|
+
## Scegliere la lingua da te
|
|
23
|
+
|
|
24
|
+
Vuoi qualcosa di diverso dalla lingua predefinita del sistema? Scegliela esplicitamente:
|
|
25
|
+
|
|
26
|
+
1. Apri le **Impostazioni**.
|
|
27
|
+
2. Vai alla sezione **Lingua**.
|
|
28
|
+
3. Scegli la tua lingua.
|
|
29
|
+
|
|
30
|
+
Il cambio è **istantaneo** — l'intera interfaccia viene ridisegnata nella nuova lingua senza riavvii. Una volta fatta una scelta esplicita, Specrails la ricorda e smette di seguire il sistema operativo, così la tua preferenza viene rispettata ogni volta che apri l'app.
|
|
31
|
+
|
|
32
|
+
## Cosa viene tradotto
|
|
33
|
+
|
|
34
|
+
Tutto ciò che leggi nell'interfaccia — pulsanti, etichette, messaggi di stato, titoli delle pagine, finestre di dialogo. Anche le date si adattano alla lingua scelta, quindi sono formattate secondo le convenzioni di quella lingua.
|
|
35
|
+
|
|
36
|
+
## Buono a sapersi
|
|
37
|
+
|
|
38
|
+
- **L'inglese è la lingua di partenza.** Se una funzionalità nuova di zecca esce prima che la sua traduzione sia pronta, potresti vedere brevemente qua e là un'etichetta in inglese — verrà tradotta in un aggiornamento successivo.
|
|
39
|
+
- La scelta della lingua è **valida per tutta l'app**, identica su tutti i tuoi progetti.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Telemetria della pipeline e diagnostica
|
|
2
|
+
|
|
3
|
+
Quando un job della pipeline non va come ti aspettavi, la telemetria ti offre un resoconto dettagliato e dietro le quinte di ciò che la AI CLI ha realmente fatto. È **disattivata per impostazione predefinita** e completamente opzionale, per ogni progetto — attivala solo quando ti serve.
|
|
4
|
+
|
|
5
|
+
## Cos'è
|
|
6
|
+
|
|
7
|
+
La telemetria cattura segnali diagnostici strutturati (traces, metriche e log) emessi dalla AI CLI mentre esegue un job della pipeline. Pensala come una scatola nera per le tue esecuzioni della pipeline: tempistiche, uso dei token e attività passo dopo passo, catturati localmente così da poter ispezionare un job a posteriori.
|
|
8
|
+
|
|
9
|
+
È costruita su **OpenTelemetry**, un formato aperto e standard — quindi i dati non restano rinchiusi in una scatola proprietaria.
|
|
10
|
+
|
|
11
|
+
## Come attivarla
|
|
12
|
+
|
|
13
|
+
La telemetria si configura **per singolo progetto**:
|
|
14
|
+
|
|
15
|
+
1. Apri la pagina **Impostazioni** del progetto (la route delle impostazioni di progetto).
|
|
16
|
+
2. Trova l'interruttore **Telemetria della pipeline**.
|
|
17
|
+
3. Attivalo.
|
|
18
|
+
|
|
19
|
+
Da quel momento in poi, i job della pipeline in quel progetto registrano la telemetria. Gli altri progetti non ne sono toccati — ciascun progetto decide per conto suo.
|
|
20
|
+
|
|
21
|
+
### Cosa viene coperto
|
|
22
|
+
|
|
23
|
+
La telemetria si applica ai **job della pipeline** (le esecuzioni dei rail Architect → Developer → Reviewer → Ship messi in coda). Le sessioni interattive come la chat e il wizard di setup sono lasciate fuori di proposito — la telemetria è pensata per le esecuzioni ripetibili e ispezionabili della pipeline, non per le conversazioni occasionali.
|
|
24
|
+
|
|
25
|
+
## Dove vivono i dati
|
|
26
|
+
|
|
27
|
+
Tutto resta sulla tua macchina, sotto la tua home directory (`~/.specrails/`) — mai nel tuo repository. Le registrazioni grezze sono salvate in forma compressa accanto al loro job e, dopo una settimana, quelle più vecchie vengono automaticamente condensate in riassunti compatti per mantenere tutto in ordine. Non devi mai gestire nulla di tutto questo a mano.
|
|
28
|
+
|
|
29
|
+
## Esportare un bundle diagnostico
|
|
30
|
+
|
|
31
|
+
La cosa più utile che la telemetria sblocca è l'**export diagnostico** — un singolo ZIP che racchiude tutto ciò che riguarda un job, per il troubleshooting o per condividerlo.
|
|
32
|
+
|
|
33
|
+
Quando un job ha la telemetria registrata, sulla sua card compare un **pulsante di esportazione**. Cliccalo per scaricare uno ZIP contenente:
|
|
34
|
+
|
|
35
|
+
- **`job-metadata.json`** — l'identità e i parametri del job
|
|
36
|
+
- **`telemetry.ndjson`** — i segnali grezzi registrati
|
|
37
|
+
- **`logs.txt`** — l'output di log catturato
|
|
38
|
+
- **`summary.md`** — un riassunto leggibile dell'esecuzione
|
|
39
|
+
|
|
40
|
+
Se il progetto usa plugin, il bundle include anche uno snapshot di quali plugin erano attivi per quel job.
|
|
41
|
+
|
|
42
|
+
Questo è il bundle da prendere quando vuoi capire un'esecuzione complicata, conservare una traccia o passare i dettagli a qualcuno che ti aiuta con il debug.
|
|
43
|
+
|
|
44
|
+
## Come disattivarla
|
|
45
|
+
|
|
46
|
+
Riporta l'interruttore su off in qualsiasi momento. I nuovi job smettono di registrare immediatamente. Tutto ciò che è già stato catturato resta su disco finché non viene compattato o non rimuovi il progetto — niente viene inviato da nessuna parte né perso alle tue spalle.
|