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 @@
|
|
|
1
|
+
var e={configureAgents:`Configurar agentes de {{provider}}`,configureSubtitle:`Escolha que agentes instalar e como executá-los.`,tabs:{agents:`Agentes`,models:`Modelos`},skipForNow:`Saltar por agora`,install:`Instalar`,nextProvider:`Seguinte: {{provider}}`,installingProvider:`A instalar {{provider}}…`,installingSpecrails:`A instalar o specrails...`,installingFromTemplates:`A instalar agentes a partir de templates`,waitingForOutput:`A aguardar output...`,checkpoints:{baseInstall:`Instalação base`,agentSelection:`Seleção de agentes`,agentGeneration:`Geração de agentes`},steps:{configure:`Configurar`},summary:{agents:`Agentes`,agentSkills:`Skills de agentes`,skills:`Skills`,openspecSkills:`Skills OpenSpec`,legacyRemoved_one:`Removido {{count}} comando legado <code>/specrails:*</code>`,legacyRemoved_other:`Removidos {{count}} comandos legados <code>/specrails:*</code>`},complete:{welcome:`Bem-vindo ao <spec>spec</spec><rails>rails</rails>`,configured:`<strong>{{projectName}}</strong> está agora configurado com fluxos de desenvolvimento assistidos por IA. Os seus agentes e comandos especializados estão prontos a usar.`,installedForEngines_one:`Instalado para {{count}} motor`,installedForEngines_other:`Instalado para {{count}} motores`,installed:`Instalado`,installFailed:`Falha na instalação`,learnMore:`Saiba como tirar o máximo partido do specrails:`,continueToProject:`Continuar para o projeto`,jira:{title:`Ligar um quadro Jira`,subtitle:`Opcional — apoie as specs deste projeto num quadro Jira. Também pode fazê-lo mais tarde nas Definições.`,configure:`Configurar Jira`,optional:`opcional`}},error:{title:`Falha na configuração`,skipSetup:`Saltar configuração`,prereqMissing:`A configuração do SpecRails precisa de Node.js, npm, npx e Git disponíveis no PATH antes de poder instalar este projeto.`,prereqRetryHint:`Instale as ferramentas em falta, reinicie o Specrails e tente a configuração novamente.`}},t={title:`Adicionar projeto`,description:`Registe um diretório de projeto para o gerir a partir do Specrails.`,noProviderDetected:`Nenhuma CLI de IA detetada. Instale primeiro o Claude Code ou a Codex CLI.`,pathLabel:`Caminho do projeto`,pathPlaceholder:`/Users/eu/o-meu-projeto`,pathHint:`Caminho absoluto para a raiz do projeto`,browseForFolder:`Procurar pasta`,selectProjectFolder:`Selecionar a pasta do projeto`,nameLabel:`Nome a apresentar`,optional:`(opcional)`,namePlaceholder:`O Meu Projeto`,nameHint:`Por omissão, o nome do diretório`,providersLabel:`Fornecedores de IA`,notFound:`não encontrado`,multiProviderHint:`Ambos os motores serão configurados. O primeiro é o predefinido do projeto. Não pode ser alterado após a criação.`,singleProviderHint:`Não pode ser alterado depois de o projeto ser criado.`,adding:`A adicionar...`,submit:`Adicionar projeto`,toolsRequired_one:`{{tools}} é necessário para adicionar um projeto`,toolsRequired_other:`{{tools}} são necessários para adicionar um projeto`,errors:{pathRequired:`O caminho do projeto é obrigatório`,selectProvider:`Selecione pelo menos um fornecedor de IA`,addFailed:`Falha ao adicionar o projeto`},toasts:{registered:`Projeto "{{name}}" registado`}},n={corruptedBundle:`bundle corrompido — reinstale a app`,notInstalled:`não instalado`,failedToExecute:`encontrado mas falhou ao executar`,failedToExecuteAt:`encontrado em {{path}} mas falhou ao executar`,failedToExecuteWithError:`encontrado mas falhou ao executar ({{error}})`,failedToExecuteAtWithError:`encontrado em {{path}} mas falhou ao executar ({{error}})`,needsMinimum:`{{version}} encontrado — requer {{minVersion}}+`,unknownVersion:`desconhecida`,installedLabel:`instalado`,verifyError:`Não foi possível verificar as ferramentas de desenvolvimento localmente — a instalação validará.`,allDetected:`Todas as ferramentas necessárias detetadas`,bundleCorruptedTitle:`Bundle da app corrompido`,toolsRequired_one:`{{count}} ferramenta de desenvolvimento necessária`,toolsRequired_other:`{{count}} ferramentas de desenvolvimento necessárias`,reinstallHint:`Reinstale a app Specrails para restaurar as ferramentas incluídas.`,installMissingHint:`Instale as ferramentas em falta para continuar.`,moreInfo:`Mais informações`,bundledBadge:`incluído`},r={title:`Instalar ferramentas de desenvolvimento`,description:`O SpecRails precisa de Node.js, npm, npx e Git no PATH. Escolha o snippet para o seu SO, execute-o e clique em "Já instalei, verificar novamente".`,darwin:{intro:`O Homebrew instala ambas as ferramentas numa só linha. Se não tiver o brew, use os downloads oficiais.`,installNodeGit:`Instalar Node.js e Git via Homebrew`},win32:{intro:`O winget vem incluído no Windows 11 e nas versões recentes do Windows 10. Abra o PowerShell ou o Terminal e execute:`,installNode:`Instalar Node.js LTS`,installGit:`Instalar Git`,note:`Após a instalação, reinicie o Specrails para que o Windows atualize o PATH.`},linux:{intro:`Use o gestor de pacotes da sua distribuição:`,debian:`Debian / Ubuntu`,fedora:`Fedora / RHEL`},links:{nodeOfficial:`Node.js (oficial)`,gitOfficial:`Git (oficial)`,gitWindows:`Git para Windows (oficial)`},showOtherPlatforms:`Mostrar outras plataformas`,hideOtherPlatforms:`Ocultar outras plataformas`,recheck:`Já instalei, verificar novamente`,diagnostics:{copy:`Copiar diagnóstico`,copied:`Diagnóstico copiado`,failed:`Falha ao copiar`},corrupted:{title:`Bundle da app corrompido`,description:`Não foi possível verificar uma ou mais ferramentas incluídas (Node.js, Git).`,body:`Esta ferramenta é distribuída com a app Specrails e não pode ser instalada separadamente. Se vir esta mensagem, o bundle da app pode estar corrompido. Reinstale o Specrails.`}},i={title:`Progresso da configuração`,progress:`{{done}} de {{total}} concluídos`,rawLog_one:`Log em bruto ({{count}} linha)`,rawLog_other:`Log em bruto ({{count}} linhas)`},a={title:`Assistente de configuração`,subtitle:`Responda às perguntas para configurar o seu projeto`,settingUp:`A configurar o seu projeto...`,placeholder:`Escreva uma resposta...`,keyboardHint:`Enter para enviar, Shift+Enter para nova linha`},o={title:`Bem-vindo ao <spec>spec</spec><rails>rails</rails>`,description:`O Specrails gere vários projetos a partir de uma única interface. Adicione o seu primeiro projeto para começar.`,addFirstProject:`Adicione o seu primeiro projeto`,jiraHint:`Ligue cada projeto ao seu próprio quadro Jira — as specs ficam sincronizadas nos dois sentidos.`},s=JSON.parse(`{"productTour":"Tour do produto","stepCount":"Passo {{current}} de {{total}}","goToStep":"Ir para o passo {{step}}: {{label}}","stepLabel":"Passo {{step}}","dontShowAgain":"Não mostrar novamente","skipTour":"Saltar tour","getStarted":"Começar","flow":{"addSpec":"Adicionar Spec","dropInRail":"Largar num Rail","hitPlay":"Carregar em Play","ship":"Ship","architect":"Arquiteto","developer":"Developer","reviewer":"Revisor"},"language":{"nav":"Idioma","title":"Escolha o seu idioma","subtitle":"O Specrails fala a sua língua","intro":"Escolha o idioma em que quer a interface. Aplica-se de imediato — incluindo este tour.","note":"Pode mudá-lo a qualquer momento em Definições → Idioma."},"theme":{"nav":"Tema","title":"Escolha o seu visual","subtitle":"Temas incorporados, aplicados de imediato","intro":"Escolha o aspeto do Specrails — o tema aplica-se assim que clica.","note":"Pode mudá-lo a qualquer momento em Definições → Aspeto."},"welcome":{"nav":"Boas-vindas","title":"Bem-vindo ao Specrails","subtitle":"O seu cockpit local para entregar software com agentes de IA","intro":"O Specrails transforma uma ideia em código entregue — e permite-lhe <b>ver, orientar e confiar</b> em cada passo. Esboce uma spec a conversar com uma IA, largue-a num rail de execução e carregue em Play. O pipeline trata da arquitetura, implementação, revisão e do pull request, transmitindo o seu trabalho em direto durante todo o processo.","coreLoopLabel":"O ciclo central","flowCaption":"Cada spec flui automaticamente por <b>Arquiteto → Developer → Revisor → Ship</b>.","localNote":"<b>100% local · um único utilizador · sem contas.</b> Tudo corre na sua máquina. O seu código nunca sai do portátil a menos que <i>você</i> lance um agente sobre ele.","tourNote":"Este tour rápido percorre tudo o que a aplicação consegue fazer — cerca de um minuto."},"authorSpecs":{"nav":"Criar specs","title":"Transforme ideias em specs","subtitle":"Seis formas de capturar exatamente o que quer construir","intro":"Uma <b>spec</b> é uma descrição do trabalho que quer ver feito. Crie-a como for mais conveniente no momento — de uma linha rápida a uma conversa completa com a IA.","exploreLabel":"Explore — conversar","exploreBody":"Descreva o que quer num chat; um rascunho em direto é reconstruído a cada turno. Um slider de presets ajusta quanto contexto do projeto a IA vê — desde apenas a sua mensagem até à base de código completa mais os seus servidores MCP.","quickLabel":"Quick — num só passo","quickBody":"Já sabe o que quer? Gere uma spec completa num único turno. Opcionalmente, enriqueça-a com uma Contract Layer: nomes exatos, formatos de dados, invariantes e uma lista de ficheiros a tocar, para que os agentes não reinventem nada.","websiteLabel":"A partir de um website","websiteBody":"Abre um browser embutido. Selecione um elemento com o cursor ou desenhe um retângulo, e a captura de ecrã, o DOM e o CSS aplicado tornam-se anexos. A versão desktop inclui o seu próprio Chromium, por isso funciona offline.","smashLabel":"Faça SMASH a um épico grande","smashBody":"Exploda uma spec grande numa família de sub-specs mais pequenas com um clique — cada filha leva um resumo curto no seu cartão.","draftsLabel":"Rascunhos e Continuar a Editar","draftsBody":"Estacione uma exploração em curso como ticket de rascunho e retome-a mais tarde; reabra qualquer spec no Explore para continuar a refiná-la.","compareLabel":"Comparar lado a lado","compareBody":"Arraste uma spec até à borda do ecrã e desliza um seletor com as suas outras specs — reveja duas em conjunto, ao estilo tablet."},"rails":{"nav":"Executar em rails","title":"Execute o pipeline em rails","subtitle":"Organize specs em faixas e depois lance os agentes","intro":"O lado direito do Dashboard são os seus <b>Rails</b> — faixas de execução. Arraste um cartão de spec para um rail e prima <play>▶ Play</play> para lançar um job de implementação.","jobLabel":"O que cada job executa","flowCaption":"Cada fase transmite os seus logs em direto enquanto trabalha.","modeLabel":"Escolha como um rail corre","modeBody":"Cada rail escolhe um modo: <b>Implement</b> (o pipeline estruturado completo), <b>Batch</b> (várias specs em sequência) ou <b>Ultracode</b> (o Claude trabalha de forma autónoma, sem pipeline fixo).","profilesLabel":"Perfis de agentes","profilesBody":"Um catálogo declarativo por projeto que decide quais agentes correm e que modelo cada um usa — escolhido por rail e congelado por job para que o trabalho concorrente fique isolado.","jobDetailLabel":"Detalhe do job em direto","jobDetailBody":"Cada job mostra um cabeçalho com a identidade do ticket, um contador de duração em direto e contagens de turnos/tokens em execução, com o custo definitivo resolvido no fim.","isolationLabel":"Muitos projetos, isolados","isolationBody":"Cada projeto tem a sua própria base de dados e fila de jobs. Execute projetos diferentes ao mesmo tempo e alterne entre eles na barra lateral esquerda — a sua posição é memorizada por projeto."},"providers":{"nav":"O seu agente","title":"Traga o seu próprio agente","subtitle":"Claude Code e Codex, como motores de primeira classe","intro":"A aplicação trata o <b>Claude Code</b> e a <b>Codex CLI</b> como motores intercambiáveis por trás de um único contrato. Um projeto pode instalar um ou ambos — a escolha é feita na instalação.","table":{"capability":"Capacidade","streamingResume":"Streaming e retoma de sessão","native":"Nativo","costReporting":"Reporte de custos","providerBilled":"Faturado pelo fornecedor","estimated":"Estimado (~)","telemetry":"Telemetria (OTEL)","synthesized":"Sintetizada","agentProfiles":"Perfis de agentes"},"calloutLabel":"Quando ambos estão instalados","calloutBody":"Escolha o motor <b>por spec, por rail ou por lançamento de terminal</b>. A aplicação memoriza a sua última escolha por projeto. O custo do Codex é estimado a partir de uma tabela de preços local e sempre sinalizado com um <mono>~</mono>."},"cost":{"nav":"Acompanhar custos","title":"Acompanhe cada cêntimo","subtitle":"Cada invocação faturável, registada e visualizada","intro":"Cada invocação de IA — em rails, Quick, Explore, edições de IA, SMASH e resumos de ficheiros — é registada para <b>Claude e Codex</b>. Acabou-se adivinhar quanto custam os agentes.","analyticsLabel":"Página de Analytics","analyticsBody":"Um hero de burn-rate, cronologia diária, top tickets, divisão por modelo e um scatter de custo vs. turnos. Filtre por período (7d / 30d / 90d / Tudo) e por superfície.","perTicketLabel":"Gastos por ticket","perTicketBody":"O detalhe de cada spec mostra quanto custou e quantos turnos demorou, com deep link para Analytics filtrado para esse ticket.","honestLabel":"Números honestos","honestBody":"O custo do Claude é o valor faturado pelo fornecedor; o do Codex é estimado e sinalizado com <mono>~</mono>. Os totais de tokens incluem os níveis de cache, por isso os valores batem mesmo certo.","budgetsLabel":"Orçamentos e alertas","budgetsBody":"Defina um orçamento diário e um alerta de custo por job; a aplicação pausa automaticamente a fila quando ultrapassa o limite. Exporte tudo para CSV ou JSON."},"workspace":{"nav":"Espaço de trabalho","title":"Faça dele o seu espaço de trabalho","subtitle":"Tudo o que precisa sem sair da janela","terminalLabel":"Painel de terminal","terminalBody":"Um terminal a sério ao estilo do VS Code na parte inferior (<mod>{{mod}}</mod> <j>J</j>) — renderização WebGL, pesquisa, imagens inline, arrastar e largar caminhos e integração com a shell. Até 10 sessões por projeto.","codeLabel":"Explorador de código","codeBody":"Uma árvore de ficheiros só de leitura e um visualizador Monaco com resumos de IA em linguagem simples e chips de proveniência “tocado por IA”, para que qualquer pessoa acompanhe o que mudou e porquê.","integrationsLabel":"Integrações","integrationsBody":"Um marketplace por projeto de integrações MCP — a navegação semântica de código Serena vem incluída. As instalações são aditivas: adicionar uma nunca perturba outra.","themesLabel":"Temas","themesBody":"Cinco temas incorporados — specrails (predefinido), dracula, aurora-light, obsidian-dark e matrix — aplicados antes de a UI desenhar, por isso não há flash. Mude-os em Definições → Aspeto.","chatsLabel":"Chats minimizáveis","chatsBody":"Estacione uma sessão de Explore ou AI Edit num chip da dock e retome-a mais tarde — nunca se perde entre refreshes ou trocas de projeto.","desktopLabel":"Desktop ou browser","desktopBody":"Use o Specrails no browser, ou descarregue a app desktop assinada (macOS e Windows) que inclui o seu próprio servidor e runtimes."},"companion":{"nav":"Companion móvel","title":"Leve o Specrails consigo","subtitle":"Specrails Companion — os seus pipelines, no seu telemóvel","intro":"O <b>Specrails Companion</b> é uma app web em specrails.dev/companion-app — abra-a no seu telemóvel (ou adicione-a ao ecrã principal) para navegar pelo quadro de specs, lançar e parar rails, acompanhar os logs dos jobs em direto e espreitar as analytics. Sem instalação, sem loja de apps.","localLabel":"100% local, como tudo o resto","localBody":"O seu telemóvel liga-se diretamente a este computador — ponto a ponto e cifrado (WebRTC). Sem relay na cloud, sem conta, e o seu código nunca sai dos seus dispositivos.","downloadLabel":"Abra-a no seu telemóvel","downloadHint":"Leia o código com a câmara do seu telemóvel ou abra specrails.dev/companion-app no respetivo navegador.","open":"Abrir o Specrails Companion","pairLabel":"Emparelhar demora dez segundos","pairBody":"No seu telemóvel, abra specrails.dev/companion-app e, aqui, vá a Definições → Companion móvel → Emparelhar companion web e siga os passos no ecrã."},"moveFast":{"nav":"Avançar depressa","title":"Avance à velocidade do pensamento","subtitle":"Primeiro o teclado, em todo o lado","paletteLabel":"Paleta de comandos","paletteShortcut":"<f>Prima</f> <mod>{{mod}}</mod> <m>+</m> <k>K</k> <m>em qualquer lado</m>","paletteBody":"Mude de projeto, execute comandos de spec, salte para qualquer página e encontre jobs recentes — tudo com pesquisa difusa.","terminalLabel":"Painel de terminal","terminalBody":"Alterne com <mod>{{mod}}</mod> <j>J</j>.","shortcutsLabel":"Todos os atalhos","shortcutsBody":"Prima <q>?</q> para ver a folha de consulta completa.","chatLabel":"Barra lateral de chat","chatBody":"Alterne a barra lateral direita com <mod>{{mod}}</mod> <bkey>B</bkey>.","projectsLabel":"Barra lateral de projetos","projectsBody":"Alterne a barra lateral Arc esquerda com <alt>{{alt}}</alt> <mod>{{mod}}</mod> <bkey>B</bkey>.","outro":"<b>E o tour fica por aqui.</b> Adicione um projeto na barra lateral esquerda e entregue a sua primeira spec. Pode reabrir esta apresentação a qualquer momento nas Definições."},"jira":{"label":"Integração com o Jira","body":"Apoie qualquer projeto num <b>quadro Jira</b> — cada spec torna-se um ticket Jira, sincronizado nos dois sentidos: o estado segue o rail e é publicado um comentário quando um job termina. Configure por projeto ao adicioná-lo, ou a qualquer momento nas Definições."}}`),c={wizard:e,addProject:t,prerequisites:n,instructions:r,checkpoints:i,setupChat:a,welcome:o,onboarding:s};export{t as addProject,i as checkpoints,c as default,r as instructions,s as onboarding,n as prerequisites,a as setupChat,o as welcome,e as wizard};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={configureAgents:`Configura gli agenti {{provider}}`,configureSubtitle:`Scegli quali agenti installare e come eseguirli.`,tabs:{agents:`Agenti`,models:`Modelli`},skipForNow:`Salta per ora`,install:`Installa`,nextProvider:`Avanti: {{provider}}`,installingProvider:`Installazione di {{provider}}…`,installingSpecrails:`Installazione di specrails...`,installingFromTemplates:`Installazione degli agenti dai template`,waitingForOutput:`In attesa dell'output...`,checkpoints:{baseInstall:`Installazione di base`,agentSelection:`Selezione degli agenti`,agentGeneration:`Generazione degli agenti`},steps:{configure:`Configura`},summary:{agents:`Agenti`,agentSkills:`Skill degli agenti`,skills:`Skill`,openspecSkills:`Skill OpenSpec`,legacyRemoved_one:`Rimosso {{count}} comando legacy <code>/specrails:*</code>`,legacyRemoved_other:`Rimossi {{count}} comandi legacy <code>/specrails:*</code>`},complete:{welcome:`Benvenuto in <spec>spec</spec><rails>rails</rails>`,configured:`<strong>{{projectName}}</strong> è ora configurato con workflow di sviluppo basati sull'IA. I tuoi agenti specializzati e i comandi sono pronti all'uso.`,installedForEngines_one:`Installato per {{count}} engine`,installedForEngines_other:`Installato per {{count}} engine`,installed:`Installato`,installFailed:`Installazione non riuscita`,learnMore:`Scopri come ottenere il massimo da specrails:`,continueToProject:`Continua al progetto`,jira:{title:`Collega una board Jira`,subtitle:`Facoltativo — appoggia le spec di questo progetto a una board Jira. Puoi farlo anche più tardi nelle Impostazioni.`,configure:`Configura Jira`,optional:`facoltativo`}},error:{title:`Setup non riuscito`,skipSetup:`Salta il setup`,prereqMissing:`Il setup di SpecRails richiede Node.js, npm, npx e Git disponibili sul PATH prima di poter installare questo progetto.`,prereqRetryHint:`Installa gli strumenti mancanti, riavvia Specrails e poi riprova il setup.`}},t={title:`Aggiungi progetto`,description:`Registra una directory di progetto per gestirla da Specrails.`,noProviderDetected:`Nessuna CLI IA rilevata. Installa prima Claude Code o Codex CLI.`,pathLabel:`Percorso del progetto`,pathPlaceholder:`/Users/me/my-project`,pathHint:`Percorso assoluto alla root del progetto`,browseForFolder:`Sfoglia cartelle`,selectProjectFolder:`Seleziona la cartella del progetto`,nameLabel:`Nome visualizzato`,optional:`(facoltativo)`,namePlaceholder:`Il mio progetto`,nameHint:`Per impostazione predefinita usa il nome della directory`,providersLabel:`Provider IA`,notFound:`non trovato`,multiProviderHint:`Verranno configurati entrambi gli engine. Il primo è il predefinito del progetto. Non modificabile dopo la creazione.`,singleProviderHint:`Non modificabile dopo la creazione del progetto.`,adding:`Aggiunta in corso...`,submit:`Aggiungi progetto`,toolsRequired_one:`{{tools}} è richiesto per aggiungere un progetto`,toolsRequired_other:`{{tools}} sono richiesti per aggiungere un progetto`,errors:{pathRequired:`Il percorso del progetto è obbligatorio`,selectProvider:`Seleziona almeno un provider IA`,addFailed:`Aggiunta del progetto non riuscita`},toasts:{registered:`Progetto "{{name}}" registrato`}},n={corruptedBundle:`bundle corrotto — reinstalla l'app`,notInstalled:`non installato`,failedToExecute:`trovato ma esecuzione non riuscita`,failedToExecuteAt:`trovato in {{path}} ma esecuzione non riuscita`,failedToExecuteWithError:`trovato ma esecuzione non riuscita ({{error}})`,failedToExecuteAtWithError:`trovato in {{path}} ma esecuzione non riuscita ({{error}})`,needsMinimum:`{{version}} trovata — serve {{minVersion}}+`,unknownVersion:`sconosciuta`,installedLabel:`installato`,verifyError:`Impossibile verificare localmente gli strumenti di sviluppo — l'installazione li convaliderà.`,allDetected:`Tutti gli strumenti richiesti rilevati`,bundleCorruptedTitle:`Bundle dell'app corrotto`,toolsRequired_one:`{{count}} strumento di sviluppo richiesto`,toolsRequired_other:`{{count}} strumenti di sviluppo richiesti`,reinstallHint:`Reinstalla l'app Specrails per ripristinare gli strumenti inclusi.`,installMissingHint:`Installa gli strumenti mancanti per continuare.`,moreInfo:`Maggiori informazioni`,bundledBadge:`incluso`},r={title:`Installa gli strumenti di sviluppo`,description:`SpecRails richiede Node.js, npm, npx e Git sul PATH. Scegli lo snippet per il tuo sistema operativo, eseguilo e poi clicca "L'ho installato, ricontrolla".`,darwin:{intro:`Con Homebrew ottieni entrambi gli strumenti in una riga. Se non hai brew, usa i download ufficiali.`,installNodeGit:`Installa Node.js e Git con Homebrew`},win32:{intro:`Winget è incluso in Windows 11 e nelle versioni recenti di Windows 10. Apri PowerShell o il Terminale ed esegui:`,installNode:`Installa Node.js LTS`,installGit:`Installa Git`,note:`Dopo l'installazione, riavvia Specrails così Windows aggiorna il PATH.`},linux:{intro:`Usa il package manager della tua distro:`,debian:`Debian / Ubuntu`,fedora:`Fedora / RHEL`},links:{nodeOfficial:`Node.js (ufficiale)`,gitOfficial:`Git (ufficiale)`,gitWindows:`Git per Windows (ufficiale)`},showOtherPlatforms:`Mostra altre piattaforme`,hideOtherPlatforms:`Nascondi altre piattaforme`,recheck:`L'ho installato, ricontrolla`,diagnostics:{copy:`Copia diagnostica`,copied:`Diagnostica copiata`,failed:`Copia non riuscita`},corrupted:{title:`Bundle dell'app corrotto`,description:`Non è stato possibile verificare uno o più strumenti inclusi (Node.js, Git).`,body:`Questo strumento è incluso nell'app Specrails e non può essere installato separatamente. Se vedi questo messaggio, il bundle dell'app potrebbe essere corrotto. Reinstalla Specrails.`}},i={title:`Avanzamento del setup`,progress:`{{done}} di {{total}} completati`,rawLog_one:`Log grezzo ({{count}} riga)`,rawLog_other:`Log grezzo ({{count}} righe)`},a={title:`Assistente di setup`,subtitle:`Rispondi ai prompt per configurare il progetto`,settingUp:`Configurazione del progetto in corso...`,placeholder:`Scrivi una risposta...`,keyboardHint:`Invio per inviare, Shift+Invio per andare a capo`},o={title:`Benvenuto in <spec>spec</spec><rails>rails</rails>`,description:`Specrails gestisce più progetti da un'unica interfaccia. Aggiungi il tuo primo progetto per iniziare.`,addFirstProject:`Aggiungi il tuo primo progetto`,jiraHint:`Collega ogni progetto alla sua board Jira — le spec restano sincronizzate in entrambe le direzioni.`},s=JSON.parse(`{"productTour":"Tour del prodotto","stepCount":"Passo {{current}} di {{total}}","goToStep":"Vai al passo {{step}}: {{label}}","stepLabel":"Passo {{step}}","dontShowAgain":"Non mostrare più","skipTour":"Salta il tour","getStarted":"Inizia","flow":{"addSpec":"Aggiungi Spec","dropInRail":"Trascina su un Rail","hitPlay":"Premi Play","ship":"Ship","architect":"Architetto","developer":"Developer","reviewer":"Reviewer"},"language":{"nav":"Lingua","title":"Scegli la tua lingua","subtitle":"Specrails parla la tua lingua","intro":"Seleziona la lingua in cui vuoi usare l'interfaccia. Si applica all'istante — questo tour incluso.","note":"Puoi cambiarla in qualsiasi momento da Impostazioni → Lingua."},"theme":{"nav":"Tema","title":"Scegli il tuo stile","subtitle":"Temi integrati, applicati all'istante","intro":"Scegli l'aspetto di Specrails — il tema si applica appena fai clic.","note":"Puoi cambiarlo in qualsiasi momento da Impostazioni → Aspetto."},"welcome":{"nav":"Benvenuto","title":"Benvenuto in Specrails","subtitle":"La tua cabina di pilotaggio locale per rilasciare software con agenti IA","intro":"Specrails trasforma un'idea in codice rilasciato — e ti permette di <b>vedere, guidare e verificare</b> ogni passo. Abbozza una spec parlando con un'IA, trascinala su un rail di esecuzione e premi Play. La pipeline gestisce architettura, implementazione, review e la pull request, trasmettendo il proprio lavoro in diretta per tutto il tempo.","coreLoopLabel":"Il ciclo fondamentale","flowCaption":"Ogni spec passa automaticamente per <b>Architect → Developer → Reviewer → Ship</b>.","localNote":"<b>100% locale · utente singolo · nessun account.</b> Tutto gira sulla tua macchina. Il tuo codice non lascia mai il laptop a meno che non sia <i>tu</i> a lanciarci sopra un agente.","tourNote":"Questo breve tour mostra tutto ciò che l'app sa fare — circa un minuto."},"authorSpecs":{"nav":"Scrivi le spec","title":"Trasforma le idee in spec","subtitle":"Sei modi per catturare esattamente cosa vuoi costruire","intro":"Una <b>spec</b> è una descrizione del lavoro che vuoi far svolgere. Scrivila come preferisci sul momento — da una riga veloce a una conversazione completa con l'IA.","exploreLabel":"Explore — conversa","exploreBody":"Descrivi cosa vuoi in una chat; una bozza live si ricostruisce a ogni turno. Uno slider di preset regola quanto contesto del progetto vede l'IA — dal solo tuo messaggio fino all'intero codebase più i tuoi server MCP.","quickLabel":"Quick — in un colpo solo","quickBody":"Sai già cosa vuoi? Genera una spec completa in un solo turno. Facoltativamente arricchiscila con un Contract Layer: nomi esatti, forme dei dati, invarianti e un elenco dei file da toccare, così gli agenti non reinventano nulla.","websiteLabel":"Da un sito web","websiteBody":"Apre un browser integrato. Seleziona un elemento al passaggio del mouse o trascina un rettangolo: screenshot, DOM e CSS applicato diventano allegati. La build desktop include il proprio Chromium, quindi funziona offline.","smashLabel":"SMASH su una grande epic","smashBody":"Esplodi una spec grande in una famiglia di sotto-spec più piccole con un clic — ogni figlia porta un breve riassunto sulla sua card.","draftsLabel":"Bozze e ripresa della modifica","draftsBody":"Parcheggia un'esplorazione in corso come ticket in bozza e riprendila più tardi; riapri qualsiasi spec in Explore per continuare a rifinirla.","compareLabel":"Confronta fianco a fianco","compareBody":"Trascina una spec verso il bordo dello schermo e scivola dentro un selettore delle altre spec — esaminane due insieme, in stile tablet."},"rails":{"nav":"Esegui sui rail","title":"Esegui la pipeline sui rail","subtitle":"Organizza le spec in corsie, poi lancia gli agenti","intro":"Il lato destro della Dashboard sono i tuoi <b>Rail</b> — corsie di esecuzione. Trascina una card spec su un rail e premi <play>▶ Play</play> per lanciare un job di implementazione.","jobLabel":"Cosa esegue ogni job","flowCaption":"Ogni fase trasmette i propri log in diretta mentre lavora.","modeLabel":"Scegli come gira un rail","modeBody":"Ogni rail sceglie una modalità: <b>Implement</b> (la pipeline strutturata completa), <b>Batch</b> (più spec in sequenza) o <b>Ultracode</b> (Claude lavora in autonomia, senza pipeline fissa).","profilesLabel":"Profili agente","profilesBody":"Un catalogo dichiarativo per progetto che decide quali agenti girano e quale modello usa ciascuno — scelto per rail e congelato per job, così il lavoro concorrente resta isolato.","jobDetailLabel":"Dettaglio job in diretta","jobDetailBody":"Ogni job mostra un header con l'identità del ticket, un contatore di durata in tempo reale e conteggi correnti di turni e token, con il costo definitivo risolto alla chiusura.","isolationLabel":"Tanti progetti, isolati","isolationBody":"Ogni progetto ha il proprio database e la propria coda di job. Esegui progetti diversi contemporaneamente e passa dall'uno all'altro dalla sidebar sinistra — la tua posizione viene ricordata per progetto."},"providers":{"nav":"Il tuo agente","title":"Porta il tuo agente","subtitle":"Claude Code e Codex come engine di prima classe","intro":"L'app tratta <b>Claude Code</b> e <b>Codex CLI</b> come engine intercambiabili dietro un unico contratto. Un progetto può installarne uno o entrambi — la scelta avviene al momento dell'installazione.","table":{"capability":"Capacità","streamingResume":"Streaming e ripresa della sessione","native":"Nativo","costReporting":"Report dei costi","providerBilled":"Fatturato dal provider","estimated":"Stimato (~)","telemetry":"Telemetria (OTEL)","synthesized":"Sintetizzata","agentProfiles":"Profili agente"},"calloutLabel":"Quando sono installati entrambi","calloutBody":"Scegli l'engine <b>per spec, per rail o per avvio del terminale</b>. L'app ricorda la tua ultima scelta per progetto. Il costo di Codex è stimato da un tariffario locale e sempre contrassegnato con <mono>~</mono>."},"cost":{"nav":"Monitora i costi","title":"Traccia ogni centesimo","subtitle":"Ogni invocazione fatturabile, registrata e visualizzata","intro":"Ogni invocazione IA — su rail, Quick, Explore, modifiche AI, SMASH e riassunti dei file — viene registrata per <b>Claude e Codex</b>. Mai più tirare a indovinare quanto costano gli agenti.","analyticsLabel":"Pagina Analytics","analyticsBody":"Un hero con il burn-rate, timeline giornaliera, ticket principali, ripartizione per modello e uno scatter costo-vs-turni. Filtra per periodo (7d / 30d / 90d / Tutto) e per superficie.","perTicketLabel":"Spesa per ticket","perTicketBody":"Il dettaglio di ogni spec mostra quanto è costata e quanti turni ha richiesto, con un link diretto ad Analytics filtrato su quel ticket.","honestLabel":"Numeri onesti","honestBody":"Il costo di Claude è la cifra fatturata dal provider; quello di Codex è stimato e contrassegnato con <mono>~</mono>. I totali dei token includono i livelli di cache, quindi i conti tornano davvero.","budgetsLabel":"Budget e avvisi","budgetsBody":"Imposta un budget giornaliero e un avviso di costo per job; l'app mette in pausa automaticamente la coda quando superi la soglia. Esporta tutto in CSV o JSON."},"workspace":{"nav":"Workspace","title":"Rendilo il tuo workspace","subtitle":"Tutto ciò che ti serve senza lasciare la finestra","terminalLabel":"Pannello terminale","terminalBody":"Un vero terminale in stile VS Code in basso (<mod>{{mod}}</mod> <j>J</j>) — rendering WebGL, ricerca, immagini inline, trascinamento di percorsi e integrazione con la shell. Fino a 10 sessioni per progetto.","codeLabel":"Esploratore di codice","codeBody":"Un albero dei file in sola lettura e un visualizzatore Monaco con riassunti IA in linguaggio semplice e chip di provenienza “toccato dall'IA”, così chiunque può seguire cosa è cambiato e perché.","integrationsLabel":"Integrazioni","integrationsBody":"Un marketplace per progetto di integrazioni MCP — la navigazione semantica del codice di Serena è inclusa. Le installazioni sono additive: aggiungerne una non disturba mai le altre.","themesLabel":"Temi","themesBody":"Cinque temi integrati — specrails (predefinito), dracula, aurora-light, obsidian-dark e matrix — applicati prima che la UI venga disegnata, quindi nessun flash. Cambiali in Impostazioni → Aspetto.","chatsLabel":"Chat minimizzabili","chatsBody":"Parcheggia una sessione Explore o AI Edit in una chip del dock e riprendila più tardi — mai persa tra refresh o cambi di progetto.","desktopLabel":"Desktop o browser","desktopBody":"Esegui Specrails nel browser, oppure scarica l'app desktop firmata (macOS e Windows) che include il proprio server e i runtime."},"companion":{"nav":"Companion mobile","title":"Porta Specrails con te","subtitle":"Specrails Companion — le tue pipeline, sul tuo telefono","intro":"<b>Specrails Companion</b> è una web app su specrails.dev/companion-app — aprila sul tuo telefono (o aggiungila alla schermata Home) per sfogliare la board delle spec, lanciare e fermare i rail, seguire i log dei job in diretta e dare un'occhiata alle Analytics. Nessuna installazione, nessuno app store.","localLabel":"100% locale, come tutto il resto","localBody":"Il tuo telefono si connette direttamente a questo computer — peer-to-peer e cifrato (WebRTC). Nessun relay cloud, nessun account, e il tuo codice non lascia mai i tuoi dispositivi.","downloadLabel":"Aprila sul tuo telefono","downloadHint":"Scansiona il codice con la fotocamera del telefono, oppure apri specrails.dev/companion-app nel suo browser.","open":"Apri Specrails Companion","pairLabel":"L'associazione richiede dieci secondi","pairBody":"Sul tuo telefono apri specrails.dev/companion-app, poi qui vai su Impostazioni → Companion mobile → Associa companion web e segui i passaggi a schermo."},"moveFast":{"nav":"Vai veloce","title":"Muoviti alla velocità del pensiero","subtitle":"Keyboard-first, ovunque","paletteLabel":"Palette dei comandi","paletteShortcut":"<f>Premi</f> <mod>{{mod}}</mod> <m>+</m> <k>K</k> <m>ovunque</m>","paletteBody":"Cambia progetto, esegui comandi spec, salta a qualsiasi pagina e trova i job recenti — tutto con ricerca fuzzy.","terminalLabel":"Pannello terminale","terminalBody":"Attiva/disattiva con <mod>{{mod}}</mod> <j>J</j>.","shortcutsLabel":"Tutte le scorciatoie","shortcutsBody":"Premi <q>?</q> per vedere il cheat-sheet completo.","chatLabel":"Sidebar della chat","chatBody":"Attiva/disattiva la sidebar destra con <mod>{{mod}}</mod> <bkey>B</bkey>.","projectsLabel":"Sidebar dei progetti","projectsBody":"Attiva/disattiva la sidebar Arc sinistra con <alt>{{alt}}</alt> <mod>{{mod}}</mod> <bkey>B</bkey>.","outro":"<b>Il tour finisce qui.</b> Aggiungi un progetto dalla sidebar sinistra e rilascia la tua prima spec. Puoi riaprire questa guida in qualsiasi momento dalle Impostazioni."},"jira":{"label":"Integrazione Jira","body":"Appoggia qualsiasi progetto a una <b>board Jira</b> — ogni spec diventa un ticket Jira, sincronizzato in entrambe le direzioni: lo stato segue il rail e viene pubblicato un commento al termine di un job. Configuralo per progetto quando lo aggiungi, o in qualsiasi momento nelle Impostazioni."}}`),c={wizard:e,addProject:t,prerequisites:n,instructions:r,checkpoints:i,setupChat:a,welcome:o,onboarding:s};export{t as addProject,i as checkpoints,c as default,r as instructions,s as onboarding,n as prerequisites,a as setupChat,o as welcome,e as wizard};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={configureAgents:`Configurer les agents {{provider}}`,configureSubtitle:`Choisissez quels agents installer et comment les exécuter.`,tabs:{agents:`Agents`,models:`Modèles`},skipForNow:`Ignorer pour l'instant`,install:`Installer`,nextProvider:`Suivant : {{provider}}`,installingProvider:`Installation de {{provider}}…`,installingSpecrails:`Installation de specrails...`,installingFromTemplates:`Installation des agents à partir des templates`,waitingForOutput:`En attente de sortie...`,checkpoints:{baseInstall:`Installation de base`,agentSelection:`Sélection des agents`,agentGeneration:`Génération des agents`},steps:{configure:`Configurer`},summary:{agents:`Agents`,agentSkills:`Skills d'agent`,skills:`Skills`,openspecSkills:`Skills OpenSpec`,legacyRemoved_one:`{{count}} commande legacy <code>/specrails:*</code> supprimée`,legacyRemoved_other:`{{count}} commandes legacy <code>/specrails:*</code> supprimées`},complete:{welcome:`Bienvenue dans <spec>spec</spec><rails>rails</rails>`,configured:`<strong>{{projectName}}</strong> est maintenant configuré avec des workflows de développement pilotés par l'IA. Vos agents spécialisés et vos commandes sont prêts à l'emploi.`,installedForEngines_one:`Installé pour {{count}} moteur`,installedForEngines_other:`Installé pour {{count}} moteurs`,installed:`Installé`,installFailed:`Échec de l'installation`,learnMore:`Apprenez à tirer le meilleur de specrails :`,continueToProject:`Continuer vers le projet`,jira:{title:`Connecter un tableau Jira`,subtitle:`Facultatif — adossez les specs de ce projet à un tableau Jira. Vous pourrez aussi le faire plus tard dans les Paramètres.`,configure:`Configurer Jira`,optional:`facultatif`}},error:{title:`Échec de la configuration`,skipSetup:`Ignorer la configuration`,prereqMissing:`La configuration de SpecRails a besoin de Node.js, npm, npx et Git disponibles sur le PATH pour pouvoir installer ce projet.`,prereqRetryHint:`Installez les outils manquants, redémarrez Specrails, puis relancez la configuration.`}},t={title:`Ajouter un projet`,description:`Enregistrez un répertoire de projet pour le gérer depuis Specrails.`,noProviderDetected:`Aucune CLI d'IA détectée. Installez d'abord Claude Code ou Codex CLI.`,pathLabel:`Chemin du projet`,pathPlaceholder:`/Users/moi/mon-projet`,pathHint:`Chemin absolu vers la racine du projet`,browseForFolder:`Parcourir les dossiers`,selectProjectFolder:`Sélectionner le dossier du projet`,nameLabel:`Nom d'affichage`,optional:`(facultatif)`,namePlaceholder:`Mon projet`,nameHint:`Par défaut, le nom du répertoire`,providersLabel:`Fournisseurs d'IA`,notFound:`introuvable`,multiProviderHint:`Les deux moteurs seront configurés. Le premier est le moteur par défaut du projet. Non modifiable après la création.`,singleProviderHint:`Non modifiable après la création du projet.`,adding:`Ajout...`,submit:`Ajouter le projet`,toolsRequired_one:`{{tools}} est requis pour ajouter un projet`,toolsRequired_other:`{{tools}} sont requis pour ajouter un projet`,errors:{pathRequired:`Le chemin du projet est requis`,selectProvider:`Sélectionnez au moins un fournisseur d'IA`,addFailed:`Échec de l'ajout du projet`},toasts:{registered:`Projet « {{name}} » enregistré`}},n={corruptedBundle:`bundle corrompu — réinstallez l'application`,notInstalled:`non installé`,failedToExecute:`trouvé mais impossible à exécuter`,failedToExecuteAt:`trouvé à {{path}} mais impossible à exécuter`,failedToExecuteWithError:`trouvé mais impossible à exécuter ({{error}})`,failedToExecuteAtWithError:`trouvé à {{path}} mais impossible à exécuter ({{error}})`,needsMinimum:`{{version}} trouvé — nécessite {{minVersion}}+`,unknownVersion:`inconnue`,installedLabel:`installé`,verifyError:`Impossible de vérifier les outils de développement en local — l'installation s'en chargera.`,allDetected:`Tous les outils requis sont détectés`,bundleCorruptedTitle:`Bundle de l'application corrompu`,toolsRequired_one:`{{count}} outil de développement requis`,toolsRequired_other:`{{count}} outils de développement requis`,reinstallHint:`Réinstallez l'application Specrails pour restaurer les outils embarqués.`,installMissingHint:`Installez les outils manquants pour continuer.`,moreInfo:`Plus d'infos`,bundledBadge:`embarqué`},r={title:`Installer les outils de développement`,description:`SpecRails a besoin de Node.js, npm, npx et Git sur le PATH. Choisissez le snippet pour votre OS, exécutez-le, puis cliquez sur « Je l'ai installé, revérifier ».`,darwin:{intro:`Homebrew installe les deux outils en une seule ligne. Si vous n'avez pas brew, utilisez les téléchargements officiels.`,installNodeGit:`Installer Node.js et Git via Homebrew`},win32:{intro:`Winget est fourni avec Windows 11 et les versions récentes de Windows 10. Ouvrez PowerShell ou le Terminal et exécutez :`,installNode:`Installer Node.js LTS`,installGit:`Installer Git`,note:`Après l'installation, redémarrez Specrails pour que Windows actualise le PATH.`},linux:{intro:`Utilisez le gestionnaire de paquets de votre distribution :`,debian:`Debian / Ubuntu`,fedora:`Fedora / RHEL`},links:{nodeOfficial:`Node.js (officiel)`,gitOfficial:`Git (officiel)`,gitWindows:`Git pour Windows (officiel)`},showOtherPlatforms:`Afficher les autres plateformes`,hideOtherPlatforms:`Masquer les autres plateformes`,recheck:`Je l'ai installé, revérifier`,diagnostics:{copy:`Copier les diagnostics`,copied:`Diagnostics copiés`,failed:`Échec de la copie`},corrupted:{title:`Bundle de l'application corrompu`,description:`Un ou plusieurs outils embarqués (Node.js, Git) n'ont pas pu être vérifiés.`,body:`Cet outil est embarqué avec l'application Specrails et ne peut pas être installé séparément. Si vous voyez ce message, le bundle de l'application est peut-être corrompu. Veuillez réinstaller Specrails.`}},i={title:`Progression de la configuration`,progress:`{{done}} sur {{total}} terminés`,rawLog_one:`Log brut ({{count}} ligne)`,rawLog_other:`Log brut ({{count}} lignes)`},a={title:`Assistant de configuration`,subtitle:`Répondez aux invites pour configurer votre projet`,settingUp:`Configuration de votre projet...`,placeholder:`Saisissez une réponse...`,keyboardHint:`Entrée pour envoyer, Maj+Entrée pour une nouvelle ligne`},o={title:`Bienvenue dans <spec>spec</spec><rails>rails</rails>`,description:`Specrails gère plusieurs projets depuis une seule interface. Ajoutez votre premier projet pour commencer.`,addFirstProject:`Ajouter votre premier projet`,jiraHint:`Connectez chaque projet à son propre tableau Jira — les specs restent synchronisées dans les deux sens.`},s=JSON.parse(`{"productTour":"Visite guidée","stepCount":"Étape {{current}} sur {{total}}","goToStep":"Aller à l'étape {{step}} : {{label}}","stepLabel":"Étape {{step}}","dontShowAgain":"Ne plus afficher","skipTour":"Passer la visite","getStarted":"Commencer","flow":{"addSpec":"Ajouter une spec","dropInRail":"Déposer dans un rail","hitPlay":"Appuyer sur Play","ship":"Livrer","architect":"Architecte","developer":"Développeur","reviewer":"Relecteur"},"language":{"nav":"Langue","title":"Choisissez votre langue","subtitle":"Specrails parle votre langue","intro":"Choisissez la langue de l'interface. Elle s'applique instantanément — cette visite comprise.","note":"Vous pouvez en changer à tout moment dans Paramètres → Langue."},"theme":{"nav":"Thème","title":"Trouvez votre style","subtitle":"Des thèmes intégrés, appliqués instantanément","intro":"Choisissez l'apparence de Specrails — le thème s'applique dès que vous cliquez.","note":"Vous pouvez en changer à tout moment dans Paramètres → Apparence."},"welcome":{"nav":"Bienvenue","title":"Bienvenue dans Specrails","subtitle":"Votre cockpit local pour livrer du logiciel avec des agents IA","intro":"Specrails transforme une idée en code livré — et vous laisse <b>voir, piloter et vérifier</b> chaque étape. Rédigez une spec en discutant avec une IA, déposez-la sur un rail d'exécution et appuyez sur Play. Le pipeline gère l'architecture, l'implémentation, la revue et la pull request, en streamant son travail en direct du début à la fin.","coreLoopLabel":"La boucle de base","flowCaption":"Chaque spec passe automatiquement par <b>Architecte → Développeur → Relecteur → Livraison</b>.","localNote":"<b>100 % local · mono-utilisateur · sans compte.</b> Tout s'exécute sur votre machine. Votre code ne quitte jamais le laptop, sauf si <i>vous</i> lancez un agent dessus.","tourNote":"Cette visite rapide passe en revue tout ce que l'application sait faire — environ une minute."},"authorSpecs":{"nav":"Rédiger des specs","title":"Transformez vos idées en specs","subtitle":"Six façons de capturer exactement ce que vous voulez construire","intro":"Une <b>spec</b> est une description du travail à réaliser. Rédigez-la comme le moment s'y prête — de la simple phrase à la conversation complète avec l'IA.","exploreLabel":"Explore — conversez","exploreBody":"Décrivez ce que vous voulez dans un chat ; un brouillon vivant se reconstruit à chaque tour. Un curseur de presets règle la quantité de contexte projet que voit l'IA — de votre message seul jusqu'au codebase complet plus vos serveurs MCP.","quickLabel":"Quick — en un coup","quickBody":"Vous savez déjà ce que vous voulez ? Générez une spec complète en un seul tour. Enrichissez-la éventuellement d'un Contract Layer : noms exacts, formes de données, invariants et liste des fichiers touchés, pour que les agents ne réinventent rien.","websiteLabel":"Depuis un site web","websiteBody":"Ouvre un navigateur embarqué. Survolez un élément pour le sélectionner ou tracez un rectangle : la capture d'écran, le DOM et le CSS appliqué deviennent des pièces jointes. La version desktop embarque son propre Chromium, donc ça fonctionne hors ligne.","smashLabel":"SMASH pour les grosses epics","smashBody":"Éclatez une grande spec en une famille de sous-specs plus petites en un clic — chaque enfant porte un court résumé sur sa carte.","draftsLabel":"Brouillons & reprise d'édition","draftsBody":"Mettez une exploration en cours de côté comme ticket brouillon et reprenez-la plus tard ; rouvrez n'importe quelle spec dans Explore pour continuer à l'affiner.","compareLabel":"Comparer côte à côte","compareBody":"Glissez une spec vers le bord de l'écran et un sélecteur de vos autres specs apparaît — passez-en deux en revue ensemble, façon tablette."},"rails":{"nav":"Exécuter sur des rails","title":"Lancez le pipeline sur des rails","subtitle":"Organisez les specs en couloirs, puis lancez les agents","intro":"La partie droite du Dashboard, ce sont vos <b>Rails</b> — des couloirs d'exécution. Glissez une carte de spec sur un rail et appuyez sur <play>▶ Play</play> pour lancer un job d'implémentation.","jobLabel":"Ce que chaque job exécute","flowCaption":"Chaque phase streame ses logs en direct pendant qu'elle travaille.","modeLabel":"Choisissez comment un rail s'exécute","modeBody":"Chaque rail choisit un mode : <b>Implement</b> (le pipeline structuré complet), <b>Batch</b> (plusieurs specs à la suite) ou <b>Ultracode</b> (Claude travaille en autonomie, sans pipeline fixe).","profilesLabel":"Profils d'agents","profilesBody":"Un catalogue déclaratif par projet qui décide quels agents s'exécutent et quel modèle chacun utilise — choisi par rail et snapshotté par job pour que les travaux concurrents restent isolés.","jobDetailLabel":"Détail de job en direct","jobDetailBody":"Chaque job affiche un en-tête d'identité de ticket, un chrono de durée en direct et des compteurs de tours/tokens, avec le coût définitif résolu à la fin.","isolationLabel":"Plusieurs projets, isolés","isolationBody":"Chaque projet a sa propre base de données et sa propre file de jobs. Exécutez plusieurs projets en même temps et passez de l'un à l'autre depuis la barre latérale gauche — votre position est mémorisée par projet."},"providers":{"nav":"Votre agent","title":"Apportez votre propre agent","subtitle":"Claude Code et Codex, des moteurs de premier rang","intro":"L'application traite <b>Claude Code</b> et <b>Codex CLI</b> comme des moteurs interchangeables derrière un même contrat. Un projet peut en installer un ou les deux — le choix se fait à l'installation.","table":{"capability":"Capacité","streamingResume":"Streaming & reprise de session","native":"Natif","costReporting":"Suivi des coûts","providerBilled":"Facturé par le fournisseur","estimated":"Estimé (~)","telemetry":"Télémétrie (OTEL)","synthesized":"Synthétisée","agentProfiles":"Profils d'agents"},"calloutLabel":"Quand les deux sont installés","calloutBody":"Choisissez le moteur <b>par spec, par rail ou par lancement de terminal</b>. L'application mémorise votre dernier choix par projet. Le coût de Codex est estimé à partir d'une grille tarifaire locale et toujours signalé par un <mono>~</mono>."},"cost":{"nav":"Suivre les coûts","title":"Suivez chaque centime","subtitle":"Chaque invocation facturable, enregistrée et visualisée","intro":"Chaque invocation d'IA — rails, Quick, Explore, éditions IA, SMASH et résumés de fichiers — est enregistrée pour <b>Claude comme pour Codex</b>. Fini de deviner ce que coûtent les agents.","analyticsLabel":"Page Analytics","analyticsBody":"Un hero de burn-rate, une timeline quotidienne, le top des tickets, la répartition par modèle et un nuage coût vs tours. Filtrez par période (7 j / 30 j / 90 j / Tout) et par surface.","perTicketLabel":"Dépenses par ticket","perTicketBody":"Le détail de chaque spec montre ce qu'elle a coûté et combien de tours il a fallu, avec un lien direct vers Analytics filtré sur ce ticket.","honestLabel":"Des chiffres honnêtes","honestBody":"Le coût Claude est le montant facturé par le fournisseur ; celui de Codex est estimé et signalé par un <mono>~</mono>. Les totaux de tokens incluent les niveaux de cache, donc les chiffres se recoupent vraiment.","budgetsLabel":"Budgets & alertes","budgetsBody":"Définissez un budget quotidien et une alerte de coût par job ; l'application met automatiquement la file en pause quand vous franchissez la limite. Exportez tout en CSV ou JSON."},"workspace":{"nav":"Espace de travail","title":"Faites-en votre espace de travail","subtitle":"Tout ce qu'il vous faut sans quitter la fenêtre","terminalLabel":"Panneau de terminal","terminalBody":"Un vrai terminal façon VS Code en bas (<mod>{{mod}}</mod> <j>J</j>) — rendu WebGL, recherche, images inline, glisser-déposer de chemins et intégration shell. Jusqu'à 10 sessions par projet.","codeLabel":"Explorateur de code","codeBody":"Une arborescence de fichiers en lecture seule et un viewer Monaco avec des résumés IA en langage clair et des puces de provenance « touché par l'IA », pour que chacun puisse suivre ce qui a changé et pourquoi.","integrationsLabel":"Intégrations","integrationsBody":"Une marketplace d'intégrations MCP par projet — la navigation sémantique de code Serena est incluse. Les installations sont additives : en ajouter une ne perturbe jamais les autres.","themesLabel":"Thèmes","themesBody":"Cinq thèmes intégrés — specrails (par défaut), dracula, aurora-light, obsidian-dark et matrix — appliqués avant le rendu de l'UI, donc sans flash. Changez-les dans Paramètres → Apparence.","chatsLabel":"Chats minimisables","chatsBody":"Rangez une session Explore ou Édition IA dans une puce du dock et reprenez-la plus tard — jamais perdue, même après un rechargement ou un changement de projet.","desktopLabel":"Desktop ou navigateur","desktopBody":"Lancez Specrails dans votre navigateur, ou prenez l'application desktop signée (macOS & Windows) qui embarque son propre serveur et ses runtimes."},"companion":{"nav":"Compagnon mobile","title":"Emportez Specrails avec vous","subtitle":"Specrails Companion — vos pipelines, dans votre poche","intro":"<b>Specrails Companion</b> est une application web disponible sur specrails.dev/companion-app — ouvrez-la sur votre téléphone (ou ajoutez-la à votre écran d'accueil) pour parcourir le tableau des specs, lancer et arrêter des rails, suivre les logs des jobs en direct et jeter un œil aux analytics. Aucune installation, aucun app store.","localLabel":"100 % local, comme tout le reste","localBody":"Votre téléphone se connecte directement à cet ordinateur — en pair-à-pair et chiffré (WebRTC). Pas de relais cloud, pas de compte, et votre code ne quitte jamais vos appareils.","downloadLabel":"Ouvrez-la sur votre téléphone","downloadHint":"Scannez le code avec l'appareil photo de votre téléphone, ou ouvrez specrails.dev/companion-app dans son navigateur.","open":"Ouvrir Specrails Companion","pairLabel":"L'appairage prend dix secondes","pairBody":"Sur votre téléphone, ouvrez specrails.dev/companion-app, puis ici allez dans Paramètres → Compagnon mobile → Appairer le compagnon web et suivez les étapes à l'écran."},"moveFast":{"nav":"Aller vite","title":"Avancez à la vitesse de la pensée","subtitle":"Le clavier d'abord, partout","paletteLabel":"Palette de commandes","paletteShortcut":"<f>Appuyez sur</f> <mod>{{mod}}</mod> <m>+</m> <k>K</k> <m>n'importe où</m>","paletteBody":"Changez de projet, lancez des commandes de spec, sautez vers n'importe quelle page et retrouvez les jobs récents — le tout en recherche floue.","terminalLabel":"Panneau de terminal","terminalBody":"Basculez avec <mod>{{mod}}</mod> <j>J</j>.","shortcutsLabel":"Tous les raccourcis","shortcutsBody":"Appuyez sur <q>?</q> pour voir l'antisèche complète.","chatLabel":"Barre latérale de chat","chatBody":"Basculez la barre latérale droite avec <mod>{{mod}}</mod> <bkey>B</bkey>.","projectsLabel":"Barre latérale des projets","projectsBody":"Basculez la barre latérale Arc de gauche avec <alt>{{alt}}</alt> <mod>{{mod}}</mod> <bkey>B</bkey>.","outro":"<b>La visite est terminée.</b> Ajoutez un projet depuis la barre latérale gauche et livrez votre première spec. Vous pouvez rouvrir cette visite à tout moment depuis les Paramètres."},"jira":{"label":"Intégration Jira","body":"Adossez n'importe quel projet à un <b>tableau Jira</b> — chaque spec devient un ticket Jira, synchronisé dans les deux sens : le statut suit le rail et un commentaire est publié à la fin d'un job. Configurez-le par projet lors de l'ajout, ou à tout moment dans les Paramètres."}}`),c={wizard:e,addProject:t,prerequisites:n,instructions:r,checkpoints:i,setupChat:a,welcome:o,onboarding:s};export{t as addProject,i as checkpoints,c as default,r as instructions,s as onboarding,n as prerequisites,a as setupChat,o as welcome,e as wizard};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={configureAgents:`{{provider}} エージェントを設定`,configureSubtitle:`インストールするエージェントと実行方法を選択してください。`,tabs:{agents:`エージェント`,models:`モデル`},skipForNow:`今はスキップ`,install:`インストール`,nextProvider:`次へ: {{provider}}`,installingProvider:`{{provider}} をインストール中…`,installingSpecrails:`specrails をインストール中…`,installingFromTemplates:`テンプレートからエージェントをインストール中`,waitingForOutput:`出力を待機中…`,checkpoints:{baseInstall:`ベースインストール`,agentSelection:`エージェント選択`,agentGeneration:`エージェント生成`},steps:{configure:`設定`},summary:{agents:`エージェント`,agentSkills:`エージェントスキル`,skills:`スキル`,openspecSkills:`OpenSpec スキル`,legacyRemoved_one:`レガシーの <code>/specrails:*</code> コマンドを {{count}} 件削除しました`,legacyRemoved_other:`レガシーの <code>/specrails:*</code> コマンドを {{count}} 件削除しました`},complete:{welcome:`<spec>spec</spec><rails>rails</rails> へようこそ`,configured:`<strong>{{projectName}}</strong> に AI 駆動の開発ワークフローが設定されました。専用のエージェントとコマンドが利用できます。`,installedForEngines_one:`{{count}} 個のエンジンにインストールしました`,installedForEngines_other:`{{count}} 個のエンジンにインストールしました`,installed:`インストール済み`,installFailed:`インストールに失敗しました`,learnMore:`specrails を最大限に活用する方法:`,continueToProject:`プロジェクトへ進む`,jira:{title:`Jira ボードを接続`,subtitle:`任意 — このプロジェクトのスペックを Jira ボードで裏付けます。後で設定からも行えます。`,configure:`Jira を設定`,optional:`任意`}},error:{title:`セットアップに失敗しました`,skipSetup:`セットアップをスキップ`,prereqMissing:`SpecRails のセットアップには、PATH 上で利用可能な Node.js、npm、npx、Git が必要です。`,prereqRetryHint:`不足しているツールをインストールし、Specrails を再起動してからセットアップを再試行してください。`}},t={title:`プロジェクトを追加`,description:`プロジェクトディレクトリを登録して Specrails から管理します。`,noProviderDetected:`AI CLI が見つかりません。まず Claude Code または Codex CLI をインストールしてください。`,pathLabel:`プロジェクトパス`,pathPlaceholder:`/Users/me/my-project`,pathHint:`プロジェクトルートへの絶対パス`,browseForFolder:`フォルダを参照`,selectProjectFolder:`プロジェクトフォルダを選択`,nameLabel:`表示名`,optional:`(任意)`,namePlaceholder:`マイプロジェクト`,nameHint:`デフォルトはディレクトリ名`,providersLabel:`AI プロバイダー`,notFound:`見つかりません`,multiProviderHint:`両方のエンジンがセットアップされます。最初のものがプロジェクトのデフォルトです。作成後は変更できません。`,singleProviderHint:`プロジェクト作成後は変更できません。`,adding:`追加中…`,submit:`プロジェクトを追加`,toolsRequired_one:`プロジェクトの追加には {{tools}} が必要です`,toolsRequired_other:`プロジェクトの追加には {{tools}} が必要です`,errors:{pathRequired:`プロジェクトパスは必須です`,selectProvider:`AI プロバイダーを1つ以上選択してください`,addFailed:`プロジェクトの追加に失敗しました`},toasts:{registered:`プロジェクト「{{name}}」を登録しました`}},n={corruptedBundle:`バンドル破損 — アプリを再インストールしてください`,notInstalled:`未インストール`,failedToExecute:`見つかりましたが実行できませんでした`,failedToExecuteAt:`{{path}} に見つかりましたが実行できませんでした`,failedToExecuteWithError:`見つかりましたが実行できませんでした({{error}})`,failedToExecuteAtWithError:`{{path}} に見つかりましたが実行できませんでした({{error}})`,needsMinimum:`{{version}} が見つかりました — {{minVersion}} 以上が必要です`,unknownVersion:`不明`,installedLabel:`インストール済み`,verifyError:`開発者ツールをローカルで検証できませんでした — インストール時に検証されます。`,allDetected:`必要なツールはすべて検出されました`,bundleCorruptedTitle:`アプリバンドルが破損しています`,toolsRequired_one:`{{count}} 個の開発者ツールが必要です`,toolsRequired_other:`{{count}} 個の開発者ツールが必要です`,reinstallHint:`Specrails アプリを再インストールしてバンドルツールを復元してください。`,installMissingHint:`続行するには不足しているツールをインストールしてください。`,moreInfo:`詳細`,bundledBadge:`バンドル`},r={title:`開発者ツールをインストール`,description:`SpecRails には PATH 上の Node.js、npm、npx、Git が必要です。お使いの OS のスニペットを選んで実行し、「インストールしました。再チェック」をクリックしてください。`,darwin:{intro:`Homebrew なら1行で両方のツールをインストールできます。brew がない場合は公式ダウンロードを利用してください。`,installNodeGit:`Homebrew で Node.js と Git をインストール`},win32:{intro:`Winget は Windows 11 および最近の Windows 10 に同梱されています。PowerShell またはターミナルを開いて実行してください:`,installNode:`Node.js LTS をインストール`,installGit:`Git をインストール`,note:`インストール後、Windows が PATH を更新するように Specrails を再起動してください。`},linux:{intro:`ディストリビューションのパッケージマネージャーを使用してください:`,debian:`Debian / Ubuntu`,fedora:`Fedora / RHEL`},links:{nodeOfficial:`Node.js(公式)`,gitOfficial:`Git(公式)`,gitWindows:`Git for Windows(公式)`},showOtherPlatforms:`他のプラットフォームを表示`,hideOtherPlatforms:`他のプラットフォームを非表示`,recheck:`インストールしました。再チェック`,diagnostics:{copy:`診断情報をコピー`,copied:`診断情報をコピーしました`,failed:`コピーに失敗しました`},corrupted:{title:`アプリバンドルが破損しています`,description:`バンドルされたツール(Node.js、Git)の一部を検証できませんでした。`,body:`このツールは Specrails アプリにバンドルされており、個別にインストールできません。このメッセージが表示される場合、アプリバンドルが破損している可能性があります。Specrails を再インストールしてください。`}},i={title:`セットアップの進行状況`,progress:`{{done}} / {{total}} 完了`,rawLog_one:`生ログ({{count}} 行)`,rawLog_other:`生ログ({{count}} 行)`},a={title:`セットアップアシスタント`,subtitle:`プロンプトに応答してプロジェクトを設定します`,settingUp:`プロジェクトをセットアップ中…`,placeholder:`返信を入力…`,keyboardHint:`Enter で送信、Shift+Enter で改行`},o={title:`<spec>spec</spec><rails>rails</rails> へようこそ`,description:`Specrails は複数のプロジェクトを単一のインターフェースで管理します。最初のプロジェクトを追加して始めましょう。`,addFirstProject:`最初のプロジェクトを追加`,jiraHint:`各プロジェクトを専用の Jira ボードに接続 — スペックは双方向で同期され続けます。`},s=JSON.parse(`{"productTour":"プロダクトツアー","stepCount":"ステップ {{current}} / {{total}}","goToStep":"ステップ {{step}} へ移動: {{label}}","stepLabel":"ステップ {{step}}","dontShowAgain":"今後表示しない","skipTour":"ツアーをスキップ","getStarted":"始める","flow":{"addSpec":"スペックを追加","dropInRail":"レールにドロップ","hitPlay":"再生を押す","ship":"Ship","architect":"アーキテクト","developer":"デベロッパー","reviewer":"レビュアー"},"language":{"nav":"言語","title":"言語を選ぶ","subtitle":"Specrailsはあなたの言語に対応","intro":"インターフェースで使いたい言語を選んでください。即座に適用されます — このツアーも含めて。","note":"設定 → 言語でいつでも変更できます。"},"theme":{"nav":"テーマ","title":"好みの見た目を選ぶ","subtitle":"内蔵テーマを即座に適用","intro":"Specrailsの見た目を選びましょう — テーマはクリックした瞬間に適用されます。","note":"設定 → 外観でいつでも変更できます。"},"welcome":{"nav":"ようこそ","title":"Specrails へようこそ","subtitle":"AI エージェントでソフトウェアを出荷するためのローカルコックピット","intro":"Specrails はアイデアを出荷済みのコードに変えます — そのすべてのステップを<b>見て、操り、信頼</b>できます。AI と対話してスペックを下書きし、実行レールにドロップして再生を押すだけ。パイプラインがアーキテクチャ、実装、レビュー、プルリクエストまで処理し、その作業をライブでストリーミングします。","coreLoopLabel":"コアループ","flowCaption":"各スペックは <b>アーキテクト → デベロッパー → レビュアー → Ship</b> を自動で流れます。","localNote":"<b>100% ローカル · シングルユーザー · アカウント不要。</b>すべてあなたのマシン上で動作します。<i>あなた</i>がエージェントを起動しない限り、コードがラップトップの外に出ることはありません。","tourNote":"このクイックツアーではアプリの全機能を紹介します — 所要時間は約1分です。"},"authorSpecs":{"nav":"スペック作成","title":"アイデアをスペックに変える","subtitle":"作りたいものを正確に捉える6つの方法","intro":"<b>スペック</b>とは、実行してほしい作業の記述です。短い一文から AI との本格的な対話まで、その時々に合った方法で作成できます。","exploreLabel":"Explore — 対話する","exploreBody":"作りたいものをチャットで説明すると、ライブドラフトがターンごとに再構築されます。プリセットスライダーで AI に見せるプロジェクトコンテキストの量を調整できます — メッセージのみから、コードベース全体 + MCP サーバーまで。","quickLabel":"Quick — 一発生成","quickBody":"作りたいものが明確なら、1ターンで完全なスペックを生成できます。オプションで Contract Layer によるエンリッチも可能: 正確な名前、データ形状、不変条件、変更ファイルリストにより、エージェントが車輪の再発明をしません。","websiteLabel":"ウェブサイトから","websiteBody":"埋め込みブラウザが開きます。要素をホバー選択するか矩形をドラッグすると、スクリーンショット、DOM、適用された CSS が添付ファイルになります。デスクトップ版は独自の Chromium を同梱しているのでオフラインでも動作します。","smashLabel":"大きなエピックを SMASH","smashBody":"大きなスペックをワンクリックで小さなサブスペック群に分解します — 各子スペックのカードには短い要約が付きます。","draftsLabel":"下書きと編集の再開","draftsBody":"進行中の探索を下書きチケットとして保存し、後で再開できます。どのスペックも Explore で開き直して改良を続けられます。","compareLabel":"並べて比較","compareBody":"スペックを画面の端にドラッグすると、他のスペックのピッカーがスライドインします — タブレット風に2つを並べてレビューできます。"},"rails":{"nav":"レールで実行","title":"パイプラインをレールで実行","subtitle":"スペックをレーンに整理してエージェントを起動","intro":"ダッシュボードの右側が<b>レール</b> — 実行レーンです。スペックカードをレールにドラッグして <play>▶ 再生</play> を押すと、実装ジョブが起動します。","jobLabel":"各ジョブの実行内容","flowCaption":"各フェーズは作業中のログをライブでストリーミングします。","modeLabel":"レールの実行方法を選択","modeBody":"各レールはモードを選べます: <b>Implement</b>(完全な構造化パイプライン)、<b>Batch</b>(複数スペックを順次実行)、<b>Ultracode</b>(Claude が固定パイプラインなしで自律的に作業)。","profilesLabel":"エージェントプロファイル","profilesBody":"どのエージェントを実行し、それぞれどのモデルを使うかを決めるプロジェクトごとの宣言的カタログ — レールごとに選択され、ジョブごとにスナップショットされるため並行作業が分離されます。","jobDetailLabel":"ライブジョブ詳細","jobDetailBody":"各ジョブにはチケット識別ヘッダー、ライブの経過時間ティッカー、進行中のターン/トークン数が表示され、確定コストは終了時に解決されます。","isolationLabel":"複数プロジェクト、完全分離","isolationBody":"各プロジェクトは独自のデータベースとジョブキューを持ちます。複数のプロジェクトを同時に実行し、左サイドバーから切り替えられます — 位置はプロジェクトごとに記憶されます。"},"providers":{"nav":"あなたのエージェント","title":"自分のエージェントを持ち込む","subtitle":"Claude Code と Codex をファーストクラスのエンジンとして","intro":"アプリは <b>Claude Code</b> と <b>Codex CLI</b> を、単一のコントラクトの背後で交換可能なエンジンとして扱います。プロジェクトには片方または両方をインストールでき、選択はインストール時に行います。","table":{"capability":"機能","streamingResume":"ストリーミングとセッション再開","native":"ネイティブ","costReporting":"コストレポート","providerBilled":"プロバイダー請求額","estimated":"推定(~)","telemetry":"テレメトリ(OTEL)","synthesized":"合成","agentProfiles":"エージェントプロファイル"},"calloutLabel":"両方インストールされている場合","calloutBody":"<b>スペックごと、レールごと、ターミナル起動ごと</b>にエンジンを選べます。アプリはプロジェクトごとに最後の選択を記憶します。Codex のコストはローカルのレートカードからの推定で、常に <mono>~</mono> が付きます。"},"cost":{"nav":"コスト追跡","title":"1セント単位で追跡","subtitle":"課金対象のすべての呼び出しを記録・可視化","intro":"レール、Quick、Explore、AI 編集、SMASH、ファイル要約にわたるすべての AI 呼び出しが <b>Claude と Codex の両方</b>で記録されます。エージェントのコストを推測する必要はもうありません。","analyticsLabel":"分析ページ","analyticsBody":"バーンレートのヒーロー表示、日次タイムライン、トップチケット、モデル別内訳、コスト対ターン数の散布図。期間(7日 / 30日 / 90日 / 全期間)とサーフェスでフィルタできます。","perTicketLabel":"チケット別の支出","perTicketBody":"各スペックの詳細にはコストと所要ターン数が表示され、そのチケットでフィルタした分析ページへディープリンクします。","honestLabel":"正直な数字","honestBody":"Claude のコストはプロバイダー請求額そのもの。Codex は推定で <mono>~</mono> が付きます。トークン合計にはキャッシュ階層が含まれるため、数字がきちんと一致します。","budgetsLabel":"予算とアラート","budgetsBody":"日次予算とジョブ単位のコストアラートを設定でき、上限を超えるとアプリが自動でキューを一時停止します。すべて CSV または JSON にエクスポートできます。"},"workspace":{"nav":"ワークスペース","title":"あなたのワークスペースに","subtitle":"ウィンドウを離れずに必要なすべてを","terminalLabel":"ターミナルパネル","terminalBody":"画面下部の本格的な VS Code スタイルのターミナル(<mod>{{mod}}</mod> <j>J</j>)— WebGL レンダリング、検索、インライン画像、パスのドラッグ&ドロップ、シェル統合。プロジェクトごとに最大10セッション。","codeLabel":"コードエクスプローラー","codeBody":"読み取り専用のファイルツリーと Monaco ビューアに、平易な AI 要約と「AI が変更」の来歴チップが付き、誰でも何がなぜ変わったかを追えます。","integrationsLabel":"インテグレーション","integrationsBody":"プロジェクトごとの MCP インテグレーションのマーケットプレイス — Serena のセマンティックコードナビゲーションを同梱。インストールは加算式で、追加しても他に影響しません。","themesLabel":"テーマ","themesBody":"5つの組み込みテーマ — specrails(デフォルト)、dracula、aurora-light、obsidian-dark、matrix — を UI の描画前に適用するため、フラッシュがありません。設定 → 外観で変更できます。","chatsLabel":"最小化できるチャット","chatsBody":"Explore や AI 編集のセッションをドックのチップに格納して後で再開 — リフレッシュやプロジェクト切り替えで失われることはありません。","desktopLabel":"デスクトップまたはブラウザ","desktopBody":"ブラウザで Specrails を実行するか、サーバーとランタイムを同梱した署名済みデスクトップアプリ(macOS と Windows)を入手できます。"},"companion":{"nav":"モバイルコンパニオン","title":"Specrails を持ち歩く","subtitle":"Specrails Companion — あなたのパイプラインを、スマートフォンで","intro":"<b>Specrails Companion</b> は specrails.dev/companion-app で使える Web アプリです — スマートフォンで開く(またはホーム画面に追加する)だけで、スペックボードの閲覧、レールの起動と停止、ジョブログのライブ追跡、分析のチェックができます。インストール不要、アプリストアも不要。","localLabel":"ほかのすべてと同じく 100% ローカル","localBody":"スマートフォンはこのコンピュータに直接接続します — ピアツーピアで暗号化(WebRTC)。クラウド中継なし、アカウント不要、コードがあなたのデバイスの外に出ることはありません。","downloadLabel":"スマートフォンで開く","downloadHint":"スマートフォンのカメラでコードをスキャンするか、ブラウザで specrails.dev/companion-app を開いてください。","open":"Specrails Companion を開く","pairLabel":"ペアリングは10秒で完了","pairBody":"スマートフォンで specrails.dev/companion-app を開き、こちらで 設定 → モバイルコンパニオン → Web コンパニオンをペアリング と進んで、画面の手順に従ってください。"},"moveFast":{"nav":"高速操作","title":"思考のスピードで動く","subtitle":"どこでもキーボードファースト","paletteLabel":"コマンドパレット","paletteShortcut":"<f>どこでも</f> <mod>{{mod}}</mod> <m>+</m> <k>K</k> <m>を押す</m>","paletteBody":"プロジェクトの切り替え、スペックコマンドの実行、任意のページへのジャンプ、最近のジョブの検索 — すべてあいまい検索で。","terminalLabel":"ターミナルパネル","terminalBody":"<mod>{{mod}}</mod> <j>J</j> で切り替え。","shortcutsLabel":"全ショートカット","shortcutsBody":"<q>?</q> を押すと完全なチートシートが表示されます。","chatLabel":"チャットサイドバー","chatBody":"<mod>{{mod}}</mod> <bkey>B</bkey> で右サイドバーを切り替え。","projectsLabel":"プロジェクトサイドバー","projectsBody":"<alt>{{alt}}</alt> <mod>{{mod}}</mod> <bkey>B</bkey> で左の Arc サイドバーを切り替え。","outro":"<b>ツアーは以上です。</b>左サイドバーからプロジェクトを追加して、最初のスペックを出荷しましょう。このウォークスルーは設定からいつでも再表示できます。"},"jira":{"label":"Jira 連携","body":"任意のプロジェクトを <b>Jira ボード</b> で裏付けます — 各スペックは Jira の課題になり、双方向で同期されます。ステータスは rail に追従し、job 完了時にコメントが投稿されます。追加時にプロジェクトごとに設定するか、いつでも設定から構成できます。"}}`),c={wizard:e,addProject:t,prerequisites:n,instructions:r,checkpoints:i,setupChat:a,welcome:o,onboarding:s};export{t as addProject,i as checkpoints,c as default,r as instructions,s as onboarding,n as prerequisites,a as setupChat,o as welcome,e as wizard};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={configureAgents:`配置 {{provider}} Agent`,configureSubtitle:`选择要安装的 Agent 及其运行方式。`,tabs:{agents:`Agent`,models:`模型`},skipForNow:`暂时跳过`,install:`安装`,nextProvider:`下一个:{{provider}}`,installingProvider:`正在安装 {{provider}}…`,installingSpecrails:`正在安装 specrails…`,installingFromTemplates:`正在从模板安装 Agent`,waitingForOutput:`等待输出…`,checkpoints:{baseInstall:`基础安装`,agentSelection:`Agent 选择`,agentGeneration:`Agent 生成`},steps:{configure:`配置`},summary:{agents:`Agent`,agentSkills:`Agent 技能`,skills:`技能`,openspecSkills:`OpenSpec 技能`,legacyRemoved_one:`已移除 {{count}} 个旧版 <code>/specrails:*</code> 命令`,legacyRemoved_other:`已移除 {{count}} 个旧版 <code>/specrails:*</code> 命令`},complete:{welcome:`欢迎使用 <spec>spec</spec><rails>rails</rails>`,configured:`<strong>{{projectName}}</strong> 现已配置好 AI 驱动的开发工作流。你的专属 Agent 和命令已就绪。`,installedForEngines_one:`已为 {{count}} 个引擎安装`,installedForEngines_other:`已为 {{count}} 个引擎安装`,installed:`已安装`,installFailed:`安装失败`,learnMore:`了解如何充分利用 specrails:`,continueToProject:`进入项目`,jira:{title:`连接 Jira 看板`,subtitle:`可选——用 Jira 看板支撑此项目的规格。你也可以稍后在设置中完成。`,configure:`配置 Jira`,optional:`可选`}},error:{title:`设置失败`,skipSetup:`跳过设置`,prereqMissing:`SpecRails 设置需要 Node.js、npm、npx 和 Git 在 PATH 上可用后才能安装此项目。`,prereqRetryHint:`安装缺失的工具,重启 Specrails,然后重试设置。`}},t={title:`添加项目`,description:`注册一个项目目录,以便在 Specrails 中管理。`,noProviderDetected:`未检测到 AI CLI。请先安装 Claude Code 或 Codex CLI。`,pathLabel:`项目路径`,pathPlaceholder:`/Users/me/my-project`,pathHint:`项目根目录的绝对路径`,browseForFolder:`浏览文件夹`,selectProjectFolder:`选择项目文件夹`,nameLabel:`显示名称`,optional:`(可选)`,namePlaceholder:`我的项目`,nameHint:`默认为目录名`,providersLabel:`AI 提供商`,notFound:`未找到`,multiProviderHint:`两个引擎都将被安装。第一个为项目默认引擎。创建后不可更改。`,singleProviderHint:`项目创建后不可更改。`,adding:`添加中…`,submit:`添加项目`,toolsRequired_one:`添加项目需要 {{tools}}`,toolsRequired_other:`添加项目需要 {{tools}}`,errors:{pathRequired:`请输入项目路径`,selectProvider:`请至少选择一个 AI 提供商`,addFailed:`添加项目失败`},toasts:{registered:`项目“{{name}}”已注册`}},n={corruptedBundle:`应用包已损坏——请重新安装应用`,notInstalled:`未安装`,failedToExecute:`已找到但无法执行`,failedToExecuteAt:`在 {{path}} 找到但无法执行`,failedToExecuteWithError:`已找到但无法执行({{error}})`,failedToExecuteAtWithError:`在 {{path}} 找到但无法执行({{error}})`,needsMinimum:`已找到 {{version}}——需要 {{minVersion}}+`,unknownVersion:`未知`,installedLabel:`已安装`,verifyError:`无法在本地验证开发工具——安装时将再次校验。`,allDetected:`已检测到全部所需工具`,bundleCorruptedTitle:`应用包已损坏`,toolsRequired_one:`需要 {{count}} 个开发工具`,toolsRequired_other:`需要 {{count}} 个开发工具`,reinstallHint:`请重新安装 Specrails 应用以恢复内置工具。`,installMissingHint:`请安装缺失的工具以继续。`,moreInfo:`更多信息`,bundledBadge:`内置`},r={title:`安装开发工具`,description:`SpecRails 需要 PATH 上的 Node.js、npm、npx 和 Git。选择适合你操作系统的命令片段并运行,然后点击“我已安装,重新检测”。`,darwin:{intro:`用 Homebrew 一行命令即可装好两个工具。如果没有 brew,请使用官方下载。`,installNodeGit:`通过 Homebrew 安装 Node.js 和 Git`},win32:{intro:`Winget 随 Windows 11 及较新的 Windows 10 提供。打开 PowerShell 或终端并运行:`,installNode:`安装 Node.js LTS`,installGit:`安装 Git`,note:`安装后请重启 Specrails,以便 Windows 刷新 PATH。`},linux:{intro:`使用你发行版的包管理器:`,debian:`Debian / Ubuntu`,fedora:`Fedora / RHEL`},links:{nodeOfficial:`Node.js(官方)`,gitOfficial:`Git(官方)`,gitWindows:`Git for Windows(官方)`},showOtherPlatforms:`显示其他平台`,hideOtherPlatforms:`隐藏其他平台`,recheck:`我已安装,重新检测`,diagnostics:{copy:`复制诊断信息`,copied:`诊断信息已复制`,failed:`复制失败`},corrupted:{title:`应用包已损坏`,description:`一个或多个内置工具(Node.js、Git)无法通过验证。`,body:`此工具随 Specrails 应用内置,无法单独安装。如果你看到此消息,说明应用包可能已损坏,请重新安装 Specrails。`}},i={title:`设置进度`,progress:`已完成 {{done}} / {{total}}`,rawLog_one:`原始日志({{count}} 行)`,rawLog_other:`原始日志({{count}} 行)`},a={title:`设置助手`,subtitle:`回应提示以完成项目配置`,settingUp:`正在设置你的项目…`,placeholder:`输入回复…`,keyboardHint:`Enter 发送,Shift+Enter 换行`},o={title:`欢迎使用 <spec>spec</spec><rails>rails</rails>`,description:`Specrails 让你在一个界面中管理多个项目。添加第一个项目即可开始。`,addFirstProject:`添加你的第一个项目`,jiraHint:`将每个项目连接到各自的 Jira 看板——规格在两个方向保持同步。`},s={productTour:`产品导览`,stepCount:`第 {{current}} 步,共 {{total}} 步`,goToStep:`前往第 {{step}} 步:{{label}}`,stepLabel:`第 {{step}} 步`,dontShowAgain:`不再显示`,skipTour:`跳过导览`,getStarted:`开始使用`,flow:{addSpec:`添加 Spec`,dropInRail:`放入 Rail`,hitPlay:`点击播放`,ship:`交付`,architect:`架构师`,developer:`开发者`,reviewer:`评审员`},language:{nav:`语言`,title:`选择你的语言`,subtitle:`Specrails 支持你的语言`,intro:`选择界面使用的语言,即刻生效——包括这个导览。`,note:`你随时可以在设置 → 语言中更改。`},theme:{nav:`主题`,title:`挑选你的外观`,subtitle:`内置主题,即点即用`,intro:`选择 Specrails 的外观 — 主题在你点击的瞬间生效。`,note:`你随时可以在设置 → 外观中更改。`},welcome:{nav:`欢迎`,title:`欢迎使用 Specrails`,subtitle:`用 AI Agent 交付软件的本地驾驶舱`,intro:`Specrails 把想法变成已交付的代码——并让你<b>看见、掌控、信任</b>每一步。与 AI 对话起草 spec,把它放到执行 rail 上,点击播放。流水线会自动处理架构、实现、评审与 pull request,全程实时直播它的工作。`,coreLoopLabel:`核心循环`,flowCaption:`每个 spec 都会自动流经<b>架构师 → 开发者 → 评审员 → 交付</b>。`,localNote:`<b>100% 本地 · 单用户 · 无需账号。</b>一切都在你的机器上运行。除非<i>你</i>主动对代码启动 Agent,否则代码绝不离开你的电脑。`,tourNote:`这个快速导览会带你了解应用的全部能力——大约一分钟。`},authorSpecs:{nav:`撰写 spec`,title:`把想法变成 spec`,subtitle:`六种方式,精准描述你想构建的内容`,intro:`<b>spec</b> 是对你想完成的工作的描述。怎么顺手怎么写——从一句话速记到与 AI 的完整对话。`,exploreLabel:`Explore——对话式`,exploreBody:`在聊天中描述你的需求;实时草稿每轮自动重建。预设滑块控制 AI 能看到多少项目上下文——从仅你的消息,到完整代码库加上你的 MCP 服务器。`,quickLabel:`Quick——一步到位`,quickBody:`已经想清楚了?一轮即可生成完整 spec。可选启用 Contract Layer 增强:精确的命名、数据结构、不变量和文件改动清单,让 Agent 不再重复造轮子。`,websiteLabel:`从网站创建`,websiteBody:`打开内嵌浏览器。悬停选中元素或拖出矩形框,截图、DOM 和应用的 CSS 都会成为附件。桌面版自带 Chromium,可离线使用。`,smashLabel:`SMASH 拆解大型 epic`,smashBody:`一键把大型 spec 拆解为一组更小的子 spec——每个子项的卡片上都带有简短摘要。`,draftsLabel:`草稿与继续编辑`,draftsBody:`把进行中的探索保存为草稿工单,稍后继续;任何 spec 都可以在 Explore 中重新打开,继续打磨。`,compareLabel:`并排对比`,compareBody:`把一个 spec 拖到屏幕边缘,其余 spec 的选择器会滑入——像平板一样并排查看两个 spec。`},rails:{nav:`在 rail 上运行`,title:`让流水线在 rail 上运行`,subtitle:`把 spec 整理进泳道,然后启动 Agent`,intro:`Dashboard 右侧是你的 <b>Rails</b>——执行泳道。把 spec 卡片拖到 rail 上,按 <play>▶ 播放</play> 启动一次实现任务。`,jobLabel:`每个任务运行什么`,flowCaption:`每个阶段的日志都会实时流式展示。`,modeLabel:`选择 rail 的运行模式`,modeBody:`每条 rail 可选模式:<b>Implement</b>(完整的结构化流水线)、<b>Batch</b>(顺序执行多个 spec),或 <b>Ultracode</b>(Claude 自主工作,无固定流水线)。`,profilesLabel:`Agent Profile`,profilesBody:`项目级的声明式目录,决定运行哪些 Agent 以及各自使用的模型——按 rail 选择、按任务快照,并发工作互不干扰。`,jobDetailLabel:`实时任务详情`,jobDetailBody:`每个任务都显示工单标识头、实时计时器和持续累计的轮次 / token 数,最终成本在任务结束时确定。`,isolationLabel:`多项目,相互隔离`,isolationBody:`每个项目都有独立的数据库和任务队列。可以同时运行多个项目,并从左侧边栏切换——每个项目的位置都会被记住。`},providers:{nav:`你的 Agent`,title:`自带 Agent`,subtitle:`Claude Code 和 Codex,均为一等公民引擎`,intro:`应用将 <b>Claude Code</b> 和 <b>Codex CLI</b> 视为同一契约下可互换的引擎。项目可以安装其中之一或两者——在安装时选择。`,table:{capability:`能力`,streamingResume:`流式输出与会话恢复`,native:`原生`,costReporting:`成本报告`,providerBilled:`提供商实际计费`,estimated:`估算(~)`,telemetry:`遥测(OTEL)`,synthesized:`合成`,agentProfiles:`Agent Profile`},calloutLabel:`两者都安装时`,calloutBody:`可<b>按 spec、按 rail 或按终端启动</b>选择引擎。应用会记住每个项目的上次选择。Codex 成本基于本地费率表估算,并始终以 <mono>~</mono> 标注。`},cost:{nav:`成本追踪`,title:`每一分钱都有迹可循`,subtitle:`每次计费调用都被记录并可视化`,intro:`每次 AI 调用——包括 rail、Quick、Explore、AI 编辑、SMASH 和文件摘要——<b>Claude 和 Codex</b> 都会被记录。再也不用猜 Agent 花了多少钱。`,analyticsLabel:`分析页面`,analyticsBody:`消耗速率概览、每日时间线、热门工单、模型分布,以及成本-轮次散点图。可按周期(7 天 / 30 天 / 90 天 / 全部)和来源筛选。`,perTicketLabel:`按工单统计支出`,perTicketBody:`每个 spec 的详情会显示其成本和轮次,并可深链到按该工单筛选的分析页面。`,honestLabel:`诚实的数字`,honestBody:`Claude 成本为提供商实际计费;Codex 为估算值并以 <mono>~</mono> 标注。Token 总数包含各缓存层级,数字真正对得上账。`,budgetsLabel:`预算与告警`,budgetsBody:`设置每日预算和单任务成本告警;超限时应用会自动暂停队列。任何数据都可导出为 CSV 或 JSON。`},workspace:{nav:`工作区`,title:`打造你的工作区`,subtitle:`无需离开窗口即可完成一切`,terminalLabel:`终端面板`,terminalBody:`底部一个真正的 VS Code 风格终端(<mod>{{mod}}</mod> <j>J</j>)——WebGL 渲染、搜索、内联图片、拖放路径和 shell 集成。每个项目最多 10 个会话。`,codeLabel:`代码浏览器`,codeBody:`只读文件树和 Monaco 查看器,配有通俗易懂的 AI 摘要和“由 AI 修改”的溯源标签,任何人都能看懂改了什么、为什么改。`,integrationsLabel:`集成`,integrationsBody:`每个项目独立的 MCP 集成市场——内置 Serena 语义代码导航。安装是增量式的:装一个绝不影响另一个。`,themesLabel:`主题`,themesBody:`五个内置主题——specrails(默认)、dracula、aurora-light、obsidian-dark 和 matrix——在 UI 绘制前应用,不会闪屏。可在设置 → 外观中切换。`,chatsLabel:`可最小化的聊天`,chatsBody:`把 Explore 或 AI 编辑会话停靠为底部芯片,稍后继续——刷新或切换项目都不会丢失。`,desktopLabel:`桌面或浏览器`,desktopBody:`在浏览器中运行 Specrails,或下载已签名的桌面应用(macOS 和 Windows),它自带服务器与运行时。`},companion:{nav:`移动伴侣`,title:`随身携带 Specrails`,subtitle:`Specrails Companion——你的流水线,尽在掌上`,intro:`<b>Specrails Companion</b> 是一款网页应用,地址为 specrails.dev/companion-app——在手机上打开它(或将其添加到主屏幕),即可浏览 Spec 看板、启动或停止 rail、实时跟踪任务日志、随手查看分析数据。无需安装,无需应用商店。`,localLabel:`100% 本地,一如这里的一切`,localBody:`你的手机直接连接到这台电脑——点对点且加密(WebRTC)。没有云端中转、无需账号,你的代码绝不离开你的设备。`,downloadLabel:`在手机上打开`,downloadHint:`用手机相机扫码,或在浏览器中打开 specrails.dev/companion-app。`,open:`打开 Specrails Companion`,pairLabel:`配对只需十秒`,pairBody:`在手机上打开 specrails.dev/companion-app,然后在这里前往设置 → 移动伴侣 → 配对网页伴侣,按照屏幕提示操作。`},moveFast:{nav:`高效操作`,title:`以思维的速度移动`,subtitle:`键盘优先,无处不在`,paletteLabel:`命令面板`,paletteShortcut:`<f>按下</f> <mod>{{mod}}</mod> <m>+</m> <k>K</k> <m>随时随地</m>`,paletteBody:`切换项目、运行 spec 命令、跳转任意页面、查找最近任务——全部支持模糊搜索。`,terminalLabel:`终端面板`,terminalBody:`用 <mod>{{mod}}</mod> <j>J</j> 切换。`,shortcutsLabel:`全部快捷键`,shortcutsBody:`按 <q>?</q> 查看完整速查表。`,chatLabel:`聊天侧边栏`,chatBody:`用 <mod>{{mod}}</mod> <bkey>B</bkey> 切换右侧边栏。`,projectsLabel:`项目侧边栏`,projectsBody:`用 <alt>{{alt}}</alt> <mod>{{mod}}</mod> <bkey>B</bkey> 切换左侧 Arc 侧边栏。`,outro:`<b>导览到此结束。</b>从左侧边栏添加一个项目,交付你的第一个 spec。你随时可以在设置中重新打开本导览。`},jira:{label:`Jira 集成`,body:`用 <b>Jira 看板</b> 支撑任意项目——每条规格都会成为一个 Jira 事务,双向同步:状态跟随 rail,job 结束时会发布一条评论。在添加项目时按项目配置,或随时在设置中配置。`}},c={wizard:e,addProject:t,prerequisites:n,instructions:r,checkpoints:i,setupChat:a,welcome:o,onboarding:s};export{t as addProject,i as checkpoints,c as default,r as instructions,s as onboarding,n as prerequisites,a as setupChat,o as welcome,e as wizard};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var e={critical:`Kritisch`,high:`Hoch`,medium:`Mittel`,low:`Niedrig`},t={todo:`To-do`,inProgress:`In Arbeit`,done:`Fertig`,cancelled:`Abgebrochen`},n={manual:`Manuell erstellt`,productBacklog:`Aus dem Product-Backlog`,proposeSpec:`Aus einem Spec-Vorschlag`,getBacklogSpecs:`Aus Backlog-Specs`,freePrompt:`Aus Raw-Prompt`},r={title:`Titel`,description:`Beschreibung`,status:`Status`,priority:`Priorität`,labels:`Labels`,markdownPlaceholder:`Markdown-Beschreibung…`,supportsMarkdown:`Unterstützt Markdown`},i={createdAgo:`Erstellt {{time}}`,updatedAgo:`Aktualisiert {{time}}`},a=`Unbenannt`,o={title:`Ticket löschen`,body:`Möchtest du <strong>#{{id}} {{title}}</strong> wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.`},s={toast:{updated:`Ticket aktualisiert`,updateFailed:`Ticket konnte nicht aktualisiert werden`},compare:`Vergleichen`,compareTooltip:`Mit einer anderen Spec vergleichen`,doneEditing:`Bearbeitung abschließen`,addDescription:`Beschreibung hinzufügen…`,prerequisites:`Voraussetzungen`,addLabel:`Label hinzufügen`,addLabelPlaceholder:`Label hinzufügen…`,effort:`Aufwand`,assignee:`Zugewiesen an`,continueEditing:`Weiter bearbeiten`,ticketFallbackLabel:`Ticket #{{id}}`},c={title:`Contract Layer`,populated:`{{n}}/5 befüllt`},l={moveToRail:`Auf Rail verschieben`,removeFromRail:`Von Rail entfernen`,currentlyOn:`Aktuell auf {{rail}}`,popoverTitle:`Auf Rail verschieben`,noRails:`Keine Rails verfügbar.`},u={ariaLabel:`Ticket-Aktionen`,deleteTicket:`Ticket löschen`,changeStatus:`Status ändern`,statusOptions:`Statusoptionen`,setPriority:`Priorität festlegen`,priorityOptions:`Prioritätsoptionen`},d={list:`Listenansicht`,grid:`Rasteransicht (Kanban)`,postit:`Post-it-Ansicht`},f={title:`Ticket erstellen`,titlePlaceholder:`Ticket-Titel…`,labelsPlaceholder:`Tippen, um Labels hinzuzufügen…`,create:`Erstellen`,creating:`Wird erstellt…`,toast:{created:`Ticket erstellt`,createFailed:`Ticket konnte nicht erstellt werden`}},p={title:`Vergleichen mit…`,
|
|
1
|
+
var e={critical:`Kritisch`,high:`Hoch`,medium:`Mittel`,low:`Niedrig`},t={todo:`To-do`,inProgress:`In Arbeit`,done:`Fertig`,cancelled:`Abgebrochen`},n={manual:`Manuell erstellt`,productBacklog:`Aus dem Product-Backlog`,proposeSpec:`Aus einem Spec-Vorschlag`,getBacklogSpecs:`Aus Backlog-Specs`,freePrompt:`Aus Raw-Prompt`},r={title:`Titel`,description:`Beschreibung`,status:`Status`,priority:`Priorität`,labels:`Labels`,markdownPlaceholder:`Markdown-Beschreibung…`,supportsMarkdown:`Unterstützt Markdown`},i={createdAgo:`Erstellt {{time}}`,updatedAgo:`Aktualisiert {{time}}`},a=`Unbenannt`,o={title:`Ticket löschen`,body:`Möchtest du <strong>#{{id}} {{title}}</strong> wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.`},s={toast:{updated:`Ticket aktualisiert`,updateFailed:`Ticket konnte nicht aktualisiert werden`},compare:`Vergleichen`,compareTooltip:`Mit einer anderen Spec vergleichen`,doneEditing:`Bearbeitung abschließen`,addDescription:`Beschreibung hinzufügen…`,prerequisites:`Voraussetzungen`,addLabel:`Label hinzufügen`,addLabelPlaceholder:`Label hinzufügen…`,effort:`Aufwand`,assignee:`Zugewiesen an`,continueEditing:`Weiter bearbeiten`,ticketFallbackLabel:`Ticket #{{id}}`},c={title:`Contract Layer`,populated:`{{n}}/5 befüllt`},l={moveToRail:`Auf Rail verschieben`,removeFromRail:`Von Rail entfernen`,currentlyOn:`Aktuell auf {{rail}}`,popoverTitle:`Auf Rail verschieben`,noRails:`Keine Rails verfügbar.`},u={ariaLabel:`Ticket-Aktionen`,deleteTicket:`Ticket löschen`,changeStatus:`Status ändern`,statusOptions:`Statusoptionen`,setPriority:`Priorität festlegen`,priorityOptions:`Prioritätsoptionen`},d={list:`Listenansicht`,grid:`Rasteransicht (Kanban)`,postit:`Post-it-Ansicht`},f={title:`Ticket erstellen`,titlePlaceholder:`Ticket-Titel…`,labelsPlaceholder:`Tippen, um Labels hinzuzufügen…`,create:`Erstellen`,creating:`Wird erstellt…`,toast:{created:`Ticket erstellt`,createFailed:`Ticket konnte nicht erstellt werden`}},p={title:`Vergleichen mit…`,count:`({{n}} Specs)`,searchPlaceholder:`Specs durchsuchen…`,noMatches:`Keine passenden Specs`,empty:`Keine anderen Specs zum Vergleichen`},m={ariaLabel:`Ticket-Ausgaben in Analytics anzeigen`,turns_one:`{{count}} Turn`,turns_other:`{{count}} Turns`,active:`{{duration}} aktiv`,breakdownItem:`{{n}} {{label}}`},h={newTicket:`Neues Ticket: {{title}}`,newTicketsAdded_one:`{{count}} neues Ticket aus der Produkt-Discovery hinzugefügt`,newTicketsAdded_other:`{{count}} neue Tickets aus der Produkt-Discovery hinzugefügt`},g={priority:e,ticketStatus:t,source:n,fields:r,meta:i,untitled:a,deleteDialog:o,detailModal:s,contractLayer:c,rail:l,contextMenu:u,viewMode:d,createModal:f,comparePicker:p,spendingLine:m,toasts:h};export{p as comparePicker,u as contextMenu,c as contractLayer,f as createModal,g as default,o as deleteDialog,s as detailModal,r as fields,i as meta,e as priority,l as rail,n as source,m as spendingLine,t as ticketStatus,h as toasts,a as untitled,d as viewMode};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var e={critical:`Critica`,high:`Alta`,medium:`Media`,low:`Bassa`},t={todo:`Da fare`,inProgress:`In corso`,done:`Completato`,cancelled:`Annullato`},n={manual:`Creato manualmente`,productBacklog:`Dal product backlog`,proposeSpec:`Da proposta di spec`,getBacklogSpecs:`Dalle spec del backlog`,freePrompt:`Da prompt Raw`},r={title:`Titolo`,description:`Descrizione`,status:`Stato`,priority:`Priorità`,labels:`Etichette`,markdownPlaceholder:`Descrizione in Markdown...`,supportsMarkdown:`Supporta Markdown`},i={createdAgo:`Creato {{time}}`,updatedAgo:`Aggiornato {{time}}`},a=`Senza titolo`,o={title:`Elimina ticket`,body:`Vuoi davvero eliminare <strong>#{{id}} {{title}}</strong>? Questa azione è irreversibile.`},s={toast:{updated:`Ticket aggiornato`,updateFailed:`Impossibile aggiornare il ticket`},compare:`Confronta`,compareTooltip:`Confronta con un'altra spec`,doneEditing:`Fine modifica`,addDescription:`Aggiungi una descrizione...`,prerequisites:`Prerequisiti`,addLabel:`Aggiungi etichetta`,addLabelPlaceholder:`Aggiungi etichetta...`,effort:`Effort`,assignee:`Assegnatario`,continueEditing:`Continua a modificare`,ticketFallbackLabel:`Ticket #{{id}}`},c={title:`Contract Layer`,populated:`{{n}}/5 compilate`},l={moveToRail:`Sposta su un rail`,removeFromRail:`Rimuovi dal rail`,currentlyOn:`Attualmente su {{rail}}`,popoverTitle:`Sposta su un rail`,noRails:`Nessun rail disponibile.`},u={ariaLabel:`Azioni ticket`,deleteTicket:`Elimina ticket`,changeStatus:`Cambia stato`,statusOptions:`Opzioni di stato`,setPriority:`Imposta priorità`,priorityOptions:`Opzioni di priorità`},d={list:`Vista elenco`,grid:`Vista griglia (Kanban)`,postit:`Vista post-it`},f={title:`Crea ticket`,titlePlaceholder:`Titolo del ticket...`,labelsPlaceholder:`Digita per aggiungere etichette...`,create:`Crea`,creating:`Creazione...`,toast:{created:`Ticket creato`,createFailed:`Impossibile creare il ticket`}},p={title:`Confronta con…`,
|
|
1
|
+
var e={critical:`Critica`,high:`Alta`,medium:`Media`,low:`Bassa`},t={todo:`Da fare`,inProgress:`In corso`,done:`Completato`,cancelled:`Annullato`},n={manual:`Creato manualmente`,productBacklog:`Dal product backlog`,proposeSpec:`Da proposta di spec`,getBacklogSpecs:`Dalle spec del backlog`,freePrompt:`Da prompt Raw`},r={title:`Titolo`,description:`Descrizione`,status:`Stato`,priority:`Priorità`,labels:`Etichette`,markdownPlaceholder:`Descrizione in Markdown...`,supportsMarkdown:`Supporta Markdown`},i={createdAgo:`Creato {{time}}`,updatedAgo:`Aggiornato {{time}}`},a=`Senza titolo`,o={title:`Elimina ticket`,body:`Vuoi davvero eliminare <strong>#{{id}} {{title}}</strong>? Questa azione è irreversibile.`},s={toast:{updated:`Ticket aggiornato`,updateFailed:`Impossibile aggiornare il ticket`},compare:`Confronta`,compareTooltip:`Confronta con un'altra spec`,doneEditing:`Fine modifica`,addDescription:`Aggiungi una descrizione...`,prerequisites:`Prerequisiti`,addLabel:`Aggiungi etichetta`,addLabelPlaceholder:`Aggiungi etichetta...`,effort:`Effort`,assignee:`Assegnatario`,continueEditing:`Continua a modificare`,ticketFallbackLabel:`Ticket #{{id}}`},c={title:`Contract Layer`,populated:`{{n}}/5 compilate`},l={moveToRail:`Sposta su un rail`,removeFromRail:`Rimuovi dal rail`,currentlyOn:`Attualmente su {{rail}}`,popoverTitle:`Sposta su un rail`,noRails:`Nessun rail disponibile.`},u={ariaLabel:`Azioni ticket`,deleteTicket:`Elimina ticket`,changeStatus:`Cambia stato`,statusOptions:`Opzioni di stato`,setPriority:`Imposta priorità`,priorityOptions:`Opzioni di priorità`},d={list:`Vista elenco`,grid:`Vista griglia (Kanban)`,postit:`Vista post-it`},f={title:`Crea ticket`,titlePlaceholder:`Titolo del ticket...`,labelsPlaceholder:`Digita per aggiungere etichette...`,create:`Crea`,creating:`Creazione...`,toast:{created:`Ticket creato`,createFailed:`Impossibile creare il ticket`}},p={title:`Confronta con…`,count:`({{n}} spec)`,searchPlaceholder:`Cerca tra le spec…`,noMatches:`Nessuna spec corrispondente`,empty:`Nessun'altra spec da confrontare`},m={ariaLabel:`Vedi la spesa del ticket in Analytics`,turns_one:`{{count}} turno`,turns_other:`{{count}} turni`,active:`{{duration}} di attività`,breakdownItem:`{{n}} {{label}}`},h={newTicket:`Nuovo ticket: {{title}}`,newTicketsAdded_one:`{{count}} nuovo ticket aggiunto dalla product discovery`,newTicketsAdded_other:`{{count}} nuovi ticket aggiunti dalla product discovery`},g={priority:e,ticketStatus:t,source:n,fields:r,meta:i,untitled:a,deleteDialog:o,detailModal:s,contractLayer:c,rail:l,contextMenu:u,viewMode:d,createModal:f,comparePicker:p,spendingLine:m,toasts:h};export{p as comparePicker,u as contextMenu,c as contractLayer,f as createModal,g as default,o as deleteDialog,s as detailModal,r as fields,i as meta,e as priority,l as rail,n as source,m as spendingLine,t as ticketStatus,h as toasts,a as untitled,d as viewMode};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./chunk-CilyBKbf.js";var t=e({comparePicker:()=>h,contextMenu:()=>f,contractLayer:()=>u,createModal:()=>m,default:()=>v,deleteDialog:()=>c,detailModal:()=>l,fields:()=>a,meta:()=>o,priority:()=>n,rail:()=>d,source:()=>i,spendingLine:()=>g,ticketStatus:()=>r,toasts:()=>_,untitled:()=>s,viewMode:()=>p}),n={critical:`Critical`,high:`High`,medium:`Medium`,low:`Low`},r={todo:`Todo`,inProgress:`In Progress`,done:`Done`,cancelled:`Cancelled`},i={manual:`Created manually`,productBacklog:`From product backlog`,proposeSpec:`From spec proposal`,getBacklogSpecs:`From backlog specs`,freePrompt:`From Raw prompt`},a={title:`Title`,description:`Description`,status:`Status`,priority:`Priority`,labels:`Labels`,markdownPlaceholder:`Markdown description...`,supportsMarkdown:`Supports markdown`},o={createdAgo:`Created {{time}}`,updatedAgo:`Updated {{time}}`},s=`Untitled`,c={title:`Delete ticket`,body:`Are you sure you want to delete <strong>#{{id}} {{title}}</strong>? This action cannot be undone.`},l={toast:{updated:`Ticket updated`,updateFailed:`Failed to update ticket`},compare:`Compare`,compareTooltip:`Compare with another spec`,doneEditing:`Done editing`,addDescription:`Add a description...`,prerequisites:`Prerequisites`,addLabel:`Add label`,addLabelPlaceholder:`Add label...`,effort:`Effort`,assignee:`Assignee`,continueEditing:`Continue Editing`,ticketFallbackLabel:`Ticket #{{id}}`},u={title:`Contract Layer`,populated:`{{n}}/5 populated`},d={moveToRail:`Move to Rail`,removeFromRail:`Remove from Rail`,currentlyOn:`Currently on {{rail}}`,popoverTitle:`Move to rail`,noRails:`No rails available.`},f={ariaLabel:`Ticket actions`,deleteTicket:`Delete ticket`,changeStatus:`Change status`,statusOptions:`Status options`,setPriority:`Set priority`,priorityOptions:`Priority options`},p={list:`List view`,grid:`Grid view (Kanban)`,postit:`Post-it view`},m={title:`Create Ticket`,titlePlaceholder:`Ticket title...`,labelsPlaceholder:`Type to add labels...`,create:`Create`,creating:`Creating...`,toast:{created:`Ticket created`,createFailed:`Failed to create ticket`}},h={title:`Compare with…`,
|
|
1
|
+
import{n as e}from"./chunk-CilyBKbf.js";var t=e({comparePicker:()=>h,contextMenu:()=>f,contractLayer:()=>u,createModal:()=>m,default:()=>v,deleteDialog:()=>c,detailModal:()=>l,fields:()=>a,meta:()=>o,priority:()=>n,rail:()=>d,source:()=>i,spendingLine:()=>g,ticketStatus:()=>r,toasts:()=>_,untitled:()=>s,viewMode:()=>p}),n={critical:`Critical`,high:`High`,medium:`Medium`,low:`Low`},r={todo:`Todo`,inProgress:`In Progress`,done:`Done`,cancelled:`Cancelled`},i={manual:`Created manually`,productBacklog:`From product backlog`,proposeSpec:`From spec proposal`,getBacklogSpecs:`From backlog specs`,freePrompt:`From Raw prompt`},a={title:`Title`,description:`Description`,status:`Status`,priority:`Priority`,labels:`Labels`,markdownPlaceholder:`Markdown description...`,supportsMarkdown:`Supports markdown`},o={createdAgo:`Created {{time}}`,updatedAgo:`Updated {{time}}`},s=`Untitled`,c={title:`Delete ticket`,body:`Are you sure you want to delete <strong>#{{id}} {{title}}</strong>? This action cannot be undone.`},l={toast:{updated:`Ticket updated`,updateFailed:`Failed to update ticket`},compare:`Compare`,compareTooltip:`Compare with another spec`,doneEditing:`Done editing`,addDescription:`Add a description...`,prerequisites:`Prerequisites`,addLabel:`Add label`,addLabelPlaceholder:`Add label...`,effort:`Effort`,assignee:`Assignee`,continueEditing:`Continue Editing`,ticketFallbackLabel:`Ticket #{{id}}`},u={title:`Contract Layer`,populated:`{{n}}/5 populated`},d={moveToRail:`Move to Rail`,removeFromRail:`Remove from Rail`,currentlyOn:`Currently on {{rail}}`,popoverTitle:`Move to rail`,noRails:`No rails available.`},f={ariaLabel:`Ticket actions`,deleteTicket:`Delete ticket`,changeStatus:`Change status`,statusOptions:`Status options`,setPriority:`Set priority`,priorityOptions:`Priority options`},p={list:`List view`,grid:`Grid view (Kanban)`,postit:`Post-it view`},m={title:`Create Ticket`,titlePlaceholder:`Ticket title...`,labelsPlaceholder:`Type to add labels...`,create:`Create`,creating:`Creating...`,toast:{created:`Ticket created`,createFailed:`Failed to create ticket`}},h={title:`Compare with…`,count:`({{n}} specs)`,searchPlaceholder:`Search specs…`,noMatches:`No matching specs`,empty:`No other specs to compare`},g={ariaLabel:`View ticket spending in Analytics`,turns_one:`{{count}} turn`,turns_other:`{{count}} turns`,active:`{{duration}} active`,breakdownItem:`{{n}} {{label}}`},_={newTicket:`New ticket: {{title}}`,newTicketsAdded_one:`{{count}} new ticket added from product discovery`,newTicketsAdded_other:`{{count}} new tickets added from product discovery`},v={priority:n,ticketStatus:r,source:i,fields:a,meta:o,untitled:s,deleteDialog:c,detailModal:l,contractLayer:u,rail:d,contextMenu:f,viewMode:p,createModal:m,comparePicker:h,spendingLine:g,toasts:_};export{t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var e={critical:`クリティカル`,high:`高`,medium:`中`,low:`低`},t={todo:`Todo`,inProgress:`進行中`,done:`完了`,cancelled:`キャンセル`},n={manual:`手動で作成`,productBacklog:`プロダクトバックログから`,proposeSpec:`スペック提案から`,getBacklogSpecs:`バックログスペックから`,freePrompt:`Raw プロンプトから`},r={title:`タイトル`,description:`説明`,status:`ステータス`,priority:`優先度`,labels:`ラベル`,markdownPlaceholder:`Markdown で説明...`,supportsMarkdown:`Markdown 対応`},i={createdAgo:`{{time}}に作成`,updatedAgo:`{{time}}に更新`},a=`無題`,o={title:`チケットを削除`,body:`<strong>#{{id}} {{title}}</strong> を削除してもよろしいですか?この操作は元に戻せません。`},s={toast:{updated:`チケットを更新しました`,updateFailed:`チケットの更新に失敗しました`},compare:`比較`,compareTooltip:`別のスペックと比較`,doneEditing:`編集を終了`,addDescription:`説明を追加...`,prerequisites:`前提条件`,addLabel:`ラベルを追加`,addLabelPlaceholder:`ラベルを追加...`,effort:`工数`,assignee:`担当者`,continueEditing:`編集を続ける`,ticketFallbackLabel:`チケット #{{id}}`},c={title:`Contract Layer`,populated:`{{n}}/5 件入力済み`},l={moveToRail:`レールに移動`,removeFromRail:`レールから削除`,currentlyOn:`現在 {{rail}} 上にあります`,popoverTitle:`レールに移動`,noRails:`利用可能なレールがありません。`},u={ariaLabel:`チケット操作`,deleteTicket:`チケットを削除`,changeStatus:`ステータスを変更`,statusOptions:`ステータスオプション`,setPriority:`優先度を設定`,priorityOptions:`優先度オプション`},d={list:`リスト表示`,grid:`グリッド表示(カンバン)`,postit:`付箋表示`},f={title:`チケットを作成`,titlePlaceholder:`チケットのタイトル...`,labelsPlaceholder:`入力してラベルを追加...`,create:`作成`,creating:`作成中...`,toast:{created:`チケットを作成しました`,createFailed:`チケットの作成に失敗しました`}},p={title:`比較対象を選択…`,
|
|
1
|
+
var e={critical:`クリティカル`,high:`高`,medium:`中`,low:`低`},t={todo:`Todo`,inProgress:`進行中`,done:`完了`,cancelled:`キャンセル`},n={manual:`手動で作成`,productBacklog:`プロダクトバックログから`,proposeSpec:`スペック提案から`,getBacklogSpecs:`バックログスペックから`,freePrompt:`Raw プロンプトから`},r={title:`タイトル`,description:`説明`,status:`ステータス`,priority:`優先度`,labels:`ラベル`,markdownPlaceholder:`Markdown で説明...`,supportsMarkdown:`Markdown 対応`},i={createdAgo:`{{time}}に作成`,updatedAgo:`{{time}}に更新`},a=`無題`,o={title:`チケットを削除`,body:`<strong>#{{id}} {{title}}</strong> を削除してもよろしいですか?この操作は元に戻せません。`},s={toast:{updated:`チケットを更新しました`,updateFailed:`チケットの更新に失敗しました`},compare:`比較`,compareTooltip:`別のスペックと比較`,doneEditing:`編集を終了`,addDescription:`説明を追加...`,prerequisites:`前提条件`,addLabel:`ラベルを追加`,addLabelPlaceholder:`ラベルを追加...`,effort:`工数`,assignee:`担当者`,continueEditing:`編集を続ける`,ticketFallbackLabel:`チケット #{{id}}`},c={title:`Contract Layer`,populated:`{{n}}/5 件入力済み`},l={moveToRail:`レールに移動`,removeFromRail:`レールから削除`,currentlyOn:`現在 {{rail}} 上にあります`,popoverTitle:`レールに移動`,noRails:`利用可能なレールがありません。`},u={ariaLabel:`チケット操作`,deleteTicket:`チケットを削除`,changeStatus:`ステータスを変更`,statusOptions:`ステータスオプション`,setPriority:`優先度を設定`,priorityOptions:`優先度オプション`},d={list:`リスト表示`,grid:`グリッド表示(カンバン)`,postit:`付箋表示`},f={title:`チケットを作成`,titlePlaceholder:`チケットのタイトル...`,labelsPlaceholder:`入力してラベルを追加...`,create:`作成`,creating:`作成中...`,toast:{created:`チケットを作成しました`,createFailed:`チケットの作成に失敗しました`}},p={title:`比較対象を選択…`,count:`(スペック {{n}} 件)`,searchPlaceholder:`スペックを検索…`,noMatches:`一致するスペックはありません`,empty:`比較できる他のスペックはありません`},m={ariaLabel:`アナリティクスでチケットの支出を表示`,turns_one:`{{count}} ターン`,turns_other:`{{count}} ターン`,active:`アクティブ {{duration}}`,breakdownItem:`{{n}} {{label}}`},h={newTicket:`新しいチケット: {{title}}`,newTicketsAdded_one:`プロダクトディスカバリーから {{count}} 件の新しいチケットを追加しました`,newTicketsAdded_other:`プロダクトディスカバリーから {{count}} 件の新しいチケットを追加しました`},g={priority:e,ticketStatus:t,source:n,fields:r,meta:i,untitled:a,deleteDialog:o,detailModal:s,contractLayer:c,rail:l,contextMenu:u,viewMode:d,createModal:f,comparePicker:p,spendingLine:m,toasts:h};export{p as comparePicker,u as contextMenu,c as contractLayer,f as createModal,g as default,o as deleteDialog,s as detailModal,r as fields,i as meta,e as priority,l as rail,n as source,m as spendingLine,t as ticketStatus,h as toasts,a as untitled,d as viewMode};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var e={critical:`Crítica`,high:`Alta`,medium:`Média`,low:`Baixa`},t={todo:`Por fazer`,inProgress:`Em curso`,done:`Concluído`,cancelled:`Cancelado`},n={manual:`Criado manualmente`,productBacklog:`Do product backlog`,proposeSpec:`De proposta de spec`,getBacklogSpecs:`De specs do backlog`,freePrompt:`De prompt Raw`},r={title:`Título`,description:`Descrição`,status:`Estado`,priority:`Prioridade`,labels:`Etiquetas`,markdownPlaceholder:`Descrição em Markdown...`,supportsMarkdown:`Suporta Markdown`},i={createdAgo:`Criado {{time}}`,updatedAgo:`Atualizado {{time}}`},a=`Sem título`,o={title:`Eliminar ticket`,body:`Tem a certeza de que quer eliminar <strong>#{{id}} {{title}}</strong>? Esta ação não pode ser anulada.`},s={toast:{updated:`Ticket atualizado`,updateFailed:`Falha ao atualizar o ticket`},compare:`Comparar`,compareTooltip:`Comparar com outra spec`,doneEditing:`Terminar edição`,addDescription:`Adicionar uma descrição...`,prerequisites:`Pré-requisitos`,addLabel:`Adicionar etiqueta`,addLabelPlaceholder:`Adicionar etiqueta...`,effort:`Esforço`,assignee:`Responsável`,continueEditing:`Continuar a editar`,ticketFallbackLabel:`Ticket #{{id}}`},c={title:`Contract Layer`,populated:`{{n}}/5 preenchidas`},l={moveToRail:`Mover para um rail`,removeFromRail:`Remover do rail`,currentlyOn:`Atualmente em {{rail}}`,popoverTitle:`Mover para um rail`,noRails:`Nenhum rail disponível.`},u={ariaLabel:`Ações do ticket`,deleteTicket:`Eliminar ticket`,changeStatus:`Alterar estado`,statusOptions:`Opções de estado`,setPriority:`Definir prioridade`,priorityOptions:`Opções de prioridade`},d={list:`Vista de lista`,grid:`Vista de grelha (Kanban)`,postit:`Vista de post-its`},f={title:`Criar ticket`,titlePlaceholder:`Título do ticket...`,labelsPlaceholder:`Escreva para adicionar etiquetas...`,create:`Criar`,creating:`A criar...`,toast:{created:`Ticket criado`,createFailed:`Falha ao criar o ticket`}},p={title:`Comparar com…`,
|
|
1
|
+
var e={critical:`Crítica`,high:`Alta`,medium:`Média`,low:`Baixa`},t={todo:`Por fazer`,inProgress:`Em curso`,done:`Concluído`,cancelled:`Cancelado`},n={manual:`Criado manualmente`,productBacklog:`Do product backlog`,proposeSpec:`De proposta de spec`,getBacklogSpecs:`De specs do backlog`,freePrompt:`De prompt Raw`},r={title:`Título`,description:`Descrição`,status:`Estado`,priority:`Prioridade`,labels:`Etiquetas`,markdownPlaceholder:`Descrição em Markdown...`,supportsMarkdown:`Suporta Markdown`},i={createdAgo:`Criado {{time}}`,updatedAgo:`Atualizado {{time}}`},a=`Sem título`,o={title:`Eliminar ticket`,body:`Tem a certeza de que quer eliminar <strong>#{{id}} {{title}}</strong>? Esta ação não pode ser anulada.`},s={toast:{updated:`Ticket atualizado`,updateFailed:`Falha ao atualizar o ticket`},compare:`Comparar`,compareTooltip:`Comparar com outra spec`,doneEditing:`Terminar edição`,addDescription:`Adicionar uma descrição...`,prerequisites:`Pré-requisitos`,addLabel:`Adicionar etiqueta`,addLabelPlaceholder:`Adicionar etiqueta...`,effort:`Esforço`,assignee:`Responsável`,continueEditing:`Continuar a editar`,ticketFallbackLabel:`Ticket #{{id}}`},c={title:`Contract Layer`,populated:`{{n}}/5 preenchidas`},l={moveToRail:`Mover para um rail`,removeFromRail:`Remover do rail`,currentlyOn:`Atualmente em {{rail}}`,popoverTitle:`Mover para um rail`,noRails:`Nenhum rail disponível.`},u={ariaLabel:`Ações do ticket`,deleteTicket:`Eliminar ticket`,changeStatus:`Alterar estado`,statusOptions:`Opções de estado`,setPriority:`Definir prioridade`,priorityOptions:`Opções de prioridade`},d={list:`Vista de lista`,grid:`Vista de grelha (Kanban)`,postit:`Vista de post-its`},f={title:`Criar ticket`,titlePlaceholder:`Título do ticket...`,labelsPlaceholder:`Escreva para adicionar etiquetas...`,create:`Criar`,creating:`A criar...`,toast:{created:`Ticket criado`,createFailed:`Falha ao criar o ticket`}},p={title:`Comparar com…`,count:`({{n}} specs)`,searchPlaceholder:`Pesquisar specs…`,noMatches:`Nenhuma spec corresponde`,empty:`Não há outras specs para comparar`},m={ariaLabel:`Ver os gastos do ticket em Analytics`,turns_one:`{{count}} turno`,turns_other:`{{count}} turnos`,active:`{{duration}} ativo`,breakdownItem:`{{n}} {{label}}`},h={newTicket:`Novo ticket: {{title}}`,newTicketsAdded_one:`{{count}} novo ticket adicionado a partir da descoberta de produto`,newTicketsAdded_other:`{{count}} novos tickets adicionados a partir da descoberta de produto`},g={priority:e,ticketStatus:t,source:n,fields:r,meta:i,untitled:a,deleteDialog:o,detailModal:s,contractLayer:c,rail:l,contextMenu:u,viewMode:d,createModal:f,comparePicker:p,spendingLine:m,toasts:h};export{p as comparePicker,u as contextMenu,c as contractLayer,f as createModal,g as default,o as deleteDialog,s as detailModal,r as fields,i as meta,e as priority,l as rail,n as source,m as spendingLine,t as ticketStatus,h as toasts,a as untitled,d as viewMode};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var e={critical:`紧急`,high:`高`,medium:`中`,low:`低`},t={todo:`待办`,inProgress:`进行中`,done:`完成`,cancelled:`已取消`},n={manual:`手动创建`,productBacklog:`来自产品 backlog`,proposeSpec:`来自 spec 提案`,getBacklogSpecs:`来自 backlog spec`,freePrompt:`来自 Raw prompt`},r={title:`标题`,description:`描述`,status:`状态`,priority:`优先级`,labels:`标签`,markdownPlaceholder:`Markdown 描述…`,supportsMarkdown:`支持 Markdown`},i={createdAgo:`创建于 {{time}}`,updatedAgo:`更新于 {{time}}`},a=`未命名`,o={title:`删除工单`,body:`确定要删除 <strong>#{{id}} {{title}}</strong> 吗?此操作无法撤销。`},s={toast:{updated:`工单已更新`,updateFailed:`更新工单失败`},compare:`对比`,compareTooltip:`与另一个 spec 对比`,doneEditing:`完成编辑`,addDescription:`添加描述…`,prerequisites:`前置条件`,addLabel:`添加标签`,addLabelPlaceholder:`添加标签…`,effort:`工作量`,assignee:`负责人`,continueEditing:`继续编辑`,ticketFallbackLabel:`工单 #{{id}}`},c={title:`Contract Layer`,populated:`已填充 {{n}}/5`},l={moveToRail:`放入 Rail`,removeFromRail:`从 Rail 移除`,currentlyOn:`当前位于 {{rail}}`,popoverTitle:`放入 rail`,noRails:`没有可用的 rail。`},u={ariaLabel:`工单操作`,deleteTicket:`删除工单`,changeStatus:`更改状态`,statusOptions:`状态选项`,setPriority:`设置优先级`,priorityOptions:`优先级选项`},d={list:`列表视图`,grid:`网格视图(看板)`,postit:`便签视图`},f={title:`创建工单`,titlePlaceholder:`工单标题…`,labelsPlaceholder:`输入以添加标签…`,create:`创建`,creating:`正在创建…`,toast:{created:`工单已创建`,createFailed:`创建工单失败`}},p={title:`选择对比对象…`,
|
|
1
|
+
var e={critical:`紧急`,high:`高`,medium:`中`,low:`低`},t={todo:`待办`,inProgress:`进行中`,done:`完成`,cancelled:`已取消`},n={manual:`手动创建`,productBacklog:`来自产品 backlog`,proposeSpec:`来自 spec 提案`,getBacklogSpecs:`来自 backlog spec`,freePrompt:`来自 Raw prompt`},r={title:`标题`,description:`描述`,status:`状态`,priority:`优先级`,labels:`标签`,markdownPlaceholder:`Markdown 描述…`,supportsMarkdown:`支持 Markdown`},i={createdAgo:`创建于 {{time}}`,updatedAgo:`更新于 {{time}}`},a=`未命名`,o={title:`删除工单`,body:`确定要删除 <strong>#{{id}} {{title}}</strong> 吗?此操作无法撤销。`},s={toast:{updated:`工单已更新`,updateFailed:`更新工单失败`},compare:`对比`,compareTooltip:`与另一个 spec 对比`,doneEditing:`完成编辑`,addDescription:`添加描述…`,prerequisites:`前置条件`,addLabel:`添加标签`,addLabelPlaceholder:`添加标签…`,effort:`工作量`,assignee:`负责人`,continueEditing:`继续编辑`,ticketFallbackLabel:`工单 #{{id}}`},c={title:`Contract Layer`,populated:`已填充 {{n}}/5`},l={moveToRail:`放入 Rail`,removeFromRail:`从 Rail 移除`,currentlyOn:`当前位于 {{rail}}`,popoverTitle:`放入 rail`,noRails:`没有可用的 rail。`},u={ariaLabel:`工单操作`,deleteTicket:`删除工单`,changeStatus:`更改状态`,statusOptions:`状态选项`,setPriority:`设置优先级`,priorityOptions:`优先级选项`},d={list:`列表视图`,grid:`网格视图(看板)`,postit:`便签视图`},f={title:`创建工单`,titlePlaceholder:`工单标题…`,labelsPlaceholder:`输入以添加标签…`,create:`创建`,creating:`正在创建…`,toast:{created:`工单已创建`,createFailed:`创建工单失败`}},p={title:`选择对比对象…`,count:`({{n}} 个 spec)`,searchPlaceholder:`搜索 spec…`,noMatches:`没有匹配的 spec`,empty:`没有其他可对比的 spec`},m={ariaLabel:`在分析页查看此工单的支出`,turns_one:`{{count}} 轮`,turns_other:`{{count}} 轮`,active:`活跃 {{duration}}`,breakdownItem:`{{n}} {{label}}`},h={newTicket:`新工单:{{title}}`,newTicketsAdded_one:`已从产品发现新增 {{count}} 个工单`,newTicketsAdded_other:`已从产品发现新增 {{count}} 个工单`},g={priority:e,ticketStatus:t,source:n,fields:r,meta:i,untitled:a,deleteDialog:o,detailModal:s,contractLayer:c,rail:l,contextMenu:u,viewMode:d,createModal:f,comparePicker:p,spendingLine:m,toasts:h};export{p as comparePicker,u as contextMenu,c as contractLayer,f as createModal,g as default,o as deleteDialog,s as detailModal,r as fields,i as meta,e as priority,l as rail,n as source,m as spendingLine,t as ticketStatus,h as toasts,a as untitled,d as viewMode};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var e={critical:`Critique`,high:`Haute`,medium:`Moyenne`,low:`Basse`},t={todo:`À faire`,inProgress:`En cours`,done:`Terminé`,cancelled:`Annulé`},n={manual:`Créé manuellement`,productBacklog:`Depuis le product backlog`,proposeSpec:`Depuis une proposition de spec`,getBacklogSpecs:`Depuis les specs du backlog`,freePrompt:`Depuis un prompt Raw`},r={title:`Titre`,description:`Description`,status:`Statut`,priority:`Priorité`,labels:`Labels`,markdownPlaceholder:`Description en Markdown…`,supportsMarkdown:`Markdown pris en charge`},i={createdAgo:`Créé {{time}}`,updatedAgo:`Mis à jour {{time}}`},a=`Sans titre`,o={title:`Supprimer le ticket`,body:`Voulez-vous vraiment supprimer <strong>#{{id}} {{title}}</strong> ? Cette action est irréversible.`},s={toast:{updated:`Ticket mis à jour`,updateFailed:`Échec de la mise à jour du ticket`},compare:`Comparer`,compareTooltip:`Comparer avec une autre spec`,doneEditing:`Terminer l'édition`,addDescription:`Ajouter une description…`,prerequisites:`Prérequis`,addLabel:`Ajouter un label`,addLabelPlaceholder:`Ajouter un label…`,effort:`Effort`,assignee:`Assigné à`,continueEditing:`Continuer l'édition`,ticketFallbackLabel:`Ticket #{{id}}`},c={title:`Contract Layer`,populated:`{{n}}/5 renseignés`},l={moveToRail:`Déplacer vers un rail`,removeFromRail:`Retirer du rail`,currentlyOn:`Actuellement sur {{rail}}`,popoverTitle:`Déplacer vers un rail`,noRails:`Aucun rail disponible.`},u={ariaLabel:`Actions du ticket`,deleteTicket:`Supprimer le ticket`,changeStatus:`Changer le statut`,statusOptions:`Options de statut`,setPriority:`Définir la priorité`,priorityOptions:`Options de priorité`},d={list:`Vue liste`,grid:`Vue grille (Kanban)`,postit:`Vue post-it`},f={title:`Créer un ticket`,titlePlaceholder:`Titre du ticket…`,labelsPlaceholder:`Saisissez pour ajouter des labels…`,create:`Créer`,creating:`Création…`,toast:{created:`Ticket créé`,createFailed:`Échec de la création du ticket`}},p={title:`Comparer avec…`,
|
|
1
|
+
var e={critical:`Critique`,high:`Haute`,medium:`Moyenne`,low:`Basse`},t={todo:`À faire`,inProgress:`En cours`,done:`Terminé`,cancelled:`Annulé`},n={manual:`Créé manuellement`,productBacklog:`Depuis le product backlog`,proposeSpec:`Depuis une proposition de spec`,getBacklogSpecs:`Depuis les specs du backlog`,freePrompt:`Depuis un prompt Raw`},r={title:`Titre`,description:`Description`,status:`Statut`,priority:`Priorité`,labels:`Labels`,markdownPlaceholder:`Description en Markdown…`,supportsMarkdown:`Markdown pris en charge`},i={createdAgo:`Créé {{time}}`,updatedAgo:`Mis à jour {{time}}`},a=`Sans titre`,o={title:`Supprimer le ticket`,body:`Voulez-vous vraiment supprimer <strong>#{{id}} {{title}}</strong> ? Cette action est irréversible.`},s={toast:{updated:`Ticket mis à jour`,updateFailed:`Échec de la mise à jour du ticket`},compare:`Comparer`,compareTooltip:`Comparer avec une autre spec`,doneEditing:`Terminer l'édition`,addDescription:`Ajouter une description…`,prerequisites:`Prérequis`,addLabel:`Ajouter un label`,addLabelPlaceholder:`Ajouter un label…`,effort:`Effort`,assignee:`Assigné à`,continueEditing:`Continuer l'édition`,ticketFallbackLabel:`Ticket #{{id}}`},c={title:`Contract Layer`,populated:`{{n}}/5 renseignés`},l={moveToRail:`Déplacer vers un rail`,removeFromRail:`Retirer du rail`,currentlyOn:`Actuellement sur {{rail}}`,popoverTitle:`Déplacer vers un rail`,noRails:`Aucun rail disponible.`},u={ariaLabel:`Actions du ticket`,deleteTicket:`Supprimer le ticket`,changeStatus:`Changer le statut`,statusOptions:`Options de statut`,setPriority:`Définir la priorité`,priorityOptions:`Options de priorité`},d={list:`Vue liste`,grid:`Vue grille (Kanban)`,postit:`Vue post-it`},f={title:`Créer un ticket`,titlePlaceholder:`Titre du ticket…`,labelsPlaceholder:`Saisissez pour ajouter des labels…`,create:`Créer`,creating:`Création…`,toast:{created:`Ticket créé`,createFailed:`Échec de la création du ticket`}},p={title:`Comparer avec…`,count:`({{n}} specs)`,searchPlaceholder:`Rechercher des specs…`,noMatches:`Aucune spec correspondante`,empty:`Aucune autre spec à comparer`},m={ariaLabel:`Voir les dépenses du ticket dans Analytics`,turns_one:`{{count}} tour`,turns_other:`{{count}} tours`,active:`{{duration}} actif`,breakdownItem:`{{n}} {{label}}`},h={newTicket:`Nouveau ticket : {{title}}`,newTicketsAdded_one:`{{count}} nouveau ticket ajouté depuis la product discovery`,newTicketsAdded_other:`{{count}} nouveaux tickets ajoutés depuis la product discovery`},g={priority:e,ticketStatus:t,source:n,fields:r,meta:i,untitled:a,deleteDialog:o,detailModal:s,contractLayer:c,rail:l,contextMenu:u,viewMode:d,createModal:f,comparePicker:p,spendingLine:m,toasts:h};export{p as comparePicker,u as contextMenu,c as contractLayer,f as createModal,g as default,o as deleteDialog,s as detailModal,r as fields,i as meta,e as priority,l as rail,n as source,m as spendingLine,t as ticketStatus,h as toasts,a as untitled,d as viewMode};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var e={critical:`Crítica`,high:`Alta`,medium:`Media`,low:`Baja`},t={todo:`Por hacer`,inProgress:`En curso`,done:`Hecho`,cancelled:`Cancelado`},n={manual:`Creado manualmente`,productBacklog:`Desde el product backlog`,proposeSpec:`Desde una propuesta de spec`,getBacklogSpecs:`Desde specs del backlog`,freePrompt:`Desde un prompt Raw`},r={title:`Título`,description:`Descripción`,status:`Estado`,priority:`Prioridad`,labels:`Etiquetas`,markdownPlaceholder:`Descripción en Markdown...`,supportsMarkdown:`Admite Markdown`},i={createdAgo:`Creado {{time}}`,updatedAgo:`Actualizado {{time}}`},a=`Sin título`,o={title:`Eliminar ticket`,body:`¿Seguro que quieres eliminar <strong>#{{id}} {{title}}</strong>? Esta acción no se puede deshacer.`},s={toast:{updated:`Ticket actualizado`,updateFailed:`No se pudo actualizar el ticket`},compare:`Comparar`,compareTooltip:`Comparar con otra spec`,doneEditing:`Terminar edición`,addDescription:`Añadir una descripción...`,prerequisites:`Requisitos previos`,addLabel:`Añadir etiqueta`,addLabelPlaceholder:`Añadir etiqueta...`,effort:`Esfuerzo`,assignee:`Asignado a`,continueEditing:`Seguir editando`,ticketFallbackLabel:`Ticket #{{id}}`},c={title:`Contract Layer`,populated:`{{n}}/5 con contenido`},l={moveToRail:`Mover a un rail`,removeFromRail:`Quitar del rail`,currentlyOn:`Actualmente en {{rail}}`,popoverTitle:`Mover a un rail`,noRails:`No hay rails disponibles.`},u={ariaLabel:`Acciones del ticket`,deleteTicket:`Eliminar ticket`,changeStatus:`Cambiar estado`,statusOptions:`Opciones de estado`,setPriority:`Establecer prioridad`,priorityOptions:`Opciones de prioridad`},d={list:`Vista de lista`,grid:`Vista de cuadrícula (Kanban)`,postit:`Vista post-it`},f={title:`Crear ticket`,titlePlaceholder:`Título del ticket...`,labelsPlaceholder:`Escribe para añadir etiquetas...`,create:`Crear`,creating:`Creando...`,toast:{created:`Ticket creado`,createFailed:`No se pudo crear el ticket`}},p={title:`Comparar con…`,
|
|
1
|
+
var e={critical:`Crítica`,high:`Alta`,medium:`Media`,low:`Baja`},t={todo:`Por hacer`,inProgress:`En curso`,done:`Hecho`,cancelled:`Cancelado`},n={manual:`Creado manualmente`,productBacklog:`Desde el product backlog`,proposeSpec:`Desde una propuesta de spec`,getBacklogSpecs:`Desde specs del backlog`,freePrompt:`Desde un prompt Raw`},r={title:`Título`,description:`Descripción`,status:`Estado`,priority:`Prioridad`,labels:`Etiquetas`,markdownPlaceholder:`Descripción en Markdown...`,supportsMarkdown:`Admite Markdown`},i={createdAgo:`Creado {{time}}`,updatedAgo:`Actualizado {{time}}`},a=`Sin título`,o={title:`Eliminar ticket`,body:`¿Seguro que quieres eliminar <strong>#{{id}} {{title}}</strong>? Esta acción no se puede deshacer.`},s={toast:{updated:`Ticket actualizado`,updateFailed:`No se pudo actualizar el ticket`},compare:`Comparar`,compareTooltip:`Comparar con otra spec`,doneEditing:`Terminar edición`,addDescription:`Añadir una descripción...`,prerequisites:`Requisitos previos`,addLabel:`Añadir etiqueta`,addLabelPlaceholder:`Añadir etiqueta...`,effort:`Esfuerzo`,assignee:`Asignado a`,continueEditing:`Seguir editando`,ticketFallbackLabel:`Ticket #{{id}}`},c={title:`Contract Layer`,populated:`{{n}}/5 con contenido`},l={moveToRail:`Mover a un rail`,removeFromRail:`Quitar del rail`,currentlyOn:`Actualmente en {{rail}}`,popoverTitle:`Mover a un rail`,noRails:`No hay rails disponibles.`},u={ariaLabel:`Acciones del ticket`,deleteTicket:`Eliminar ticket`,changeStatus:`Cambiar estado`,statusOptions:`Opciones de estado`,setPriority:`Establecer prioridad`,priorityOptions:`Opciones de prioridad`},d={list:`Vista de lista`,grid:`Vista de cuadrícula (Kanban)`,postit:`Vista post-it`},f={title:`Crear ticket`,titlePlaceholder:`Título del ticket...`,labelsPlaceholder:`Escribe para añadir etiquetas...`,create:`Crear`,creating:`Creando...`,toast:{created:`Ticket creado`,createFailed:`No se pudo crear el ticket`}},p={title:`Comparar con…`,count:`({{n}} specs)`,searchPlaceholder:`Buscar specs…`,noMatches:`Ninguna spec coincide`,empty:`No hay otras specs para comparar`},m={ariaLabel:`Ver el gasto del ticket en Analíticas`,turns_one:`{{count}} turno`,turns_other:`{{count}} turnos`,active:`{{duration}} activo`,breakdownItem:`{{n}} {{label}}`},h={newTicket:`Nuevo ticket: {{title}}`,newTicketsAdded_one:`{{count}} ticket nuevo añadido desde product discovery`,newTicketsAdded_other:`{{count}} tickets nuevos añadidos desde product discovery`},g={priority:e,ticketStatus:t,source:n,fields:r,meta:i,untitled:a,deleteDialog:o,detailModal:s,contractLayer:c,rail:l,contextMenu:u,viewMode:d,createModal:f,comparePicker:p,spendingLine:m,toasts:h};export{p as comparePicker,u as contextMenu,c as contractLayer,f as createModal,g as default,o as deleteDialog,s as detailModal,r as fields,i as meta,e as priority,l as rail,n as source,m as spendingLine,t as ticketStatus,h as toasts,a as untitled,d as viewMode};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./chunk-CilyBKbf.js";import{sn as t}from"./index-
|
|
1
|
+
import{r as e}from"./chunk-CilyBKbf.js";import{sn as t}from"./index-DRhFPNAv.js";var n=e(t(),1),r=new Map;function i(e,t){return`${e}:${t}`}function a({namespace:e,projectId:t,initialValue:a,fetcher:o,pollInterval:s=0}){let c=t?i(t,e):null,[l,u]=(0,n.useState)(()=>c&&r.has(c)?r.get(c):a),[d,f]=(0,n.useState)(()=>c?!r.has(c):!0),[p,m]=(0,n.useState)(d),h=(0,n.useRef)(o);h.current=o;let g=(0,n.useRef)(c);return g.current=c,(0,n.useEffect)(()=>{if(!c)return;let e=r.get(c);e===void 0?(u(a),f(!0),m(!0)):(u(e),f(!1),m(!1));let t=!1;async function n(){try{let e=await h.current();if(t)return;r.set(c,e),u(e)}catch{}finally{t||(m(!1),f(!1))}}n();let i;return s>0&&(i=setInterval(n,s)),()=>{t=!0,i&&clearInterval(i)}},[c,s]),{data:l,isLoading:p,isFirstLoad:d,refresh:(0,n.useCallback)(()=>{if(!c)return;let e=c;h.current().then(t=>{r.set(e,t),g.current===e&&u(t)}).catch(()=>{})},[c])}}export{a as t};
|
package/client/dist/index.html
CHANGED
|
@@ -191,7 +191,7 @@
|
|
|
191
191
|
.specrails-splash__mark .pill { opacity: 1; }
|
|
192
192
|
}
|
|
193
193
|
</style>
|
|
194
|
-
<script type="module" crossorigin src="/assets/index-
|
|
194
|
+
<script type="module" crossorigin src="/assets/index-DRhFPNAv.js"></script>
|
|
195
195
|
<link rel="modulepreload" crossorigin href="/assets/chunk-CilyBKbf.js">
|
|
196
196
|
<link rel="modulepreload" crossorigin href="/assets/preload-helper-DSXbuxSR.js">
|
|
197
197
|
<link rel="modulepreload" crossorigin href="/assets/clsx-CnH-HMk3.js">
|
|
@@ -209,16 +209,16 @@
|
|
|
209
209
|
<link rel="modulepreload" crossorigin href="/assets/common-wA36jmj1.js">
|
|
210
210
|
<link rel="modulepreload" crossorigin href="/assets/dashboard-CuOshSHn.js">
|
|
211
211
|
<link rel="modulepreload" crossorigin href="/assets/explore-hFc3HFcp.js">
|
|
212
|
-
<link rel="modulepreload" crossorigin href="/assets/integrations-
|
|
212
|
+
<link rel="modulepreload" crossorigin href="/assets/integrations-CJQKMmdW.js">
|
|
213
213
|
<link rel="modulepreload" crossorigin href="/assets/jira-C-ATCti0.js">
|
|
214
214
|
<link rel="modulepreload" crossorigin href="/assets/jobs-Db3xrsp_.js">
|
|
215
215
|
<link rel="modulepreload" crossorigin href="/assets/nav-BRInPX8a.js">
|
|
216
216
|
<link rel="modulepreload" crossorigin href="/assets/settings-C0-7Fpxg.js">
|
|
217
|
-
<link rel="modulepreload" crossorigin href="/assets/setup-
|
|
217
|
+
<link rel="modulepreload" crossorigin href="/assets/setup-B6egeeTM.js">
|
|
218
218
|
<link rel="modulepreload" crossorigin href="/assets/specs-D-Sb6dre.js">
|
|
219
219
|
<link rel="modulepreload" crossorigin href="/assets/terminal-C0xx0SjA.js">
|
|
220
|
-
<link rel="modulepreload" crossorigin href="/assets/tickets-
|
|
221
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
220
|
+
<link rel="modulepreload" crossorigin href="/assets/tickets-D5MSAPe_.js">
|
|
221
|
+
<link rel="stylesheet" crossorigin href="/assets/index-D6BaYRRU.css">
|
|
222
222
|
</head>
|
|
223
223
|
<body>
|
|
224
224
|
<div id="specrails-splash" aria-hidden="false" role="status" aria-label="Loading Specrails">
|
package/docs/README.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Welcome. These guides are written for **you, the user**: how to get specrails-desktop running, how to use each feature, and what to do when something looks off.
|
|
4
4
|
|
|
5
|
+
Specrails works with three AI CLIs — **Claude Code**, **OpenAI Codex**, and **Google Gemini** — and the app behaves the same across them. You can install one, two, or all three per project and pick which one runs each task.
|
|
6
|
+
|
|
5
7
|
If you're contributing to the app itself or building on its API, head over to [`internals/`](internals/) for the technical deep dive.
|
|
6
8
|
|
|
7
9
|
## Start here
|
|
@@ -15,6 +17,7 @@ If you're contributing to the app itself or building on its API, head over to [`
|
|
|
15
17
|
| [Creating specs](creating-specs.md) | …you want to draft a spec, compare two specs, save a draft, split a big epic, or refine an existing spec |
|
|
16
18
|
| [Running pipelines](running-pipelines.md) | …you want to launch the AI pipeline against a spec, manage rails, pick agent profiles, or install plugins |
|
|
17
19
|
| [Using Codex](codex.md) | …you added a project with OpenAI's Codex CLI instead of (or alongside) Claude |
|
|
20
|
+
| [Using Gemini](gemini.md) | …you added a project with Google's Gemini CLI instead of (or alongside) Claude or Codex |
|
|
18
21
|
| [Tracking cost](tracking-cost.md) | …you want to see what AI is costing you and which specs are the most expensive |
|
|
19
22
|
| [Customising the app](customizing.md) | …you want to change theme, configure settings, set a budget, or turn on telemetry |
|
|
20
23
|
| [Terminal panel](terminal.md) | …you want to use the built-in terminal: shortcuts, shell integration, drag-and-drop |
|
|
@@ -30,7 +33,7 @@ If you're contributing to the app itself or building on its API, head over to [`
|
|
|
30
33
|
- **"How do I install it?"** → [Getting started](getting-started.md#install)
|
|
31
34
|
- **"How do I add a project?"** → [Getting started](getting-started.md#add-a-project)
|
|
32
35
|
- **"Quick vs Explore mode?"** → [Creating specs › Creating a spec](creating-specs.md#creating-a-spec)
|
|
33
|
-
- **"How do I use Codex
|
|
36
|
+
- **"How do I use a different provider (Codex / Gemini)?"** → [Using Codex](codex.md) · [Using Gemini](gemini.md)
|
|
34
37
|
- **"How do I compare two specs?"** → [Creating specs › Compare two specs side by side](creating-specs.md#compare-two-specs-side-by-side)
|
|
35
38
|
- **"What's a draft?"** → [Creating specs › Drafts](creating-specs.md#drafts)
|
|
36
39
|
- **"What's SMASH?"** → [Creating specs › SMASH a big spec](creating-specs.md#smash-a-big-spec)
|
|
@@ -51,4 +54,4 @@ If you're hacking on the app, building on its API, or just curious about how it
|
|
|
51
54
|
- [Operations runbook](internals/operations-runbook.md) — start/stop, recovery, backups
|
|
52
55
|
- [OpenSpec workflow](internals/openspec-workflow.md) — `opsx:*` change lifecycle (used by the app itself)
|
|
53
56
|
- [Profiles deep dive](internals/profiles.md) — agent profile internals
|
|
54
|
-
- [Adding a provider](internals/adding-a-provider.md) — one-file guide to wiring a
|
|
57
|
+
- [Adding a provider](internals/adding-a-provider.md) — one-file guide to wiring a new AI CLI adapter
|
|
@@ -177,3 +177,81 @@ No lo hace (confirmado que sobrevive). Pero **si** llegara a morir, el puente pr
|
|
|
177
177
|
- **node-pty para `agy` en Windows:** equivalente portable a `script`, **no verificado** contra `agy`.
|
|
178
178
|
- **SDK Python:** resume de una conversación `agy` local por id **no documentado**; gestiona su propio estado con runtime cloud bundled — re-platforming, no wrapping.
|
|
179
179
|
- **`agy -p "/workflow"`** expandiendo deterministamente headless: **no verificado**.
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## 8. Addendum — verificación contra el binario `agy 1.0.9` instalado (2026-06-18)
|
|
184
|
+
|
|
185
|
+
> Este estudio se generó (2026-06-17) **sin el binario**, reconstruyendo la superficie del tracker/CHANGELOG. Al día siguiente se ejecutó el binario real instalado (`/Users/javi/.local/bin/agy`, Mach-O arm64, 135 MB, **v1.0.9**) en macOS. Esta sección **corrige y confirma** afirmaciones concretas del cuerpo principal. **El veredicto NO cambia** — los bloqueantes estructurales (sin `--output-format stream-json`, sin captura de session-id, sin coste/tokens) siguen en pie; este addendum los refuerza con evidencia directa y corrige solo el detalle del print mode.
|
|
186
|
+
|
|
187
|
+
### 8.1 Identidad confirmada
|
|
188
|
+
Strings del binario: `"You are a subagent of Antigravity, a powerful agentic AI coding assistant designed by the Google Deepmind team"`, `ANTIGRAVITY_AGENT=1`, config bajo `~/.gemini/antigravity-cli/`. Go (bubbletea/glamour). Confirma §2.
|
|
189
|
+
|
|
190
|
+
### 8.2 `agy --help` verbatim — ahora SÍ obtenido (corrige §2)
|
|
191
|
+
El cuerpo dice *"El volcado verbatim de `agy --help` no se obtuvo"*. Obtenido del binario:
|
|
192
|
+
|
|
193
|
+
```
|
|
194
|
+
Usage of agy:
|
|
195
|
+
--add-dir Add a directory to the workspace (repeatable)
|
|
196
|
+
-c, --continue Continue the most recent conversation
|
|
197
|
+
--conversation Resume a previous conversation by ID
|
|
198
|
+
--dangerously-skip-permissions Auto-approve all tool permission requests
|
|
199
|
+
-i, --prompt-interactive Run an initial prompt interactively and continue the session
|
|
200
|
+
--log-file Override CLI log file path
|
|
201
|
+
--model Model for the current CLI session
|
|
202
|
+
-p, --print, --prompt Run a single prompt non-interactively and print the response
|
|
203
|
+
--print-timeout Timeout for print mode wait (default 5m0s)
|
|
204
|
+
--sandbox Run in a sandbox with terminal restrictions enabled
|
|
205
|
+
Subcommands: changelog · help · install · models · plugin/plugins · update
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
**Confirma:** `-p/--print/--prompt`, `-c/--continue`, `--conversation`, `--model`, `--print-timeout` (default 5m), `--dangerously-skip-permissions`, `--sandbox`. **Crítico — NO aparece `--output-format`** → confirma #119/#394 **sin resolver en 1.0.9**.
|
|
209
|
+
|
|
210
|
+
### 8.3 Print mode SÍ emite a stdout en 1.0.9 (corrige #76)
|
|
211
|
+
`agy changelog` 1.0.9 verbatim: *"Fixed a bug in headless print mode resumption (`--conversation`/`-c` `-p ...`) where the CLI would dump the entire historical conversation transcript instead of only printing the newly generated response."*
|
|
212
|
+
|
|
213
|
+
→ La premisa de **#76** ("stdout 0 bytes en non-TTY") está **parcialmente stale**: en 1.0.9 el print mode emite la respuesta a stdout (el bug arreglado era que emitía *de más* al resumir). **PERO no desbloquea nada**: sigue siendo **texto plano sin `--output-format stream-json`**, así que `parseStreamLine`/`extractResult` no tienen wire format que parsear. La pata "output machine-readable" sigue **rota**. *[No se ejecutó `agy -p "<prompt>"` real — sin gastar auth/tokens; la evidencia es el changelog + la ausencia de `--output-format` en `--help`, no un run.]*
|
|
214
|
+
|
|
215
|
+
### 8.4 `agy models` verbatim (confirma §2)
|
|
216
|
+
```
|
|
217
|
+
Gemini 3.5 Flash (Low/Medium/High) · Gemini 3.1 Pro (Low/High)
|
|
218
|
+
Claude Sonnet 4.6 (Thinking) · Claude Opus 4.6 (Thinking) · GPT-OSS 120B (Medium)
|
|
219
|
+
```
|
|
220
|
+
Confirma **nombres descriptivos** (no ids GA) → rompería la atribución de coste en `ai_invocations.model`. Multi-modelo (incluye Claude y GPT-OSS, no solo Gemini).
|
|
221
|
+
|
|
222
|
+
### 8.5 Auth — este install es OAuth (confirma #78)
|
|
223
|
+
`~/.gemini/oauth_creds.json` presente (1.5K) + `google_accounts.json`. **No verificado** si 1.0.9 acepta `GEMINI_API_KEY` headless — el tracker (#78) dice OAuth-only; este install lo es.
|
|
224
|
+
|
|
225
|
+
### 8.6 Harness `~/.gemini` compartido — confirmado en disco (refuerza §1.3, §3, §5)
|
|
226
|
+
Layout real observado:
|
|
227
|
+
```
|
|
228
|
+
~/.gemini/
|
|
229
|
+
acknowledgments/agents.json ← MISMO fichero que gemini-adapter.prepareHeadlessSpawn escribe
|
|
230
|
+
agents/
|
|
231
|
+
config/mcp_config.json ← MCP de agy (vacío en este install)
|
|
232
|
+
antigravity-cli/
|
|
233
|
+
brain/ ← transcripts por conversación (transporte #2)
|
|
234
|
+
conversations/ ← SQLite (confirma migración JSONL→SQLite, §3)
|
|
235
|
+
cache/ history.jsonl log/
|
|
236
|
+
oauth_creds.json trustedFolders.json settings.json
|
|
237
|
+
```
|
|
238
|
+
**Confirma el crux de §1.3/§5:** `agy` y `gemini-cli` comparten `~/.gemini`. El `acknowledgments/agents.json` es exactamente el que el `gemini-adapter` ya gestiona. El dir `conversations/` (SQLite) confirma que el schema `transcript.jsonl` está siendo superado (riesgo de durabilidad del transporte #2, §3).
|
|
239
|
+
|
|
240
|
+
### 8.7 Modelo skills/workflows — confirmado en strings (refuerza §5)
|
|
241
|
+
Símbolos del binario: `GetAllSkills`, `GetWorkflows`, `skills_paths`, `SKILLS_STACK`, `WorkflowName`/`WorkflowSpec`, `invoke_subagent`, `define_subagent`, discovery de `*.toml`. Confirma §5: subagentes **dinámicos** (`define_subagent` en runtime, no fichero persistente), skills+workflows como árbol cargable. `agy plugin import gemini|claude` confirma interop con el harness.
|
|
242
|
+
|
|
243
|
+
### 8.8 Impacto en specrails-core (no estaba explícito en el cuerpo)
|
|
244
|
+
El target gemini que **specrails-core 4.8.0** emite (`.gemini/commands/specrails/*.toml` + `.gemini/agents/sr-*.md` + `GEMINI.md`) **NO es el árbol que `agy` carga** (§5: `AGENTS.md` + `.agents/skills/sr-*/SKILL.md` + `.agents/workflows/sr-implement.md`). → un swap a `agy` **para rails** exige **un target NUEVO en specrails-core** (`templates/agy-skills/`), paralelo al gemini ya shipado. Es trabajo de **2 repos** (adapter desktop + core), no solo del adapter. Las superficies spec/explore/quick/chat (prompts directos, sin slash-commands de core) no tocarían core. Coherente con la "vía paralela" de §7.
|
|
245
|
+
|
|
246
|
+
### Resumen del addendum
|
|
247
|
+
| Afirmación del cuerpo (2026-06-17) | Estado tras verificar el binario 1.0.9 |
|
|
248
|
+
|---|---|
|
|
249
|
+
| `agy --help` verbatim no obtenido | ✅ obtenido (8.2) |
|
|
250
|
+
| #76 stdout 0 bytes en non-TTY | ⚠️ **stale** — print mode emite en 1.0.9, pero sin stream-json (8.3) |
|
|
251
|
+
| sin `--output-format json/stream-json` | ✅ confirmado (no aparece en `--help`) (8.2) |
|
|
252
|
+
| #78 OAuth-only | ✅ este install es OAuth (8.5) |
|
|
253
|
+
| coste/tokens no expuestos | ✅ sin cambios (no hay `--output-format` ni usage) |
|
|
254
|
+
| harness `~/.gemini` compartido | ✅ confirmado en disco (8.6) |
|
|
255
|
+
| migración transcript.jsonl → SQLite (§3) | ✅ `conversations/` SQLite presente (8.6) |
|
|
256
|
+
| modelo de agentes dinámico (§5) | ✅ `define_subagent`/`invoke_subagent` en strings (8.7) |
|
|
257
|
+
| **VEREDICTO: NO — todavía no** | ✅ **sin cambios; reforzado** |
|