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,78 @@
|
|
|
1
|
+
# Analytics e controlo de custos
|
|
2
|
+
|
|
3
|
+
Sempre que o Specrails corre uma CLI de IA por si — um job de pipeline, uma quick spec, uma sessão de Explore, um refinamento de IA, um resumo de ficheiro — fica registado o que aconteceu: que modelo correu, quantos tokens entraram e saíram, quanto tempo demorou e quanto custou. A secção **Analytics** transforma tudo isso num único painel, para que saiba sempre para onde vai o seu investimento em IA.
|
|
4
|
+
|
|
5
|
+
Abra-a a partir da barra lateral direita (tem a etiqueta **Analytics**). Tudo o que vê diz respeito ao projeto em que se encontra neste momento — mude de projeto e os números acompanham-no.
|
|
6
|
+
|
|
7
|
+
## O que conta como gasto
|
|
8
|
+
|
|
9
|
+
O Specrails regista cinco tipos de atividade de IA, a que chamamos *superfícies*. Cada uma tem uma cor consistente em todos os gráficos, para a identificar num relance:
|
|
10
|
+
|
|
11
|
+
- **Job** — um rail de pipeline a correr Architect → Developer → Reviewer → Ship.
|
|
12
|
+
- **Quick spec** — uma spec gerada pelo caminho rápido de Add Spec.
|
|
13
|
+
- **Explore spec** — uma conversa de Explore em que dá forma a uma spec à medida que conversa.
|
|
14
|
+
- **AI edit** — um refinamento assistido por IA sobre um agente ou ficheiro.
|
|
15
|
+
- **File summary** — os resumos em linguagem simples que dão vida ao Code explorer.
|
|
16
|
+
|
|
17
|
+
Há um par de coisas que, propositadamente, *não* são registadas: tanto o chat lateral como o assistente de configuração arrancam CLIs de IA, mas nunca aparecem nos seus gastos. Assim, o painel reflete trabalho real e repetível, em vez de conversa ocasional.
|
|
18
|
+
|
|
19
|
+
## Ler o painel
|
|
20
|
+
|
|
21
|
+
A página é composta por um punhado de blocos, de cima para baixo:
|
|
22
|
+
|
|
23
|
+
### O medidor de consumo (Hero)
|
|
24
|
+
|
|
25
|
+
O grande número no topo é o seu gasto total para o período selecionado, acompanhado por uma variação **vs anterior**, para perceber num relance se a tendência é de subida ou de descida face à janela anterior. Se acabou de começar a usar um projeto, o estado vazio indica-lhe quando o registo começou ("Registo iniciado em YYYY-MM-DD") — não há preenchimento retroativo de histórico, por isso o medidor só conhece as execuções que aconteceram enquanto estava nesta versão.
|
|
26
|
+
|
|
27
|
+
### Cronologia diária
|
|
28
|
+
|
|
29
|
+
Um gráfico de barras empilhadas com o gasto por dia, dividido por superfície. Os dias sem atividade aparecem como zero em vez de serem saltados, para que a forma da sua semana seja honesta. É a forma mais rápida de ver *quando* correu um lote dispendioso.
|
|
30
|
+
|
|
31
|
+
### Quick vs Explore
|
|
32
|
+
|
|
33
|
+
Um cartão lado a lado a comparar os seus dois estilos de criação de specs. Se correu menos de cinco sessões de Explore, mostra um convite à ação delicado em vez de médias enganadoras — amostras pequenas não dão comparações de confiança.
|
|
34
|
+
|
|
35
|
+
### Por modelo
|
|
36
|
+
|
|
37
|
+
Os seus modelos com mais gasto (até dez). Clique em qualquer modelo para filtrar todo o painel apenas por esse modelo — útil quando quer saber quanto lhe está realmente a custar um modelo topo de gama em particular.
|
|
38
|
+
|
|
39
|
+
### Dispersão custo vs turnos
|
|
40
|
+
|
|
41
|
+
Cada ponto é uma invocação, representando o custo face ao número de turnos. Os pontos discrepantes — as execuções caras, de muitos turnos — saltam logo à vista. (A dispersão mostra os seus 500 pontos mais recentes, para se manter ágil.)
|
|
42
|
+
|
|
43
|
+
### Top tickets
|
|
44
|
+
|
|
45
|
+
Os seus dez tickets mais caros somando *todas* as superfícies, para que um ticket que custou pouco no Explore e muito num job mostre o seu verdadeiro total. Os tickets eliminados e as execuções sem atribuição ganham os seus próprios baldes, para que nada desapareça silenciosamente dos totais.
|
|
46
|
+
|
|
47
|
+
### Tabela de invocações em bruto
|
|
48
|
+
|
|
49
|
+
A verdade dos factos: uma linha por invocação. Este bloco tem os seus próprios filtros secundários, que afetam apenas a tabela, para poder aprofundar sem mexer nos gráficos acima.
|
|
50
|
+
|
|
51
|
+
## Filtrar
|
|
52
|
+
|
|
53
|
+
O cabeçalho fixo no topo traz os dois filtros principais — **período** e **superfície** — e ambos ficam guardados no URL da página. Isto significa que pode marcar nos favoritos ou partilhar uma vista filtrada ("últimos 30 dias, só jobs") e ela reabre exatamente como a deixou. Os filtros da tabela em bruto são separados e ficam locais a esse bloco.
|
|
54
|
+
|
|
55
|
+
Uma nota sobre rigor: as execuções falhadas e abortadas ficam de fora das *médias de custo* (distorceriam os números por execução), mas continuam a contar para o total de execuções e para a taxa de falhas. Assim, as médias mantêm-se limpas enquanto o retrato de fiabilidade se mantém completo.
|
|
56
|
+
|
|
57
|
+
## Custo por ticket
|
|
58
|
+
|
|
59
|
+
Não precisa de ir à página de Analytics para ver quanto custou uma spec. Abra qualquer ticket e, se tiver algum gasto associado, vê um resumo numa só linha logo por baixo do título:
|
|
60
|
+
|
|
61
|
+
> $0.42 · 6 turnos · 1m 12s ativos · detalhe
|
|
62
|
+
|
|
63
|
+
Clique nele e vai parar à página de Analytics já filtrada por esse ticket. É o caminho mais rápido entre "quanto me custou esta funcionalidade?" e o detalhe completo.
|
|
64
|
+
|
|
65
|
+
## Exportar os seus dados
|
|
66
|
+
|
|
67
|
+
Quando precisa dos números fora da aplicação — uma folha de cálculo, um relatório financeiro, a sua própria análise — use o menu **Export**. Oferece quatro formatos:
|
|
68
|
+
|
|
69
|
+
- **CSV de resumo** — um ficheiro com várias secções, com totais, cronologia diária, por superfície, por modelo e top tickets.
|
|
70
|
+
- **JSON de resumo** — o mesmo resumo, estruturado.
|
|
71
|
+
- **CSV em bruto** — todas as linhas de invocação (até 10.000; assinala se teve de truncar).
|
|
72
|
+
- **JSON em bruto** — as mesmas linhas em bruto, estruturadas.
|
|
73
|
+
|
|
74
|
+
As exportações respeitam os filtros de período e superfície que tiver aplicados nesse momento, e os ficheiros são nomeados de forma a ordenarem-se com lógica: `<project>-analytics-<period>-<date>.csv`. O botão fica desativado quando não há nada para exportar, e recebe uma notificação de erro clara se uma transferência falhar.
|
|
75
|
+
|
|
76
|
+
## Sempre em direto
|
|
77
|
+
|
|
78
|
+
Não precisa de atualizar a página. Quando uma nova invocação é registada em qualquer ponto do projeto, o painel aberto volta a carregar-se discretamente pouco depois, para que o medidor de consumo acompanhe o trabalho à medida que vai terminando.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# O terminal integrado
|
|
2
|
+
|
|
3
|
+
O Specrails tem um terminal a sério mesmo lá dentro — o painel que sobe a partir do fundo da janela, tal como o do VS Code ou do Cursor. Corre a sua shell real, na pasta real do seu projeto, para poder correr `git`, `npm`, testes ou o que precisar sem sair da aplicação.
|
|
4
|
+
|
|
5
|
+
## Abrir e fechar
|
|
6
|
+
|
|
7
|
+
A forma mais rápida é pelo teclado: **Cmd+J** (macOS) ou **Ctrl+J** (Windows/Linux) abre e fecha o painel, e dá o foco ao terminal assim que ele aparece, para poder começar a escrever de imediato. Também pode usar a seta na barra de estado.
|
|
8
|
+
|
|
9
|
+
O painel tem três estados:
|
|
10
|
+
|
|
11
|
+
- **Oculto** — recolhido de lado.
|
|
12
|
+
- **Restaurado** — o painel normal, em meia altura.
|
|
13
|
+
- **Maximizado** — a ocupar toda a área de trabalho quando precisa de espaço para ler o output.
|
|
14
|
+
|
|
15
|
+
Minimizar o painel (a seta) **não** interrompe nada — as suas shells continuam a correr em segundo plano. A única coisa que termina mesmo uma sessão é fechá-la (o ícone do caixote do lixo, ou o ✕ de cada separador).
|
|
16
|
+
|
|
17
|
+
## Várias sessões
|
|
18
|
+
|
|
19
|
+
Pode ter vários terminais ao mesmo tempo no mesmo projeto — até dez. Cada um ganha o seu separador; pode renomeá-los para que "dev server" e "testes" não se confundam. Todos arrancam na pasta do seu projeto e carregam o perfil da sua shell (`.zshrc`, `.bashrc`, e por aí fora), para que os seus aliases e o PATH sejam exatamente o que esperaria.
|
|
20
|
+
|
|
21
|
+
E aqui está o mais importante: os seus terminais **sobrevivem à mudança de projetos e de separadores**. O Specrails mantém cada sessão viva e intacta nos bastidores — scrollback, processos em execução, tudo — para que saltar para a secção Analytics e voltar não reinicie a sua shell nem interrompa um comando de longa duração. As sessões só terminam quando as fecha explicitamente (ou quando remove o projeto inteiro).
|
|
22
|
+
|
|
23
|
+
## Por projeto, e memorizado
|
|
24
|
+
|
|
25
|
+
Se o painel está aberto, a altura para que o arrastou, que separadores existem — tudo isso fica memorizado **por projeto**. Volte a um projeto e está tal como o deixou.
|
|
26
|
+
|
|
27
|
+
## As funcionalidades premium
|
|
28
|
+
|
|
29
|
+
Isto não é uma consola básica. O terminal vem com os mimos que esperaria de um terminal de primeira:
|
|
30
|
+
|
|
31
|
+
- **Renderização rápida e nítida** via WebGL (com um modo alternativo automático, para nunca falhar), tratamento completo de larguras Unicode e ligaduras de tipos de letra.
|
|
32
|
+
- **Pesquisar no scrollback** com **Cmd+F** — ótimo para encontrar aquele erro enterrado 500 linhas acima.
|
|
33
|
+
- **Zoom do tipo de letra** com **Cmd+=**, **Cmd+-** e **Cmd+0** para repor.
|
|
34
|
+
- **Atalhos da área de transferência** — Cmd+C / Cmd+V para copiar e colar, Cmd+K para limpar — além de um menu de contexto do botão direito.
|
|
35
|
+
- **Arrastar e largar caminhos de ficheiros** (na aplicação de desktop): largue um ficheiro sobre o terminal e o seu caminho é inserido, corretamente entre aspas para a sua shell.
|
|
36
|
+
- **Redimensionamento suave** — arrastar a altura do painel ou recolher a barra lateral não faz o output tremer.
|
|
37
|
+
- **Imagens inline** — terminais que emitem imagens em Sixel ou no estilo iTerm2 mostram-nas mesmo no sítio.
|
|
38
|
+
- **Integração com a shell** — o Specrails sabe onde cada comando começa e acaba, por isso consegue acompanhar o seu histórico de comandos e avisá-lo quando um comando de longa duração termina (uma notificação de desktop, com um modo alternativo no browser). Se, por alguma razão, a sua shell não puder ser instrumentada, degrada-se discretamente e avisa-o uma vez.
|
|
39
|
+
|
|
40
|
+
## Definições
|
|
41
|
+
|
|
42
|
+
As preferências do terminal vivem em duas camadas: um padrão para toda a aplicação e uma substituição opcional por projeto. A definição por projeto prevalece quando existe, para poder manter um aspeto geral comum e, ao mesmo tempo, afinar um projeto que precise de algo diferente.
|
|
43
|
+
|
|
44
|
+
## Desligá-lo
|
|
45
|
+
|
|
46
|
+
O terminal está ligado por predefinição. Se preferir ficar sem ele, pode desativá-lo através das flags `VITE_FEATURE_TERMINAL_PANEL` (cliente) ou `SPECRAILS_TERMINAL_PANEL` (servidor) — defina qualquer uma como `false`. A maioria das pessoas vai simplesmente deixá-lo ligado.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Code explorer
|
|
2
|
+
|
|
3
|
+
A secção **Code** dá-lhe uma janela amigável e só de leitura para o seu repositório — pensada especialmente para quem quer perceber o que a IA tem andado a construir sem viver dentro de um editor. Tem uma árvore de ficheiros à esquerda, um visualizador de código à direita e, por cima do código, um resumo em linguagem simples do que cada ficheiro faz na prática.
|
|
4
|
+
|
|
5
|
+
Nesta versão é estritamente só de leitura: nada do que faz aqui altera os seus ficheiros. Pense nisto como uma sala de leitura, não uma oficina.
|
|
6
|
+
|
|
7
|
+
Abra-a a partir da barra lateral direita (**Code**) e, como tudo o resto, diz respeito ao seu projeto atual.
|
|
8
|
+
|
|
9
|
+
## A árvore de ficheiros
|
|
10
|
+
|
|
11
|
+
O painel da esquerda é uma árvore virtualizada dos ficheiros do seu projeto — rápida mesmo em repositórios grandes. Respeita o seu `.gitignore` e uma lista de exclusão incorporada, por isso vê os ficheiros que interessam, e não um mar de artefactos de build e `node_modules`.
|
|
12
|
+
|
|
13
|
+
Junto aos ficheiros vai reparar em **etiquetas de proveniência** — pequenos marcadores que lhe dizem que um ficheiro foi *alterado por IA*. É este o coração do Code explorer: o Specrails regista que ficheiros cada job de pipeline criou ou modificou, e liga-os de volta ao ticket que motivou o trabalho. Assim consegue responder, num relance, a "foi a IA que escreveu isto, ou fui eu?".
|
|
14
|
+
|
|
15
|
+
No topo da árvore há um filtro:
|
|
16
|
+
|
|
17
|
+
- **Alterados por IA** (a predefinição) — apenas os ficheiros que a IA alterou.
|
|
18
|
+
- **Todos os ficheiros** — a árvore completa.
|
|
19
|
+
|
|
20
|
+
A sua escolha fica memorizada por projeto, por isso, se o que mais lhe importa são as alterações feitas pela IA, vai vê-las em primeiro lugar de cada vez.
|
|
21
|
+
|
|
22
|
+
## O visualizador de código
|
|
23
|
+
|
|
24
|
+
Clique num ficheiro e ele abre num visualizador completo (com o Monaco, o mesmo motor do VS Code), com realce de sintaxe adequado e a condizer com o tema que escolheu para a aplicação. Alguns limites sensatos mantêm tudo fluido: os ficheiros binários são recusados com delicadeza e os ficheiros muito grandes (acima de 2 MB) não carregam.
|
|
25
|
+
|
|
26
|
+
O ficheiro atual fica guardado no URL da página, para poder marcar nos favoritos ou partilhar uma ligação diretamente para um ficheiro específico.
|
|
27
|
+
|
|
28
|
+
Como a edição não faz parte desta versão, o visualizador oferece um botão **Editar num editor externo** que copia o caminho absoluto do ficheiro — cole-o no editor da sua preferência e continue a partir daí.
|
|
29
|
+
|
|
30
|
+
## Resumos por IA
|
|
31
|
+
|
|
32
|
+
Por cima do código vê um **resumo em linguagem simples** do ficheiro — para que serve, o que faz — escrito de forma a que uma pessoa não programadora consiga acompanhar. São gerados por si e ficam em cache, por isso abrir um ficheiro que já tinha visto antes é instantâneo.
|
|
33
|
+
|
|
34
|
+
Os resumos são espertos a manter-se atualizados: estão associados ao conteúdo do ficheiro, por isso, quando um ficheiro muda de verdade, o resumo é regenerado, mas os ficheiros inalterados não são resumidos de novo sem necessidade. Se for você a editar um ficheiro, o seu resumo é marcado como desatualizado em vez de ser regenerado em silêncio — fica no controlo de quando é atualizado. Há uma ação de **regenerar** para quando quiser uma nova versão a pedido.
|
|
35
|
+
|
|
36
|
+
Algumas salvaguardas mantêm os custos sob controlo: a geração de resumos corre dentro de um **orçamento mensal** (alguns dólares por predefinição, configurável nas Definições) e há limites para quantos resumos um único job pode despoletar. Se um resumo for ignorado, a aplicação diz-lhe porquê — orçamento atingido, um limite por job, ou simplesmente o ficheiro não ter sido encontrado.
|
|
37
|
+
|
|
38
|
+
Pode também escolher o **idioma do resumo** (inglês ou espanhol) nas definições globais, na área da *secção Code*.
|
|
39
|
+
|
|
40
|
+
## Ligar o código de volta às specs
|
|
41
|
+
|
|
42
|
+
A ligação de proveniência funciona nos dois sentidos. Dentro do Code explorer, clicar na etiqueta de um ticket num ficheiro abre o detalhe desse ticket. E no sentido inverso, a vista de **detalhe do ticket** tem uma secção *Ficheiros alterados por este ticket* — clique aí num ficheiro e salta diretamente para o Code explorer com ele aberto. Fecha o ciclo entre "aqui está a spec que escrevemos" e "aqui está o código que daí saiu".
|
|
43
|
+
|
|
44
|
+
## O que (ainda) não faz
|
|
45
|
+
|
|
46
|
+
Para deixar as expectativas claras, esta primeira versão deixa de fora, de propósito, algumas coisas: edição dentro da aplicação, resumos ao nível do símbolo ou da pasta, uma vista de diff narrativa e o "pergunte à IA sobre este ficheiro" em modo de conversa. A proveniência atribui um ficheiro apenas ao seu ticket principal. São o tipo de coisas que podem crescer com o tempo.
|
|
47
|
+
|
|
48
|
+
## Desligá-lo
|
|
49
|
+
|
|
50
|
+
O Code explorer está ligado por predefinição. Pode ser desativado com as flags `VITE_FEATURE_CODE_EXPLORER` (cliente) ou `SPECRAILS_CODE_EXPLORER` (servidor) — defina qualquer uma como `false`. Desligá-lo deixa todos os seus dados registados e resumos em segurança no disco, intactos, para o caso de o voltar a ligar.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Providers de IA (Claude, Codex, Gemini)
|
|
2
|
+
|
|
3
|
+
O Specrails não está preso a uma única IA. Todas as partes da app que falam com uma IA — Explore Spec, spec rápida (Quick), rails, chat, AI Edit, o botão "Open AI CLI" do terminal — podem correr através de qualquer um dos três providers de primeira linha. Você escolhe quais é que cada projeto usa e pode até alternar tarefa a tarefa.
|
|
4
|
+
|
|
5
|
+
## Os três providers
|
|
6
|
+
|
|
7
|
+
| Provider | CLI | Feito por | Notas |
|
|
8
|
+
|---|---|---|---|
|
|
9
|
+
| **Claude** | `claude` | Anthropic | O mais completo. O único provider para Agentes (perfis) e rails Ultracode, e para o Contract Refine. |
|
|
10
|
+
| **Codex** | `codex` | OpenAI | Requer codex `0.128.0+`. Lê os seus servidores MCP a partir do `~/.codex/config.toml` global. |
|
|
11
|
+
| **Gemini** | `gemini` | Google | Requer gemini `0.11.0+`. Usa telemetria nativa e um ficheiro de instruções `GEMINI.md`. |
|
|
12
|
+
|
|
13
|
+
Os três estão **ativados por omissão**. Um provider aparece em **Adicionar Projeto** sempre que o seu CLI estiver instalado e no seu `PATH`. Por isso o primeiro passo é sempre o mesmo: instale o CLI que quer e autentique-se com ele, exatamente como a documentação dessa ferramenta descreve. Assim que `claude --version` (ou `codex`, ou `gemini`) funcionar no seu terminal, o Specrails consegue usá-lo.
|
|
14
|
+
|
|
15
|
+
## Instalar um provider para um projeto
|
|
16
|
+
|
|
17
|
+
Quando adiciona um projeto, o assistente de configuração pergunta qual ou quais providers instalar. Escolha um, avance pelo passo de instalação e está feito. A partir daí o projeto simplesmente *tem* esse provider — nunca mais precisa de pensar nisso. Specs, rails, chat e analytics funcionam todos da mesma forma, independentemente do que escolheu.
|
|
18
|
+
|
|
19
|
+
Se um CLI que quer não aparecer em Adicionar Projeto, é quase sempre porque o CLI não está instalado ou não está no seu `PATH`. Instale-o e volte a abrir Adicionar Projeto.
|
|
20
|
+
|
|
21
|
+
## Instalar vários providers num só projeto
|
|
22
|
+
|
|
23
|
+
Pode instalar **mais do que um** provider no mesmo projeto — por exemplo Claude *e* Gemini. Em **Adicionar Projeto**, a lista de providers passa a ser um conjunto de caixas de seleção; marque tudo o que quiser. O primeiro que selecionar torna-se o provider **primário** (por omissão) do projeto; os restantes ficam disponíveis como alternativas.
|
|
24
|
+
|
|
25
|
+
Algumas coisas que vale a pena saber sobre projetos multi-provider:
|
|
26
|
+
|
|
27
|
+
- **Com um só provider, tudo se comporta exatamente como antes.** Se um projeto tiver apenas um provider, nunca verá um seletor de provider em lado nenhum — a app mantém-se limpa e simples.
|
|
28
|
+
- **A barra lateral direita só mostra as secções que todos os providers instalados suportam.** Como os Agentes (perfis) são um conceito exclusivo do Claude, a secção **Agentes** desaparece assim que um projeto inclui qualquer provider que não seja Claude. Todo o resto (Specs, Código, Analytics, Integrações, Terminal, Chat) permanece.
|
|
29
|
+
- **A escolha de providers fica fixada após a criação.** Nesta versão escolhe os seus providers quando adiciona o projeto e não podem ser alterados mais tarde nas Definições. Se precisar de uma combinação diferente, isso é um projeto novo.
|
|
30
|
+
|
|
31
|
+
## Escolher um provider a cada invocação
|
|
32
|
+
|
|
33
|
+
A grande vantagem de um projeto multi-provider é poder escolher a IA certa para cada tarefa — sem mexer em nenhuma definição global. Sempre que uma IA corre, aparece um pequeno seletor de provider (apenas quando o projeto tem mais do que um):
|
|
34
|
+
|
|
35
|
+
- **Adicionar Spec** — um seletor de motor permite-lhe Explorar ou gerar rapidamente (Quick) uma spec com o provider que preferir.
|
|
36
|
+
- **Cabeçalho do rail** — escolha o motor para esse rail específico antes de o lançar.
|
|
37
|
+
- **Terminal** — o botão "Open AI CLI" (Sparkles) abre um menu de providers para que possa entrar em qualquer CLI instalado na diretoria desse projeto.
|
|
38
|
+
|
|
39
|
+
A sua escolha é guardada por projeto, predefinida para o provider primário, para que não tenha de a repetir de cada vez.
|
|
40
|
+
|
|
41
|
+
## O que só o Claude consegue fazer
|
|
42
|
+
|
|
43
|
+
Algumas funcionalidades são, por natureza, específicas do Claude, por isso ficam escondidas ou são ignoradas quando outro provider está em jogo:
|
|
44
|
+
|
|
45
|
+
- **Agentes (perfis)** — o catálogo de agentes por projeto e o roteamento de modelos. Escondido em qualquer projeto que inclua um provider que não seja Claude.
|
|
46
|
+
- **Rails Ultracode** — correm sempre no Claude.
|
|
47
|
+
- **Contract Refine** — a passagem extra de "Contract Layer" sobre uma spec confirmada só corre quando o provider da conversa é o Claude.
|
|
48
|
+
- **Modos avançados de Adicionar Spec** (SMASH / Contract Layer) — escondidos para motores que não sejam Claude.
|
|
49
|
+
|
|
50
|
+
Todo o resto — Explore, spec rápida (Quick), o pipeline completo de rails, AI Edit, chat, analytics de custos — funciona nos três.
|
|
51
|
+
|
|
52
|
+
## Acompanhamento de custos entre providers
|
|
53
|
+
|
|
54
|
+
A página **Analytics** acompanha cada invocação faturável, independentemente do provider. Em projetos multi-provider acrescenta chips de filtro por motor para que possa comparar o gasto por provider. O Claude reporta o seu próprio custo exato; para o Codex e o Gemini, o Specrails estima o custo a partir de uma tabela de preços incorporada, por isso os valores são aproximações próximas e não montantes faturados.
|
|
55
|
+
|
|
56
|
+
## Resolução de problemas
|
|
57
|
+
|
|
58
|
+
- **Um provider que instalei não aparece.** Confirme que o CLI está no seu `PATH` (experimente `claude --version` / `codex --version` / `gemini --version` num terminal novo). A app sonda os CLIs dos providers através do `PATH` do seu sistema.
|
|
59
|
+
- **Os servidores MCP do Codex não carregam no chat.** O Codex lê os servidores MCP a partir do `~/.codex/config.toml` global — registe-os aí com `codex mcp add`.
|
|
60
|
+
- **Desativar em emergência.** Um provider pode ser desligado em toda a app através de uma variável de ambiente (`SPECRAILS_CODEX_BETA=0` ou `SPECRAILS_GEMINI_BETA=0`). Isto só esconde o provider da *seleção*; raramente é necessário.
|
|
61
|
+
|
|
62
|
+
## Ver também
|
|
63
|
+
|
|
64
|
+
Os guias dedicados a cada provider aprofundam cada CLI: o guia do Codex e o guia do Gemini cobrem cada um a configuração, o que funciona e as particularidades específicas de cada provider.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Plugins (Integrações)
|
|
2
|
+
|
|
3
|
+
A secção **Integrações** é um marketplace por projeto de extras opcionais que ampliam o que a IA consegue fazer. Cada projeto decide de forma independente que plugins quer — instalar um plugin num projeto nunca afeta outro.
|
|
4
|
+
|
|
5
|
+
Os plugins funcionam registando discretamente um **servidor MCP** (Model Context Protocol) no seu projeto, dando à IA novas ferramentas para invocar durante rails e chat. Não precisa de perceber de MCP para os usar — instale-os e ficam disponíveis na próxima vez que um rail correr.
|
|
6
|
+
|
|
7
|
+
## O que está disponível hoje
|
|
8
|
+
|
|
9
|
+
Esta versão inclui **apenas plugins incorporados**: os plugins que pode instalar são os que vêm integrados na app. Não há registo remoto, nem plugins carregados por utilizadores, nem carregamento de código de terceiros — por isso tudo o que está no catálogo é verificado e distribuído com o Specrails.
|
|
10
|
+
|
|
11
|
+
O plugin de destaque é:
|
|
12
|
+
|
|
13
|
+
- **Serena** — navegação semântica de código. Dá à IA uma compreensão da sua base de código apoiada por um language server (saltar para a definição, encontrar referências, pesquisa consciente de símbolos) em vez de uma simples correspondência de texto. Ótimo para repositórios maiores ou desconhecidos onde quer que o agente raciocine sobre símbolos reais.
|
|
14
|
+
|
|
15
|
+
O Serena requer a ferramenta `uv` no seu `PATH` (corre via `uvx`). A app deteta automaticamente se o `uv` está presente e avisa-o caso esteja em falta.
|
|
16
|
+
|
|
17
|
+
## Instalar um plugin
|
|
18
|
+
|
|
19
|
+
1. Abra **Integrações** a partir da barra lateral direita.
|
|
20
|
+
2. Encontre o plugin no catálogo. Cada cartão mostra um estado: **Não instalado**, **Instalado**, **Degradado** ou **Órfão**.
|
|
21
|
+
3. Clique no plugin para **pré-visualizar a instalação** — isto mostra-lhe exatamente que ficheiros vão mudar antes de qualquer coisa acontecer.
|
|
22
|
+
4. Clique em **Instalar**. Verá o progresso em tempo real à medida que tudo é configurado.
|
|
23
|
+
|
|
24
|
+
Nos bastidores, a instalação é *cirúrgica e aditiva*: só acrescenta as suas próprias entradas ao `.mcp.json` do seu projeto (e, para alguns plugins, um ficheiro de fragmento no namespace protegido `.claude/agents/`). Nunca reescreve a sua configuração por inteiro, e adicionar um segundo plugin nunca pode perturbar o primeiro. Se a instalação não conseguir verificar-se como saudável, é revertida de forma limpa.
|
|
25
|
+
|
|
26
|
+
## Gerir plugins instalados
|
|
27
|
+
|
|
28
|
+
- **Saúde.** Cada plugin tem uma verificação de saúde a pedido. Um plugin que instala bem mas que mais tarde não consegue arrancar é marcado como **Degradado** — não bloqueia os seus rails, apenas verá o selo e um motivo.
|
|
29
|
+
- **Desinstalar.** Remover um plugin elimina cirurgicamente apenas as entradas que lhe pertencem, deixando o resto da sua configuração intacto.
|
|
30
|
+
- **Órfãos.** Se os ficheiros de um plugin ficarem para trás sem o estado adequado (por exemplo, após uma alteração interrompida), aparece como **Órfão** e pode limpá-lo com um clique.
|
|
31
|
+
|
|
32
|
+
## Como os plugins surgem no seu trabalho
|
|
33
|
+
|
|
34
|
+
- **Rails.** Antes de um rail correr, o Specrails verifica quais os plugins instalados e saudáveis e disponibiliza essas ferramentas ao agente para esse trabalho. Um plugin degradado é simplesmente ignorado nessa execução — o rail é lançado normalmente. Cada trabalho regista um instantâneo de quais os plugins que estavam ativos, que pode consultar na exportação de diagnóstico do trabalho.
|
|
35
|
+
- **Chat.** O chat recolhe automaticamente a configuração MCP do seu projeto, por isso os plugins instalados também ficam disponíveis aí.
|
|
36
|
+
- **Configuração.** Os plugins são ignorados enquanto um projeto ainda está a ser configurado — entram em ação assim que o projeto fica pronto.
|
|
37
|
+
|
|
38
|
+
## Notas sobre providers
|
|
39
|
+
|
|
40
|
+
Os plugins têm consciência do provider. O Serena e plugins MCP semelhantes resolvem-se para providers que registam MCP através do `.mcp.json` do projeto (Claude e Gemini). Para projetos Codex, os servidores MCP são geridos através da própria configuração global do Codex, por isso as entradas de plugins em **Integrações** são filtradas em conformidade. O cartão do Jira em Integrações é agnóstico ao provider e aparece para toda a gente — consulte o guia do Jira.
|
|
41
|
+
|
|
42
|
+
## Ficheiros reservados
|
|
43
|
+
|
|
44
|
+
Os plugins gerem um conjunto pequeno e bem definido de ficheiros no seu projeto: o seu `.mcp.json` (fundido cirurgicamente), algum estado em `.specrails/plugins/` e fragmentos de agente por plugin em `.claude/agents/custom-<plugin>.md`. Estes são ativos de equipa que pode versionar se quiser partilhar uma integração com os seus colegas — a app nunca os sobrescreve às cegas.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Integração com o Jira
|
|
2
|
+
|
|
3
|
+
Quer que as suas specs vivam num **quadro Jira** real em vez de dentro do Specrails? A integração com o Jira apoia as specs de um projeto em issues do Jira, mantém os estados sincronizados à medida que os rails correm e fica fora do caminho no resto do tempo. Cada projeto sincroniza com **o seu próprio** quadro Jira.
|
|
4
|
+
|
|
5
|
+
## Como funciona (a versão curta)
|
|
6
|
+
|
|
7
|
+
O Specrails atua como uma **camada de sincronização** entre o Jira e o seu projeto. A ideia central: o seu repositório local de specs continua a ser a fonte canónica que o pipeline lê, e o Specrails é responsável por mantê-lo de acordo com o Jira.
|
|
8
|
+
|
|
9
|
+
- Quando lança um rail, o Specrails move a issue Jira associada para **Em curso**.
|
|
10
|
+
- Quando um trabalho termina, o Specrails transita a issue (para **Concluído**, ou de volta para **A fazer** se falhar) e publica um comentário de conclusão com o id do trabalho, o custo e a duração.
|
|
11
|
+
- Periodicamente, o Specrails faz **polling** ao Jira em busca de alterações que alguém tenha feito no quadro e reflete-as de volta nas suas specs.
|
|
12
|
+
|
|
13
|
+
Todas as escritas de retorno passam por uma fila de saída (outbox) durável e resistente a falhas, por isso um soluço momentâneo do Jira nunca quebra um trabalho — a atualização simplesmente volta a tentar.
|
|
14
|
+
|
|
15
|
+
## Conectar um quadro
|
|
16
|
+
|
|
17
|
+
Conecta-se a partir da página **Definições** de um projeto (há também um passo opcional "Configurar Jira" no final do assistente de Adicionar Projeto). O assistente de ligação guia-o através de:
|
|
18
|
+
|
|
19
|
+
1. **Testar** — introduza o URL e as credenciais do seu Jira, e o Specrails verifica a ligação.
|
|
20
|
+
2. **Escolher um projeto** — escolha com que projeto Jira sincronizar.
|
|
21
|
+
3. **Mapa de estados (opcional)** — associe os estados do seu fluxo de trabalho Jira aos estados do Specrails, caso a deteção automática precise de uma ajuda (mais abaixo).
|
|
22
|
+
4. **Conectar** — feito. As suas specs passam a espelhar esse quadro.
|
|
23
|
+
|
|
24
|
+
### Autenticação
|
|
25
|
+
|
|
26
|
+
Esta versão usa autenticação por **colar token** — rápida, no dispositivo e sem qualquer backend envolvido:
|
|
27
|
+
|
|
28
|
+
- **Jira Cloud:** o e-mail da sua conta mais um token de API.
|
|
29
|
+
- **Jira Data Center / Server:** um Personal Access Token (PAT).
|
|
30
|
+
|
|
31
|
+
O seu token é armazenado **cifrado na sua própria máquina** e nunca a abandona. A app mostra apenas se um token está presente, nunca o token em si.
|
|
32
|
+
|
|
33
|
+
## Mapeamento de estados
|
|
34
|
+
|
|
35
|
+
A parte mais complicada de qualquer sincronização com o Jira é fazer corresponder *o seu* fluxo de trabalho aos estados simples do Specrails (A fazer / Em curso / Concluído, mais as variantes de cancelar/concluir). O Specrails resolve isto em dois níveis:
|
|
36
|
+
|
|
37
|
+
1. **O seu mapa de estados explícito**, se definir um no assistente — ganha sempre.
|
|
38
|
+
2. **Deteção automática** a partir da categoria de cada estado (novo / em curso / concluído) mais uma correspondência inteligente para estados do tipo cancelar e concluir.
|
|
39
|
+
|
|
40
|
+
Quando precisa de mover uma issue ao longo de um fluxo de trabalho com transições condicionadas, encontra um caminho válido passo a passo e preenche quaisquer campos obrigatórios (como uma resolução) pelo caminho. Se um estado for genuinamente inalcançável, a operação fica em espera como dead-letter e é-lhe apresentada em vez de falhar silenciosamente — verá um indicador **degradado** e pode tentar de novo.
|
|
41
|
+
|
|
42
|
+
## Hot-swap: ligar e desligar com segurança
|
|
43
|
+
|
|
44
|
+
A ligação ao Jira é **por spec**, capturada no momento em que lança um rail — não é um interruptor global de tudo ou nada no quadro. Isso torna-a segura de alternar:
|
|
45
|
+
|
|
46
|
+
- **Ativar ou desativar** a integração nunca muda de casa as suas specs existentes.
|
|
47
|
+
- **Desligar** repõe o seu projeto no comportamento normal de specs locais.
|
|
48
|
+
- As specs que já têm uma ligação ao Jira mantêm a sua escrita de retorno; as que não têm ficam intocadas.
|
|
49
|
+
|
|
50
|
+
Por isso pode experimentar à vontade — ligue, corra uns quantos rails, desligue — sem baralhar o seu quadro nem as suas specs locais.
|
|
51
|
+
|
|
52
|
+
## No dia a dia
|
|
53
|
+
|
|
54
|
+
Uma vez conectada, a página de Definições do projeto mostra um **cartão de ligação** onde pode:
|
|
55
|
+
|
|
56
|
+
- **Sincronizar agora** — forçar um polling imediato em vez de esperar pelo temporizador.
|
|
57
|
+
- **Tentar dead-letters de novo** — voltar a correr quaisquer escritas de retorno que tenham ficado presas.
|
|
58
|
+
- **Toggle de hot-swap** — pausar/retomar temporariamente a integração.
|
|
59
|
+
- **Desligar** — desassociar o quadro de forma limpa.
|
|
60
|
+
|
|
61
|
+
As specs apoiadas no Jira mostram um **selo com a chave Jira** (como `PROJ-123`) no seu cartão, e ao clicar nele segue de volta para a issue. Também receberá pequenas notificações quando uma sincronização termina, quando um token de autenticação expira (para que o possa renovar) ou quando a integração entra num estado degradado.
|
|
62
|
+
|
|
63
|
+
## Coisas a ter em mente
|
|
64
|
+
|
|
65
|
+
- **Polling, não webhooks.** Como o Specrails corre localmente, faz polling ao Jira em busca de alterações em vez de receber notificações push. As alterações aparecem dentro do intervalo de polling, não instantaneamente.
|
|
66
|
+
- **Um quadro por projeto.** Projetos diferentes podem sincronizar com quadros diferentes; um único projeto sincroniza com exatamente um.
|
|
67
|
+
- **Em conflitos, vence a última escrita** para o caso raro de dois separadores editarem o mesmo rascunho em simultâneo.
|
|
68
|
+
|
|
69
|
+
## Desligar
|
|
70
|
+
|
|
71
|
+
Se alguma vez quiser recuar por completo, basta **Desligar** nas Definições. As suas specs voltam ao comportamento apenas local, e os metadados do Jira ficam simplesmente sem uso — nada é destruído.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# A app companion para telemóvel
|
|
2
|
+
|
|
3
|
+
O Specrails tem uma app companion para telemóvel para que possa ficar de olho nos seus rails enquanto está longe da secretária — ver trabalhos a correr, vê-los terminar e manter-se a par sem estar sentado em frente ao painel.
|
|
4
|
+
|
|
5
|
+
## Para que serve
|
|
6
|
+
|
|
7
|
+
A companion é uma superfície de **monitorização**. Liga-se à sua app de ambiente de trabalho Specrails em execução através da sua rede local e espelha a atividade ao vivo de projetos e trabalhos para o seu telemóvel. Pense nela como uma janela de relance para os mesmos rails que de outra forma veria no painel.
|
|
8
|
+
|
|
9
|
+
## Emparelhar o telemóvel
|
|
10
|
+
|
|
11
|
+
O emparelhamento assenta num **código QR** para que não tenha de escrever nada de complicado:
|
|
12
|
+
|
|
13
|
+
1. Certifique-se de que a sua app de ambiente de trabalho Specrails está em execução e de que o seu telemóvel está na **mesma rede local** (mesmo Wi-Fi).
|
|
14
|
+
2. Na app de ambiente de trabalho, abra o ecrã de emparelhamento para mostrar um código QR.
|
|
15
|
+
3. Na app companion do seu telemóvel, leia esse código.
|
|
16
|
+
4. O telemóvel descobre a app de ambiente de trabalho na rede e liga-se.
|
|
17
|
+
|
|
18
|
+
A partir daí a companion mantém uma ligação ao vivo e transmite listas de projetos e atualizações de trabalhos à medida que acontecem.
|
|
19
|
+
|
|
20
|
+
## Como funciona a ligação
|
|
21
|
+
|
|
22
|
+
A app de ambiente de trabalho anuncia-se na sua rede local para que o telemóvel a encontre, e o código QR transporta os detalhes de que o telemóvel precisa para se ligar com segurança. Tudo permanece na sua rede local — a companion fala diretamente com a sua máquina, não através de qualquer serviço na cloud.
|
|
23
|
+
|
|
24
|
+
Como assenta na rede local, os dois dispositivos precisam de conseguir alcançar-se. Se o emparelhamento não funcionar:
|
|
25
|
+
|
|
26
|
+
- Confirme que ambos os dispositivos estão no **mesmo Wi-Fi** (e que a rede não isola os clientes uns dos outros).
|
|
27
|
+
- Certifique-se de que a app de ambiente de trabalho está **em execução** quando lê o código.
|
|
28
|
+
- Volte a abrir o ecrã de emparelhamento para atualizar o código QR e tente ler de novo.
|
|
29
|
+
|
|
30
|
+
## O que vai ver
|
|
31
|
+
|
|
32
|
+
Uma vez emparelhada, a companion apresenta os seus projetos e a respetiva atividade de trabalhos ao vivo, dando-lhe as mesmas atualizações de rails em tempo real que chegam ao painel de ambiente de trabalho — enviadas para o seu telemóvel à medida que ocorrem. É a forma mais fácil de saber o momento exato em que um rail de longa duração termina.
|
|
33
|
+
|
|
34
|
+
## Bom saber
|
|
35
|
+
|
|
36
|
+
- **Monitorização em primeiro lugar.** A companion foi pensada para acompanhar os rails, não para conduzir todo o fluxo de trabalho de ambiente de trabalho a partir do telemóvel.
|
|
37
|
+
- **Apenas local.** Sem conta, sem relé na cloud — a sua máquina e o seu telemóvel, na sua rede.
|
|
38
|
+
- **Mantenha o ambiente de trabalho acordado.** A companion espelha uma app de ambiente de trabalho em execução; se a sua máquina adormecer ou a app fechar, as atualizações ao vivo ficam em pausa até voltar.
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Rails e jobs
|
|
2
|
+
|
|
3
|
+
Já tem specs no quadro. É aqui que elas se transformam em código. Um **rail** é a faixa que conduz uma spec por todo o pipeline — Architect → Developer → Reviewer → Ship — executando agentes de IA reais dentro da diretoria do seu projeto. Esta página cobre o lançamento de um rail, a fila de jobs e como acompanhar o trabalho a acontecer ao vivo.
|
|
4
|
+
|
|
5
|
+
## O que é um rail
|
|
6
|
+
|
|
7
|
+
Imagine o seu ecrã dividido em dois:
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
SpecsBoard (esquerda) Rails (direita)
|
|
11
|
+
───────────────── ─────────────────
|
|
12
|
+
#1 Login flow ─┐
|
|
13
|
+
#2 Webhook retry │ arrastar para
|
|
14
|
+
#3 Cost limits │ ────────────► Rail 1 ▶ Play
|
|
15
|
+
#4 Audit log │
|
|
16
|
+
└────────────► Rail 2 ▶ Play
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Um rail é uma **faixa de execução**. Arrasta um cartão de spec do SpecsBoard para um rail e depois carrega em **▶ Play**. O rail lança o pipeline e trabalha a spec de ponta a ponta, mesmo na diretoria de trabalho do seu projeto — editando ficheiros, correndo testes, tudo.
|
|
20
|
+
|
|
21
|
+
Pode ter vários rails para organizar o trabalho em faixas com nome (uma para a feature em que está focado, outra em fila atrás dela). Mais sobre múltiplos rails e batches em [Batch implement e multi-feature](batch-implement-and-multi-feature).
|
|
22
|
+
|
|
23
|
+
## Lançar um rail sobre uma spec
|
|
24
|
+
|
|
25
|
+
1. **Arraste um cartão de spec** do SpecsBoard para um rail. O ID da spec aparece na lista de specs do rail. (Prefere não arrastar? Use o popover **Mover para um rail** no cartão de spec — mostra um ponto de estado por rail para que não largue trabalho numa faixa ocupada.)
|
|
26
|
+
2. **Escolha um modo** se quiser algo diferente do default — o controlo segmentado no cabeçalho do rail oferece `Implement`, `Batch` e (apenas rails Claude) `Ultra`.
|
|
27
|
+
3. **Carregue em ▶ Play.**
|
|
28
|
+
|
|
29
|
+
É só isto. O rail arranca um processo de CLI de IA no seu projeto e inicia o pipeline.
|
|
30
|
+
|
|
31
|
+
### O que há no cabeçalho de um rail
|
|
32
|
+
|
|
33
|
+
| Controlo | O que faz |
|
|
34
|
+
|---------|--------------|
|
|
35
|
+
| **Pílula de estado** | `idle`, `running` ou `failed`. Não há um "completed" separado — um rail volta a `idle` quando o seu job termina sem problemas. |
|
|
36
|
+
| **Lista de specs** | Os IDs atribuídos a este rail. Arraste mais para dentro, arraste para fora para os desligar. |
|
|
37
|
+
| **Controlo de modo** | `Implement` / `Batch` / `Ultra` — veja a tabela abaixo. Guardado por rail. |
|
|
38
|
+
| **Seletor de perfil** | Que perfil de agentes corre (apenas rails Claude). Só aparece quando o projeto tem pelo menos um perfil. |
|
|
39
|
+
| **Seletor de motor** | Que fornecedor instalado corre este rail — Claude, Codex ou Gemini. Só aparece quando o projeto tem mais do que um fornecedor. Veja [Escolher um motor por rail](picking-an-engine-per-rail). |
|
|
40
|
+
| **▶ Play / ■ Stop** | Iniciar ou cancelar. |
|
|
41
|
+
|
|
42
|
+
### Os três modos de rail
|
|
43
|
+
|
|
44
|
+
| Modo | Comando | O que faz |
|
|
45
|
+
|------|---------|--------------|
|
|
46
|
+
| **Implement** | `/specrails:implement` | Um único job que cobre todas as specs do rail. Corre o pipeline completo Architect → Developer → Reviewer → Ship. O default do dia a dia. |
|
|
47
|
+
| **Batch** | `/specrails:batch-implement` | Um único job que trabalha as specs do rail sequencialmente, em ondas que respeitam as dependências. Ideal para várias specs relacionadas. |
|
|
48
|
+
| **Ultra** | Ultracode | O Claude implementa cada spec de forma autónoma, **ignorando** o pipeline. Um job independente por spec. Só Claude. |
|
|
49
|
+
|
|
50
|
+
O Ultra é o caso à parte: salta a cadeia de agentes e entrega ao Claude a spec em bruto para trabalhar com as suas ferramentas nativas. É aberto, por isso carregar em Play abre primeiro uma confirmação, e um seletor de modelo por rail deixa-o escolher Haiku / Sonnet / Opus. Só aparece quando o motor do rail é o Claude.
|
|
51
|
+
|
|
52
|
+
## A fila de jobs
|
|
53
|
+
|
|
54
|
+
Sempre que carrega em Play, a execução do rail torna-se um **job**. A regra mais importante para interiorizar:
|
|
55
|
+
|
|
56
|
+
> **Um job de cada vez, por projeto.** Cada projeto tem uma única fila. Dentro de um projeto, só um job de rail corre de cada vez — os restantes ficam em fila atrás dele e arrancam automaticamente à medida que se libertam slots.
|
|
57
|
+
|
|
58
|
+
Isto surpreende quem adiciona três rails à espera de que corram em paralelo. Não correm — não dentro do mesmo projeto. Adicionar rails *organiza* o seu trabalho em faixas; não faz com que essas faixas corram em simultâneo.
|
|
59
|
+
|
|
60
|
+
**O paralelismo real é entre projetos.** Cada projeto tem a sua fila independente, por isso um rail no Projeto A e um rail no Projeto B correm ao mesmo tempo sem disputar recursos. Quer mais throughput? Abra mais projetos.
|
|
61
|
+
|
|
62
|
+
Não há um botão global de concorrência para afinar. O único limitador automático é baseado no orçamento: se definiu um orçamento diário (do projeto ou da app), a fila pausa automaticamente assim que o gasto desse dia atinge o limite.
|
|
63
|
+
|
|
64
|
+
## Acompanhar a execução
|
|
65
|
+
|
|
66
|
+
Encontra todos os jobs em **Jobs**, na barra lateral direita do projeto — uma lista de cartões, do mais recente para o mais antigo. Cada cartão mostra um selo de estado, o selo do perfil, um selo de prioridade, a duração, o custo e o comando lançado. Por cima da lista:
|
|
67
|
+
|
|
68
|
+
- **Chips de filtro por estado** — mostram apenas os jobs num dado estado.
|
|
69
|
+
- **Filtro por intervalo de datas** — restringe a uma janela temporal.
|
|
70
|
+
- **Comparar** — escolhe dois jobs e vê-os lado a lado.
|
|
71
|
+
|
|
72
|
+
Clique em qualquer cartão para abrir a **vista de detalhe do job**, onde vivem o log em streaming ao vivo e as métricas ao vivo. É a próxima página: [A vista de detalhe do job](the-job-detail-view).
|
|
73
|
+
|
|
74
|
+
## Cancelar um job
|
|
75
|
+
|
|
76
|
+
Carregue em **■ Stop** no cabeçalho do rail. A app envia `SIGTERM` ao subprocesso, espera **5 segundos** por uma saída limpa e depois faz `SIGKILL`. Nada fica criado pela metade.
|
|
77
|
+
|
|
78
|
+
## Se um rail não arrancar
|
|
79
|
+
|
|
80
|
+
Se escolher um motor cuja CLI não está instalada na sua máquina, o lançamento **falha de imediato** em vez de iniciar um job partido — nada é criado. Instale a CLI do fornecedor em falta ([Usar o Codex](../integrations/using-codex), [Usar o Gemini](../integrations/using-gemini)) e lance de novo. A falta de Claude ou Codex devolve uma mensagem precisa "*<provider> CLI not found*"; a falta de Gemini mostra hoje um erro de lançamento genérico, mas o resultado é o mesmo.
|
|
81
|
+
|
|
82
|
+
## Parar tudo
|
|
83
|
+
|
|
84
|
+
Se algo parecer errado:
|
|
85
|
+
|
|
86
|
+
- **Um rail** — carregue em **■ Stop** no seu cabeçalho.
|
|
87
|
+
- **Auto-pausa por orçamento** — defina um orçamento diário e a fila pausa-se a si própria quando o gasto desse dia atinge o limite.
|
|
88
|
+
- **Tudo** — feche a app desktop, ou execute `specrails-desktop stop`.
|
|
89
|
+
|
|
90
|
+
## Para onde ir a seguir
|
|
91
|
+
|
|
92
|
+
- [A vista de detalhe do job](the-job-detail-view) — fases, métricas ao vivo, cartões de ticket.
|
|
93
|
+
- [Batch implement e multi-feature](batch-implement-and-multi-feature) — correr várias specs ao mesmo tempo.
|
|
94
|
+
- [Escolher um motor por rail](picking-an-engine-per-rail) — Claude vs Codex vs Gemini.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# A vista de detalhe do job
|
|
2
|
+
|
|
3
|
+
Clique em qualquer cartão de job na página **Jobs** e chega aqui: o cockpit de uma única execução de rail. Foi construída em torno de uma promessa — **os números ao vivo que vê são reais, nunca estimativas.** Esta página percorre as fases, as métricas ao vivo e os cartões de ticket.
|
|
4
|
+
|
|
5
|
+
## O layout
|
|
6
|
+
|
|
7
|
+
Dois painéis ficam por cima do log completo em streaming:
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
┌─────────────────────────────────────────────┐
|
|
11
|
+
│ Cabeçalho de estado (ícone · duração · …) │
|
|
12
|
+
├─────────────────────────────────────────────┤
|
|
13
|
+
│ Cabeçalho de tickets ( #12 #14 #15 ) │
|
|
14
|
+
├─────────────────────────────────────────────┤
|
|
15
|
+
│ │
|
|
16
|
+
│ Log em streaming (auto-scroll · pesquisa) │
|
|
17
|
+
│ │
|
|
18
|
+
└─────────────────────────────────────────────┘
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Fases do pipeline
|
|
22
|
+
|
|
23
|
+
Para os jobs `Implement` e `Batch`, a execução percorre as fases definidas pelo slash command — por default:
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
Architect ──► Developer ──► Reviewer ──► Ship
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Cada fase é um agente especializado que o motor do rail invoca na diretoria do seu projeto:
|
|
30
|
+
|
|
31
|
+
| Fase | Agente | O que faz |
|
|
32
|
+
|-------|-------|--------------|
|
|
33
|
+
| **Architect** | `sr-architect` | Planeia a implementação. |
|
|
34
|
+
| **Developer** | `sr-developer` | Escreve o código. |
|
|
35
|
+
| **Reviewer** | `sr-reviewer` | Revê o resultado. |
|
|
36
|
+
| **Ship** | (varia) | Finalização: testes, commit, rascunho de PR. |
|
|
37
|
+
|
|
38
|
+
Que agente trata de cada fase é decidido pelo **perfil de agentes** do projeto. O trio base (`sr-architect`, `sr-developer`, `sr-reviewer`) está sempre presente; as regras de encaminhamento de um perfil podem acrescentar agentes ou trocar qual deles corre uma fase. A barra de progresso das fases só aparece quando o comando define mesmo fases — os jobs Ultracode (que ignoram o pipeline) não mostram nenhuma.
|
|
39
|
+
|
|
40
|
+
## Métricas ao vivo — honestas por princípio
|
|
41
|
+
|
|
42
|
+
O cabeçalho de estado é a manchete. Mostra um ícone de estado, uma linha de atividade a descrever o que o job está a fazer *neste momento*, uma contagem dos passos dados e uma fila de métricas:
|
|
43
|
+
|
|
44
|
+
| Métrica | Quando vê o valor real |
|
|
45
|
+
|--------|------------------------------|
|
|
46
|
+
| **Duração** | **Ao vivo.** Um contador de 1 segundo vai subindo enquanto o job corre — este é o único número genuinamente ao vivo. |
|
|
47
|
+
| **Turnos** | Derivados incrementalmente dos eventos de assistant transmitidos à medida que chegam. |
|
|
48
|
+
| **Tokens** | Agregados incrementalmente a partir do mesmo stream (tolerante a eventos sem campos de uso). |
|
|
49
|
+
| **Custo** | Mostrado como `—` até o job terminar, e depois revelado como o valor autoritativo `total_cost_usd`. |
|
|
50
|
+
|
|
51
|
+
O princípio de design: **nada de números aproximados ou estimados a meio da execução.** A duração é real porque não passa de um relógio. Turnos e tokens são acumulados a partir de atividade realmente transmitida. O custo *não* é estimado de propósito durante a execução — aparece como pendente e só passa ao seu valor final e autoritativo quando o fornecedor o reporta na saída do job. Se um número parecer estar à espera, é intencional — está a ver a verdade, não uma projeção.
|
|
52
|
+
|
|
53
|
+
A etiqueta e o ícone do cabeçalho correspondem ao estado do job, e o painel é renderizado para jobs `running`, `completed` e `failed` por igual — por isso a vista de detalhe de um job terminado mostra as mesmas métricas congeladas nos seus valores finais.
|
|
54
|
+
|
|
55
|
+
## Os cartões de ticket
|
|
56
|
+
|
|
57
|
+
O **cabeçalho de tickets** fica entre o cabeçalho de estado e o log. É um cartão de identidade premium que mostra um chip por cada spec que o job tocou — correspondidos a partir do comando lançado, por isso reflete exatamente quais os tickets de que esta execução tratou.
|
|
58
|
+
|
|
59
|
+
- **2–3 tickets** — mostrados como uma lista de chips.
|
|
60
|
+
- **4 ou mais** — colapsam num modo compacto `+ N more` com um chevron para expandir, para o cabeçalho ficar arrumado.
|
|
61
|
+
|
|
62
|
+
Clicar num chip abre o detalhe dessa spec **por cima da página do job** — não perde o seu lugar nem muda de rota. É uma forma rápida de reler o que um job deve entregar enquanto o vê trabalhar. (Em ecrãs com largura de tablet pode até arrastar uma modal de ticket para o lado e comparar duas specs lado a lado.)
|
|
63
|
+
|
|
64
|
+
## O log em streaming
|
|
65
|
+
|
|
66
|
+
Por baixo dos painéis fica o log completo da execução, transmitido em tempo real pelo WebSocket:
|
|
67
|
+
|
|
68
|
+
- **Auto-scroll** mantém o output mais recente à vista (faça scroll para cima e pausa, para poder ler).
|
|
69
|
+
- **Pesquisa** para saltar para uma frase.
|
|
70
|
+
- **Copiar** para agarrar o log inteiro.
|
|
71
|
+
|
|
72
|
+
Esta é a verdade crua do que a IA está a fazer — cada chamada de ferramenta, cada edição de ficheiro, cada execução de teste.
|
|
73
|
+
|
|
74
|
+
## Exportação de diagnóstico
|
|
75
|
+
|
|
76
|
+
Se a [telemetria](../settings/customizing) estava ativada para o job, aparece um botão **Exportar diagnóstico** no cabeçalho. Descarrega um ZIP que contém:
|
|
77
|
+
|
|
78
|
+
- `job-metadata.json` — comando, estado, perfil, plugins.
|
|
79
|
+
- `telemetry.ndjson` — sinais OTLP/JSON não comprimidos.
|
|
80
|
+
- `logs.txt` — o log completo em streaming.
|
|
81
|
+
- `summary.md` — destaques legíveis por humanos.
|
|
82
|
+
- `profile.json`, `plugins.json` — snapshots exatos do que correu (quando presentes).
|
|
83
|
+
|
|
84
|
+
Útil para partilhar uma execução com um colega de equipa, ou para abrir um relatório de bug preciso.
|
|
85
|
+
|
|
86
|
+
## Para onde ir a seguir
|
|
87
|
+
|
|
88
|
+
- [Rails e jobs](rails-and-jobs) — lançar e enfileirar.
|
|
89
|
+
- [Batch implement e multi-feature](batch-implement-and-multi-feature) — muitas specs, ondas de dependências.
|
|
90
|
+
- [Acompanhar o custo](../analytics/tracking-cost) — transformar os custos por job em analytics do projeto.
|