specrails-desktop 2.8.0 → 2.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -19
- package/client/dist/assets/{ActivityFeedPage-LKqd18-G.js → ActivityFeedPage-DNqnf1fZ.js} +1 -1
- package/client/dist/assets/{AgentsPage-Cb-b-6Ot.js → AgentsPage-vmNIEbGM.js} +1 -1
- package/client/dist/assets/{AnalyticsPage-HVxQQ1wy.js → AnalyticsPage-CdfN0ofZ.js} +1 -1
- package/client/dist/assets/{BarChart-BOyHB0dw.js → BarChart-CIkopHjl.js} +1 -1
- package/client/dist/assets/{CodePage-DnOnwKGB.js → CodePage-DDRNU5FN.js} +1 -1
- package/client/dist/assets/{DesktopAnalyticsPage-D2auU39x.js → DesktopAnalyticsPage-Cl3sKKSG.js} +1 -1
- package/client/dist/assets/{DocsDialog-CTuDX3GK.js → DocsDialog-BGrBOfUr.js} +2 -2
- package/client/dist/assets/{DocsPage-DRyMmu0Z.js → DocsPage-CY-2SSzw.js} +2 -2
- package/client/dist/assets/{ExportDropdown-DO-GGiMh.js → ExportDropdown-BRHcvP0r.js} +1 -1
- package/client/dist/assets/{IntegrationsPage-BhbO4jFT.js → IntegrationsPage-nKdLB4Ub.js} +1 -1
- package/client/dist/assets/{JobDetailPage-DJooEg1s.js → JobDetailPage-Bf0A6WWQ.js} +1 -1
- package/client/dist/assets/{JobsPage-BbaC-YOg.js → JobsPage-Vg4nXPdL.js} +1 -1
- package/client/dist/assets/{dist-js-CiIVMsx3.js → dist-js-0i_klubI.js} +1 -1
- package/client/dist/assets/{dist-js-Xc2lRKp2.js → dist-js-CUs5GjwA.js} +1 -1
- package/client/dist/assets/{index-DK214dak.js → index-BXoHFtfG.js} +8 -8
- package/client/dist/assets/index-D6BaYRRU.css +2 -0
- package/client/dist/assets/{integrations-2C7MkGT0.js → integrations-7YyTBuU9.js} +1 -1
- package/client/dist/assets/{integrations-CX4p_bij.js → integrations-B9CEpNF0.js} +1 -1
- package/client/dist/assets/{integrations-C2jQtv-s.js → integrations-BlvAdewo.js} +1 -1
- package/client/dist/assets/{integrations-eQPHAYsE.js → integrations-Bw8UM9Xd.js} +1 -1
- package/client/dist/assets/{integrations-BDC670cg.js → integrations-C5SxNKnG.js} +1 -1
- package/client/dist/assets/{integrations-BqUmRUef.js → integrations-CJQKMmdW.js} +1 -1
- package/client/dist/assets/{integrations-CB98NeH5.js → integrations-DWz1eU_K.js} +1 -1
- package/client/dist/assets/{integrations-_SuVeQIG.js → integrations-DiPR8Fzp.js} +1 -1
- package/client/dist/assets/{lib-Bo5s6xpe.js → lib-D6M_MvoC.js} +1 -1
- package/client/dist/assets/setup-B6egeeTM.js +1 -0
- package/client/dist/assets/setup-BHroXlke.js +1 -0
- package/client/dist/assets/setup-BIXsWUp1.js +1 -0
- package/client/dist/assets/setup-BJRdg1iE.js +1 -0
- package/client/dist/assets/setup-C0rVGnCy.js +1 -0
- package/client/dist/assets/setup-Cpu17hJv.js +1 -0
- package/client/dist/assets/setup-D-1r0uSx.js +1 -0
- package/client/dist/assets/setup-Dn2-veYO.js +1 -0
- package/client/dist/assets/{useProjectCache-DVNypkmR.js → useProjectCache-BeyBSNpD.js} +1 -1
- package/client/dist/index.html +4 -4
- package/docs/README.md +5 -2
- package/docs/agy-cli-provider-study.md +78 -0
- package/docs/cli.md +23 -4
- package/docs/codex.md +116 -58
- package/docs/creating-specs.md +19 -5
- package/docs/customizing.md +27 -6
- package/docs/gemini.md +225 -73
- package/docs/getting-started.md +18 -9
- package/docs/guide/de/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/de/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/de/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/de/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/de/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/de/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/de/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/de/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/de/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/de/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/de/insights/3-code-explorer.md +50 -0
- package/docs/guide/de/integrations/1-ai-providers.md +64 -0
- package/docs/guide/de/integrations/2-plugins.md +44 -0
- package/docs/guide/de/integrations/3-jira-integration.md +71 -0
- package/docs/guide/de/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/de/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/de/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/de/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/de/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/de/settings/1-themes.md +37 -0
- package/docs/guide/de/settings/2-language.md +39 -0
- package/docs/guide/de/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/de/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/de/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/de/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/de/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/de/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/guide/en/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/en/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/en/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/en/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/en/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/en/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/en/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/en/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/en/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/en/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/en/insights/3-code-explorer.md +50 -0
- package/docs/guide/en/integrations/1-ai-providers.md +64 -0
- package/docs/guide/en/integrations/2-plugins.md +44 -0
- package/docs/guide/en/integrations/3-jira-integration.md +71 -0
- package/docs/guide/en/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/en/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/en/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/en/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/en/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/en/settings/1-themes.md +37 -0
- package/docs/guide/en/settings/2-language.md +39 -0
- package/docs/guide/en/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/en/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/en/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/en/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/en/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/en/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/guide/es/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/es/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/es/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/es/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/es/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/es/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/es/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/es/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/es/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/es/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/es/insights/3-code-explorer.md +50 -0
- package/docs/guide/es/integrations/1-ai-providers.md +64 -0
- package/docs/guide/es/integrations/2-plugins.md +44 -0
- package/docs/guide/es/integrations/3-jira-integration.md +71 -0
- package/docs/guide/es/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/es/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/es/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/es/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/es/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/es/settings/1-themes.md +37 -0
- package/docs/guide/es/settings/2-language.md +39 -0
- package/docs/guide/es/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/es/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/es/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/es/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/es/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/es/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/guide/fr/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/fr/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/fr/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/fr/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/fr/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/fr/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/fr/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/fr/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/fr/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/fr/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/fr/insights/3-code-explorer.md +50 -0
- package/docs/guide/fr/integrations/1-ai-providers.md +64 -0
- package/docs/guide/fr/integrations/2-plugins.md +44 -0
- package/docs/guide/fr/integrations/3-jira-integration.md +71 -0
- package/docs/guide/fr/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/fr/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/fr/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/fr/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/fr/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/fr/settings/1-themes.md +37 -0
- package/docs/guide/fr/settings/2-language.md +39 -0
- package/docs/guide/fr/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/fr/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/fr/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/fr/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/fr/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/fr/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/guide/it/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/it/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/it/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/it/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/it/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/it/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/it/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/it/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/it/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/it/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/it/insights/3-code-explorer.md +50 -0
- package/docs/guide/it/integrations/1-ai-providers.md +64 -0
- package/docs/guide/it/integrations/2-plugins.md +44 -0
- package/docs/guide/it/integrations/3-jira-integration.md +71 -0
- package/docs/guide/it/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/it/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/it/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/it/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/it/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/it/settings/1-themes.md +37 -0
- package/docs/guide/it/settings/2-language.md +39 -0
- package/docs/guide/it/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/it/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/it/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/it/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/it/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/it/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/guide/ja/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/ja/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/ja/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/ja/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/ja/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/ja/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/ja/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/ja/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/ja/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/ja/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/ja/insights/3-code-explorer.md +50 -0
- package/docs/guide/ja/integrations/1-ai-providers.md +64 -0
- package/docs/guide/ja/integrations/2-plugins.md +44 -0
- package/docs/guide/ja/integrations/3-jira-integration.md +71 -0
- package/docs/guide/ja/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/ja/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/ja/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/ja/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/ja/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/ja/settings/1-themes.md +37 -0
- package/docs/guide/ja/settings/2-language.md +39 -0
- package/docs/guide/ja/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/ja/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/ja/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/ja/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/ja/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/ja/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/guide/pt/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/pt/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/pt/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/pt/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/pt/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/pt/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/pt/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/pt/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/pt/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/pt/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/pt/insights/3-code-explorer.md +50 -0
- package/docs/guide/pt/integrations/1-ai-providers.md +64 -0
- package/docs/guide/pt/integrations/2-plugins.md +44 -0
- package/docs/guide/pt/integrations/3-jira-integration.md +71 -0
- package/docs/guide/pt/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/pt/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/pt/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/pt/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/pt/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/pt/settings/1-themes.md +37 -0
- package/docs/guide/pt/settings/2-language.md +39 -0
- package/docs/guide/pt/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/pt/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/pt/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/pt/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/pt/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/pt/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/guide/zh/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/zh/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/zh/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/zh/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/zh/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/zh/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/zh/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/zh/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/zh/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/zh/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/zh/insights/3-code-explorer.md +50 -0
- package/docs/guide/zh/integrations/1-ai-providers.md +64 -0
- package/docs/guide/zh/integrations/2-plugins.md +44 -0
- package/docs/guide/zh/integrations/3-jira-integration.md +71 -0
- package/docs/guide/zh/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/zh/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/zh/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/zh/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/zh/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/zh/settings/1-themes.md +37 -0
- package/docs/guide/zh/settings/2-language.md +39 -0
- package/docs/guide/zh/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/zh/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/zh/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/zh/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/zh/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/zh/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/internals/README.md +1 -1
- package/docs/internals/adding-a-provider.md +192 -59
- package/docs/internals/api-reference.md +130 -21
- package/docs/internals/architecture.md +22 -9
- package/docs/internals/bundled-framework-build-plan.md +264 -0
- package/docs/internals/configuration.md +33 -8
- package/docs/internals/global-artifacts-alignment-contract.md +486 -0
- package/docs/internals/global-artifacts-relocation-evaluation.md +294 -0
- package/docs/internals/operations-runbook.md +16 -5
- package/docs/internals/profiles.md +42 -14
- package/docs/platforms/macos.md +27 -8
- package/docs/platforms/windows.md +20 -6
- package/docs/running-pipelines.md +17 -9
- package/docs/terminal.md +9 -3
- package/docs/tracking-cost.md +17 -11
- package/package.json +1 -1
- package/server/dist/agent-refine-manager.js +20 -5
- package/server/dist/artifact-registry.js +468 -0
- package/server/dist/attachment-manager.js +5 -8
- package/server/dist/browser-capture-manager.js +4 -4
- package/server/dist/bundled-core.js +72 -0
- package/server/dist/bundled-openspec.js +58 -0
- package/server/dist/chat-manager.js +42 -5
- package/server/dist/code-explorer-router.js +10 -7
- package/server/dist/config.js +7 -2
- package/server/dist/context-budget.js +17 -6
- package/server/dist/context-scope.js +6 -2
- package/server/dist/contract-refine-runner.js +31 -9
- package/server/dist/desktop-router.js +24 -1
- package/server/dist/docs-router.js +210 -132
- package/server/dist/file-summary-manager.js +41 -16
- package/server/dist/framework-manager.js +248 -0
- package/server/dist/framework-migration.js +308 -0
- package/server/dist/index.js +30 -0
- package/server/dist/install-config-path.js +73 -0
- package/server/dist/jira/jira-sync-manager.js +23 -11
- package/server/dist/openspec-shim.js +153 -0
- package/server/dist/plugins-router.js +19 -8
- package/server/dist/profiles-router.js +38 -16
- package/server/dist/project-registry.js +101 -3
- package/server/dist/project-router-chat.js +1 -1
- package/server/dist/project-router-helpers.js +25 -12
- package/server/dist/project-router-jobs.js +3 -3
- package/server/dist/project-router-settings.js +8 -6
- package/server/dist/project-router-setup.js +27 -10
- package/server/dist/project-router-spending.js +6 -1
- package/server/dist/project-router-tickets.js +30 -10
- package/server/dist/project-router.js +16 -1
- package/server/dist/queue-manager.js +149 -18
- package/server/dist/setup-manager.js +131 -29
- package/server/dist/smash-runner.js +21 -6
- package/server/dist/ticket-store.js +6 -2
- package/server/dist/ticket-watcher.js +5 -1
- package/server/dist/vitest-setup.js +25 -0
- package/server/dist/workspace-manager.js +199 -0
- package/server/dist/workspace-resolution.js +147 -0
- package/client/dist/assets/index-DgKfQFcf.css +0 -2
- package/client/dist/assets/setup-BIIkb-_K.js +0 -1
- package/client/dist/assets/setup-BeQxu9kD.js +0 -1
- package/client/dist/assets/setup-CPa6GnlI.js +0 -1
- package/client/dist/assets/setup-CZl4OEJx.js +0 -1
- package/client/dist/assets/setup-ChpodNfn.js +0 -1
- package/client/dist/assets/setup-D_fjJH6u.js +0 -1
- package/client/dist/assets/setup-YzD8DX4O.js +0 -1
- package/client/dist/assets/setup-fRpDozmq.js +0 -1
- package/docs/adding-a-provider.md +0 -107
|
@@ -1 +1 @@
|
|
|
1
|
-
var e={title:`集成`,subtitle:`按项目管理的插件。每个项目独立决定启用哪些集成。`,selectProject:`选择一个项目以管理集成。`,deprecated:`已弃用`,loadError:`加载插件失败。`,empty:`此构建未捆绑任何插件。`},t={statusActive:`已启用`,statusDeactivated:`已停用`,statusDegraded:`已降级`,updateAvailable:`有可用更新`,requires:`需要:{{list}}`,deactivatedHint:`已安装但已停用 — Claude 下次会话不会加载它。切换<strong>启用</strong>以重新启用。`,install:`安装`,uninstall:`卸载`},n={titleActive:`已启用 — 点击停用`,titleDeactivated:`已停用 — 点击启用`},r={body:`Claude 的缓存中<strong>已安装但已禁用</strong>该 marketplace 插件。即使开关已关闭,它仍可能从 <code>~/.claude/plugins/cache/...</code> 解析该服务器。如需强制仅项目范围,请从 Claude 卸载该 marketplace 插件:`,runInstruction:`在活动的 Claude 会话中运行,然后在此项目中重启 Claude。`},i={body:`自你安装以来,捆绑的 manifest 已发生变化(可能是上游重命名)。用规范条目重写 <code>.mcp.json</code> — 精准操作,仅改动插件所拥有的键。`,button:`更新 <code>.mcp.json</code> 条目`},a={body:`<strong>{{name}}</strong> 也已通过 Claude 的插件 marketplace 全局启用,这会遮蔽此项目范围的安装。要使此卡片变为“已启用”,请在下方禁用全局版本 — 随时可从 Claude 重新启用。`,disableButton:`禁用 <code>{{key}}</code>`},o={badge:`孤立`,removeButton:`移除孤立项`},s={title:`安装 {{name}}`,computingChanges:`正在计算变更…`,filesHeading:`将更改的文件`,prerequisites:`前置条件`,autoInstall:`自动安装`,progress:`进度`,installingPrereq:`正在安装 {{name}}…`,prereqStartFailed:`启动失败:{{message}}`},c={title:`卸载 {{name}}?`,body:`这将还原 <code>.mcp.json</code> 中由插件管理的条目,并删除插件创建的文件。你的代码、历史记录和其他插件不受影响。`},l={title:`文档`,dialogDescription:`浏览捆绑的 Specrails 文档。使用侧边栏在指南间切换。`,sidebarEmpty:`暂无文档`,indexEmpty
|
|
1
|
+
var e={title:`集成`,subtitle:`按项目管理的插件。每个项目独立决定启用哪些集成。`,selectProject:`选择一个项目以管理集成。`,deprecated:`已弃用`,loadError:`加载插件失败。`,empty:`此构建未捆绑任何插件。`},t={statusActive:`已启用`,statusDeactivated:`已停用`,statusDegraded:`已降级`,updateAvailable:`有可用更新`,requires:`需要:{{list}}`,deactivatedHint:`已安装但已停用 — Claude 下次会话不会加载它。切换<strong>启用</strong>以重新启用。`,install:`安装`,uninstall:`卸载`},n={titleActive:`已启用 — 点击停用`,titleDeactivated:`已停用 — 点击启用`},r={body:`Claude 的缓存中<strong>已安装但已禁用</strong>该 marketplace 插件。即使开关已关闭,它仍可能从 <code>~/.claude/plugins/cache/...</code> 解析该服务器。如需强制仅项目范围,请从 Claude 卸载该 marketplace 插件:`,runInstruction:`在活动的 Claude 会话中运行,然后在此项目中重启 Claude。`},i={body:`自你安装以来,捆绑的 manifest 已发生变化(可能是上游重命名)。用规范条目重写 <code>.mcp.json</code> — 精准操作,仅改动插件所拥有的键。`,button:`更新 <code>.mcp.json</code> 条目`},a={body:`<strong>{{name}}</strong> 也已通过 Claude 的插件 marketplace 全局启用,这会遮蔽此项目范围的安装。要使此卡片变为“已启用”,请在下方禁用全局版本 — 随时可从 Claude 重新启用。`,disableButton:`禁用 <code>{{key}}</code>`},o={badge:`孤立`,removeButton:`移除孤立项`},s={title:`安装 {{name}}`,computingChanges:`正在计算变更…`,filesHeading:`将更改的文件`,prerequisites:`前置条件`,autoInstall:`自动安装`,progress:`进度`,installingPrereq:`正在安装 {{name}}…`,prereqStartFailed:`启动失败:{{message}}`},c={title:`卸载 {{name}}?`,body:`这将还原 <code>.mcp.json</code> 中由插件管理的条目,并删除插件创建的文件。你的代码、历史记录和其他插件不受影响。`},l={title:`文档`,dialogDescription:`浏览捆绑的 Specrails 文档。使用侧边栏在指南间切换。`,sidebarEmpty:`暂无文档`,indexEmpty:`文档将在此处显示。用户指南随应用提供,位于 docs/guide/;将 Markdown 文件放在 ~/.specrails/docs/guide/ 下即可自定义。`,categoryEmpty:`此分类下暂无文档。`,documentCount_one:`{{count}} 篇文档`,documentCount_other:`{{count}} 篇文档`,categoryCount_one:`{{count}} 个分类`,categoryCount_other:`{{count}} 个分类`,summary:`共 {{documents}},分布在 {{categories}}中。`,loadError:`加载文档失败`},u={title:`Jira`,category:`事务跟踪`,description:`用 Jira 看板支撑此项目的规格——状态双向同步,并在 rail 结束时发布完成评论。`,connectedDescription:`已与 {{key}} 同步。规格与你的 Jira 看板双向镜像。`,connect:`连接`,connected:`已连接`,manage:`管理`,modalTitle:`连接到 Jira`,manageTitle:`Jira 连接`,bullet1:`与你的 Jira 看板进行状态双向同步。`,bullet2:`rail 结束时发布完成评论。`,bullet3:`你的 Jira 待办会作为规格出现在看板上。`,requires:`需要 Jira Cloud 或 Data Center 账户。`},d={page:e,card:t,toggle:n,cachedNotice:r,update:i,conflict:a,orphan:o,installDialog:s,uninstallDialog:c,docs:l,jiraCard:u};export{r as cachedNotice,t as card,a as conflict,d as default,l as docs,s as installDialog,u as jiraCard,o as orphan,e as page,n as toggle,c as uninstallDialog,i as update};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var e={title:`Integrazioni`,subtitle:`Plugin per progetto. Ogni progetto decide in autonomia quali integrazioni abilitare.`,selectProject:`Seleziona un progetto per gestire le integrazioni.`,deprecated:`Deprecato`,loadError:`Impossibile caricare i plugin.`,empty:`Nessun plugin incluso in questa build.`},t={statusActive:`Attivo`,statusDeactivated:`Disattivato`,statusDegraded:`Degradato`,updateAvailable:`Aggiornamento disponibile`,requires:`Richiede: {{list}}`,deactivatedHint:`Installato ma disattivato — Claude non lo caricherà nella prossima sessione. Imposta su <strong>Attivo</strong> per riabilitarlo.`,install:`Installa`,uninstall:`Disinstalla`},n={titleActive:`Attivo — clicca per disattivare`,titleDeactivated:`Disattivato — clicca per attivare`},r={body:`Claude ha il plugin del marketplace <strong>installato ma disabilitato</strong> nella sua cache. Potrebbe comunque risolvere il server da <code>~/.claude/plugins/cache/...</code> anche con l'interruttore disattivato. Per forzare il solo ambito di progetto, disinstalla il plugin del marketplace da Claude:`,runInstruction:`Esegui all'interno di una sessione Claude attiva, poi riavvia Claude in questo progetto.`},i={body:`Il manifest incluso è cambiato dopo l'installazione (probabilmente una rinomina upstream). Riscrivi <code>.mcp.json</code> con la voce canonica — intervento chirurgico, vengono toccate solo le chiavi di proprietà del plugin.`,button:`Aggiorna la voce in <code>.mcp.json</code>`},a={body:`<strong>{{name}}</strong> è abilitato anche globalmente tramite il marketplace dei plugin di Claude, che mette in ombra questa installazione a livello di progetto. Per rendere Attiva questa scheda, disabilita qui sotto la versione globale — potrà essere riabilitata da Claude in qualsiasi momento.`,disableButton:`Disabilita <code>{{key}}</code>`},o={badge:`Orfano`,removeButton:`Rimuovi orfano`},s={title:`Installa {{name}}`,computingChanges:`Calcolo delle modifiche…`,filesHeading:`File che verranno modificati`,prerequisites:`Prerequisiti`,autoInstall:`Installazione automatica`,progress:`Avanzamento`,installingPrereq:`Installazione di {{name}}…`,prereqStartFailed:`Avvio non riuscito: {{message}}`},c={title:`Disinstallare {{name}}?`,body:`Verranno ripristinate le voci gestite dal plugin in <code>.mcp.json</code> e rimossi i file creati dal plugin. Il tuo codice, la cronologia e gli altri plugin non vengono toccati.`},l={title:`Documentazione`,dialogDescription:`Sfoglia la documentazione di Specrails inclusa. Usa la barra laterale per passare da una guida all'altra.`,sidebarEmpty:`Ancora nessun documento`,indexEmpty:`
|
|
1
|
+
var e={title:`Integrazioni`,subtitle:`Plugin per progetto. Ogni progetto decide in autonomia quali integrazioni abilitare.`,selectProject:`Seleziona un progetto per gestire le integrazioni.`,deprecated:`Deprecato`,loadError:`Impossibile caricare i plugin.`,empty:`Nessun plugin incluso in questa build.`},t={statusActive:`Attivo`,statusDeactivated:`Disattivato`,statusDegraded:`Degradato`,updateAvailable:`Aggiornamento disponibile`,requires:`Richiede: {{list}}`,deactivatedHint:`Installato ma disattivato — Claude non lo caricherà nella prossima sessione. Imposta su <strong>Attivo</strong> per riabilitarlo.`,install:`Installa`,uninstall:`Disinstalla`},n={titleActive:`Attivo — clicca per disattivare`,titleDeactivated:`Disattivato — clicca per attivare`},r={body:`Claude ha il plugin del marketplace <strong>installato ma disabilitato</strong> nella sua cache. Potrebbe comunque risolvere il server da <code>~/.claude/plugins/cache/...</code> anche con l'interruttore disattivato. Per forzare il solo ambito di progetto, disinstalla il plugin del marketplace da Claude:`,runInstruction:`Esegui all'interno di una sessione Claude attiva, poi riavvia Claude in questo progetto.`},i={body:`Il manifest incluso è cambiato dopo l'installazione (probabilmente una rinomina upstream). Riscrivi <code>.mcp.json</code> con la voce canonica — intervento chirurgico, vengono toccate solo le chiavi di proprietà del plugin.`,button:`Aggiorna la voce in <code>.mcp.json</code>`},a={body:`<strong>{{name}}</strong> è abilitato anche globalmente tramite il marketplace dei plugin di Claude, che mette in ombra questa installazione a livello di progetto. Per rendere Attiva questa scheda, disabilita qui sotto la versione globale — potrà essere riabilitata da Claude in qualsiasi momento.`,disableButton:`Disabilita <code>{{key}}</code>`},o={badge:`Orfano`,removeButton:`Rimuovi orfano`},s={title:`Installa {{name}}`,computingChanges:`Calcolo delle modifiche…`,filesHeading:`File che verranno modificati`,prerequisites:`Prerequisiti`,autoInstall:`Installazione automatica`,progress:`Avanzamento`,installingPrereq:`Installazione di {{name}}…`,prereqStartFailed:`Avvio non riuscito: {{message}}`},c={title:`Disinstallare {{name}}?`,body:`Verranno ripristinate le voci gestite dal plugin in <code>.mcp.json</code> e rimossi i file creati dal plugin. Il tuo codice, la cronologia e gli altri plugin non vengono toccati.`},l={title:`Documentazione`,dialogDescription:`Sfoglia la documentazione di Specrails inclusa. Usa la barra laterale per passare da una guida all'altra.`,sidebarEmpty:`Ancora nessun documento`,indexEmpty:`La documentazione apparirà qui. La guida utente è inclusa nell’app in docs/guide/; aggiungi file Markdown in ~/.specrails/docs/guide/ per personalizzarla.`,categoryEmpty:`Ancora nessun documento in questa categoria.`,documentCount_one:`{{count}} documento`,documentCount_other:`{{count}} documenti`,categoryCount_one:`{{count}} categoria`,categoryCount_other:`{{count}} categorie`,summary:`{{documents}} in {{categories}}.`,loadError:`Impossibile caricare il documento`},u={title:`Jira`,category:`Tracciamento ticket`,description:`Appoggia le spec di questo progetto a una board Jira — sincronizzazione bidirezionale dello stato e un commento al termine di un rail.`,connectedDescription:`Sincronizzato con {{key}}. Le spec rispecchiano la tua board Jira in entrambe le direzioni.`,connect:`Connetti`,connected:`Connesso`,manage:`Gestisci`,modalTitle:`Connetti a Jira`,manageTitle:`Connessione Jira`,bullet1:`Sincronizzazione bidirezionale dello stato con la tua board Jira.`,bullet2:`Pubblica un commento al termine di un rail.`,bullet3:`Il tuo backlog Jira appare come spec sulla board.`,requires:`Richiede un account Jira Cloud o Data Center.`},d={page:e,card:t,toggle:n,cachedNotice:r,update:i,conflict:a,orphan:o,installDialog:s,uninstallDialog:c,docs:l,jiraCard:u};export{r as cachedNotice,t as card,a as conflict,d as default,l as docs,s as installDialog,u as jiraCard,o as orphan,e as page,n as toggle,c as uninstallDialog,i as update};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var e={title:`Integraciones`,subtitle:`Plugins por proyecto. Cada proyecto decide de forma independiente qué integraciones activar.`,selectProject:`Selecciona un proyecto para gestionar sus integraciones.`,deprecated:`Obsoleto`,loadError:`No se pudieron cargar los plugins.`,empty:`Esta build no incluye ningún plugin.`},t={statusActive:`Activo`,statusDeactivated:`Desactivado`,statusDegraded:`Degradado`,updateAvailable:`Actualización disponible`,requires:`Requiere: {{list}}`,deactivatedHint:`Instalado pero desactivado — Claude no lo cargará en la próxima sesión. Activa <strong>Activo</strong> para volver a habilitarlo.`,install:`Instalar`,uninstall:`Desinstalar`},n={titleActive:`Activo — haz clic para desactivar`,titleDeactivated:`Desactivado — haz clic para activar`},r={body:`Claude tiene el plugin del marketplace <strong>instalado pero deshabilitado</strong> en su caché. Puede que siga resolviendo el servidor desde <code>~/.claude/plugins/cache/...</code> aunque el interruptor esté apagado. Para forzar solo el ámbito de proyecto, desinstala el plugin del marketplace desde Claude:`,runInstruction:`Ejecútalo dentro de una sesión activa de Claude y luego reinicia Claude en este proyecto.`},i={body:`El manifiesto incluido ha cambiado desde que lo instalaste (probablemente un renombrado upstream). Reescribe <code>.mcp.json</code> con la entrada canónica — de forma quirúrgica: solo se tocan las claves propiedad del plugin.`,button:`Actualizar la entrada de <code>.mcp.json</code>`},a={body:`<strong>{{name}}</strong> también está habilitado globalmente a través del marketplace de plugins de Claude, lo que eclipsa esta instalación de ámbito de proyecto. Para que esta tarjeta pase a Activo, deshabilita la versión global más abajo — puede volver a habilitarse desde Claude en cualquier momento.`,disableButton:`Deshabilitar <code>{{key}}</code>`},o={badge:`Huérfano`,removeButton:`Eliminar huérfano`},s={title:`Instalar {{name}}`,computingChanges:`Calculando cambios…`,filesHeading:`Archivos que cambiarán`,prerequisites:`Requisitos previos`,autoInstall:`Instalación automática`,progress:`Progreso`,installingPrereq:`Instalando {{name}}…`,prereqStartFailed:`No se pudo iniciar: {{message}}`},c={title:`¿Desinstalar {{name}}?`,body:`Esto revertirá las entradas gestionadas por el plugin en <code>.mcp.json</code> y eliminará los archivos creados por el plugin. Tu código, tu historial y el resto de plugins no se ven afectados.`},l={title:`Documentación`,dialogDescription:`Consulta la documentación incluida de Specrails. Usa la barra lateral para cambiar entre guías.`,sidebarEmpty:`Aún no hay docs`,indexEmpty:`
|
|
1
|
+
var e={title:`Integraciones`,subtitle:`Plugins por proyecto. Cada proyecto decide de forma independiente qué integraciones activar.`,selectProject:`Selecciona un proyecto para gestionar sus integraciones.`,deprecated:`Obsoleto`,loadError:`No se pudieron cargar los plugins.`,empty:`Esta build no incluye ningún plugin.`},t={statusActive:`Activo`,statusDeactivated:`Desactivado`,statusDegraded:`Degradado`,updateAvailable:`Actualización disponible`,requires:`Requiere: {{list}}`,deactivatedHint:`Instalado pero desactivado — Claude no lo cargará en la próxima sesión. Activa <strong>Activo</strong> para volver a habilitarlo.`,install:`Instalar`,uninstall:`Desinstalar`},n={titleActive:`Activo — haz clic para desactivar`,titleDeactivated:`Desactivado — haz clic para activar`},r={body:`Claude tiene el plugin del marketplace <strong>instalado pero deshabilitado</strong> en su caché. Puede que siga resolviendo el servidor desde <code>~/.claude/plugins/cache/...</code> aunque el interruptor esté apagado. Para forzar solo el ámbito de proyecto, desinstala el plugin del marketplace desde Claude:`,runInstruction:`Ejecútalo dentro de una sesión activa de Claude y luego reinicia Claude en este proyecto.`},i={body:`El manifiesto incluido ha cambiado desde que lo instalaste (probablemente un renombrado upstream). Reescribe <code>.mcp.json</code> con la entrada canónica — de forma quirúrgica: solo se tocan las claves propiedad del plugin.`,button:`Actualizar la entrada de <code>.mcp.json</code>`},a={body:`<strong>{{name}}</strong> también está habilitado globalmente a través del marketplace de plugins de Claude, lo que eclipsa esta instalación de ámbito de proyecto. Para que esta tarjeta pase a Activo, deshabilita la versión global más abajo — puede volver a habilitarse desde Claude en cualquier momento.`,disableButton:`Deshabilitar <code>{{key}}</code>`},o={badge:`Huérfano`,removeButton:`Eliminar huérfano`},s={title:`Instalar {{name}}`,computingChanges:`Calculando cambios…`,filesHeading:`Archivos que cambiarán`,prerequisites:`Requisitos previos`,autoInstall:`Instalación automática`,progress:`Progreso`,installingPrereq:`Instalando {{name}}…`,prereqStartFailed:`No se pudo iniciar: {{message}}`},c={title:`¿Desinstalar {{name}}?`,body:`Esto revertirá las entradas gestionadas por el plugin en <code>.mcp.json</code> y eliminará los archivos creados por el plugin. Tu código, tu historial y el resto de plugins no se ven afectados.`},l={title:`Documentación`,dialogDescription:`Consulta la documentación incluida de Specrails. Usa la barra lateral para cambiar entre guías.`,sidebarEmpty:`Aún no hay docs`,indexEmpty:`La documentación aparecerá aquí. La guía de usuario se incluye con la app en docs/guide/; añade archivos Markdown en ~/.specrails/docs/guide/ para personalizarla.`,categoryEmpty:`Aún no hay documentos en esta categoría.`,documentCount_one:`{{count}} documento`,documentCount_other:`{{count}} documentos`,categoryCount_one:`{{count}} categoría`,categoryCount_other:`{{count}} categorías`,summary:`{{documents}} en {{categories}}.`,loadError:`No se pudo cargar el documento`},u={title:`Jira`,category:`Seguimiento de incidencias`,description:`Respalda las specs de este proyecto con un tablero de Jira — sincronización bidireccional del estado y un comentario al terminar un rail.`,connectedDescription:`Sincronizado con {{key}}. Las specs reflejan tu tablero de Jira en ambos sentidos.`,connect:`Conectar`,connected:`Conectado`,manage:`Gestionar`,modalTitle:`Conectar con Jira`,manageTitle:`Conexión de Jira`,bullet1:`Sincronización bidireccional del estado con tu tablero de Jira.`,bullet2:`Publica un comentario al terminar un rail.`,bullet3:`Tu backlog de Jira aparece como specs en el tablero.`,requires:`Requiere una cuenta de Jira Cloud o Data Center.`},d={page:e,card:t,toggle:n,cachedNotice:r,update:i,conflict:a,orphan:o,installDialog:s,uninstallDialog:c,docs:l,jiraCard:u};export{r as cachedNotice,t as card,a as conflict,d as default,l as docs,s as installDialog,u as jiraCard,o as orphan,e as page,n as toggle,c as uninstallDialog,i as update};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var e={title:`Integrações`,subtitle:`Plugins por projeto. Cada projeto decide de forma independente que integrações ativar.`,selectProject:`Selecione um projeto para gerir integrações.`,deprecated:`Descontinuado`,loadError:`Falha ao carregar os plugins.`,empty:`Esta build não inclui nenhum plugin.`},t={statusActive:`Ativo`,statusDeactivated:`Desativado`,statusDegraded:`Degradado`,updateAvailable:`Atualização disponível`,requires:`Requer: {{list}}`,deactivatedHint:`Instalado mas desativado — o Claude não o vai carregar na próxima sessão. Alterne <strong>Ativo</strong> para reativar.`,install:`Instalar`,uninstall:`Desinstalar`},n={titleActive:`Ativo — clique para desativar`,titleDeactivated:`Desativado — clique para ativar`},r={body:`O Claude tem o plugin do marketplace <strong>instalado mas desativado</strong> na cache. Pode ainda resolver o servidor a partir de <code>~/.claude/plugins/cache/...</code> mesmo com o toggle desligado. Para forçar apenas o âmbito do projeto, desinstale o plugin do marketplace no Claude:`,runInstruction:`Execute numa sessão ativa do Claude e depois reinicie o Claude neste projeto.`},i={body:`O manifesto incluído mudou desde a instalação (provavelmente um rename a montante). Reescreva o <code>.mcp.json</code> com a entrada canónica — de forma cirúrgica, só as chaves do plugin são tocadas.`,button:`Atualizar entrada no <code>.mcp.json</code>`},a={body:`<strong>{{name}}</strong> também está ativado globalmente via marketplace de plugins do Claude, o que sobrepõe esta instalação no âmbito do projeto. Para este cartão ficar Ativo, desative a versão global abaixo — pode ser reativada no Claude a qualquer momento.`,disableButton:`Desativar <code>{{key}}</code>`},o={badge:`Órfão`,removeButton:`Remover órfão`},s={title:`Instalar {{name}}`,computingChanges:`A calcular alterações…`,filesHeading:`Ficheiros que vão mudar`,prerequisites:`Pré-requisitos`,autoInstall:`Instalação automática`,progress:`Progresso`,installingPrereq:`A instalar {{name}}…`,prereqStartFailed:`Falha ao iniciar: {{message}}`},c={title:`Desinstalar {{name}}?`,body:`Isto vai reverter as entradas geridas pelo plugin no <code>.mcp.json</code> e remover quaisquer ficheiros criados pelo plugin. O seu código, histórico e outros plugins não são afetados.`},l={title:`Documentação`,dialogDescription:`Consulte a documentação incluída do Specrails. Use a barra lateral para alternar entre guias.`,sidebarEmpty:`Ainda não há docs`,indexEmpty:`
|
|
1
|
+
var e={title:`Integrações`,subtitle:`Plugins por projeto. Cada projeto decide de forma independente que integrações ativar.`,selectProject:`Selecione um projeto para gerir integrações.`,deprecated:`Descontinuado`,loadError:`Falha ao carregar os plugins.`,empty:`Esta build não inclui nenhum plugin.`},t={statusActive:`Ativo`,statusDeactivated:`Desativado`,statusDegraded:`Degradado`,updateAvailable:`Atualização disponível`,requires:`Requer: {{list}}`,deactivatedHint:`Instalado mas desativado — o Claude não o vai carregar na próxima sessão. Alterne <strong>Ativo</strong> para reativar.`,install:`Instalar`,uninstall:`Desinstalar`},n={titleActive:`Ativo — clique para desativar`,titleDeactivated:`Desativado — clique para ativar`},r={body:`O Claude tem o plugin do marketplace <strong>instalado mas desativado</strong> na cache. Pode ainda resolver o servidor a partir de <code>~/.claude/plugins/cache/...</code> mesmo com o toggle desligado. Para forçar apenas o âmbito do projeto, desinstale o plugin do marketplace no Claude:`,runInstruction:`Execute numa sessão ativa do Claude e depois reinicie o Claude neste projeto.`},i={body:`O manifesto incluído mudou desde a instalação (provavelmente um rename a montante). Reescreva o <code>.mcp.json</code> com a entrada canónica — de forma cirúrgica, só as chaves do plugin são tocadas.`,button:`Atualizar entrada no <code>.mcp.json</code>`},a={body:`<strong>{{name}}</strong> também está ativado globalmente via marketplace de plugins do Claude, o que sobrepõe esta instalação no âmbito do projeto. Para este cartão ficar Ativo, desative a versão global abaixo — pode ser reativada no Claude a qualquer momento.`,disableButton:`Desativar <code>{{key}}</code>`},o={badge:`Órfão`,removeButton:`Remover órfão`},s={title:`Instalar {{name}}`,computingChanges:`A calcular alterações…`,filesHeading:`Ficheiros que vão mudar`,prerequisites:`Pré-requisitos`,autoInstall:`Instalação automática`,progress:`Progresso`,installingPrereq:`A instalar {{name}}…`,prereqStartFailed:`Falha ao iniciar: {{message}}`},c={title:`Desinstalar {{name}}?`,body:`Isto vai reverter as entradas geridas pelo plugin no <code>.mcp.json</code> e remover quaisquer ficheiros criados pelo plugin. O seu código, histórico e outros plugins não são afetados.`},l={title:`Documentação`,dialogDescription:`Consulte a documentação incluída do Specrails. Use a barra lateral para alternar entre guias.`,sidebarEmpty:`Ainda não há docs`,indexEmpty:`A documentação aparecerá aqui. O guia do utilizador é incluído na app em docs/guide/; adicione ficheiros Markdown em ~/.specrails/docs/guide/ para o personalizar.`,categoryEmpty:`Ainda não há documentos nesta categoria.`,documentCount_one:`{{count}} documento`,documentCount_other:`{{count}} documentos`,categoryCount_one:`{{count}} categoria`,categoryCount_other:`{{count}} categorias`,summary:`{{documents}} em {{categories}}.`,loadError:`Falha ao carregar o documento`},u={title:`Jira`,category:`Acompanhamento de tickets`,description:`Apoie as specs deste projeto num quadro Jira — sincronização bidirecional do estado e um comentário quando um rail termina.`,connectedDescription:`Sincronizado com {{key}}. As specs refletem o seu quadro Jira nos dois sentidos.`,connect:`Conectar`,connected:`Conectado`,manage:`Gerir`,modalTitle:`Conectar ao Jira`,manageTitle:`Ligação Jira`,bullet1:`Sincronização bidirecional do estado com o seu quadro Jira.`,bullet2:`Publica um comentário quando um rail termina.`,bullet3:`O seu backlog do Jira aparece como specs no quadro.`,requires:`Requer uma conta Jira Cloud ou Data Center.`},d={page:e,card:t,toggle:n,cachedNotice:r,update:i,conflict:a,orphan:o,installDialog:s,uninstallDialog:c,docs:l,jiraCard:u};export{r as cachedNotice,t as card,a as conflict,d as default,l as docs,s as installDialog,u as jiraCard,o as orphan,e as page,n as toggle,c as uninstallDialog,i as update};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./chunk-CilyBKbf.js";var t=e({cachedNotice:()=>a,card:()=>r,conflict:()=>s,default:()=>p,docs:()=>d,installDialog:()=>l,jiraCard:()=>f,orphan:()=>c,page:()=>n,toggle:()=>i,uninstallDialog:()=>u,update:()=>o}),n={title:`Integrations`,subtitle:`Per-project plugins. Each project decides which integrations to enable independently.`,selectProject:`Select a project to manage integrations.`,deprecated:`Deprecated`,loadError:`Failed to load plugins.`,empty:`No plugins are bundled with this build.`},r={statusActive:`Active`,statusDeactivated:`Deactivated`,statusDegraded:`Degraded`,updateAvailable:`Update available`,requires:`Requires: {{list}}`,deactivatedHint:`Installed but deactivated — Claude won't load it next session. Toggle <strong>Active</strong> to re-enable.`,install:`Install`,uninstall:`Uninstall`},i={titleActive:`Active — click to deactivate`,titleDeactivated:`Deactivated — click to activate`},a={body:`Claude has the marketplace plugin <strong>installed but disabled</strong> in its cache. It may still resolve the server from <code>~/.claude/plugins/cache/...</code> even though the toggle is off. To force project-scoped only, uninstall the marketplace plugin from Claude:`,runInstruction:`Run inside an active Claude session, then restart Claude in this project.`},o={body:`The bundled manifest changed since you installed (likely an upstream rename). Re-write <code>.mcp.json</code> with the canonical entry — surgical, only the plugin's owned keys are touched.`,button:`Update <code>.mcp.json</code> entry`},s={body:`<strong>{{name}}</strong> is also enabled globally via Claude's plugin marketplace, which shadows this project-scoped install. To make this card go Active, disable the global version below — it can be re-enabled from Claude any time.`,disableButton:`Disable <code>{{key}}</code>`},c={badge:`Orphan`,removeButton:`Remove orphan`},l={title:`Install {{name}}`,computingChanges:`Computing changes…`,filesHeading:`Files that will change`,prerequisites:`Prerequisites`,autoInstall:`Auto-install`,progress:`Progress`,installingPrereq:`Installing {{name}}…`,prereqStartFailed:`Failed to start: {{message}}`},u={title:`Uninstall {{name}}?`,body:`This will revert plugin-managed entries in <code>.mcp.json</code> and remove any plugin-created files. Your code, history, and other plugins are not affected.`},d={title:`Documentation`,dialogDescription:`Browse the bundled Specrails documentation. Use the sidebar to switch between guides.`,sidebarEmpty:`No docs yet`,indexEmpty:`
|
|
1
|
+
import{n as e}from"./chunk-CilyBKbf.js";var t=e({cachedNotice:()=>a,card:()=>r,conflict:()=>s,default:()=>p,docs:()=>d,installDialog:()=>l,jiraCard:()=>f,orphan:()=>c,page:()=>n,toggle:()=>i,uninstallDialog:()=>u,update:()=>o}),n={title:`Integrations`,subtitle:`Per-project plugins. Each project decides which integrations to enable independently.`,selectProject:`Select a project to manage integrations.`,deprecated:`Deprecated`,loadError:`Failed to load plugins.`,empty:`No plugins are bundled with this build.`},r={statusActive:`Active`,statusDeactivated:`Deactivated`,statusDegraded:`Degraded`,updateAvailable:`Update available`,requires:`Requires: {{list}}`,deactivatedHint:`Installed but deactivated — Claude won't load it next session. Toggle <strong>Active</strong> to re-enable.`,install:`Install`,uninstall:`Uninstall`},i={titleActive:`Active — click to deactivate`,titleDeactivated:`Deactivated — click to activate`},a={body:`Claude has the marketplace plugin <strong>installed but disabled</strong> in its cache. It may still resolve the server from <code>~/.claude/plugins/cache/...</code> even though the toggle is off. To force project-scoped only, uninstall the marketplace plugin from Claude:`,runInstruction:`Run inside an active Claude session, then restart Claude in this project.`},o={body:`The bundled manifest changed since you installed (likely an upstream rename). Re-write <code>.mcp.json</code> with the canonical entry — surgical, only the plugin's owned keys are touched.`,button:`Update <code>.mcp.json</code> entry`},s={body:`<strong>{{name}}</strong> is also enabled globally via Claude's plugin marketplace, which shadows this project-scoped install. To make this card go Active, disable the global version below — it can be re-enabled from Claude any time.`,disableButton:`Disable <code>{{key}}</code>`},c={badge:`Orphan`,removeButton:`Remove orphan`},l={title:`Install {{name}}`,computingChanges:`Computing changes…`,filesHeading:`Files that will change`,prerequisites:`Prerequisites`,autoInstall:`Auto-install`,progress:`Progress`,installingPrereq:`Installing {{name}}…`,prereqStartFailed:`Failed to start: {{message}}`},u={title:`Uninstall {{name}}?`,body:`This will revert plugin-managed entries in <code>.mcp.json</code> and remove any plugin-created files. Your code, history, and other plugins are not affected.`},d={title:`Documentation`,dialogDescription:`Browse the bundled Specrails documentation. Use the sidebar to switch between guides.`,sidebarEmpty:`No docs yet`,indexEmpty:`Documentation will appear here. The user guide ships with the app under docs/guide/; drop Markdown files under ~/.specrails/docs/guide/ to customize it.`,categoryEmpty:`No documents in this category yet.`,documentCount_one:`{{count}} document`,documentCount_other:`{{count}} documents`,categoryCount_one:`{{count}} category`,categoryCount_other:`{{count}} categories`,summary:`{{documents}} across {{categories}}.`,loadError:`Failed to load document`},f={title:`Jira`,category:`Issue tracking`,description:`Back this project's specs with a Jira board — two-way sync of status, plus a completion comment when a rail finishes.`,connectedDescription:`Synced with {{key}}. Specs mirror your Jira board both ways.`,connect:`Connect`,connected:`Connected`,manage:`Manage`,modalTitle:`Connect to Jira`,manageTitle:`Jira connection`,bullet1:`Two-way status sync with your Jira board.`,bullet2:`Posts a completion comment when a rail finishes.`,bullet3:`Your Jira backlog appears as specs on the board.`,requires:`Requires a Jira Cloud or Data Center account.`},p={page:n,card:r,toggle:i,cachedNotice:a,update:o,conflict:s,orphan:c,installDialog:l,uninstallDialog:u,docs:d,jiraCard:f};export{t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var e={title:`インテグレーション`,subtitle:`プロジェクトごとのプラグイン。どのインテグレーションを有効にするかは各プロジェクトが独立して決定します。`,selectProject:`インテグレーションを管理するプロジェクトを選択してください。`,deprecated:`非推奨`,loadError:`プラグインの読み込みに失敗しました。`,empty:`このビルドにはプラグインが同梱されていません。`},t={statusActive:`有効`,statusDeactivated:`無効`,statusDegraded:`劣化`,updateAvailable:`アップデートあり`,requires:`必要条件: {{list}}`,deactivatedHint:`インストール済みですが無効です — 次のセッションで Claude は読み込みません。再有効化するには<strong>有効</strong>に切り替えてください。`,install:`インストール`,uninstall:`アンインストール`},n={titleActive:`有効 — クリックで無効化`,titleDeactivated:`無効 — クリックで有効化`},r={body:`Claude のキャッシュにはマーケットプレイス版プラグインが<strong>インストール済みかつ無効</strong>の状態で残っています。トグルがオフでも <code>~/.claude/plugins/cache/...</code> からサーバーを解決する可能性があります。プロジェクトスコープのみに限定するには、Claude からマーケットプレイス版プラグインをアンインストールしてください:`,runInstruction:`アクティブな Claude セッション内で実行し、その後このプロジェクトで Claude を再起動してください。`},i={body:`インストール後に同梱マニフェストが変更されました (おそらく上流での名前変更)。<code>.mcp.json</code> を正規のエントリで書き直します — 外科的な変更で、プラグインが所有するキーのみが対象です。`,button:`<code>.mcp.json</code> エントリを更新`},a={body:`<strong>{{name}}</strong> は Claude のプラグインマーケットプレイス経由でグローバルにも有効になっており、このプロジェクトスコープのインストールを覆い隠しています。このカードを有効にするには、下のグローバル版を無効にしてください — Claude からいつでも再有効化できます。`,disableButton:`<code>{{key}}</code> を無効化`},o={badge:`孤立`,removeButton:`孤立エントリを削除`},s={title:`{{name}} をインストール`,computingChanges:`変更内容を計算中…`,filesHeading:`変更されるファイル`,prerequisites:`前提条件`,autoInstall:`自動インストール`,progress:`進行状況`,installingPrereq:`{{name}} をインストール中…`,prereqStartFailed:`開始に失敗しました: {{message}}`},c={title:`{{name}} をアンインストールしますか?`,body:`<code>.mcp.json</code> 内のプラグイン管理エントリを元に戻し、プラグインが作成したファイルを削除します。コード、履歴、他のプラグインには影響しません。`},l={title:`ドキュメント`,dialogDescription:`同梱の Specrails ドキュメントを閲覧できます。サイドバーでガイドを切り替えてください。`,sidebarEmpty:`ドキュメントはまだありません`,indexEmpty
|
|
1
|
+
var e={title:`インテグレーション`,subtitle:`プロジェクトごとのプラグイン。どのインテグレーションを有効にするかは各プロジェクトが独立して決定します。`,selectProject:`インテグレーションを管理するプロジェクトを選択してください。`,deprecated:`非推奨`,loadError:`プラグインの読み込みに失敗しました。`,empty:`このビルドにはプラグインが同梱されていません。`},t={statusActive:`有効`,statusDeactivated:`無効`,statusDegraded:`劣化`,updateAvailable:`アップデートあり`,requires:`必要条件: {{list}}`,deactivatedHint:`インストール済みですが無効です — 次のセッションで Claude は読み込みません。再有効化するには<strong>有効</strong>に切り替えてください。`,install:`インストール`,uninstall:`アンインストール`},n={titleActive:`有効 — クリックで無効化`,titleDeactivated:`無効 — クリックで有効化`},r={body:`Claude のキャッシュにはマーケットプレイス版プラグインが<strong>インストール済みかつ無効</strong>の状態で残っています。トグルがオフでも <code>~/.claude/plugins/cache/...</code> からサーバーを解決する可能性があります。プロジェクトスコープのみに限定するには、Claude からマーケットプレイス版プラグインをアンインストールしてください:`,runInstruction:`アクティブな Claude セッション内で実行し、その後このプロジェクトで Claude を再起動してください。`},i={body:`インストール後に同梱マニフェストが変更されました (おそらく上流での名前変更)。<code>.mcp.json</code> を正規のエントリで書き直します — 外科的な変更で、プラグインが所有するキーのみが対象です。`,button:`<code>.mcp.json</code> エントリを更新`},a={body:`<strong>{{name}}</strong> は Claude のプラグインマーケットプレイス経由でグローバルにも有効になっており、このプロジェクトスコープのインストールを覆い隠しています。このカードを有効にするには、下のグローバル版を無効にしてください — Claude からいつでも再有効化できます。`,disableButton:`<code>{{key}}</code> を無効化`},o={badge:`孤立`,removeButton:`孤立エントリを削除`},s={title:`{{name}} をインストール`,computingChanges:`変更内容を計算中…`,filesHeading:`変更されるファイル`,prerequisites:`前提条件`,autoInstall:`自動インストール`,progress:`進行状況`,installingPrereq:`{{name}} をインストール中…`,prereqStartFailed:`開始に失敗しました: {{message}}`},c={title:`{{name}} をアンインストールしますか?`,body:`<code>.mcp.json</code> 内のプラグイン管理エントリを元に戻し、プラグインが作成したファイルを削除します。コード、履歴、他のプラグインには影響しません。`},l={title:`ドキュメント`,dialogDescription:`同梱の Specrails ドキュメントを閲覧できます。サイドバーでガイドを切り替えてください。`,sidebarEmpty:`ドキュメントはまだありません`,indexEmpty:`ドキュメントはここに表示されます。ユーザーガイドはアプリに同梱され docs/guide/ にあります。~/.specrails/docs/guide/ 以下に Markdown ファイルを置くとカスタマイズできます。`,categoryEmpty:`このカテゴリにはまだドキュメントがありません。`,documentCount_one:`{{count}} 件のドキュメント`,documentCount_other:`{{count}} 件のドキュメント`,categoryCount_one:`{{count}} カテゴリ`,categoryCount_other:`{{count}} カテゴリ`,summary:`{{categories}}にわたって{{documents}}。`,loadError:`ドキュメントの読み込みに失敗しました`},u={title:`Jira`,category:`課題トラッキング`,description:`このプロジェクトのスペックを Jira ボードで裏付け — ステータスを双方向同期し、rail 完了時にコメントを投稿します。`,connectedDescription:`{{key}} と同期済み。スペックは Jira ボードと双方向でミラーされます。`,connect:`接続`,connected:`接続済み`,manage:`管理`,modalTitle:`Jira に接続`,manageTitle:`Jira 接続`,bullet1:`Jira ボードとステータスを双方向同期。`,bullet2:`rail 完了時にコメントを投稿。`,bullet3:`Jira のバックログがボードにスペックとして表示されます。`,requires:`Jira Cloud または Data Center のアカウントが必要です。`},d={page:e,card:t,toggle:n,cachedNotice:r,update:i,conflict:a,orphan:o,installDialog:s,uninstallDialog:c,docs:l,jiraCard:u};export{r as cachedNotice,t as card,a as conflict,d as default,l as docs,s as installDialog,u as jiraCard,o as orphan,e as page,n as toggle,c as uninstallDialog,i as update};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var e={title:`Integrationen`,subtitle:`Plugins pro Projekt. Jedes Projekt entscheidet unabhängig, welche Integrationen aktiviert werden.`,selectProject:`Wähle ein Projekt, um Integrationen zu verwalten.`,deprecated:`Veraltet`,loadError:`Plugins konnten nicht geladen werden.`,empty:`In diesem Build sind keine Plugins gebündelt.`},t={statusActive:`Aktiv`,statusDeactivated:`Deaktiviert`,statusDegraded:`Beeinträchtigt`,updateAvailable:`Update verfügbar`,requires:`Erfordert: {{list}}`,deactivatedHint:`Installiert, aber deaktiviert – Claude lädt es in der nächsten Session nicht. Schalte auf <strong>Aktiv</strong>, um es wieder zu aktivieren.`,install:`Installieren`,uninstall:`Deinstallieren`},n={titleActive:`Aktiv – zum Deaktivieren klicken`,titleDeactivated:`Deaktiviert – zum Aktivieren klicken`},r={body:`Claude hat das Marketplace-Plugin im Cache <strong>installiert, aber deaktiviert</strong>. Es kann den Server weiterhin über <code>~/.claude/plugins/cache/...</code> auflösen, obwohl der Schalter aus ist. Um ausschließlich die projektbezogene Variante zu erzwingen, deinstalliere das Marketplace-Plugin aus Claude:`,runInstruction:`In einer aktiven Claude-Session ausführen, dann Claude in diesem Projekt neu starten.`},i={body:`Das gebündelte Manifest hat sich seit der Installation geändert (vermutlich eine Upstream-Umbenennung). Schreibe <code>.mcp.json</code> mit dem kanonischen Eintrag neu – chirurgisch, nur die vom Plugin verwalteten Schlüssel werden angefasst.`,button:`<code>.mcp.json</code>-Eintrag aktualisieren`},a={body:`<strong>{{name}}</strong> ist zusätzlich global über Claudes Plugin-Marketplace aktiviert, was diese projektbezogene Installation überlagert. Damit diese Karte „Aktiv“ wird, deaktiviere unten die globale Version – sie kann jederzeit wieder über Claude aktiviert werden.`,disableButton:`<code>{{key}}</code> deaktivieren`},o={badge:`Verwaist`,removeButton:`Verwaisten Eintrag entfernen`},s={title:`{{name}} installieren`,computingChanges:`Änderungen werden berechnet…`,filesHeading:`Dateien, die geändert werden`,prerequisites:`Voraussetzungen`,autoInstall:`Automatisch installieren`,progress:`Fortschritt`,installingPrereq:`{{name}} wird installiert…`,prereqStartFailed:`Start fehlgeschlagen: {{message}}`},c={title:`{{name}} deinstallieren?`,body:`Dies setzt die vom Plugin verwalteten Einträge in <code>.mcp.json</code> zurück und entfernt alle vom Plugin erstellten Dateien. Dein Code, deine Historie und andere Plugins sind nicht betroffen.`},l={title:`Dokumentation`,dialogDescription:`Durchstöbere die mitgelieferte Specrails-Dokumentation. Wechsle über die Seitenleiste zwischen den Guides.`,sidebarEmpty:`Noch keine Doku`,indexEmpty:`
|
|
1
|
+
var e={title:`Integrationen`,subtitle:`Plugins pro Projekt. Jedes Projekt entscheidet unabhängig, welche Integrationen aktiviert werden.`,selectProject:`Wähle ein Projekt, um Integrationen zu verwalten.`,deprecated:`Veraltet`,loadError:`Plugins konnten nicht geladen werden.`,empty:`In diesem Build sind keine Plugins gebündelt.`},t={statusActive:`Aktiv`,statusDeactivated:`Deaktiviert`,statusDegraded:`Beeinträchtigt`,updateAvailable:`Update verfügbar`,requires:`Erfordert: {{list}}`,deactivatedHint:`Installiert, aber deaktiviert – Claude lädt es in der nächsten Session nicht. Schalte auf <strong>Aktiv</strong>, um es wieder zu aktivieren.`,install:`Installieren`,uninstall:`Deinstallieren`},n={titleActive:`Aktiv – zum Deaktivieren klicken`,titleDeactivated:`Deaktiviert – zum Aktivieren klicken`},r={body:`Claude hat das Marketplace-Plugin im Cache <strong>installiert, aber deaktiviert</strong>. Es kann den Server weiterhin über <code>~/.claude/plugins/cache/...</code> auflösen, obwohl der Schalter aus ist. Um ausschließlich die projektbezogene Variante zu erzwingen, deinstalliere das Marketplace-Plugin aus Claude:`,runInstruction:`In einer aktiven Claude-Session ausführen, dann Claude in diesem Projekt neu starten.`},i={body:`Das gebündelte Manifest hat sich seit der Installation geändert (vermutlich eine Upstream-Umbenennung). Schreibe <code>.mcp.json</code> mit dem kanonischen Eintrag neu – chirurgisch, nur die vom Plugin verwalteten Schlüssel werden angefasst.`,button:`<code>.mcp.json</code>-Eintrag aktualisieren`},a={body:`<strong>{{name}}</strong> ist zusätzlich global über Claudes Plugin-Marketplace aktiviert, was diese projektbezogene Installation überlagert. Damit diese Karte „Aktiv“ wird, deaktiviere unten die globale Version – sie kann jederzeit wieder über Claude aktiviert werden.`,disableButton:`<code>{{key}}</code> deaktivieren`},o={badge:`Verwaist`,removeButton:`Verwaisten Eintrag entfernen`},s={title:`{{name}} installieren`,computingChanges:`Änderungen werden berechnet…`,filesHeading:`Dateien, die geändert werden`,prerequisites:`Voraussetzungen`,autoInstall:`Automatisch installieren`,progress:`Fortschritt`,installingPrereq:`{{name}} wird installiert…`,prereqStartFailed:`Start fehlgeschlagen: {{message}}`},c={title:`{{name}} deinstallieren?`,body:`Dies setzt die vom Plugin verwalteten Einträge in <code>.mcp.json</code> zurück und entfernt alle vom Plugin erstellten Dateien. Dein Code, deine Historie und andere Plugins sind nicht betroffen.`},l={title:`Dokumentation`,dialogDescription:`Durchstöbere die mitgelieferte Specrails-Dokumentation. Wechsle über die Seitenleiste zwischen den Guides.`,sidebarEmpty:`Noch keine Doku`,indexEmpty:`Die Dokumentation erscheint hier. Das Benutzerhandbuch wird mit der App unter docs/guide/ ausgeliefert; lege Markdown-Dateien unter ~/.specrails/docs/guide/ ab, um es anzupassen.`,categoryEmpty:`Noch keine Dokumente in dieser Kategorie.`,documentCount_one:`{{count}} Dokument`,documentCount_other:`{{count}} Dokumente`,categoryCount_one:`{{count}} Kategorie`,categoryCount_other:`{{count}} Kategorien`,summary:`{{documents}} in {{categories}}.`,loadError:`Dokument konnte nicht geladen werden`},u={title:`Jira`,category:`Vorgangsverfolgung`,description:`Hinterlege die Specs dieses Projekts mit einem Jira-Board — bidirektionale Statussynchronisierung plus ein Kommentar am Ende eines Rails.`,connectedDescription:`Synchronisiert mit {{key}}. Specs spiegeln dein Jira-Board in beide Richtungen.`,connect:`Verbinden`,connected:`Verbunden`,manage:`Verwalten`,modalTitle:`Mit Jira verbinden`,manageTitle:`Jira-Verbindung`,bullet1:`Bidirektionale Statussynchronisierung mit deinem Jira-Board.`,bullet2:`Postet einen Kommentar, wenn ein Rail abschließt.`,bullet3:`Dein Jira-Backlog erscheint als Specs auf dem Board.`,requires:`Erfordert ein Jira-Cloud- oder Data-Center-Konto.`},d={page:e,card:t,toggle:n,cachedNotice:r,update:i,conflict:a,orphan:o,installDialog:s,uninstallDialog:c,docs:l,jiraCard:u};export{r as cachedNotice,t as card,a as conflict,d as default,l as docs,s as installDialog,u as jiraCard,o as orphan,e as page,n as toggle,c as uninstallDialog,i as update};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as e,t}from"./chunk-CilyBKbf.js";import{g as n,h as r}from"./index-
|
|
1
|
+
import{r as e,t}from"./chunk-CilyBKbf.js";import{g as n,h as r}from"./index-BXoHFtfG.js";var i=(function(e,t,r){let i=n(r);if(!e||!e.type||!e.children)throw Error(`Expected parent node`);if(typeof t==`number`){if(t<0||t===1/0)throw Error(`Expected positive finite number as index`)}else if(t=e.children.indexOf(t),t<0)throw Error(`Expected child node or index`);for(;++t<e.children.length;)if(i(e.children[t],t,e))return e.children[t]}),a=(function(e){if(e==null)return l;if(typeof e==`string`)return s(e);if(typeof e==`object`)return o(e);if(typeof e==`function`)return c(e);throw Error("Expected function, string, or array as `test`")});function o(e){let t=[],n=-1;for(;++n<e.length;)t[n]=a(e[n]);return c(r);function r(...e){let n=-1;for(;++n<t.length;)if(t[n].apply(this,e))return!0;return!1}}function s(e){return c(t);function t(t){return t.tagName===e}}function c(e){return t;function t(t,n,r){return!!(u(t)&&e.call(this,t,typeof n==`number`?n:void 0,r||void 0))}}function l(e){return!!(e&&typeof e==`object`&&`type`in e&&e.type===`element`&&`tagName`in e&&typeof e.tagName==`string`)}function u(e){return typeof e==`object`&&!!e&&`type`in e&&`tagName`in e}var d=/\n/g,f=/[\t ]+/g,p=a(`br`),m=a(D),h=a(`p`),g=a(`tr`),_=a([`datalist`,`head`,`noembed`,`noframes`,`noscript`,`rp`,`script`,`style`,`template`,`title`,E,O]),v=a(`address.article.aside.blockquote.body.caption.center.dd.dialog.dir.dl.dt.div.figure.figcaption.footer.form,.h1.h2.h3.h4.h5.h6.header.hgroup.hr.html.legend.li.listing.main.menu.nav.ol.p.plaintext.pre.section.ul.xmp`.split(`.`));function y(e,t){let n=t||{},r=`children`in e?e.children:[],i=v(e),a=T(e,{whitespace:n.whitespace||`normal`,breakBefore:!1,breakAfter:!1}),o=[];(e.type===`text`||e.type===`comment`)&&o.push(...S(e,{whitespace:a,breakBefore:!0,breakAfter:!0}));let s=-1;for(;++s<r.length;)o.push(...b(r[s],e,{whitespace:a,breakBefore:s?void 0:i,breakAfter:s<r.length-1?p(r[s+1]):i}));let c=[],l;for(s=-1;++s<o.length;){let e=o[s];typeof e==`number`?l!==void 0&&e>l&&(l=e):e&&(l!==void 0&&l>-1&&c.push(`
|
|
2
2
|
`.repeat(l)||` `),l=-1,c.push(e))}return c.join(``)}function b(e,t,n){return e.type===`element`?x(e,t,n):e.type===`text`?n.whitespace===`normal`?S(e,n):C(e):[]}function x(e,t,n){let r=T(e,n),a=e.children||[],o=-1,s=[];if(_(e))return s;let c,l;for(p(e)||g(e)&&i(t,e,g)?l=`
|
|
3
3
|
`:h(e)?(c=2,l=2):v(e)&&(c=1,l=1);++o<a.length;)s=s.concat(b(a[o],e,{whitespace:r,breakBefore:o?void 0:c,breakAfter:o<a.length-1?p(a[o+1]):l}));return m(e)&&i(t,e,m)&&s.push(` `),c&&s.unshift(c),l&&s.push(l),s}function S(e,t){let n=String(e.value),r=[],i=[],a=0;for(;a<=n.length;){d.lastIndex=a;let e=d.exec(n),i=e&&`index`in e?e.index:n.length;r.push(w(n.slice(a,i).replace(/[\u061C\u200E\u200F\u202A-\u202E\u2066-\u2069]/g,``),a===0?t.breakBefore:!0,i===n.length?t.breakAfter:!0)),a=i+1}let o=-1,s;for(;++o<r.length;)r[o].charCodeAt(r[o].length-1)===8203||o<r.length-1&&r[o+1].charCodeAt(0)===8203?(i.push(r[o]),s=void 0):r[o]?(typeof s==`number`&&i.push(s),i.push(r[o]),s=0):(o===0||o===r.length-1)&&i.push(0);return i}function C(e){return[String(e.value)]}function w(e,t,n){let r=[],i=0,a;for(;i<e.length;){f.lastIndex=i;let n=f.exec(e);a=n?n.index:e.length,!i&&!a&&n&&!t&&r.push(``),i!==a&&r.push(e.slice(i,a)),i=n?a+n[0].length:a}return i!==a&&!n&&r.push(``),r.join(` `)}function T(e,t){if(e.type===`element`){let n=e.properties||{};switch(e.tagName){case`listing`:case`plaintext`:case`xmp`:return`pre`;case`nobr`:return`nowrap`;case`pre`:return n.wrap?`pre-wrap`:`pre`;case`td`:case`th`:return n.noWrap?`nowrap`:t.whitespace;case`textarea`:return`pre-wrap`;default:}}return t.whitespace}function E(e){return!!(e.properties||{}).hidden}function D(e){return e.tagName===`td`||e.tagName===`th`}function O(e){return e.tagName===`dialog`&&!(e.properties||{}).open}function k(e){let t=e.regex,n=e.COMMENT(`//`,`$`,{contains:[{begin:/\\\n/}]}),r=`decltype\\(auto\\)`,i=`[a-zA-Z_]\\w*::`,a=`(?!struct)(`+r+`|`+t.optional(i)+`[a-zA-Z_]\\w*`+t.optional(`<[^<>]+>`)+`)`,o={className:`type`,begin:`\\b[a-z\\d_]*_t\\b`},s={className:`string`,variants:[{begin:`(u8?|U|L)?"`,end:`"`,illegal:`\\n`,contains:[e.BACKSLASH_ESCAPE]},{begin:`(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)`,end:`'`,illegal:`.`},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},c={className:`number`,variants:[{begin:`[+-]?(?:(?:[0-9](?:'?[0-9])*\\.(?:[0-9](?:'?[0-9])*)?|\\.[0-9](?:'?[0-9])*)(?:[Ee][+-]?[0-9](?:'?[0-9])*)?|[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*|0[Xx](?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?|\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)[Pp][+-]?[0-9](?:'?[0-9])*)(?:[Ff](?:16|32|64|128)?|(BF|bf)16|[Ll]|)`},{begin:`[+-]?\\b(?:0[Bb][01](?:'?[01])*|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*|0(?:'?[0-7])*|[1-9](?:'?[0-9])*)(?:[Uu](?:LL?|ll?)|[Uu][Zz]?|(?:LL?|ll?)[Uu]?|[Zz][Uu]|)`}],relevance:0},l={className:`meta`,begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:`if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include`},contains:[{begin:/\\\n/,relevance:0},e.inherit(s,{className:`string`}),{className:`string`,begin:/<.*?>/},n,e.C_BLOCK_COMMENT_MODE]},u={className:`title`,begin:t.optional(i)+e.IDENT_RE,relevance:0},d=t.optional(i)+e.IDENT_RE+`\\s*\\(`,f=`alignas.alignof.and.and_eq.asm.atomic_cancel.atomic_commit.atomic_noexcept.auto.bitand.bitor.break.case.catch.class.co_await.co_return.co_yield.compl.concept.const_cast|10.consteval.constexpr.constinit.continue.decltype.default.delete.do.dynamic_cast|10.else.enum.explicit.export.extern.false.final.for.friend.goto.if.import.inline.module.mutable.namespace.new.noexcept.not.not_eq.nullptr.operator.or.or_eq.override.private.protected.public.reflexpr.register.reinterpret_cast|10.requires.return.sizeof.static_assert.static_cast|10.struct.switch.synchronized.template.this.thread_local.throw.transaction_safe.transaction_safe_dynamic.true.try.typedef.typeid.typename.union.using.virtual.volatile.while.xor.xor_eq`.split(`.`),p=[`bool`,`char`,`char16_t`,`char32_t`,`char8_t`,`double`,`float`,`int`,`long`,`short`,`void`,`wchar_t`,`unsigned`,`signed`,`const`,`static`],m=`any.auto_ptr.barrier.binary_semaphore.bitset.complex.condition_variable.condition_variable_any.counting_semaphore.deque.false_type.flat_map.flat_set.future.imaginary.initializer_list.istringstream.jthread.latch.lock_guard.multimap.multiset.mutex.optional.ostringstream.packaged_task.pair.promise.priority_queue.queue.recursive_mutex.recursive_timed_mutex.scoped_lock.set.shared_future.shared_lock.shared_mutex.shared_timed_mutex.shared_ptr.stack.string_view.stringstream.timed_mutex.thread.true_type.tuple.unique_lock.unique_ptr.unordered_map.unordered_multimap.unordered_multiset.unordered_set.variant.vector.weak_ptr.wstring.wstring_view`.split(`.`),h=`abort.abs.acos.apply.as_const.asin.atan.atan2.calloc.ceil.cerr.cin.clog.cos.cosh.cout.declval.endl.exchange.exit.exp.fabs.floor.fmod.forward.fprintf.fputs.free.frexp.fscanf.future.invoke.isalnum.isalpha.iscntrl.isdigit.isgraph.islower.isprint.ispunct.isspace.isupper.isxdigit.labs.launder.ldexp.log.log10.make_pair.make_shared.make_shared_for_overwrite.make_tuple.make_unique.malloc.memchr.memcmp.memcpy.memset.modf.move.pow.printf.putchar.puts.realloc.scanf.sin.sinh.snprintf.sprintf.sqrt.sscanf.std.stderr.stdin.stdout.strcat.strchr.strcmp.strcpy.strcspn.strlen.strncat.strncmp.strncpy.strpbrk.strrchr.strspn.strstr.swap.tan.tanh.terminate.to_underlying.tolower.toupper.vfprintf.visit.vprintf.vsprintf`.split(`.`),g={type:p,keyword:f,literal:[`NULL`,`false`,`nullopt`,`nullptr`,`true`],built_in:[`_Pragma`],_type_hints:m},_={className:`function.dispatch`,relevance:0,keywords:{_hint:h},begin:t.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,e.IDENT_RE,t.lookahead(/(<[^<>]+>|)\s*\(/))},v=[_,l,o,n,e.C_BLOCK_COMMENT_MODE,c,s],y={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:`new throw return else`,end:/;/}],keywords:g,contains:v.concat([{begin:/\(/,end:/\)/,keywords:g,contains:v.concat([`self`]),relevance:0}]),relevance:0},b={className:`function`,begin:`(`+a+`[\\*&\\s]+)+`+d,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:g,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:r,keywords:g,relevance:0},{begin:d,returnBegin:!0,contains:[u],relevance:0},{begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[s,c]},{relevance:0,match:/,/},{className:`params`,begin:/\(/,end:/\)/,keywords:g,relevance:0,contains:[n,e.C_BLOCK_COMMENT_MODE,s,c,o,{begin:/\(/,end:/\)/,keywords:g,relevance:0,contains:[`self`,n,e.C_BLOCK_COMMENT_MODE,s,c,o]}]},o,n,e.C_BLOCK_COMMENT_MODE,l]};return{name:`C++`,aliases:[`cc`,`c++`,`h++`,`hpp`,`hh`,`hxx`,`cxx`],keywords:g,illegal:`</`,classNameAliases:{"function.dispatch":`built_in`},contains:[].concat(y,b,_,v,[l,{begin:`\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function|flat_map|flat_set)\\s*<(?!<)`,end:`>`,keywords:g,contains:[`self`,o]},{begin:e.IDENT_RE+`::`,keywords:g},{match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/],className:{1:`keyword`,3:`title.class`}}])}}function A(e){let t={type:[`boolean`,`byte`,`word`,`String`],built_in:`KeyboardController.MouseController.SoftwareSerial.EthernetServer.EthernetClient.LiquidCrystal.RobotControl.GSMVoiceCall.EthernetUDP.EsploraTFT.HttpClient.RobotMotor.WiFiClient.GSMScanner.FileSystem.Scheduler.GSMServer.YunClient.YunServer.IPAddress.GSMClient.GSMModem.Keyboard.Ethernet.Console.GSMBand.Esplora.Stepper.Process.WiFiUDP.GSM_SMS.Mailbox.USBHost.Firmata.PImage.Client.Server.GSMPIN.FileIO.Bridge.Serial.EEPROM.Stream.Mouse.Audio.Servo.File.Task.GPRS.WiFi.Wire.TFT.GSM.SPI.SD`.split(`.`),_hints:`setup.loop.runShellCommandAsynchronously.analogWriteResolution.retrieveCallingNumber.printFirmwareVersion.analogReadResolution.sendDigitalPortPair.noListenOnLocalhost.readJoystickButton.setFirmwareVersion.readJoystickSwitch.scrollDisplayRight.getVoiceCallStatus.scrollDisplayLeft.writeMicroseconds.delayMicroseconds.beginTransmission.getSignalStrength.runAsynchronously.getAsynchronously.listenOnLocalhost.getCurrentCarrier.readAccelerometer.messageAvailable.sendDigitalPorts.lineFollowConfig.countryNameWrite.runShellCommand.readStringUntil.rewindDirectory.readTemperature.setClockDivider.readLightSensor.endTransmission.analogReference.detachInterrupt.countryNameRead.attachInterrupt.encryptionType.readBytesUntil.robotNameWrite.readMicrophone.robotNameRead.cityNameWrite.userNameWrite.readJoystickY.readJoystickX.mouseReleased.openNextFile.scanNetworks.noInterrupts.digitalWrite.beginSpeaker.mousePressed.isActionDone.mouseDragged.displayLogos.noAutoscroll.addParameter.remoteNumber.getModifiers.keyboardRead.userNameRead.waitContinue.processInput.parseCommand.printVersion.readNetworks.writeMessage.blinkVersion.cityNameRead.readMessage.setDataMode.parsePacket.isListening.setBitOrder.beginPacket.isDirectory.motorsWrite.drawCompass.digitalRead.clearScreen.serialEvent.rightToLeft.setTextSize.leftToRight.requestFrom.keyReleased.compassRead.analogWrite.interrupts.WiFiServer.disconnect.playMelody.parseFloat.autoscroll.getPINUsed.setPINUsed.setTimeout.sendAnalog.readSlider.analogRead.beginWrite.createChar.motorsStop.keyPressed.tempoWrite.readButton.subnetMask.debugPrint.macAddress.writeGreen.randomSeed.attachGPRS.readString.sendString.remotePort.releaseAll.mouseMoved.background.getXChange.getYChange.answerCall.getResult.voiceCall.endPacket.constrain.getSocket.writeJSON.getButton.available.connected.findUntil.readBytes.exitValue.readGreen.writeBlue.startLoop.IPAddress.isPressed.sendSysex.pauseMode.gatewayIP.setCursor.getOemKey.tuneWrite.noDisplay.loadImage.switchPIN.onRequest.onReceive.changePIN.playFile.noBuffer.parseInt.overflow.checkPIN.knobRead.beginTFT.bitClear.updateIR.bitWrite.position.writeRGB.highByte.writeRed.setSpeed.readBlue.noStroke.remoteIP.transfer.shutdown.hangCall.beginSMS.endWrite.attached.maintain.noCursor.checkReg.checkPUK.shiftOut.isValid.shiftIn.pulseIn.connect.println.localIP.pinMode.getIMEI.display.noBlink.process.getBand.running.beginSD.drawBMP.lowByte.setBand.release.bitRead.prepare.pointTo.readRed.setMode.noFill.remove.listen.stroke.detach.attach.noTone.exists.buffer.height.bitSet.circle.config.cursor.random.IRread.setDNS.endSMS.getKey.micros.millis.begin.print.write.ready.flush.width.isPIN.blink.clear.press.mkdir.rmdir.close.point.yield.image.BSSID.click.delay.read.text.move.peek.beep.rect.line.open.seek.fill.size.turn.stop.home.find.step.tone.sqrt.RSSI.SSID.end.bit.tan.cos.sin.pow.map.abs.max.min.get.run.put`.split(`.`),literal:[`DIGITAL_MESSAGE`,`FIRMATA_STRING`,`ANALOG_MESSAGE`,`REPORT_DIGITAL`,`REPORT_ANALOG`,`INPUT_PULLUP`,`SET_PIN_MODE`,`INTERNAL2V56`,`SYSTEM_RESET`,`LED_BUILTIN`,`INTERNAL1V1`,`SYSEX_START`,`INTERNAL`,`EXTERNAL`,`DEFAULT`,`OUTPUT`,`INPUT`,`HIGH`,`LOW`]},n=k(e),r=n.keywords;return r.type=[...r.type,...t.type],r.literal=[...r.literal,...t.literal],r.built_in=[...r.built_in,...t.built_in],r._hints=t._hints,n.name=`Arduino`,n.aliases=[`ino`],n.supersetOf=`cpp`,n}function j(e){let t=e.regex,n={},r={begin:/\$\{/,end:/\}/,contains:[`self`,{begin:/:-/,contains:[n]}]};Object.assign(n,{className:`variable`,variants:[{begin:t.concat(/\$[\w\d#@][\w\d_]*/,`(?![\\w\\d])(?![$])`)},r]});let i={className:`subst`,begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},a=e.inherit(e.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:`comment`}}),o={begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:`string`})]}},s={className:`string`,begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,n,i]};i.contains.push(s);let c={match:/\\"/},l={className:`string`,begin:/'/,end:/'/},u={match:/\\'/},d={begin:/\$?\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:`number`},e.NUMBER_MODE,n]},f=e.SHEBANG({binary:`(${[`fish`,`bash`,`zsh`,`sh`,`csh`,`ksh`,`tcsh`,`dash`,`scsh`].join(`|`)})`,relevance:10}),p={className:`function`,begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},m=[`if`,`then`,`else`,`elif`,`fi`,`time`,`for`,`while`,`until`,`in`,`do`,`done`,`case`,`esac`,`coproc`,`function`,`select`],h=[`true`,`false`],g={match:/(\/[a-z._-]+)+/},_=[`break`,`cd`,`continue`,`eval`,`exec`,`exit`,`export`,`getopts`,`hash`,`pwd`,`readonly`,`return`,`shift`,`test`,`times`,`trap`,`umask`,`unset`],v=[`alias`,`bind`,`builtin`,`caller`,`command`,`declare`,`echo`,`enable`,`help`,`let`,`local`,`logout`,`mapfile`,`printf`,`read`,`readarray`,`source`,`sudo`,`type`,`typeset`,`ulimit`,`unalias`],y=`autoload.bg.bindkey.bye.cap.chdir.clone.comparguments.compcall.compctl.compdescribe.compfiles.compgroups.compquote.comptags.comptry.compvalues.dirs.disable.disown.echotc.echoti.emulate.fc.fg.float.functions.getcap.getln.history.integer.jobs.kill.limit.log.noglob.popd.print.pushd.pushln.rehash.sched.setcap.setopt.stat.suspend.ttyctl.unfunction.unhash.unlimit.unsetopt.vared.wait.whence.where.which.zcompile.zformat.zftp.zle.zmodload.zparseopts.zprof.zpty.zregexparse.zsocket.zstyle.ztcp`.split(`.`),b=`chcon.chgrp.chown.chmod.cp.dd.df.dir.dircolors.ln.ls.mkdir.mkfifo.mknod.mktemp.mv.realpath.rm.rmdir.shred.sync.touch.truncate.vdir.b2sum.base32.base64.cat.cksum.comm.csplit.cut.expand.fmt.fold.head.join.md5sum.nl.numfmt.od.paste.ptx.pr.sha1sum.sha224sum.sha256sum.sha384sum.sha512sum.shuf.sort.split.sum.tac.tail.tr.tsort.unexpand.uniq.wc.arch.basename.chroot.date.dirname.du.echo.env.expr.factor.groups.hostid.id.link.logname.nice.nohup.nproc.pathchk.pinky.printenv.printf.pwd.readlink.runcon.seq.sleep.stat.stdbuf.stty.tee.test.timeout.tty.uname.unlink.uptime.users.who.whoami.yes`.split(`.`);return{name:`Bash`,aliases:[`sh`,`zsh`],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,keyword:m,literal:h,built_in:[..._,...v,`set`,`shopt`,...y,...b]},contains:[f,e.SHEBANG(),p,d,a,o,g,s,c,l,u,n]}}function M(e){let t=e.regex,n=e.COMMENT(`//`,`$`,{contains:[{begin:/\\\n/}]}),r=`decltype\\(auto\\)`,i=`[a-zA-Z_]\\w*::`,a=`(`+r+`|`+t.optional(i)+`[a-zA-Z_]\\w*`+t.optional(`<[^<>]+>`)+`)`,o={className:`type`,variants:[{begin:`\\b[a-z\\d_]*_t\\b`},{match:/\batomic_[a-z]{3,6}\b/}]},s={className:`string`,variants:[{begin:`(u8?|U|L)?"`,end:`"`,illegal:`\\n`,contains:[e.BACKSLASH_ESCAPE]},{begin:`(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)`,end:`'`,illegal:`.`},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},c={className:`number`,variants:[{match:/\b(0b[01']+)/},{match:/(-?)\b([\d']+(\.[\d']*)?|\.[\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)/},{match:/(-?)\b(0[xX][a-fA-F0-9]+(?:'[a-fA-F0-9]+)*(?:\.[a-fA-F0-9]*(?:'[a-fA-F0-9]*)*)?(?:[pP][-+]?[0-9]+)?(l|L)?(u|U)?)/},{match:/(-?)\b\d+(?:'\d+)*(?:\.\d*(?:'\d*)*)?(?:[eE][-+]?\d+)?/}],relevance:0},l={className:`meta`,begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:`if else elif endif define undef warning error line pragma _Pragma ifdef ifndef elifdef elifndef include`},contains:[{begin:/\\\n/,relevance:0},e.inherit(s,{className:`string`}),{className:`string`,begin:/<.*?>/},n,e.C_BLOCK_COMMENT_MODE]},u={className:`title`,begin:t.optional(i)+e.IDENT_RE,relevance:0},d=t.optional(i)+e.IDENT_RE+`\\s*\\(`,f={keyword:`asm.auto.break.case.continue.default.do.else.enum.extern.for.fortran.goto.if.inline.register.restrict.return.sizeof.typeof.typeof_unqual.struct.switch.typedef.union.volatile.while._Alignas._Alignof._Atomic._Generic._Noreturn._Static_assert._Thread_local.alignas.alignof.noreturn.static_assert.thread_local._Pragma`.split(`.`),type:`float.double.signed.unsigned.int.short.long.char.void._Bool._BitInt._Complex._Imaginary._Decimal32._Decimal64._Decimal96._Decimal128._Decimal64x._Decimal128x._Float16._Float32._Float64._Float128._Float32x._Float64x._Float128x.const.static.constexpr.complex.bool.imaginary`.split(`.`),literal:`true false NULL`,built_in:`std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr`},p=[l,o,n,e.C_BLOCK_COMMENT_MODE,c,s],m={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:`new throw return else`,end:/;/}],keywords:f,contains:p.concat([{begin:/\(/,end:/\)/,keywords:f,contains:p.concat([`self`]),relevance:0}]),relevance:0},h={begin:`(`+a+`[\\*&\\s]+)+`+d,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:f,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:r,keywords:f,relevance:0},{begin:d,returnBegin:!0,contains:[e.inherit(u,{className:`title.function`})],relevance:0},{relevance:0,match:/,/},{className:`params`,begin:/\(/,end:/\)/,keywords:f,relevance:0,contains:[n,e.C_BLOCK_COMMENT_MODE,s,c,o,{begin:/\(/,end:/\)/,keywords:f,relevance:0,contains:[`self`,n,e.C_BLOCK_COMMENT_MODE,s,c,o]}]},o,n,e.C_BLOCK_COMMENT_MODE,l]};return{name:`C`,aliases:[`h`],keywords:f,disableAutodetect:!0,illegal:`</`,contains:[].concat(m,h,p,[l,{begin:e.IDENT_RE+`::`,keywords:f},{className:`class`,beginKeywords:`enum class struct union`,end:/[{;:<>=]/,contains:[{beginKeywords:`final class struct`},e.TITLE_MODE]}]),exports:{preprocessor:l,strings:s,keywords:f}}}function N(e){let t=e.regex,n=e.COMMENT(`//`,`$`,{contains:[{begin:/\\\n/}]}),r=`decltype\\(auto\\)`,i=`[a-zA-Z_]\\w*::`,a=`(?!struct)(`+r+`|`+t.optional(i)+`[a-zA-Z_]\\w*`+t.optional(`<[^<>]+>`)+`)`,o={className:`type`,begin:`\\b[a-z\\d_]*_t\\b`},s={className:`string`,variants:[{begin:`(u8?|U|L)?"`,end:`"`,illegal:`\\n`,contains:[e.BACKSLASH_ESCAPE]},{begin:`(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)`,end:`'`,illegal:`.`},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},c={className:`number`,variants:[{begin:`[+-]?(?:(?:[0-9](?:'?[0-9])*\\.(?:[0-9](?:'?[0-9])*)?|\\.[0-9](?:'?[0-9])*)(?:[Ee][+-]?[0-9](?:'?[0-9])*)?|[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*|0[Xx](?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?|\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)[Pp][+-]?[0-9](?:'?[0-9])*)(?:[Ff](?:16|32|64|128)?|(BF|bf)16|[Ll]|)`},{begin:`[+-]?\\b(?:0[Bb][01](?:'?[01])*|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*|0(?:'?[0-7])*|[1-9](?:'?[0-9])*)(?:[Uu](?:LL?|ll?)|[Uu][Zz]?|(?:LL?|ll?)[Uu]?|[Zz][Uu]|)`}],relevance:0},l={className:`meta`,begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:`if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include`},contains:[{begin:/\\\n/,relevance:0},e.inherit(s,{className:`string`}),{className:`string`,begin:/<.*?>/},n,e.C_BLOCK_COMMENT_MODE]},u={className:`title`,begin:t.optional(i)+e.IDENT_RE,relevance:0},d=t.optional(i)+e.IDENT_RE+`\\s*\\(`,f=`alignas.alignof.and.and_eq.asm.atomic_cancel.atomic_commit.atomic_noexcept.auto.bitand.bitor.break.case.catch.class.co_await.co_return.co_yield.compl.concept.const_cast|10.consteval.constexpr.constinit.continue.decltype.default.delete.do.dynamic_cast|10.else.enum.explicit.export.extern.false.final.for.friend.goto.if.import.inline.module.mutable.namespace.new.noexcept.not.not_eq.nullptr.operator.or.or_eq.override.private.protected.public.reflexpr.register.reinterpret_cast|10.requires.return.sizeof.static_assert.static_cast|10.struct.switch.synchronized.template.this.thread_local.throw.transaction_safe.transaction_safe_dynamic.true.try.typedef.typeid.typename.union.using.virtual.volatile.while.xor.xor_eq`.split(`.`),p=[`bool`,`char`,`char16_t`,`char32_t`,`char8_t`,`double`,`float`,`int`,`long`,`short`,`void`,`wchar_t`,`unsigned`,`signed`,`const`,`static`],m=`any.auto_ptr.barrier.binary_semaphore.bitset.complex.condition_variable.condition_variable_any.counting_semaphore.deque.false_type.flat_map.flat_set.future.imaginary.initializer_list.istringstream.jthread.latch.lock_guard.multimap.multiset.mutex.optional.ostringstream.packaged_task.pair.promise.priority_queue.queue.recursive_mutex.recursive_timed_mutex.scoped_lock.set.shared_future.shared_lock.shared_mutex.shared_timed_mutex.shared_ptr.stack.string_view.stringstream.timed_mutex.thread.true_type.tuple.unique_lock.unique_ptr.unordered_map.unordered_multimap.unordered_multiset.unordered_set.variant.vector.weak_ptr.wstring.wstring_view`.split(`.`),h=`abort.abs.acos.apply.as_const.asin.atan.atan2.calloc.ceil.cerr.cin.clog.cos.cosh.cout.declval.endl.exchange.exit.exp.fabs.floor.fmod.forward.fprintf.fputs.free.frexp.fscanf.future.invoke.isalnum.isalpha.iscntrl.isdigit.isgraph.islower.isprint.ispunct.isspace.isupper.isxdigit.labs.launder.ldexp.log.log10.make_pair.make_shared.make_shared_for_overwrite.make_tuple.make_unique.malloc.memchr.memcmp.memcpy.memset.modf.move.pow.printf.putchar.puts.realloc.scanf.sin.sinh.snprintf.sprintf.sqrt.sscanf.std.stderr.stdin.stdout.strcat.strchr.strcmp.strcpy.strcspn.strlen.strncat.strncmp.strncpy.strpbrk.strrchr.strspn.strstr.swap.tan.tanh.terminate.to_underlying.tolower.toupper.vfprintf.visit.vprintf.vsprintf`.split(`.`),g={type:p,keyword:f,literal:[`NULL`,`false`,`nullopt`,`nullptr`,`true`],built_in:[`_Pragma`],_type_hints:m},_={className:`function.dispatch`,relevance:0,keywords:{_hint:h},begin:t.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,e.IDENT_RE,t.lookahead(/(<[^<>]+>|)\s*\(/))},v=[_,l,o,n,e.C_BLOCK_COMMENT_MODE,c,s],y={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:`new throw return else`,end:/;/}],keywords:g,contains:v.concat([{begin:/\(/,end:/\)/,keywords:g,contains:v.concat([`self`]),relevance:0}]),relevance:0},b={className:`function`,begin:`(`+a+`[\\*&\\s]+)+`+d,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:g,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:r,keywords:g,relevance:0},{begin:d,returnBegin:!0,contains:[u],relevance:0},{begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[s,c]},{relevance:0,match:/,/},{className:`params`,begin:/\(/,end:/\)/,keywords:g,relevance:0,contains:[n,e.C_BLOCK_COMMENT_MODE,s,c,o,{begin:/\(/,end:/\)/,keywords:g,relevance:0,contains:[`self`,n,e.C_BLOCK_COMMENT_MODE,s,c,o]}]},o,n,e.C_BLOCK_COMMENT_MODE,l]};return{name:`C++`,aliases:[`cc`,`c++`,`h++`,`hpp`,`hh`,`hxx`,`cxx`],keywords:g,illegal:`</`,classNameAliases:{"function.dispatch":`built_in`},contains:[].concat(y,b,_,v,[l,{begin:`\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function|flat_map|flat_set)\\s*<(?!<)`,end:`>`,keywords:g,contains:[`self`,o]},{begin:e.IDENT_RE+`::`,keywords:g},{match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/],className:{1:`keyword`,3:`title.class`}}])}}function P(e){let t=[`bool`,`byte`,`char`,`decimal`,`delegate`,`double`,`dynamic`,`enum`,`float`,`int`,`long`,`nint`,`nuint`,`object`,`sbyte`,`short`,`string`,`ulong`,`uint`,`ushort`],n=[`public`,`private`,`protected`,`static`,`internal`,`protected`,`abstract`,`async`,`extern`,`override`,`unsafe`,`virtual`,`new`,`sealed`,`partial`],r={keyword:`abstract.as.base.break.case.catch.class.const.continue.do.else.event.explicit.extern.finally.fixed.for.foreach.goto.if.implicit.in.interface.internal.is.lock.namespace.new.operator.out.override.params.private.protected.public.readonly.record.ref.return.scoped.sealed.sizeof.stackalloc.static.struct.switch.this.throw.try.typeof.unchecked.unsafe.using.virtual.void.volatile.while`.split(`.`).concat(`add.alias.and.ascending.args.async.await.by.descending.dynamic.equals.file.from.get.global.group.init.into.join.let.nameof.not.notnull.on.or.orderby.partial.record.remove.required.scoped.select.set.unmanaged.value|0.var.when.where.with.yield`.split(`.`)),built_in:t,literal:[`default`,`false`,`null`,`true`]},i=e.inherit(e.TITLE_MODE,{begin:`[a-zA-Z](\\.?\\w)*`}),a={className:`number`,variants:[{begin:`\\b(0b[01']+)`},{begin:`(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)`},{begin:`(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)`}],relevance:0},o={className:`string`,begin:/"""("*)(?!")(.|\n)*?"""\1/,relevance:1},s={className:`string`,begin:`@"`,end:`"`,contains:[{begin:`""`}]},c=e.inherit(s,{illegal:/\n/}),l={className:`subst`,begin:/\{/,end:/\}/,keywords:r},u=e.inherit(l,{illegal:/\n/}),d={className:`string`,begin:/\$"/,end:`"`,illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},e.BACKSLASH_ESCAPE,u]},f={className:`string`,begin:/\$@"/,end:`"`,contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:`""`},l]},p=e.inherit(f,{illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:`""`},u]});l.contains=[f,d,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.C_BLOCK_COMMENT_MODE],u.contains=[p,d,c,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.inherit(e.C_BLOCK_COMMENT_MODE,{illegal:/\n/})];let m={variants:[o,f,d,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},h={begin:`<`,end:`>`,contains:[{beginKeywords:`in out`},i]},g=e.IDENT_RE+`(<`+e.IDENT_RE+`(\\s*,\\s*`+e.IDENT_RE+`)*>)?(\\[\\])?`,_={begin:`@`+e.IDENT_RE,relevance:0};return{name:`C#`,aliases:[`cs`,`c#`],keywords:r,illegal:/::/,contains:[e.COMMENT(`///`,`$`,{returnBegin:!0,contains:[{className:`doctag`,variants:[{begin:`///`,relevance:0},{begin:`<!--|-->`},{begin:`</?`,end:`>`}]}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:`meta`,begin:`#`,end:`$`,keywords:{keyword:`if else elif endif define undef warning error line region endregion pragma checksum`}},m,a,{beginKeywords:`class interface`,relevance:0,end:/[{;=]/,illegal:/[^\s:,]/,contains:[{beginKeywords:`where class`},i,h,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:`namespace`,relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[i,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:`record`,relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[i,h,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:`meta`,begin:`^\\s*\\[(?=[\\w])`,excludeBegin:!0,end:`\\]`,excludeEnd:!0,contains:[{className:`string`,begin:/"/,end:/"/}]},{beginKeywords:`new return throw await else`,relevance:0},{className:`function`,begin:`(`+g+`\\s+)+`+e.IDENT_RE+`\\s*(<[^=]+>\\s*)?\\(`,returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:r,contains:[{beginKeywords:n.join(` `),relevance:0},{begin:e.IDENT_RE+`\\s*(<[^=]+>\\s*)?\\(`,returnBegin:!0,contains:[e.TITLE_MODE,h],relevance:0},{match:/\(\)/},{className:`params`,begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:r,relevance:0,contains:[m,a,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},_]}}var F=e=>({IMPORTANT:{scope:`meta`,begin:`!important`},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:`number`,begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:`built_in`,begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:`selector-attr`,begin:/\[/,end:/\]/,illegal:`$`,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:`number`,begin:e.NUMBER_RE+`(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?`,relevance:0},CSS_VARIABLE:{className:`attr`,begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}),I=`a.abbr.address.article.aside.audio.b.blockquote.body.button.canvas.caption.cite.code.dd.del.details.dfn.div.dl.dt.em.fieldset.figcaption.figure.footer.form.h1.h2.h3.h4.h5.h6.header.hgroup.html.i.iframe.img.input.ins.kbd.label.legend.li.main.mark.menu.nav.object.ol.optgroup.option.p.picture.q.quote.samp.section.select.source.span.strong.summary.sup.table.tbody.td.textarea.tfoot.th.thead.time.tr.ul.var.video`.split(`.`),L=`defs.g.marker.mask.pattern.svg.switch.symbol.feBlend.feColorMatrix.feComponentTransfer.feComposite.feConvolveMatrix.feDiffuseLighting.feDisplacementMap.feFlood.feGaussianBlur.feImage.feMerge.feMorphology.feOffset.feSpecularLighting.feTile.feTurbulence.linearGradient.radialGradient.stop.circle.ellipse.image.line.path.polygon.polyline.rect.text.use.textPath.tspan.foreignObject.clipPath`.split(`.`),R=[...I,...L],z=`any-hover.any-pointer.aspect-ratio.color.color-gamut.color-index.device-aspect-ratio.device-height.device-width.display-mode.forced-colors.grid.height.hover.inverted-colors.monochrome.orientation.overflow-block.overflow-inline.pointer.prefers-color-scheme.prefers-contrast.prefers-reduced-motion.prefers-reduced-transparency.resolution.scan.scripting.update.width.min-width.max-width.min-height.max-height`.split(`.`).sort().reverse(),ee=`active.any-link.blank.checked.current.default.defined.dir.disabled.drop.empty.enabled.first.first-child.first-of-type.fullscreen.future.focus.focus-visible.focus-within.has.host.host-context.hover.indeterminate.in-range.invalid.is.lang.last-child.last-of-type.left.link.local-link.not.nth-child.nth-col.nth-last-child.nth-last-col.nth-last-of-type.nth-of-type.only-child.only-of-type.optional.out-of-range.past.placeholder-shown.read-only.read-write.required.right.root.scope.target.target-within.user-invalid.valid.visited.where`.split(`.`).sort().reverse(),te=[`after`,`backdrop`,`before`,`cue`,`cue-region`,`first-letter`,`first-line`,`grammar-error`,`marker`,`part`,`placeholder`,`selection`,`slotted`,`spelling-error`].sort().reverse(),ne=`accent-color.align-content.align-items.align-self.alignment-baseline.all.anchor-name.animation.animation-composition.animation-delay.animation-direction.animation-duration.animation-fill-mode.animation-iteration-count.animation-name.animation-play-state.animation-range.animation-range-end.animation-range-start.animation-timeline.animation-timing-function.appearance.aspect-ratio.backdrop-filter.backface-visibility.background.background-attachment.background-blend-mode.background-clip.background-color.background-image.background-origin.background-position.background-position-x.background-position-y.background-repeat.background-size.baseline-shift.block-size.border.border-block.border-block-color.border-block-end.border-block-end-color.border-block-end-style.border-block-end-width.border-block-start.border-block-start-color.border-block-start-style.border-block-start-width.border-block-style.border-block-width.border-bottom.border-bottom-color.border-bottom-left-radius.border-bottom-right-radius.border-bottom-style.border-bottom-width.border-collapse.border-color.border-end-end-radius.border-end-start-radius.border-image.border-image-outset.border-image-repeat.border-image-slice.border-image-source.border-image-width.border-inline.border-inline-color.border-inline-end.border-inline-end-color.border-inline-end-style.border-inline-end-width.border-inline-start.border-inline-start-color.border-inline-start-style.border-inline-start-width.border-inline-style.border-inline-width.border-left.border-left-color.border-left-style.border-left-width.border-radius.border-right.border-right-color.border-right-style.border-right-width.border-spacing.border-start-end-radius.border-start-start-radius.border-style.border-top.border-top-color.border-top-left-radius.border-top-right-radius.border-top-style.border-top-width.border-width.bottom.box-align.box-decoration-break.box-direction.box-flex.box-flex-group.box-lines.box-ordinal-group.box-orient.box-pack.box-shadow.box-sizing.break-after.break-before.break-inside.caption-side.caret-color.clear.clip.clip-path.clip-rule.color.color-interpolation.color-interpolation-filters.color-profile.color-rendering.color-scheme.column-count.column-fill.column-gap.column-rule.column-rule-color.column-rule-style.column-rule-width.column-span.column-width.columns.contain.contain-intrinsic-block-size.contain-intrinsic-height.contain-intrinsic-inline-size.contain-intrinsic-size.contain-intrinsic-width.container.container-name.container-type.content.content-visibility.counter-increment.counter-reset.counter-set.cue.cue-after.cue-before.cursor.cx.cy.direction.display.dominant-baseline.empty-cells.enable-background.field-sizing.fill.fill-opacity.fill-rule.filter.flex.flex-basis.flex-direction.flex-flow.flex-grow.flex-shrink.flex-wrap.float.flood-color.flood-opacity.flow.font.font-display.font-family.font-feature-settings.font-kerning.font-language-override.font-optical-sizing.font-palette.font-size.font-size-adjust.font-smooth.font-smoothing.font-stretch.font-style.font-synthesis.font-synthesis-position.font-synthesis-small-caps.font-synthesis-style.font-synthesis-weight.font-variant.font-variant-alternates.font-variant-caps.font-variant-east-asian.font-variant-emoji.font-variant-ligatures.font-variant-numeric.font-variant-position.font-variation-settings.font-weight.forced-color-adjust.gap.glyph-orientation-horizontal.glyph-orientation-vertical.grid.grid-area.grid-auto-columns.grid-auto-flow.grid-auto-rows.grid-column.grid-column-end.grid-column-start.grid-gap.grid-row.grid-row-end.grid-row-start.grid-template.grid-template-areas.grid-template-columns.grid-template-rows.hanging-punctuation.height.hyphenate-character.hyphenate-limit-chars.hyphens.icon.image-orientation.image-rendering.image-resolution.ime-mode.initial-letter.initial-letter-align.inline-size.inset.inset-area.inset-block.inset-block-end.inset-block-start.inset-inline.inset-inline-end.inset-inline-start.isolation.justify-content.justify-items.justify-self.kerning.left.letter-spacing.lighting-color.line-break.line-height.line-height-step.list-style.list-style-image.list-style-position.list-style-type.margin.margin-block.margin-block-end.margin-block-start.margin-bottom.margin-inline.margin-inline-end.margin-inline-start.margin-left.margin-right.margin-top.margin-trim.marker.marker-end.marker-mid.marker-start.marks.mask.mask-border.mask-border-mode.mask-border-outset.mask-border-repeat.mask-border-slice.mask-border-source.mask-border-width.mask-clip.mask-composite.mask-image.mask-mode.mask-origin.mask-position.mask-repeat.mask-size.mask-type.masonry-auto-flow.math-depth.math-shift.math-style.max-block-size.max-height.max-inline-size.max-width.min-block-size.min-height.min-inline-size.min-width.mix-blend-mode.nav-down.nav-index.nav-left.nav-right.nav-up.none.normal.object-fit.object-position.offset.offset-anchor.offset-distance.offset-path.offset-position.offset-rotate.opacity.order.orphans.outline.outline-color.outline-offset.outline-style.outline-width.overflow.overflow-anchor.overflow-block.overflow-clip-margin.overflow-inline.overflow-wrap.overflow-x.overflow-y.overlay.overscroll-behavior.overscroll-behavior-block.overscroll-behavior-inline.overscroll-behavior-x.overscroll-behavior-y.padding.padding-block.padding-block-end.padding-block-start.padding-bottom.padding-inline.padding-inline-end.padding-inline-start.padding-left.padding-right.padding-top.page.page-break-after.page-break-before.page-break-inside.paint-order.pause.pause-after.pause-before.perspective.perspective-origin.place-content.place-items.place-self.pointer-events.position.position-anchor.position-visibility.print-color-adjust.quotes.r.resize.rest.rest-after.rest-before.right.rotate.row-gap.ruby-align.ruby-position.scale.scroll-behavior.scroll-margin.scroll-margin-block.scroll-margin-block-end.scroll-margin-block-start.scroll-margin-bottom.scroll-margin-inline.scroll-margin-inline-end.scroll-margin-inline-start.scroll-margin-left.scroll-margin-right.scroll-margin-top.scroll-padding.scroll-padding-block.scroll-padding-block-end.scroll-padding-block-start.scroll-padding-bottom.scroll-padding-inline.scroll-padding-inline-end.scroll-padding-inline-start.scroll-padding-left.scroll-padding-right.scroll-padding-top.scroll-snap-align.scroll-snap-stop.scroll-snap-type.scroll-timeline.scroll-timeline-axis.scroll-timeline-name.scrollbar-color.scrollbar-gutter.scrollbar-width.shape-image-threshold.shape-margin.shape-outside.shape-rendering.speak.speak-as.src.stop-color.stop-opacity.stroke.stroke-dasharray.stroke-dashoffset.stroke-linecap.stroke-linejoin.stroke-miterlimit.stroke-opacity.stroke-width.tab-size.table-layout.text-align.text-align-all.text-align-last.text-anchor.text-combine-upright.text-decoration.text-decoration-color.text-decoration-line.text-decoration-skip.text-decoration-skip-ink.text-decoration-style.text-decoration-thickness.text-emphasis.text-emphasis-color.text-emphasis-position.text-emphasis-style.text-indent.text-justify.text-orientation.text-overflow.text-rendering.text-shadow.text-size-adjust.text-transform.text-underline-offset.text-underline-position.text-wrap.text-wrap-mode.text-wrap-style.timeline-scope.top.touch-action.transform.transform-box.transform-origin.transform-style.transition.transition-behavior.transition-delay.transition-duration.transition-property.transition-timing-function.translate.unicode-bidi.user-modify.user-select.vector-effect.vertical-align.view-timeline.view-timeline-axis.view-timeline-inset.view-timeline-name.view-transition-name.visibility.voice-balance.voice-duration.voice-family.voice-pitch.voice-range.voice-rate.voice-stress.voice-volume.white-space.white-space-collapse.widows.width.will-change.word-break.word-spacing.word-wrap.writing-mode.x.y.z-index.zoom`.split(`.`).sort().reverse();function re(e){let t=e.regex,n=F(e),r={begin:/-(webkit|moz|ms|o)-(?=[a-z])/},i=/@-?\w[\w]*(-\w+)*/,a=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE];return{name:`CSS`,case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:`from to`},classNameAliases:{keyframePosition:`selector-tag`},contains:[n.BLOCK_COMMENT,r,n.CSS_NUMBER_MODE,{className:`selector-id`,begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:`selector-class`,begin:`\\.[a-zA-Z-][a-zA-Z0-9_-]*`,relevance:0},n.ATTRIBUTE_SELECTOR_MODE,{className:`selector-pseudo`,variants:[{begin:`:(`+ee.join(`|`)+`)`},{begin:`:(:)?(`+te.join(`|`)+`)`}]},n.CSS_VARIABLE,{className:`attribute`,begin:`\\b(`+ne.join(`|`)+`)\\b`},{begin:/:/,end:/[;}{]/,contains:[n.BLOCK_COMMENT,n.HEXCOLOR,n.IMPORTANT,n.CSS_NUMBER_MODE,...a,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:`url data-uri`},contains:[...a,{className:`string`,begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},n.FUNCTION_DISPATCH]},{begin:t.lookahead(/@/),end:`[{;]`,relevance:0,illegal:/:/,contains:[{className:`keyword`,begin:i},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:`and or not only`,attribute:z.join(` `)},contains:[{begin:/[a-z-]+(?=:)/,className:`attribute`},...a,n.CSS_NUMBER_MODE]}]},{className:`selector-tag`,begin:`\\b(`+R.join(`|`)+`)\\b`}]}}function ie(e){let t=e.regex;return{name:`Diff`,aliases:[`patch`],contains:[{className:`meta`,relevance:10,match:t.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)},{className:`comment`,variants:[{begin:t.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/),end:/$/},{match:/^\*{15}$/}]},{className:`addition`,begin:/^\+/,end:/$/},{className:`deletion`,begin:/^-/,end:/$/},{className:`addition`,begin:/^!/,end:/$/}]}}function ae(e){let t={keyword:[`break`,`case`,`chan`,`const`,`continue`,`default`,`defer`,`else`,`fallthrough`,`for`,`func`,`go`,`goto`,`if`,`import`,`interface`,`map`,`package`,`range`,`return`,`select`,`struct`,`switch`,`type`,`var`],type:[`bool`,`byte`,`complex64`,`complex128`,`error`,`float32`,`float64`,`int8`,`int16`,`int32`,`int64`,`string`,`uint8`,`uint16`,`uint32`,`uint64`,`int`,`uint`,`uintptr`,`rune`],literal:[`true`,`false`,`iota`,`nil`],built_in:[`append`,`cap`,`close`,`complex`,`copy`,`imag`,`len`,`make`,`new`,`panic`,`print`,`println`,`real`,`recover`,`delete`]};return{name:`Go`,aliases:[`golang`],keywords:t,illegal:`</`,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:`string`,variants:[e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{begin:"`",end:"`"}]},{className:`number`,variants:[{match:/-?\b0[xX]\.[a-fA-F0-9](_?[a-fA-F0-9])*[pP][+-]?\d(_?\d)*i?/,relevance:0},{match:/-?\b0[xX](_?[a-fA-F0-9])+((\.([a-fA-F0-9](_?[a-fA-F0-9])*)?)?[pP][+-]?\d(_?\d)*)?i?/,relevance:0},{match:/-?\b0[oO](_?[0-7])*i?/,relevance:0},{match:/-?\.\d(_?\d)*([eE][+-]?\d(_?\d)*)?i?/,relevance:0},{match:/-?\b\d(_?\d)*(\.(\d(_?\d)*)?)?([eE][+-]?\d(_?\d)*)?i?/,relevance:0}]},{begin:/:=/},{className:`function`,beginKeywords:`func`,end:`\\s*(\\{|$)`,excludeEnd:!0,contains:[e.TITLE_MODE,{className:`params`,begin:/\(/,end:/\)/,endsParent:!0,keywords:t,illegal:/["']/}]}]}}function oe(e){let t=e.regex;return{name:`GraphQL`,aliases:[`gql`],case_insensitive:!0,disableAutodetect:!1,keywords:{keyword:[`query`,`mutation`,`subscription`,`type`,`input`,`schema`,`directive`,`interface`,`union`,`scalar`,`fragment`,`enum`,`on`],literal:[`true`,`false`,`null`]},contains:[e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{scope:`punctuation`,match:/[.]{3}/,relevance:0},{scope:`punctuation`,begin:/[\!\(\)\:\=\[\]\{\|\}]{1}/,relevance:0},{scope:`variable`,begin:/\$/,end:/\W/,excludeEnd:!0,relevance:0},{scope:`meta`,match:/@\w+/,excludeEnd:!0},{scope:`symbol`,begin:t.concat(/[_A-Za-z][_0-9A-Za-z]*/,t.lookahead(/\s*:/)),relevance:0}],illegal:[/[;<']/,/BEGIN/]}}function B(e){let t=e.regex,n={className:`number`,relevance:0,variants:[{begin:/([+-]+)?[\d]+_[\d_]+/},{begin:e.NUMBER_RE}]},r=e.COMMENT();r.variants=[{begin:/;/,end:/$/},{begin:/#/,end:/$/}];let i={className:`variable`,variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)\}/}]},a={className:`literal`,begin:/\bon|off|true|false|yes|no\b/},o={className:`string`,contains:[e.BACKSLASH_ESCAPE],variants:[{begin:`'''`,end:`'''`,relevance:10},{begin:`"""`,end:`"""`,relevance:10},{begin:`"`,end:`"`},{begin:`'`,end:`'`}]},s={begin:/\[/,end:/\]/,contains:[r,a,i,o,n,`self`],relevance:0},c=t.either(/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/);return{name:`TOML, also INI`,aliases:[`toml`],case_insensitive:!0,illegal:/\S/,contains:[r,{className:`section`,begin:/\[+/,end:/\]+/},{begin:t.concat(c,`(\\s*\\.\\s*`,c,`)*`,t.lookahead(/\s*=\s*[^#\s]/)),className:`attr`,starts:{end:/$/,contains:[r,s,a,i,o,n]}}]}}var V=`[0-9](_*[0-9])*`,H=`\\.(${V})`,U=`[0-9a-fA-F](_*[0-9a-fA-F])*`,se={className:`number`,variants:[{begin:`(\\b(${V})((${H})|\\.)?|(${H}))[eE][+-]?(${V})[fFdD]?\\b`},{begin:`\\b(${V})((${H})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${H})[fFdD]?\\b`},{begin:`\\b(${V})[fFdD]\\b`},{begin:`\\b0[xX]((${U})\\.?|(${U})?\\.(${U}))[pP][+-]?(${V})[fFdD]?\\b`},{begin:`\\b(0|[1-9](_*[0-9])*)[lL]?\\b`},{begin:`\\b0[xX](${U})[lL]?\\b`},{begin:`\\b0(_*[0-7])*[lL]?\\b`},{begin:`\\b0[bB][01](_*[01])*[lL]?\\b`}],relevance:0};function ce(e,t,n){return n===-1?``:e.replace(t,r=>ce(e,t,n-1))}function le(e){let t=e.regex,n=`[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*`,r=n+ce(`(?:<`+n+`~~~(?:\\s*,\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*~~~)*>)?`,/~~~/g,2),i={keyword:`synchronized.abstract.private.var.static.if.const .for.while.strictfp.finally.protected.import.native.final.void.enum.else.break.transient.catch.instanceof.volatile.case.assert.package.default.public.try.switch.continue.throws.protected.public.private.module.requires.exports.do.sealed.yield.permits.goto.when`.split(`.`),literal:[`false`,`true`,`null`],type:[`char`,`boolean`,`long`,`float`,`int`,`byte`,`short`,`double`],built_in:[`super`,`this`]},a={className:`meta`,begin:`@`+n,contains:[{begin:/\(/,end:/\)/,contains:[`self`]}]},o={className:`params`,begin:/\(/,end:/\)/,keywords:i,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE],endsParent:!0};return{name:`Java`,aliases:[`jsp`],keywords:i,illegal:/<\/|#/,contains:[e.COMMENT(`/\\*\\*`,`\\*/`,{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:`doctag`,begin:`@[A-Za-z]+`}]}),{begin:/import java\.[a-z]+\./,keywords:`import`,relevance:2},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/,className:`string`,contains:[e.BACKSLASH_ESCAPE]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,n],className:{1:`keyword`,3:`title.class`}},{match:/non-sealed/,scope:`keyword`},{begin:[t.concat(/(?!else)/,n),/\s+/,n,/\s+/,/=(?!=)/],className:{1:`type`,3:`variable`,5:`operator`}},{begin:[/record/,/\s+/,n],className:{1:`keyword`,3:`title.class`},contains:[o,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:`new throw return else`,relevance:0},{begin:[`(?:`+r+`\\s+)`,e.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{2:`title.function`},keywords:i,contains:[{className:`params`,begin:/\(/,end:/\)/,keywords:i,relevance:0,contains:[a,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,se,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},se,a]}}var ue=`[A-Za-z$_][0-9A-Za-z$_]*`,de=`as.in.of.if.for.while.finally.var.new.function.do.return.void.else.break.catch.instanceof.with.throw.case.default.try.switch.continue.typeof.delete.let.yield.const.class.debugger.async.await.static.import.from.export.extends.using`.split(`.`),fe=[`true`,`false`,`null`,`undefined`,`NaN`,`Infinity`],pe=`Object.Function.Boolean.Symbol.Math.Date.Number.BigInt.String.RegExp.Array.Float32Array.Float64Array.Int8Array.Uint8Array.Uint8ClampedArray.Int16Array.Int32Array.Uint16Array.Uint32Array.BigInt64Array.BigUint64Array.Set.Map.WeakSet.WeakMap.ArrayBuffer.SharedArrayBuffer.Atomics.DataView.JSON.Promise.Generator.GeneratorFunction.AsyncFunction.Reflect.Proxy.Intl.WebAssembly`.split(`.`),me=[`Error`,`EvalError`,`InternalError`,`RangeError`,`ReferenceError`,`SyntaxError`,`TypeError`,`URIError`],he=[`setInterval`,`setTimeout`,`clearInterval`,`clearTimeout`,`require`,`exports`,`eval`,`isFinite`,`isNaN`,`parseFloat`,`parseInt`,`decodeURI`,`decodeURIComponent`,`encodeURI`,`encodeURIComponent`,`escape`,`unescape`],ge=[`arguments`,`this`,`super`,`console`,`window`,`document`,`localStorage`,`sessionStorage`,`module`,`global`],W=[].concat(he,pe,me);function _e(e){let t=e.regex,n=(e,{after:t})=>{let n=`</`+e[0].slice(1);return e.input.indexOf(n,t)!==-1},r=ue,i={begin:`<>`,end:`</>`},a=/<[A-Za-z0-9\\._:-]+\s*\/>/,o={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,t)=>{let r=e[0].length+e.index,i=e.input[r];if(i===`<`||i===`,`){t.ignoreMatch();return}i===`>`&&(n(e,{after:r})||t.ignoreMatch());let a,o=e.input.substring(r);if(a=o.match(/^\s*=/)){t.ignoreMatch();return}if((a=o.match(/^\s+extends\s+/))&&a.index===0){t.ignoreMatch();return}}},s={$pattern:ue,keyword:de,literal:fe,built_in:W,"variable.language":ge},c=`[0-9](_?[0-9])*`,l=`\\.(${c})`,u=`0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`,d={className:`number`,variants:[{begin:`(\\b(${u})((${l})|\\.)?|(${l}))[eE][+-]?(${c})\\b`},{begin:`\\b(${u})\\b((${l})\\b|\\.)?|(${l})\\b`},{begin:`\\b(0|[1-9](_?[0-9])*)n\\b`},{begin:`\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b`},{begin:`\\b0[bB][0-1](_?[0-1])*n?\\b`},{begin:`\\b0[oO][0-7](_?[0-7])*n?\\b`},{begin:`\\b0[0-7]+n?\\b`}],relevance:0},f={className:`subst`,begin:`\\$\\{`,end:`\\}`,keywords:s,contains:[]},p={begin:".?html`",end:``,starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,f],subLanguage:`xml`}},m={begin:".?css`",end:``,starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,f],subLanguage:`css`}},h={begin:".?gql`",end:``,starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,f],subLanguage:`graphql`}},g={className:`string`,begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,f]},_={className:`comment`,variants:[e.COMMENT(/\/\*\*(?!\/)/,`\\*/`,{relevance:0,contains:[{begin:`(?=@[A-Za-z]+)`,relevance:0,contains:[{className:`doctag`,begin:`@[A-Za-z]+`},{className:`type`,begin:`\\{`,end:`\\}`,excludeEnd:!0,excludeBegin:!0,relevance:0},{className:`variable`,begin:r+`(?=\\s*(-)|$)`,endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]},v=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,p,m,h,g,{match:/\$\d+/},d];f.contains=v.concat({begin:/\{/,end:/\}/,keywords:s,contains:[`self`].concat(v)});let y=[].concat(_,f.contains),b=y.concat([{begin:/(\s*)\(/,end:/\)/,keywords:s,contains:[`self`].concat(y)}]),x={className:`params`,begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:s,contains:b},S={variants:[{match:[/class/,/\s+/,r,/\s+/,/extends/,/\s+/,t.concat(r,`(`,t.concat(/\./,r),`)*`)],scope:{1:`keyword`,3:`title.class`,5:`keyword`,7:`title.class.inherited`}},{match:[/class/,/\s+/,r],scope:{1:`keyword`,3:`title.class`}}]},C={relevance:0,match:t.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:`title.class`,keywords:{_:[...pe,...me]}},w={label:`use_strict`,className:`meta`,relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},T={variants:[{match:[/function/,/\s+/,r,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:`keyword`,3:`title.function`},label:`func.def`,contains:[x],illegal:/%/},E={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:`variable.constant`};function D(e){return t.concat(`(?!`,e.join(`|`),`)`)}let O={match:t.concat(/\b/,D([...he,`super`,`import`].map(e=>`${e}\\s*\\(`)),r,t.lookahead(/\s*\(/)),className:`title.function`,relevance:0},k={begin:t.concat(/\./,t.lookahead(t.concat(r,/(?![0-9A-Za-z$_(])/))),end:r,excludeBegin:!0,keywords:`prototype`,className:`property`,relevance:0},A={match:[/get|set/,/\s+/,r,/(?=\()/],className:{1:`keyword`,3:`title.function`},contains:[{begin:/\(\)/},x]},j=`(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|`+e.UNDERSCORE_IDENT_RE+`)\\s*=>`,M={match:[/const|var|let/,/\s+/,r,/\s*/,/=\s*/,/(async\s*)?/,t.lookahead(j)],keywords:`async`,className:{1:`keyword`,3:`title.function`},contains:[x]};return{name:`JavaScript`,aliases:[`js`,`jsx`,`mjs`,`cjs`],keywords:s,exports:{PARAMS_CONTAINS:b,CLASS_REFERENCE:C},illegal:/#(?![$_A-z])/,contains:[e.SHEBANG({label:`shebang`,binary:`node`,relevance:5}),w,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,p,m,h,g,_,{match:/\$\d+/},d,C,{scope:`attr`,match:r+t.lookahead(`:`),relevance:0},M,{begin:`(`+e.RE_STARTERS_RE+`|\\b(case|return|throw)\\b)\\s*`,keywords:`return throw case`,relevance:0,contains:[_,e.REGEXP_MODE,{className:`function`,begin:j,returnBegin:!0,end:`\\s*=>`,contains:[{className:`params`,variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:s,contains:b}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:i.begin,end:i.end},{match:a},{begin:o.begin,"on:begin":o.isTrulyOpeningTag,end:o.end}],subLanguage:`xml`,contains:[{begin:o.begin,end:o.end,skip:!0,contains:[`self`]}]}]},T,{beginKeywords:`while if switch catch for`},{begin:`\\b(?!function)`+e.UNDERSCORE_IDENT_RE+`\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{`,returnBegin:!0,label:`func.def`,contains:[x,e.inherit(e.TITLE_MODE,{begin:r,className:`title.function`})]},{match:/\.\.\./,relevance:0},k,{match:`\\$`+r,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:`title.function`},contains:[x]},O,E,S,A,{match:/\$[(.]/}]}}function G(e){let t={className:`attr`,begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},n={match:/[{}[\],:]/,className:`punctuation`,relevance:0},r=[`true`,`false`,`null`],i={scope:`literal`,beginKeywords:r.join(` `)};return{name:`JSON`,aliases:[`jsonc`],keywords:{literal:r},contains:[t,n,e.QUOTE_STRING_MODE,i,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],illegal:`\\S`}}var K=`[0-9](_*[0-9])*`,q=`\\.(${K})`,J=`[0-9a-fA-F](_*[0-9a-fA-F])*`,ve={className:`number`,variants:[{begin:`(\\b(${K})((${q})|\\.)?|(${q}))[eE][+-]?(${K})[fFdD]?\\b`},{begin:`\\b(${K})((${q})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${q})[fFdD]?\\b`},{begin:`\\b(${K})[fFdD]\\b`},{begin:`\\b0[xX]((${J})\\.?|(${J})?\\.(${J}))[pP][+-]?(${K})[fFdD]?\\b`},{begin:`\\b(0|[1-9](_*[0-9])*)[lL]?\\b`},{begin:`\\b0[xX](${J})[lL]?\\b`},{begin:`\\b0(_*[0-7])*[lL]?\\b`},{begin:`\\b0[bB][01](_*[01])*[lL]?\\b`}],relevance:0};function ye(e){let t={keyword:`abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual`,built_in:`Byte Short Char Int Long Boolean Float Double Void Unit Nothing`,literal:`true false null`},n={className:`keyword`,begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:`symbol`,begin:/@\w+/}]}},r={className:`symbol`,begin:e.UNDERSCORE_IDENT_RE+`@`},i={className:`subst`,begin:/\$\{/,end:/\}/,contains:[e.C_NUMBER_MODE]},a={className:`variable`,begin:`\\$`+e.UNDERSCORE_IDENT_RE},o={className:`string`,variants:[{begin:`"""`,end:`"""(?=[^"])`,contains:[a,i]},{begin:`'`,end:`'`,illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:`"`,end:`"`,illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,a,i]}]};i.contains.push(o);let s={className:`meta`,begin:`@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*`+e.UNDERSCORE_IDENT_RE+`)?`},c={className:`meta`,begin:`@`+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[e.inherit(o,{className:`string`}),`self`]}]},l=ve,u=e.COMMENT(`/\\*`,`\\*/`,{contains:[e.C_BLOCK_COMMENT_MODE]}),d={variants:[{className:`type`,begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},f=d;return f.variants[1].contains=[d],d.variants[1].contains=[f],{name:`Kotlin`,aliases:[`kt`,`kts`],keywords:t,contains:[e.COMMENT(`/\\*\\*`,`\\*/`,{relevance:0,contains:[{className:`doctag`,begin:`@[A-Za-z]+`}]}),e.C_LINE_COMMENT_MODE,u,n,r,s,c,{className:`function`,beginKeywords:`fun`,end:`[(]|$`,returnBegin:!0,excludeEnd:!0,keywords:t,relevance:5,contains:[{begin:e.UNDERSCORE_IDENT_RE+`\\s*\\(`,returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:`type`,begin:/</,end:/>/,keywords:`reified`,relevance:0},{className:`params`,begin:/\(/,end:/\)/,endsParent:!0,keywords:t,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[d,e.C_LINE_COMMENT_MODE,u],relevance:0},e.C_LINE_COMMENT_MODE,u,s,c,o,e.C_NUMBER_MODE]},u]},{begin:[/class|interface|trait/,/\s+/,e.UNDERSCORE_IDENT_RE],beginScope:{3:`title.class`},keywords:`class interface trait`,end:/[:\{(]|$/,excludeEnd:!0,illegal:`extends implements`,contains:[{beginKeywords:`public protected internal private constructor`},e.UNDERSCORE_TITLE_MODE,{className:`type`,begin:/</,end:/>/,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:`type`,begin:/[,:]\s*/,end:/[<\(,){\s]|$/,excludeBegin:!0,returnEnd:!0},s,c]},o,{className:`meta`,begin:`^#!/usr/bin/env`,end:`$`,illegal:`
|
|
4
4
|
`},l]}}var be=e=>({IMPORTANT:{scope:`meta`,begin:`!important`},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:`number`,begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:`built_in`,begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:`selector-attr`,begin:/\[/,end:/\]/,illegal:`$`,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:`number`,begin:e.NUMBER_RE+`(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?`,relevance:0},CSS_VARIABLE:{className:`attr`,begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}),xe=`a.abbr.address.article.aside.audio.b.blockquote.body.button.canvas.caption.cite.code.dd.del.details.dfn.div.dl.dt.em.fieldset.figcaption.figure.footer.form.h1.h2.h3.h4.h5.h6.header.hgroup.html.i.iframe.img.input.ins.kbd.label.legend.li.main.mark.menu.nav.object.ol.optgroup.option.p.picture.q.quote.samp.section.select.source.span.strong.summary.sup.table.tbody.td.textarea.tfoot.th.thead.time.tr.ul.var.video`.split(`.`),Se=`defs.g.marker.mask.pattern.svg.switch.symbol.feBlend.feColorMatrix.feComponentTransfer.feComposite.feConvolveMatrix.feDiffuseLighting.feDisplacementMap.feFlood.feGaussianBlur.feImage.feMerge.feMorphology.feOffset.feSpecularLighting.feTile.feTurbulence.linearGradient.radialGradient.stop.circle.ellipse.image.line.path.polygon.polyline.rect.text.use.textPath.tspan.foreignObject.clipPath`.split(`.`),Ce=[...xe,...Se],we=`any-hover.any-pointer.aspect-ratio.color.color-gamut.color-index.device-aspect-ratio.device-height.device-width.display-mode.forced-colors.grid.height.hover.inverted-colors.monochrome.orientation.overflow-block.overflow-inline.pointer.prefers-color-scheme.prefers-contrast.prefers-reduced-motion.prefers-reduced-transparency.resolution.scan.scripting.update.width.min-width.max-width.min-height.max-height`.split(`.`).sort().reverse(),Te=`active.any-link.blank.checked.current.default.defined.dir.disabled.drop.empty.enabled.first.first-child.first-of-type.fullscreen.future.focus.focus-visible.focus-within.has.host.host-context.hover.indeterminate.in-range.invalid.is.lang.last-child.last-of-type.left.link.local-link.not.nth-child.nth-col.nth-last-child.nth-last-col.nth-last-of-type.nth-of-type.only-child.only-of-type.optional.out-of-range.past.placeholder-shown.read-only.read-write.required.right.root.scope.target.target-within.user-invalid.valid.visited.where`.split(`.`).sort().reverse(),Y=[`after`,`backdrop`,`before`,`cue`,`cue-region`,`first-letter`,`first-line`,`grammar-error`,`marker`,`part`,`placeholder`,`selection`,`slotted`,`spelling-error`].sort().reverse(),Ee=`accent-color.align-content.align-items.align-self.alignment-baseline.all.anchor-name.animation.animation-composition.animation-delay.animation-direction.animation-duration.animation-fill-mode.animation-iteration-count.animation-name.animation-play-state.animation-range.animation-range-end.animation-range-start.animation-timeline.animation-timing-function.appearance.aspect-ratio.backdrop-filter.backface-visibility.background.background-attachment.background-blend-mode.background-clip.background-color.background-image.background-origin.background-position.background-position-x.background-position-y.background-repeat.background-size.baseline-shift.block-size.border.border-block.border-block-color.border-block-end.border-block-end-color.border-block-end-style.border-block-end-width.border-block-start.border-block-start-color.border-block-start-style.border-block-start-width.border-block-style.border-block-width.border-bottom.border-bottom-color.border-bottom-left-radius.border-bottom-right-radius.border-bottom-style.border-bottom-width.border-collapse.border-color.border-end-end-radius.border-end-start-radius.border-image.border-image-outset.border-image-repeat.border-image-slice.border-image-source.border-image-width.border-inline.border-inline-color.border-inline-end.border-inline-end-color.border-inline-end-style.border-inline-end-width.border-inline-start.border-inline-start-color.border-inline-start-style.border-inline-start-width.border-inline-style.border-inline-width.border-left.border-left-color.border-left-style.border-left-width.border-radius.border-right.border-right-color.border-right-style.border-right-width.border-spacing.border-start-end-radius.border-start-start-radius.border-style.border-top.border-top-color.border-top-left-radius.border-top-right-radius.border-top-style.border-top-width.border-width.bottom.box-align.box-decoration-break.box-direction.box-flex.box-flex-group.box-lines.box-ordinal-group.box-orient.box-pack.box-shadow.box-sizing.break-after.break-before.break-inside.caption-side.caret-color.clear.clip.clip-path.clip-rule.color.color-interpolation.color-interpolation-filters.color-profile.color-rendering.color-scheme.column-count.column-fill.column-gap.column-rule.column-rule-color.column-rule-style.column-rule-width.column-span.column-width.columns.contain.contain-intrinsic-block-size.contain-intrinsic-height.contain-intrinsic-inline-size.contain-intrinsic-size.contain-intrinsic-width.container.container-name.container-type.content.content-visibility.counter-increment.counter-reset.counter-set.cue.cue-after.cue-before.cursor.cx.cy.direction.display.dominant-baseline.empty-cells.enable-background.field-sizing.fill.fill-opacity.fill-rule.filter.flex.flex-basis.flex-direction.flex-flow.flex-grow.flex-shrink.flex-wrap.float.flood-color.flood-opacity.flow.font.font-display.font-family.font-feature-settings.font-kerning.font-language-override.font-optical-sizing.font-palette.font-size.font-size-adjust.font-smooth.font-smoothing.font-stretch.font-style.font-synthesis.font-synthesis-position.font-synthesis-small-caps.font-synthesis-style.font-synthesis-weight.font-variant.font-variant-alternates.font-variant-caps.font-variant-east-asian.font-variant-emoji.font-variant-ligatures.font-variant-numeric.font-variant-position.font-variation-settings.font-weight.forced-color-adjust.gap.glyph-orientation-horizontal.glyph-orientation-vertical.grid.grid-area.grid-auto-columns.grid-auto-flow.grid-auto-rows.grid-column.grid-column-end.grid-column-start.grid-gap.grid-row.grid-row-end.grid-row-start.grid-template.grid-template-areas.grid-template-columns.grid-template-rows.hanging-punctuation.height.hyphenate-character.hyphenate-limit-chars.hyphens.icon.image-orientation.image-rendering.image-resolution.ime-mode.initial-letter.initial-letter-align.inline-size.inset.inset-area.inset-block.inset-block-end.inset-block-start.inset-inline.inset-inline-end.inset-inline-start.isolation.justify-content.justify-items.justify-self.kerning.left.letter-spacing.lighting-color.line-break.line-height.line-height-step.list-style.list-style-image.list-style-position.list-style-type.margin.margin-block.margin-block-end.margin-block-start.margin-bottom.margin-inline.margin-inline-end.margin-inline-start.margin-left.margin-right.margin-top.margin-trim.marker.marker-end.marker-mid.marker-start.marks.mask.mask-border.mask-border-mode.mask-border-outset.mask-border-repeat.mask-border-slice.mask-border-source.mask-border-width.mask-clip.mask-composite.mask-image.mask-mode.mask-origin.mask-position.mask-repeat.mask-size.mask-type.masonry-auto-flow.math-depth.math-shift.math-style.max-block-size.max-height.max-inline-size.max-width.min-block-size.min-height.min-inline-size.min-width.mix-blend-mode.nav-down.nav-index.nav-left.nav-right.nav-up.none.normal.object-fit.object-position.offset.offset-anchor.offset-distance.offset-path.offset-position.offset-rotate.opacity.order.orphans.outline.outline-color.outline-offset.outline-style.outline-width.overflow.overflow-anchor.overflow-block.overflow-clip-margin.overflow-inline.overflow-wrap.overflow-x.overflow-y.overlay.overscroll-behavior.overscroll-behavior-block.overscroll-behavior-inline.overscroll-behavior-x.overscroll-behavior-y.padding.padding-block.padding-block-end.padding-block-start.padding-bottom.padding-inline.padding-inline-end.padding-inline-start.padding-left.padding-right.padding-top.page.page-break-after.page-break-before.page-break-inside.paint-order.pause.pause-after.pause-before.perspective.perspective-origin.place-content.place-items.place-self.pointer-events.position.position-anchor.position-visibility.print-color-adjust.quotes.r.resize.rest.rest-after.rest-before.right.rotate.row-gap.ruby-align.ruby-position.scale.scroll-behavior.scroll-margin.scroll-margin-block.scroll-margin-block-end.scroll-margin-block-start.scroll-margin-bottom.scroll-margin-inline.scroll-margin-inline-end.scroll-margin-inline-start.scroll-margin-left.scroll-margin-right.scroll-margin-top.scroll-padding.scroll-padding-block.scroll-padding-block-end.scroll-padding-block-start.scroll-padding-bottom.scroll-padding-inline.scroll-padding-inline-end.scroll-padding-inline-start.scroll-padding-left.scroll-padding-right.scroll-padding-top.scroll-snap-align.scroll-snap-stop.scroll-snap-type.scroll-timeline.scroll-timeline-axis.scroll-timeline-name.scrollbar-color.scrollbar-gutter.scrollbar-width.shape-image-threshold.shape-margin.shape-outside.shape-rendering.speak.speak-as.src.stop-color.stop-opacity.stroke.stroke-dasharray.stroke-dashoffset.stroke-linecap.stroke-linejoin.stroke-miterlimit.stroke-opacity.stroke-width.tab-size.table-layout.text-align.text-align-all.text-align-last.text-anchor.text-combine-upright.text-decoration.text-decoration-color.text-decoration-line.text-decoration-skip.text-decoration-skip-ink.text-decoration-style.text-decoration-thickness.text-emphasis.text-emphasis-color.text-emphasis-position.text-emphasis-style.text-indent.text-justify.text-orientation.text-overflow.text-rendering.text-shadow.text-size-adjust.text-transform.text-underline-offset.text-underline-position.text-wrap.text-wrap-mode.text-wrap-style.timeline-scope.top.touch-action.transform.transform-box.transform-origin.transform-style.transition.transition-behavior.transition-delay.transition-duration.transition-property.transition-timing-function.translate.unicode-bidi.user-modify.user-select.vector-effect.vertical-align.view-timeline.view-timeline-axis.view-timeline-inset.view-timeline-name.view-transition-name.visibility.voice-balance.voice-duration.voice-family.voice-pitch.voice-range.voice-rate.voice-stress.voice-volume.white-space.white-space-collapse.widows.width.will-change.word-break.word-spacing.word-wrap.writing-mode.x.y.z-index.zoom`.split(`.`).sort().reverse(),De=Te.concat(Y).sort().reverse();function Oe(e){let t=be(e),n=De,r=`[\\w-]+`,i=`(`+r+`|@\\{[\\w-]+\\})`,a=[],o=[],s=function(e){return{className:`string`,begin:`~?`+e+`.*?`+e}},c=function(e,t,n){return{className:e,begin:t,relevance:n}},l={$pattern:/[a-z-]+/,keyword:`and or not only`,attribute:we.join(` `)},u={begin:`\\(`,end:`\\)`,contains:o,keywords:l,relevance:0};o.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s(`'`),s(`"`),t.CSS_NUMBER_MODE,{begin:`(url|data-uri)\\(`,starts:{className:`string`,end:`[\\)\\n]`,excludeEnd:!0}},t.HEXCOLOR,u,c(`variable`,`@@?`+r,10),c(`variable`,`@\\{`+r+`\\}`),c(`built_in`,"~?`[^`]*?`"),{className:`attribute`,begin:r+`\\s*:`,end:`:`,returnBegin:!0,excludeEnd:!0},t.IMPORTANT,{beginKeywords:`and not`},t.FUNCTION_DISPATCH);let d=o.concat({begin:/\{/,end:/\}/,contains:a}),f={beginKeywords:`when`,endsWithParent:!0,contains:[{beginKeywords:`and not`}].concat(o)},p={begin:i+`\\s*:`,returnBegin:!0,end:/[;}]/,relevance:0,contains:[{begin:/-(webkit|moz|ms|o)-/},t.CSS_VARIABLE,{className:`attribute`,begin:`\\b(`+Ee.join(`|`)+`)\\b`,end:/(?=:)/,starts:{endsWithParent:!0,illegal:`[<=$]`,relevance:0,contains:o}}]},m={className:`keyword`,begin:`@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b`,starts:{end:`[;{}]`,keywords:l,returnEnd:!0,contains:o,relevance:0}},h={className:`variable`,variants:[{begin:`@`+r+`\\s*:`,relevance:15},{begin:`@`+r}],starts:{end:`[;}]`,returnEnd:!0,contains:d}},g={variants:[{begin:`[\\.#:&\\[>]`,end:`[;{}]`},{begin:i,end:/\{/}],returnBegin:!0,returnEnd:!0,illegal:`[<='$"]`,relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,f,c(`keyword`,`all\\b`),c(`variable`,`@\\{`+r+`\\}`),{begin:`\\b(`+Ce.join(`|`)+`)\\b`,className:`selector-tag`},t.CSS_NUMBER_MODE,c(`selector-tag`,i,0),c(`selector-id`,`#`+i),c(`selector-class`,`\\.`+i,0),c(`selector-tag`,`&`,0),t.ATTRIBUTE_SELECTOR_MODE,{className:`selector-pseudo`,begin:`:(`+Te.join(`|`)+`)`},{className:`selector-pseudo`,begin:`:(:)?(`+Y.join(`|`)+`)`},{begin:/\(/,end:/\)/,relevance:0,contains:d},{begin:`!important`},t.FUNCTION_DISPATCH]},_={begin:`[\\w-]+:(:)?(${n.join(`|`)})`,returnBegin:!0,contains:[g]};return a.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,m,h,_,p,g,f,t.FUNCTION_DISPATCH),{name:`Less`,case_insensitive:!0,illegal:`[=>'/<($"]`,contains:a}}function ke(e){let t=`\\[=*\\[`,n=`\\]=*\\]`,r={begin:t,end:n,contains:[`self`]},i=[e.COMMENT(`--(?!`+t+`)`,`$`),e.COMMENT(`--`+t,n,{contains:[r],relevance:10})];return{name:`Lua`,aliases:[`pluto`],keywords:{$pattern:e.UNDERSCORE_IDENT_RE,literal:`true false nil`,keyword:`and break do else elseif end for goto if in local not or repeat return then until while`,built_in:`_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove`},contains:i.concat([{className:`function`,beginKeywords:`function`,end:`\\)`,contains:[e.inherit(e.TITLE_MODE,{begin:`([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*`}),{className:`params`,begin:`\\(`,endsWithParent:!0,contains:i}].concat(i)},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:`string`,begin:t,end:n,contains:[r],relevance:5}])}}function X(e){let t={className:`variable`,variants:[{begin:`\\$\\(`+e.UNDERSCORE_IDENT_RE+`\\)`,contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%<?\^\+\*]/}]},n={className:`string`,begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,t]},r={className:`variable`,begin:/\$\([\w-]+\s/,end:/\)/,keywords:{built_in:`subst patsubst strip findstring filter filter-out sort word wordlist firstword lastword dir notdir suffix basename addsuffix addprefix join wildcard realpath abspath error warning shell origin flavor foreach if or and call eval file value`},contains:[t,n]},i={begin:`^`+e.UNDERSCORE_IDENT_RE+`\\s*(?=[:+?]?=)`},a={className:`meta`,begin:/^\.PHONY:/,end:/$/,keywords:{$pattern:/[\.\w]+/,keyword:`.PHONY`}},o={className:`section`,begin:/^[^\s]+:/,end:/$/,contains:[t]};return{name:`Makefile`,aliases:[`mk`,`mak`,`make`],keywords:{$pattern:/[\w-]+/,keyword:`define endef undefine ifdef ifndef ifeq ifneq else endif include -include sinclude override export unexport private vpath`},contains:[e.HASH_COMMENT_MODE,t,n,r,i,a,o]}}function Ae(e){let t=e.regex,n={begin:/<\/?[A-Za-z_]/,end:`>`,subLanguage:`xml`,relevance:0},r={begin:`^[-\\*]{3,}`,end:`$`},i={className:`code`,variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{begin:`(~{3,})[^~](.|\\n)*?\\1~*[ ]*`},{begin:"```",end:"```+[ ]*$"},{begin:`~~~`,end:`~~~+[ ]*$`},{begin:"`.+?`"},{begin:`(?=^( {4}|\\t))`,contains:[{begin:`^( {4}|\\t)`,end:`(\\n)$`}],relevance:0}]},a={className:`bullet`,begin:`^[ ]*([*+-]|(\\d+\\.))(?=\\s+)`,end:`\\s+`,excludeEnd:!0},o={begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:`symbol`,begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:`link`,begin:/:\s*/,end:/$/,excludeBegin:!0}]},s={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,relevance:2},{begin:t.concat(/\[.+?\]\(/,/[A-Za-z][A-Za-z0-9+.-]*/,/:\/\/.*?\)/),relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/},{className:`string`,relevance:0,begin:`\\[`,end:`\\]`,excludeBegin:!0,returnEnd:!0},{className:`link`,relevance:0,begin:`\\]\\(`,end:`\\)`,excludeBegin:!0,excludeEnd:!0},{className:`symbol`,relevance:0,begin:`\\]\\[`,end:`\\]`,excludeBegin:!0,excludeEnd:!0}]},c={className:`strong`,contains:[],variants:[{begin:/_{2}(?!\s)/,end:/_{2}/},{begin:/\*{2}(?!\s)/,end:/\*{2}/}]},l={className:`emphasis`,contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{begin:/_(?![_\s])/,end:/_/,relevance:0}]},u=e.inherit(c,{contains:[]}),d=e.inherit(l,{contains:[]});c.contains.push(d),l.contains.push(u);let f=[n,s];return[c,l,u,d].forEach(e=>{e.contains=e.contains.concat(f)}),f=f.concat(c,l),{name:`Markdown`,aliases:[`md`,`mkdown`,`mkd`],contains:[{className:`section`,variants:[{begin:`^#{1,6}`,end:`$`,contains:f},{begin:`(?=^.+?\\n[=-]{2,}$)`,contains:[{begin:`^[=-]*$`},{begin:`^`,end:`\\n`,contains:f}]}]},n,a,c,l,{className:`quote`,begin:`^>\\s+`,contains:f,end:`$`},i,r,s,o,{scope:`literal`,match:/&([a-zA-Z0-9]+|#[0-9]{1,7}|#[Xx][0-9a-fA-F]{1,6});/}]}}function je(e){let t={className:`built_in`,begin:`\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+`},n=/[a-zA-Z@][a-zA-Z0-9_]*/,r={"variable.language":[`this`,`super`],$pattern:n,keyword:`while.export.sizeof.typedef.const.struct.for.union.volatile.static.mutable.if.do.return.goto.enum.else.break.extern.asm.case.default.register.explicit.typename.switch.continue.inline.readonly.assign.readwrite.self.@synchronized.id.typeof.nonatomic.IBOutlet.IBAction.strong.weak.copy.in.out.inout.bycopy.byref.oneway.__strong.__weak.__block.__autoreleasing.@private.@protected.@public.@try.@property.@end.@throw.@catch.@finally.@autoreleasepool.@synthesize.@dynamic.@selector.@optional.@required.@encode.@package.@import.@defs.@compatibility_alias.__bridge.__bridge_transfer.__bridge_retained.__bridge_retain.__covariant.__contravariant.__kindof._Nonnull._Nullable._Null_unspecified.__FUNCTION__.__PRETTY_FUNCTION__.__attribute__.getter.setter.retain.unsafe_unretained.nonnull.nullable.null_unspecified.null_resettable.class.instancetype.NS_DESIGNATED_INITIALIZER.NS_UNAVAILABLE.NS_REQUIRES_SUPER.NS_RETURNS_INNER_POINTER.NS_INLINE.NS_AVAILABLE.NS_DEPRECATED.NS_ENUM.NS_OPTIONS.NS_SWIFT_UNAVAILABLE.NS_ASSUME_NONNULL_BEGIN.NS_ASSUME_NONNULL_END.NS_REFINED_FOR_SWIFT.NS_SWIFT_NAME.NS_SWIFT_NOTHROW.NS_DURING.NS_HANDLER.NS_ENDHANDLER.NS_VALUERETURN.NS_VOIDRETURN`.split(`.`),literal:[`false`,`true`,`FALSE`,`TRUE`,`nil`,`YES`,`NO`,`NULL`],built_in:[`dispatch_once_t`,`dispatch_queue_t`,`dispatch_sync`,`dispatch_async`,`dispatch_once`],type:[`int`,`float`,`char`,`unsigned`,`signed`,`short`,`long`,`double`,`wchar_t`,`unichar`,`void`,`bool`,`BOOL`,`id|0`,`_Bool`]},i={$pattern:n,keyword:[`@interface`,`@class`,`@protocol`,`@implementation`]};return{name:`Objective-C`,aliases:[`mm`,`objc`,`obj-c`,`obj-c++`,`objective-c++`],keywords:r,illegal:`</`,contains:[t,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.C_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{className:`string`,variants:[{begin:`@"`,end:`"`,illegal:`\\n`,contains:[e.BACKSLASH_ESCAPE]}]},{className:`meta`,begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:`if else elif endif define undef warning error line pragma ifdef ifndef include`},contains:[{begin:/\\\n/,relevance:0},e.inherit(e.QUOTE_STRING_MODE,{className:`string`}),{className:`string`,begin:/<.*?>/,end:/$/,illegal:`\\n`},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:`class`,begin:`(`+i.keyword.join(`|`)+`)\\b`,end:/(\{|$)/,excludeEnd:!0,keywords:i,contains:[e.UNDERSCORE_TITLE_MODE]},{begin:`\\.`+e.UNDERSCORE_IDENT_RE,relevance:0}]}}function Me(e){let t=e.regex,n=`abs.accept.alarm.and.atan2.bind.binmode.bless.break.caller.chdir.chmod.chomp.chop.chown.chr.chroot.class.close.closedir.connect.continue.cos.crypt.dbmclose.dbmopen.defined.delete.die.do.dump.each.else.elsif.endgrent.endhostent.endnetent.endprotoent.endpwent.endservent.eof.eval.exec.exists.exit.exp.fcntl.field.fileno.flock.for.foreach.fork.format.formline.getc.getgrent.getgrgid.getgrnam.gethostbyaddr.gethostbyname.gethostent.getlogin.getnetbyaddr.getnetbyname.getnetent.getpeername.getpgrp.getpriority.getprotobyname.getprotobynumber.getprotoent.getpwent.getpwnam.getpwuid.getservbyname.getservbyport.getservent.getsockname.getsockopt.given.glob.gmtime.goto.grep.gt.hex.if.index.int.ioctl.join.keys.kill.last.lc.lcfirst.length.link.listen.local.localtime.log.lstat.lt.ma.map.method.mkdir.msgctl.msgget.msgrcv.msgsnd.my.ne.next.no.not.oct.open.opendir.or.ord.our.pack.package.pipe.pop.pos.print.printf.prototype.push.q|0.qq.quotemeta.qw.qx.rand.read.readdir.readline.readlink.readpipe.recv.redo.ref.rename.require.reset.return.reverse.rewinddir.rindex.rmdir.say.scalar.seek.seekdir.select.semctl.semget.semop.send.setgrent.sethostent.setnetent.setpgrp.setpriority.setprotoent.setpwent.setservent.setsockopt.shift.shmctl.shmget.shmread.shmwrite.shutdown.sin.sleep.socket.socketpair.sort.splice.split.sprintf.sqrt.srand.stat.state.study.sub.substr.symlink.syscall.sysopen.sysread.sysseek.system.syswrite.tell.telldir.tie.tied.time.times.tr.truncate.uc.ucfirst.umask.undef.unless.unlink.unpack.unshift.untie.until.use.utime.values.vec.wait.waitpid.wantarray.warn.when.while.write.x|0.xor.y|0`.split(`.`),r=/[dualxmsipngr]{0,12}/,i={$pattern:/[\w.]+/,keyword:n.join(` `)},a={className:`subst`,begin:`[$@]\\{`,end:`\\}`,keywords:i},o={begin:/->\{/,end:/\}/},s={scope:`attr`,match:/\s+:\s*\w+(\s*\(.*?\))?/},c={scope:`variable`,variants:[{begin:/\$\d/},{begin:t.concat(/[$%@](?!")(\^\w\b|#\w+(::\w+)*|\{\w+\}|\w+(::\w*)*)/,`(?![A-Za-z])(?![@$%])`)},{begin:/[$%@](?!")[^\s\w{=]|\$=/,relevance:0}],contains:[s]},l={className:`number`,variants:[{match:/0?\.[0-9][0-9_]+\b/},{match:/\bv?(0|[1-9][0-9_]*(\.[0-9_]+)?|[1-9][0-9_]*)\b/},{match:/\b0[0-7][0-7_]*\b/},{match:/\b0x[0-9a-fA-F][0-9a-fA-F_]*\b/},{match:/\b0b[0-1][0-1_]*\b/}],relevance:0},u=[e.BACKSLASH_ESCAPE,a,c],d=[/!/,/\//,/\|/,/\?/,/'/,/"/,/#/],f=(e,n,i=`\\1`)=>{let a=i===`\\1`?i:t.concat(i,n);return t.concat(t.concat(`(?:`,e,`)`),n,/(?:\\.|[^\\\/])*?/,a,/(?:\\.|[^\\\/])*?/,i,r)},p=(e,n,i)=>t.concat(t.concat(`(?:`,e,`)`),n,/(?:\\.|[^\\\/])*?/,i,r),m=[c,e.HASH_COMMENT_MODE,e.COMMENT(/^=\w/,/=cut/,{endsWithParent:!0}),o,{className:`string`,contains:u,variants:[{begin:`q[qwxr]?\\s*\\(`,end:`\\)`,relevance:5},{begin:`q[qwxr]?\\s*\\[`,end:`\\]`,relevance:5},{begin:`q[qwxr]?\\s*\\{`,end:`\\}`,relevance:5},{begin:`q[qwxr]?\\s*\\|`,end:`\\|`,relevance:5},{begin:`q[qwxr]?\\s*<`,end:`>`,relevance:5},{begin:`qw\\s+q`,end:`q`,relevance:5},{begin:`'`,end:`'`,contains:[e.BACKSLASH_ESCAPE]},{begin:`"`,end:`"`},{begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE]},{begin:/\{\w+\}/,relevance:0},{begin:`-?\\w+\\s*=>`,relevance:0}]},l,{begin:`(\\/\\/|`+e.RE_STARTERS_RE+`|\\b(split|return|print|reverse|grep)\\b)\\s*`,keywords:`split return print reverse grep`,relevance:0,contains:[e.HASH_COMMENT_MODE,{className:`regexp`,variants:[{begin:f(`s|tr|y`,t.either(...d,{capture:!0}))},{begin:f(`s|tr|y`,`\\(`,`\\)`)},{begin:f(`s|tr|y`,`\\[`,`\\]`)},{begin:f(`s|tr|y`,`\\{`,`\\}`)}],relevance:2},{className:`regexp`,variants:[{begin:/(m|qr)\/\//,relevance:0},{begin:p(`(?:m|qr)?`,/\//,/\//)},{begin:p(`m|qr`,t.either(...d,{capture:!0}),/\1/)},{begin:p(`m|qr`,/\(/,/\)/)},{begin:p(`m|qr`,/\[/,/\]/)},{begin:p(`m|qr`,/\{/,/\}/)}]}]},{className:`function`,beginKeywords:`sub method`,end:`(\\s*\\(.*?\\))?[;{]`,excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE,s]},{className:`class`,beginKeywords:`class`,end:`[;{]`,excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE,s,l]},{begin:`-\\w\\b`,relevance:0},{begin:`^__DATA__$`,end:`^__END__$`,subLanguage:`mojolicious`,contains:[{begin:`^@@.*`,end:`$`,className:`comment`}]}];return a.contains=m,o.contains=m,{name:`Perl`,aliases:[`pl`,`pm`],keywords:i,contains:m}}function Ne(e){let t=e.regex,n=/(?![A-Za-z0-9])(?![$])/,r=t.concat(/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/,n),i=t.concat(/(\\?[A-Z][a-z0-9_\x7f-\xff]+|\\?[A-Z]+(?=[A-Z][a-z0-9_\x7f-\xff])){1,}/,n),a=t.concat(/[A-Z]+/,n),o={scope:`variable`,match:`\\$+`+r},s={scope:`meta`,variants:[{begin:/<\?php/,relevance:10},{begin:/<\?=/},{begin:/<\?/,relevance:.1},{begin:/\?>/}]},c={scope:`subst`,variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]},l=e.inherit(e.APOS_STRING_MODE,{illegal:null}),u=e.inherit(e.QUOTE_STRING_MODE,{illegal:null,contains:e.QUOTE_STRING_MODE.contains.concat(c)}),d={begin:/<<<[ \t]*(?:(\w+)|"(\w+)")\n/,end:/[ \t]*(\w+)\b/,contains:e.QUOTE_STRING_MODE.contains.concat(c),"on:begin":(e,t)=>{t.data._beginMatch=e[1]||e[2]},"on:end":(e,t)=>{t.data._beginMatch!==e[1]&&t.ignoreMatch()}},f=e.END_SAME_AS_BEGIN({begin:/<<<[ \t]*'(\w+)'\n/,end:/[ \t]*(\w+)\b/}),p=`[
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e}from"./chunk-CilyBKbf.js";var t=e({addProject:()=>r,checkpoints:()=>o,default:()=>u,instructions:()=>a,onboarding:()=>l,prerequisites:()=>i,setupChat:()=>s,welcome:()=>c,wizard:()=>n}),n={configureAgents:`Configure {{provider}} agents`,configureSubtitle:`Choose which agents to install and how to run them.`,tabs:{agents:`Agents`,models:`Models`},skipForNow:`Skip for now`,install:`Install`,nextProvider:`Next: {{provider}}`,installingProvider:`Installing {{provider}}…`,installingSpecrails:`Installing specrails...`,installingFromTemplates:`Installing agents from templates`,waitingForOutput:`Waiting for output...`,checkpoints:{baseInstall:`Base installation`,agentSelection:`Agent selection`,agentGeneration:`Agent generation`},steps:{configure:`Configure`},summary:{agents:`Agents`,agentSkills:`Agent skills`,skills:`Skills`,openspecSkills:`OpenSpec skills`,legacyRemoved_one:`Removed {{count}} legacy <code>/specrails:*</code> command`,legacyRemoved_other:`Removed {{count}} legacy <code>/specrails:*</code> commands`},complete:{welcome:`Welcome to <spec>spec</spec><rails>rails</rails>`,configured:`<strong>{{projectName}}</strong> is now configured with AI-powered development workflows. Your specialized agents and commands are ready to use.`,installedForEngines_one:`Installed for {{count}} engine`,installedForEngines_other:`Installed for {{count}} engines`,installed:`Installed`,installFailed:`Install failed`,learnMore:`Learn how to get the most out of specrails:`,continueToProject:`Continue to project`,jira:{title:`Connect a Jira board`,subtitle:`Optional — back this project's specs with a Jira board. You can also do it later in Settings.`,configure:`Configure Jira`,optional:`optional`}},error:{title:`Setup failed`,skipSetup:`Skip setup`,prereqMissing:`SpecRails setup needs Node.js, npm, npx and Git available on PATH before it can install this project.`,prereqRetryHint:`Install the missing tools, restart Specrails, then retry setup.`}},r={title:`Add Project`,description:`Register a project directory to manage it from Specrails.`,noProviderDetected:`No AI CLI detected. Install Claude Code or Codex CLI first.`,pathLabel:`Project path`,pathPlaceholder:`/Users/me/my-project`,pathHint:`Absolute path to the project root`,browseForFolder:`Browse for folder`,selectProjectFolder:`Select project folder`,nameLabel:`Display name`,optional:`(optional)`,namePlaceholder:`My Project`,nameHint:`Defaults to the directory name`,providersLabel:`AI providers`,notFound:`not found`,multiProviderHint:`Both engines will be set up. The first is the project default. Cannot be changed after creation.`,singleProviderHint:`Cannot be changed after the project is created.`,adding:`Adding...`,submit:`Add Project`,toolsRequired_one:`{{tools}} is required to add a project`,toolsRequired_other:`{{tools}} are required to add a project`,errors:{pathRequired:`Project path is required`,selectProvider:`Select at least one AI provider`,addFailed:`Failed to add project`},toasts:{registered:`Project "{{name}}" registered`}},i={corruptedBundle:`bundle corrupted — reinstall app`,notInstalled:`not installed`,failedToExecute:`found but failed to execute`,failedToExecuteAt:`found at {{path}} but failed to execute`,failedToExecuteWithError:`found but failed to execute ({{error}})`,failedToExecuteAtWithError:`found at {{path}} but failed to execute ({{error}})`,needsMinimum:`{{version}} found — needs {{minVersion}}+`,unknownVersion:`unknown`,installedLabel:`installed`,verifyError:`Could not verify developer tools locally — install will validate.`,allDetected:`All required tools detected`,bundleCorruptedTitle:`App bundle corrupted`,toolsRequired_one:`{{count}} developer tool required`,toolsRequired_other:`{{count}} developer tools required`,reinstallHint:`Reinstall the Specrails app to restore bundled tools.`,installMissingHint:`Install the missing tools to continue.`,moreInfo:`More info`,bundledBadge:`bundled`},a={title:`Install developer tools`,description:`SpecRails needs Node.js, npm, npx, and Git on PATH. Pick the snippet for your OS, run it, then click "I installed it, recheck".`,darwin:{intro:`Homebrew gets you both tools in one line. If you do not have brew, use the official downloads.`,installNodeGit:`Install Node.js and Git via Homebrew`},win32:{intro:`Winget ships with Windows 11 and recent Windows 10. Open PowerShell or Terminal and run:`,installNode:`Install Node.js LTS`,installGit:`Install Git`,note:`After install, restart Specrails so Windows refreshes PATH.`},linux:{intro:`Use your distro package manager:`,debian:`Debian / Ubuntu`,fedora:`Fedora / RHEL`},links:{nodeOfficial:`Node.js (official)`,gitOfficial:`Git (official)`,gitWindows:`Git for Windows (official)`},showOtherPlatforms:`Show other platforms`,hideOtherPlatforms:`Hide other platforms`,recheck:`I installed it, recheck`,diagnostics:{copy:`Copy diagnostics`,copied:`Diagnostics copied`,failed:`Copy failed`},corrupted:{title:`App bundle corrupted`,description:`One or more bundled tools (Node.js, Git) could not be verified.`,body:`This tool is bundled with the Specrails app and cannot be installed separately. If you see this message, the app bundle may be corrupted. Please reinstall Specrails.`}},o={title:`Setup progress`,progress:`{{done}} of {{total}} complete`,rawLog_one:`Raw log ({{count}} line)`,rawLog_other:`Raw log ({{count}} lines)`},s={title:`Setup assistant`,subtitle:`Respond to prompts to configure your project`,settingUp:`Setting up your project...`,placeholder:`Type a response...`,keyboardHint:`Enter to send, Shift+Enter for new line`},c={title:`Welcome to <spec>spec</spec><rails>rails</rails>`,description:`Specrails manages multiple projects from a single interface. Add your first project to get started.`,addFirstProject:`Add your first project`,jiraHint:`Connect each project to its own Jira board — specs stay in sync, both ways.`},l=JSON.parse(`{"productTour":"Product tour","stepCount":"Step {{current}} of {{total}}","goToStep":"Go to step {{step}}: {{label}}","stepLabel":"Step {{step}}","dontShowAgain":"Don't show this again","skipTour":"Skip tour","getStarted":"Get Started","flow":{"addSpec":"Add Spec","dropInRail":"Drop in a Rail","hitPlay":"Hit Play","ship":"Ship","architect":"Architect","developer":"Developer","reviewer":"Reviewer"},"language":{"nav":"Language","title":"Choose your language","subtitle":"Specrails speaks your language","intro":"Pick the language you want the interface in. It applies instantly — this tour included.","note":"You can change it any time in Settings → Language."},"theme":{"nav":"Theme","title":"Pick your look","subtitle":"Built-in themes, applied instantly","intro":"Choose how Specrails should look — the theme applies the moment you click.","note":"You can change it any time in Settings → Appearance."},"welcome":{"nav":"Welcome","title":"Welcome to Specrails","subtitle":"Your local cockpit for shipping software with AI agents","intro":"Specrails turns an idea into shipped code — and lets you <b>see, steer, and trust</b> every step. Draft a spec by talking to an AI, drop it on an execution rail, and hit Play. The pipeline handles architecture, implementation, review and the pull request, streaming its work live the whole way.","coreLoopLabel":"The core loop","flowCaption":"Each spec flows through <b>Architect → Developer → Reviewer → Ship</b> automatically.","localNote":"<b>100% local · single user · no accounts.</b> Everything runs on your machine. Your code never leaves the laptop unless <i>you</i> spawn an agent against it.","tourNote":"This quick tour walks through everything the app can do — about a minute."},"authorSpecs":{"nav":"Author specs","title":"Turn ideas into specs","subtitle":"Six ways to capture exactly what you want built","intro":"A <b>spec</b> is a description of work you want done. Author one however suits the moment — from a quick one-liner to a full conversation with the AI.","exploreLabel":"Explore — converse","exploreBody":"Describe what you want in a chat; a live draft rebuilds itself every turn. A preset slider tunes how much project context the AI sees — from your message only, up to the full codebase plus your MCP servers.","quickLabel":"Quick — one shot","quickBody":"Already know what you want? Generate a complete spec in a single turn. Optionally enrich it with a Contract Layer: exact names, data shapes, invariants and a file-touch list so the agents don't reinvent anything.","websiteLabel":"From a website","websiteBody":"Opens an embedded browser. Hover-select an element or drag a rectangle, and the screenshot, DOM and applied CSS become attachments. The desktop build ships its own Chromium, so it works offline.","smashLabel":"SMASH a big epic","smashBody":"Explode a large spec into a family of smaller sub-specs in one click — each child carries a short summary on its card.","draftsLabel":"Drafts & Continue Editing","draftsBody":"Park an in-progress exploration as a draft ticket and resume it later; reopen any spec back in Explore to keep refining it.","compareLabel":"Compare side by side","compareBody":"Drag a spec to the screen edge and a picker of your other specs slides in — review two of them together, tablet-style."},"rails":{"nav":"Run on rails","title":"Run the pipeline on rails","subtitle":"Organize specs into lanes, then launch the agents","intro":"The right side of the Dashboard is your <b>Rails</b> — execution lanes. Drag a spec card onto a rail and press <play>▶ Play</play> to launch an implementation job.","jobLabel":"What each job runs","flowCaption":"Every phase streams its logs live as it works.","modeLabel":"Pick how a rail runs","modeBody":"Each rail chooses a mode: <b>Implement</b> (the full structured pipeline), <b>Batch</b> (several specs in sequence), or <b>Ultracode</b> (Claude works autonomously, no fixed pipeline).","profilesLabel":"Agent profiles","profilesBody":"A per-project, declarative catalog that decides which agents run and which model each one uses — picked per rail and snapshotted per job so concurrent work stays isolated.","jobDetailLabel":"Live job detail","jobDetailBody":"Every job shows a ticket-identity header, a live duration ticker and running turn/token counts, with the authoritative cost resolved on exit.","isolationLabel":"Many projects, isolated","isolationBody":"Each project has its own database and job queue. Run different projects at the same time and switch between them from the left sidebar — your place is remembered per project."},"providers":{"nav":"Your agent","title":"Bring your own agent","subtitle":"Claude Code and Codex, as first-class engines","intro":"The app treats <b>Claude Code</b> and <b>Codex CLI</b> as interchangeable engines behind one contract. A project can install one or both — the choice is made at install time.","table":{"capability":"Capability","streamingResume":"Streaming & session resume","native":"Native","costReporting":"Cost reporting","providerBilled":"Provider-billed","estimated":"Estimated (~)","telemetry":"Telemetry (OTEL)","synthesized":"Synthesized","agentProfiles":"Agent profiles"},"calloutLabel":"When both are installed","calloutBody":"Pick the engine <b>per spec, per rail, or per terminal launch</b>. The app remembers your last choice per project. Codex cost is estimated from a local rate-card and always flagged with a <mono>~</mono>."},"cost":{"nav":"Track cost","title":"Track every cent","subtitle":"Every billable invocation, recorded and visualized","intro":"Every AI invocation — across rails, Quick, Explore, AI edits, SMASH and file summaries — is recorded for <b>both Claude and Codex</b>. No more guessing what the agents cost.","analyticsLabel":"Analytics page","analyticsBody":"A burn-rate hero, daily timeline, top tickets, model breakdown and a cost-vs-turns scatter. Filter by period (7d / 30d / 90d / All) and by surface.","perTicketLabel":"Per-ticket spending","perTicketBody":"Each spec's detail shows what it cost and how many turns it took, deep-linking into Analytics filtered to that ticket.","honestLabel":"Honest numbers","honestBody":"Claude cost is the provider-billed figure; Codex is estimated and flagged with <mono>~</mono>. Token totals include the cache tiers, so the figures actually reconcile.","budgetsLabel":"Budgets & alerts","budgetsBody":"Set a daily budget and a per-job cost alert; the app auto-pauses the queue when you cross the line. Export anything to CSV or JSON."},"workspace":{"nav":"Workspace","title":"Make it your workspace","subtitle":"Everything you need without leaving the window","terminalLabel":"Terminal panel","terminalBody":"A real VS-Code-style terminal at the bottom (<mod>{{mod}}</mod> <j>J</j>) — WebGL rendering, search, inline images, drag-drop paths and shell integration. Up to 10 sessions per project.","codeLabel":"Code explorer","codeBody":"A read-only file tree and Monaco viewer with plain-language AI summaries and “touched by AI” provenance chips, so anyone can follow what changed and why.","integrationsLabel":"Integrations","integrationsBody":"A per-project marketplace of MCP integrations — Serena semantic code-navigation is bundled. Installs are additive: adding one never disturbs another.","themesLabel":"Themes","themesBody":"Five built-in themes — specrails (default), dracula, aurora-light, obsidian-dark and matrix — applied before the UI paints, so there's no flash. Change them in Settings → Appearance.","chatsLabel":"Minimizable chats","chatsBody":"Park an Explore or AI-Edit session into a dock chip and pick it back up later — never lost across refreshes or project switches.","desktopLabel":"Desktop or browser","desktopBody":"Run Specrails in your browser, or grab the signed desktop app (macOS & Windows) that bundles its own server and runtimes."},"companion":{"nav":"Mobile companion","title":"Take Specrails with you","subtitle":"Specrails Companion — your pipelines, on your phone","intro":"<b>Specrails Companion</b> is a web app at specrails.dev/companion-app — open it on your phone (or add it to your Home Screen) to browse the specs board, launch and stop rails, follow live job logs and glance at analytics. No install, no app store.","localLabel":"100% local, like everything else","localBody":"Your phone connects straight to this computer — peer-to-peer and encrypted (WebRTC). No cloud relay, no account, and your code never leaves your devices.","downloadLabel":"Open it on your phone","downloadHint":"Scan the code with your phone's camera, or open specrails.dev/companion-app in its browser.","open":"Open Specrails Companion","pairLabel":"Pairing takes ten seconds","pairBody":"On your phone open specrails.dev/companion-app, then here go to Settings → Mobile companion → Pair web companion and follow the on-screen steps."},"moveFast":{"nav":"Move fast","title":"Move at the speed of thought","subtitle":"Keyboard-first, everywhere","paletteLabel":"Command palette","paletteShortcut":"<f>Press</f> <mod>{{mod}}</mod> <m>+</m> <k>K</k> <m>anywhere</m>","paletteBody":"Switch projects, run spec commands, jump to any page and find recent jobs — all with fuzzy search.","terminalLabel":"Terminal panel","terminalBody":"Toggle with <mod>{{mod}}</mod> <j>J</j>.","shortcutsLabel":"All shortcuts","shortcutsBody":"Press <q>?</q> to see the full cheat-sheet.","chatLabel":"Chat sidebar","chatBody":"Toggle the right sidebar with <mod>{{mod}}</mod> <bkey>B</bkey>.","projectsLabel":"Projects sidebar","projectsBody":"Toggle the left Arc sidebar with <alt>{{alt}}</alt> <mod>{{mod}}</mod> <bkey>B</bkey>.","outro":"<b>That's the tour.</b> Add a project from the left sidebar and ship your first spec. You can reopen this walkthrough anytime from Settings."},"jira":{"label":"Jira integration","body":"Back any project with a <b>Jira board</b> — each spec becomes a Jira issue, kept in sync both ways: status follows the rail, and a comment is posted when a job finishes. Configure it per project when you add it, or anytime in Settings."}}`),u={wizard:n,addProject:r,prerequisites:i,instructions:a,checkpoints:o,setupChat:s,welcome:c,onboarding:l};export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={configureAgents:`Configurar agentes de {{provider}}`,configureSubtitle:`Elige qué agentes instalar y cómo ejecutarlos.`,tabs:{agents:`Agentes`,models:`Modelos`},skipForNow:`Omitir por ahora`,install:`Instalar`,nextProvider:`Siguiente: {{provider}}`,installingProvider:`Instalando {{provider}}…`,installingSpecrails:`Instalando specrails...`,installingFromTemplates:`Instalando agentes desde plantillas`,waitingForOutput:`Esperando salida...`,checkpoints:{baseInstall:`Instalación base`,agentSelection:`Selección de agentes`,agentGeneration:`Generación de agentes`},steps:{configure:`Configurar`},summary:{agents:`Agentes`,agentSkills:`Skills de agente`,skills:`Skills`,openspecSkills:`Skills de OpenSpec`,legacyRemoved_one:`Eliminado {{count}} comando legacy <code>/specrails:*</code>`,legacyRemoved_other:`Eliminados {{count}} comandos legacy <code>/specrails:*</code>`},complete:{welcome:`Bienvenido a <spec>spec</spec><rails>rails</rails>`,configured:`<strong>{{projectName}}</strong> ya está configurado con flujos de desarrollo impulsados por IA. Tus agentes y comandos especializados están listos para usar.`,installedForEngines_one:`Instalado para {{count}} motor`,installedForEngines_other:`Instalado para {{count}} motores`,installed:`Instalado`,installFailed:`Error en la instalación`,learnMore:`Aprende a sacar el máximo partido a specrails:`,continueToProject:`Continuar al proyecto`,jira:{title:`Conecta un tablero de Jira`,subtitle:`Opcional — respalda las specs de este proyecto con un tablero de Jira. También puedes hacerlo más tarde en Ajustes.`,configure:`Configurar Jira`,optional:`opcional`}},error:{title:`La configuración ha fallado`,skipSetup:`Omitir configuración`,prereqMissing:`La configuración de SpecRails necesita Node.js, npm, npx y Git disponibles en el PATH antes de poder instalar este proyecto.`,prereqRetryHint:`Instala las herramientas que faltan, reinicia Specrails y reintenta la configuración.`}},t={title:`Añadir proyecto`,description:`Registra un directorio de proyecto para gestionarlo desde Specrails.`,noProviderDetected:`No se ha detectado ningún CLI de IA. Instala primero Claude Code o Codex CLI.`,pathLabel:`Ruta del proyecto`,pathPlaceholder:`/Users/yo/mi-proyecto`,pathHint:`Ruta absoluta a la raíz del proyecto`,browseForFolder:`Buscar carpeta`,selectProjectFolder:`Seleccionar carpeta del proyecto`,nameLabel:`Nombre para mostrar`,optional:`(opcional)`,namePlaceholder:`Mi proyecto`,nameHint:`Por defecto, el nombre del directorio`,providersLabel:`Proveedores de IA`,notFound:`no encontrado`,multiProviderHint:`Se configurarán ambos motores. El primero es el predeterminado del proyecto. No se puede cambiar después de la creación.`,singleProviderHint:`No se puede cambiar una vez creado el proyecto.`,adding:`Añadiendo...`,submit:`Añadir proyecto`,toolsRequired_one:`Se necesita {{tools}} para añadir un proyecto`,toolsRequired_other:`Se necesitan {{tools}} para añadir un proyecto`,errors:{pathRequired:`La ruta del proyecto es obligatoria`,selectProvider:`Selecciona al menos un proveedor de IA`,addFailed:`No se pudo añadir el proyecto`},toasts:{registered:`Proyecto "{{name}}" registrado`}},n={corruptedBundle:`bundle dañado — reinstala la app`,notInstalled:`no instalado`,failedToExecute:`encontrado pero no se pudo ejecutar`,failedToExecuteAt:`encontrado en {{path}} pero no se pudo ejecutar`,failedToExecuteWithError:`encontrado pero no se pudo ejecutar ({{error}})`,failedToExecuteAtWithError:`encontrado en {{path}} pero no se pudo ejecutar ({{error}})`,needsMinimum:`{{version}} encontrada — se necesita {{minVersion}}+`,unknownVersion:`desconocida`,installedLabel:`instalado`,verifyError:`No se pudieron verificar las herramientas de desarrollo en local — la instalación lo validará.`,allDetected:`Todas las herramientas necesarias detectadas`,bundleCorruptedTitle:`Bundle de la app dañado`,toolsRequired_one:`{{count}} herramienta de desarrollo necesaria`,toolsRequired_other:`{{count}} herramientas de desarrollo necesarias`,reinstallHint:`Reinstala la app Specrails para restaurar las herramientas incluidas.`,installMissingHint:`Instala las herramientas que faltan para continuar.`,moreInfo:`Más información`,bundledBadge:`incluida`},r={title:`Instalar herramientas de desarrollo`,description:`SpecRails necesita Node.js, npm, npx y Git en el PATH. Elige el snippet de tu SO, ejecútalo y pulsa "Ya lo he instalado, volver a comprobar".`,darwin:{intro:`Homebrew te da ambas herramientas en una línea. Si no tienes brew, usa las descargas oficiales.`,installNodeGit:`Instalar Node.js y Git con Homebrew`},win32:{intro:`Winget viene incluido en Windows 11 y en las versiones recientes de Windows 10. Abre PowerShell o Terminal y ejecuta:`,installNode:`Instalar Node.js LTS`,installGit:`Instalar Git`,note:`Tras la instalación, reinicia Specrails para que Windows actualice el PATH.`},linux:{intro:`Usa el gestor de paquetes de tu distro:`,debian:`Debian / Ubuntu`,fedora:`Fedora / RHEL`},links:{nodeOfficial:`Node.js (oficial)`,gitOfficial:`Git (oficial)`,gitWindows:`Git para Windows (oficial)`},showOtherPlatforms:`Mostrar otras plataformas`,hideOtherPlatforms:`Ocultar otras plataformas`,recheck:`Ya lo he instalado, volver a comprobar`,diagnostics:{copy:`Copiar diagnóstico`,copied:`Diagnóstico copiado`,failed:`Error al copiar`},corrupted:{title:`Bundle de la app dañado`,description:`No se pudieron verificar una o más herramientas incluidas (Node.js, Git).`,body:`Esta herramienta viene incluida con la app Specrails y no puede instalarse por separado. Si ves este mensaje, el bundle de la app puede estar dañado. Reinstala Specrails.`}},i={title:`Progreso de la configuración`,progress:`{{done}} de {{total}} completados`,rawLog_one:`Log sin procesar ({{count}} línea)`,rawLog_other:`Log sin procesar ({{count}} líneas)`},a={title:`Asistente de configuración`,subtitle:`Responde a las preguntas para configurar tu proyecto`,settingUp:`Configurando tu proyecto...`,placeholder:`Escribe una respuesta...`,keyboardHint:`Enter para enviar, Shift+Enter para nueva línea`},o={title:`Bienvenido a <spec>spec</spec><rails>rails</rails>`,description:`Specrails gestiona varios proyectos desde una única interfaz. Añade tu primer proyecto para empezar.`,addFirstProject:`Añade tu primer proyecto`,jiraHint:`Conecta cada proyecto a su propio tablero de Jira — las specs se sincronizan en ambos sentidos.`},s=JSON.parse(`{"productTour":"Tour del producto","stepCount":"Paso {{current}} de {{total}}","goToStep":"Ir al paso {{step}}: {{label}}","stepLabel":"Paso {{step}}","dontShowAgain":"No volver a mostrar","skipTour":"Saltar el tour","getStarted":"Empezar","flow":{"addSpec":"Añade una spec","dropInRail":"Suéltala en un rail","hitPlay":"Dale a Play","ship":"Ship","architect":"Arquitecto","developer":"Desarrollador","reviewer":"Revisor"},"language":{"nav":"Idioma","title":"Elige tu idioma","subtitle":"Specrails habla tu idioma","intro":"Selecciona el idioma en el que quieres la interfaz. Se aplica al instante — este tour incluido.","note":"Puedes cambiarlo cuando quieras en Ajustes → Idioma."},"theme":{"nav":"Tema","title":"Elige tu estilo","subtitle":"Temas integrados, aplicados al instante","intro":"Decide qué aspecto tendrá Specrails — el tema se aplica en cuanto haces clic.","note":"Puedes cambiarlo cuando quieras en Ajustes → Apariencia."},"welcome":{"nav":"Bienvenida","title":"Bienvenido a Specrails","subtitle":"Tu centro de mando local para publicar software con agentes de IA","intro":"Specrails convierte una idea en código publicado — y te permite <b>ver, dirigir y confiar en</b> cada paso. Redacta una spec hablando con una IA, suéltala en un rail de ejecución y dale a Play. El pipeline se encarga de la arquitectura, la implementación, la revisión y la pull request, retransmitiendo su trabajo en directo en todo momento.","coreLoopLabel":"El bucle principal","flowCaption":"Cada spec pasa automáticamente por <b>Arquitecto → Desarrollador → Revisor → Ship</b>.","localNote":"<b>100 % local · un solo usuario · sin cuentas.</b> Todo se ejecuta en tu máquina. Tu código nunca sale del portátil a menos que <i>tú</i> lances un agente sobre él.","tourNote":"Este tour rápido repasa todo lo que puede hacer la aplicación — alrededor de un minuto."},"authorSpecs":{"nav":"Crea specs","title":"Convierte ideas en specs","subtitle":"Seis formas de capturar exactamente lo que quieres construir","intro":"Una <b>spec</b> es una descripción del trabajo que quieres que se haga. Redáctala como mejor encaje en cada momento — desde una línea rápida hasta una conversación completa con la IA.","exploreLabel":"Explore — conversa","exploreBody":"Describe lo que quieres en un chat; un borrador en vivo se reconstruye en cada turno. Un slider de presets ajusta cuánto contexto del proyecto ve la IA — desde solo tu mensaje hasta el codebase completo más tus servidores MCP.","quickLabel":"Quick — de una sola vez","quickBody":"¿Ya sabes lo que quieres? Genera una spec completa en un solo turno. Opcionalmente, enriquécela con una Contract Layer: nombres exactos, formas de datos, invariantes y una lista de archivos a tocar para que los agentes no reinventen nada.","websiteLabel":"Desde una web","websiteBody":"Abre un navegador embebido. Selecciona un elemento al pasar el ratón o arrastra un rectángulo, y la captura, el DOM y el CSS aplicado se convierten en adjuntos. La versión de escritorio incluye su propio Chromium, así que funciona sin conexión.","smashLabel":"SMASH para una épica grande","smashBody":"Divide una spec grande en una familia de sub-specs más pequeñas con un clic — cada hija lleva un breve resumen en su tarjeta.","draftsLabel":"Borradores y seguir editando","draftsBody":"Aparca una exploración en curso como ticket en borrador y retómala más tarde; reabre cualquier spec en Explore para seguir refinándola.","compareLabel":"Compara lado a lado","compareBody":"Arrastra una spec al borde de la pantalla y se desliza un selector con tus otras specs — revisa dos a la vez, al estilo tablet."},"rails":{"nav":"Ejecuta en rails","title":"Ejecuta el pipeline sobre rails","subtitle":"Organiza las specs en carriles y lanza los agentes","intro":"El lado derecho del Dashboard son tus <b>Rails</b> — carriles de ejecución. Arrastra una tarjeta de spec a un rail y pulsa <play>▶ Play</play> para lanzar un job de implementación.","jobLabel":"Qué ejecuta cada job","flowCaption":"Cada fase retransmite sus logs en directo mientras trabaja.","modeLabel":"Elige cómo se ejecuta un rail","modeBody":"Cada rail elige un modo: <b>Implement</b> (el pipeline estructurado completo), <b>Batch</b> (varias specs en secuencia) o <b>Ultracode</b> (Claude trabaja de forma autónoma, sin pipeline fijo).","profilesLabel":"Perfiles de agentes","profilesBody":"Un catálogo declarativo por proyecto que decide qué agentes se ejecutan y qué modelo usa cada uno — se elige por rail y se congela por job para que el trabajo concurrente quede aislado.","jobDetailLabel":"Detalle del job en directo","jobDetailBody":"Cada job muestra una cabecera con la identidad del ticket, un contador de duración en directo y los turnos y tokens acumulados, con el coste definitivo resuelto al terminar.","isolationLabel":"Muchos proyectos, aislados","isolationBody":"Cada proyecto tiene su propia base de datos y su propia cola de jobs. Ejecuta proyectos distintos a la vez y cambia entre ellos desde la barra lateral izquierda — tu posición se recuerda por proyecto."},"providers":{"nav":"Tu agente","title":"Trae tu propio agente","subtitle":"Claude Code y Codex, como motores de primera clase","intro":"La aplicación trata <b>Claude Code</b> y <b>Codex CLI</b> como motores intercambiables tras un mismo contrato. Un proyecto puede instalar uno o ambos — la elección se hace en el momento de la instalación.","table":{"capability":"Capacidad","streamingResume":"Streaming y reanudación de sesión","native":"Nativo","costReporting":"Informe de costes","providerBilled":"Facturado por el proveedor","estimated":"Estimado (~)","telemetry":"Telemetría (OTEL)","synthesized":"Sintetizada","agentProfiles":"Perfiles de agentes"},"calloutLabel":"Cuando ambos están instalados","calloutBody":"Elige el motor <b>por spec, por rail o por lanzamiento de terminal</b>. La aplicación recuerda tu última elección por proyecto. El coste de Codex se estima con una tarifa local y siempre se marca con <mono>~</mono>."},"cost":{"nav":"Controla el coste","title":"Controla cada céntimo","subtitle":"Cada invocación facturable, registrada y visualizada","intro":"Cada invocación de IA — en rails, Quick, Explore, ediciones con IA, SMASH y resúmenes de archivos — se registra tanto para <b>Claude como para Codex</b>. Se acabó adivinar lo que cuestan los agentes.","analyticsLabel":"Página de analítica","analyticsBody":"Un hero de burn-rate, línea temporal diaria, top de tickets, desglose por modelo y un scatter de coste frente a turnos. Filtra por periodo (7d / 30d / 90d / Todo) y por superficie.","perTicketLabel":"Gasto por ticket","perTicketBody":"El detalle de cada spec muestra cuánto costó y cuántos turnos llevó, con enlace directo a la analítica filtrada por ese ticket.","honestLabel":"Números honestos","honestBody":"El coste de Claude es la cifra facturada por el proveedor; el de Codex es estimado y se marca con <mono>~</mono>. Los totales de tokens incluyen los niveles de caché, así que las cifras cuadran de verdad.","budgetsLabel":"Presupuestos y alertas","budgetsBody":"Define un presupuesto diario y una alerta de coste por job; la aplicación pausa la cola automáticamente cuando cruzas la línea. Exporta lo que quieras a CSV o JSON."},"workspace":{"nav":"Espacio de trabajo","title":"Hazlo tu espacio de trabajo","subtitle":"Todo lo que necesitas sin salir de la ventana","terminalLabel":"Panel de terminal","terminalBody":"Un terminal real al estilo VS Code en la parte inferior (<mod>{{mod}}</mod> <j>J</j>) — renderizado WebGL, búsqueda, imágenes inline, arrastrar y soltar rutas e integración con el shell. Hasta 10 sesiones por proyecto.","codeLabel":"Explorador de código","codeBody":"Un árbol de archivos de solo lectura y un visor Monaco con resúmenes de IA en lenguaje llano y chips de procedencia «tocado por IA», para que cualquiera pueda seguir qué cambió y por qué.","integrationsLabel":"Integraciones","integrationsBody":"Un marketplace por proyecto de integraciones MCP — la navegación semántica de código de Serena viene incluida. Las instalaciones son aditivas: añadir una nunca altera otra.","themesLabel":"Temas","themesBody":"Cinco temas integrados — specrails (por defecto), dracula, aurora-light, obsidian-dark y matrix — aplicados antes de que la UI pinte, así no hay parpadeo. Cámbialos en Ajustes → Apariencia.","chatsLabel":"Chats minimizables","chatsBody":"Aparca una sesión de Explore o AI Edit en un chip del dock y retómala más tarde — nunca se pierde entre recargas o cambios de proyecto.","desktopLabel":"Escritorio o navegador","desktopBody":"Ejecuta Specrails en tu navegador o descarga la app de escritorio firmada (macOS y Windows), que incluye su propio servidor y runtimes."},"companion":{"nav":"Compañera móvil","title":"Llévate Specrails contigo","subtitle":"Specrails Companion — tus pipelines, en tu teléfono","intro":"<b>Specrails Companion</b> es una app web en specrails.dev/companion-app — ábrela en tu teléfono (o añádela a tu pantalla de inicio) para navegar por el tablero de specs, lanzar y detener rails, seguir los logs de los jobs en directo y echar un vistazo a la analítica. Sin instalación, sin tienda de apps.","localLabel":"100 % local, como todo lo demás","localBody":"Tu teléfono se conecta directamente a este ordenador — peer-to-peer y cifrado (WebRTC). Sin servidores intermedios en la nube, sin cuentas, y tu código nunca sale de tus dispositivos.","downloadLabel":"Ábrela en tu teléfono","downloadHint":"Escanea el código con la cámara de tu teléfono o abre specrails.dev/companion-app en su navegador.","open":"Abrir Specrails Companion","pairLabel":"Emparejar lleva diez segundos","pairBody":"En tu teléfono abre specrails.dev/companion-app y luego, aquí, ve a Ajustes → Compañera móvil → Emparejar compañera web y sigue los pasos en pantalla."},"moveFast":{"nav":"Ve rápido","title":"Muévete a la velocidad del pensamiento","subtitle":"Teclado primero, en todas partes","paletteLabel":"Paleta de comandos","paletteShortcut":"<f>Pulsa</f> <mod>{{mod}}</mod> <m>+</m> <k>K</k> <m>en cualquier parte</m>","paletteBody":"Cambia de proyecto, ejecuta comandos de spec, salta a cualquier página y encuentra jobs recientes — todo con búsqueda difusa.","terminalLabel":"Panel de terminal","terminalBody":"Alterna con <mod>{{mod}}</mod> <j>J</j>.","shortcutsLabel":"Todos los atajos","shortcutsBody":"Pulsa <q>?</q> para ver la chuleta completa.","chatLabel":"Barra lateral de chat","chatBody":"Alterna la barra lateral derecha con <mod>{{mod}}</mod> <bkey>B</bkey>.","projectsLabel":"Barra lateral de proyectos","projectsBody":"Alterna la barra lateral Arc izquierda con <alt>{{alt}}</alt> <mod>{{mod}}</mod> <bkey>B</bkey>.","outro":"<b>Fin del tour.</b> Añade un proyecto desde la barra lateral izquierda y publica tu primera spec. Puedes reabrir este recorrido cuando quieras desde Ajustes."},"jira":{"label":"Integración con Jira","body":"Respalda cualquier proyecto con un <b>tablero de Jira</b> — cada spec es un issue de Jira, sincronizado en ambos sentidos: el estado sigue al rail y se publica un comentario al terminar un job. Configúralo por proyecto al añadirlo, o cuando quieras en Ajustes."}}`),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}}-Agenten konfigurieren`,configureSubtitle:`Wählen Sie, welche Agenten installiert und wie sie ausgeführt werden.`,tabs:{agents:`Agenten`,models:`Modelle`},skipForNow:`Vorerst überspringen`,install:`Installieren`,nextProvider:`Weiter: {{provider}}`,installingProvider:`{{provider}} wird installiert…`,installingSpecrails:`specrails wird installiert…`,installingFromTemplates:`Agenten werden aus Vorlagen installiert`,waitingForOutput:`Warten auf Ausgabe…`,checkpoints:{baseInstall:`Basisinstallation`,agentSelection:`Agentenauswahl`,agentGeneration:`Agentengenerierung`},steps:{configure:`Konfigurieren`},summary:{agents:`Agenten`,agentSkills:`Agenten-Skills`,skills:`Skills`,openspecSkills:`OpenSpec-Skills`,legacyRemoved_one:`{{count}} Legacy-Befehl <code>/specrails:*</code> entfernt`,legacyRemoved_other:`{{count}} Legacy-Befehle <code>/specrails:*</code> entfernt`},complete:{welcome:`Willkommen bei <spec>spec</spec><rails>rails</rails>`,configured:`<strong>{{projectName}}</strong> ist jetzt mit KI-gestützten Entwicklungs-Workflows konfiguriert. Ihre spezialisierten Agenten und Befehle sind einsatzbereit.`,installedForEngines_one:`Für {{count}} Engine installiert`,installedForEngines_other:`Für {{count}} Engines installiert`,installed:`Installiert`,installFailed:`Installation fehlgeschlagen`,learnMore:`Erfahren Sie, wie Sie das Beste aus specrails herausholen:`,continueToProject:`Weiter zum Projekt`,jira:{title:`Ein Jira-Board verbinden`,subtitle:`Optional — hinterlege die Specs dieses Projekts mit einem Jira-Board. Du kannst das auch später in den Einstellungen tun.`,configure:`Jira einrichten`,optional:`optional`}},error:{title:`Setup fehlgeschlagen`,skipSetup:`Setup überspringen`,prereqMissing:`Das SpecRails-Setup benötigt Node.js, npm, npx und Git im PATH, bevor dieses Projekt installiert werden kann.`,prereqRetryHint:`Installieren Sie die fehlenden Tools, starten Sie Specrails neu und versuchen Sie das Setup erneut.`}},t={title:`Projekt hinzufügen`,description:`Registrieren Sie ein Projektverzeichnis, um es über Specrails zu verwalten.`,noProviderDetected:`Keine KI-CLI gefunden. Installieren Sie zuerst Claude Code oder Codex CLI.`,pathLabel:`Projektpfad`,pathPlaceholder:`/Users/ich/mein-projekt`,pathHint:`Absoluter Pfad zum Projekt-Root`,browseForFolder:`Ordner auswählen`,selectProjectFolder:`Projektordner auswählen`,nameLabel:`Anzeigename`,optional:`(optional)`,namePlaceholder:`Mein Projekt`,nameHint:`Standard ist der Verzeichnisname`,providersLabel:`KI-Anbieter`,notFound:`nicht gefunden`,multiProviderHint:`Beide Engines werden eingerichtet. Die erste ist der Projektstandard. Kann nach dem Erstellen nicht geändert werden.`,singleProviderHint:`Kann nach dem Erstellen des Projekts nicht geändert werden.`,adding:`Wird hinzugefügt…`,submit:`Projekt hinzufügen`,toolsRequired_one:`{{tools}} wird benötigt, um ein Projekt hinzuzufügen`,toolsRequired_other:`{{tools}} werden benötigt, um ein Projekt hinzuzufügen`,errors:{pathRequired:`Projektpfad ist erforderlich`,selectProvider:`Wählen Sie mindestens einen KI-Anbieter aus`,addFailed:`Projekt konnte nicht hinzugefügt werden`},toasts:{registered:`Projekt „{{name}}“ registriert`}},n={corruptedBundle:`Bundle beschädigt – App neu installieren`,notInstalled:`nicht installiert`,failedToExecute:`gefunden, aber Ausführung fehlgeschlagen`,failedToExecuteAt:`unter {{path}} gefunden, aber Ausführung fehlgeschlagen`,failedToExecuteWithError:`gefunden, aber Ausführung fehlgeschlagen ({{error}})`,failedToExecuteAtWithError:`unter {{path}} gefunden, aber Ausführung fehlgeschlagen ({{error}})`,needsMinimum:`{{version}} gefunden – benötigt {{minVersion}}+`,unknownVersion:`unbekannt`,installedLabel:`installiert`,verifyError:`Entwickler-Tools konnten lokal nicht überprüft werden – die Installation validiert sie.`,allDetected:`Alle erforderlichen Tools erkannt`,bundleCorruptedTitle:`App-Bundle beschädigt`,toolsRequired_one:`{{count}} Entwickler-Tool erforderlich`,toolsRequired_other:`{{count}} Entwickler-Tools erforderlich`,reinstallHint:`Installieren Sie die Specrails-App neu, um die mitgelieferten Tools wiederherzustellen.`,installMissingHint:`Installieren Sie die fehlenden Tools, um fortzufahren.`,moreInfo:`Mehr Infos`,bundledBadge:`mitgeliefert`},r={title:`Entwickler-Tools installieren`,description:`SpecRails benötigt Node.js, npm, npx und Git im PATH. Wählen Sie das Snippet für Ihr Betriebssystem, führen Sie es aus und klicken Sie dann auf „Installiert, erneut prüfen“.`,darwin:{intro:`Mit Homebrew bekommen Sie beide Tools in einer Zeile. Ohne brew nutzen Sie die offiziellen Downloads.`,installNodeGit:`Node.js und Git über Homebrew installieren`},win32:{intro:`Winget ist in Windows 11 und aktuellen Windows-10-Versionen enthalten. Öffnen Sie PowerShell oder Terminal und führen Sie aus:`,installNode:`Node.js LTS installieren`,installGit:`Git installieren`,note:`Starten Sie Specrails nach der Installation neu, damit Windows den PATH aktualisiert.`},linux:{intro:`Verwenden Sie den Paketmanager Ihrer Distribution:`,debian:`Debian / Ubuntu`,fedora:`Fedora / RHEL`},links:{nodeOfficial:`Node.js (offiziell)`,gitOfficial:`Git (offiziell)`,gitWindows:`Git für Windows (offiziell)`},showOtherPlatforms:`Andere Plattformen anzeigen`,hideOtherPlatforms:`Andere Plattformen ausblenden`,recheck:`Installiert, erneut prüfen`,diagnostics:{copy:`Diagnose kopieren`,copied:`Diagnose kopiert`,failed:`Kopieren fehlgeschlagen`},corrupted:{title:`App-Bundle beschädigt`,description:`Mindestens ein mitgeliefertes Tool (Node.js, Git) konnte nicht verifiziert werden.`,body:`Dieses Tool ist in der Specrails-App enthalten und kann nicht separat installiert werden. Wenn Sie diese Meldung sehen, ist das App-Bundle möglicherweise beschädigt. Bitte installieren Sie Specrails neu.`}},i={title:`Setup-Fortschritt`,progress:`{{done}} von {{total}} abgeschlossen`,rawLog_one:`Roh-Log ({{count}} Zeile)`,rawLog_other:`Roh-Log ({{count}} Zeilen)`},a={title:`Setup-Assistent`,subtitle:`Beantworten Sie die Prompts, um Ihr Projekt zu konfigurieren`,settingUp:`Ihr Projekt wird eingerichtet…`,placeholder:`Antwort eingeben…`,keyboardHint:`Enter zum Senden, Shift+Enter für neue Zeile`},o={title:`Willkommen bei <spec>spec</spec><rails>rails</rails>`,description:`Specrails verwaltet mehrere Projekte über eine einzige Oberfläche. Fügen Sie Ihr erstes Projekt hinzu, um loszulegen.`,addFirstProject:`Erstes Projekt hinzufügen`,jiraHint:`Verbinde jedes Projekt mit seinem eigenen Jira-Board — Specs bleiben in beide Richtungen synchron.`},s=JSON.parse(`{"productTour":"Produkttour","stepCount":"Schritt {{current}} von {{total}}","goToStep":"Zu Schritt {{step}}: {{label}}","stepLabel":"Schritt {{step}}","dontShowAgain":"Nicht mehr anzeigen","skipTour":"Tour überspringen","getStarted":"Loslegen","flow":{"addSpec":"Spec hinzufügen","dropInRail":"Auf eine Rail ziehen","hitPlay":"Play drücken","ship":"Ship","architect":"Architekt","developer":"Entwickler","reviewer":"Reviewer"},"language":{"nav":"Sprache","title":"Wählen Sie Ihre Sprache","subtitle":"Specrails spricht Ihre Sprache","intro":"Wählen Sie die Sprache für die Oberfläche. Sie gilt sofort – diese Tour eingeschlossen.","note":"Sie können sie jederzeit unter Einstellungen → Sprache ändern."},"theme":{"nav":"Theme","title":"Wählen Sie Ihren Look","subtitle":"Integrierte Themes, sofort angewendet","intro":"Wählen Sie, wie Specrails aussehen soll — das Theme wird sofort beim Klick angewendet.","note":"Sie können es jederzeit unter Einstellungen → Erscheinungsbild ändern."},"welcome":{"nav":"Willkommen","title":"Willkommen bei Specrails","subtitle":"Ihr lokales Cockpit, um Software mit KI-Agenten auszuliefern","intro":"Specrails verwandelt eine Idee in ausgelieferten Code – und lässt Sie jeden Schritt <b>sehen, steuern und nachvollziehen</b>. Entwerfen Sie eine Spec im Gespräch mit einer KI, ziehen Sie sie auf eine Ausführungs-Rail und drücken Sie Play. Die Pipeline übernimmt Architektur, Implementierung, Review und den Pull Request – und streamt ihre Arbeit dabei live.","coreLoopLabel":"Der Kern-Loop","flowCaption":"Jede Spec durchläuft automatisch <b>Architekt → Entwickler → Reviewer → Ship</b>.","localNote":"<b>100 % lokal · Single-User · keine Konten.</b> Alles läuft auf Ihrem Rechner. Ihr Code verlässt den Laptop nur, wenn <i>Sie</i> einen Agent darauf ansetzen.","tourNote":"Diese kurze Tour zeigt alles, was die App kann – dauert etwa eine Minute."},"authorSpecs":{"nav":"Specs verfassen","title":"Aus Ideen werden Specs","subtitle":"Sechs Wege, genau festzuhalten, was gebaut werden soll","intro":"Eine <b>Spec</b> beschreibt Arbeit, die erledigt werden soll. Verfassen Sie sie, wie es gerade passt – vom schnellen Einzeiler bis zum ausführlichen Gespräch mit der KI.","exploreLabel":"Explore – im Dialog","exploreBody":"Beschreiben Sie im Chat, was Sie wollen; ein Live-Entwurf baut sich mit jedem Zug neu auf. Ein Preset-Regler steuert, wie viel Projektkontext die KI sieht – von nur Ihrer Nachricht bis zur kompletten Codebasis samt Ihren MCP-Servern.","quickLabel":"Quick – in einem Schritt","quickBody":"Sie wissen schon, was Sie wollen? Generieren Sie eine vollständige Spec in einem einzigen Zug. Optional mit Contract Layer anreichern: exakte Namen, Datenformen, Invarianten und eine Liste der berührten Dateien, damit die Agenten nichts neu erfinden.","websiteLabel":"Von einer Website","websiteBody":"Öffnet einen eingebetteten Browser. Wählen Sie per Hover ein Element oder ziehen Sie ein Rechteck – Screenshot, DOM und angewendetes CSS werden zu Anhängen. Die Desktop-Version bringt ein eigenes Chromium mit und funktioniert daher offline.","smashLabel":"Ein großes Epic SMASHen","smashBody":"Zerlegen Sie eine große Spec mit einem Klick in eine Familie kleinerer Sub-Specs – jedes Kind trägt eine Kurzzusammenfassung auf seiner Karte.","draftsLabel":"Entwürfe & Weiterbearbeiten","draftsBody":"Parken Sie eine laufende Exploration als Entwurfs-Ticket und nehmen Sie sie später wieder auf; öffnen Sie jede Spec erneut in Explore, um weiter zu verfeinern.","compareLabel":"Seite an Seite vergleichen","compareBody":"Ziehen Sie eine Spec an den Bildschirmrand, und eine Auswahl Ihrer anderen Specs gleitet herein – prüfen Sie zwei davon gemeinsam, wie auf einem Tablet."},"rails":{"nav":"Auf Rails ausführen","title":"Die Pipeline auf Rails laufen lassen","subtitle":"Specs in Bahnen organisieren, dann die Agenten starten","intro":"Die rechte Seite des Dashboards sind Ihre <b>Rails</b> – Ausführungsbahnen. Ziehen Sie eine Spec-Karte auf eine Rail und drücken Sie <play>▶ Play</play>, um einen Implementierungsjob zu starten.","jobLabel":"Was jeder Job ausführt","flowCaption":"Jede Phase streamt ihre Logs live, während sie arbeitet.","modeLabel":"Wählen Sie, wie eine Rail läuft","modeBody":"Jede Rail wählt einen Modus: <b>Implement</b> (die vollständige strukturierte Pipeline), <b>Batch</b> (mehrere Specs nacheinander) oder <b>Ultracode</b> (Claude arbeitet autonom, ohne feste Pipeline).","profilesLabel":"Agentenprofile","profilesBody":"Ein deklarativer Katalog pro Projekt, der bestimmt, welche Agenten laufen und welches Modell jeder nutzt – pro Rail gewählt und pro Job eingefroren, damit parallele Arbeit isoliert bleibt.","jobDetailLabel":"Live-Jobdetails","jobDetailBody":"Jeder Job zeigt einen Ticket-Identitäts-Header, eine live tickende Laufzeit und laufende Turn-/Token-Zähler; die verbindlichen Kosten werden beim Beenden ermittelt.","isolationLabel":"Viele Projekte, isoliert","isolationBody":"Jedes Projekt hat seine eigene Datenbank und Job-Queue. Lassen Sie verschiedene Projekte gleichzeitig laufen und wechseln Sie über die linke Seitenleiste – Ihre Position wird pro Projekt gemerkt."},"providers":{"nav":"Ihr Agent","title":"Bringen Sie Ihren eigenen Agent mit","subtitle":"Claude Code und Codex als gleichwertige Engines","intro":"Die App behandelt <b>Claude Code</b> und <b>Codex CLI</b> als austauschbare Engines hinter einem gemeinsamen Vertrag. Ein Projekt kann eine oder beide installieren – die Wahl fällt bei der Installation.","table":{"capability":"Fähigkeit","streamingResume":"Streaming & Sitzungsfortsetzung","native":"Nativ","costReporting":"Kostenberichte","providerBilled":"Anbieterseitig abgerechnet","estimated":"Geschätzt (~)","telemetry":"Telemetrie (OTEL)","synthesized":"Synthetisiert","agentProfiles":"Agentenprofile"},"calloutLabel":"Wenn beide installiert sind","calloutBody":"Wählen Sie die Engine <b>pro Spec, pro Rail oder pro Terminal-Start</b>. Die App merkt sich Ihre letzte Wahl pro Projekt. Codex-Kosten werden anhand einer lokalen Preisliste geschätzt und stets mit <mono>~</mono> markiert."},"cost":{"nav":"Kosten verfolgen","title":"Jeden Cent im Blick","subtitle":"Jeder kostenpflichtige Aufruf, erfasst und visualisiert","intro":"Jeder KI-Aufruf – über Rails, Quick, Explore, AI Edits, SMASH und Dateizusammenfassungen – wird für <b>Claude und Codex</b> erfasst. Schluss mit dem Raten, was die Agenten kosten.","analyticsLabel":"Analytics-Seite","analyticsBody":"Ein Burn-Rate-Hero, Tages-Timeline, Top-Tickets, Modellaufschlüsselung und ein Kosten-vs.-Turns-Scatter. Filtern nach Zeitraum (7d / 30d / 90d / Alle) und nach Bereich.","perTicketLabel":"Ausgaben pro Ticket","perTicketBody":"Die Detailansicht jeder Spec zeigt, was sie gekostet hat und wie viele Turns sie brauchte – mit Deep-Link in die auf dieses Ticket gefilterte Analytics-Ansicht.","honestLabel":"Ehrliche Zahlen","honestBody":"Claude-Kosten sind der vom Anbieter abgerechnete Betrag; Codex wird geschätzt und mit <mono>~</mono> markiert. Token-Summen schließen die Cache-Stufen ein, sodass die Zahlen wirklich aufgehen.","budgetsLabel":"Budgets & Alarme","budgetsBody":"Legen Sie ein Tagesbudget und einen Kostenalarm pro Job fest; die App pausiert die Queue automatisch, wenn die Grenze überschritten wird. Exportieren Sie alles als CSV oder JSON."},"workspace":{"nav":"Arbeitsbereich","title":"Machen Sie es zu Ihrem Arbeitsbereich","subtitle":"Alles Nötige, ohne das Fenster zu verlassen","terminalLabel":"Terminal-Panel","terminalBody":"Ein echtes Terminal im VS-Code-Stil am unteren Rand (<mod>{{mod}}</mod> <j>J</j>) – WebGL-Rendering, Suche, Inline-Bilder, Drag-and-drop-Pfade und Shell-Integration. Bis zu 10 Sessions pro Projekt.","codeLabel":"Code-Explorer","codeBody":"Ein schreibgeschützter Dateibaum und Monaco-Viewer mit verständlichen KI-Zusammenfassungen und „Von KI berührt“-Herkunfts-Chips – so kann jeder nachvollziehen, was sich warum geändert hat.","integrationsLabel":"Integrationen","integrationsBody":"Ein Marketplace für MCP-Integrationen pro Projekt – Serena (semantische Code-Navigation) ist bereits enthalten. Installationen sind additiv: Eine neue stört nie eine bestehende.","themesLabel":"Themes","themesBody":"Fünf integrierte Themes – specrails (Standard), dracula, aurora-light, obsidian-dark und matrix – werden angewendet, bevor die UI zeichnet, also ohne Aufblitzen. Ändern Sie sie unter Einstellungen → Erscheinungsbild.","chatsLabel":"Minimierbare Chats","chatsBody":"Parken Sie eine Explore- oder AI-Edit-Sitzung als Dock-Chip und nehmen Sie sie später wieder auf – sie geht weder beim Neuladen noch beim Projektwechsel verloren.","desktopLabel":"Desktop oder Browser","desktopBody":"Nutzen Sie Specrails im Browser oder holen Sie sich die signierte Desktop-App (macOS & Windows) mit eigenem Server und eigenen Runtimes."},"companion":{"nav":"Mobiler Companion","title":"Nehmen Sie Specrails überallhin mit","subtitle":"Specrails Companion – Ihre Pipelines auf Ihrem Smartphone","intro":"<b>Specrails Companion</b> ist eine Web-App unter specrails.dev/companion-app – öffnen Sie sie auf Ihrem Smartphone (oder fügen Sie sie zu Ihrem Home-Bildschirm hinzu), um das Specs-Board zu durchstöbern, Rails zu starten und zu stoppen, Live-Job-Logs zu verfolgen und einen Blick auf die Analytics zu werfen. Keine Installation, kein App-Store.","localLabel":"100 % lokal, wie alles andere","localBody":"Ihr Smartphone verbindet sich direkt mit diesem Rechner – Peer-to-Peer und verschlüsselt (WebRTC). Kein Cloud-Relay, kein Konto, und Ihr Code verlässt nie Ihre Geräte.","downloadLabel":"Auf Ihrem Smartphone öffnen","downloadHint":"Scannen Sie den Code mit der Kamera Ihres Smartphones oder öffnen Sie specrails.dev/companion-app im Browser.","open":"Specrails Companion öffnen","pairLabel":"Die Kopplung dauert zehn Sekunden","pairBody":"Öffnen Sie auf Ihrem Smartphone specrails.dev/companion-app und gehen Sie dann hier zu Einstellungen → Mobiler Companion → Web-Companion koppeln und folgen Sie den Schritten am Bildschirm."},"moveFast":{"nav":"Schnell arbeiten","title":"In Gedankengeschwindigkeit arbeiten","subtitle":"Keyboard-first, überall","paletteLabel":"Befehlspalette","paletteShortcut":"<f>Drücken Sie</f> <mod>{{mod}}</mod> <m>+</m> <k>K</k> <m>überall</m>","paletteBody":"Projekte wechseln, Spec-Befehle ausführen, zu jeder Seite springen und letzte Jobs finden – alles mit Fuzzy-Suche.","terminalLabel":"Terminal-Panel","terminalBody":"Umschalten mit <mod>{{mod}}</mod> <j>J</j>.","shortcutsLabel":"Alle Shortcuts","shortcutsBody":"Drücken Sie <q>?</q> für die vollständige Übersicht.","chatLabel":"Chat-Seitenleiste","chatBody":"Rechte Seitenleiste umschalten mit <mod>{{mod}}</mod> <bkey>B</bkey>.","projectsLabel":"Projekt-Seitenleiste","projectsBody":"Linke Arc-Seitenleiste umschalten mit <alt>{{alt}}</alt> <mod>{{mod}}</mod> <bkey>B</bkey>.","outro":"<b>Das war die Tour.</b> Fügen Sie über die linke Seitenleiste ein Projekt hinzu und liefern Sie Ihre erste Spec aus. Diese Tour lässt sich jederzeit über die Einstellungen erneut öffnen."},"jira":{"label":"Jira-Integration","body":"Hinterlege jedes Projekt mit einem <b>Jira-Board</b> — jede Spec wird zu einem Jira-Vorgang, in beide Richtungen synchronisiert: Der Status folgt dem Rail und am Ende eines Jobs wird ein Kommentar gepostet. Richte es pro Projekt beim Hinzufügen ein oder jederzeit in den Einstellungen."}}`),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:`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};
|