specrails-desktop 2.24.3 → 2.26.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.
Files changed (120) hide show
  1. package/client/dist/assets/{ActivityFeedPage-CxnjeMnO.js → ActivityFeedPage-1eXnoNAo.js} +1 -1
  2. package/client/dist/assets/{AgentBrowserCapture-c-Cr7q94.js → AgentBrowserCapture-BHW_6Vm0.js} +1 -1
  3. package/client/dist/assets/{AgentModeCodePane-CoZZ2_sJ.js → AgentModeCodePane-C89SAJzI.js} +2 -2
  4. package/client/dist/assets/{AgentModeJobsPane-Dua5r_jk.js → AgentModeJobsPane-BG_4r4Dm.js} +1 -1
  5. package/client/dist/assets/{AgentsPage-L-pmBTbc.js → AgentsPage-BrkWfc9s.js} +1 -1
  6. package/client/dist/assets/{AnalyticsPage-B82qtTYV.js → AnalyticsPage-CMZRUPrT.js} +1 -1
  7. package/client/dist/assets/{BarChart-JoGhQq6b.js → BarChart-BtF3zJHa.js} +1 -1
  8. package/client/dist/assets/{CodePage-CIBbOHTk.js → CodePage-Cime5FRs.js} +1 -1
  9. package/client/dist/assets/{DesktopAnalyticsPage-D94CWcV4.js → DesktopAnalyticsPage-CSKHSBBF.js} +1 -1
  10. package/client/dist/assets/{DocsDialog-DIubUwd_.js → DocsDialog-ClTq6Fzj.js} +1 -1
  11. package/client/dist/assets/{DocsPage-A9PpvdW3.js → DocsPage-DTxfOpTu.js} +1 -1
  12. package/client/dist/assets/{ExportDropdown-CWelhih_.js → ExportDropdown-Ho9zdPvK.js} +1 -1
  13. package/client/dist/assets/{IntegrationsPage-DtcigyHI.js → IntegrationsPage-DWNyo6jk.js} +1 -1
  14. package/client/dist/assets/{InteractiveJobComposer-CtkXJ1gD.js → InteractiveJobComposer-CYxXOKld.js} +1 -1
  15. package/client/dist/assets/{JobDetailModal-C-AewB0N.js → JobDetailModal-DrNafHY5.js} +1 -1
  16. package/client/dist/assets/{JobDetailPage-C2nAjNRu.js → JobDetailPage-4VKw33GW.js} +1 -1
  17. package/client/dist/assets/{JobsPage-CtDu1BqI.js → JobsPage-cFr6wWaH.js} +1 -1
  18. package/client/dist/assets/{LoopBuilderPage-CLikTQXx.js → LoopBuilderPage-Bk8zVvEX.js} +1 -1
  19. package/client/dist/assets/{LoopPreviewModal-SEb8gedX.js → LoopPreviewModal-XFSO2Vcs.js} +1 -1
  20. package/client/dist/assets/{LoopsPage-Pf_0o0Yf.js → LoopsPage-DWMwDj9g.js} +1 -1
  21. package/client/dist/assets/{ProjectSettingsDialog-C6_NZLxv.js → ProjectSettingsDialog-DnSe_yWm.js} +1 -1
  22. package/client/dist/assets/{TemplatePreviewModal-CcTeX1GA.js → TemplatePreviewModal-B30-TY_v.js} +1 -1
  23. package/client/dist/assets/agent-6mhkV25_2.js +1 -0
  24. package/client/dist/assets/agent-BZqfQhI_.js +1 -0
  25. package/client/dist/assets/agent-Bjy1SlT5.js +1 -0
  26. package/client/dist/assets/agent-Bn6ZmjHj.js +1 -0
  27. package/client/dist/assets/agent-CRYdi9-t.js +1 -0
  28. package/client/dist/assets/agent-D5QNn9np2.js +1 -0
  29. package/client/dist/assets/agent-DgFoLgrF2.js +1 -0
  30. package/client/dist/assets/agent-DgwPsxWQ.js +1 -0
  31. package/client/dist/assets/{brain-BVlxI-OH.js → brain-DcXkQwzO.js} +1 -1
  32. package/client/dist/assets/code-CwnBPPyA.js +1 -0
  33. package/client/dist/assets/{dashboard-4WX7agHF2.js → dashboard-CuGuy2__2.js} +1 -1
  34. package/client/dist/assets/{dashboard-IbEztmJ52.js → dashboard-CxP3TZ3I2.js} +1 -1
  35. package/client/dist/assets/{dashboard-5Z_esXIB.js → dashboard-DWHVfP7U.js} +1 -1
  36. package/client/dist/assets/{dashboard-DQ-po1MG2.js → dashboard-D_Pgs6QH2.js} +1 -1
  37. package/client/dist/assets/{dashboard-oqS7VRrK.js → dashboard-Dwnssayh.js} +1 -1
  38. package/client/dist/assets/{dashboard-ojWdDq6S.js → dashboard-S_pT1yxN.js} +1 -1
  39. package/client/dist/assets/{dashboard-zfoJcdFW.js → dashboard-tCxOFOxx.js} +1 -1
  40. package/client/dist/assets/{dashboard-nc-Raovv.js → dashboard-zefbBNyG.js} +1 -1
  41. package/client/dist/assets/{dist-js-DOGUoTVT.js → dist-js-6U6hyD6z.js} +1 -1
  42. package/client/dist/assets/{dist-js-DtG-ECSR.js → dist-js-BAWwLSIj.js} +1 -1
  43. package/client/dist/assets/index-DnkfABxY.js +156 -0
  44. package/client/dist/assets/index-cvOunQkD.css +2 -0
  45. package/client/dist/assets/{lib-B-CmfZ34.js → lib-Bsny0zZp.js} +1 -1
  46. package/client/dist/assets/{loops-YYV2bwjd.js → loops-Brnx4Fji.js} +1 -1
  47. package/client/dist/assets/{loops-hXgncEpF2.js → loops-BvqQ-bHR2.js} +1 -1
  48. package/client/dist/assets/{loops-BvEenWBy.js → loops-CvOWsi5r.js} +1 -1
  49. package/client/dist/assets/{loops-DjOtVXRo.js → loops-D6D3XHjj.js} +1 -1
  50. package/client/dist/assets/{loops-HTHf-xu32.js → loops-DJNhp17p2.js} +1 -1
  51. package/client/dist/assets/{loops-kYbydDyN.js → loops-K5_HXfJa.js} +1 -1
  52. package/client/dist/assets/loops-LIgO_-eM.js +1 -0
  53. package/client/dist/assets/{loops-DNGiYKll2.js → loops-vhJdbcz92.js} +1 -1
  54. package/client/dist/assets/{settings-DZJeXoRV.js → settings-BWIf3vv4.js} +1 -1
  55. package/client/dist/assets/{settings-TNga5gIF2.js → settings-BhuXe7ek2.js} +1 -1
  56. package/client/dist/assets/{settings-D6qY9_UI.js → settings-DE8t6aYv.js} +1 -1
  57. package/client/dist/assets/{settings-BsJMsWGc.js → settings-DHd1lQ1k.js} +1 -1
  58. package/client/dist/assets/{settings-BOHOmHkb.js → settings-DTYQ5COE.js} +1 -1
  59. package/client/dist/assets/settings-DXgPh9-k.js +1 -0
  60. package/client/dist/assets/{settings-BlEA_7h02.js → settings-Dgv_q4qf2.js} +1 -1
  61. package/client/dist/assets/{settings-lFoaYT-s2.js → settings-FJXpJ3k92.js} +1 -1
  62. package/client/dist/assets/{setup-CmU6bTCV2.js → setup-cnqZsQSX2.js} +1 -1
  63. package/client/dist/assets/{upload-B22mO1uT.js → upload-49vX83IZ.js} +1 -1
  64. package/client/dist/assets/{value-DltGn-Ab.js → value-Bo8EiTZE.js} +1 -1
  65. package/client/dist/index.html +6 -6
  66. package/docs/agy-cli-provider-study.md +1 -1
  67. package/docs/codex.md +2 -2
  68. package/docs/gemini-cli-provider-study.md +2 -2
  69. package/docs/guide/de/pipeline/3-batch-implement-and-multi-feature.md +1 -1
  70. package/docs/guide/en/pipeline/3-batch-implement-and-multi-feature.md +1 -1
  71. package/docs/guide/es/pipeline/3-batch-implement-and-multi-feature.md +1 -1
  72. package/docs/guide/fr/pipeline/3-batch-implement-and-multi-feature.md +1 -1
  73. package/docs/guide/it/pipeline/3-batch-implement-and-multi-feature.md +1 -1
  74. package/docs/guide/ja/pipeline/3-batch-implement-and-multi-feature.md +1 -1
  75. package/docs/guide/pt/pipeline/3-batch-implement-and-multi-feature.md +1 -1
  76. package/docs/guide/pt/pipeline/5-the-loop-builder.md +1 -1
  77. package/docs/guide/zh/pipeline/3-batch-implement-and-multi-feature.md +1 -1
  78. package/docs/internals/api-reference.md +3 -3
  79. package/docs/internals/companion-rails-as-loops-contract.md +6 -6
  80. package/docs/internals/configuration.md +1 -1
  81. package/docs/internals/interactive-jobs.md +3 -3
  82. package/docs/internals/safe-pr-review-flow.md +1 -1
  83. package/docs/internals/visual-design-audit.md +2 -2
  84. package/docs/running-pipelines.md +1 -1
  85. package/package.json +1 -1
  86. package/server/dist/agent-chat-manager.js +16 -2
  87. package/server/dist/agent-chat-router.js +66 -1
  88. package/server/dist/agent-context-resolver.js +301 -0
  89. package/server/dist/agent-operator-prompt.js +14 -7
  90. package/server/dist/agent-store.js +24 -12
  91. package/server/dist/db.js +17 -17
  92. package/server/dist/desktop-db.js +6 -0
  93. package/server/dist/feature-flags.js +2 -2
  94. package/server/dist/index.js +1 -1
  95. package/server/dist/interactive-job-session.js +3 -3
  96. package/server/dist/loop-command-catalog.js +11 -11
  97. package/server/dist/loop-factory.js +7 -7
  98. package/server/dist/loop-graph.js +2 -2
  99. package/server/dist/loop-run-manager.js +1 -1
  100. package/server/dist/mcp/guide.js +8 -6
  101. package/server/dist/mcp/tools/rails.js +4 -3
  102. package/server/dist/mobile/mobile-router.js +1 -1
  103. package/server/dist/project-router-jobs.js +1 -1
  104. package/server/dist/project-router-loop-runs.js +1 -1
  105. package/server/dist/project-router-settings.js +5 -5
  106. package/server/dist/queue-manager.js +27 -27
  107. package/server/dist/rails-router.js +20 -20
  108. package/client/dist/assets/agent-CXGbWkpN2.js +0 -1
  109. package/client/dist/assets/agent-Cjiy_5TS.js +0 -1
  110. package/client/dist/assets/agent-DBo9_-zx.js +0 -1
  111. package/client/dist/assets/agent-DUmd88ng.js +0 -1
  112. package/client/dist/assets/agent-N5jFquC82.js +0 -1
  113. package/client/dist/assets/agent-ay1iYN3L.js +0 -1
  114. package/client/dist/assets/agent-dMyoDKGk.js +0 -1
  115. package/client/dist/assets/agent-opeyUUUG2.js +0 -1
  116. package/client/dist/assets/code-CqCcRThR.js +0 -1
  117. package/client/dist/assets/index-B0fq5d1Z.js +0 -155
  118. package/client/dist/assets/index-DZ2Beygz.css +0 -2
  119. package/client/dist/assets/loops-CBiWd9Hf.js +0 -1
  120. package/client/dist/assets/settings-Mr7MnJbf.js +0 -1
@@ -1 +1 @@
1
- var e={title:`Langue`,description:`Langue de l'interface pour tout Desktop. S'applique instantanément — aucun redémarrage requis.`,selectLabel:`Langue de l'interface`,updateFailed:`Impossible d'enregistrer la préférence de langue`},t={title:`Paramètres du projet`},n={saveFailed:`Échec de l'enregistrement : {{message}}`},r={title:`Télémétrie du pipeline`,description:`Capture l'usage des tokens, la durée des phases et l'activité des sous-agents pour l'export de diagnostic. Désactivé par défaut.`,toggleLabel:`Activer la télémétrie du pipeline`,toggleDescription:`Quand elle est activée, les données OTEL des jobs du pipeline sont capturées localement. Utilisez le bouton <mono>Exporter le diagnostic</mono> sur n'importe quelle carte de job pour les télécharger.`,enabled:`Télémétrie du pipeline activée`,disabled:`Télémétrie du pipeline désactivée`,saveFailed:`Échec de l'enregistrement du réglage de télémétrie`},i={title:`Pré-prompt de rail`,description:`Instructions supplémentaires propres au projet, ajoutées aux jobs de rail implement et batch-implement après le contexte du ticket et avant l'exécution.`,label:`Pré-prompt`,placeholder:`Exemple : privilégier les changements incrémentaux, garder les migrations rétrocompatibles et ajouter des tests pour chaque changement de rail.`,helper:`À utiliser pour des consignes projet stables qui doivent accompagner chaque exécution d'implémentation sur rail.`,saveButton:`Enregistrer le pré-prompt`,cleared:`Pré-prompt effacé`,saved:`Pré-prompt enregistré`,saveFailed:`Échec de l'enregistrement du pré-prompt`},a={title:`Pré-prompt Freestyle`,description:`Instruction envoyée à Claude en mode Freestyle (rails Claude uniquement). Freestyle saute le pipeline OpenSpec — il transmet à Claude ce pré-prompt plus le texte de la spec et le laisse implémenter en autonomie. Laissez vide pour utiliser la valeur par défaut intégrée.`,label:`Pré-prompt Freestyle`,placeholder:`Laissez vide pour utiliser l'instruction Freestyle par défaut.`,helper:`Le texte de la spec est ajouté automatiquement après ce pré-prompt. Vide = défaut.`,saveButton:`Enregistrer le pré-prompt Freestyle`,resetToDefault:`Pré-prompt Freestyle réinitialisé à la valeur par défaut`,saved:`Pré-prompt Freestyle enregistré`,saveFailed:`Échec de l'enregistrement du pré-prompt Freestyle`},o={title:`Budget`,description:`Définissez un plafond de dépense quotidien pour ce projet. La file se met automatiquement en pause quand la limite est atteinte.`,dailyLabel:`Budget quotidien (USD)`,dailyHelper:`Laissez vide pour désactiver. La dépense est calculée sur les dernières 24 heures.`,dailyPlaceholder:`ex. 5.00`,perJobLabel:`Alerte de coût par job (USD)`,perJobHelper:`Alerte quand un seul job de ce projet dépasse ce montant.`,perJobPlaceholder:`ex. 0.50`,invalidNumber:`Saisissez un nombre positif ou laissez vide pour désactiver`,dailyRemoved:`Budget quotidien supprimé`,dailySet:`Budget quotidien défini à {{amount}} $`,perJobAlertDisabled:`Alerte de coût par job désactivée`,alertSet:`Alerte définie pour les jobs dépassant {{amount}} $`,saveBudgetFailed:`Échec de l'enregistrement du budget`,saveThresholdFailed:`Échec de l'enregistrement du seuil`},s={nav:{appearance:`Apparence`,code:`Code`,terminal:`Terminal`,updates:`Mises à jour`,mobile:`Mobile`,mcp:`MCP`,projects:`Projets`,advanced:`Avancé`,webhooks:`Webhooks`,about:`À propos`},title:`Paramètres de Desktop`,description:`Gérez les projets enregistrés et consultez les informations de Desktop.`,registeredProjects:`Projets enregistrés`,noProjects:`Aucun projet enregistré pour l'instant`,techUrlDescription:`URL de base de l'API specrails-tech (par défaut : http://localhost:3000)`,techUrlSaved:`URL specrails-tech enregistrée`,techUrlSaveFailed:`Échec de l'enregistrement de l'URL`,budgetAlertsHeading:`Budget & alertes`,dailyBudgetLabel:`Budget quotidien de Desktop (USD)`,dailyBudgetHelper:`Limite de dépense quotidienne globale pour tous les projets. Les files se mettent automatiquement en pause en cas de dépassement.`,dailyBudgetPlaceholder:`ex. 10.00`,perJobHelper:`Alerte quand un seul job dépasse ce montant. Laissez vide pour désactiver.`,costAlertsDisabled:`Alertes de coût désactivées`,dailyBudgetRemoved:`Budget quotidien de Desktop supprimé`,dailyBudgetSet:`Budget quotidien de Desktop défini à {{amount}} $`,dailyBudgetSaveFailed:`Échec de l'enregistrement du budget quotidien de Desktop`,projectRemoved:`Projet supprimé`,projectRemoveFailed:`Échec de la suppression du projet`,onboardingHeading:`Onboarding`,platformTour:`Visite de la plateforme`,platformTourDescription:`Rejouez l'assistant de bienvenue pour revoir les fonctionnalités clés.`,replayTour:`Rejouer la visite`,terminalPanelHeading:`Panneau de terminal`,infoHeading:`Informations de Desktop`,infoPort:`Port`,infoProjects:`Projets`,infoDb:`BD de Desktop`},c={heading:`Notifications système`,description:`Affiche des notifications de bureau natives quand des jobs se terminent ou échouent. Les notifications n'apparaissent que lorsque l'onglet n'a pas le focus.`,enableLabel:`Activer les notifications système`,notifyOn:`Notifier pour :`,filterAll:`Tout (terminés & échoués)`,filterCompleted:`Terminés uniquement`,filterFailed:`Échoués uniquement`,enabledToast:`Notifications système activées`,disabledToast:`Notifications système désactivées`},l={heading:`Webhooks sortants`,description:`Notifiez des outils externes (Slack, Zapier, CI/CD) lors des événements de Desktop. Les requêtes sont signées via <code>X-Specrails-Signature</code> quand un secret est défini.`,eventJobCompleted:`Job terminé`,eventJobFailed:`Job en échec`,eventDailyBudgetExceeded:`Budget quotidien dépassé`,statusOn:`actif`,statusOff:`inactif`,disable:`Désactiver`,enable:`Activer`,sendTestPing:`Envoyer un ping de test`,addHeading:`Ajouter un webhook`,secretPlaceholder:`Secret de signature (facultatif)`,addButton:`Ajouter le webhook`,urlRequired:`L'URL est requise`,selectEvent:`Sélectionnez au moins un événement`,added:`Webhook ajouté`,addFailed:`Échec de l'ajout du webhook`,updateFailed:`Échec de la mise à jour du webhook`,removed:`Webhook supprimé`,removeFailed:`Échec de la suppression du webhook`,testPingSent:`Ping de test envoyé`,testPingFailed:`Échec de l'envoi du ping de test`},u={title:`Panneau de terminal`,desktopDescription:`Valeurs par défaut de Desktop, appliquées à chaque projet sauf surcharge par projet.`,projectDescription:`Surcharges par projet pour le panneau de terminal. Laissez un champ inchangé pour hériter de la valeur par défaut de Desktop.`,fontFamily:`Police`,fontSize:`Taille de police ({{min}}–{{max}})`,renderMode:`Mode de rendu`,copyOnSelect:`Copier à la sélection`,shellIntegration:`Intégration shell (marques OSC 133)`,notifyLongRunning:`Notifier les commandes de longue durée`,longCommandThreshold:`Seuil de commande longue (ms)`,imageRendering:`Rendu d'images inline (Sixel + iTerm2)`,browserShortcutUrl:`URL du raccourci navigateur`,quickScript:`Script rapide (collé dans le terminal actif — Entrée manuelle)`,reset:`Réinitialiser`,unsavedChanges:`Modifications non enregistrées`,clearOverride:`Effacer la surcharge`,clear:`Effacer`,inheritingDefault:`Hérite de la valeur par défaut de Desktop`,nothingToSave:`Rien à enregistrer`,saved:`Paramètres du terminal enregistrés`},d={heading:`Section Code`,summaryLanguage:`Langue des résumés`,monthlyBudget:`Budget mensuel (USD)`,budgetHelper:"Plafond de dépense `surface=file-summary` par mois calendaire. Les régénérations lancées par l'utilisateur peuvent le dépasser."},f={taglines:{dracula:`L'original — sombre teinté de violet aux accents néon éclatants`,"aurora-light":`Clair premium — indigo inspiré de Linear sur blanc cassé chaleureux`,"obsidian-dark":`Sombre premium — presque noir teinté de bleu aux accents électriques`,matrix:`Terminal phosphore — menthe douce sur fond presque noir verdâtre`,specrails:`Thème de la marque — bleu marine-indigo profond aux accents cyan saturés`},heading:`Apparence`,themeGroupLabel:`Thème`,currentlyActive:`Actuellement actif`,updateFailed:`Échec de la mise à jour du thème`},p={heading:`Compagnon mobile`,description:`Contrôlez Specrails depuis l'application SpecRails Companion sur votre téléphone, 100 % via votre réseau local. Désactivé par défaut.`,accessOn:`Accès mobile activé`,accessOff:`Accès mobile désactivé`,listeningOnPort:`À l'écoute sur le port {{port}}`,notListening:`Pas à l'écoute`,turnOn:`Activer`,turnOff:`Désactiver`,pairWebDevice:`Appairer le compagnon web`,reset:`Réinitialiser`,resetConfirm:`Réinitialiser l'identité mobile ? Tous les appareils appairés seront révoqués et devront s'appairer à nouveau.`,identityReset:`Identité mobile réinitialisée`,enableFailed:`Impossible d'activer l'accès mobile : {{message}}`,disableFailed:`Impossible de désactiver l'accès mobile : {{message}}`,windowsFirewall:`Le Pare-feu Windows demandera d'autoriser le serveur SpecRails à la première activation — choisissez « Autoriser sur les réseaux privés ».`,pairedDevices:`Appareils appairés`,noDevices:`Aucun appareil appairé pour l'instant.`,revokeDevice:`Révoquer {{name}}`},m={title:`Appairer le compagnon web`,description:`Ouvrez specrails.dev/companion-app sur votre téléphone, puis scannez ce code avec.`,startFailed:`Impossible de démarrer l'appairage : {{error}}`,showThenScan:`Une fois que votre téléphone l'a scanné, appuyez sur « Scanner le code du téléphone » et pointez la caméra vers votre téléphone.`,scanAnswer:`Scanner le code du téléphone`,scanning:`Pointez la caméra vers le code sur votre téléphone…`,cameraFailed:`Caméra indisponible : {{message}}`,notAnswer:`Ce QR code n'est pas une réponse d'appairage.`,connecting:`Connexion…`,paired:`✓ Appairé`,pairedToast:`Compagnon web appairé`,answerRejected:`Le bureau a rejeté ce code. Générez-en un nouveau et réessayez.`,copyCode:`Copier le code`,codeCopied:`Code copié`,cancel:`Annuler`},h={heading:`Specrails Core`,installed:`Installé :`,updateAvailable:`Mise à jour disponible : {{version}}`,upToDate:`À jour`,neverChecked:`Non vérifié`,check:`Rechercher des mises à jour`,checking:`Vérification…`,update:`Mettre à jour vers {{version}}`,downloading:`Téléchargement…`,materializing:`Installation…`,affectsAll:`S'applique à tous les projets — aucun redémarrage requis.`,unavailable:`Les mises à jour du core ne sont pas disponibles dans cette version.`,toastDone:`Specrails Core mis à jour vers {{version}}`,toastError:`Échec de la mise à jour du core : {{message}}`,toastUpToDate:`Specrails Core est à jour`,toastCheckFailed:`Échec de la vérification : {{message}}`},g={heading:`Specrails Desktop`,installed:`Installée :`,check:`Rechercher des mises à jour`,checking:`Vérification…`,upToDate:`Vous avez la dernière version`,updateAvailable:`Mise à jour disponible : {{version}}`,autoHint:`Vérification automatique au lancement et toutes les 6 heures.`,unavailable:`Les mises à jour ne sont disponibles que dans l'app de bureau.`,toastUpToDate:`Specrails Desktop est à jour`,toastCheckFailed:`Échec de la recherche de mises à jour : {{message}}`},_={title:`{{name}} — Paramètres`,description:`Configuration du projet : prompts, budget, télémétrie et terminal.`,nav:{general:`Général`,budget:`Budget`,telemetry:`Télémétrie`,terminal:`Terminal`}},v={title:`Branche d'intégration`,description:`La branche depuis laquelle les rails parallèles se ramifient et que ciblent leurs PR en brouillon. Laissez vide pour résoudre automatiquement vers la branche par défaut du dépôt.`,placeholder:`automatique (branche par défaut)`,resolved:`Les rails partent de <mono>{{branch}}</mono>`,save:`Enregistrer la branche`,saved:`Branche d'intégration enregistrée`,saveFailed:`Impossible d'enregistrer la branche d'intégration`},y={language:e,page:t,errors:n,telemetry:r,prePrompt:i,ultraPrePrompt:a,budget:o,desktop:s,notifications:c,webhooks:l,terminal:u,codeSection:d,appearance:f,mobile:p,pairWeb:m,coreUpdate:h,appUpdate:g,projectDialog:_,integrationBranch:v};export{g as appUpdate,f as appearance,o as budget,d as codeSection,h as coreUpdate,y as default,s as desktop,n as errors,v as integrationBranch,e as language,p as mobile,c as notifications,t as page,m as pairWeb,i as prePrompt,_ as projectDialog,r as telemetry,u as terminal,a as ultraPrePrompt,l as webhooks};
1
+ var e={title:`Langue`,description:`Langue de l'interface pour tout Desktop. S'applique instantanément — aucun redémarrage requis.`,selectLabel:`Langue de l'interface`,updateFailed:`Impossible d'enregistrer la préférence de langue`},t={title:`Paramètres du projet`},n={saveFailed:`Échec de l'enregistrement : {{message}}`},r={title:`Télémétrie du pipeline`,description:`Capture l'usage des tokens, la durée des phases et l'activité des sous-agents pour l'export de diagnostic. Désactivé par défaut.`,toggleLabel:`Activer la télémétrie du pipeline`,toggleDescription:`Quand elle est activée, les données OTEL des jobs du pipeline sont capturées localement. Utilisez le bouton <mono>Exporter le diagnostic</mono> sur n'importe quelle carte de job pour les télécharger.`,enabled:`Télémétrie du pipeline activée`,disabled:`Télémétrie du pipeline désactivée`,saveFailed:`Échec de l'enregistrement du réglage de télémétrie`},i={title:`Pré-prompt de rail`,description:`Instructions supplémentaires propres au projet, ajoutées aux jobs de rail implement et batch-implement après le contexte du ticket et avant l'exécution.`,label:`Pré-prompt`,placeholder:`Exemple : privilégier les changements incrémentaux, garder les migrations rétrocompatibles et ajouter des tests pour chaque changement de rail.`,helper:`À utiliser pour des consignes projet stables qui doivent accompagner chaque exécution d'implémentation sur rail.`,saveButton:`Enregistrer le pré-prompt`,cleared:`Pré-prompt effacé`,saved:`Pré-prompt enregistré`,saveFailed:`Échec de l'enregistrement du pré-prompt`},a={title:`Pré-prompt Freestyle`,description:`Instruction envoyée à Claude en mode Freestyle (rails Claude uniquement). Freestyle saute le pipeline OpenSpec — il transmet à Claude ce pré-prompt plus le texte de la spec et le laisse implémenter en autonomie. Laissez vide pour utiliser la valeur par défaut intégrée.`,label:`Pré-prompt Freestyle`,placeholder:`Laissez vide pour utiliser l'instruction Freestyle par défaut.`,helper:`Le texte de la spec est ajouté automatiquement après ce pré-prompt. Vide = défaut.`,saveButton:`Enregistrer le pré-prompt Freestyle`,resetToDefault:`Pré-prompt Freestyle réinitialisé à la valeur par défaut`,saved:`Pré-prompt Freestyle enregistré`,saveFailed:`Échec de l'enregistrement du pré-prompt Freestyle`},o={title:`Budget`,description:`Définissez un plafond de dépense quotidien pour ce projet. La file se met automatiquement en pause quand la limite est atteinte.`,dailyLabel:`Budget quotidien (USD)`,dailyHelper:`Laissez vide pour désactiver. La dépense est calculée sur les dernières 24 heures.`,dailyPlaceholder:`ex. 5.00`,perJobLabel:`Alerte de coût par job (USD)`,perJobHelper:`Alerte quand un seul job de ce projet dépasse ce montant.`,perJobPlaceholder:`ex. 0.50`,invalidNumber:`Saisissez un nombre positif ou laissez vide pour désactiver`,dailyRemoved:`Budget quotidien supprimé`,dailySet:`Budget quotidien défini à {{amount}} $`,perJobAlertDisabled:`Alerte de coût par job désactivée`,alertSet:`Alerte définie pour les jobs dépassant {{amount}} $`,saveBudgetFailed:`Échec de l'enregistrement du budget`,saveThresholdFailed:`Échec de l'enregistrement du seuil`},s={nav:{appearance:`Apparence`,code:`Code`,terminal:`Terminal`,updates:`Mises à jour`,mobile:`Mobile`,mcp:`MCP`,projects:`Projets`,advanced:`Avancé`,webhooks:`Webhooks`,about:`À propos`},title:`Paramètres de Desktop`,description:`Gérez les projets enregistrés et consultez les informations de Desktop.`,registeredProjects:`Projets enregistrés`,noProjects:`Aucun projet enregistré pour l'instant`,techUrlDescription:`URL de base de l'API specrails-tech (par défaut : http://localhost:3000)`,techUrlSaved:`URL specrails-tech enregistrée`,techUrlSaveFailed:`Échec de l'enregistrement de l'URL`,budgetAlertsHeading:`Budget & alertes`,dailyBudgetLabel:`Budget quotidien de Desktop (USD)`,dailyBudgetHelper:`Limite de dépense quotidienne globale pour tous les projets. Les files se mettent automatiquement en pause en cas de dépassement.`,dailyBudgetPlaceholder:`ex. 10.00`,perJobHelper:`Alerte quand un seul job dépasse ce montant. Laissez vide pour désactiver.`,costAlertsDisabled:`Alertes de coût désactivées`,dailyBudgetRemoved:`Budget quotidien de Desktop supprimé`,dailyBudgetSet:`Budget quotidien de Desktop défini à {{amount}} $`,dailyBudgetSaveFailed:`Échec de l'enregistrement du budget quotidien de Desktop`,projectRemoved:`Projet supprimé`,projectRemoveFailed:`Échec de la suppression du projet`,onboardingHeading:`Onboarding`,platformTour:`Visite de la plateforme`,platformTourDescription:`Rejouez l'assistant de bienvenue pour revoir les fonctionnalités clés.`,replayTour:`Rejouer la visite`,terminalPanelHeading:`Panneau de terminal`,infoHeading:`Informations de Desktop`,infoPort:`Port`,infoProjects:`Projets`,infoDb:`BD de Desktop`},c={heading:`Notifications système`,description:`Affiche des notifications de bureau natives quand des jobs se terminent ou échouent. Les notifications n'apparaissent que lorsque l'onglet n'a pas le focus.`,enableLabel:`Activer les notifications système`,notifyOn:`Notifier pour :`,filterAll:`Tout (terminés & échoués)`,filterCompleted:`Terminés uniquement`,filterFailed:`Échoués uniquement`,enabledToast:`Notifications système activées`,disabledToast:`Notifications système désactivées`},l={heading:`Webhooks sortants`,description:`Notifiez des outils externes (Slack, Zapier, CI/CD) lors des événements de Desktop. Les requêtes sont signées via <code>X-Specrails-Signature</code> quand un secret est défini.`,eventJobCompleted:`Job terminé`,eventJobFailed:`Job en échec`,eventDailyBudgetExceeded:`Budget quotidien dépassé`,statusOn:`actif`,statusOff:`inactif`,disable:`Désactiver`,enable:`Activer`,sendTestPing:`Envoyer un ping de test`,addHeading:`Ajouter un webhook`,secretPlaceholder:`Secret de signature (facultatif)`,addButton:`Ajouter le webhook`,urlRequired:`L'URL est requise`,selectEvent:`Sélectionnez au moins un événement`,added:`Webhook ajouté`,addFailed:`Échec de l'ajout du webhook`,updateFailed:`Échec de la mise à jour du webhook`,removed:`Webhook supprimé`,removeFailed:`Échec de la suppression du webhook`,testPingSent:`Ping de test envoyé`,testPingFailed:`Échec de l'envoi du ping de test`},u={title:`Panneau de terminal`,desktopDescription:`Valeurs par défaut de Desktop, appliquées à chaque projet sauf surcharge par projet.`,projectDescription:`Surcharges par projet pour le panneau de terminal. Laissez un champ inchangé pour hériter de la valeur par défaut de Desktop.`,fontFamily:`Police`,fontSize:`Taille de police ({{min}}–{{max}})`,renderMode:`Mode de rendu`,copyOnSelect:`Copier à la sélection`,shellIntegration:`Intégration shell (marques OSC 133)`,notifyLongRunning:`Notifier les commandes de longue durée`,longCommandThreshold:`Seuil de commande longue (ms)`,imageRendering:`Rendu d'images inline (Sixel + iTerm2)`,browserShortcutUrl:`URL du raccourci navigateur`,quickScript:`Script rapide (collé dans le terminal actif — Entrée manuelle)`,reset:`Réinitialiser`,unsavedChanges:`Modifications non enregistrées`,clearOverride:`Effacer la surcharge`,clear:`Effacer`,inheritingDefault:`Hérite de la valeur par défaut de Desktop`,nothingToSave:`Rien à enregistrer`,saved:`Paramètres du terminal enregistrés`},d={heading:`Section Code`,summaryLanguage:`Langue des résumés`,monthlyBudget:`Budget mensuel (USD)`,budgetHelper:"Plafond de dépense `surface=file-summary` par mois calendaire. Les régénérations lancées par l'utilisateur peuvent le dépasser."},f={taglines:{dracula:`L'original — sombre teinté de violet aux accents néon éclatants`,"aurora-light":`Clair premium — indigo inspiré de Linear sur blanc cassé chaleureux`,"obsidian-dark":`Sombre premium — presque noir teinté de bleu aux accents électriques`,matrix:`Terminal phosphore — menthe douce sur fond presque noir verdâtre`,specrails:`Thème de la marque — bleu marine-indigo profond aux accents cyan saturés`},heading:`Apparence`,themeGroupLabel:`Thème`,currentlyActive:`Actuellement actif`,updateFailed:`Échec de la mise à jour du thème`},p={heading:`Compagnon mobile`,description:`Contrôlez Specrails depuis l'application SpecRails Companion sur votre téléphone, 100 % via votre réseau local. Désactivé par défaut.`,accessOn:`Accès mobile activé`,accessOff:`Accès mobile désactivé`,listeningOnPort:`À l'écoute sur le port {{port}}`,notListening:`Pas à l'écoute`,turnOn:`Activer`,turnOff:`Désactiver`,pairWebDevice:`Appairer le compagnon web`,reset:`Réinitialiser`,resetConfirm:`Réinitialiser l'identité mobile ? Tous les appareils appairés seront révoqués et devront s'appairer à nouveau.`,identityReset:`Identité mobile réinitialisée`,enableFailed:`Impossible d'activer l'accès mobile : {{message}}`,disableFailed:`Impossible de désactiver l'accès mobile : {{message}}`,windowsFirewall:`Le Pare-feu Windows demandera d'autoriser le serveur SpecRails à la première activation — choisissez « Autoriser sur les réseaux privés ».`,pairedDevices:`Appareils appairés`,noDevices:`Aucun appareil appairé pour l'instant.`,revokeDevice:`Révoquer {{name}}`},m={title:`Appairer le compagnon web`,description:`Ouvrez specrails.dev/companion-app sur votre téléphone, puis scannez ce code avec.`,startFailed:`Impossible de démarrer l'appairage : {{error}}`,showThenScan:`Une fois que votre téléphone l'a scanné, appuyez sur « Scanner le code du téléphone » et pointez la caméra vers votre téléphone.`,scanAnswer:`Scanner le code du téléphone`,scanning:`Pointez la caméra vers le code sur votre téléphone…`,cameraFailed:`Caméra indisponible : {{message}}`,notAnswer:`Ce QR code n'est pas une réponse d'appairage.`,connecting:`Connexion…`,paired:`✓ Appairé`,pairedToast:`Compagnon web appairé`,answerRejected:`Le bureau a rejeté ce code. Générez-en un nouveau et réessayez.`,copyCode:`Copier le code`,codeCopied:`Code copié`,cancel:`Annuler`},h={heading:`Specrails Core`,installed:`Installé :`,updateAvailable:`Mise à jour disponible : {{version}}`,upToDate:`À jour`,neverChecked:`Non vérifié`,check:`Rechercher des mises à jour`,checking:`Vérification…`,update:`Mettre à jour vers {{version}}`,downloading:`Téléchargement…`,materializing:`Installation…`,affectsAll:`S'applique à tous les projets — aucun redémarrage requis.`,unavailable:`Les mises à jour du core ne sont pas disponibles dans cette version.`,toastDone:`Specrails Core mis à jour vers {{version}}`,toastError:`Échec de la mise à jour du core : {{message}}`,toastUpToDate:`Specrails Core est à jour`,toastCheckFailed:`Échec de la vérification : {{message}}`},g={heading:`Specrails Desktop`,installed:`Installée :`,check:`Rechercher des mises à jour`,checking:`Vérification…`,upToDate:`Vous avez la dernière version`,updateAvailable:`Mise à jour disponible : {{version}}`,autoHint:`Vérification automatique au lancement et toutes les 6 heures.`,unavailable:`Les mises à jour ne sont disponibles que dans l'app de bureau.`,toastUpToDate:`Specrails Desktop est à jour`,toastCheckFailed:`Échec de la recherche de mises à jour : {{message}}`},_={title:`{{name}} — Paramètres`,description:`Configuration du projet : prompts, budget, télémétrie et terminal.`,nav:{general:`Général`,budget:`Budget`,telemetry:`Télémétrie`,terminal:`Terminal`}},v={title:`Branche d'intégration`,description:`La branche depuis laquelle les rails parallèles se ramifient et que ciblent leurs PR en brouillon. Laissez vide pour résoudre automatiquement vers la branche par défaut du dépôt.`,placeholder:`automatique (branche par défaut)`,resolved:`Les rails partent de <mono>{{branch}}</mono>`,save:`Enregistrer la branche`,saved:`Branche d'intégration enregistrée`,saveFailed:`Impossible d'enregistrer la branche d'intégration`},y={language:e,page:t,errors:n,telemetry:r,prePrompt:i,freestylePrePrompt:a,budget:o,desktop:s,notifications:c,webhooks:l,terminal:u,codeSection:d,appearance:f,mobile:p,pairWeb:m,coreUpdate:h,appUpdate:g,projectDialog:_,integrationBranch:v};export{g as appUpdate,f as appearance,o as budget,d as codeSection,h as coreUpdate,y as default,s as desktop,n as errors,a as freestylePrePrompt,v as integrationBranch,e as language,p as mobile,c as notifications,t as page,m as pairWeb,i as prePrompt,_ as projectDialog,r as telemetry,u as terminal,l as webhooks};
@@ -1 +1 @@
1
- var e={title:`言語`,description:`Desktop 全体の UI 言語。即座に適用され、再起動は不要です。`,selectLabel:`インターフェース言語`,updateFailed:`言語設定を保存できませんでした`},t={title:`プロジェクト設定`},n={saveFailed:`保存に失敗しました: {{message}}`},r={title:`パイプラインテレメトリ`,description:`診断エクスポート用にトークン使用量、フェーズ時間、サブエージェントの活動を記録します。デフォルトはオフです。`,toggleLabel:`パイプラインテレメトリを有効化`,toggleDescription:`オンにすると、パイプラインジョブの OTEL データがローカルに記録されます。ジョブカードの <mono>診断をエクスポート</mono> ボタンからダウンロードできます。`,enabled:`パイプラインテレメトリを有効にしました`,disabled:`パイプラインテレメトリを無効にしました`,saveFailed:`テレメトリ設定の保存に失敗しました`},i={title:`レールのプレプロンプト`,description:`implement と batch-implement のレールジョブで、チケットコンテキストの後・実行前に追加されるプロジェクト固有の指示です。`,label:`プレプロンプト`,placeholder:`例: 段階的な変更を優先し、マイグレーションの後方互換性を保ち、レールの変更ごとにテストを追加すること。`,helper:`すべてのレール実装の実行に常に添えたい、安定したプロジェクト指針に使用してください。`,saveButton:`プレプロンプトを保存`,cleared:`プレプロンプトをクリアしました`,saved:`プレプロンプトを保存しました`,saveFailed:`プレプロンプトの保存に失敗しました`},a={title:`Freestyle プレプロンプト`,description:`Freestyle(Claude 専用レール)で Claude に送られる指示です。Freestyle は OpenSpec パイプラインをスキップし、このプレプロンプトとスペックテキストを Claude に渡して自律的に実装させます。空欄の場合は組み込みのデフォルトを使用します。`,label:`Freestyle プレプロンプト`,placeholder:`空欄の場合はデフォルトの Freestyle 指示を使用します。`,helper:`スペックテキストはこのプレプロンプトの後に自動で追加されます。空欄 = デフォルト。`,saveButton:`Freestyle プレプロンプトを保存`,resetToDefault:`Freestyle プレプロンプトをデフォルトにリセットしました`,saved:`Freestyle プレプロンプトを保存しました`,saveFailed:`Freestyle プレプロンプトの保存に失敗しました`},o={title:`予算`,description:`このプロジェクトの1日あたりの支出上限を設定します。上限に達するとキューは自動で一時停止します。`,dailyLabel:`日次予算(USD)`,dailyHelper:`無効にするには空欄のままにします。支出は過去24時間で計算されます。`,dailyPlaceholder:`例: 5.00`,perJobLabel:`ジョブ単位のコストアラート(USD)`,perJobHelper:`このプロジェクトの単一ジョブがこの金額を超えたときにアラートします。`,perJobPlaceholder:`例: 0.50`,invalidNumber:`正の数値を入力するか、無効にするには空欄のままにしてください`,dailyRemoved:`日次予算を削除しました`,dailySet:"日次予算を ${{amount}} に設定しました",perJobAlertDisabled:`ジョブ単位のコストアラートを無効にしました`,alertSet:"${{amount}} を超えるジョブにアラートを設定しました",saveBudgetFailed:`予算の保存に失敗しました`,saveThresholdFailed:`しきい値の保存に失敗しました`},s={nav:{appearance:`外観`,code:`コード`,terminal:`ターミナル`,updates:`更新`,mobile:`モバイル`,mcp:`MCP`,projects:`プロジェクト`,advanced:`詳細`,webhooks:`Webhooks`,about:`概要`},title:`Desktop 設定`,description:`登録済みプロジェクトの管理と Desktop 情報の表示。`,registeredProjects:`登録済みプロジェクト`,noProjects:`登録されたプロジェクトはまだありません`,techUrlDescription:`specrails-tech API のベース URL(デフォルト: http://localhost:3000)`,techUrlSaved:`specrails-tech の URL を保存しました`,techUrlSaveFailed:`URL の保存に失敗しました`,budgetAlertsHeading:`予算とアラート`,dailyBudgetLabel:`Desktop 日次予算(USD)`,dailyBudgetHelper:`全プロジェクト共通のグローバルな日次支出上限。超過するとキューは自動で一時停止します。`,dailyBudgetPlaceholder:`例: 10.00`,perJobHelper:`単一ジョブがこの金額を超えたときにアラートします。無効にするには空欄のままにします。`,costAlertsDisabled:`コストアラートを無効にしました`,dailyBudgetRemoved:`Desktop の日次予算を削除しました`,dailyBudgetSet:"Desktop の日次予算を ${{amount}} に設定しました",dailyBudgetSaveFailed:`Desktop の日次予算の保存に失敗しました`,projectRemoved:`プロジェクトを削除しました`,projectRemoveFailed:`プロジェクトの削除に失敗しました`,onboardingHeading:`オンボーディング`,platformTour:`プラットフォームツアー`,platformTourDescription:`ウェルカムウィザードを再生して主要機能を確認します。`,replayTour:`ツアーを再生`,terminalPanelHeading:`ターミナルパネル`,infoHeading:`Desktop 情報`,infoPort:`ポート`,infoProjects:`プロジェクト`,infoDb:`Desktop DB`},c={heading:`OS 通知`,description:`ジョブの完了・失敗時にネイティブのデスクトップ通知を表示します。通知はタブがフォーカスされていないときのみ表示されます。`,enableLabel:`OS 通知を有効化`,notifyOn:`通知の対象:`,filterAll:`すべて(完了と失敗)`,filterCompleted:`完了のみ`,filterFailed:`失敗のみ`,enabledToast:`OS 通知を有効にしました`,disabledToast:`OS 通知を無効にしました`},l={heading:`アウトバウンド Webhook`,description:`Desktop のイベントを外部ツール(Slack、Zapier、CI/CD)に通知します。シークレットが設定されている場合、リクエストは <code>X-Specrails-Signature</code> で署名されます。`,eventJobCompleted:`ジョブ完了`,eventJobFailed:`ジョブ失敗`,eventDailyBudgetExceeded:`日次予算超過`,statusOn:`オン`,statusOff:`オフ`,disable:`無効化`,enable:`有効化`,sendTestPing:`テスト ping を送信`,addHeading:`Webhook を追加`,secretPlaceholder:`署名シークレット(任意)`,addButton:`Webhook を追加`,urlRequired:`URL は必須です`,selectEvent:`イベントを1つ以上選択してください`,added:`Webhook を追加しました`,addFailed:`Webhook の追加に失敗しました`,updateFailed:`Webhook の更新に失敗しました`,removed:`Webhook を削除しました`,removeFailed:`Webhook の削除に失敗しました`,testPingSent:`テスト ping を送信しました`,testPingFailed:`テスト ping の送信に失敗しました`},u={title:`ターミナルパネル`,desktopDescription:`プロジェクト別のオーバーライドがない限り、すべてのプロジェクトに適用される Desktop 全体のデフォルトです。`,projectDescription:`ターミナルパネルのプロジェクト別オーバーライド。Desktop のデフォルトを継承するには、フィールドを変更しないでください。`,fontFamily:`フォントファミリー`,fontSize:`フォントサイズ({{min}}–{{max}})`,renderMode:`レンダリングモード`,copyOnSelect:`選択時にコピー`,shellIntegration:`シェル統合(OSC 133 マーク)`,notifyLongRunning:`長時間実行コマンドの通知`,longCommandThreshold:`長時間コマンドのしきい値(ms)`,imageRendering:`インライン画像レンダリング(Sixel + iTerm2)`,browserShortcutUrl:`ブラウザショートカット URL`,quickScript:`クイックスクリプト(アクティブなターミナルに貼り付け — Enter は手動)`,reset:`リセット`,unsavedChanges:`未保存の変更`,clearOverride:`オーバーライドをクリア`,clear:`クリア`,inheritingDefault:`Desktop のデフォルトを継承中`,nothingToSave:`保存する変更はありません`,saved:`ターミナル設定を保存しました`},d={heading:`Code セクション`,summaryLanguage:`要約の言語`,monthlyBudget:`月次予算(USD)`,budgetHelper:"暦月ごとの `surface=file-summary` 支出の上限。ユーザーが開始した再生成は上限を超えられます。"},f={taglines:{dracula:`オリジナル — 紫がかったダークにネオンのアクセント`,"aurora-light":`プレミアムライト — Linear風のインディゴと温かみのあるオフホワイト`,"obsidian-dark":`プレミアムダーク — 青みがかった漆黒にエレクトリックなアクセント`,matrix:`蛍光ターミナル — 緑がかった漆黒にソフトミント`,specrails:`ブランドテーマ — 深いネイビーインディゴに鮮やかなシアン`},heading:`外観`,themeGroupLabel:`テーマ`,currentlyActive:`現在アクティブ`,updateFailed:`テーマの更新に失敗しました`},p={heading:`モバイルコンパニオン`,description:`スマートフォンの SpecRails Companion アプリから Specrails を操作します。通信は 100% ローカルネットワーク経由です。デフォルトはオフです。`,accessOn:`モバイルアクセス オン`,accessOff:`モバイルアクセス オフ`,listeningOnPort:`ポート {{port}} で待機中`,notListening:`待機していません`,turnOn:`オンにする`,turnOff:`オフにする`,pairWebDevice:`Web コンパニオンをペアリング`,reset:`リセット`,resetConfirm:`モバイル ID をリセットしますか?ペアリング済みのすべてのデバイスが無効化され、再ペアリングが必要になります。`,identityReset:`モバイル ID をリセットしました`,enableFailed:`モバイルアクセスを有効にできませんでした: {{message}}`,disableFailed:`モバイルアクセスを無効にできませんでした: {{message}}`,windowsFirewall:`初回有効化時に Windows ファイアウォールが SpecRails サーバーの許可を求めます — 「プライベートネットワークで許可」を選択してください。`,pairedDevices:`ペアリング済みデバイス`,noDevices:`ペアリングされたデバイスはまだありません。`,revokeDevice:`{{name}} を無効化`},m={title:`Web コンパニオンをペアリング`,description:`スマートフォンで specrails.dev/companion-app を開き、それでこのコードをスキャンしてください。`,startFailed:`ペアリングを開始できませんでした: {{error}}`,showThenScan:`スマートフォンでこれをスキャンしたら、「スマートフォンのコードをスキャン」をタップし、カメラをスマートフォンに向けてください。`,scanAnswer:`スマートフォンのコードをスキャン`,scanning:`カメラをスマートフォンのコードに向けてください…`,cameraFailed:`カメラを利用できません: {{message}}`,notAnswer:`その QR はペアリング応答ではありません。`,connecting:`接続中…`,paired:`✓ ペアリング済み`,pairedToast:`Web コンパニオンをペアリングしました`,answerRejected:`デスクトップがそのコードを拒否しました。新しいコードを生成して再試行してください。`,copyCode:`コードをコピー`,codeCopied:`コードをコピーしました`,cancel:`キャンセル`},h={heading:`Specrails Core`,installed:`インストール済み:`,updateAvailable:`アップデートあり: {{version}}`,upToDate:`最新です`,neverChecked:`未確認`,check:`アップデートを確認`,checking:`確認中…`,update:`{{version}} に更新`,downloading:`ダウンロード中…`,materializing:`インストール中…`,affectsAll:`すべてのプロジェクトに適用 — 再起動不要。`,unavailable:`このビルドではコアの更新は利用できません。`,toastDone:`Specrails Core を {{version}} に更新しました`,toastError:`コアの更新に失敗しました: {{message}}`,toastUpToDate:`Specrails Core は最新です`,toastCheckFailed:`更新の確認に失敗しました: {{message}}`},g={heading:`Specrails Desktop`,installed:`インストール済み:`,check:`アップデートを確認`,checking:`確認中…`,upToDate:`最新バージョンです`,updateAvailable:`アップデートあり: {{version}}`,autoHint:`起動時と6時間ごとに自動確認します。`,unavailable:`アップデートはデスクトップアプリでのみ利用できます。`,toastUpToDate:`Specrails Desktop は最新です`,toastCheckFailed:`アップデートの確認に失敗しました: {{message}}`},_={title:`{{name}} — 設定`,description:`プロジェクト設定:プロンプト、予算、テレメトリ、ターミナル。`,nav:{general:`一般`,budget:`予算`,telemetry:`テレメトリ`,terminal:`ターミナル`}},v={title:`統合ブランチ`,description:`並列レールが分岐し、ドラフト PR の対象となるブランチです。空欄にするとリポジトリのデフォルトブランチに自動解決されます。`,placeholder:`自動(リポジトリのデフォルト)`,resolved:`レールは <mono>{{branch}}</mono> から分岐します`,save:`ブランチを保存`,saved:`統合ブランチを保存しました`,saveFailed:`統合ブランチを保存できませんでした`},y={language:e,page:t,errors:n,telemetry:r,prePrompt:i,ultraPrePrompt:a,budget:o,desktop:s,notifications:c,webhooks:l,terminal:u,codeSection:d,appearance:f,mobile:p,pairWeb:m,coreUpdate:h,appUpdate:g,projectDialog:_,integrationBranch:v};export{g as appUpdate,f as appearance,o as budget,d as codeSection,h as coreUpdate,y as default,s as desktop,n as errors,v as integrationBranch,e as language,p as mobile,c as notifications,t as page,m as pairWeb,i as prePrompt,_ as projectDialog,r as telemetry,u as terminal,a as ultraPrePrompt,l as webhooks};
1
+ var e={title:`言語`,description:`Desktop 全体の UI 言語。即座に適用され、再起動は不要です。`,selectLabel:`インターフェース言語`,updateFailed:`言語設定を保存できませんでした`},t={title:`プロジェクト設定`},n={saveFailed:`保存に失敗しました: {{message}}`},r={title:`パイプラインテレメトリ`,description:`診断エクスポート用にトークン使用量、フェーズ時間、サブエージェントの活動を記録します。デフォルトはオフです。`,toggleLabel:`パイプラインテレメトリを有効化`,toggleDescription:`オンにすると、パイプラインジョブの OTEL データがローカルに記録されます。ジョブカードの <mono>診断をエクスポート</mono> ボタンからダウンロードできます。`,enabled:`パイプラインテレメトリを有効にしました`,disabled:`パイプラインテレメトリを無効にしました`,saveFailed:`テレメトリ設定の保存に失敗しました`},i={title:`レールのプレプロンプト`,description:`implement と batch-implement のレールジョブで、チケットコンテキストの後・実行前に追加されるプロジェクト固有の指示です。`,label:`プレプロンプト`,placeholder:`例: 段階的な変更を優先し、マイグレーションの後方互換性を保ち、レールの変更ごとにテストを追加すること。`,helper:`すべてのレール実装の実行に常に添えたい、安定したプロジェクト指針に使用してください。`,saveButton:`プレプロンプトを保存`,cleared:`プレプロンプトをクリアしました`,saved:`プレプロンプトを保存しました`,saveFailed:`プレプロンプトの保存に失敗しました`},a={title:`Freestyle プレプロンプト`,description:`Freestyle(Claude 専用レール)で Claude に送られる指示です。Freestyle は OpenSpec パイプラインをスキップし、このプレプロンプトとスペックテキストを Claude に渡して自律的に実装させます。空欄の場合は組み込みのデフォルトを使用します。`,label:`Freestyle プレプロンプト`,placeholder:`空欄の場合はデフォルトの Freestyle 指示を使用します。`,helper:`スペックテキストはこのプレプロンプトの後に自動で追加されます。空欄 = デフォルト。`,saveButton:`Freestyle プレプロンプトを保存`,resetToDefault:`Freestyle プレプロンプトをデフォルトにリセットしました`,saved:`Freestyle プレプロンプトを保存しました`,saveFailed:`Freestyle プレプロンプトの保存に失敗しました`},o={title:`予算`,description:`このプロジェクトの1日あたりの支出上限を設定します。上限に達するとキューは自動で一時停止します。`,dailyLabel:`日次予算(USD)`,dailyHelper:`無効にするには空欄のままにします。支出は過去24時間で計算されます。`,dailyPlaceholder:`例: 5.00`,perJobLabel:`ジョブ単位のコストアラート(USD)`,perJobHelper:`このプロジェクトの単一ジョブがこの金額を超えたときにアラートします。`,perJobPlaceholder:`例: 0.50`,invalidNumber:`正の数値を入力するか、無効にするには空欄のままにしてください`,dailyRemoved:`日次予算を削除しました`,dailySet:"日次予算を ${{amount}} に設定しました",perJobAlertDisabled:`ジョブ単位のコストアラートを無効にしました`,alertSet:"${{amount}} を超えるジョブにアラートを設定しました",saveBudgetFailed:`予算の保存に失敗しました`,saveThresholdFailed:`しきい値の保存に失敗しました`},s={nav:{appearance:`外観`,code:`コード`,terminal:`ターミナル`,updates:`更新`,mobile:`モバイル`,mcp:`MCP`,projects:`プロジェクト`,advanced:`詳細`,webhooks:`Webhooks`,about:`概要`},title:`Desktop 設定`,description:`登録済みプロジェクトの管理と Desktop 情報の表示。`,registeredProjects:`登録済みプロジェクト`,noProjects:`登録されたプロジェクトはまだありません`,techUrlDescription:`specrails-tech API のベース URL(デフォルト: http://localhost:3000)`,techUrlSaved:`specrails-tech の URL を保存しました`,techUrlSaveFailed:`URL の保存に失敗しました`,budgetAlertsHeading:`予算とアラート`,dailyBudgetLabel:`Desktop 日次予算(USD)`,dailyBudgetHelper:`全プロジェクト共通のグローバルな日次支出上限。超過するとキューは自動で一時停止します。`,dailyBudgetPlaceholder:`例: 10.00`,perJobHelper:`単一ジョブがこの金額を超えたときにアラートします。無効にするには空欄のままにします。`,costAlertsDisabled:`コストアラートを無効にしました`,dailyBudgetRemoved:`Desktop の日次予算を削除しました`,dailyBudgetSet:"Desktop の日次予算を ${{amount}} に設定しました",dailyBudgetSaveFailed:`Desktop の日次予算の保存に失敗しました`,projectRemoved:`プロジェクトを削除しました`,projectRemoveFailed:`プロジェクトの削除に失敗しました`,onboardingHeading:`オンボーディング`,platformTour:`プラットフォームツアー`,platformTourDescription:`ウェルカムウィザードを再生して主要機能を確認します。`,replayTour:`ツアーを再生`,terminalPanelHeading:`ターミナルパネル`,infoHeading:`Desktop 情報`,infoPort:`ポート`,infoProjects:`プロジェクト`,infoDb:`Desktop DB`},c={heading:`OS 通知`,description:`ジョブの完了・失敗時にネイティブのデスクトップ通知を表示します。通知はタブがフォーカスされていないときのみ表示されます。`,enableLabel:`OS 通知を有効化`,notifyOn:`通知の対象:`,filterAll:`すべて(完了と失敗)`,filterCompleted:`完了のみ`,filterFailed:`失敗のみ`,enabledToast:`OS 通知を有効にしました`,disabledToast:`OS 通知を無効にしました`},l={heading:`アウトバウンド Webhook`,description:`Desktop のイベントを外部ツール(Slack、Zapier、CI/CD)に通知します。シークレットが設定されている場合、リクエストは <code>X-Specrails-Signature</code> で署名されます。`,eventJobCompleted:`ジョブ完了`,eventJobFailed:`ジョブ失敗`,eventDailyBudgetExceeded:`日次予算超過`,statusOn:`オン`,statusOff:`オフ`,disable:`無効化`,enable:`有効化`,sendTestPing:`テスト ping を送信`,addHeading:`Webhook を追加`,secretPlaceholder:`署名シークレット(任意)`,addButton:`Webhook を追加`,urlRequired:`URL は必須です`,selectEvent:`イベントを1つ以上選択してください`,added:`Webhook を追加しました`,addFailed:`Webhook の追加に失敗しました`,updateFailed:`Webhook の更新に失敗しました`,removed:`Webhook を削除しました`,removeFailed:`Webhook の削除に失敗しました`,testPingSent:`テスト ping を送信しました`,testPingFailed:`テスト ping の送信に失敗しました`},u={title:`ターミナルパネル`,desktopDescription:`プロジェクト別のオーバーライドがない限り、すべてのプロジェクトに適用される Desktop 全体のデフォルトです。`,projectDescription:`ターミナルパネルのプロジェクト別オーバーライド。Desktop のデフォルトを継承するには、フィールドを変更しないでください。`,fontFamily:`フォントファミリー`,fontSize:`フォントサイズ({{min}}–{{max}})`,renderMode:`レンダリングモード`,copyOnSelect:`選択時にコピー`,shellIntegration:`シェル統合(OSC 133 マーク)`,notifyLongRunning:`長時間実行コマンドの通知`,longCommandThreshold:`長時間コマンドのしきい値(ms)`,imageRendering:`インライン画像レンダリング(Sixel + iTerm2)`,browserShortcutUrl:`ブラウザショートカット URL`,quickScript:`クイックスクリプト(アクティブなターミナルに貼り付け — Enter は手動)`,reset:`リセット`,unsavedChanges:`未保存の変更`,clearOverride:`オーバーライドをクリア`,clear:`クリア`,inheritingDefault:`Desktop のデフォルトを継承中`,nothingToSave:`保存する変更はありません`,saved:`ターミナル設定を保存しました`},d={heading:`Code セクション`,summaryLanguage:`要約の言語`,monthlyBudget:`月次予算(USD)`,budgetHelper:"暦月ごとの `surface=file-summary` 支出の上限。ユーザーが開始した再生成は上限を超えられます。"},f={taglines:{dracula:`オリジナル — 紫がかったダークにネオンのアクセント`,"aurora-light":`プレミアムライト — Linear風のインディゴと温かみのあるオフホワイト`,"obsidian-dark":`プレミアムダーク — 青みがかった漆黒にエレクトリックなアクセント`,matrix:`蛍光ターミナル — 緑がかった漆黒にソフトミント`,specrails:`ブランドテーマ — 深いネイビーインディゴに鮮やかなシアン`},heading:`外観`,themeGroupLabel:`テーマ`,currentlyActive:`現在アクティブ`,updateFailed:`テーマの更新に失敗しました`},p={heading:`モバイルコンパニオン`,description:`スマートフォンの SpecRails Companion アプリから Specrails を操作します。通信は 100% ローカルネットワーク経由です。デフォルトはオフです。`,accessOn:`モバイルアクセス オン`,accessOff:`モバイルアクセス オフ`,listeningOnPort:`ポート {{port}} で待機中`,notListening:`待機していません`,turnOn:`オンにする`,turnOff:`オフにする`,pairWebDevice:`Web コンパニオンをペアリング`,reset:`リセット`,resetConfirm:`モバイル ID をリセットしますか?ペアリング済みのすべてのデバイスが無効化され、再ペアリングが必要になります。`,identityReset:`モバイル ID をリセットしました`,enableFailed:`モバイルアクセスを有効にできませんでした: {{message}}`,disableFailed:`モバイルアクセスを無効にできませんでした: {{message}}`,windowsFirewall:`初回有効化時に Windows ファイアウォールが SpecRails サーバーの許可を求めます — 「プライベートネットワークで許可」を選択してください。`,pairedDevices:`ペアリング済みデバイス`,noDevices:`ペアリングされたデバイスはまだありません。`,revokeDevice:`{{name}} を無効化`},m={title:`Web コンパニオンをペアリング`,description:`スマートフォンで specrails.dev/companion-app を開き、それでこのコードをスキャンしてください。`,startFailed:`ペアリングを開始できませんでした: {{error}}`,showThenScan:`スマートフォンでこれをスキャンしたら、「スマートフォンのコードをスキャン」をタップし、カメラをスマートフォンに向けてください。`,scanAnswer:`スマートフォンのコードをスキャン`,scanning:`カメラをスマートフォンのコードに向けてください…`,cameraFailed:`カメラを利用できません: {{message}}`,notAnswer:`その QR はペアリング応答ではありません。`,connecting:`接続中…`,paired:`✓ ペアリング済み`,pairedToast:`Web コンパニオンをペアリングしました`,answerRejected:`デスクトップがそのコードを拒否しました。新しいコードを生成して再試行してください。`,copyCode:`コードをコピー`,codeCopied:`コードをコピーしました`,cancel:`キャンセル`},h={heading:`Specrails Core`,installed:`インストール済み:`,updateAvailable:`アップデートあり: {{version}}`,upToDate:`最新です`,neverChecked:`未確認`,check:`アップデートを確認`,checking:`確認中…`,update:`{{version}} に更新`,downloading:`ダウンロード中…`,materializing:`インストール中…`,affectsAll:`すべてのプロジェクトに適用 — 再起動不要。`,unavailable:`このビルドではコアの更新は利用できません。`,toastDone:`Specrails Core を {{version}} に更新しました`,toastError:`コアの更新に失敗しました: {{message}}`,toastUpToDate:`Specrails Core は最新です`,toastCheckFailed:`更新の確認に失敗しました: {{message}}`},g={heading:`Specrails Desktop`,installed:`インストール済み:`,check:`アップデートを確認`,checking:`確認中…`,upToDate:`最新バージョンです`,updateAvailable:`アップデートあり: {{version}}`,autoHint:`起動時と6時間ごとに自動確認します。`,unavailable:`アップデートはデスクトップアプリでのみ利用できます。`,toastUpToDate:`Specrails Desktop は最新です`,toastCheckFailed:`アップデートの確認に失敗しました: {{message}}`},_={title:`{{name}} — 設定`,description:`プロジェクト設定:プロンプト、予算、テレメトリ、ターミナル。`,nav:{general:`一般`,budget:`予算`,telemetry:`テレメトリ`,terminal:`ターミナル`}},v={title:`統合ブランチ`,description:`並列レールが分岐し、ドラフト PR の対象となるブランチです。空欄にするとリポジトリのデフォルトブランチに自動解決されます。`,placeholder:`自動(リポジトリのデフォルト)`,resolved:`レールは <mono>{{branch}}</mono> から分岐します`,save:`ブランチを保存`,saved:`統合ブランチを保存しました`,saveFailed:`統合ブランチを保存できませんでした`},y={language:e,page:t,errors:n,telemetry:r,prePrompt:i,freestylePrePrompt:a,budget:o,desktop:s,notifications:c,webhooks:l,terminal:u,codeSection:d,appearance:f,mobile:p,pairWeb:m,coreUpdate:h,appUpdate:g,projectDialog:_,integrationBranch:v};export{g as appUpdate,f as appearance,o as budget,d as codeSection,h as coreUpdate,y as default,s as desktop,n as errors,a as freestylePrePrompt,v as integrationBranch,e as language,p as mobile,c as notifications,t as page,m as pairWeb,i as prePrompt,_ as projectDialog,r as telemetry,u as terminal,l as webhooks};
@@ -1 +1 @@
1
- var e={title:`Sprache`,description:`Desktop-weite UI-Sprache. Wird sofort angewendet – kein Neustart nötig.`,selectLabel:`Oberflächensprache`,updateFailed:`Spracheinstellung konnte nicht gespeichert werden`},t={title:`Projekteinstellungen`},n={saveFailed:`Speichern fehlgeschlagen: {{message}}`},r={title:`Pipeline-Telemetrie`,description:`Erfasst Token-Verbrauch, Phasendauern und Subagent-Aktivität für den Diagnose-Export. Standardmäßig aus.`,toggleLabel:`Pipeline-Telemetrie aktivieren`,toggleDescription:`Wenn aktiviert, werden OTEL-Daten aus Pipeline-Jobs lokal erfasst. Verwenden Sie zum Herunterladen die Schaltfläche <mono>Diagnose exportieren</mono> auf einer beliebigen Job-Karte.`,enabled:`Pipeline-Telemetrie aktiviert`,disabled:`Pipeline-Telemetrie deaktiviert`,saveFailed:`Telemetrie-Einstellung konnte nicht gespeichert werden`},i={title:`Rail-Pre-Prompt`,description:`Zusätzliche projektspezifische Anweisungen, die an implement- und batch-implement-Rail-Jobs angehängt werden – nach dem Ticket-Kontext und vor der Ausführung.`,label:`Pre-Prompt`,placeholder:`Beispiel: Bevorzuge inkrementelle Änderungen, halte Migrationen abwärtskompatibel und füge Tests für jede Rail-Änderung hinzu.`,helper:`Für stabile Projektleitlinien, die jeden Rail-Implementierungslauf begleiten sollen.`,saveButton:`Pre-Prompt speichern`,cleared:`Pre-Prompt gelöscht`,saved:`Pre-Prompt gespeichert`,saveFailed:`Pre-Prompt konnte nicht gespeichert werden`},a={title:`Freestyle-Pre-Prompt`,description:`Anweisung, die in Freestyle an Claude gesendet wird (nur Claude-Rails). Freestyle überspringt die OpenSpec-Pipeline – Claude erhält diesen Pre-Prompt plus den Spec-Text und implementiert autonom. Leer lassen, um den eingebauten Standard zu verwenden.`,label:`Freestyle-Pre-Prompt`,placeholder:`Leer lassen, um die Standard-Freestyle-Anweisung zu verwenden.`,helper:`Der Spec-Text wird automatisch nach diesem Pre-Prompt angehängt. Leer = Standard.`,saveButton:`Freestyle-Pre-Prompt speichern`,resetToDefault:`Freestyle-Pre-Prompt auf Standard zurückgesetzt`,saved:`Freestyle-Pre-Prompt gespeichert`,saveFailed:`Freestyle-Pre-Prompt konnte nicht gespeichert werden`},o={title:`Budget`,description:`Tagesausgabenlimit für dieses Projekt festlegen. Die Queue pausiert automatisch, wenn das Limit erreicht ist.`,dailyLabel:`Tagesbudget (USD)`,dailyHelper:`Leer lassen zum Deaktivieren. Ausgaben werden über die letzten 24 Stunden berechnet.`,dailyPlaceholder:`z. B. 5.00`,perJobLabel:`Kostenalarm pro Job (USD)`,perJobHelper:`Alarm, wenn ein einzelner Job in diesem Projekt diesen Betrag überschreitet.`,perJobPlaceholder:`z. B. 0.50`,invalidNumber:`Positive Zahl eingeben oder leer lassen zum Deaktivieren`,dailyRemoved:`Tagesbudget entfernt`,dailySet:"Tagesbudget auf ${{amount}} gesetzt",perJobAlertDisabled:`Kostenalarm pro Job deaktiviert`,alertSet:"Alarm für Jobs über ${{amount}} gesetzt",saveBudgetFailed:`Budget konnte nicht gespeichert werden`,saveThresholdFailed:`Schwellenwert konnte nicht gespeichert werden`},s={nav:{appearance:`Darstellung`,code:`Code`,terminal:`Terminal`,updates:`Updates`,mobile:`Mobil`,mcp:`MCP`,projects:`Projekte`,advanced:`Erweitert`,webhooks:`Webhooks`,about:`Info`},title:`Desktop-Einstellungen`,description:`Registrierte Projekte verwalten und Desktop-Informationen einsehen.`,registeredProjects:`Registrierte Projekte`,noProjects:`Noch keine Projekte registriert`,techUrlDescription:`Basis-URL für die specrails-tech-API (Standard: http://localhost:3000)`,techUrlSaved:`specrails-tech-URL gespeichert`,techUrlSaveFailed:`URL konnte nicht gespeichert werden`,budgetAlertsHeading:`Budget & Alarme`,dailyBudgetLabel:`Desktop-Tagesbudget (USD)`,dailyBudgetHelper:`Globales Tagesausgabenlimit über alle Projekte. Queues pausieren automatisch bei Überschreitung.`,dailyBudgetPlaceholder:`z. B. 10.00`,perJobHelper:`Alarm, wenn ein einzelner Job diesen Betrag überschreitet. Leer lassen zum Deaktivieren.`,costAlertsDisabled:`Kostenalarme deaktiviert`,dailyBudgetRemoved:`Desktop-Tagesbudget entfernt`,dailyBudgetSet:"Desktop-Tagesbudget auf ${{amount}} gesetzt",dailyBudgetSaveFailed:`Desktop-Tagesbudget konnte nicht gespeichert werden`,projectRemoved:`Projekt entfernt`,projectRemoveFailed:`Projekt konnte nicht entfernt werden`,onboardingHeading:`Onboarding`,platformTour:`Plattform-Tour`,platformTourDescription:`Den Willkommensassistenten erneut abspielen, um die wichtigsten Funktionen zu sehen.`,replayTour:`Tour erneut abspielen`,terminalPanelHeading:`Terminal-Panel`,infoHeading:`Desktop-Informationen`,infoPort:`Port`,infoProjects:`Projekte`,infoDb:`Desktop-DB`},c={heading:`OS-Benachrichtigungen`,description:`Native Desktop-Benachrichtigungen anzeigen, wenn Jobs abgeschlossen werden oder fehlschlagen. Benachrichtigungen erscheinen nur, wenn der Tab nicht fokussiert ist.`,enableLabel:`OS-Benachrichtigungen aktivieren`,notifyOn:`Benachrichtigen bei:`,filterAll:`Alle (abgeschlossen & fehlgeschlagen)`,filterCompleted:`Nur abgeschlossen`,filterFailed:`Nur fehlgeschlagen`,enabledToast:`OS-Benachrichtigungen aktiviert`,disabledToast:`OS-Benachrichtigungen deaktiviert`},l={heading:`Ausgehende Webhooks`,description:`Externe Tools (Slack, Zapier, CI/CD) bei Desktop-Ereignissen benachrichtigen. Anfragen werden über <code>X-Specrails-Signature</code> signiert, wenn ein Secret gesetzt ist.`,eventJobCompleted:`Job abgeschlossen`,eventJobFailed:`Job fehlgeschlagen`,eventDailyBudgetExceeded:`Tagesbudget überschritten`,statusOn:`an`,statusOff:`aus`,disable:`Deaktivieren`,enable:`Aktivieren`,sendTestPing:`Test-Ping senden`,addHeading:`Webhook hinzufügen`,secretPlaceholder:`Signatur-Secret (optional)`,addButton:`Webhook hinzufügen`,urlRequired:`URL ist erforderlich`,selectEvent:`Mindestens ein Ereignis auswählen`,added:`Webhook hinzugefügt`,addFailed:`Webhook konnte nicht hinzugefügt werden`,updateFailed:`Webhook konnte nicht aktualisiert werden`,removed:`Webhook entfernt`,removeFailed:`Webhook konnte nicht entfernt werden`,testPingSent:`Test-Ping gesendet`,testPingFailed:`Test-Ping konnte nicht gesendet werden`},u={title:`Terminal-Panel`,desktopDescription:`Desktop-weite Standardwerte für alle Projekte, sofern kein projektspezifischer Override gesetzt ist.`,projectDescription:`Projektspezifische Overrides für das Terminal-Panel. Lassen Sie ein Feld unverändert, um den Desktop-Standard zu erben.`,fontFamily:`Schriftfamilie`,fontSize:`Schriftgröße ({{min}}–{{max}})`,renderMode:`Render-Modus`,copyOnSelect:`Beim Auswählen kopieren`,shellIntegration:`Shell-Integration (OSC-133-Marken)`,notifyLongRunning:`Bei lang laufenden Befehlen benachrichtigen`,longCommandThreshold:`Schwellenwert für lange Befehle (ms)`,imageRendering:`Inline-Bilddarstellung (Sixel + iTerm2)`,browserShortcutUrl:`Browser-Shortcut-URL`,quickScript:`Quick-Skript (wird ins aktive Terminal eingefügt – Enter manuell drücken)`,reset:`Zurücksetzen`,unsavedChanges:`Ungespeicherte Änderungen`,clearOverride:`Override entfernen`,clear:`Entfernen`,inheritingDefault:`Erbt Desktop-Standard`,nothingToSave:`Nichts zu speichern`,saved:`Terminal-Einstellungen gespeichert`},d={heading:`Code-Bereich`,summaryLanguage:`Sprache der Zusammenfassungen`,monthlyBudget:`Monatsbudget (USD)`,budgetHelper:"Obergrenze für `surface=file-summary`-Ausgaben pro Kalendermonat. Von Nutzern angestoßene Neugenerierungen können sie überschreiten."},f={taglines:{dracula:`Das Original — dunkel mit Violettstich und lebhaften Neon-Akzenten`,"aurora-light":`Premium hell — Linear-inspiriertes Indigo auf warmem Cremeweiß`,"obsidian-dark":`Premium dunkel — fast schwarz mit Blaustich und elektrischen Akzenten`,matrix:`Phosphor-Terminal — sanftes Mint auf grünlichem Fast-Schwarz`,specrails:`Marken-Theme — tiefes Marine-Indigo mit satten Cyan-Akzenten`},heading:`Erscheinungsbild`,themeGroupLabel:`Theme`,currentlyActive:`Derzeit aktiv`,updateFailed:`Theme konnte nicht aktualisiert werden`},p={heading:`Mobile Companion`,description:`Steuern Sie Specrails über die SpecRails Companion-App auf Ihrem Smartphone – zu 100 % über Ihr lokales Netzwerk. Standardmäßig aus.`,accessOn:`Mobilzugriff an`,accessOff:`Mobilzugriff aus`,listeningOnPort:`Lauscht auf Port {{port}}`,notListening:`Lauscht nicht`,turnOn:`Einschalten`,turnOff:`Ausschalten`,pairWebDevice:`Web-Companion koppeln`,reset:`Zurücksetzen`,resetConfirm:`Mobile Identität zurücksetzen? Alle gekoppelten Geräte werden widerrufen und müssen neu gekoppelt werden.`,identityReset:`Mobile Identität zurückgesetzt`,enableFailed:`Mobilzugriff konnte nicht aktiviert werden: {{message}}`,disableFailed:`Mobilzugriff konnte nicht deaktiviert werden: {{message}}`,windowsFirewall:`Die Windows-Firewall fragt beim ersten Aktivieren, ob der SpecRails-Server zugelassen werden soll – wählen Sie „In privaten Netzwerken zulassen“.`,pairedDevices:`Gekoppelte Geräte`,noDevices:`Noch keine Geräte gekoppelt.`,revokeDevice:`{{name}} widerrufen`},m={title:`Web-Companion koppeln`,description:`Öffnen Sie specrails.dev/companion-app auf Ihrem Smartphone und scannen Sie damit diesen Code.`,startFailed:`Koppeln konnte nicht gestartet werden: {{error}}`,showThenScan:`Nachdem Ihr Smartphone dies gescannt hat, tippen Sie auf „Code des Smartphones scannen“ und richten Sie die Kamera auf Ihr Smartphone.`,scanAnswer:`Code des Smartphones scannen`,scanning:`Richten Sie die Kamera auf den Code auf Ihrem Smartphone…`,cameraFailed:`Kamera nicht verfügbar: {{message}}`,notAnswer:`Dieser QR-Code ist keine Kopplungsantwort.`,connecting:`Verbinden…`,paired:`✓ Gekoppelt`,pairedToast:`Web-Companion gekoppelt`,answerRejected:`Der Desktop hat diesen Code abgelehnt. Erzeugen Sie einen neuen und versuchen Sie es erneut.`,copyCode:`Code kopieren`,codeCopied:`Code kopiert`,cancel:`Abbrechen`},h={heading:`Specrails Core`,installed:`Installiert:`,updateAvailable:`Update verfügbar: {{version}}`,upToDate:`Aktuell`,neverChecked:`Nicht geprüft`,check:`Nach Updates suchen`,checking:`Wird geprüft…`,update:`Auf {{version}} aktualisieren`,downloading:`Wird heruntergeladen…`,materializing:`Wird installiert…`,affectsAll:`Gilt für alle Projekte — kein Neustart nötig.`,unavailable:`Core-Updates sind in diesem Build nicht verfügbar.`,toastDone:`Specrails Core auf {{version}} aktualisiert`,toastError:`Core-Update fehlgeschlagen: {{message}}`,toastUpToDate:`Specrails Core ist aktuell`,toastCheckFailed:`Update-Prüfung fehlgeschlagen: {{message}}`},g={heading:`Specrails Desktop`,installed:`Installiert:`,check:`Nach Updates suchen`,checking:`Wird geprüft…`,upToDate:`Du hast die neueste Version`,updateAvailable:`Update verfügbar: {{version}}`,autoHint:`Wird beim Start und alle 6 Stunden automatisch geprüft.`,unavailable:`App-Updates sind nur in der Desktop-App verfügbar.`,toastUpToDate:`Specrails Desktop ist aktuell`,toastCheckFailed:`Update-Prüfung fehlgeschlagen: {{message}}`},_={title:`{{name}} — Einstellungen`,description:`Projektkonfiguration: Prompts, Budget, Telemetrie und Terminal.`,nav:{general:`Allgemein`,budget:`Budget`,telemetry:`Telemetrie`,terminal:`Terminal`}},v={title:`Integrationszweig`,description:`Der Branch, von dem parallele Rails abzweigen und auf den ihre Entwurfs-PRs zielen. Leer lassen, um automatisch den Standard-Branch des Repositorys zu verwenden.`,placeholder:`automatisch (Standard-Branch)`,resolved:`Rails zweigen von <mono>{{branch}}</mono> ab`,save:`Branch speichern`,saved:`Integrationszweig gespeichert`,saveFailed:`Integrationszweig konnte nicht gespeichert werden`},y={language:e,page:t,errors:n,telemetry:r,prePrompt:i,ultraPrePrompt:a,budget:o,desktop:s,notifications:c,webhooks:l,terminal:u,codeSection:d,appearance:f,mobile:p,pairWeb:m,coreUpdate:h,appUpdate:g,projectDialog:_,integrationBranch:v};export{g as appUpdate,f as appearance,o as budget,d as codeSection,h as coreUpdate,y as default,s as desktop,n as errors,v as integrationBranch,e as language,p as mobile,c as notifications,t as page,m as pairWeb,i as prePrompt,_ as projectDialog,r as telemetry,u as terminal,a as ultraPrePrompt,l as webhooks};
1
+ var e={title:`Sprache`,description:`Desktop-weite UI-Sprache. Wird sofort angewendet – kein Neustart nötig.`,selectLabel:`Oberflächensprache`,updateFailed:`Spracheinstellung konnte nicht gespeichert werden`},t={title:`Projekteinstellungen`},n={saveFailed:`Speichern fehlgeschlagen: {{message}}`},r={title:`Pipeline-Telemetrie`,description:`Erfasst Token-Verbrauch, Phasendauern und Subagent-Aktivität für den Diagnose-Export. Standardmäßig aus.`,toggleLabel:`Pipeline-Telemetrie aktivieren`,toggleDescription:`Wenn aktiviert, werden OTEL-Daten aus Pipeline-Jobs lokal erfasst. Verwenden Sie zum Herunterladen die Schaltfläche <mono>Diagnose exportieren</mono> auf einer beliebigen Job-Karte.`,enabled:`Pipeline-Telemetrie aktiviert`,disabled:`Pipeline-Telemetrie deaktiviert`,saveFailed:`Telemetrie-Einstellung konnte nicht gespeichert werden`},i={title:`Rail-Pre-Prompt`,description:`Zusätzliche projektspezifische Anweisungen, die an implement- und batch-implement-Rail-Jobs angehängt werden – nach dem Ticket-Kontext und vor der Ausführung.`,label:`Pre-Prompt`,placeholder:`Beispiel: Bevorzuge inkrementelle Änderungen, halte Migrationen abwärtskompatibel und füge Tests für jede Rail-Änderung hinzu.`,helper:`Für stabile Projektleitlinien, die jeden Rail-Implementierungslauf begleiten sollen.`,saveButton:`Pre-Prompt speichern`,cleared:`Pre-Prompt gelöscht`,saved:`Pre-Prompt gespeichert`,saveFailed:`Pre-Prompt konnte nicht gespeichert werden`},a={title:`Freestyle-Pre-Prompt`,description:`Anweisung, die in Freestyle an Claude gesendet wird (nur Claude-Rails). Freestyle überspringt die OpenSpec-Pipeline – Claude erhält diesen Pre-Prompt plus den Spec-Text und implementiert autonom. Leer lassen, um den eingebauten Standard zu verwenden.`,label:`Freestyle-Pre-Prompt`,placeholder:`Leer lassen, um die Standard-Freestyle-Anweisung zu verwenden.`,helper:`Der Spec-Text wird automatisch nach diesem Pre-Prompt angehängt. Leer = Standard.`,saveButton:`Freestyle-Pre-Prompt speichern`,resetToDefault:`Freestyle-Pre-Prompt auf Standard zurückgesetzt`,saved:`Freestyle-Pre-Prompt gespeichert`,saveFailed:`Freestyle-Pre-Prompt konnte nicht gespeichert werden`},o={title:`Budget`,description:`Tagesausgabenlimit für dieses Projekt festlegen. Die Queue pausiert automatisch, wenn das Limit erreicht ist.`,dailyLabel:`Tagesbudget (USD)`,dailyHelper:`Leer lassen zum Deaktivieren. Ausgaben werden über die letzten 24 Stunden berechnet.`,dailyPlaceholder:`z. B. 5.00`,perJobLabel:`Kostenalarm pro Job (USD)`,perJobHelper:`Alarm, wenn ein einzelner Job in diesem Projekt diesen Betrag überschreitet.`,perJobPlaceholder:`z. B. 0.50`,invalidNumber:`Positive Zahl eingeben oder leer lassen zum Deaktivieren`,dailyRemoved:`Tagesbudget entfernt`,dailySet:"Tagesbudget auf ${{amount}} gesetzt",perJobAlertDisabled:`Kostenalarm pro Job deaktiviert`,alertSet:"Alarm für Jobs über ${{amount}} gesetzt",saveBudgetFailed:`Budget konnte nicht gespeichert werden`,saveThresholdFailed:`Schwellenwert konnte nicht gespeichert werden`},s={nav:{appearance:`Darstellung`,code:`Code`,terminal:`Terminal`,updates:`Updates`,mobile:`Mobil`,mcp:`MCP`,projects:`Projekte`,advanced:`Erweitert`,webhooks:`Webhooks`,about:`Info`},title:`Desktop-Einstellungen`,description:`Registrierte Projekte verwalten und Desktop-Informationen einsehen.`,registeredProjects:`Registrierte Projekte`,noProjects:`Noch keine Projekte registriert`,techUrlDescription:`Basis-URL für die specrails-tech-API (Standard: http://localhost:3000)`,techUrlSaved:`specrails-tech-URL gespeichert`,techUrlSaveFailed:`URL konnte nicht gespeichert werden`,budgetAlertsHeading:`Budget & Alarme`,dailyBudgetLabel:`Desktop-Tagesbudget (USD)`,dailyBudgetHelper:`Globales Tagesausgabenlimit über alle Projekte. Queues pausieren automatisch bei Überschreitung.`,dailyBudgetPlaceholder:`z. B. 10.00`,perJobHelper:`Alarm, wenn ein einzelner Job diesen Betrag überschreitet. Leer lassen zum Deaktivieren.`,costAlertsDisabled:`Kostenalarme deaktiviert`,dailyBudgetRemoved:`Desktop-Tagesbudget entfernt`,dailyBudgetSet:"Desktop-Tagesbudget auf ${{amount}} gesetzt",dailyBudgetSaveFailed:`Desktop-Tagesbudget konnte nicht gespeichert werden`,projectRemoved:`Projekt entfernt`,projectRemoveFailed:`Projekt konnte nicht entfernt werden`,onboardingHeading:`Onboarding`,platformTour:`Plattform-Tour`,platformTourDescription:`Den Willkommensassistenten erneut abspielen, um die wichtigsten Funktionen zu sehen.`,replayTour:`Tour erneut abspielen`,terminalPanelHeading:`Terminal-Panel`,infoHeading:`Desktop-Informationen`,infoPort:`Port`,infoProjects:`Projekte`,infoDb:`Desktop-DB`},c={heading:`OS-Benachrichtigungen`,description:`Native Desktop-Benachrichtigungen anzeigen, wenn Jobs abgeschlossen werden oder fehlschlagen. Benachrichtigungen erscheinen nur, wenn der Tab nicht fokussiert ist.`,enableLabel:`OS-Benachrichtigungen aktivieren`,notifyOn:`Benachrichtigen bei:`,filterAll:`Alle (abgeschlossen & fehlgeschlagen)`,filterCompleted:`Nur abgeschlossen`,filterFailed:`Nur fehlgeschlagen`,enabledToast:`OS-Benachrichtigungen aktiviert`,disabledToast:`OS-Benachrichtigungen deaktiviert`},l={heading:`Ausgehende Webhooks`,description:`Externe Tools (Slack, Zapier, CI/CD) bei Desktop-Ereignissen benachrichtigen. Anfragen werden über <code>X-Specrails-Signature</code> signiert, wenn ein Secret gesetzt ist.`,eventJobCompleted:`Job abgeschlossen`,eventJobFailed:`Job fehlgeschlagen`,eventDailyBudgetExceeded:`Tagesbudget überschritten`,statusOn:`an`,statusOff:`aus`,disable:`Deaktivieren`,enable:`Aktivieren`,sendTestPing:`Test-Ping senden`,addHeading:`Webhook hinzufügen`,secretPlaceholder:`Signatur-Secret (optional)`,addButton:`Webhook hinzufügen`,urlRequired:`URL ist erforderlich`,selectEvent:`Mindestens ein Ereignis auswählen`,added:`Webhook hinzugefügt`,addFailed:`Webhook konnte nicht hinzugefügt werden`,updateFailed:`Webhook konnte nicht aktualisiert werden`,removed:`Webhook entfernt`,removeFailed:`Webhook konnte nicht entfernt werden`,testPingSent:`Test-Ping gesendet`,testPingFailed:`Test-Ping konnte nicht gesendet werden`},u={title:`Terminal-Panel`,desktopDescription:`Desktop-weite Standardwerte für alle Projekte, sofern kein projektspezifischer Override gesetzt ist.`,projectDescription:`Projektspezifische Overrides für das Terminal-Panel. Lassen Sie ein Feld unverändert, um den Desktop-Standard zu erben.`,fontFamily:`Schriftfamilie`,fontSize:`Schriftgröße ({{min}}–{{max}})`,renderMode:`Render-Modus`,copyOnSelect:`Beim Auswählen kopieren`,shellIntegration:`Shell-Integration (OSC-133-Marken)`,notifyLongRunning:`Bei lang laufenden Befehlen benachrichtigen`,longCommandThreshold:`Schwellenwert für lange Befehle (ms)`,imageRendering:`Inline-Bilddarstellung (Sixel + iTerm2)`,browserShortcutUrl:`Browser-Shortcut-URL`,quickScript:`Quick-Skript (wird ins aktive Terminal eingefügt – Enter manuell drücken)`,reset:`Zurücksetzen`,unsavedChanges:`Ungespeicherte Änderungen`,clearOverride:`Override entfernen`,clear:`Entfernen`,inheritingDefault:`Erbt Desktop-Standard`,nothingToSave:`Nichts zu speichern`,saved:`Terminal-Einstellungen gespeichert`},d={heading:`Code-Bereich`,summaryLanguage:`Sprache der Zusammenfassungen`,monthlyBudget:`Monatsbudget (USD)`,budgetHelper:"Obergrenze für `surface=file-summary`-Ausgaben pro Kalendermonat. Von Nutzern angestoßene Neugenerierungen können sie überschreiten."},f={taglines:{dracula:`Das Original — dunkel mit Violettstich und lebhaften Neon-Akzenten`,"aurora-light":`Premium hell — Linear-inspiriertes Indigo auf warmem Cremeweiß`,"obsidian-dark":`Premium dunkel — fast schwarz mit Blaustich und elektrischen Akzenten`,matrix:`Phosphor-Terminal — sanftes Mint auf grünlichem Fast-Schwarz`,specrails:`Marken-Theme — tiefes Marine-Indigo mit satten Cyan-Akzenten`},heading:`Erscheinungsbild`,themeGroupLabel:`Theme`,currentlyActive:`Derzeit aktiv`,updateFailed:`Theme konnte nicht aktualisiert werden`},p={heading:`Mobile Companion`,description:`Steuern Sie Specrails über die SpecRails Companion-App auf Ihrem Smartphone – zu 100 % über Ihr lokales Netzwerk. Standardmäßig aus.`,accessOn:`Mobilzugriff an`,accessOff:`Mobilzugriff aus`,listeningOnPort:`Lauscht auf Port {{port}}`,notListening:`Lauscht nicht`,turnOn:`Einschalten`,turnOff:`Ausschalten`,pairWebDevice:`Web-Companion koppeln`,reset:`Zurücksetzen`,resetConfirm:`Mobile Identität zurücksetzen? Alle gekoppelten Geräte werden widerrufen und müssen neu gekoppelt werden.`,identityReset:`Mobile Identität zurückgesetzt`,enableFailed:`Mobilzugriff konnte nicht aktiviert werden: {{message}}`,disableFailed:`Mobilzugriff konnte nicht deaktiviert werden: {{message}}`,windowsFirewall:`Die Windows-Firewall fragt beim ersten Aktivieren, ob der SpecRails-Server zugelassen werden soll – wählen Sie „In privaten Netzwerken zulassen“.`,pairedDevices:`Gekoppelte Geräte`,noDevices:`Noch keine Geräte gekoppelt.`,revokeDevice:`{{name}} widerrufen`},m={title:`Web-Companion koppeln`,description:`Öffnen Sie specrails.dev/companion-app auf Ihrem Smartphone und scannen Sie damit diesen Code.`,startFailed:`Koppeln konnte nicht gestartet werden: {{error}}`,showThenScan:`Nachdem Ihr Smartphone dies gescannt hat, tippen Sie auf „Code des Smartphones scannen“ und richten Sie die Kamera auf Ihr Smartphone.`,scanAnswer:`Code des Smartphones scannen`,scanning:`Richten Sie die Kamera auf den Code auf Ihrem Smartphone…`,cameraFailed:`Kamera nicht verfügbar: {{message}}`,notAnswer:`Dieser QR-Code ist keine Kopplungsantwort.`,connecting:`Verbinden…`,paired:`✓ Gekoppelt`,pairedToast:`Web-Companion gekoppelt`,answerRejected:`Der Desktop hat diesen Code abgelehnt. Erzeugen Sie einen neuen und versuchen Sie es erneut.`,copyCode:`Code kopieren`,codeCopied:`Code kopiert`,cancel:`Abbrechen`},h={heading:`Specrails Core`,installed:`Installiert:`,updateAvailable:`Update verfügbar: {{version}}`,upToDate:`Aktuell`,neverChecked:`Nicht geprüft`,check:`Nach Updates suchen`,checking:`Wird geprüft…`,update:`Auf {{version}} aktualisieren`,downloading:`Wird heruntergeladen…`,materializing:`Wird installiert…`,affectsAll:`Gilt für alle Projekte — kein Neustart nötig.`,unavailable:`Core-Updates sind in diesem Build nicht verfügbar.`,toastDone:`Specrails Core auf {{version}} aktualisiert`,toastError:`Core-Update fehlgeschlagen: {{message}}`,toastUpToDate:`Specrails Core ist aktuell`,toastCheckFailed:`Update-Prüfung fehlgeschlagen: {{message}}`},g={heading:`Specrails Desktop`,installed:`Installiert:`,check:`Nach Updates suchen`,checking:`Wird geprüft…`,upToDate:`Du hast die neueste Version`,updateAvailable:`Update verfügbar: {{version}}`,autoHint:`Wird beim Start und alle 6 Stunden automatisch geprüft.`,unavailable:`App-Updates sind nur in der Desktop-App verfügbar.`,toastUpToDate:`Specrails Desktop ist aktuell`,toastCheckFailed:`Update-Prüfung fehlgeschlagen: {{message}}`},_={title:`{{name}} — Einstellungen`,description:`Projektkonfiguration: Prompts, Budget, Telemetrie und Terminal.`,nav:{general:`Allgemein`,budget:`Budget`,telemetry:`Telemetrie`,terminal:`Terminal`}},v={title:`Integrationszweig`,description:`Der Branch, von dem parallele Rails abzweigen und auf den ihre Entwurfs-PRs zielen. Leer lassen, um automatisch den Standard-Branch des Repositorys zu verwenden.`,placeholder:`automatisch (Standard-Branch)`,resolved:`Rails zweigen von <mono>{{branch}}</mono> ab`,save:`Branch speichern`,saved:`Integrationszweig gespeichert`,saveFailed:`Integrationszweig konnte nicht gespeichert werden`},y={language:e,page:t,errors:n,telemetry:r,prePrompt:i,freestylePrePrompt:a,budget:o,desktop:s,notifications:c,webhooks:l,terminal:u,codeSection:d,appearance:f,mobile:p,pairWeb:m,coreUpdate:h,appUpdate:g,projectDialog:_,integrationBranch:v};export{g as appUpdate,f as appearance,o as budget,d as codeSection,h as coreUpdate,y as default,s as desktop,n as errors,a as freestylePrePrompt,v as integrationBranch,e as language,p as mobile,c as notifications,t as page,m as pairWeb,i as prePrompt,_ as projectDialog,r as telemetry,u as terminal,l as webhooks};
@@ -0,0 +1 @@
1
+ import{r as e}from"./chunk-BNv3lrIs.js";var t=e({appUpdate:()=>v,appearance:()=>m,budget:()=>c,codeSection:()=>p,coreUpdate:()=>_,default:()=>x,desktop:()=>l,errors:()=>i,freestylePrePrompt:()=>s,integrationBranch:()=>b,language:()=>n,mobile:()=>h,notifications:()=>u,page:()=>r,pairWeb:()=>g,prePrompt:()=>o,projectDialog:()=>y,telemetry:()=>a,terminal:()=>f,webhooks:()=>d}),n={title:`Language`,description:`Desktop-wide UI language. Applies instantly — no restart needed.`,selectLabel:`Interface language`,updateFailed:`Could not save the language preference`},r={title:`Project Settings`},i={saveFailed:`Failed to save: {{message}}`},a={title:`Pipeline Telemetry`,description:`Capture token usage, phase durations, and subagent activity for diagnostic export. Off by default.`,toggleLabel:`Enable pipeline telemetry`,toggleDescription:`When on, OTEL data from pipeline jobs is captured locally. Use the <mono>Export diagnostic</mono> button on any job card to download.`,enabled:`Pipeline telemetry enabled`,disabled:`Pipeline telemetry disabled`,saveFailed:`Failed to save telemetry setting`},o={title:`Rail Pre-prompt`,description:`Extra project-specific instructions appended to implement and batch-implement rail jobs after the ticket context and before execution.`,label:`Pre-prompt`,placeholder:`Example: Prefer incremental changes, keep migrations backward compatible, and add tests for every rail change.`,helper:`Use this for stable project guidance that should accompany every rail implementation run.`,saveButton:`Save pre-prompt`,cleared:`Pre-prompt cleared`,saved:`Pre-prompt saved`,saveFailed:`Failed to save pre-prompt`},s={title:`Freestyle pre-prompt`,description:`Instruction sent to Claude in Freestyle (Claude-only rails). Freestyle skips the OpenSpec pipeline — it hands Claude this pre-prompt plus the spec text and lets it implement autonomously. Leave blank to use the built-in default.`,label:`Freestyle pre-prompt`,placeholder:`Leave blank to use the default Freestyle instruction.`,helper:`The spec text is appended automatically after this pre-prompt. Empty = default.`,saveButton:`Save Freestyle pre-prompt`,resetToDefault:`Freestyle pre-prompt reset to default`,saved:`Freestyle pre-prompt saved`,saveFailed:`Failed to save Freestyle pre-prompt`},c={title:`Budget`,description:`Set a daily spend cap for this project. The queue auto-pauses when the limit is hit.`,dailyLabel:`Daily budget (USD)`,dailyHelper:`Leave blank to disable. Spend is calculated over the last 24 hours.`,dailyPlaceholder:`e.g. 5.00`,perJobLabel:`Per-job cost alert (USD)`,perJobHelper:`Alert when a single job in this project exceeds this amount.`,perJobPlaceholder:`e.g. 0.50`,invalidNumber:`Enter a positive number or leave blank to disable`,dailyRemoved:`Daily budget removed`,dailySet:"Daily budget set to ${{amount}}",perJobAlertDisabled:`Per-job cost alert disabled`,alertSet:"Alert set for jobs over ${{amount}}",saveBudgetFailed:`Failed to save budget`,saveThresholdFailed:`Failed to save threshold`},l={nav:{appearance:`Appearance`,code:`Code`,terminal:`Terminal`,updates:`Updates`,mobile:`Mobile`,mcp:`MCP`,projects:`Projects`,advanced:`Advanced`,webhooks:`Webhooks`,about:`About`},title:`Desktop Settings`,description:`Manage registered projects and view Desktop information.`,registeredProjects:`Registered Projects`,noProjects:`No projects registered yet`,techUrlDescription:`Base URL for the specrails-tech API (default: http://localhost:3000)`,techUrlSaved:`specrails-tech URL saved`,techUrlSaveFailed:`Failed to save URL`,budgetAlertsHeading:`Budget & Alerts`,dailyBudgetLabel:`Desktop daily budget (USD)`,dailyBudgetHelper:`Global daily spend limit across all projects. Queues auto-pause when exceeded.`,dailyBudgetPlaceholder:`e.g. 10.00`,perJobHelper:`Alert when a single job exceeds this amount. Leave blank to disable.`,costAlertsDisabled:`Cost alerts disabled`,dailyBudgetRemoved:`Desktop daily budget removed`,dailyBudgetSet:"Desktop daily budget set to ${{amount}}",dailyBudgetSaveFailed:`Failed to save Desktop daily budget`,projectRemoved:`Project removed`,projectRemoveFailed:`Failed to remove project`,onboardingHeading:`Onboarding`,platformTour:`Platform Tour`,platformTourDescription:`Replay the welcome wizard to review key features.`,replayTour:`Replay Tour`,terminalPanelHeading:`Terminal Panel`,infoHeading:`Desktop Information`,infoPort:`Port`,infoProjects:`Projects`,infoDb:`Desktop DB`},u={heading:`OS Notifications`,description:`Show native desktop notifications when jobs complete or fail. Notifications only appear when the tab is not focused.`,enableLabel:`Enable OS Notifications`,notifyOn:`Notify on:`,filterAll:`All (completed & failed)`,filterCompleted:`Completed only`,filterFailed:`Failed only`,enabledToast:`OS notifications enabled`,disabledToast:`OS notifications disabled`},d={heading:`Outbound Webhooks`,description:`Notify external tools (Slack, Zapier, CI/CD) on Desktop events. Requests are signed via <code>X-Specrails-Signature</code> when a secret is set.`,eventJobCompleted:`Job completed`,eventJobFailed:`Job failed`,eventDailyBudgetExceeded:`Daily budget exceeded`,statusOn:`on`,statusOff:`off`,disable:`Disable`,enable:`Enable`,sendTestPing:`Send test ping`,addHeading:`Add webhook`,secretPlaceholder:`Signing secret (optional)`,addButton:`Add Webhook`,urlRequired:`URL is required`,selectEvent:`Select at least one event`,added:`Webhook added`,addFailed:`Failed to add webhook`,updateFailed:`Failed to update webhook`,removed:`Webhook removed`,removeFailed:`Failed to remove webhook`,testPingSent:`Test ping sent`,testPingFailed:`Failed to send test ping`},f={title:`Terminal panel`,desktopDescription:`Desktop-wide defaults applied to every project unless a per-project override is set.`,projectDescription:`Per-project overrides for the terminal panel. Leave a field unchanged to inherit the Desktop default.`,fontFamily:`Font family`,fontSize:`Font size ({{min}}–{{max}})`,renderMode:`Render mode`,copyOnSelect:`Copy on select`,shellIntegration:`Shell integration (OSC 133 marks)`,notifyLongRunning:`Notify on long-running commands`,longCommandThreshold:`Long-command threshold (ms)`,imageRendering:`Inline image rendering (Sixel + iTerm2)`,browserShortcutUrl:`Browser shortcut URL`,quickScript:`Quick script (pasted into active terminal — Enter manually)`,reset:`Reset`,unsavedChanges:`Unsaved changes`,clearOverride:`Clear override`,clear:`Clear`,inheritingDefault:`Inheriting Desktop default`,nothingToSave:`Nothing to save`,saved:`Terminal settings saved`},p={heading:`Code section`,summaryLanguage:`Summary language`,monthlyBudget:`Monthly budget (USD)`,budgetHelper:"Cap on `surface=file-summary` spend per calendar month. User-initiated regenerations can override."},m={taglines:{dracula:`The original — dark purple-tinted with vivid neon accents`,"aurora-light":`Premium light — Linear-inspired indigo on warm off-white`,"obsidian-dark":`Premium dark — near-black blue-tinted with electric accents`,matrix:`Phosphor terminal — soft mint on green-tinted near-black`,specrails:`Brand theme — deep navy-indigo with saturated cyan accents`},heading:`Appearance`,themeGroupLabel:`Theme`,currentlyActive:`Currently active`,updateFailed:`Failed to update theme`},h={heading:`Mobile companion`,description:`Control Specrails from the SpecRails Companion app on your phone, 100% over your local network. Off by default.`,accessOn:`Mobile access on`,accessOff:`Mobile access off`,listeningOnPort:`Listening on port {{port}}`,notListening:`Not listening`,turnOn:`Turn on`,turnOff:`Turn off`,pairWebDevice:`Pair web companion`,reset:`Reset`,resetConfirm:`Reset the mobile identity? Every paired device will be revoked and must pair again.`,identityReset:`Mobile identity reset`,enableFailed:`Could not enable mobile access: {{message}}`,disableFailed:`Could not disable mobile access: {{message}}`,windowsFirewall:`Windows Firewall will ask to allow the SpecRails server on first enable — choose “Allow on private networks”.`,pairedDevices:`Paired devices`,noDevices:`No devices paired yet.`,revokeDevice:`Revoke {{name}}`},g={title:`Pair web companion`,description:`Open specrails.dev/companion-app on your phone, then scan this code with it.`,startFailed:`Could not start pairing: {{error}}`,showThenScan:`After your phone scans this, tap “Scan phone's code” and point the camera at your phone.`,scanAnswer:`Scan phone's code`,scanning:`Point the camera at the code on your phone…`,cameraFailed:`Camera unavailable: {{message}}`,notAnswer:`That QR isn't a pairing answer.`,connecting:`Connecting…`,paired:`✓ Paired`,pairedToast:`Web companion paired`,answerRejected:`The desktop rejected that code. Generate a fresh one and retry.`,copyCode:`Copy code`,codeCopied:`Code copied`,cancel:`Cancel`},_={heading:`Specrails Core`,installed:`Installed:`,updateAvailable:`Update available: {{version}}`,upToDate:`Up to date`,neverChecked:`Not checked yet`,check:`Check for updates`,checking:`Checking…`,update:`Update to {{version}}`,downloading:`Downloading…`,materializing:`Installing…`,affectsAll:`Applies to all projects — no restart needed.`,unavailable:`Core updates aren't available in this build.`,toastDone:`Specrails Core updated to {{version}}`,toastError:`Core update failed: {{message}}`,toastUpToDate:`Specrails Core is up to date`,toastCheckFailed:`Update check failed: {{message}}`},v={heading:`Specrails Desktop`,installed:`Installed:`,check:`Check for updates`,checking:`Checking…`,upToDate:`You're on the latest version`,updateAvailable:`Update available: {{version}}`,autoHint:`Checks automatically at launch and every 6 hours.`,unavailable:`App updates are only available in the desktop app.`,toastUpToDate:`Specrails Desktop is up to date`,toastCheckFailed:`Update check failed: {{message}}`},y={title:`{{name}} — Settings`,description:`Project-level configuration: prompts, budget, telemetry and terminal.`,nav:{general:`General`,budget:`Budget`,telemetry:`Telemetry`,terminal:`Terminal`}},b={title:`Integration branch`,description:`The branch parallel rails branch from and target their draft PRs at. Leave empty to auto-resolve to the repository's default branch.`,placeholder:`auto (repository default)`,resolved:`Rails branch off <mono>{{branch}}</mono>`,save:`Save branch`,saved:`Integration branch saved`,saveFailed:`Could not save the integration branch`},x={language:n,page:r,errors:i,telemetry:a,prePrompt:o,freestylePrePrompt:s,budget:c,desktop:l,notifications:u,webhooks:d,terminal:f,codeSection:p,appearance:m,mobile:h,pairWeb:g,coreUpdate:_,appUpdate:v,projectDialog:y,integrationBranch:b};export{t};
@@ -1 +1 @@
1
- var e={title:`Lingua`,description:`Lingua della UI per tutto Desktop. Si applica all'istante — nessun riavvio necessario.`,selectLabel:`Lingua dell'interfaccia`,updateFailed:`Impossibile salvare la preferenza di lingua`},t={title:`Impostazioni progetto`},n={saveFailed:`Salvataggio non riuscito: {{message}}`},r={title:`Telemetria della pipeline`,description:`Cattura l'uso dei token, le durate delle fasi e l'attività dei subagent per l'export diagnostico. Disattivata per impostazione predefinita.`,toggleLabel:`Abilita la telemetria della pipeline`,toggleDescription:`Quando attiva, i dati OTEL dei job della pipeline vengono catturati localmente. Usa il pulsante <mono>Esporta diagnostica</mono> su qualsiasi card di job per scaricarli.`,enabled:`Telemetria della pipeline abilitata`,disabled:`Telemetria della pipeline disabilitata`,saveFailed:`Salvataggio dell'impostazione di telemetria non riuscito`},i={title:`Pre-prompt dei rail`,description:`Istruzioni extra specifiche del progetto aggiunte ai job rail di implement e batch-implement dopo il contesto del ticket e prima dell'esecuzione.`,label:`Pre-prompt`,placeholder:`Esempio: preferisci modifiche incrementali, mantieni le migrazioni retrocompatibili e aggiungi test per ogni modifica del rail.`,helper:`Usalo per indicazioni stabili di progetto che devono accompagnare ogni run di implementazione su rail.`,saveButton:`Salva pre-prompt`,cleared:`Pre-prompt rimosso`,saved:`Pre-prompt salvato`,saveFailed:`Salvataggio del pre-prompt non riuscito`},a={title:`Pre-prompt Freestyle`,description:`Istruzione inviata a Claude in Freestyle (rail solo Claude). Freestyle salta la pipeline OpenSpec — consegna a Claude questo pre-prompt più il testo della spec e lo lascia implementare in autonomia. Lascia vuoto per usare il default integrato.`,label:`Pre-prompt Freestyle`,placeholder:`Lascia vuoto per usare l'istruzione Freestyle predefinita.`,helper:`Il testo della spec viene aggiunto automaticamente dopo questo pre-prompt. Vuoto = default.`,saveButton:`Salva pre-prompt Freestyle`,resetToDefault:`Pre-prompt Freestyle ripristinato al default`,saved:`Pre-prompt Freestyle salvato`,saveFailed:`Salvataggio del pre-prompt Freestyle non riuscito`},o={title:`Budget`,description:`Imposta un tetto di spesa giornaliero per questo progetto. La coda si mette in pausa automaticamente al raggiungimento del limite.`,dailyLabel:`Budget giornaliero (USD)`,dailyHelper:`Lascia vuoto per disabilitare. La spesa è calcolata sulle ultime 24 ore.`,dailyPlaceholder:`es. 5.00`,perJobLabel:`Avviso di costo per job (USD)`,perJobHelper:`Avvisa quando un singolo job di questo progetto supera questo importo.`,perJobPlaceholder:`es. 0.50`,invalidNumber:`Inserisci un numero positivo o lascia vuoto per disabilitare`,dailyRemoved:`Budget giornaliero rimosso`,dailySet:"Budget giornaliero impostato a ${{amount}}",perJobAlertDisabled:`Avviso di costo per job disabilitato`,alertSet:"Avviso impostato per i job oltre ${{amount}}",saveBudgetFailed:`Salvataggio del budget non riuscito`,saveThresholdFailed:`Salvataggio della soglia non riuscito`},s={nav:{appearance:`Aspetto`,code:`Codice`,terminal:`Terminale`,updates:`Aggiornamenti`,mobile:`Mobile`,mcp:`MCP`,projects:`Progetti`,advanced:`Avanzate`,webhooks:`Webhooks`,about:`Info`},title:`Impostazioni Desktop`,description:`Gestisci i progetti registrati e visualizza le informazioni di Desktop.`,registeredProjects:`Progetti registrati`,noProjects:`Nessun progetto ancora registrato`,techUrlDescription:`URL base per l'API specrails-tech (default: http://localhost:3000)`,techUrlSaved:`URL di specrails-tech salvato`,techUrlSaveFailed:`Salvataggio dell'URL non riuscito`,budgetAlertsHeading:`Budget e avvisi`,dailyBudgetLabel:`Budget giornaliero di Desktop (USD)`,dailyBudgetHelper:`Limite di spesa giornaliero globale su tutti i progetti. Le code si mettono in pausa automaticamente al superamento.`,dailyBudgetPlaceholder:`es. 10.00`,perJobHelper:`Avvisa quando un singolo job supera questo importo. Lascia vuoto per disabilitare.`,costAlertsDisabled:`Avvisi di costo disabilitati`,dailyBudgetRemoved:`Budget giornaliero di Desktop rimosso`,dailyBudgetSet:"Budget giornaliero di Desktop impostato a ${{amount}}",dailyBudgetSaveFailed:`Salvataggio del budget giornaliero di Desktop non riuscito`,projectRemoved:`Progetto rimosso`,projectRemoveFailed:`Rimozione del progetto non riuscita`,onboardingHeading:`Onboarding`,platformTour:`Tour della piattaforma`,platformTourDescription:`Rivedi il wizard di benvenuto per ripassare le funzionalità principali.`,replayTour:`Rivedi il tour`,terminalPanelHeading:`Pannello terminale`,infoHeading:`Informazioni Desktop`,infoPort:`Porta`,infoProjects:`Progetti`,infoDb:`DB di Desktop`},c={heading:`Notifiche di sistema`,description:`Mostra notifiche desktop native quando i job vengono completati o falliscono. Le notifiche appaiono solo quando la scheda non è in primo piano.`,enableLabel:`Abilita le notifiche di sistema`,notifyOn:`Notifica per:`,filterAll:`Tutti (completati e falliti)`,filterCompleted:`Solo completati`,filterFailed:`Solo falliti`,enabledToast:`Notifiche di sistema abilitate`,disabledToast:`Notifiche di sistema disabilitate`},l={heading:`Webhook in uscita`,description:`Notifica strumenti esterni (Slack, Zapier, CI/CD) sugli eventi di Desktop. Le richieste sono firmate via <code>X-Specrails-Signature</code> quando è impostato un secret.`,eventJobCompleted:`Job completato`,eventJobFailed:`Job fallito`,eventDailyBudgetExceeded:`Budget giornaliero superato`,statusOn:`on`,statusOff:`off`,disable:`Disabilita`,enable:`Abilita`,sendTestPing:`Invia ping di test`,addHeading:`Aggiungi webhook`,secretPlaceholder:`Secret di firma (facoltativo)`,addButton:`Aggiungi webhook`,urlRequired:`L'URL è obbligatorio`,selectEvent:`Seleziona almeno un evento`,added:`Webhook aggiunto`,addFailed:`Aggiunta del webhook non riuscita`,updateFailed:`Aggiornamento del webhook non riuscito`,removed:`Webhook rimosso`,removeFailed:`Rimozione del webhook non riuscita`,testPingSent:`Ping di test inviato`,testPingFailed:`Invio del ping di test non riuscito`},u={title:`Pannello terminale`,desktopDescription:`Default a livello di Desktop applicati a ogni progetto, salvo override per progetto.`,projectDescription:`Override per progetto del pannello terminale. Lascia un campo invariato per ereditare il default di Desktop.`,fontFamily:`Famiglia di font`,fontSize:`Dimensione font ({{min}}–{{max}})`,renderMode:`Modalità di rendering`,copyOnSelect:`Copia alla selezione`,shellIntegration:`Integrazione shell (marcatori OSC 133)`,notifyLongRunning:`Notifica per comandi a lunga esecuzione`,longCommandThreshold:`Soglia comandi lunghi (ms)`,imageRendering:`Rendering immagini inline (Sixel + iTerm2)`,browserShortcutUrl:`URL scorciatoia browser`,quickScript:`Script rapido (incollato nel terminale attivo — premi Invio manualmente)`,reset:`Reimposta`,unsavedChanges:`Modifiche non salvate`,clearOverride:`Rimuovi override`,clear:`Rimuovi`,inheritingDefault:`Eredita il default di Desktop`,nothingToSave:`Niente da salvare`,saved:`Impostazioni del terminale salvate`},d={heading:`Sezione Code`,summaryLanguage:`Lingua dei riassunti`,monthlyBudget:`Budget mensile (USD)`,budgetHelper:"Tetto alla spesa `surface=file-summary` per mese di calendario. Le rigenerazioni avviate dall'utente possono superarlo."},f={taglines:{dracula:`L'originale — scuro con sfumature viola e vividi accenti neon`,"aurora-light":`Chiaro premium — indaco ispirato a Linear su bianco caldo`,"obsidian-dark":`Scuro premium — quasi nero con sfumature blu e accenti elettrici`,matrix:`Terminale al fosforo — menta tenue su quasi nero verdastro`,specrails:`Tema del brand — blu navy-indaco profondo con accenti ciano saturi`},heading:`Aspetto`,themeGroupLabel:`Tema`,currentlyActive:`Attualmente attivo`,updateFailed:`Aggiornamento del tema non riuscito`},p={heading:`Companion mobile`,description:`Controlla Specrails dall'app SpecRails Companion sul tuo telefono, 100% sulla tua rete locale. Disattivato per impostazione predefinita.`,accessOn:`Accesso mobile attivo`,accessOff:`Accesso mobile disattivato`,listeningOnPort:`In ascolto sulla porta {{port}}`,notListening:`Non in ascolto`,turnOn:`Attiva`,turnOff:`Disattiva`,pairWebDevice:`Associa companion web`,reset:`Reimposta`,resetConfirm:`Reimpostare l'identità mobile? Ogni dispositivo associato verrà revocato e dovrà associarsi di nuovo.`,identityReset:`Identità mobile reimpostata`,enableFailed:`Impossibile abilitare l'accesso mobile: {{message}}`,disableFailed:`Impossibile disabilitare l'accesso mobile: {{message}}`,windowsFirewall:`Alla prima attivazione Windows Firewall chiederà di consentire il server SpecRails — scegli “Consenti su reti private”.`,pairedDevices:`Dispositivi associati`,noDevices:`Nessun dispositivo ancora associato.`,revokeDevice:`Revoca {{name}}`},m={title:`Associa companion web`,description:`Apri specrails.dev/companion-app sul telefono, poi scansiona questo codice con esso.`,startFailed:`Impossibile avviare l'associazione: {{error}}`,showThenScan:`Dopo che il telefono ha scansionato questo, tocca “Scansiona il codice del telefono” e punta la fotocamera verso il telefono.`,scanAnswer:`Scansiona il codice del telefono`,scanning:`Punta la fotocamera sul codice del telefono…`,cameraFailed:`Fotocamera non disponibile: {{message}}`,notAnswer:`Quel QR non è una risposta di associazione.`,connecting:`Connessione…`,paired:`✓ Associato`,pairedToast:`Companion web associato`,answerRejected:`Il desktop ha rifiutato quel codice. Generane uno nuovo e riprova.`,copyCode:`Copia codice`,codeCopied:`Codice copiato`,cancel:`Annulla`},h={heading:`Specrails Core`,installed:`Installato:`,updateAvailable:`Aggiornamento disponibile: {{version}}`,upToDate:`Aggiornato`,neverChecked:`Non verificato`,check:`Cerca aggiornamenti`,checking:`Verifica…`,update:`Aggiorna a {{version}}`,downloading:`Download…`,materializing:`Installazione…`,affectsAll:`Si applica a tutti i progetti — nessun riavvio necessario.`,unavailable:`Gli aggiornamenti del core non sono disponibili in questa build.`,toastDone:`Specrails Core aggiornato a {{version}}`,toastError:`Aggiornamento del core non riuscito: {{message}}`,toastUpToDate:`Specrails Core è aggiornato`,toastCheckFailed:`Verifica aggiornamenti non riuscita: {{message}}`},g={heading:`Specrails Desktop`,installed:`Installata:`,check:`Cerca aggiornamenti`,checking:`Verifica…`,upToDate:`Hai l'ultima versione`,updateAvailable:`Aggiornamento disponibile: {{version}}`,autoHint:`Controllo automatico all'avvio e ogni 6 ore.`,unavailable:`Gli aggiornamenti sono disponibili solo nell'app desktop.`,toastUpToDate:`Specrails Desktop è aggiornato`,toastCheckFailed:`Ricerca aggiornamenti non riuscita: {{message}}`},_={title:`{{name}} — Impostazioni`,description:`Configurazione del progetto: prompt, budget, telemetria e terminale.`,nav:{general:`Generale`,budget:`Budget`,telemetry:`Telemetria`,terminal:`Terminale`}},v={title:`Ramo di integrazione`,description:`Il ramo da cui i rail paralleli si diramano e a cui puntano le loro PR in bozza. Lascia vuoto per risolvere automaticamente al ramo predefinito del repository.`,placeholder:`automatico (ramo predefinito)`,resolved:`I rail si diramano da <mono>{{branch}}</mono>`,save:`Salva ramo`,saved:`Ramo di integrazione salvato`,saveFailed:`Impossibile salvare il ramo di integrazione`},y={language:e,page:t,errors:n,telemetry:r,prePrompt:i,ultraPrePrompt:a,budget:o,desktop:s,notifications:c,webhooks:l,terminal:u,codeSection:d,appearance:f,mobile:p,pairWeb:m,coreUpdate:h,appUpdate:g,projectDialog:_,integrationBranch:v};export{g as appUpdate,f as appearance,o as budget,d as codeSection,h as coreUpdate,y as default,s as desktop,n as errors,v as integrationBranch,e as language,p as mobile,c as notifications,t as page,m as pairWeb,i as prePrompt,_ as projectDialog,r as telemetry,u as terminal,a as ultraPrePrompt,l as webhooks};
1
+ var e={title:`Lingua`,description:`Lingua della UI per tutto Desktop. Si applica all'istante — nessun riavvio necessario.`,selectLabel:`Lingua dell'interfaccia`,updateFailed:`Impossibile salvare la preferenza di lingua`},t={title:`Impostazioni progetto`},n={saveFailed:`Salvataggio non riuscito: {{message}}`},r={title:`Telemetria della pipeline`,description:`Cattura l'uso dei token, le durate delle fasi e l'attività dei subagent per l'export diagnostico. Disattivata per impostazione predefinita.`,toggleLabel:`Abilita la telemetria della pipeline`,toggleDescription:`Quando attiva, i dati OTEL dei job della pipeline vengono catturati localmente. Usa il pulsante <mono>Esporta diagnostica</mono> su qualsiasi card di job per scaricarli.`,enabled:`Telemetria della pipeline abilitata`,disabled:`Telemetria della pipeline disabilitata`,saveFailed:`Salvataggio dell'impostazione di telemetria non riuscito`},i={title:`Pre-prompt dei rail`,description:`Istruzioni extra specifiche del progetto aggiunte ai job rail di implement e batch-implement dopo il contesto del ticket e prima dell'esecuzione.`,label:`Pre-prompt`,placeholder:`Esempio: preferisci modifiche incrementali, mantieni le migrazioni retrocompatibili e aggiungi test per ogni modifica del rail.`,helper:`Usalo per indicazioni stabili di progetto che devono accompagnare ogni run di implementazione su rail.`,saveButton:`Salva pre-prompt`,cleared:`Pre-prompt rimosso`,saved:`Pre-prompt salvato`,saveFailed:`Salvataggio del pre-prompt non riuscito`},a={title:`Pre-prompt Freestyle`,description:`Istruzione inviata a Claude in Freestyle (rail solo Claude). Freestyle salta la pipeline OpenSpec — consegna a Claude questo pre-prompt più il testo della spec e lo lascia implementare in autonomia. Lascia vuoto per usare il default integrato.`,label:`Pre-prompt Freestyle`,placeholder:`Lascia vuoto per usare l'istruzione Freestyle predefinita.`,helper:`Il testo della spec viene aggiunto automaticamente dopo questo pre-prompt. Vuoto = default.`,saveButton:`Salva pre-prompt Freestyle`,resetToDefault:`Pre-prompt Freestyle ripristinato al default`,saved:`Pre-prompt Freestyle salvato`,saveFailed:`Salvataggio del pre-prompt Freestyle non riuscito`},o={title:`Budget`,description:`Imposta un tetto di spesa giornaliero per questo progetto. La coda si mette in pausa automaticamente al raggiungimento del limite.`,dailyLabel:`Budget giornaliero (USD)`,dailyHelper:`Lascia vuoto per disabilitare. La spesa è calcolata sulle ultime 24 ore.`,dailyPlaceholder:`es. 5.00`,perJobLabel:`Avviso di costo per job (USD)`,perJobHelper:`Avvisa quando un singolo job di questo progetto supera questo importo.`,perJobPlaceholder:`es. 0.50`,invalidNumber:`Inserisci un numero positivo o lascia vuoto per disabilitare`,dailyRemoved:`Budget giornaliero rimosso`,dailySet:"Budget giornaliero impostato a ${{amount}}",perJobAlertDisabled:`Avviso di costo per job disabilitato`,alertSet:"Avviso impostato per i job oltre ${{amount}}",saveBudgetFailed:`Salvataggio del budget non riuscito`,saveThresholdFailed:`Salvataggio della soglia non riuscito`},s={nav:{appearance:`Aspetto`,code:`Codice`,terminal:`Terminale`,updates:`Aggiornamenti`,mobile:`Mobile`,mcp:`MCP`,projects:`Progetti`,advanced:`Avanzate`,webhooks:`Webhooks`,about:`Info`},title:`Impostazioni Desktop`,description:`Gestisci i progetti registrati e visualizza le informazioni di Desktop.`,registeredProjects:`Progetti registrati`,noProjects:`Nessun progetto ancora registrato`,techUrlDescription:`URL base per l'API specrails-tech (default: http://localhost:3000)`,techUrlSaved:`URL di specrails-tech salvato`,techUrlSaveFailed:`Salvataggio dell'URL non riuscito`,budgetAlertsHeading:`Budget e avvisi`,dailyBudgetLabel:`Budget giornaliero di Desktop (USD)`,dailyBudgetHelper:`Limite di spesa giornaliero globale su tutti i progetti. Le code si mettono in pausa automaticamente al superamento.`,dailyBudgetPlaceholder:`es. 10.00`,perJobHelper:`Avvisa quando un singolo job supera questo importo. Lascia vuoto per disabilitare.`,costAlertsDisabled:`Avvisi di costo disabilitati`,dailyBudgetRemoved:`Budget giornaliero di Desktop rimosso`,dailyBudgetSet:"Budget giornaliero di Desktop impostato a ${{amount}}",dailyBudgetSaveFailed:`Salvataggio del budget giornaliero di Desktop non riuscito`,projectRemoved:`Progetto rimosso`,projectRemoveFailed:`Rimozione del progetto non riuscita`,onboardingHeading:`Onboarding`,platformTour:`Tour della piattaforma`,platformTourDescription:`Rivedi il wizard di benvenuto per ripassare le funzionalità principali.`,replayTour:`Rivedi il tour`,terminalPanelHeading:`Pannello terminale`,infoHeading:`Informazioni Desktop`,infoPort:`Porta`,infoProjects:`Progetti`,infoDb:`DB di Desktop`},c={heading:`Notifiche di sistema`,description:`Mostra notifiche desktop native quando i job vengono completati o falliscono. Le notifiche appaiono solo quando la scheda non è in primo piano.`,enableLabel:`Abilita le notifiche di sistema`,notifyOn:`Notifica per:`,filterAll:`Tutti (completati e falliti)`,filterCompleted:`Solo completati`,filterFailed:`Solo falliti`,enabledToast:`Notifiche di sistema abilitate`,disabledToast:`Notifiche di sistema disabilitate`},l={heading:`Webhook in uscita`,description:`Notifica strumenti esterni (Slack, Zapier, CI/CD) sugli eventi di Desktop. Le richieste sono firmate via <code>X-Specrails-Signature</code> quando è impostato un secret.`,eventJobCompleted:`Job completato`,eventJobFailed:`Job fallito`,eventDailyBudgetExceeded:`Budget giornaliero superato`,statusOn:`on`,statusOff:`off`,disable:`Disabilita`,enable:`Abilita`,sendTestPing:`Invia ping di test`,addHeading:`Aggiungi webhook`,secretPlaceholder:`Secret di firma (facoltativo)`,addButton:`Aggiungi webhook`,urlRequired:`L'URL è obbligatorio`,selectEvent:`Seleziona almeno un evento`,added:`Webhook aggiunto`,addFailed:`Aggiunta del webhook non riuscita`,updateFailed:`Aggiornamento del webhook non riuscito`,removed:`Webhook rimosso`,removeFailed:`Rimozione del webhook non riuscita`,testPingSent:`Ping di test inviato`,testPingFailed:`Invio del ping di test non riuscito`},u={title:`Pannello terminale`,desktopDescription:`Default a livello di Desktop applicati a ogni progetto, salvo override per progetto.`,projectDescription:`Override per progetto del pannello terminale. Lascia un campo invariato per ereditare il default di Desktop.`,fontFamily:`Famiglia di font`,fontSize:`Dimensione font ({{min}}–{{max}})`,renderMode:`Modalità di rendering`,copyOnSelect:`Copia alla selezione`,shellIntegration:`Integrazione shell (marcatori OSC 133)`,notifyLongRunning:`Notifica per comandi a lunga esecuzione`,longCommandThreshold:`Soglia comandi lunghi (ms)`,imageRendering:`Rendering immagini inline (Sixel + iTerm2)`,browserShortcutUrl:`URL scorciatoia browser`,quickScript:`Script rapido (incollato nel terminale attivo — premi Invio manualmente)`,reset:`Reimposta`,unsavedChanges:`Modifiche non salvate`,clearOverride:`Rimuovi override`,clear:`Rimuovi`,inheritingDefault:`Eredita il default di Desktop`,nothingToSave:`Niente da salvare`,saved:`Impostazioni del terminale salvate`},d={heading:`Sezione Code`,summaryLanguage:`Lingua dei riassunti`,monthlyBudget:`Budget mensile (USD)`,budgetHelper:"Tetto alla spesa `surface=file-summary` per mese di calendario. Le rigenerazioni avviate dall'utente possono superarlo."},f={taglines:{dracula:`L'originale — scuro con sfumature viola e vividi accenti neon`,"aurora-light":`Chiaro premium — indaco ispirato a Linear su bianco caldo`,"obsidian-dark":`Scuro premium — quasi nero con sfumature blu e accenti elettrici`,matrix:`Terminale al fosforo — menta tenue su quasi nero verdastro`,specrails:`Tema del brand — blu navy-indaco profondo con accenti ciano saturi`},heading:`Aspetto`,themeGroupLabel:`Tema`,currentlyActive:`Attualmente attivo`,updateFailed:`Aggiornamento del tema non riuscito`},p={heading:`Companion mobile`,description:`Controlla Specrails dall'app SpecRails Companion sul tuo telefono, 100% sulla tua rete locale. Disattivato per impostazione predefinita.`,accessOn:`Accesso mobile attivo`,accessOff:`Accesso mobile disattivato`,listeningOnPort:`In ascolto sulla porta {{port}}`,notListening:`Non in ascolto`,turnOn:`Attiva`,turnOff:`Disattiva`,pairWebDevice:`Associa companion web`,reset:`Reimposta`,resetConfirm:`Reimpostare l'identità mobile? Ogni dispositivo associato verrà revocato e dovrà associarsi di nuovo.`,identityReset:`Identità mobile reimpostata`,enableFailed:`Impossibile abilitare l'accesso mobile: {{message}}`,disableFailed:`Impossibile disabilitare l'accesso mobile: {{message}}`,windowsFirewall:`Alla prima attivazione Windows Firewall chiederà di consentire il server SpecRails — scegli “Consenti su reti private”.`,pairedDevices:`Dispositivi associati`,noDevices:`Nessun dispositivo ancora associato.`,revokeDevice:`Revoca {{name}}`},m={title:`Associa companion web`,description:`Apri specrails.dev/companion-app sul telefono, poi scansiona questo codice con esso.`,startFailed:`Impossibile avviare l'associazione: {{error}}`,showThenScan:`Dopo che il telefono ha scansionato questo, tocca “Scansiona il codice del telefono” e punta la fotocamera verso il telefono.`,scanAnswer:`Scansiona il codice del telefono`,scanning:`Punta la fotocamera sul codice del telefono…`,cameraFailed:`Fotocamera non disponibile: {{message}}`,notAnswer:`Quel QR non è una risposta di associazione.`,connecting:`Connessione…`,paired:`✓ Associato`,pairedToast:`Companion web associato`,answerRejected:`Il desktop ha rifiutato quel codice. Generane uno nuovo e riprova.`,copyCode:`Copia codice`,codeCopied:`Codice copiato`,cancel:`Annulla`},h={heading:`Specrails Core`,installed:`Installato:`,updateAvailable:`Aggiornamento disponibile: {{version}}`,upToDate:`Aggiornato`,neverChecked:`Non verificato`,check:`Cerca aggiornamenti`,checking:`Verifica…`,update:`Aggiorna a {{version}}`,downloading:`Download…`,materializing:`Installazione…`,affectsAll:`Si applica a tutti i progetti — nessun riavvio necessario.`,unavailable:`Gli aggiornamenti del core non sono disponibili in questa build.`,toastDone:`Specrails Core aggiornato a {{version}}`,toastError:`Aggiornamento del core non riuscito: {{message}}`,toastUpToDate:`Specrails Core è aggiornato`,toastCheckFailed:`Verifica aggiornamenti non riuscita: {{message}}`},g={heading:`Specrails Desktop`,installed:`Installata:`,check:`Cerca aggiornamenti`,checking:`Verifica…`,upToDate:`Hai l'ultima versione`,updateAvailable:`Aggiornamento disponibile: {{version}}`,autoHint:`Controllo automatico all'avvio e ogni 6 ore.`,unavailable:`Gli aggiornamenti sono disponibili solo nell'app desktop.`,toastUpToDate:`Specrails Desktop è aggiornato`,toastCheckFailed:`Ricerca aggiornamenti non riuscita: {{message}}`},_={title:`{{name}} — Impostazioni`,description:`Configurazione del progetto: prompt, budget, telemetria e terminale.`,nav:{general:`Generale`,budget:`Budget`,telemetry:`Telemetria`,terminal:`Terminale`}},v={title:`Ramo di integrazione`,description:`Il ramo da cui i rail paralleli si diramano e a cui puntano le loro PR in bozza. Lascia vuoto per risolvere automaticamente al ramo predefinito del repository.`,placeholder:`automatico (ramo predefinito)`,resolved:`I rail si diramano da <mono>{{branch}}</mono>`,save:`Salva ramo`,saved:`Ramo di integrazione salvato`,saveFailed:`Impossibile salvare il ramo di integrazione`},y={language:e,page:t,errors:n,telemetry:r,prePrompt:i,freestylePrePrompt:a,budget:o,desktop:s,notifications:c,webhooks:l,terminal:u,codeSection:d,appearance:f,mobile:p,pairWeb:m,coreUpdate:h,appUpdate:g,projectDialog:_,integrationBranch:v};export{g as appUpdate,f as appearance,o as budget,d as codeSection,h as coreUpdate,y as default,s as desktop,n as errors,a as freestylePrePrompt,v as integrationBranch,e as language,p as mobile,c as notifications,t as page,m as pairWeb,i as prePrompt,_ as projectDialog,r as telemetry,u as terminal,l as webhooks};
@@ -1 +1 @@
1
- var e={title:`语言`,description:`Desktop 全局界面语言。即时生效,无需重启。`,selectLabel:`界面语言`,updateFailed:`无法保存语言偏好`},t={title:`项目设置`},n={saveFailed:`保存失败:{{message}}`},r={title:`流水线遥测`,description:`采集 token 用量、阶段耗时和子 Agent 活动以供诊断导出。默认关闭。`,toggleLabel:`启用流水线遥测`,toggleDescription:`开启后,流水线任务的 OTEL 数据将在本地采集。在任意任务卡片上使用<mono>导出诊断</mono>按钮即可下载。`,enabled:`已启用流水线遥测`,disabled:`已禁用流水线遥测`,saveFailed:`保存遥测设置失败`},i={title:`Rail 前置提示词`,description:`追加到 implement 与 batch-implement rail 任务中的项目专属附加指令,位于工单上下文之后、开始执行之前。`,label:`前置提示词`,placeholder:`示例:优先采用增量修改,保持迁移向后兼容,并为每次 rail 变更添加测试。`,helper:`用于应随每次 rail 实现运行附带的稳定项目指引。`,saveButton:`保存前置提示词`,cleared:`前置提示词已清除`,saved:`前置提示词已保存`,saveFailed:`保存前置提示词失败`},a={title:`Freestyle 前置提示词`,description:`在 Freestyle(仅限 Claude 的 rail)模式下发送给 Claude 的指令。Freestyle 跳过 OpenSpec 流水线——直接把该前置提示词加上 spec 文本交给 Claude,让其自主实现。留空则使用内置默认值。`,label:`Freestyle 前置提示词`,placeholder:`留空以使用默认的 Freestyle 指令。`,helper:`spec 文本会自动追加在该前置提示词之后。留空 = 使用默认值。`,saveButton:`保存 Freestyle 前置提示词`,resetToDefault:`Freestyle 前置提示词已重置为默认值`,saved:`Freestyle 前置提示词已保存`,saveFailed:`保存 Freestyle 前置提示词失败`},o={title:`预算`,description:`为此项目设置每日支出上限。达到上限时队列自动暂停。`,dailyLabel:`每日预算(USD)`,dailyHelper:`留空表示禁用。支出按最近 24 小时计算。`,dailyPlaceholder:`如 5.00`,perJobLabel:`单任务成本告警(USD)`,perJobHelper:`当此项目中的单个任务超过此金额时告警。`,perJobPlaceholder:`如 0.50`,invalidNumber:`请输入正数,或留空以禁用`,dailyRemoved:`已移除每日预算`,dailySet:"每日预算已设为 ${{amount}}",perJobAlertDisabled:`已禁用单任务成本告警`,alertSet:"已设置任务超过 ${{amount}} 时告警",saveBudgetFailed:`保存预算失败`,saveThresholdFailed:`保存阈值失败`},s={nav:{appearance:`外观`,code:`代码`,terminal:`终端`,updates:`更新`,mobile:`移动端`,mcp:`MCP`,projects:`项目`,advanced:`高级`,webhooks:`Webhooks`,about:`关于`},title:`Desktop 设置`,description:`管理已注册的项目并查看 Desktop 信息。`,registeredProjects:`已注册项目`,noProjects:`尚未注册任何项目`,techUrlDescription:`specrails-tech API 的基础 URL(默认:http://localhost:3000)`,techUrlSaved:`specrails-tech URL 已保存`,techUrlSaveFailed:`保存 URL 失败`,budgetAlertsHeading:`预算与告警`,dailyBudgetLabel:`Desktop 每日预算(USD)`,dailyBudgetHelper:`所有项目的全局每日支出上限。超出后队列自动暂停。`,dailyBudgetPlaceholder:`如 10.00`,perJobHelper:`当单个任务超过此金额时告警。留空表示禁用。`,costAlertsDisabled:`已禁用成本告警`,dailyBudgetRemoved:`已移除 Desktop 每日预算`,dailyBudgetSet:"Desktop 每日预算已设为 ${{amount}}",dailyBudgetSaveFailed:`保存 Desktop 每日预算失败`,projectRemoved:`项目已移除`,projectRemoveFailed:`移除项目失败`,onboardingHeading:`新手引导`,platformTour:`平台导览`,platformTourDescription:`重播欢迎向导,回顾核心功能。`,replayTour:`重播导览`,terminalPanelHeading:`终端面板`,infoHeading:`Desktop 信息`,infoPort:`端口`,infoProjects:`项目`,infoDb:`Desktop 数据库`},c={heading:`系统通知`,description:`任务完成或失败时显示原生桌面通知。仅在标签页未聚焦时显示通知。`,enableLabel:`启用系统通知`,notifyOn:`通知时机:`,filterAll:`全部(完成与失败)`,filterCompleted:`仅完成`,filterFailed:`仅失败`,enabledToast:`已启用系统通知`,disabledToast:`已禁用系统通知`},l={heading:`出站 Webhook`,description:`在 Desktop 事件发生时通知外部工具(Slack、Zapier、CI/CD)。设置密钥后,请求会通过 <code>X-Specrails-Signature</code> 进行签名。`,eventJobCompleted:`任务完成`,eventJobFailed:`任务失败`,eventDailyBudgetExceeded:`超出每日预算`,statusOn:`开`,statusOff:`关`,disable:`禁用`,enable:`启用`,sendTestPing:`发送测试 ping`,addHeading:`添加 Webhook`,secretPlaceholder:`签名密钥(可选)`,addButton:`添加 Webhook`,urlRequired:`URL 为必填项`,selectEvent:`请至少选择一个事件`,added:`Webhook 已添加`,addFailed:`添加 Webhook 失败`,updateFailed:`更新 Webhook 失败`,removed:`Webhook 已移除`,removeFailed:`移除 Webhook 失败`,testPingSent:`测试 ping 已发送`,testPingFailed:`发送测试 ping 失败`},u={title:`终端面板`,desktopDescription:`Desktop 全局默认值,应用于所有项目,除非设置了项目级覆盖。`,projectDescription:`终端面板的项目级覆盖。保持字段不变即继承 Desktop 默认值。`,fontFamily:`字体`,fontSize:`字号({{min}}–{{max}})`,renderMode:`渲染模式`,copyOnSelect:`选中即复制`,shellIntegration:`Shell 集成(OSC 133 标记)`,notifyLongRunning:`长耗时命令通知`,longCommandThreshold:`长命令阈值(ms)`,imageRendering:`内联图片渲染(Sixel + iTerm2)`,browserShortcutUrl:`浏览器快捷方式 URL`,quickScript:`快捷脚本(粘贴到活动终端——需手动按 Enter)`,reset:`重置`,unsavedChanges:`有未保存的更改`,clearOverride:`清除覆盖`,clear:`清除`,inheritingDefault:`正在继承 Desktop 默认值`,nothingToSave:`没有可保存的内容`,saved:`终端设置已保存`},d={heading:`代码板块`,summaryLanguage:`摘要语言`,monthlyBudget:`每月预算(USD)`,budgetHelper:"每个自然月 `surface=file-summary` 支出的上限。用户手动发起的重新生成可超出此限制。"},f={taglines:{dracula:`经典原版 — 紫色调暗色主题,霓虹色点缀鲜明`,"aurora-light":`高级浅色 — 受 Linear 启发的靛蓝配暖白底色`,"obsidian-dark":`高级深色 — 近黑蓝调配电光色点缀`,matrix:`磷光终端 — 绿黑底色上的柔和薄荷绿`,specrails:`品牌主题 — 深海军靛蓝配饱和青色点缀`},heading:`外观`,themeGroupLabel:`主题`,currentlyActive:`当前使用中`,updateFailed:`更新主题失败`},p={heading:`移动伴侣`,description:`通过手机上的 SpecRails Companion 应用控制 Specrails,完全经由本地网络。默认关闭。`,accessOn:`移动访问已开启`,accessOff:`移动访问已关闭`,listeningOnPort:`正在监听端口 {{port}}`,notListening:`未在监听`,turnOn:`开启`,turnOff:`关闭`,pairWebDevice:`配对网页伴侣`,reset:`重置`,resetConfirm:`确定要重置移动身份吗?所有已配对设备都将被吊销,必须重新配对。`,identityReset:`移动身份已重置`,enableFailed:`无法启用移动访问:{{message}}`,disableFailed:`无法禁用移动访问:{{message}}`,windowsFirewall:`首次启用时,Windows 防火墙会询问是否允许 SpecRails 服务器——请选择“允许在专用网络上”。`,pairedDevices:`已配对设备`,noDevices:`尚无已配对设备。`,revokeDevice:`吊销 {{name}}`},m={title:`配对网页伴侣`,description:`在手机上打开 specrails.dev/companion-app,然后用它扫描此二维码。`,startFailed:`无法开始配对:{{error}}`,showThenScan:`手机扫描此码后,点按“扫描手机的二维码”,并将摄像头对准手机。`,scanAnswer:`扫描手机的二维码`,scanning:`请将摄像头对准手机上的二维码…`,cameraFailed:`摄像头不可用:{{message}}`,notAnswer:`该二维码不是配对应答。`,connecting:`正在连接…`,paired:`✓ 已配对`,pairedToast:`网页伴侣已配对`,answerRejected:`桌面端拒绝了该码。请重新生成一个并重试。`,copyCode:`复制配对码`,codeCopied:`配对码已复制`,cancel:`取消`},h={heading:`Specrails Core`,installed:`已安装:`,updateAvailable:`有可用更新:{{version}}`,upToDate:`已是最新`,neverChecked:`尚未检查`,check:`检查更新`,checking:`检查中…`,update:`更新到 {{version}}`,downloading:`下载中…`,materializing:`安装中…`,affectsAll:`适用于所有项目 — 无需重启。`,unavailable:`此版本不支持核心更新。`,toastDone:`Specrails Core 已更新到 {{version}}`,toastError:`核心更新失败:{{message}}`,toastUpToDate:`Specrails Core 已是最新`,toastCheckFailed:`检查更新失败:{{message}}`},g={heading:`Specrails Desktop`,installed:`已安装:`,check:`检查更新`,checking:`检查中…`,upToDate:`已是最新版本`,updateAvailable:`有可用更新: {{version}}`,autoHint:`启动时及每 6 小时自动检查。`,unavailable:`更新仅在桌面应用中可用。`,toastUpToDate:`Specrails Desktop 已是最新`,toastCheckFailed:`检查更新失败: {{message}}`},_={title:`{{name}} — 设置`,description:`项目级配置:提示词、预算、遥测和终端。`,nav:{general:`常规`,budget:`预算`,telemetry:`遥测`,terminal:`终端`}},v={title:`集成分支`,description:`并行 rail 从此分支创建,其草稿 PR 也以此为目标。留空则自动解析为仓库的默认分支。`,placeholder:`自动(仓库默认分支)`,resolved:`Rail 从 <mono>{{branch}}</mono> 创建分支`,save:`保存分支`,saved:`集成分支已保存`,saveFailed:`无法保存集成分支`},y={language:e,page:t,errors:n,telemetry:r,prePrompt:i,ultraPrePrompt:a,budget:o,desktop:s,notifications:c,webhooks:l,terminal:u,codeSection:d,appearance:f,mobile:p,pairWeb:m,coreUpdate:h,appUpdate:g,projectDialog:_,integrationBranch:v};export{g as appUpdate,f as appearance,o as budget,d as codeSection,h as coreUpdate,y as default,s as desktop,n as errors,v as integrationBranch,e as language,p as mobile,c as notifications,t as page,m as pairWeb,i as prePrompt,_ as projectDialog,r as telemetry,u as terminal,a as ultraPrePrompt,l as webhooks};
1
+ var e={title:`语言`,description:`Desktop 全局界面语言。即时生效,无需重启。`,selectLabel:`界面语言`,updateFailed:`无法保存语言偏好`},t={title:`项目设置`},n={saveFailed:`保存失败:{{message}}`},r={title:`流水线遥测`,description:`采集 token 用量、阶段耗时和子 Agent 活动以供诊断导出。默认关闭。`,toggleLabel:`启用流水线遥测`,toggleDescription:`开启后,流水线任务的 OTEL 数据将在本地采集。在任意任务卡片上使用<mono>导出诊断</mono>按钮即可下载。`,enabled:`已启用流水线遥测`,disabled:`已禁用流水线遥测`,saveFailed:`保存遥测设置失败`},i={title:`Rail 前置提示词`,description:`追加到 implement 与 batch-implement rail 任务中的项目专属附加指令,位于工单上下文之后、开始执行之前。`,label:`前置提示词`,placeholder:`示例:优先采用增量修改,保持迁移向后兼容,并为每次 rail 变更添加测试。`,helper:`用于应随每次 rail 实现运行附带的稳定项目指引。`,saveButton:`保存前置提示词`,cleared:`前置提示词已清除`,saved:`前置提示词已保存`,saveFailed:`保存前置提示词失败`},a={title:`Freestyle 前置提示词`,description:`在 Freestyle(仅限 Claude 的 rail)模式下发送给 Claude 的指令。Freestyle 跳过 OpenSpec 流水线——直接把该前置提示词加上 spec 文本交给 Claude,让其自主实现。留空则使用内置默认值。`,label:`Freestyle 前置提示词`,placeholder:`留空以使用默认的 Freestyle 指令。`,helper:`spec 文本会自动追加在该前置提示词之后。留空 = 使用默认值。`,saveButton:`保存 Freestyle 前置提示词`,resetToDefault:`Freestyle 前置提示词已重置为默认值`,saved:`Freestyle 前置提示词已保存`,saveFailed:`保存 Freestyle 前置提示词失败`},o={title:`预算`,description:`为此项目设置每日支出上限。达到上限时队列自动暂停。`,dailyLabel:`每日预算(USD)`,dailyHelper:`留空表示禁用。支出按最近 24 小时计算。`,dailyPlaceholder:`如 5.00`,perJobLabel:`单任务成本告警(USD)`,perJobHelper:`当此项目中的单个任务超过此金额时告警。`,perJobPlaceholder:`如 0.50`,invalidNumber:`请输入正数,或留空以禁用`,dailyRemoved:`已移除每日预算`,dailySet:"每日预算已设为 ${{amount}}",perJobAlertDisabled:`已禁用单任务成本告警`,alertSet:"已设置任务超过 ${{amount}} 时告警",saveBudgetFailed:`保存预算失败`,saveThresholdFailed:`保存阈值失败`},s={nav:{appearance:`外观`,code:`代码`,terminal:`终端`,updates:`更新`,mobile:`移动端`,mcp:`MCP`,projects:`项目`,advanced:`高级`,webhooks:`Webhooks`,about:`关于`},title:`Desktop 设置`,description:`管理已注册的项目并查看 Desktop 信息。`,registeredProjects:`已注册项目`,noProjects:`尚未注册任何项目`,techUrlDescription:`specrails-tech API 的基础 URL(默认:http://localhost:3000)`,techUrlSaved:`specrails-tech URL 已保存`,techUrlSaveFailed:`保存 URL 失败`,budgetAlertsHeading:`预算与告警`,dailyBudgetLabel:`Desktop 每日预算(USD)`,dailyBudgetHelper:`所有项目的全局每日支出上限。超出后队列自动暂停。`,dailyBudgetPlaceholder:`如 10.00`,perJobHelper:`当单个任务超过此金额时告警。留空表示禁用。`,costAlertsDisabled:`已禁用成本告警`,dailyBudgetRemoved:`已移除 Desktop 每日预算`,dailyBudgetSet:"Desktop 每日预算已设为 ${{amount}}",dailyBudgetSaveFailed:`保存 Desktop 每日预算失败`,projectRemoved:`项目已移除`,projectRemoveFailed:`移除项目失败`,onboardingHeading:`新手引导`,platformTour:`平台导览`,platformTourDescription:`重播欢迎向导,回顾核心功能。`,replayTour:`重播导览`,terminalPanelHeading:`终端面板`,infoHeading:`Desktop 信息`,infoPort:`端口`,infoProjects:`项目`,infoDb:`Desktop 数据库`},c={heading:`系统通知`,description:`任务完成或失败时显示原生桌面通知。仅在标签页未聚焦时显示通知。`,enableLabel:`启用系统通知`,notifyOn:`通知时机:`,filterAll:`全部(完成与失败)`,filterCompleted:`仅完成`,filterFailed:`仅失败`,enabledToast:`已启用系统通知`,disabledToast:`已禁用系统通知`},l={heading:`出站 Webhook`,description:`在 Desktop 事件发生时通知外部工具(Slack、Zapier、CI/CD)。设置密钥后,请求会通过 <code>X-Specrails-Signature</code> 进行签名。`,eventJobCompleted:`任务完成`,eventJobFailed:`任务失败`,eventDailyBudgetExceeded:`超出每日预算`,statusOn:`开`,statusOff:`关`,disable:`禁用`,enable:`启用`,sendTestPing:`发送测试 ping`,addHeading:`添加 Webhook`,secretPlaceholder:`签名密钥(可选)`,addButton:`添加 Webhook`,urlRequired:`URL 为必填项`,selectEvent:`请至少选择一个事件`,added:`Webhook 已添加`,addFailed:`添加 Webhook 失败`,updateFailed:`更新 Webhook 失败`,removed:`Webhook 已移除`,removeFailed:`移除 Webhook 失败`,testPingSent:`测试 ping 已发送`,testPingFailed:`发送测试 ping 失败`},u={title:`终端面板`,desktopDescription:`Desktop 全局默认值,应用于所有项目,除非设置了项目级覆盖。`,projectDescription:`终端面板的项目级覆盖。保持字段不变即继承 Desktop 默认值。`,fontFamily:`字体`,fontSize:`字号({{min}}–{{max}})`,renderMode:`渲染模式`,copyOnSelect:`选中即复制`,shellIntegration:`Shell 集成(OSC 133 标记)`,notifyLongRunning:`长耗时命令通知`,longCommandThreshold:`长命令阈值(ms)`,imageRendering:`内联图片渲染(Sixel + iTerm2)`,browserShortcutUrl:`浏览器快捷方式 URL`,quickScript:`快捷脚本(粘贴到活动终端——需手动按 Enter)`,reset:`重置`,unsavedChanges:`有未保存的更改`,clearOverride:`清除覆盖`,clear:`清除`,inheritingDefault:`正在继承 Desktop 默认值`,nothingToSave:`没有可保存的内容`,saved:`终端设置已保存`},d={heading:`代码板块`,summaryLanguage:`摘要语言`,monthlyBudget:`每月预算(USD)`,budgetHelper:"每个自然月 `surface=file-summary` 支出的上限。用户手动发起的重新生成可超出此限制。"},f={taglines:{dracula:`经典原版 — 紫色调暗色主题,霓虹色点缀鲜明`,"aurora-light":`高级浅色 — 受 Linear 启发的靛蓝配暖白底色`,"obsidian-dark":`高级深色 — 近黑蓝调配电光色点缀`,matrix:`磷光终端 — 绿黑底色上的柔和薄荷绿`,specrails:`品牌主题 — 深海军靛蓝配饱和青色点缀`},heading:`外观`,themeGroupLabel:`主题`,currentlyActive:`当前使用中`,updateFailed:`更新主题失败`},p={heading:`移动伴侣`,description:`通过手机上的 SpecRails Companion 应用控制 Specrails,完全经由本地网络。默认关闭。`,accessOn:`移动访问已开启`,accessOff:`移动访问已关闭`,listeningOnPort:`正在监听端口 {{port}}`,notListening:`未在监听`,turnOn:`开启`,turnOff:`关闭`,pairWebDevice:`配对网页伴侣`,reset:`重置`,resetConfirm:`确定要重置移动身份吗?所有已配对设备都将被吊销,必须重新配对。`,identityReset:`移动身份已重置`,enableFailed:`无法启用移动访问:{{message}}`,disableFailed:`无法禁用移动访问:{{message}}`,windowsFirewall:`首次启用时,Windows 防火墙会询问是否允许 SpecRails 服务器——请选择“允许在专用网络上”。`,pairedDevices:`已配对设备`,noDevices:`尚无已配对设备。`,revokeDevice:`吊销 {{name}}`},m={title:`配对网页伴侣`,description:`在手机上打开 specrails.dev/companion-app,然后用它扫描此二维码。`,startFailed:`无法开始配对:{{error}}`,showThenScan:`手机扫描此码后,点按“扫描手机的二维码”,并将摄像头对准手机。`,scanAnswer:`扫描手机的二维码`,scanning:`请将摄像头对准手机上的二维码…`,cameraFailed:`摄像头不可用:{{message}}`,notAnswer:`该二维码不是配对应答。`,connecting:`正在连接…`,paired:`✓ 已配对`,pairedToast:`网页伴侣已配对`,answerRejected:`桌面端拒绝了该码。请重新生成一个并重试。`,copyCode:`复制配对码`,codeCopied:`配对码已复制`,cancel:`取消`},h={heading:`Specrails Core`,installed:`已安装:`,updateAvailable:`有可用更新:{{version}}`,upToDate:`已是最新`,neverChecked:`尚未检查`,check:`检查更新`,checking:`检查中…`,update:`更新到 {{version}}`,downloading:`下载中…`,materializing:`安装中…`,affectsAll:`适用于所有项目 — 无需重启。`,unavailable:`此版本不支持核心更新。`,toastDone:`Specrails Core 已更新到 {{version}}`,toastError:`核心更新失败:{{message}}`,toastUpToDate:`Specrails Core 已是最新`,toastCheckFailed:`检查更新失败:{{message}}`},g={heading:`Specrails Desktop`,installed:`已安装:`,check:`检查更新`,checking:`检查中…`,upToDate:`已是最新版本`,updateAvailable:`有可用更新: {{version}}`,autoHint:`启动时及每 6 小时自动检查。`,unavailable:`更新仅在桌面应用中可用。`,toastUpToDate:`Specrails Desktop 已是最新`,toastCheckFailed:`检查更新失败: {{message}}`},_={title:`{{name}} — 设置`,description:`项目级配置:提示词、预算、遥测和终端。`,nav:{general:`常规`,budget:`预算`,telemetry:`遥测`,terminal:`终端`}},v={title:`集成分支`,description:`并行 rail 从此分支创建,其草稿 PR 也以此为目标。留空则自动解析为仓库的默认分支。`,placeholder:`自动(仓库默认分支)`,resolved:`Rail 从 <mono>{{branch}}</mono> 创建分支`,save:`保存分支`,saved:`集成分支已保存`,saveFailed:`无法保存集成分支`},y={language:e,page:t,errors:n,telemetry:r,prePrompt:i,freestylePrePrompt:a,budget:o,desktop:s,notifications:c,webhooks:l,terminal:u,codeSection:d,appearance:f,mobile:p,pairWeb:m,coreUpdate:h,appUpdate:g,projectDialog:_,integrationBranch:v};export{g as appUpdate,f as appearance,o as budget,d as codeSection,h as coreUpdate,y as default,s as desktop,n as errors,a as freestylePrePrompt,v as integrationBranch,e as language,p as mobile,c as notifications,t as page,m as pairWeb,i as prePrompt,_ as projectDialog,r as telemetry,u as terminal,l as webhooks};
@@ -1 +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`},mcpHint:`Ligue ferramentas de IA externas ao Specrails através de um servidor MCP local seguro — ative-o nas Definições.`,agentChatHint:`Opere o Specrails conversando — o agente integrado conduz toda a app por si. Abra-o pela bolha ou com ⌘⇧A.`},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`,optional:`opcional`,ghNoAuth:"Sem sessão — execute `gh auth login`"},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.`,mcpHint:`Ligue ferramentas de IA externas ao Specrails através de um servidor MCP local seguro — ative-o nas Definições.`,agentChatHint:`Opere o Specrails conversando — um agente integrado gere specs, rails e análises por si através do MCP local. Abra-o pela bolha ou com ⌘⇧A.`},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 um Loop para executar","modeBody":"Cada rail executa um <b>Loop</b>. Escolha um pré-definido — <b>Implement</b> (o pipeline estruturado completo), <b>Batch</b> (várias specs de uma vez) ou <b>Freestyle</b> (o Claude trabalha de forma autônoma, sem pipeline fixo) — ou um que você mesmo criou.","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.","loopsLabel":"Crie seus próprios loops","loopsBody":"<b>Loops</b> é um construtor visual: encadeie etapas de IA, comandos de shell e um <b>Loop Decider</b> que repete até que uma meta seja atingida — por exemplo, verificar → corrigir → verificar até que tudo esteja verde. Publique um loop e selecione-o em qualquer rail."},"agent":{"nav":"Chat do agente","title":"Opere a app conversando","subtitle":"Um copiloto que conduz o Specrails por si","intro":"O <b>chat do agente</b> integrado permite-lhe operar o Specrails perguntando — criar specs, lançar rails, consultar análises — em vez de andar a clicar. Funciona através das próprias ferramentas <b>MCP</b> do Specrails e, como tudo é ao vivo, vê o quadro a mudar enquanto ele trabalha.","openLabel":"Sempre a um clique","openBody":"Abra-o pela bolha flutuante em baixo, ou prima ⌘⇧A (Ctrl+Shift+A) a partir de qualquer lugar. O painel move-se, redimensiona-se, maximiza-se e lembra-se de onde o deixou.","operateLabel":"Conduz toda a app","operateBody":"Escolha um projeto (ou Início para tudo) e um fornecedor e basta pedir: “lança os três tickets de maior prioridade”, “quanto gastei esta semana?”.","levelsLabel":"As rédeas são suas","levelsBody":"Um nível ao vivo — <b>Observa → Edita → Opera → Autônomo</b>, alternado com Shift+Tab — decide até onde ele pode ir. Nunca age acima do nível que definir.","watchLabel":"Veja acontecer","watchBody":"O painel não é modal, por isso os rails e as specs aparecem no dashboard em tempo real enquanto o agente trabalha. Um chip de estado mostra o que está a fazer neste momento.","mcpLabel":"Funciona sobre o MCP local","mcpBody":"O agente conduz a app através do servidor MCP integrado do Specrails. Se estiver desligado, o painel oferece ativá-lo com um clique — nada é instalado."},"providers":{"nav":"O seu agente","title":"Traga o seu próprio agente","subtitle":"Claude Code, Codex e Gemini como motores de primeira classe","intro":"A app trata o <b>Claude Code</b>, o <b>Codex CLI</b> e o <b>Gemini CLI</b> como motores intercambiáveis sob o mesmo contrato. Um projeto pode instalar um ou vários — 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 há vários 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};
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`},mcpHint:`Ligue ferramentas de IA externas ao Specrails através de um servidor MCP local seguro — ative-o nas Definições.`,agentChatHint:`Opere o Specrails conversando — o agente integrado conduz toda a app por si. Abra-o pela bolha ou com ⌘⇧A.`},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`,optional:`opcional`,ghNoAuth:"Sem sessão — execute `gh auth login`"},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.`,mcpHint:`Ligue ferramentas de IA externas ao Specrails através de um servidor MCP local seguro — ative-o nas Definições.`,agentChatHint:`Opere o Specrails conversando — um agente integrado gere specs, rails e análises por si através do MCP local. Abra-o pela bolha ou com ⌘⇧A.`},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 um Loop para executar","modeBody":"Cada rail executa um <b>Loop</b>. Escolha um pré-definido — <b>Implement</b> (o pipeline estruturado completo), <b>Batch</b> (várias specs de uma vez) ou <b>Freestyle</b> (o Claude trabalha de forma autônoma, sem pipeline fixo) — ou um que você mesmo criou.","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.","loopsLabel":"Crie seus próprios loops","loopsBody":"<b>Loops</b> é um construtor visual: encadeie etapas de IA, comandos de shell e um <b>Loop Decider</b> que repete até que uma meta seja atingida — por exemplo, verificar → corrigir → verificar até que tudo esteja verde. Publique um loop e selecione-o em qualquer rail."},"agent":{"nav":"Chat do agente","title":"Opere a app conversando","subtitle":"Um copiloto que conduz o Specrails por si","intro":"O <b>chat do agente</b> integrado permite-lhe operar o Specrails perguntando — criar specs, lançar rails, consultar análises — em vez de andar a clicar. Funciona através das próprias ferramentas <b>MCP</b> do Specrails e, como tudo é ao vivo, vê o quadro a mudar enquanto ele trabalha.","openLabel":"Sempre a um clique","openBody":"Abra-o pela bolha flutuante em baixo, ou prima ⌘⇧A (Ctrl+Shift+A) a partir de qualquer lugar. O painel move-se, redimensiona-se, maximiza-se e lembra-se de onde o deixou.","operateLabel":"Conduz toda a app","operateBody":"Escolha um projeto (ou Início para tudo) e um fornecedor e basta pedir: “lança os três tickets de maior prioridade”, “quanto gastei esta semana?”.","levelsLabel":"As rédeas são suas","levelsBody":"Um nível ao vivo — <b>Observa → Edita → Opera → Autônomo</b>, alternado com Shift+Tab — decide até onde ele pode ir. Nunca age acima do nível que definir.","watchLabel":"Veja acontecer","watchBody":"O painel não é modal, por isso os rails e as specs aparecem no dashboard em tempo real enquanto o agente trabalha. Um chip de estado mostra o que está a fazer neste momento.","mcpLabel":"Funciona sobre o MCP local","mcpBody":"O agente conduz a app através do servidor MCP integrado do Specrails. Se estiver desligado, o painel oferece ativá-lo com um clique — nada é instalado."},"providers":{"nav":"O seu agente","title":"Traga o seu próprio agente","subtitle":"Claude Code, Codex e Gemini como motores de primeira classe","intro":"A app trata o <b>Claude Code</b>, o <b>Codex CLI</b> e o <b>Gemini CLI</b> como motores intercambiáveis sob o mesmo contrato. Um projeto pode instalar um ou vários — 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 há vários 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 freestylepassa 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};
@@ -1 +1 @@
1
- import{gn as e}from"./index-B0fq5d1Z.js";var t=e(`upload`,[[`path`,{d:`M12 3v12`,key:`1x0j5s`}],[`path`,{d:`m17 8-5-5-5 5`,key:`7q97r8`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}]]);export{t};
1
+ import{gn as e}from"./index-DnkfABxY.js";var t=e(`upload`,[[`path`,{d:`M12 3v12`,key:`1x0j5s`}],[`path`,{d:`m17 8-5-5-5 5`,key:`7q97r8`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}]]);export{t};
@@ -1 +1 @@
1
- import{t as e}from"./chunk-BNv3lrIs.js";import{Kn as t,zn as n}from"./index-B0fq5d1Z.js";var r=e((e=>{var r=t(),i=n();function a(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var o=typeof Object.is==`function`?Object.is:a,s=i.useSyncExternalStore,c=r.useRef,l=r.useEffect,u=r.useMemo,d=r.useDebugValue;e.useSyncExternalStoreWithSelector=function(e,t,n,r,i){var a=c(null);if(a.current===null){var f={hasValue:!1,value:null};a.current=f}else f=a.current;a=u(function(){function e(e){if(!a){if(a=!0,s=e,e=r(e),i!==void 0&&f.hasValue){var t=f.value;if(i(t,e))return c=t}return c=e}if(t=c,o(s,e))return t;var n=r(e);return i!==void 0&&i(t,n)?(s=e,t):(s=e,c=n)}var a=!1,s,c,l=n===void 0?null:n;return[function(){return e(t())},l===null?void 0:function(){return e(l())}]},[t,n,r,i]);var p=s(e,a[0],a[1]);return l(function(){f.hasValue=!0,f.value=p},[p]),d(p),p}})),i=e(((e,t)=>{t.exports=r()}));function a(e,t,n){e.prototype=t.prototype=n,n.constructor=e}function o(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function s(){}var c=.7,l=1/c,u=`\\s*([+-]?\\d+)\\s*`,d=`\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*`,f=`\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*`,p=/^#([0-9a-f]{3,8})$/,m=RegExp(`^rgb\\(${u},${u},${u}\\)$`),h=RegExp(`^rgb\\(${f},${f},${f}\\)$`),ee=RegExp(`^rgba\\(${u},${u},${u},${d}\\)$`),g=RegExp(`^rgba\\(${f},${f},${f},${d}\\)$`),_=RegExp(`^hsl\\(${d},${f},${f}\\)$`),v=RegExp(`^hsla\\(${d},${f},${f},${d}\\)$`),y={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};a(s,C,{copy(e){return Object.assign(new this.constructor,this,e)},displayable(){return this.rgb().displayable()},hex:b,formatHex:b,formatHex8:x,formatHsl:te,formatRgb:S,toString:S});function b(){return this.rgb().formatHex()}function x(){return this.rgb().formatHex8()}function te(){return I(this).formatHsl()}function S(){return this.rgb().formatRgb()}function C(e){var t,n;return e=(e+``).trim().toLowerCase(),(t=p.exec(e))?(n=t[1].length,t=parseInt(t[1],16),n===6?w(t):n===3?new O(t>>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?T(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?T(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=m.exec(e))?new O(t[1],t[2],t[3],1):(t=h.exec(e))?new O(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=ee.exec(e))?T(t[1],t[2],t[3],t[4]):(t=g.exec(e))?T(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=_.exec(e))?F(t[1],t[2]/100,t[3]/100,1):(t=v.exec(e))?F(t[1],t[2]/100,t[3]/100,t[4]):y.hasOwnProperty(e)?w(y[e]):e===`transparent`?new O(NaN,NaN,NaN,0):null}function w(e){return new O(e>>16&255,e>>8&255,e&255,1)}function T(e,t,n,r){return r<=0&&(e=t=n=NaN),new O(e,t,n,r)}function E(e){return e instanceof s||(e=C(e)),e?(e=e.rgb(),new O(e.r,e.g,e.b,e.opacity)):new O}function D(e,t,n,r){return arguments.length===1?E(e):new O(e,t,n,r??1)}function O(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}a(O,D,o(s,{brighter(e){return e=e==null?l:l**+e,new O(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?c:c**+e,new O(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new O(N(this.r),N(this.g),N(this.b),M(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:k,formatHex:k,formatHex8:A,formatRgb:j,toString:j}));function k(){return`#${P(this.r)}${P(this.g)}${P(this.b)}`}function A(){return`#${P(this.r)}${P(this.g)}${P(this.b)}${P((isNaN(this.opacity)?1:this.opacity)*255)}`}function j(){let e=M(this.opacity);return`${e===1?`rgb(`:`rgba(`}${N(this.r)}, ${N(this.g)}, ${N(this.b)}${e===1?`)`:`, ${e})`}`}function M(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function N(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function P(e){return e=N(e),(e<16?`0`:``)+e.toString(16)}function F(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new R(e,t,n,r)}function I(e){if(e instanceof R)return new R(e.h,e.s,e.l,e.opacity);if(e instanceof s||(e=C(e)),!e)return new R;if(e instanceof R)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),a=Math.max(t,n,r),o=NaN,c=a-i,l=(a+i)/2;return c?(o=t===a?(n-r)/c+(n<r)*6:n===a?(r-t)/c+2:(t-n)/c+4,c/=l<.5?a+i:2-a-i,o*=60):c=l>0&&l<1?0:o,new R(o,c,l,e.opacity)}function L(e,t,n,r){return arguments.length===1?I(e):new R(e,t,n,r??1)}function R(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}a(R,L,o(s,{brighter(e){return e=e==null?l:l**+e,new R(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?c:c**+e,new R(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new O(V(e>=240?e-240:e+120,i,r),V(e,i,r),V(e<120?e+240:e-120,i,r),this.opacity)},clamp(){return new R(z(this.h),B(this.s),B(this.l),M(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let e=M(this.opacity);return`${e===1?`hsl(`:`hsla(`}${z(this.h)}, ${B(this.s)*100}%, ${B(this.l)*100}%${e===1?`)`:`, ${e})`}`}}));function z(e){return e=(e||0)%360,e<0?e+360:e}function B(e){return Math.max(0,Math.min(1,e||0))}function V(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}var H=e=>()=>e;function U(e,t){return function(n){return e+n*t}}function W(e,t,n){return e**=+n,t=t**+n-e,n=1/n,function(r){return(e+r*t)**+n}}function G(e){return(e=+e)==1?K:function(t,n){return n-t?W(t,n,e):H(isNaN(t)?n:t)}}function K(e,t){var n=t-e;return n?U(e,n):H(isNaN(e)?t:e)}var q=(function e(t){var n=G(t);function r(e,t){var r=n((e=D(e)).r,(t=D(t)).r),i=n(e.g,t.g),a=n(e.b,t.b),o=K(e.opacity,t.opacity);return function(t){return e.r=r(t),e.g=i(t),e.b=a(t),e.opacity=o(t),e+``}}return r.gamma=e,r})(1);function J(e,t){t||=[];var n=e?Math.min(t.length,e.length):0,r=t.slice(),i;return function(a){for(i=0;i<n;++i)r[i]=e[i]*(1-a)+t[i]*a;return r}}function ne(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function re(e,t){var n=t?t.length:0,r=e?Math.min(n,e.length):0,i=Array(r),a=Array(n),o;for(o=0;o<r;++o)i[o]=$(e[o],t[o]);for(;o<n;++o)a[o]=t[o];return function(e){for(o=0;o<r;++o)a[o]=i[o](e);return a}}function ie(e,t){var n=new Date;return e=+e,t=+t,function(r){return n.setTime(e*(1-r)+t*r),n}}function Y(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}function ae(e,t){var n={},r={},i;for(i in(typeof e!=`object`||!e)&&(e={}),(typeof t!=`object`||!t)&&(t={}),t)i in e?n[i]=$(e[i],t[i]):r[i]=t[i];return function(e){for(i in n)r[i]=n[i](e);return r}}var X=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Z=new RegExp(X.source,`g`);function oe(e){return function(){return e}}function se(e){return function(t){return e(t)+``}}function Q(e,t){var n=X.lastIndex=Z.lastIndex=0,r,i,a,o=-1,s=[],c=[];for(e+=``,t+=``;(r=X.exec(e))&&(i=Z.exec(t));)(a=i.index)>n&&(a=t.slice(n,a),s[o]?s[o]+=a:s[++o]=a),(r=r[0])===(i=i[0])?s[o]?s[o]+=i:s[++o]=i:(s[++o]=null,c.push({i:o,x:Y(r,i)})),n=Z.lastIndex;return n<t.length&&(a=t.slice(n),s[o]?s[o]+=a:s[++o]=a),s.length<2?c[0]?se(c[0].x):oe(t):(t=c.length,function(e){for(var n=0,r;n<t;++n)s[(r=c[n]).i]=r.x(e);return s.join(``)})}function $(e,t){var n=typeof t,r;return t==null||n===`boolean`?H(t):(n===`number`?Y:n===`string`?(r=C(t))?(t=r,q):Q:t instanceof C?q:t instanceof Date?ie:ne(t)?J:Array.isArray(t)?re:typeof t.valueOf!=`function`&&typeof t.toString!=`function`||isNaN(t)?ae:Y)(e,t)}export{C as a,q as i,Q as n,i as o,Y as r,$ as t};
1
+ import{t as e}from"./chunk-BNv3lrIs.js";import{Kn as t,zn as n}from"./index-DnkfABxY.js";var r=e((e=>{var r=t(),i=n();function a(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var o=typeof Object.is==`function`?Object.is:a,s=i.useSyncExternalStore,c=r.useRef,l=r.useEffect,u=r.useMemo,d=r.useDebugValue;e.useSyncExternalStoreWithSelector=function(e,t,n,r,i){var a=c(null);if(a.current===null){var f={hasValue:!1,value:null};a.current=f}else f=a.current;a=u(function(){function e(e){if(!a){if(a=!0,s=e,e=r(e),i!==void 0&&f.hasValue){var t=f.value;if(i(t,e))return c=t}return c=e}if(t=c,o(s,e))return t;var n=r(e);return i!==void 0&&i(t,n)?(s=e,t):(s=e,c=n)}var a=!1,s,c,l=n===void 0?null:n;return[function(){return e(t())},l===null?void 0:function(){return e(l())}]},[t,n,r,i]);var p=s(e,a[0],a[1]);return l(function(){f.hasValue=!0,f.value=p},[p]),d(p),p}})),i=e(((e,t)=>{t.exports=r()}));function a(e,t,n){e.prototype=t.prototype=n,n.constructor=e}function o(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function s(){}var c=.7,l=1/c,u=`\\s*([+-]?\\d+)\\s*`,d=`\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*`,f=`\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*`,p=/^#([0-9a-f]{3,8})$/,m=RegExp(`^rgb\\(${u},${u},${u}\\)$`),h=RegExp(`^rgb\\(${f},${f},${f}\\)$`),ee=RegExp(`^rgba\\(${u},${u},${u},${d}\\)$`),g=RegExp(`^rgba\\(${f},${f},${f},${d}\\)$`),_=RegExp(`^hsl\\(${d},${f},${f}\\)$`),v=RegExp(`^hsla\\(${d},${f},${f},${d}\\)$`),y={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};a(s,C,{copy(e){return Object.assign(new this.constructor,this,e)},displayable(){return this.rgb().displayable()},hex:b,formatHex:b,formatHex8:x,formatHsl:te,formatRgb:S,toString:S});function b(){return this.rgb().formatHex()}function x(){return this.rgb().formatHex8()}function te(){return I(this).formatHsl()}function S(){return this.rgb().formatRgb()}function C(e){var t,n;return e=(e+``).trim().toLowerCase(),(t=p.exec(e))?(n=t[1].length,t=parseInt(t[1],16),n===6?w(t):n===3?new O(t>>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?T(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?T(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=m.exec(e))?new O(t[1],t[2],t[3],1):(t=h.exec(e))?new O(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=ee.exec(e))?T(t[1],t[2],t[3],t[4]):(t=g.exec(e))?T(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=_.exec(e))?F(t[1],t[2]/100,t[3]/100,1):(t=v.exec(e))?F(t[1],t[2]/100,t[3]/100,t[4]):y.hasOwnProperty(e)?w(y[e]):e===`transparent`?new O(NaN,NaN,NaN,0):null}function w(e){return new O(e>>16&255,e>>8&255,e&255,1)}function T(e,t,n,r){return r<=0&&(e=t=n=NaN),new O(e,t,n,r)}function E(e){return e instanceof s||(e=C(e)),e?(e=e.rgb(),new O(e.r,e.g,e.b,e.opacity)):new O}function D(e,t,n,r){return arguments.length===1?E(e):new O(e,t,n,r??1)}function O(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}a(O,D,o(s,{brighter(e){return e=e==null?l:l**+e,new O(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?c:c**+e,new O(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new O(N(this.r),N(this.g),N(this.b),M(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:k,formatHex:k,formatHex8:A,formatRgb:j,toString:j}));function k(){return`#${P(this.r)}${P(this.g)}${P(this.b)}`}function A(){return`#${P(this.r)}${P(this.g)}${P(this.b)}${P((isNaN(this.opacity)?1:this.opacity)*255)}`}function j(){let e=M(this.opacity);return`${e===1?`rgb(`:`rgba(`}${N(this.r)}, ${N(this.g)}, ${N(this.b)}${e===1?`)`:`, ${e})`}`}function M(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function N(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function P(e){return e=N(e),(e<16?`0`:``)+e.toString(16)}function F(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new R(e,t,n,r)}function I(e){if(e instanceof R)return new R(e.h,e.s,e.l,e.opacity);if(e instanceof s||(e=C(e)),!e)return new R;if(e instanceof R)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),a=Math.max(t,n,r),o=NaN,c=a-i,l=(a+i)/2;return c?(o=t===a?(n-r)/c+(n<r)*6:n===a?(r-t)/c+2:(t-n)/c+4,c/=l<.5?a+i:2-a-i,o*=60):c=l>0&&l<1?0:o,new R(o,c,l,e.opacity)}function L(e,t,n,r){return arguments.length===1?I(e):new R(e,t,n,r??1)}function R(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}a(R,L,o(s,{brighter(e){return e=e==null?l:l**+e,new R(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?c:c**+e,new R(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new O(V(e>=240?e-240:e+120,i,r),V(e,i,r),V(e<120?e+240:e-120,i,r),this.opacity)},clamp(){return new R(z(this.h),B(this.s),B(this.l),M(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let e=M(this.opacity);return`${e===1?`hsl(`:`hsla(`}${z(this.h)}, ${B(this.s)*100}%, ${B(this.l)*100}%${e===1?`)`:`, ${e})`}`}}));function z(e){return e=(e||0)%360,e<0?e+360:e}function B(e){return Math.max(0,Math.min(1,e||0))}function V(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}var H=e=>()=>e;function U(e,t){return function(n){return e+n*t}}function W(e,t,n){return e**=+n,t=t**+n-e,n=1/n,function(r){return(e+r*t)**+n}}function G(e){return(e=+e)==1?K:function(t,n){return n-t?W(t,n,e):H(isNaN(t)?n:t)}}function K(e,t){var n=t-e;return n?U(e,n):H(isNaN(e)?t:e)}var q=(function e(t){var n=G(t);function r(e,t){var r=n((e=D(e)).r,(t=D(t)).r),i=n(e.g,t.g),a=n(e.b,t.b),o=K(e.opacity,t.opacity);return function(t){return e.r=r(t),e.g=i(t),e.b=a(t),e.opacity=o(t),e+``}}return r.gamma=e,r})(1);function J(e,t){t||=[];var n=e?Math.min(t.length,e.length):0,r=t.slice(),i;return function(a){for(i=0;i<n;++i)r[i]=e[i]*(1-a)+t[i]*a;return r}}function ne(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function re(e,t){var n=t?t.length:0,r=e?Math.min(n,e.length):0,i=Array(r),a=Array(n),o;for(o=0;o<r;++o)i[o]=$(e[o],t[o]);for(;o<n;++o)a[o]=t[o];return function(e){for(o=0;o<r;++o)a[o]=i[o](e);return a}}function ie(e,t){var n=new Date;return e=+e,t=+t,function(r){return n.setTime(e*(1-r)+t*r),n}}function Y(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}function ae(e,t){var n={},r={},i;for(i in(typeof e!=`object`||!e)&&(e={}),(typeof t!=`object`||!t)&&(t={}),t)i in e?n[i]=$(e[i],t[i]):r[i]=t[i];return function(e){for(i in n)r[i]=n[i](e);return r}}var X=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Z=new RegExp(X.source,`g`);function oe(e){return function(){return e}}function se(e){return function(t){return e(t)+``}}function Q(e,t){var n=X.lastIndex=Z.lastIndex=0,r,i,a,o=-1,s=[],c=[];for(e+=``,t+=``;(r=X.exec(e))&&(i=Z.exec(t));)(a=i.index)>n&&(a=t.slice(n,a),s[o]?s[o]+=a:s[++o]=a),(r=r[0])===(i=i[0])?s[o]?s[o]+=i:s[++o]=i:(s[++o]=null,c.push({i:o,x:Y(r,i)})),n=Z.lastIndex;return n<t.length&&(a=t.slice(n),s[o]?s[o]+=a:s[++o]=a),s.length<2?c[0]?se(c[0].x):oe(t):(t=c.length,function(e){for(var n=0,r;n<t;++n)s[(r=c[n]).i]=r.x(e);return s.join(``)})}function $(e,t){var n=typeof t,r;return t==null||n===`boolean`?H(t):(n===`number`?Y:n===`string`?(r=C(t))?(t=r,q):Q:t instanceof C?q:t instanceof Date?ie:ne(t)?J:Array.isArray(t)?re:typeof t.valueOf!=`function`&&typeof t.toString!=`function`||isNaN(t)?ae:Y)(e,t)}export{C as a,q as i,Q as n,i as o,Y as r,$ as t};
@@ -191,14 +191,14 @@
191
191
  .specrails-splash__mark .pill { opacity: 1; }
192
192
  }
193
193
  </style>
194
- <script type="module" crossorigin src="/assets/index-B0fq5d1Z.js"></script>
194
+ <script type="module" crossorigin src="/assets/index-DnkfABxY.js"></script>
195
195
  <link rel="modulepreload" crossorigin href="/assets/chunk-BNv3lrIs.js">
196
196
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-DSXbuxSR.js">
197
197
  <link rel="modulepreload" crossorigin href="/assets/clsx-CNmW0Nip.js">
198
198
  <link rel="modulepreload" crossorigin href="/assets/auth-Cvsb7-Ek.js">
199
199
  <link rel="modulepreload" crossorigin href="/assets/activity-D8vQJrpW.js">
200
200
  <link rel="modulepreload" crossorigin href="/assets/addspec-DxW6oPsk.js">
201
- <link rel="modulepreload" crossorigin href="/assets/agent-Cjiy_5TS.js">
201
+ <link rel="modulepreload" crossorigin href="/assets/agent-Bn6ZmjHj.js">
202
202
  <link rel="modulepreload" crossorigin href="/assets/agents-Cev2oFfX.js">
203
203
  <link rel="modulepreload" crossorigin href="/assets/agentstudio-CZm2rOzt.js">
204
204
  <link rel="modulepreload" crossorigin href="/assets/aiedit-DYtnZU9H.js">
@@ -209,20 +209,20 @@
209
209
  <link rel="modulepreload" crossorigin href="/assets/code-thSEptMx.js">
210
210
  <link rel="modulepreload" crossorigin href="/assets/commands-CckaBWdV.js">
211
211
  <link rel="modulepreload" crossorigin href="/assets/common-CYaT2yHp.js">
212
- <link rel="modulepreload" crossorigin href="/assets/dashboard-oqS7VRrK.js">
212
+ <link rel="modulepreload" crossorigin href="/assets/dashboard-Dwnssayh.js">
213
213
  <link rel="modulepreload" crossorigin href="/assets/explore-BKVV5JSu.js">
214
214
  <link rel="modulepreload" crossorigin href="/assets/integrations-CuWnMR5L.js">
215
215
  <link rel="modulepreload" crossorigin href="/assets/jira-B3613-gj.js">
216
216
  <link rel="modulepreload" crossorigin href="/assets/jobs-D5sZzgLs.js">
217
- <link rel="modulepreload" crossorigin href="/assets/loops-YYV2bwjd.js">
217
+ <link rel="modulepreload" crossorigin href="/assets/loops-Brnx4Fji.js">
218
218
  <link rel="modulepreload" crossorigin href="/assets/mcp-CIH0pH1K.js">
219
219
  <link rel="modulepreload" crossorigin href="/assets/nav-CzKzuwH8.js">
220
- <link rel="modulepreload" crossorigin href="/assets/settings-Mr7MnJbf.js">
220
+ <link rel="modulepreload" crossorigin href="/assets/settings-DXgPh9-k.js">
221
221
  <link rel="modulepreload" crossorigin href="/assets/setup-VNqXyB6Y.js">
222
222
  <link rel="modulepreload" crossorigin href="/assets/specs-CmEZY57v.js">
223
223
  <link rel="modulepreload" crossorigin href="/assets/terminal-DFPNRLKp.js">
224
224
  <link rel="modulepreload" crossorigin href="/assets/tickets-CkfbISuK.js">
225
- <link rel="stylesheet" crossorigin href="/assets/index-DZ2Beygz.css">
225
+ <link rel="stylesheet" crossorigin href="/assets/index-cvOunQkD.css">
226
226
  </head>
227
227
  <body>
228
228
  <div id="specrails-splash" aria-hidden="false" role="status" aria-label="Loading Specrails">
@@ -10,7 +10,7 @@
10
10
 
11
11
  La premisa ("`agy` es el sucesor oficial, no quiero construir sobre algo deprecado") es **correcta a medias y, para nuestro contrato concreto, lleva a la conclusión opuesta**:
12
12
 
13
- 1. **El sunset NO mata el path que nos interesa.** Verificado contra fuente primaria (Google Developers Blog, "Transitioning Gemini CLI to Antigravity CLI"). El 18-jun-2026 lo que deja de servirse son **las peticiones de los logins de suscripción consumer (AI Pro / Ultra) y el tier gratuito**. Literalmente: *"Gemini CLI and Gemini Code Assist IDE extensions will stop serving requests for Google AI Pro and Ultra, as well as those using it free of charge."* Pero el path que un servidor desatendido usaría — **`GEMINI_API_KEY` de pago / enterprise** — **sobrevive explícitamente**: *"Gemini CLI will remain accessible via paid Gemini and Gemini Enterprise Agent Platform API keys"* y *"We'll continue to support Gemini CLI ... with access to the latest Gemini models and other updates."* El repo `google-gemini/gemini-cli` está **vivo** (`archived:false`, último push 2026-06-17, releases activas v0.46.0 estable / v0.48.0-nightly).
13
+ 1. **El sunset NO mata el path que nos interesa.** Verificado contra fuente primaria (Google Developers Blog, "Transitioning Gemini CLI to Antigravity CLI"). El 18-jun-2026 lo que deja de servirse son **las peticiones de los logins de suscripción consumer (AI Pro / Freestyle) y el tier gratuito**. Literalmente: *"Gemini CLI and Gemini Code Assist IDE extensions will stop serving requests for Google AI Pro and Freestyle, as well as those using it free of charge."* Pero el path que un servidor desatendido usaría — **`GEMINI_API_KEY` de pago / enterprise** — **sobrevive explícitamente**: *"Gemini CLI will remain accessible via paid Gemini and Gemini Enterprise Agent Platform API keys"* y *"We'll continue to support Gemini CLI ... with access to the latest Gemini models and other updates."* El repo `google-gemini/gemini-cli` está **vivo** (`archived:false`, último push 2026-06-17, releases activas v0.46.0 estable / v0.48.0-nightly).
14
14
 
15
15
  2. **`agy` no satisface el contrato hoy, en ninguna de sus 5 patas críticas a la vez.** Verificado contra el issue tracker (todos OPEN, cero respuesta de Google, a 2026-06-17): `#76` (stdout 0 bytes en non-TTY → rompe la captura básica de subproceso), `#7` (el conversation/session id **nunca** se expone → no hay handle que capturar para `--resume`), `#31` (sin `--acp`/JSON-RPC), `#119`/`#394` (sin `--output-format json`/stream-json), `#78` (OAuth-only, sin auth por API-key headless). Además `#85` (cerrado sin fix shipado) muestra que en **macOS** — nuestro target de escritorio — un proceso en background re-pide login por el timeout de 1s del keyring. **Coste/tokens no se exponen en NINGÚN sitio** (ni stdout, ni transcript.jsonl, ni CLI): la pata `cost` del contrato es directamente irresoluble hoy.
16
16
 
package/docs/codex.md CHANGED
@@ -120,7 +120,7 @@ the [Gemini guide](gemini.md).)
120
120
  | **Agent format** | `.claude/agents/<id>.md` with `model:` frontmatter | `.codex/skills/<id>/SKILL.md` Skill format | `.gemini/` command + agent target |
121
121
  | **Agent profiles** | Full support (rail `RailProfileSelector`) | **None** — rails force the profile to `null` | **None** — rails force the profile to `null` |
122
122
  | **Pipeline rails** | ✅ all rail types | ✅ (except Freestyle) | ✅ (except Freestyle) |
123
- | **Freestyle rails** (mode `ultracode`) | ✅ Claude-only | ❌ rejected (`Freestyle requires the Claude provider`) | ❌ rejected |
123
+ | **Freestyle rails** (mode `freestyle`) | ✅ Claude-only | ❌ rejected (`Freestyle requires the Claude provider`) | ❌ rejected |
124
124
  | **Contract Refine** | Claude-only (it `--resume`s the Explore session and runs `/specrails:contract-refine`) | **Skipped** — toggling "Enrich with Contract Layer" is a no-op | **Skipped** |
125
125
  | **MCP registration** | Surgical merge of `<project>/.mcp.json` | `codex mcp add` against per-project `CODEX_HOME=~/.specrails/projects/<slug>/codex-home/` (isolated) | Project `.mcp.json` (so Serena-style plugins **do** resolve) |
126
126
  | **Session resume** | `--resume <session_id>` | `exec resume <thread_id>` | `--resume` |
@@ -135,7 +135,7 @@ A few Codex-specific behaviours worth calling out:
135
135
  rails need to apply edits across the repo — but it's worth knowing if
136
136
  you're surprised by a rail touching files outside the working tree.
137
137
  - **Freestyle rails are Claude-only.** Launching a Freestyle rail (mode
138
- `ultracode`) on a Codex (or Gemini) engine is rejected with a 400
138
+ `freestyle`) on a Codex (or Gemini) engine is rejected with a 400
139
139
  (`Freestyle requires the Claude provider`). Pick Claude for that rail.
140
140
 
141
141
  ## Estimated cost