@aiworker/web 1.23.1 → 1.23.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{CodeMirrorCommentWidgets-teB3HmBT.js → CodeMirrorCommentWidgets-COGJG0Iv.js} +1 -1
- package/dist/assets/{DiffView-DC9RX3MF.js → DiffView-BviYY3zL.js} +1 -1
- package/dist/assets/{DirtyBranchSwitchDialog-DwPkzXsS.js → DirtyBranchSwitchDialog-C26DvfVJ.js} +1 -1
- package/dist/assets/{FilesView-BFZkuu4O.js → FilesView-D0ZU_nCt.js} +1 -1
- package/dist/assets/{GitView-B_x52MHY.js → GitView-CYgiDRH-.js} +1 -1
- package/dist/assets/{JsonTreeView-cmAzUTiw.js → JsonTreeView-GsV9UScz.js} +1 -1
- package/dist/assets/{LinearIssuesView-Dehh5afm.js → LinearIssuesView-shqUS8nl.js} +1 -1
- package/dist/assets/{MarkdownImageGallery-DgNOqqhE.js → MarkdownImageGallery-CQSTFp6m.js} +1 -1
- package/dist/assets/{MarkdownRendererImpl-DusmMZ_p.js → MarkdownRendererImpl-DJWP3A8X.js} +1 -1
- package/dist/assets/{OnboardingScreen-B8fm1H4m.js → OnboardingScreen-CTuu4lgo.js} +1 -1
- package/dist/assets/{PatchDiff-BVr7gJU0.js → PatchDiff-Dp53v2pl.js} +1 -1
- package/dist/assets/{PierreDiffViewer-DzLt-nel.js → PierreDiffViewer-B5l0djPS.js} +1 -1
- package/dist/assets/{PlanView-BmQUYT_z.js → PlanView-CLUWkGiG.js} +1 -1
- package/dist/assets/{SettingsView-ChWmAcZT.js → SettingsView-CojPQVHx.js} +1 -1
- package/dist/assets/{SettingsWindow-Dy3M6ZB9.js → SettingsWindow-DbgEnZ6T.js} +1 -1
- package/dist/assets/{ToolOutputDialog-cTl_eLIH.js → ToolOutputDialog-Du-RZj-a.js} +1 -1
- package/dist/assets/{ToolPartDiffPreview-C_3iYNJQ.js → ToolPartDiffPreview-HBLSokoe.js} +1 -1
- package/dist/assets/{VirtualizedFileDiff-CAWthkoy.js → VirtualizedFileDiff-Bzp3hClU.js} +1 -1
- package/dist/assets/{WalkthroughView-C7AHOpCA.js → WalkthroughView-CpgA4s9w.js} +1 -1
- package/dist/assets/{computeVirtualFileMetrics-BkiDSlTW.js → computeVirtualFileMetrics-CI1PC_z2.js} +1 -1
- package/dist/assets/{de-DJsQr-p7.js → de-BX8b4hDD.js} +1 -1
- package/dist/assets/{es-BuYMlA9g.js → es-e98cS-yM.js} +1 -1
- package/dist/assets/{fr-ePDay33C.js → fr-BOiqxJAs.js} +1 -1
- package/dist/assets/{index-n6O3hklM.js → index-Cmn74sw-.js} +1 -1
- package/dist/assets/{isDiffPlainText-GMdPz-71.js → isDiffPlainText-DVralkU-.js} +1 -1
- package/dist/assets/{isFilePlainText-BVuH1zH9.js → isFilePlainText-CgTREsRX.js} +1 -1
- package/dist/assets/{ja-BzR9xOY_.js → ja-aoO55hGu.js} +1 -1
- package/dist/assets/{ko-BEjHAm14.js → ko-BGzFLogk.js} +1 -1
- package/dist/assets/{main-D3ZDQglc.js → main-BgfXQ-4g.js} +2 -2
- package/dist/assets/{main-BydQ1tr_.js → main-DGYUWmIt.js} +4 -4
- package/dist/assets/{markdownCore-Cb2MdZnV.js → markdownCore-BesaNs_G.js} +1 -1
- package/dist/assets/{miniChat-d01k801U.js → miniChat-DHKXp-_I.js} +2 -2
- package/dist/assets/{mobile-D7VV-Ufz.js → mobile-lXQ08VnX.js} +2 -2
- package/dist/assets/{patchFileDiff-CdztVMz0.js → patchFileDiff-i1lTtNbn.js} +1 -1
- package/dist/assets/{pl-rQmpxNIF.js → pl-B5x19laq.js} +1 -1
- package/dist/assets/{pt-BR-CorbsSW-.js → pt-BR-C3oU51Il.js} +1 -1
- package/dist/assets/{renderElectronMiniChatApp-BGG9UIlh.js → renderElectronMiniChatApp-CuO4ue6B.js} +2 -2
- package/dist/assets/{renderMobileApp-BRP3J1iv.js → renderMobileApp-B3zFlHy4.js} +3 -3
- package/dist/assets/{runtimeEndpointReset-BhT_-c52.js → runtimeEndpointReset-BLzrtrmj.js} +3 -3
- package/dist/assets/{shikiHighlight-BzXUjlby.js → shikiHighlight-ctlcPvvx.js} +1 -1
- package/dist/assets/{tr-CoAMXPtI.js → tr-C0QQa7et.js} +1 -1
- package/dist/assets/{uk-YlAX0rRU.js → uk-CqLSe9wT.js} +1 -1
- package/dist/assets/{useAppFontEffects-Cwyhjfl5.js → useAppFontEffects-B6OfEypo.js} +8 -8
- package/dist/assets/{useGitComparison-BCZVefdE.js → useGitComparison-BXZXEAW6.js} +1 -1
- package/dist/assets/{useInlineCommentController-DDkpBEU8.js → useInlineCommentController-CgbrpEWu.js} +1 -1
- package/dist/assets/{useRootScrollLock-CwjoWuC4.js → useRootScrollLock-Me41OjBT.js} +1 -1
- package/dist/assets/{vendor-codemirror-language-data-Cb1YnICj.js → vendor-codemirror-language-data-SJuFp0a0.js} +2 -2
- package/dist/assets/{web-components-LV3vjTxy.js → web-components-D8GS8Ork.js} +1 -1
- package/dist/assets/{zh-CN-DDYg0Jl7.js → zh-CN-iJEie4d6.js} +6 -6
- package/dist/assets/{zh-TW-CQKaCayr.js → zh-TW-CyslEwlK.js} +1 -1
- package/dist/index.html +1 -1
- package/dist/mini-chat.html +1 -1
- package/dist/mobile.html +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{fM as e,fN as t,fO as s}from"./useAppFontEffects-Cwyhjfl5.js";import"./vendor-react-BUCujlKS.js";import"./vendor-scheduler-7OC5HNn7.js";import"./index-BD8ILbxF.js";import"./vendor-zod-B6551dwG.js";import"./vendor-vite-runtime-DD1OZmLC.js";import"./vendor-zustand-BAGL70zf.js";import"./vendor-opencode-sdk-BJ73u-bH.js";import"./vendor-simplewebauthn-browser-VDA66rT_.js";import"./vendor-base-ui-BY_5qla_.js";import"./vendor-floating-ui-utils-D6FqdtJt.js";import"./vendor-floating-ui-react-dom-DxYCWdHj.js";import"./vendor-floating-ui-dom-BTvzWks8.js";import"./vendor-floating-ui-core-PuGzNPnN.js";import"./vendor-use-sync-external-store-D6wYuSt-.js";import"./vendor-class-variance-authority-5VPnzWs2.js";import"./vendor-clsx-B-dksMZM.js";import"./vendor-dnd-kit-core-BZknOX2w.js";import"./vendor-dnd-kit-utilities-B_MdXhJC.js";import"./vendor-dnd-kit-accessibility-BHxJPORy.js";import"./vendor-dnd-kit-sortable-CsEagZ81.js";import"./vendor-framer-motion-livSKyyV.js";import"./vendor-motion-dom-D_o3BTI3.js";import"./vendor-motion-utils-BGh8QBgx.js";import"./vendor-tanstack-react-virtual-g05Cx3z9.js";import"./vendor-tanstack-virtual-core-Dubg10g5.js";import"./contextPanelEmbeddedChat-BdA6bdky.js";import"./vendor-sonner-DFyL3AvE.js";import"./vendor-cmdk-DgLInKvT.js";import"./vendor-radix-ui-react-dialog-B94Bt2qq.js";import"./vendor-radix-ui-primitive-Dc_FVRD7.js";import"./vendor-radix-ui-react-compose-refs-DcAh5WdT.js";import"./vendor-radix-ui-react-context-Czxm7Z62.js";import"./vendor-radix-ui-react-id-f5BLKEVw.js";import"./vendor-radix-ui-react-use-layout-effect-D_3IhJdJ.js";import"./vendor-radix-ui-react-use-controllable-state-BFT5YmkA.js";import"./vendor-radix-ui-react-dismissable-layer-D7kXcwgJ.js";import"./vendor-radix-ui-react-primitive-DhVoX9SD.js";import"./vendor-radix-ui-react-slot-BQgQOasS.js";import"./vendor-radix-ui-react-use-callback-ref-BZPnuXAC.js";import"./vendor-radix-ui-react-use-escape-keydown-oph88g-F.js";import"./vendor-radix-ui-react-focus-scope-CiaxW4dD.js";import"./vendor-radix-ui-react-portal-BMJYHWck.js";import"./vendor-radix-ui-react-presence-CNxf-uq4.js";import"./vendor-radix-ui-react-focus-guards-B6qJXYua.js";import"./vendor-react-remove-scroll-DO7dCTnK.js";import"./vendor-tslib-De9GV7Vy.js";import"./vendor-react-remove-scroll-bar-BcFYyj3E.js";import"./vendor-react-style-singleton-q6EMHnwf.js";import"./vendor-get-nonce-C-Z93AgS.js";import"./vendor-use-sidecar-zDC0RhA3.js";import"./vendor-use-callback-ref-D3RC8gqK.js";import"./vendor-aria-hidden-DvXkyWUv.js";import"./vendor-codemirror-language-BgPj_McA.js";import"./vendor-lezer-common-B3-cUCR_.js";import"./vendor-codemirror-state-C9awkmn-.js";import"./vendor-marijn-find-cluster-break-DXwl3gUT.js";import"./vendor-codemirror-view-CiLROUVV.js";import"./vendor-style-mod-NZ5MEPvj.js";import"./vendor-w3c-keyname-Vcq4gwWv.js";import"./vendor-crelt-C8TCjufn.js";import"./vendor-lezer-highlight-CDMHUZ74.js";import"./vendor-codemirror-lang-javascript-Cc2ZYbgX.js";import"./vendor-lezer-javascript-D7Tj24ot.js";import"./vendor-lezer-lr-bhwg1HMg.js";import"./vendor-codemirror-autocomplete-DzPz9Wgq.js";import"./vendor-codemirror-lang-json-CMBS2tG9.js";import"./vendor-lezer-json-Iaex0UN-.js";import"./vendor-codemirror-lang-css-O0cZX78y.js";import"./vendor-lezer-css-C5xB6jxd.js";import"./vendor-codemirror-lang-html-CfgK872x.js";import"./vendor-lezer-html-C0I1p52t.js";import"./vendor-codemirror-lang-markdown-BPGOH9ye.js";import"./vendor-lezer-markdown-C6g-d6P3.js";import"./vendor-codemirror-language-data-Cb1YnICj.js";import"./vendor-codemirror-lang-python-HahnQaAS.js";import"./vendor-lezer-python-CvuFxeZl.js";import"./vendor-codemirror-commands-B7H_j0iU.js";import"./vendor-legendapp-list-BuBPBC3R.js";import"./vendor-tailwind-merge-CPcsbTWB.js";import"./vendor-fuse.js-Dw8P0qyA.js";const i={"settings.aiworker.visual.field.alwaysShowScrollbars":"Toujours afficher les barres de défilement","settings.aiworker.visual.field.alwaysShowScrollbarsHint":"Gardez les barres de défilement visibles même lorsque le pointeur se trouve hors de la zone défilante. Uniquement sur cet appareil.","settings.providers.page.openCodeGo.title":"Suivi de l’utilisation d’OpenCode Go","settings.providers.page.openCodeGo.description":"Connectez le tableau de bord OpenCode Go pour afficher les quotas glissant, hebdomadaire et mensuel.","settings.providers.page.openCodeGo.workspaceId":"ID de l’espace de travail","settings.providers.page.openCodeGo.authCookie":"Cookie d’authentification","settings.providers.page.openCodeGo.apiKey":"Clé API","settings.providers.page.openCodeGo.help":"Copiez l’ID depuis l’URL du tableau de bord et le cookie auth depuis les outils du navigateur. AiWorker n’analyse jamais les cookies du navigateur.","settings.providers.page.openCodeGo.save":"Enregistrer et valider","settings.providers.page.openCodeGo.replace":"Remplacer","settings.providers.page.openCodeGo.validate":"Valider","settings.providers.page.openCodeGo.delete":"Supprimer","settings.providers.page.quotaCredentials.saved":"Identifiants de {provider} enregistrés.","settings.providers.page.quotaCredentials.accessToken":"Jeton d’accès","settings.providers.page.quotaCredentials.usageToken":"Jeton API d’utilisation","settings.providers.page.quotaCredentials.exeDevTokenInstructions":"Exécutez cette commande dans votre terminal, puis collez le jeton ci-dessous. Il peut uniquement lire l’utilisation des crédits LLM et expire après 30 jours.","settings.providers.page.quotaCredentials.refreshToken":"Jeton d’actualisation","settings.providers.page.quotaCredentials.tokenPlaceholder":"Collez le jeton","settings.providers.page.openCodeGo.saveFailed":"Impossible de valider les identifiants OpenCode Go.","settings.providers.page.openCodeGo.valid":"Les identifiants OpenCode Go sont valides.","settings.providers.page.openCodeGo.invalid":"Les identifiants OpenCode Go sont invalides ou expirés.","settings.providers.page.openCodeGo.deleted":"Identifiants OpenCode Go supprimés.","settings.providers.page.openCodeGo.deleteFailed":"Impossible de supprimer les identifiants OpenCode Go.","settings.appearance.language.label":"Langue","settings.appearance.language.description":"Choisissez la langue de l'interface.","settings.appearance.language.select":"Sélectionnez la langue","settings.window.description":"Fenêtre des paramètres AiWorker.","settings.view.home.title":"Paramètres","settings.view.home.description":"Accédez aux pages communes.","settings.view.home.cards.providers.title":"Fournisseurs","settings.view.home.cards.providers.description":"Connecter les modèles + les identifiants","settings.view.home.cards.agents.title":"Agents","settings.view.home.cards.agents.description":"Invites, outils, autorisations","settings.view.home.cards.skillsCatalog.title":"Catalogue de skills","settings.view.home.cards.skillsCatalog.description":"Installer des skills depuis des catalogues","settings.view.home.cards.mcp.title":"MCP","settings.view.home.cards.mcp.description":"Configurer les serveurs MCP + connexions","settings.view.home.cards.plugins.title":"Plugins","settings.view.home.cards.plugins.description":"Gérer les plugins OpenCode","settings.view.home.cards.usage.title":"Usage","settings.view.home.cards.usage.description":"Quota + visibilité des dépenses","settings.view.unavailable.title":"Pas disponible","settings.view.unavailable.description":"Cette page de paramètres n'est pas disponible dans ce runtime.","settings.view.badge.beta":"bêta","settings.view.actions.reloadOpenCode":"Recharger OpenCode","settings.view.actions.reloadOpenCodeTooltip":"Redémarrez OpenCode et rechargez sa configuration.","settings.view.actions.applyAndRestartOpenCode":"Appliquer et redémarrer","settings.view.actions.applyAndRestartOpenCodeTooltipSingle":"Appliquer 1 modification de configuration en attente et redémarrer OpenCode.","settings.view.actions.applyAndRestartOpenCodeTooltipPlural":"Appliquer {count} modifications de configuration en attente et redémarrer OpenCode.","settings.view.pendingRestart.applying":"Redémarrage…","settings.view.pendingRestart.applied":"OpenCode a redémarré avec les modifications de configuration en attente.","settings.view.pendingRestart.applyFailed":"Échec de l'application des modifications de configuration.","settings.view.pendingRestart.manualRestartRequired":"Enregistré sur le disque. Redémarrez le serveur OpenCode connecté pour appliquer les modifications.","settings.view.pendingRestart.saved":"Enregistré. Redémarrez OpenCode pour appliquer.","settings.view.pendingRestart.confirm.title":"Appliquer et redémarrer ?","settings.view.pendingRestart.confirm.description":"Le redémarrage d'OpenCode arrêtera tous les chats en cours. Vos modifications de configuration enregistrées prendront effet après le redémarrage.","settings.view.pendingRestart.confirm.dontShowAgain":"Ne plus afficher","settings.view.pendingRestart.confirm.cancel":"Annuler","settings.view.actions.backToSettings":"Retour aux paramètres","settings.view.actions.closeSettings":"Fermer les paramètres","settings.view.actions.closeSettingsWithShortcut":"Fermer les paramètres ({shortcut}+,)","settings.view.actions.back":"Retour","settings.view.actions.resizeNavigation":"Redimensionner la navigation dans les paramètres","settings.page.projects.title":"Projets","settings.page.remoteInstances.title":"Instances distantes","settings.page.providers.title":"Fournisseurs","settings.page.usage.title":"Usage","settings.page.agents.title":"Agents","settings.page.commands.title":"Commandes","settings.page.mcp.title":"MCP","settings.page.plugins.title":"Plugins","settings.page.skills.title":"Skills","settings.page.skillsCatalog.title":"Catalogue de skills","settings.page.git.title":"Git","settings.page.appearance.title":"Apparence","settings.page.appearance.description":"Personnalisez l’apparence et le ressenti d’AiWorker.","settings.page.chat.title":"Chat","settings.page.chat.description":"Configurez l’affichage des messages et des outils.","settings.page.shortcuts.title":"Raccourcis","settings.page.shortcuts.description":"Personnalisez les raccourcis clavier.","settings.page.general.title":"Général","settings.page.general.description":"Démarrage de l'application, sécurité, connexion et confidentialité.","settings.page.sessions.title":"Sessions","settings.page.sessions.description":"Définissez les valeurs par défaut et la conservation des sessions.","settings.page.magicPrompts.title":"Prompts magiques","settings.page.notifications.title":"Notifications","settings.page.notifications.description":"Choisissez quand et comment être notifié.","settings.page.voice.title":"Voix","settings.page.voice.description":"Configurez la synthèse vocale et la dictée.","settings.page.tunnel.title":"Tunnel externe","settings.page.tunnel.description":"Exposez cette instance via un tunnel distant.","settings.page.snippets.title":"Extraits","settings.snippets.sidebar.title":"Extraits","settings.snippets.sidebar.total":"Total : {count}","settings.snippets.sidebar.actions.create":"Créer un extrait","settings.snippets.sidebar.actions.more":"Plus de propositions pour {name}","settings.snippets.sidebar.toast.deleted":"Extrait supprimé","settings.snippets.sidebar.toast.deleteFailed":"Échec de la suppression de l'extrait","settings.snippets.sidebar.dialog.deleteTitle":"Supprimer l'extrait ?","settings.snippets.sidebar.dialog.deleteDescription":"Cela supprimera définitivement #{name}.","settings.snippets.page.empty.title":"Sélectionnez un extrait","settings.snippets.page.empty.description":"Choisissez un extrait dans la barre latérale pour le modifier.","settings.snippets.page.title.new":"Nouvel extrait","settings.snippets.page.field.namePlaceholder":"nom de l'extrait","settings.snippets.page.field.descriptionPlaceholder":"À quoi sert cet extrait","settings.snippets.page.field.aliases":"Alias","settings.snippets.page.field.aliasesPlaceholder":"en sécurité, prudent","settings.snippets.page.field.content":"Contenu","settings.snippets.page.field.contentPlaceholder":"Markdown de l'extrait...","settings.snippets.page.hint":"Utilisez #name dans les prompts. Prend en charge les alias et les blocs de pré-ajout/ajout compatibles avec les extraits de code opencode.","settings.snippets.page.toast.nameRequired":"Le nom de l'extrait est obligatoire","settings.snippets.page.toast.contentRequired":"Le contenu de l'extrait est requis","settings.snippets.page.toast.saveFailed":"Échec de l'enregistrement de l'extrait","settings.snippets.page.toast.saved":"Extrait enregistré","settings.page.promptTemplates.title":"Modèles de prompt","settings.promptTemplates.sidebar.title":"Modèles de prompt","settings.promptTemplates.sidebar.total":"Total : {count}","settings.promptTemplates.sidebar.empty.title":"Aucun modèle de prompt","settings.promptTemplates.sidebar.empty.description":"Créez un modèle de prompt pour commencer.","settings.promptTemplates.sidebar.toast.deleted":'Modèle "{name}" supprimé',"settings.promptTemplates.sidebar.toast.deleteFailed":"Échec de la suppression du modèle","settings.promptTemplates.sidebar.toast.nameRequired":"Le nom du modèle est obligatoire","settings.promptTemplates.sidebar.toast.renamed":"Modèle renommé","settings.promptTemplates.sidebar.toast.renameFailed":"Échec du changement de nom du modèle","settings.promptTemplates.sidebar.dialog.deleteTitle":"Supprimer le modèle ?","settings.promptTemplates.sidebar.dialog.deleteDescription":'Cela supprimera définitivement "{name}". Cette action ne peut pas être annulée.',"settings.promptTemplates.sidebar.renameDialog.title":"Renommer le modèle","settings.promptTemplates.sidebar.renameDialog.description":'Entrez un nouveau nom pour "{name}".',"settings.promptTemplates.sidebar.renameDialog.placeholder":"Nom du modèle","settings.promptTemplates.sidebar.badge.default":"défaut","settings.promptTemplates.page.empty.title":"Sélectionnez un modèle","settings.promptTemplates.page.empty.description":"Choisissez un modèle dans la barre latérale pour le modifier.","settings.promptTemplates.page.title.new":"Nouveau modèle","settings.promptTemplates.page.subtitle.edit":"Modifier le modèle","settings.promptTemplates.page.subtitle.new":"Créer un nouveau modèle de prompt","settings.promptTemplates.page.section.identity":"Identité","settings.promptTemplates.page.field.name":"Nom","settings.promptTemplates.page.field.namePlaceholder":"Nom du modèle","settings.promptTemplates.page.section.template":"Modèle","settings.promptTemplates.page.field.templatePlaceholder":"Saisissez le texte du modèle de prompt...","settings.promptTemplates.page.templateHint":"Ce texte sera ajouté au début du prompt de l'utilisateur lorsqu'il est sélectionné dans un groupe multi-run.","settings.promptTemplates.page.toast.nameRequired":"Le nom du modèle est obligatoire","settings.promptTemplates.page.toast.updated":"Modèle mis à jour","settings.promptTemplates.page.toast.updateFailed":"Échec de la mise à jour du modèle","settings.promptTemplates.page.toast.created":"Modèle créé","settings.promptTemplates.page.toast.createFailed":"Échec de la création du modèle","settings.promptTemplates.page.toast.saveUnexpectedError":"Une erreur inattendue s'est produite lors de l'enregistrement","settings.aiworker.tunnel.title":"Tunnel externe","settings.aiworker.tunnel.description":"Configurez un accès à distance sécurisé avec des liens rapides ou votre propre tunnel Cloudflare distant géré.","settings.aiworker.tunnel.note.serverSideEnforced":"L'accès au tunnel sécurisé est appliqué côté serveur.","settings.aiworker.tunnel.note.connectLinksOneTime":"Les liens de connexion sont uniques et sont révoqués lorsque le tunnel s'arrête ou lorsque la durée de vie du lien de connexion expire.","settings.aiworker.tunnel.note.cloudflareConnectorTarget":"Cible du connecteur Cloudflare :","settings.aiworker.tunnel.note.cloudflareConnectorTargetUse":"Pour la cible du connecteur Cloudflare, utilisez","settings.aiworker.tunnel.note.tokensSavedPerTunnel":"Les jetons sont enregistrés par tunnel et réutilisés à partir du disque.","settings.aiworker.tunnel.note.customConfigUsed":"Le fichier de configuration personnalisé sera utilisé lors du démarrage du tunnel.","settings.aiworker.tunnel.note.defaultConfigUsed":"Lorsqu'il est vide, cloudflared utilise sa configuration par défaut (~/.cloudflared/config.yml).","settings.aiworker.tunnel.note.managedRemoteRequiresDomain":"Les tunnels distants gérés nécessitent un domaine acheté dans votre compte Cloudflare.","settings.aiworker.tunnel.note.managedLocalUsesConfig":"Les tunnels locaux gérés utilisent votre fichier de configuration cloudflared local.","settings.aiworker.tunnel.note.startModeAndGenerateLink":"Démarrez un tunnel {mode} et générez un lien de connexion unique. Ne fermez pas l'application pendant que ce tunnel est utilisé.","settings.aiworker.tunnel.note.scanQrToConnect":"Scannez avec votre téléphone pour vous connecter.","settings.aiworker.tunnel.section.redeemedAccessLinks":"Liens d'accès utilisés","settings.aiworker.tunnel.section.savedManagedRemoteTunnels":"Tunnels distants gérés enregistrés","settings.aiworker.tunnel.notAvailable.cloudflaredNotFound":"cloudflared introuvable","settings.aiworker.tunnel.notAvailable.installHint":"Installez-le pour activer l'accès au tunnel à distance :","settings.aiworker.tunnel.field.provider":"Fournisseur","settings.aiworker.tunnel.field.providerPlaceholder":"Sélectionnez le fournisseur","settings.aiworker.tunnel.field.tunnelType":"Type de tunnel","settings.aiworker.tunnel.field.connectLinkTtl":"Connecter le lien TTL","settings.aiworker.tunnel.field.tunnelSessionTtl":"Durée de vie de la session tunnel","settings.aiworker.tunnel.field.hostnameLabel":"Nom d'hôte :","settings.aiworker.tunnel.field.savedTokenAvailablePlaceholder":"Jeton enregistré disponible (facultatif à remplacer)","settings.aiworker.tunnel.field.pasteTokenPlaceholder":"Coller le jeton pour ce tunnel","settings.aiworker.tunnel.field.newPresetNamePlaceholder":"Nom du tunnel (e.g. Production)","settings.aiworker.tunnel.field.newPresetHostnamePlaceholder":"Nom d'hôte (e.g. oc.example.com)","settings.aiworker.tunnel.field.newPresetTokenPlaceholder":"Jeton","settings.aiworker.tunnel.field.managedRemoteTokenInfoAria":"Informations sur le jeton de tunnel distant géré","settings.aiworker.tunnel.field.configurationFile":"Fichier de configuration","settings.aiworker.tunnel.field.configurationFilePlaceholder":"Utilisation de la configuration cloudflared par défaut","settings.aiworker.tunnel.field.managedRemoteTunnelToConnect":"Tunnel distant géré pour se connecter","settings.aiworker.tunnel.field.selectSavedTunnelPlaceholder":"Sélectionnez le tunnel enregistré","settings.aiworker.tunnel.field.publicUrlHint":"URL publique (non accessible sans jeton)","settings.aiworker.tunnel.field.connectLink":"Lien de connexion","settings.aiworker.tunnel.field.expires":"Expire","settings.aiworker.tunnel.field.connectQrAlt":"Code de connexion du tunnel QR","settings.aiworker.tunnel.actions.removePresetAria":"Supprimer {name}","settings.aiworker.tunnel.actions.saveToken":"Enregistrer le jeton","settings.aiworker.tunnel.actions.browseConfigFileAria":"Parcourir le fichier de configuration","settings.aiworker.tunnel.actions.clearConfigFileAria":"Effacer le fichier de configuration","settings.aiworker.tunnel.actions.openManagedRemoteDocs":"Consultez la documentation sur la façon de configurer un tunnel distant géré","settings.aiworker.tunnel.actions.openManagedLocalDocs":"Consultez la documentation sur la configuration du tunnel local géré","settings.aiworker.tunnel.actions.startTunnel":"Démarrer le tunnel","settings.aiworker.tunnel.actions.startingTunnel":"Démarrage du tunnel...","settings.aiworker.tunnel.actions.stopTunnel":"Arrêter le tunnel","settings.aiworker.tunnel.actions.stopping":"Arrêt...","settings.aiworker.tunnel.actions.newConnectLink":"Nouveau lien de connexion","settings.aiworker.tunnel.actions.copied":"Copié","settings.aiworker.tunnel.actions.retry":"Réessayer","settings.aiworker.tunnel.option.moreProvidersSoon":"Plus de fournisseurs à venir","settings.aiworker.tunnel.option.mode.quick.label":"Quick","settings.aiworker.tunnel.option.mode.quick.tooltip":"Quick Tunnel est une solution best-effort dont la disponibilité n'est pas garantie.","settings.aiworker.tunnel.option.mode.managedRemote.label":"Managed Remote","settings.aiworker.tunnel.option.mode.managedRemote.tooltip":"Managed Remote utilise votre compte Cloudflare et votre nom d'hôte pour un accès longue durée.","settings.aiworker.tunnel.option.mode.managedLocal.label":"Managed Local","settings.aiworker.tunnel.option.mode.managedLocal.tooltip":"Managed Local utilise votre fichier de configuration cloudflared local.","settings.aiworker.tunnel.warning.quickModeReliability":"Pour un accès longue durée plus fiable, passez au mode Managed Remote ou Managed Local.","settings.aiworker.tunnel.warning.replacesActiveTunnel":"Le démarrage de ce tunnel remplace le tunnel actif et révoque les liens de connexion et les sessions distantes existantes.","settings.aiworker.tunnel.badge.quick":"RAPIDE","settings.aiworker.tunnel.badge.remote":"DISTANT","settings.aiworker.tunnel.badge.local":"LOCAL","settings.aiworker.tunnel.state.loading":"Chargement","settings.aiworker.tunnel.state.expired":"Expiré","settings.aiworker.tunnel.state.revoked":"Révoqué","settings.aiworker.tunnel.state.inactive":"Inactif","settings.aiworker.tunnel.state.noExpiry":"Pas d'expiration","settings.aiworker.tunnel.state.never":"Jamais","settings.aiworker.tunnel.state.tunnelReady":"Tunnel prêt","settings.aiworker.tunnel.session.redeemedAt":"{time} échangé","settings.aiworker.tunnel.session.expiresIn":"Expire dans {remaining}","settings.aiworker.tunnel.session.inactiveWithReason":"Inactif ({reason})","settings.aiworker.tunnel.error.invalidConfigExtension":"Le fichier de configuration doit utiliser l'extension .yml, .yaml ou .json.","settings.aiworker.tunnel.tooltip.tokensSavedPath":"Les jetons sont enregistrés dans ~/.config/openchamber/cloudflare-managed-remote-tunnels.json.","settings.aiworker.tunnel.empty.noManagedRemoteTunnels":"Aucun tunnel distant géré n'a encore été enregistré.","settings.aiworker.tunnel.toast.checkAvailabilityFailed":"Échec de la vérification de la disponibilité du tunnel","settings.aiworker.tunnel.toast.saveSettingsFailed":"Échec de l'enregistrement des paramètres du tunnel","settings.aiworker.tunnel.toast.saveTtlFailed":"Échec de l'enregistrement des paramètres TTL du tunnel","settings.aiworker.tunnel.toast.saveTokenFailed":"Échec de l'enregistrement du jeton de tunnel distant géré","settings.aiworker.tunnel.toast.selectOrAddManagedRemoteFirst":"Sélectionnez ou ajoutez d'abord un tunnel distant géré","settings.aiworker.tunnel.toast.managedRemoteTokenRequiredBeforeStarting":"Un jeton de tunnel distant géré est requis avant de démarrer","settings.aiworker.tunnel.toast.addManagedRemoteTokenBeforeStarting":"Ajoutez un jeton de tunnel distant géré avant de commencer","settings.aiworker.tunnel.toast.startFailed":"Échec du démarrage du tunnel","settings.aiworker.tunnel.toast.startedButNoPublicUrl":"Le tunnel a démarré mais aucune URL publique n'a été renvoyée","settings.aiworker.tunnel.toast.replacedTunnelSingleSingle":"Tunnel précédent remplacé : 1 lien révoqué, 1 session invalidée.","settings.aiworker.tunnel.toast.replacedTunnelSingleManySessions":"Tunnel précédent remplacé : 1 lien révoqué, sessions {invalidatedSessionCount} invalidées.","settings.aiworker.tunnel.toast.replacedTunnelManyLinksSingleSession":"Tunnel précédent remplacé : liens {revokedBootstrapCount} révoqués, 1 session invalidée.","settings.aiworker.tunnel.toast.replacedTunnelManyMany":"Tunnel précédent remplacé : liens {revokedBootstrapCount} révoqués, sessions {invalidatedSessionCount} invalidées.","settings.aiworker.tunnel.toast.linkReady":"Lien de connexion prêt","settings.aiworker.tunnel.toast.stopped":"Tunnel arrêté","settings.aiworker.tunnel.toast.stopFailed":"Échec de l'arrêt du tunnel","settings.aiworker.tunnel.toast.connectLinkCopied":"Lien de connexion copié","settings.aiworker.tunnel.toast.copyUrlFailed":"Échec de la copie de l'URL","settings.aiworker.tunnel.toast.saveSelectedManagedRemoteFailed":"Échec de l'enregistrement du tunnel distant géré sélectionné","settings.aiworker.tunnel.toast.tunnelNameRequired":"Le nom du tunnel est obligatoire","settings.aiworker.tunnel.toast.managedRemoteHostnameRequired":"Le nom d'hôte du tunnel distant géré est requis","settings.aiworker.tunnel.toast.managedRemoteTokenRequired":"Un jeton de tunnel distant géré est requis","settings.aiworker.tunnel.toast.hostnameAlreadyExists":"Ce nom d'hôte existe déjà","settings.aiworker.tunnel.toast.managedRemoteSaved":"Tunnel distant géré enregistré","settings.aiworker.tunnel.toast.managedRemoteRemoved":"Tunnel distant géré supprimé","settings.magicPrompts.sidebar.title":"Prompts magiques","settings.magicPrompts.sidebar.description":"Sélectionnez un modèle de prompt à modifier.","settings.magicPrompts.sidebar.group.git":"Git","settings.magicPrompts.sidebar.group.github":"GitHub","settings.magicPrompts.sidebar.group.planning":"Planification","settings.magicPrompts.sidebar.group.session":"Session","settings.magicPrompts.sidebar.item.gitCommitGenerate":"Génération de commit","settings.magicPrompts.sidebar.item.gitPrGenerate":"Génération de PR","settings.magicPrompts.sidebar.item.gitConflictResolve":"Résolution des conflits de fusion/rebase","settings.magicPrompts.sidebar.item.gitCherrypickConflictResolve":"Résolution des conflits par sélection","settings.magicPrompts.sidebar.item.githubPrReview":"Revue de PR","settings.magicPrompts.sidebar.item.githubIssueReview":"Examen du problème","settings.magicPrompts.sidebar.item.githubPrFailedChecksReview":"Examen des checks PR en échec","settings.magicPrompts.sidebar.item.githubPrCommentsReview":"Examen des commentaires PR","settings.magicPrompts.sidebar.item.githubSinglePrCommentReview":"Examen des commentaires PR uniques","settings.magicPrompts.sidebar.item.planTodo":"Planification des tâches","settings.magicPrompts.sidebar.item.planImprove":"Améliorer le plan","settings.magicPrompts.sidebar.item.planImplement":"Plan de mise en œuvre","settings.magicPrompts.sidebar.item.sessionSummary":"Résumé de la session","settings.magicPrompts.sidebar.item.sessionWorkspaceReview":"Examen de l'espace de travail","settings.magicPrompts.sidebar.item.sessionFusion":"Fusion","settings.remoteInstances.sidebar.title":"Instances distantes","settings.remoteInstances.sidebar.total":"Total {count}","settings.remoteInstances.sidebar.newSshInstanceName":"Nouvelle instance SSH","settings.remoteInstances.sidebar.actions.addSshInstance":"Ajouter une instance SSH","settings.remoteInstances.sidebar.actions.connect":"Connecter","settings.remoteInstances.sidebar.actions.disconnect":"Déconnecter","settings.remoteInstances.sidebar.actions.retry":"Réessayer","settings.remoteInstances.sidebar.actions.remove":"Retirer","settings.remoteInstances.sidebar.confirm.localPortInUseRetry":"Le port local est déjà utilisé. Choisir un port local gratuit et réessayer ?","settings.remoteInstances.sidebar.toast.createFailed":"Échec de la création de l'instance SSH","settings.remoteInstances.sidebar.toast.retriedWithRandomPort":"Réessayé avec un port local aléatoire","settings.remoteInstances.sidebar.toast.connectFailed":"Échec de la connexion de l'instance","settings.remoteInstances.sidebar.toast.disconnectFailed":"Échec de la déconnexion de l'instance","settings.remoteInstances.sidebar.toast.retryFailed":"Échec de la nouvelle tentative de connexion","settings.remoteInstances.sidebar.toast.removeFailed":"Échec de la suppression de l'instance","settings.remoteInstances.sidebar.phase.ready":"Prêt","settings.remoteInstances.sidebar.phase.error":"Erreur","settings.remoteInstances.sidebar.phase.reconnect":"Reconnecter","settings.remoteInstances.sidebar.phase.installing":"Installation","settings.remoteInstances.sidebar.phase.updating":"Mise à jour","settings.remoteInstances.sidebar.phase.forwarding":"Transfert","settings.remoteInstances.sidebar.phase.starting":"Démarrage","settings.remoteInstances.sidebar.phase.connecting":"Connexion","settings.remoteInstances.sidebar.phase.idle":"Inactif","settings.remoteInstances.page.section.instance":"Instance","settings.remoteInstances.page.section.instanceDescription":"Paramètres de base du SSH.","settings.remoteInstances.page.field.mode":"Mode","settings.remoteInstances.page.field.modeHint":"Installations/mises à jour gérées et démarrage de AiWorker à distance. Externe suppose qu'il est déjà en cours d'exécution.","settings.remoteInstances.page.field.modePlaceholder":"Sélectionnez le mode","settings.remoteInstances.page.field.modeManaged":"Géré (démarrage automatique)","settings.remoteInstances.page.field.modeExternal":"Externe (déjà en cours d'exécution)","settings.remoteInstances.page.field.preferredRemotePort":"Port sur la machine distante","settings.remoteInstances.page.field.preferredRemotePortHint":"Port utilisé par AiWorker sur la machine distante. Laissez vide pour en choisir un automatiquement.","settings.remoteInstances.page.field.keepServerRunning":"Maintenir le serveur en marche","settings.remoteInstances.page.field.keepServerRunningHint":"Laisser le serveur distant tourner après la déconnexion. Désactivé, il est arrêté à la déconnexion puis redémarré à la connexion suivante.","settings.remoteInstances.page.field.bindHost":"Accessible depuis","settings.remoteInstances.page.field.bindHostHint":"Qui peut ouvrir l’adresse redirigée sur cet ordinateur. La machine distante reste de toute façon accessible uniquement par le tunnel SSH.","settings.remoteInstances.page.field.preferredLocalPort":"Port sur cet ordinateur","settings.remoteInstances.page.field.preferredLocalPortHint":"Port ouvert sur cet ordinateur pour le tunnel. Laissez vide pour en choisir un automatiquement.","settings.remoteInstances.page.field.forwardType":"Type de transfert","settings.remoteInstances.page.field.localHostPlaceholder":"127.0.0.1","settings.remoteInstances.page.field.remoteHostPlaceholder":"127.0.0.1","settings.remoteInstances.page.field.auto":"Auto","settings.remoteInstances.page.confirm.bindAllInterfaces":"La liaison à 0.0.0.0 expose les ports transférés à votre réseau local. Continuer?","settings.remoteInstances.page.preview.localSocks5":"(SOCKS5 local)","settings.remoteInstances.page.preview.local":"(local)","settings.remoteInstances.page.preview.remote":"(hôte distant)","settings.remoteInstances.page.toast.openLocalEndpointFailed":"Échec de l'ouverture du point de terminaison local","settings.remoteInstances.page.toast.localUrlCopied":"URL locale copiée","settings.remoteInstances.page.actions.copyLocalUrl":"Copier l’URL locale","settings.remoteInstances.page.actions.open":"Ouvrir","settings.remoteInstances.page.logsDialog.selectedInstanceFallback":"Instance sélectionnée","settings.remoteInstances.page.patternDialog.descriptionWithHost":"{host} nécessite une destination concrète.","settings.remoteInstances.page.patternDialog.description":"Entrez la destination.","settings.common.infoAria":"Plus d’informations","settings.common.actions.cancel":"Annuler","settings.common.actions.create":"Créer","settings.common.actions.delete":"Supprimer","settings.aiworker.appLinks.title":"Liens d’application approuvés","settings.aiworker.appLinks.info":"Les liens de cette liste s’ouvrent sans nouvelle demande sur cet appareil. Les autres liens d’application demandent toujours une confirmation.","settings.aiworker.appLinks.empty":"Aucun lien d’application approuvé sur cet appareil. Choisissez « Approuver et ouvrir » lors de l’ouverture d’un lien pour l’ajouter ici.","settings.aiworker.appLinks.removeAria":"Supprimer les liens {scheme} approuvés","settings.common.actions.reset":"Réinitialiser","settings.common.actions.rename":"Rebaptiser","settings.common.actions.duplicate":"Dupliquer","settings.common.actions.import":"Importer","settings.common.actions.copyAll":"Copier tout","settings.common.actions.clear":"Effacer","settings.common.actions.saving":"Enregistrement...","settings.common.status.saved":"Enregistré","settings.common.status.saveFailed":"Échec de l’enregistrement","settings.common.actions.saveChanges":"Enregistrer les modifications","settings.common.scope.global":"Mondial","settings.common.scope.project":"Projet","settings.common.field.description":"Description","settings.common.badge.new":"Nouveau","settings.common.badge.modified":"Modifié","settings.common.permission.allow":"Permettre","settings.common.permission.ask":"Demander","settings.common.permission.deny":"Refuser","settings.common.state.comingSoon":"À venir...","settings.projects.actions.title":"Actions","settings.projects.shared.badge":"Dans le dépôt","settings.projects.shared.actionsFromRepo":"Enregistrées dans le dépôt ({path}). Tous ceux qui le récupèrent les ont.","settings.projects.shared.commandsFromRepo":"Exécutées en premier, enregistrées dans le dépôt ({path})","settings.projects.shared.invalid":"La configuration du projet dans {path} n'a pas pu être lue : {reason}","settings.projects.shared.trusted":"Commandes du dépôt approuvées sur cette instance","settings.projects.shared.resetTrust":"Réinitialiser la confiance","settings.projects.shared.title":"Configuration du dépôt","settings.projects.shared.description":"Configuration enregistrée dans le dépôt lui-même, pour que tous ceux qui le récupèrent aient les mêmes actions, commandes de configuration, amorces et plans. Rien n'est écrit tant que vous n'y déplacez pas un élément.","settings.projects.shared.file":"Fichier","settings.projects.shared.status.missing":"Pas encore dans le dépôt","settings.projects.shared.status.ok":"Dans le dépôt","settings.projects.shared.plansDir":"Dossier des plans","settings.projects.shared.plansDirPlaceholder":".aiworker/plans","settings.projects.shared.plansDirInfo":"Où vivent les plans du dépôt, relativement au dépôt. Vide signifie .aiworker/plans. Un dossier personnalisé comme docs/plans remplace entièrement le dossier par défaut : seul ce dossier est lu et écrit. Déplacez vous-même les fichiers existants quand vous le changez.","settings.projects.shared.plansDirAria":"Dossier des plans du dépôt","settings.projects.shared.actions.share":"Déplacer vers le dépôt","settings.projects.shared.actions.showTitle":"Réaffiche cette action du dépôt dans votre menu.","settings.projects.shared.actions.hideTitle":"Masque cette action du dépôt dans votre menu seulement ; le dépôt n'est pas modifié.","settings.projects.shared.actions.makePersonalTitle":"Le retire du dépôt et ne le garde que dans vos réglages sur cette instance.","settings.projects.shared.actions.shareTitle":"L'enregistre dans {path} du dépôt, pour que tous ceux qui le récupèrent l'aient. Il quitte vos réglages personnels.","settings.projects.shared.actions.shareAfterSave":"Enregistre d'abord vos modifications, puis déplacez","settings.projects.shared.actions.makePersonal":"Déplacer vers mes réglages","settings.projects.shared.actions.hide":"Masquer pour moi","settings.projects.shared.actions.show":"Afficher","settings.projects.shared.hiddenBadge":"Masqué","settings.projects.shared.replaceMode":"Utiliser uniquement mes commandes de configuration et ignorer celles du dépôt","settings.projects.shared.replaceModeAria":"Utiliser uniquement mes commandes de configuration et ignorer celles du dépôt","settings.projects.shared.toast.shareFailed":"Impossible de mettre à jour la configuration du dépôt","settings.projects.actions.description":"Commandes par projet affichées dans l'en-tête à côté du nom du projet.","settings.projects.actions.validation.fillNameAndCommand":"Remplissez le nom de l'action et la commande avant d'enregistrer.","settings.projects.actions.state.loading":"Chargement...","settings.projects.actions.state.empty":"Aucune action configurée pour le moment.","settings.projects.actions.state.untitled":"Action sans titre","settings.projects.actions.state.noDesktopSshForwards":"Aucun transfert local SSH activé disponible.","settings.projects.actions.field.selectIconAria":"Sélectionner l'icône","settings.projects.actions.field.iconAria":"Icône {icon}","settings.projects.actions.field.actionNamePlaceholder":"Nom de l'action","settings.projects.actions.field.command":"Commande","settings.projects.actions.field.commandPlaceholder":"p. ex. bun install","settings.projects.actions.runIn.label":"Exécuter dans","settings.projects.actions.runIn.info":"Choisissez où cette action s'exécute lorsqu'elle est lancée depuis un worktree lié.","settings.projects.actions.runIn.project":"Checkout parent","settings.projects.actions.runIn.worktree":"Worktree courant","settings.projects.actions.runIn.aria":"Répertoire d'exécution de cette action","settings.projects.actions.field.autoOpenUrl":"Ouverture automatique de l’URL","settings.projects.actions.field.autoOpenUrlForAria":"Ouverture automatique de l’URL pour {title}","settings.projects.actions.field.autoOpenUrlDescription":"Ouvrir l’URL détectée dans la sortie, ou l’URL personnalisée ci-dessous","settings.projects.actions.field.overrideUrlPlaceholder":"Remplacer URL (facultatif)","settings.projects.actions.field.overrideUrlTooltip":"Si ce champ est rempli, l’URL personnalisée est utilisée. Sinon, l'application ouvre la meilleure URL détectée dans la sortie.","settings.projects.actions.field.desktopSshForward":"Transfert SSH local","settings.projects.actions.field.useOutputManualUrl":"Utiliser l’URL de sortie ou l’URL manuelle","settings.projects.actions.actions.add":"Ajouter une action","settings.projects.actions.actions.save":"Enregistrer les actions","settings.projects.actions.toast.saveFailed":"Échec de l'enregistrement des actions","settings.projects.actions.toast.saved":"Actions du projet enregistrées","settings.aiworker.about.title":"À propos de AiWorker","settings.aiworker.about.field.version":"Version","settings.aiworker.about.state.checking":"Vérification...","settings.aiworker.about.state.upToDate":"À jour","settings.aiworker.about.actions.checkUpdates":"Vérifier les mises à jour","settings.aiworker.about.actions.update":"Mise à jour","settings.aiworker.about.actions.updateToVersion":"Mise à jour vers {version}","settings.aiworker.about.actions.checkForUpdates":"Vérifier les mises à jour","settings.aiworker.about.toast.latestVersion":"Vous êtes sur la dernière version","settings.agents.sidebar.title":"Agents","settings.agents.sidebar.total":"Total {count}","settings.agents.sidebar.empty.title":"Aucun agent configuré","settings.agents.sidebar.empty.description":"Utilisez le bouton + ci-dessus pour en créer un","settings.agents.sidebar.section.builtIn":"Agents intégrés","settings.agents.sidebar.section.custom":"Agents personnalisés","settings.agents.sidebar.badge.system":"système","settings.agents.sidebar.dialog.deleteTitle":"Supprimer un agent","settings.agents.sidebar.dialog.resetTitle":"Agent de réinitialisation","settings.agents.sidebar.dialog.deleteDescription":`Etes-vous sûr de vouloir supprimer l'agent "{name}" ?`,"settings.agents.sidebar.dialog.resetDescription":"Êtes-vous sûr de vouloir réinitialiser l'agent « {name} » à sa configuration par défaut ?","settings.agents.sidebar.renameDialog.title":"Renommer l'agent","settings.agents.sidebar.renameDialog.description":`Entrez un nouveau nom pour l'agent "@{name}"`,"settings.agents.sidebar.renameDialog.placeholder":"Nouveau nom d'agent...","settings.agents.sidebar.toast.builtInCannotDelete":"Les agents intégrés ne peuvent pas être supprimés","settings.agents.sidebar.toast.agentDeleted":'Agent "{name}" supprimé avec succès',"settings.agents.sidebar.toast.agentReset":'Agent "{name}" réinitialisé aux valeurs par défaut',"settings.agents.sidebar.toast.deleteFailed":"Échec de la suppression de l'agent","settings.agents.sidebar.toast.definitionNotFound":"Définition de l’agent introuvable. Aucune modification effectuée.","settings.agents.sidebar.toast.resetFailed":"Échec de la réinitialisation de l'agent","settings.agents.sidebar.toast.agentNameRequired":"Le nom de l'agent est requis","settings.agents.sidebar.toast.agentExists":"Un agent portant ce nom existe déjà","settings.agents.sidebar.toast.removeOldAfterRenameFailed":"Échec de la suppression de l'ancien agent après le changement de nom","settings.agents.sidebar.toast.renameFailed":"Échec du changement de nom de l'agent","settings.agents.sidebar.toast.agentRenamed":'Agent renommé en "{name}"',"settings.agents.page.toast.permissionNameRequired":"Le nom de l'autorisation est requis","settings.agents.page.toast.created":"Agent créé avec succès","settings.agents.page.toast.updated":"Agent mis à jour avec succès","settings.agents.page.toast.createFailed":"Échec de la création de l'agent","settings.agents.page.toast.updateFailed":"Échec de la mise à jour de l'agent","settings.agents.page.toast.saveUnexpectedError":"Une erreur s'est produite lors de l'enregistrement","settings.agents.page.toast.savedManualRestart":"Enregistré sur le disque. Redémarrez votre serveur OpenCode connecté pour appliquer les modifications.","settings.agents.page.empty.title":"Sélectionnez un agent dans la barre latérale","settings.agents.page.empty.description":"ou créez-en un nouveau","settings.agents.page.title.new":"Nouvel agent","settings.agents.page.subtitle.new":"Configurer un nouveau personnage d'assistant","settings.agents.page.subtitle.edit":"Modifier les paramètres de l'agent","settings.agents.page.section.identityRole":"Identité et rôle","settings.agents.page.section.modelParameters":"Modèle et paramètres","settings.agents.page.section.systemPrompt":"Prompt système","settings.agents.page.permissionsEditor.sectionInfo":"Modifie les règles de permissions propres à cet agent, telles qu'enregistrées dans sa config. « Hériter » laisse la clé non définie : la config globale et les valeurs par défaut s'appliquent.","settings.agents.page.permissionsEditor.defaultLabel":"Défaut pour tous les outils","settings.agents.page.permissionsEditor.defaultAria":"Permission par défaut pour tous les outils","settings.agents.page.permissionsEditor.defaultInfo":"Le repli au niveau de l'agent (la clé *). S'applique à tout outil sans règle propre.","settings.agents.page.permissionsEditor.effectiveHint":"→ {action}","settings.agents.page.permissionsEditor.ruleCount":"{count} règles","settings.agents.page.permissionsEditor.keyAria":"Permission pour {key}","settings.agents.page.permissionsEditor.patternPlaceholder":"Motif, p. ex. rm -rf * ou /path/**","settings.agents.page.permissionsEditor.patternActionAria":"Action pour le motif de {key}","settings.agents.page.permissionsEditor.customKeyPlaceholder":"Clé de permission personnalisée…","settings.agents.page.permissionsEditor.sessionRulesTitle":"Accordées en session (non enregistrées)","settings.agents.page.permissionsEditor.sessionRulesInfo":"Règles accordées pendant des sessions (réponses « toujours autoriser »). Elles s'appliquent maintenant mais ne font pas partie de la config enregistrée et disparaissent au redémarrage.","settings.agents.page.permissionsEditor.action.default":"Par défaut","settings.agents.page.permissionsEditor.action.inherit":"Hériter","settings.agents.page.permissionsEditor.action.allow":"Autoriser","settings.agents.page.permissionsEditor.action.ask":"Demander","settings.agents.page.permissionsEditor.action.deny":"Refuser","settings.agents.page.permissionsEditor.actions.save":"Enregistrer les permissions","settings.agents.page.permissionsEditor.actions.discard":"Annuler","settings.agents.page.permissionsEditor.actions.addRule":"Ajouter une règle","settings.agents.page.permissionsEditor.actions.addKey":"Ajouter une clé","settings.agents.page.permissionsEditor.actions.removeRuleAria":"Supprimer la règle","settings.agents.page.permissionsEditor.actions.retry":"Réessayer","settings.agents.page.permissionsEditor.state.loadFailed":"Impossible de charger la config de permissions de l'agent.","settings.agents.page.permissionsEditor.toast.saved":"Permissions enregistrées","settings.agents.page.permissionsEditor.toast.savedRestartRequired":"Permissions enregistrées — redémarrez le serveur OpenCode pour les appliquer","settings.agents.page.permissionsEditor.toast.saveFailed":"Échec de l'enregistrement des permissions","settings.agents.page.section.toolPermissions":"Autorisations des outils","settings.agents.page.field.agentName":"Nom de l'agent","settings.agents.page.field.agentNamePlaceholder":"nom-agent","settings.agents.page.field.scopePlaceholder":"Portée","settings.agents.page.field.descriptionPlaceholder":"Que fait cet agent ?","settings.agents.page.field.mode":"Mode","settings.agents.page.field.modeTooltip":"Visibilité principale et sous-agent","settings.agents.page.field.overrideModel":"Remplacer le modèle","settings.agents.page.field.variant":"Variante de réflexion","settings.agents.page.field.variantTooltip":"Optionnel. Si le modèle prend en charge le raisonnement, la variante contrôle la profondeur du raisonnement.","settings.agents.page.field.variantHint":"Spécifique au modèle (par ex. variante Anthropic)","settings.agents.page.field.variantPlaceholder":"par ex. high, max, low, none","settings.agents.page.field.temperature":"Température","settings.agents.page.field.temperatureTooltip":"Contrôle le caractère aléatoire. Plus élevé = créatif, Inférieur = concentré.","settings.agents.page.field.temperatureRange":"0.0 à 2.0","settings.agents.page.field.clearTemperatureAria":"Effacer le remplacement de la température","settings.agents.page.field.topP":"Haut P","settings.agents.page.field.topPTooltip":"Diversité d'échantillonnage du noyau. Inférieur = jetons probables uniquement.","settings.agents.page.field.topPRange":"0.0 à 1.0","settings.agents.page.field.clearTopPAria":"Effacer le remplacement p supérieur","settings.agents.page.field.systemPromptPlaceholder":"Vous êtes un assistant expert en codage...","settings.agents.page.mode.primary":"Primaire","settings.agents.page.mode.subagent":"Sous-agent","settings.agents.page.mode.all":"Tous","settings.agents.page.permissions.defaultLabel":"Défaut","settings.agents.page.permissions.hideEditor":"Masquer l'éditeur","settings.agents.page.permissions.advancedEditor":"Éditeur avancé","settings.agents.page.permissions.globalSummary":"Mondial : {summary}","settings.agents.page.permissions.rulesSummary":"Règles : {summary}","settings.agents.page.permissions.globalDefault":"Valeur par défaut globale","settings.agents.page.permissions.pattern":"Modèle","settings.agents.page.permissions.addCustomRule":"Ajouter une règle personnalisée","settings.agents.page.permissions.permissionPlaceholder":"Autorisation...","settings.agents.page.permissions.patternPlaceholder":"Modèle (e.g. *)","settings.page.behavior.title":"Comportement","settings.page.behavior.description":"Guidez la façon dont l'agent répond.","settings.behavior.page.title":"Comportement","settings.behavior.page.warning.title":"Les règles globales sont combinées avec les règles du projet","settings.behavior.page.warning.description":"Les modifications apportées ici mettent à jour {path}. OpenCode inclut également toutes les règles AGENTS.md au niveau du projet lorsqu'elles existent.","settings.behavior.page.section.systemPrompt":"Mondial AGENTS.md","settings.behavior.page.section.systemPromptOptimization":"Optimisation du prompt système","settings.behavior.page.systemPromptOptimization.enable":"Optimiser la taille du prompt système","settings.behavior.page.systemPromptOptimization.enableAria":"Optimiser la taille du prompt système d’OpenCode","settings.behavior.page.systemPromptOptimization.info":"Réduit le prompt système d’environ 40 % pour les agents build et plan. Les autres agents ne sont pas modifiés. Cela peut supprimer les définitions personnalisées qui remplacent build ou plan ; ne l’activez donc pas pour ces workflows. Le redémarrage d’OpenCode applique la modification.","settings.behavior.page.systemPromptOptimization.restarting":"Redémarrage d’OpenCode pour appliquer l’optimisation du prompt système…","settings.behavior.page.field.systemPromptPlaceholder":`Vous êtes un assistant IA utile...
|
|
1
|
+
import{fM as e,fN as t,fO as s}from"./useAppFontEffects-B6OfEypo.js";import"./vendor-react-BUCujlKS.js";import"./vendor-scheduler-7OC5HNn7.js";import"./index-BD8ILbxF.js";import"./vendor-zod-B6551dwG.js";import"./vendor-vite-runtime-DD1OZmLC.js";import"./vendor-zustand-BAGL70zf.js";import"./vendor-opencode-sdk-BJ73u-bH.js";import"./vendor-simplewebauthn-browser-VDA66rT_.js";import"./vendor-base-ui-BY_5qla_.js";import"./vendor-floating-ui-utils-D6FqdtJt.js";import"./vendor-floating-ui-react-dom-DxYCWdHj.js";import"./vendor-floating-ui-dom-BTvzWks8.js";import"./vendor-floating-ui-core-PuGzNPnN.js";import"./vendor-use-sync-external-store-D6wYuSt-.js";import"./vendor-class-variance-authority-5VPnzWs2.js";import"./vendor-clsx-B-dksMZM.js";import"./vendor-dnd-kit-core-BZknOX2w.js";import"./vendor-dnd-kit-utilities-B_MdXhJC.js";import"./vendor-dnd-kit-accessibility-BHxJPORy.js";import"./vendor-dnd-kit-sortable-CsEagZ81.js";import"./vendor-framer-motion-livSKyyV.js";import"./vendor-motion-dom-D_o3BTI3.js";import"./vendor-motion-utils-BGh8QBgx.js";import"./vendor-tanstack-react-virtual-g05Cx3z9.js";import"./vendor-tanstack-virtual-core-Dubg10g5.js";import"./contextPanelEmbeddedChat-BdA6bdky.js";import"./vendor-sonner-DFyL3AvE.js";import"./vendor-cmdk-DgLInKvT.js";import"./vendor-radix-ui-react-dialog-B94Bt2qq.js";import"./vendor-radix-ui-primitive-Dc_FVRD7.js";import"./vendor-radix-ui-react-compose-refs-DcAh5WdT.js";import"./vendor-radix-ui-react-context-Czxm7Z62.js";import"./vendor-radix-ui-react-id-f5BLKEVw.js";import"./vendor-radix-ui-react-use-layout-effect-D_3IhJdJ.js";import"./vendor-radix-ui-react-use-controllable-state-BFT5YmkA.js";import"./vendor-radix-ui-react-dismissable-layer-D7kXcwgJ.js";import"./vendor-radix-ui-react-primitive-DhVoX9SD.js";import"./vendor-radix-ui-react-slot-BQgQOasS.js";import"./vendor-radix-ui-react-use-callback-ref-BZPnuXAC.js";import"./vendor-radix-ui-react-use-escape-keydown-oph88g-F.js";import"./vendor-radix-ui-react-focus-scope-CiaxW4dD.js";import"./vendor-radix-ui-react-portal-BMJYHWck.js";import"./vendor-radix-ui-react-presence-CNxf-uq4.js";import"./vendor-radix-ui-react-focus-guards-B6qJXYua.js";import"./vendor-react-remove-scroll-DO7dCTnK.js";import"./vendor-tslib-De9GV7Vy.js";import"./vendor-react-remove-scroll-bar-BcFYyj3E.js";import"./vendor-react-style-singleton-q6EMHnwf.js";import"./vendor-get-nonce-C-Z93AgS.js";import"./vendor-use-sidecar-zDC0RhA3.js";import"./vendor-use-callback-ref-D3RC8gqK.js";import"./vendor-aria-hidden-DvXkyWUv.js";import"./vendor-codemirror-language-BgPj_McA.js";import"./vendor-lezer-common-B3-cUCR_.js";import"./vendor-codemirror-state-C9awkmn-.js";import"./vendor-marijn-find-cluster-break-DXwl3gUT.js";import"./vendor-codemirror-view-CiLROUVV.js";import"./vendor-style-mod-NZ5MEPvj.js";import"./vendor-w3c-keyname-Vcq4gwWv.js";import"./vendor-crelt-C8TCjufn.js";import"./vendor-lezer-highlight-CDMHUZ74.js";import"./vendor-codemirror-lang-javascript-Cc2ZYbgX.js";import"./vendor-lezer-javascript-D7Tj24ot.js";import"./vendor-lezer-lr-bhwg1HMg.js";import"./vendor-codemirror-autocomplete-DzPz9Wgq.js";import"./vendor-codemirror-lang-json-CMBS2tG9.js";import"./vendor-lezer-json-Iaex0UN-.js";import"./vendor-codemirror-lang-css-O0cZX78y.js";import"./vendor-lezer-css-C5xB6jxd.js";import"./vendor-codemirror-lang-html-CfgK872x.js";import"./vendor-lezer-html-C0I1p52t.js";import"./vendor-codemirror-lang-markdown-BPGOH9ye.js";import"./vendor-lezer-markdown-C6g-d6P3.js";import"./vendor-codemirror-language-data-SJuFp0a0.js";import"./vendor-codemirror-lang-python-HahnQaAS.js";import"./vendor-lezer-python-CvuFxeZl.js";import"./vendor-codemirror-commands-B7H_j0iU.js";import"./vendor-legendapp-list-BuBPBC3R.js";import"./vendor-tailwind-merge-CPcsbTWB.js";import"./vendor-fuse.js-Dw8P0qyA.js";const i={"settings.aiworker.visual.field.alwaysShowScrollbars":"Toujours afficher les barres de défilement","settings.aiworker.visual.field.alwaysShowScrollbarsHint":"Gardez les barres de défilement visibles même lorsque le pointeur se trouve hors de la zone défilante. Uniquement sur cet appareil.","settings.providers.page.openCodeGo.title":"Suivi de l’utilisation d’OpenCode Go","settings.providers.page.openCodeGo.description":"Connectez le tableau de bord OpenCode Go pour afficher les quotas glissant, hebdomadaire et mensuel.","settings.providers.page.openCodeGo.workspaceId":"ID de l’espace de travail","settings.providers.page.openCodeGo.authCookie":"Cookie d’authentification","settings.providers.page.openCodeGo.apiKey":"Clé API","settings.providers.page.openCodeGo.help":"Copiez l’ID depuis l’URL du tableau de bord et le cookie auth depuis les outils du navigateur. AiWorker n’analyse jamais les cookies du navigateur.","settings.providers.page.openCodeGo.save":"Enregistrer et valider","settings.providers.page.openCodeGo.replace":"Remplacer","settings.providers.page.openCodeGo.validate":"Valider","settings.providers.page.openCodeGo.delete":"Supprimer","settings.providers.page.quotaCredentials.saved":"Identifiants de {provider} enregistrés.","settings.providers.page.quotaCredentials.accessToken":"Jeton d’accès","settings.providers.page.quotaCredentials.usageToken":"Jeton API d’utilisation","settings.providers.page.quotaCredentials.exeDevTokenInstructions":"Exécutez cette commande dans votre terminal, puis collez le jeton ci-dessous. Il peut uniquement lire l’utilisation des crédits LLM et expire après 30 jours.","settings.providers.page.quotaCredentials.refreshToken":"Jeton d’actualisation","settings.providers.page.quotaCredentials.tokenPlaceholder":"Collez le jeton","settings.providers.page.openCodeGo.saveFailed":"Impossible de valider les identifiants OpenCode Go.","settings.providers.page.openCodeGo.valid":"Les identifiants OpenCode Go sont valides.","settings.providers.page.openCodeGo.invalid":"Les identifiants OpenCode Go sont invalides ou expirés.","settings.providers.page.openCodeGo.deleted":"Identifiants OpenCode Go supprimés.","settings.providers.page.openCodeGo.deleteFailed":"Impossible de supprimer les identifiants OpenCode Go.","settings.appearance.language.label":"Langue","settings.appearance.language.description":"Choisissez la langue de l'interface.","settings.appearance.language.select":"Sélectionnez la langue","settings.window.description":"Fenêtre des paramètres AiWorker.","settings.view.home.title":"Paramètres","settings.view.home.description":"Accédez aux pages communes.","settings.view.home.cards.providers.title":"Fournisseurs","settings.view.home.cards.providers.description":"Connecter les modèles + les identifiants","settings.view.home.cards.agents.title":"Agents","settings.view.home.cards.agents.description":"Invites, outils, autorisations","settings.view.home.cards.skillsCatalog.title":"Catalogue de skills","settings.view.home.cards.skillsCatalog.description":"Installer des skills depuis des catalogues","settings.view.home.cards.mcp.title":"MCP","settings.view.home.cards.mcp.description":"Configurer les serveurs MCP + connexions","settings.view.home.cards.plugins.title":"Plugins","settings.view.home.cards.plugins.description":"Gérer les plugins OpenCode","settings.view.home.cards.usage.title":"Usage","settings.view.home.cards.usage.description":"Quota + visibilité des dépenses","settings.view.unavailable.title":"Pas disponible","settings.view.unavailable.description":"Cette page de paramètres n'est pas disponible dans ce runtime.","settings.view.badge.beta":"bêta","settings.view.actions.reloadOpenCode":"Recharger OpenCode","settings.view.actions.reloadOpenCodeTooltip":"Redémarrez OpenCode et rechargez sa configuration.","settings.view.actions.applyAndRestartOpenCode":"Appliquer et redémarrer","settings.view.actions.applyAndRestartOpenCodeTooltipSingle":"Appliquer 1 modification de configuration en attente et redémarrer OpenCode.","settings.view.actions.applyAndRestartOpenCodeTooltipPlural":"Appliquer {count} modifications de configuration en attente et redémarrer OpenCode.","settings.view.pendingRestart.applying":"Redémarrage…","settings.view.pendingRestart.applied":"OpenCode a redémarré avec les modifications de configuration en attente.","settings.view.pendingRestart.applyFailed":"Échec de l'application des modifications de configuration.","settings.view.pendingRestart.manualRestartRequired":"Enregistré sur le disque. Redémarrez le serveur OpenCode connecté pour appliquer les modifications.","settings.view.pendingRestart.saved":"Enregistré. Redémarrez OpenCode pour appliquer.","settings.view.pendingRestart.confirm.title":"Appliquer et redémarrer ?","settings.view.pendingRestart.confirm.description":"Le redémarrage d'OpenCode arrêtera tous les chats en cours. Vos modifications de configuration enregistrées prendront effet après le redémarrage.","settings.view.pendingRestart.confirm.dontShowAgain":"Ne plus afficher","settings.view.pendingRestart.confirm.cancel":"Annuler","settings.view.actions.backToSettings":"Retour aux paramètres","settings.view.actions.closeSettings":"Fermer les paramètres","settings.view.actions.closeSettingsWithShortcut":"Fermer les paramètres ({shortcut}+,)","settings.view.actions.back":"Retour","settings.view.actions.resizeNavigation":"Redimensionner la navigation dans les paramètres","settings.page.projects.title":"Projets","settings.page.remoteInstances.title":"Instances distantes","settings.page.providers.title":"Fournisseurs","settings.page.usage.title":"Usage","settings.page.agents.title":"Agents","settings.page.commands.title":"Commandes","settings.page.mcp.title":"MCP","settings.page.plugins.title":"Plugins","settings.page.skills.title":"Skills","settings.page.skillsCatalog.title":"Catalogue de skills","settings.page.git.title":"Git","settings.page.appearance.title":"Apparence","settings.page.appearance.description":"Personnalisez l’apparence et le ressenti d’AiWorker.","settings.page.chat.title":"Chat","settings.page.chat.description":"Configurez l’affichage des messages et des outils.","settings.page.shortcuts.title":"Raccourcis","settings.page.shortcuts.description":"Personnalisez les raccourcis clavier.","settings.page.general.title":"Général","settings.page.general.description":"Démarrage de l'application, sécurité, connexion et confidentialité.","settings.page.sessions.title":"Sessions","settings.page.sessions.description":"Définissez les valeurs par défaut et la conservation des sessions.","settings.page.magicPrompts.title":"Prompts magiques","settings.page.notifications.title":"Notifications","settings.page.notifications.description":"Choisissez quand et comment être notifié.","settings.page.voice.title":"Voix","settings.page.voice.description":"Configurez la synthèse vocale et la dictée.","settings.page.tunnel.title":"Tunnel externe","settings.page.tunnel.description":"Exposez cette instance via un tunnel distant.","settings.page.snippets.title":"Extraits","settings.snippets.sidebar.title":"Extraits","settings.snippets.sidebar.total":"Total : {count}","settings.snippets.sidebar.actions.create":"Créer un extrait","settings.snippets.sidebar.actions.more":"Plus de propositions pour {name}","settings.snippets.sidebar.toast.deleted":"Extrait supprimé","settings.snippets.sidebar.toast.deleteFailed":"Échec de la suppression de l'extrait","settings.snippets.sidebar.dialog.deleteTitle":"Supprimer l'extrait ?","settings.snippets.sidebar.dialog.deleteDescription":"Cela supprimera définitivement #{name}.","settings.snippets.page.empty.title":"Sélectionnez un extrait","settings.snippets.page.empty.description":"Choisissez un extrait dans la barre latérale pour le modifier.","settings.snippets.page.title.new":"Nouvel extrait","settings.snippets.page.field.namePlaceholder":"nom de l'extrait","settings.snippets.page.field.descriptionPlaceholder":"À quoi sert cet extrait","settings.snippets.page.field.aliases":"Alias","settings.snippets.page.field.aliasesPlaceholder":"en sécurité, prudent","settings.snippets.page.field.content":"Contenu","settings.snippets.page.field.contentPlaceholder":"Markdown de l'extrait...","settings.snippets.page.hint":"Utilisez #name dans les prompts. Prend en charge les alias et les blocs de pré-ajout/ajout compatibles avec les extraits de code opencode.","settings.snippets.page.toast.nameRequired":"Le nom de l'extrait est obligatoire","settings.snippets.page.toast.contentRequired":"Le contenu de l'extrait est requis","settings.snippets.page.toast.saveFailed":"Échec de l'enregistrement de l'extrait","settings.snippets.page.toast.saved":"Extrait enregistré","settings.page.promptTemplates.title":"Modèles de prompt","settings.promptTemplates.sidebar.title":"Modèles de prompt","settings.promptTemplates.sidebar.total":"Total : {count}","settings.promptTemplates.sidebar.empty.title":"Aucun modèle de prompt","settings.promptTemplates.sidebar.empty.description":"Créez un modèle de prompt pour commencer.","settings.promptTemplates.sidebar.toast.deleted":'Modèle "{name}" supprimé',"settings.promptTemplates.sidebar.toast.deleteFailed":"Échec de la suppression du modèle","settings.promptTemplates.sidebar.toast.nameRequired":"Le nom du modèle est obligatoire","settings.promptTemplates.sidebar.toast.renamed":"Modèle renommé","settings.promptTemplates.sidebar.toast.renameFailed":"Échec du changement de nom du modèle","settings.promptTemplates.sidebar.dialog.deleteTitle":"Supprimer le modèle ?","settings.promptTemplates.sidebar.dialog.deleteDescription":'Cela supprimera définitivement "{name}". Cette action ne peut pas être annulée.',"settings.promptTemplates.sidebar.renameDialog.title":"Renommer le modèle","settings.promptTemplates.sidebar.renameDialog.description":'Entrez un nouveau nom pour "{name}".',"settings.promptTemplates.sidebar.renameDialog.placeholder":"Nom du modèle","settings.promptTemplates.sidebar.badge.default":"défaut","settings.promptTemplates.page.empty.title":"Sélectionnez un modèle","settings.promptTemplates.page.empty.description":"Choisissez un modèle dans la barre latérale pour le modifier.","settings.promptTemplates.page.title.new":"Nouveau modèle","settings.promptTemplates.page.subtitle.edit":"Modifier le modèle","settings.promptTemplates.page.subtitle.new":"Créer un nouveau modèle de prompt","settings.promptTemplates.page.section.identity":"Identité","settings.promptTemplates.page.field.name":"Nom","settings.promptTemplates.page.field.namePlaceholder":"Nom du modèle","settings.promptTemplates.page.section.template":"Modèle","settings.promptTemplates.page.field.templatePlaceholder":"Saisissez le texte du modèle de prompt...","settings.promptTemplates.page.templateHint":"Ce texte sera ajouté au début du prompt de l'utilisateur lorsqu'il est sélectionné dans un groupe multi-run.","settings.promptTemplates.page.toast.nameRequired":"Le nom du modèle est obligatoire","settings.promptTemplates.page.toast.updated":"Modèle mis à jour","settings.promptTemplates.page.toast.updateFailed":"Échec de la mise à jour du modèle","settings.promptTemplates.page.toast.created":"Modèle créé","settings.promptTemplates.page.toast.createFailed":"Échec de la création du modèle","settings.promptTemplates.page.toast.saveUnexpectedError":"Une erreur inattendue s'est produite lors de l'enregistrement","settings.aiworker.tunnel.title":"Tunnel externe","settings.aiworker.tunnel.description":"Configurez un accès à distance sécurisé avec des liens rapides ou votre propre tunnel Cloudflare distant géré.","settings.aiworker.tunnel.note.serverSideEnforced":"L'accès au tunnel sécurisé est appliqué côté serveur.","settings.aiworker.tunnel.note.connectLinksOneTime":"Les liens de connexion sont uniques et sont révoqués lorsque le tunnel s'arrête ou lorsque la durée de vie du lien de connexion expire.","settings.aiworker.tunnel.note.cloudflareConnectorTarget":"Cible du connecteur Cloudflare :","settings.aiworker.tunnel.note.cloudflareConnectorTargetUse":"Pour la cible du connecteur Cloudflare, utilisez","settings.aiworker.tunnel.note.tokensSavedPerTunnel":"Les jetons sont enregistrés par tunnel et réutilisés à partir du disque.","settings.aiworker.tunnel.note.customConfigUsed":"Le fichier de configuration personnalisé sera utilisé lors du démarrage du tunnel.","settings.aiworker.tunnel.note.defaultConfigUsed":"Lorsqu'il est vide, cloudflared utilise sa configuration par défaut (~/.cloudflared/config.yml).","settings.aiworker.tunnel.note.managedRemoteRequiresDomain":"Les tunnels distants gérés nécessitent un domaine acheté dans votre compte Cloudflare.","settings.aiworker.tunnel.note.managedLocalUsesConfig":"Les tunnels locaux gérés utilisent votre fichier de configuration cloudflared local.","settings.aiworker.tunnel.note.startModeAndGenerateLink":"Démarrez un tunnel {mode} et générez un lien de connexion unique. Ne fermez pas l'application pendant que ce tunnel est utilisé.","settings.aiworker.tunnel.note.scanQrToConnect":"Scannez avec votre téléphone pour vous connecter.","settings.aiworker.tunnel.section.redeemedAccessLinks":"Liens d'accès utilisés","settings.aiworker.tunnel.section.savedManagedRemoteTunnels":"Tunnels distants gérés enregistrés","settings.aiworker.tunnel.notAvailable.cloudflaredNotFound":"cloudflared introuvable","settings.aiworker.tunnel.notAvailable.installHint":"Installez-le pour activer l'accès au tunnel à distance :","settings.aiworker.tunnel.field.provider":"Fournisseur","settings.aiworker.tunnel.field.providerPlaceholder":"Sélectionnez le fournisseur","settings.aiworker.tunnel.field.tunnelType":"Type de tunnel","settings.aiworker.tunnel.field.connectLinkTtl":"Connecter le lien TTL","settings.aiworker.tunnel.field.tunnelSessionTtl":"Durée de vie de la session tunnel","settings.aiworker.tunnel.field.hostnameLabel":"Nom d'hôte :","settings.aiworker.tunnel.field.savedTokenAvailablePlaceholder":"Jeton enregistré disponible (facultatif à remplacer)","settings.aiworker.tunnel.field.pasteTokenPlaceholder":"Coller le jeton pour ce tunnel","settings.aiworker.tunnel.field.newPresetNamePlaceholder":"Nom du tunnel (e.g. Production)","settings.aiworker.tunnel.field.newPresetHostnamePlaceholder":"Nom d'hôte (e.g. oc.example.com)","settings.aiworker.tunnel.field.newPresetTokenPlaceholder":"Jeton","settings.aiworker.tunnel.field.managedRemoteTokenInfoAria":"Informations sur le jeton de tunnel distant géré","settings.aiworker.tunnel.field.configurationFile":"Fichier de configuration","settings.aiworker.tunnel.field.configurationFilePlaceholder":"Utilisation de la configuration cloudflared par défaut","settings.aiworker.tunnel.field.managedRemoteTunnelToConnect":"Tunnel distant géré pour se connecter","settings.aiworker.tunnel.field.selectSavedTunnelPlaceholder":"Sélectionnez le tunnel enregistré","settings.aiworker.tunnel.field.publicUrlHint":"URL publique (non accessible sans jeton)","settings.aiworker.tunnel.field.connectLink":"Lien de connexion","settings.aiworker.tunnel.field.expires":"Expire","settings.aiworker.tunnel.field.connectQrAlt":"Code de connexion du tunnel QR","settings.aiworker.tunnel.actions.removePresetAria":"Supprimer {name}","settings.aiworker.tunnel.actions.saveToken":"Enregistrer le jeton","settings.aiworker.tunnel.actions.browseConfigFileAria":"Parcourir le fichier de configuration","settings.aiworker.tunnel.actions.clearConfigFileAria":"Effacer le fichier de configuration","settings.aiworker.tunnel.actions.openManagedRemoteDocs":"Consultez la documentation sur la façon de configurer un tunnel distant géré","settings.aiworker.tunnel.actions.openManagedLocalDocs":"Consultez la documentation sur la configuration du tunnel local géré","settings.aiworker.tunnel.actions.startTunnel":"Démarrer le tunnel","settings.aiworker.tunnel.actions.startingTunnel":"Démarrage du tunnel...","settings.aiworker.tunnel.actions.stopTunnel":"Arrêter le tunnel","settings.aiworker.tunnel.actions.stopping":"Arrêt...","settings.aiworker.tunnel.actions.newConnectLink":"Nouveau lien de connexion","settings.aiworker.tunnel.actions.copied":"Copié","settings.aiworker.tunnel.actions.retry":"Réessayer","settings.aiworker.tunnel.option.moreProvidersSoon":"Plus de fournisseurs à venir","settings.aiworker.tunnel.option.mode.quick.label":"Quick","settings.aiworker.tunnel.option.mode.quick.tooltip":"Quick Tunnel est une solution best-effort dont la disponibilité n'est pas garantie.","settings.aiworker.tunnel.option.mode.managedRemote.label":"Managed Remote","settings.aiworker.tunnel.option.mode.managedRemote.tooltip":"Managed Remote utilise votre compte Cloudflare et votre nom d'hôte pour un accès longue durée.","settings.aiworker.tunnel.option.mode.managedLocal.label":"Managed Local","settings.aiworker.tunnel.option.mode.managedLocal.tooltip":"Managed Local utilise votre fichier de configuration cloudflared local.","settings.aiworker.tunnel.warning.quickModeReliability":"Pour un accès longue durée plus fiable, passez au mode Managed Remote ou Managed Local.","settings.aiworker.tunnel.warning.replacesActiveTunnel":"Le démarrage de ce tunnel remplace le tunnel actif et révoque les liens de connexion et les sessions distantes existantes.","settings.aiworker.tunnel.badge.quick":"RAPIDE","settings.aiworker.tunnel.badge.remote":"DISTANT","settings.aiworker.tunnel.badge.local":"LOCAL","settings.aiworker.tunnel.state.loading":"Chargement","settings.aiworker.tunnel.state.expired":"Expiré","settings.aiworker.tunnel.state.revoked":"Révoqué","settings.aiworker.tunnel.state.inactive":"Inactif","settings.aiworker.tunnel.state.noExpiry":"Pas d'expiration","settings.aiworker.tunnel.state.never":"Jamais","settings.aiworker.tunnel.state.tunnelReady":"Tunnel prêt","settings.aiworker.tunnel.session.redeemedAt":"{time} échangé","settings.aiworker.tunnel.session.expiresIn":"Expire dans {remaining}","settings.aiworker.tunnel.session.inactiveWithReason":"Inactif ({reason})","settings.aiworker.tunnel.error.invalidConfigExtension":"Le fichier de configuration doit utiliser l'extension .yml, .yaml ou .json.","settings.aiworker.tunnel.tooltip.tokensSavedPath":"Les jetons sont enregistrés dans ~/.config/openchamber/cloudflare-managed-remote-tunnels.json.","settings.aiworker.tunnel.empty.noManagedRemoteTunnels":"Aucun tunnel distant géré n'a encore été enregistré.","settings.aiworker.tunnel.toast.checkAvailabilityFailed":"Échec de la vérification de la disponibilité du tunnel","settings.aiworker.tunnel.toast.saveSettingsFailed":"Échec de l'enregistrement des paramètres du tunnel","settings.aiworker.tunnel.toast.saveTtlFailed":"Échec de l'enregistrement des paramètres TTL du tunnel","settings.aiworker.tunnel.toast.saveTokenFailed":"Échec de l'enregistrement du jeton de tunnel distant géré","settings.aiworker.tunnel.toast.selectOrAddManagedRemoteFirst":"Sélectionnez ou ajoutez d'abord un tunnel distant géré","settings.aiworker.tunnel.toast.managedRemoteTokenRequiredBeforeStarting":"Un jeton de tunnel distant géré est requis avant de démarrer","settings.aiworker.tunnel.toast.addManagedRemoteTokenBeforeStarting":"Ajoutez un jeton de tunnel distant géré avant de commencer","settings.aiworker.tunnel.toast.startFailed":"Échec du démarrage du tunnel","settings.aiworker.tunnel.toast.startedButNoPublicUrl":"Le tunnel a démarré mais aucune URL publique n'a été renvoyée","settings.aiworker.tunnel.toast.replacedTunnelSingleSingle":"Tunnel précédent remplacé : 1 lien révoqué, 1 session invalidée.","settings.aiworker.tunnel.toast.replacedTunnelSingleManySessions":"Tunnel précédent remplacé : 1 lien révoqué, sessions {invalidatedSessionCount} invalidées.","settings.aiworker.tunnel.toast.replacedTunnelManyLinksSingleSession":"Tunnel précédent remplacé : liens {revokedBootstrapCount} révoqués, 1 session invalidée.","settings.aiworker.tunnel.toast.replacedTunnelManyMany":"Tunnel précédent remplacé : liens {revokedBootstrapCount} révoqués, sessions {invalidatedSessionCount} invalidées.","settings.aiworker.tunnel.toast.linkReady":"Lien de connexion prêt","settings.aiworker.tunnel.toast.stopped":"Tunnel arrêté","settings.aiworker.tunnel.toast.stopFailed":"Échec de l'arrêt du tunnel","settings.aiworker.tunnel.toast.connectLinkCopied":"Lien de connexion copié","settings.aiworker.tunnel.toast.copyUrlFailed":"Échec de la copie de l'URL","settings.aiworker.tunnel.toast.saveSelectedManagedRemoteFailed":"Échec de l'enregistrement du tunnel distant géré sélectionné","settings.aiworker.tunnel.toast.tunnelNameRequired":"Le nom du tunnel est obligatoire","settings.aiworker.tunnel.toast.managedRemoteHostnameRequired":"Le nom d'hôte du tunnel distant géré est requis","settings.aiworker.tunnel.toast.managedRemoteTokenRequired":"Un jeton de tunnel distant géré est requis","settings.aiworker.tunnel.toast.hostnameAlreadyExists":"Ce nom d'hôte existe déjà","settings.aiworker.tunnel.toast.managedRemoteSaved":"Tunnel distant géré enregistré","settings.aiworker.tunnel.toast.managedRemoteRemoved":"Tunnel distant géré supprimé","settings.magicPrompts.sidebar.title":"Prompts magiques","settings.magicPrompts.sidebar.description":"Sélectionnez un modèle de prompt à modifier.","settings.magicPrompts.sidebar.group.git":"Git","settings.magicPrompts.sidebar.group.github":"GitHub","settings.magicPrompts.sidebar.group.planning":"Planification","settings.magicPrompts.sidebar.group.session":"Session","settings.magicPrompts.sidebar.item.gitCommitGenerate":"Génération de commit","settings.magicPrompts.sidebar.item.gitPrGenerate":"Génération de PR","settings.magicPrompts.sidebar.item.gitConflictResolve":"Résolution des conflits de fusion/rebase","settings.magicPrompts.sidebar.item.gitCherrypickConflictResolve":"Résolution des conflits par sélection","settings.magicPrompts.sidebar.item.githubPrReview":"Revue de PR","settings.magicPrompts.sidebar.item.githubIssueReview":"Examen du problème","settings.magicPrompts.sidebar.item.githubPrFailedChecksReview":"Examen des checks PR en échec","settings.magicPrompts.sidebar.item.githubPrCommentsReview":"Examen des commentaires PR","settings.magicPrompts.sidebar.item.githubSinglePrCommentReview":"Examen des commentaires PR uniques","settings.magicPrompts.sidebar.item.planTodo":"Planification des tâches","settings.magicPrompts.sidebar.item.planImprove":"Améliorer le plan","settings.magicPrompts.sidebar.item.planImplement":"Plan de mise en œuvre","settings.magicPrompts.sidebar.item.sessionSummary":"Résumé de la session","settings.magicPrompts.sidebar.item.sessionWorkspaceReview":"Examen de l'espace de travail","settings.magicPrompts.sidebar.item.sessionFusion":"Fusion","settings.remoteInstances.sidebar.title":"Instances distantes","settings.remoteInstances.sidebar.total":"Total {count}","settings.remoteInstances.sidebar.newSshInstanceName":"Nouvelle instance SSH","settings.remoteInstances.sidebar.actions.addSshInstance":"Ajouter une instance SSH","settings.remoteInstances.sidebar.actions.connect":"Connecter","settings.remoteInstances.sidebar.actions.disconnect":"Déconnecter","settings.remoteInstances.sidebar.actions.retry":"Réessayer","settings.remoteInstances.sidebar.actions.remove":"Retirer","settings.remoteInstances.sidebar.confirm.localPortInUseRetry":"Le port local est déjà utilisé. Choisir un port local gratuit et réessayer ?","settings.remoteInstances.sidebar.toast.createFailed":"Échec de la création de l'instance SSH","settings.remoteInstances.sidebar.toast.retriedWithRandomPort":"Réessayé avec un port local aléatoire","settings.remoteInstances.sidebar.toast.connectFailed":"Échec de la connexion de l'instance","settings.remoteInstances.sidebar.toast.disconnectFailed":"Échec de la déconnexion de l'instance","settings.remoteInstances.sidebar.toast.retryFailed":"Échec de la nouvelle tentative de connexion","settings.remoteInstances.sidebar.toast.removeFailed":"Échec de la suppression de l'instance","settings.remoteInstances.sidebar.phase.ready":"Prêt","settings.remoteInstances.sidebar.phase.error":"Erreur","settings.remoteInstances.sidebar.phase.reconnect":"Reconnecter","settings.remoteInstances.sidebar.phase.installing":"Installation","settings.remoteInstances.sidebar.phase.updating":"Mise à jour","settings.remoteInstances.sidebar.phase.forwarding":"Transfert","settings.remoteInstances.sidebar.phase.starting":"Démarrage","settings.remoteInstances.sidebar.phase.connecting":"Connexion","settings.remoteInstances.sidebar.phase.idle":"Inactif","settings.remoteInstances.page.section.instance":"Instance","settings.remoteInstances.page.section.instanceDescription":"Paramètres de base du SSH.","settings.remoteInstances.page.field.mode":"Mode","settings.remoteInstances.page.field.modeHint":"Installations/mises à jour gérées et démarrage de AiWorker à distance. Externe suppose qu'il est déjà en cours d'exécution.","settings.remoteInstances.page.field.modePlaceholder":"Sélectionnez le mode","settings.remoteInstances.page.field.modeManaged":"Géré (démarrage automatique)","settings.remoteInstances.page.field.modeExternal":"Externe (déjà en cours d'exécution)","settings.remoteInstances.page.field.preferredRemotePort":"Port sur la machine distante","settings.remoteInstances.page.field.preferredRemotePortHint":"Port utilisé par AiWorker sur la machine distante. Laissez vide pour en choisir un automatiquement.","settings.remoteInstances.page.field.keepServerRunning":"Maintenir le serveur en marche","settings.remoteInstances.page.field.keepServerRunningHint":"Laisser le serveur distant tourner après la déconnexion. Désactivé, il est arrêté à la déconnexion puis redémarré à la connexion suivante.","settings.remoteInstances.page.field.bindHost":"Accessible depuis","settings.remoteInstances.page.field.bindHostHint":"Qui peut ouvrir l’adresse redirigée sur cet ordinateur. La machine distante reste de toute façon accessible uniquement par le tunnel SSH.","settings.remoteInstances.page.field.preferredLocalPort":"Port sur cet ordinateur","settings.remoteInstances.page.field.preferredLocalPortHint":"Port ouvert sur cet ordinateur pour le tunnel. Laissez vide pour en choisir un automatiquement.","settings.remoteInstances.page.field.forwardType":"Type de transfert","settings.remoteInstances.page.field.localHostPlaceholder":"127.0.0.1","settings.remoteInstances.page.field.remoteHostPlaceholder":"127.0.0.1","settings.remoteInstances.page.field.auto":"Auto","settings.remoteInstances.page.confirm.bindAllInterfaces":"La liaison à 0.0.0.0 expose les ports transférés à votre réseau local. Continuer?","settings.remoteInstances.page.preview.localSocks5":"(SOCKS5 local)","settings.remoteInstances.page.preview.local":"(local)","settings.remoteInstances.page.preview.remote":"(hôte distant)","settings.remoteInstances.page.toast.openLocalEndpointFailed":"Échec de l'ouverture du point de terminaison local","settings.remoteInstances.page.toast.localUrlCopied":"URL locale copiée","settings.remoteInstances.page.actions.copyLocalUrl":"Copier l’URL locale","settings.remoteInstances.page.actions.open":"Ouvrir","settings.remoteInstances.page.logsDialog.selectedInstanceFallback":"Instance sélectionnée","settings.remoteInstances.page.patternDialog.descriptionWithHost":"{host} nécessite une destination concrète.","settings.remoteInstances.page.patternDialog.description":"Entrez la destination.","settings.common.infoAria":"Plus d’informations","settings.common.actions.cancel":"Annuler","settings.common.actions.create":"Créer","settings.common.actions.delete":"Supprimer","settings.aiworker.appLinks.title":"Liens d’application approuvés","settings.aiworker.appLinks.info":"Les liens de cette liste s’ouvrent sans nouvelle demande sur cet appareil. Les autres liens d’application demandent toujours une confirmation.","settings.aiworker.appLinks.empty":"Aucun lien d’application approuvé sur cet appareil. Choisissez « Approuver et ouvrir » lors de l’ouverture d’un lien pour l’ajouter ici.","settings.aiworker.appLinks.removeAria":"Supprimer les liens {scheme} approuvés","settings.common.actions.reset":"Réinitialiser","settings.common.actions.rename":"Rebaptiser","settings.common.actions.duplicate":"Dupliquer","settings.common.actions.import":"Importer","settings.common.actions.copyAll":"Copier tout","settings.common.actions.clear":"Effacer","settings.common.actions.saving":"Enregistrement...","settings.common.status.saved":"Enregistré","settings.common.status.saveFailed":"Échec de l’enregistrement","settings.common.actions.saveChanges":"Enregistrer les modifications","settings.common.scope.global":"Mondial","settings.common.scope.project":"Projet","settings.common.field.description":"Description","settings.common.badge.new":"Nouveau","settings.common.badge.modified":"Modifié","settings.common.permission.allow":"Permettre","settings.common.permission.ask":"Demander","settings.common.permission.deny":"Refuser","settings.common.state.comingSoon":"À venir...","settings.projects.actions.title":"Actions","settings.projects.shared.badge":"Dans le dépôt","settings.projects.shared.actionsFromRepo":"Enregistrées dans le dépôt ({path}). Tous ceux qui le récupèrent les ont.","settings.projects.shared.commandsFromRepo":"Exécutées en premier, enregistrées dans le dépôt ({path})","settings.projects.shared.invalid":"La configuration du projet dans {path} n'a pas pu être lue : {reason}","settings.projects.shared.trusted":"Commandes du dépôt approuvées sur cette instance","settings.projects.shared.resetTrust":"Réinitialiser la confiance","settings.projects.shared.title":"Configuration du dépôt","settings.projects.shared.description":"Configuration enregistrée dans le dépôt lui-même, pour que tous ceux qui le récupèrent aient les mêmes actions, commandes de configuration, amorces et plans. Rien n'est écrit tant que vous n'y déplacez pas un élément.","settings.projects.shared.file":"Fichier","settings.projects.shared.status.missing":"Pas encore dans le dépôt","settings.projects.shared.status.ok":"Dans le dépôt","settings.projects.shared.plansDir":"Dossier des plans","settings.projects.shared.plansDirPlaceholder":".aiworker/plans","settings.projects.shared.plansDirInfo":"Où vivent les plans du dépôt, relativement au dépôt. Vide signifie .aiworker/plans. Un dossier personnalisé comme docs/plans remplace entièrement le dossier par défaut : seul ce dossier est lu et écrit. Déplacez vous-même les fichiers existants quand vous le changez.","settings.projects.shared.plansDirAria":"Dossier des plans du dépôt","settings.projects.shared.actions.share":"Déplacer vers le dépôt","settings.projects.shared.actions.showTitle":"Réaffiche cette action du dépôt dans votre menu.","settings.projects.shared.actions.hideTitle":"Masque cette action du dépôt dans votre menu seulement ; le dépôt n'est pas modifié.","settings.projects.shared.actions.makePersonalTitle":"Le retire du dépôt et ne le garde que dans vos réglages sur cette instance.","settings.projects.shared.actions.shareTitle":"L'enregistre dans {path} du dépôt, pour que tous ceux qui le récupèrent l'aient. Il quitte vos réglages personnels.","settings.projects.shared.actions.shareAfterSave":"Enregistre d'abord vos modifications, puis déplacez","settings.projects.shared.actions.makePersonal":"Déplacer vers mes réglages","settings.projects.shared.actions.hide":"Masquer pour moi","settings.projects.shared.actions.show":"Afficher","settings.projects.shared.hiddenBadge":"Masqué","settings.projects.shared.replaceMode":"Utiliser uniquement mes commandes de configuration et ignorer celles du dépôt","settings.projects.shared.replaceModeAria":"Utiliser uniquement mes commandes de configuration et ignorer celles du dépôt","settings.projects.shared.toast.shareFailed":"Impossible de mettre à jour la configuration du dépôt","settings.projects.actions.description":"Commandes par projet affichées dans l'en-tête à côté du nom du projet.","settings.projects.actions.validation.fillNameAndCommand":"Remplissez le nom de l'action et la commande avant d'enregistrer.","settings.projects.actions.state.loading":"Chargement...","settings.projects.actions.state.empty":"Aucune action configurée pour le moment.","settings.projects.actions.state.untitled":"Action sans titre","settings.projects.actions.state.noDesktopSshForwards":"Aucun transfert local SSH activé disponible.","settings.projects.actions.field.selectIconAria":"Sélectionner l'icône","settings.projects.actions.field.iconAria":"Icône {icon}","settings.projects.actions.field.actionNamePlaceholder":"Nom de l'action","settings.projects.actions.field.command":"Commande","settings.projects.actions.field.commandPlaceholder":"p. ex. bun install","settings.projects.actions.runIn.label":"Exécuter dans","settings.projects.actions.runIn.info":"Choisissez où cette action s'exécute lorsqu'elle est lancée depuis un worktree lié.","settings.projects.actions.runIn.project":"Checkout parent","settings.projects.actions.runIn.worktree":"Worktree courant","settings.projects.actions.runIn.aria":"Répertoire d'exécution de cette action","settings.projects.actions.field.autoOpenUrl":"Ouverture automatique de l’URL","settings.projects.actions.field.autoOpenUrlForAria":"Ouverture automatique de l’URL pour {title}","settings.projects.actions.field.autoOpenUrlDescription":"Ouvrir l’URL détectée dans la sortie, ou l’URL personnalisée ci-dessous","settings.projects.actions.field.overrideUrlPlaceholder":"Remplacer URL (facultatif)","settings.projects.actions.field.overrideUrlTooltip":"Si ce champ est rempli, l’URL personnalisée est utilisée. Sinon, l'application ouvre la meilleure URL détectée dans la sortie.","settings.projects.actions.field.desktopSshForward":"Transfert SSH local","settings.projects.actions.field.useOutputManualUrl":"Utiliser l’URL de sortie ou l’URL manuelle","settings.projects.actions.actions.add":"Ajouter une action","settings.projects.actions.actions.save":"Enregistrer les actions","settings.projects.actions.toast.saveFailed":"Échec de l'enregistrement des actions","settings.projects.actions.toast.saved":"Actions du projet enregistrées","settings.aiworker.about.title":"À propos de AiWorker","settings.aiworker.about.field.version":"Version","settings.aiworker.about.state.checking":"Vérification...","settings.aiworker.about.state.upToDate":"À jour","settings.aiworker.about.actions.checkUpdates":"Vérifier les mises à jour","settings.aiworker.about.actions.update":"Mise à jour","settings.aiworker.about.actions.updateToVersion":"Mise à jour vers {version}","settings.aiworker.about.actions.checkForUpdates":"Vérifier les mises à jour","settings.aiworker.about.toast.latestVersion":"Vous êtes sur la dernière version","settings.agents.sidebar.title":"Agents","settings.agents.sidebar.total":"Total {count}","settings.agents.sidebar.empty.title":"Aucun agent configuré","settings.agents.sidebar.empty.description":"Utilisez le bouton + ci-dessus pour en créer un","settings.agents.sidebar.section.builtIn":"Agents intégrés","settings.agents.sidebar.section.custom":"Agents personnalisés","settings.agents.sidebar.badge.system":"système","settings.agents.sidebar.dialog.deleteTitle":"Supprimer un agent","settings.agents.sidebar.dialog.resetTitle":"Agent de réinitialisation","settings.agents.sidebar.dialog.deleteDescription":`Etes-vous sûr de vouloir supprimer l'agent "{name}" ?`,"settings.agents.sidebar.dialog.resetDescription":"Êtes-vous sûr de vouloir réinitialiser l'agent « {name} » à sa configuration par défaut ?","settings.agents.sidebar.renameDialog.title":"Renommer l'agent","settings.agents.sidebar.renameDialog.description":`Entrez un nouveau nom pour l'agent "@{name}"`,"settings.agents.sidebar.renameDialog.placeholder":"Nouveau nom d'agent...","settings.agents.sidebar.toast.builtInCannotDelete":"Les agents intégrés ne peuvent pas être supprimés","settings.agents.sidebar.toast.agentDeleted":'Agent "{name}" supprimé avec succès',"settings.agents.sidebar.toast.agentReset":'Agent "{name}" réinitialisé aux valeurs par défaut',"settings.agents.sidebar.toast.deleteFailed":"Échec de la suppression de l'agent","settings.agents.sidebar.toast.definitionNotFound":"Définition de l’agent introuvable. Aucune modification effectuée.","settings.agents.sidebar.toast.resetFailed":"Échec de la réinitialisation de l'agent","settings.agents.sidebar.toast.agentNameRequired":"Le nom de l'agent est requis","settings.agents.sidebar.toast.agentExists":"Un agent portant ce nom existe déjà","settings.agents.sidebar.toast.removeOldAfterRenameFailed":"Échec de la suppression de l'ancien agent après le changement de nom","settings.agents.sidebar.toast.renameFailed":"Échec du changement de nom de l'agent","settings.agents.sidebar.toast.agentRenamed":'Agent renommé en "{name}"',"settings.agents.page.toast.permissionNameRequired":"Le nom de l'autorisation est requis","settings.agents.page.toast.created":"Agent créé avec succès","settings.agents.page.toast.updated":"Agent mis à jour avec succès","settings.agents.page.toast.createFailed":"Échec de la création de l'agent","settings.agents.page.toast.updateFailed":"Échec de la mise à jour de l'agent","settings.agents.page.toast.saveUnexpectedError":"Une erreur s'est produite lors de l'enregistrement","settings.agents.page.toast.savedManualRestart":"Enregistré sur le disque. Redémarrez votre serveur OpenCode connecté pour appliquer les modifications.","settings.agents.page.empty.title":"Sélectionnez un agent dans la barre latérale","settings.agents.page.empty.description":"ou créez-en un nouveau","settings.agents.page.title.new":"Nouvel agent","settings.agents.page.subtitle.new":"Configurer un nouveau personnage d'assistant","settings.agents.page.subtitle.edit":"Modifier les paramètres de l'agent","settings.agents.page.section.identityRole":"Identité et rôle","settings.agents.page.section.modelParameters":"Modèle et paramètres","settings.agents.page.section.systemPrompt":"Prompt système","settings.agents.page.permissionsEditor.sectionInfo":"Modifie les règles de permissions propres à cet agent, telles qu'enregistrées dans sa config. « Hériter » laisse la clé non définie : la config globale et les valeurs par défaut s'appliquent.","settings.agents.page.permissionsEditor.defaultLabel":"Défaut pour tous les outils","settings.agents.page.permissionsEditor.defaultAria":"Permission par défaut pour tous les outils","settings.agents.page.permissionsEditor.defaultInfo":"Le repli au niveau de l'agent (la clé *). S'applique à tout outil sans règle propre.","settings.agents.page.permissionsEditor.effectiveHint":"→ {action}","settings.agents.page.permissionsEditor.ruleCount":"{count} règles","settings.agents.page.permissionsEditor.keyAria":"Permission pour {key}","settings.agents.page.permissionsEditor.patternPlaceholder":"Motif, p. ex. rm -rf * ou /path/**","settings.agents.page.permissionsEditor.patternActionAria":"Action pour le motif de {key}","settings.agents.page.permissionsEditor.customKeyPlaceholder":"Clé de permission personnalisée…","settings.agents.page.permissionsEditor.sessionRulesTitle":"Accordées en session (non enregistrées)","settings.agents.page.permissionsEditor.sessionRulesInfo":"Règles accordées pendant des sessions (réponses « toujours autoriser »). Elles s'appliquent maintenant mais ne font pas partie de la config enregistrée et disparaissent au redémarrage.","settings.agents.page.permissionsEditor.action.default":"Par défaut","settings.agents.page.permissionsEditor.action.inherit":"Hériter","settings.agents.page.permissionsEditor.action.allow":"Autoriser","settings.agents.page.permissionsEditor.action.ask":"Demander","settings.agents.page.permissionsEditor.action.deny":"Refuser","settings.agents.page.permissionsEditor.actions.save":"Enregistrer les permissions","settings.agents.page.permissionsEditor.actions.discard":"Annuler","settings.agents.page.permissionsEditor.actions.addRule":"Ajouter une règle","settings.agents.page.permissionsEditor.actions.addKey":"Ajouter une clé","settings.agents.page.permissionsEditor.actions.removeRuleAria":"Supprimer la règle","settings.agents.page.permissionsEditor.actions.retry":"Réessayer","settings.agents.page.permissionsEditor.state.loadFailed":"Impossible de charger la config de permissions de l'agent.","settings.agents.page.permissionsEditor.toast.saved":"Permissions enregistrées","settings.agents.page.permissionsEditor.toast.savedRestartRequired":"Permissions enregistrées — redémarrez le serveur OpenCode pour les appliquer","settings.agents.page.permissionsEditor.toast.saveFailed":"Échec de l'enregistrement des permissions","settings.agents.page.section.toolPermissions":"Autorisations des outils","settings.agents.page.field.agentName":"Nom de l'agent","settings.agents.page.field.agentNamePlaceholder":"nom-agent","settings.agents.page.field.scopePlaceholder":"Portée","settings.agents.page.field.descriptionPlaceholder":"Que fait cet agent ?","settings.agents.page.field.mode":"Mode","settings.agents.page.field.modeTooltip":"Visibilité principale et sous-agent","settings.agents.page.field.overrideModel":"Remplacer le modèle","settings.agents.page.field.variant":"Variante de réflexion","settings.agents.page.field.variantTooltip":"Optionnel. Si le modèle prend en charge le raisonnement, la variante contrôle la profondeur du raisonnement.","settings.agents.page.field.variantHint":"Spécifique au modèle (par ex. variante Anthropic)","settings.agents.page.field.variantPlaceholder":"par ex. high, max, low, none","settings.agents.page.field.temperature":"Température","settings.agents.page.field.temperatureTooltip":"Contrôle le caractère aléatoire. Plus élevé = créatif, Inférieur = concentré.","settings.agents.page.field.temperatureRange":"0.0 à 2.0","settings.agents.page.field.clearTemperatureAria":"Effacer le remplacement de la température","settings.agents.page.field.topP":"Haut P","settings.agents.page.field.topPTooltip":"Diversité d'échantillonnage du noyau. Inférieur = jetons probables uniquement.","settings.agents.page.field.topPRange":"0.0 à 1.0","settings.agents.page.field.clearTopPAria":"Effacer le remplacement p supérieur","settings.agents.page.field.systemPromptPlaceholder":"Vous êtes un assistant expert en codage...","settings.agents.page.mode.primary":"Primaire","settings.agents.page.mode.subagent":"Sous-agent","settings.agents.page.mode.all":"Tous","settings.agents.page.permissions.defaultLabel":"Défaut","settings.agents.page.permissions.hideEditor":"Masquer l'éditeur","settings.agents.page.permissions.advancedEditor":"Éditeur avancé","settings.agents.page.permissions.globalSummary":"Mondial : {summary}","settings.agents.page.permissions.rulesSummary":"Règles : {summary}","settings.agents.page.permissions.globalDefault":"Valeur par défaut globale","settings.agents.page.permissions.pattern":"Modèle","settings.agents.page.permissions.addCustomRule":"Ajouter une règle personnalisée","settings.agents.page.permissions.permissionPlaceholder":"Autorisation...","settings.agents.page.permissions.patternPlaceholder":"Modèle (e.g. *)","settings.page.behavior.title":"Comportement","settings.page.behavior.description":"Guidez la façon dont l'agent répond.","settings.behavior.page.title":"Comportement","settings.behavior.page.warning.title":"Les règles globales sont combinées avec les règles du projet","settings.behavior.page.warning.description":"Les modifications apportées ici mettent à jour {path}. OpenCode inclut également toutes les règles AGENTS.md au niveau du projet lorsqu'elles existent.","settings.behavior.page.section.systemPrompt":"Mondial AGENTS.md","settings.behavior.page.section.systemPromptOptimization":"Optimisation du prompt système","settings.behavior.page.systemPromptOptimization.enable":"Optimiser la taille du prompt système","settings.behavior.page.systemPromptOptimization.enableAria":"Optimiser la taille du prompt système d’OpenCode","settings.behavior.page.systemPromptOptimization.info":"Réduit le prompt système d’environ 40 % pour les agents build et plan. Les autres agents ne sont pas modifiés. Cela peut supprimer les définitions personnalisées qui remplacent build ou plan ; ne l’activez donc pas pour ces workflows. Le redémarrage d’OpenCode applique la modification.","settings.behavior.page.systemPromptOptimization.restarting":"Redémarrage d’OpenCode pour appliquer l’optimisation du prompt système…","settings.behavior.page.field.systemPromptPlaceholder":`Vous êtes un assistant IA utile...
|
|
2
2
|
|
|
3
3
|
Utilisez cet espace pour définir des règles absolues sur la façon dont l'IA doit se comporter dans toutes les sessions et tous les fournisseurs.`,"settings.behavior.page.section.responseStyle":"Style de réponse","settings.behavior.page.responseStyle.tooltip":"Lorsqu'elles sont activées, ces instructions guident la manière dont l'assistant répond à chaque nouvelle conversation. Ils sont envoyés avec votre premier message et ne modifient pas vos règles globales AGENTS.md.","settings.behavior.page.responseStyle.enableAria":"Activer les instructions de style de réponse","settings.behavior.page.responseStyle.enable":"Ajouter des instructions de style de réponse aux nouvelles conversations","settings.behavior.page.responseStyle.preset":"Préréglage","settings.behavior.page.responseStyle.option.concise":"Concis","settings.behavior.page.responseStyle.option.detailed":"Détaillé","settings.behavior.page.responseStyle.option.mentor":"Mentor","settings.behavior.page.responseStyle.option.pushback":"Repoussement","settings.behavior.page.responseStyle.option.noFiller":"Pas de remplissage","settings.behavior.page.responseStyle.option.matchEnergy":"Correspond à mon énergie","settings.behavior.page.responseStyle.option.warmPeer":"Pair chaleureux","settings.behavior.page.responseStyle.option.custom":"Personnalisé","settings.behavior.page.responseStyle.customPlaceholder":"Écrivez l'instruction à ajouter au premier message...","settings.behavior.page.toast.saved":"Comportement enregistré avec succès","settings.behavior.page.toast.saveFailed":"Échec de l'enregistrement du comportement","settings.commands.sidebar.title":"Commandes","settings.commands.sidebar.total":"Total {count}","settings.commands.sidebar.empty.title":"Aucune commande configurée","settings.commands.sidebar.empty.description":"Utilisez le bouton + ci-dessus pour en créer un","settings.commands.sidebar.section.builtIn":"Commandes intégrées","settings.commands.sidebar.section.custom":"Commandes personnalisées","settings.commands.sidebar.dialog.deleteTitle":"Supprimer la commande","settings.commands.sidebar.dialog.resetTitle":"Commande de réinitialisation","settings.commands.sidebar.dialog.deleteDescription":"Etes-vous sûr de vouloir supprimer la commande « {name} » ?","settings.commands.sidebar.dialog.resetDescription":"Êtes-vous sûr de vouloir réinitialiser la commande « {name} » à sa configuration par défaut ?","settings.commands.sidebar.renameDialog.title":"Commande Renommer","settings.commands.sidebar.renameDialog.description":'Entrez un nouveau nom pour la commande "/{name}"',"settings.commands.sidebar.renameDialog.placeholder":"Nouveau nom de commande...","settings.commands.sidebar.toast.builtInCannotDelete":"Les commandes intégrées ne peuvent pas être supprimées","settings.commands.sidebar.toast.commandDeleted":'Commande "{name}" supprimée avec succès',"settings.commands.sidebar.toast.commandReset":'Commande "{name}" réinitialisée aux valeurs par défaut',"settings.commands.sidebar.toast.deleteFailed":"Échec de la suppression de la commande","settings.commands.sidebar.toast.resetFailed":"Échec de la réinitialisation de la commande","settings.commands.sidebar.toast.commandNameRequired":"Le nom de la commande est obligatoire","settings.commands.sidebar.toast.commandExists":"Une commande portant ce nom existe déjà","settings.commands.sidebar.toast.removeOldAfterRenameFailed":"Échec de la suppression de l'ancienne commande après le changement de nom","settings.commands.sidebar.toast.renameFailed":"Échec du renommage de la commande","settings.commands.page.toast.templateRequired":"Le modèle de commande est requis","settings.commands.page.toast.created":"Commande créée avec succès","settings.commands.page.toast.updated":"Commande mise à jour avec succès","settings.commands.page.toast.createFailed":"Échec de la création de la commande","settings.commands.page.toast.updateFailed":"Échec de la mise à jour de la commande","settings.commands.page.toast.saveUnexpectedError":"Une erreur s'est produite lors de l'enregistrement","settings.commands.page.empty.title":"Sélectionnez une commande dans la barre latérale","settings.commands.page.empty.description":"ou créez-en un nouveau","settings.commands.page.title.new":"Nouvelle commande","settings.commands.page.subtitle.new":"Configurer une nouvelle commande slash","settings.commands.page.subtitle.edit":"Modifier les paramètres de la commande","settings.commands.page.section.identity":"Identité","settings.commands.page.section.executionContext":"Contexte d'exécution","settings.commands.page.section.template":"Modèle de commande","settings.commands.page.field.commandName":"Nom de la commande","settings.commands.page.field.commandNamePlaceholder":"nom-commande","settings.commands.page.field.descriptionPlaceholder":"Que fait cette commande ?","settings.commands.page.field.overrideAgent":"Remplacer l'agent","settings.commands.page.field.templatePlaceholder":`Votre modèle de commande ici...
|
|
4
4
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{fL as q}from"./useAppFontEffects-Cwyhjfl5.js";import{R as x,g as L,r as D,p as W,v as A,a as v,b as M,c as P,d as R,e as V,f as _,h as Q,i as y}from"./computeVirtualFileMetrics-BkiDSlTW.js";import{h as w,i as C,a as k,r as N}from"./isFilePlainText-BVuH1zH9.js";import{a as g,i as I,r as $,b as j}from"./isDiffPlainText-GMdPz-71.js";import{t as K}from"./themeResolver-BmJyTmjJ.js";import{L as S}from"./vendor-lru_map-Tstukz9J.js";import"./vendor-react-BUCujlKS.js";import"./vendor-scheduler-7OC5HNn7.js";import"./index-BD8ILbxF.js";import"./vendor-zod-B6551dwG.js";import"./vendor-vite-runtime-DD1OZmLC.js";import"./vendor-zustand-BAGL70zf.js";import"./vendor-opencode-sdk-BJ73u-bH.js";import"./vendor-simplewebauthn-browser-VDA66rT_.js";import"./vendor-base-ui-BY_5qla_.js";import"./vendor-floating-ui-utils-D6FqdtJt.js";import"./vendor-floating-ui-react-dom-DxYCWdHj.js";import"./vendor-floating-ui-dom-BTvzWks8.js";import"./vendor-floating-ui-core-PuGzNPnN.js";import"./vendor-use-sync-external-store-D6wYuSt-.js";import"./vendor-class-variance-authority-5VPnzWs2.js";import"./vendor-clsx-B-dksMZM.js";import"./vendor-dnd-kit-core-BZknOX2w.js";import"./vendor-dnd-kit-utilities-B_MdXhJC.js";import"./vendor-dnd-kit-accessibility-BHxJPORy.js";import"./vendor-dnd-kit-sortable-CsEagZ81.js";import"./vendor-framer-motion-livSKyyV.js";import"./vendor-motion-dom-D_o3BTI3.js";import"./vendor-motion-utils-BGh8QBgx.js";import"./vendor-tanstack-react-virtual-g05Cx3z9.js";import"./vendor-tanstack-virtual-core-Dubg10g5.js";import"./contextPanelEmbeddedChat-BdA6bdky.js";import"./vendor-sonner-DFyL3AvE.js";import"./vendor-cmdk-DgLInKvT.js";import"./vendor-radix-ui-react-dialog-B94Bt2qq.js";import"./vendor-radix-ui-primitive-Dc_FVRD7.js";import"./vendor-radix-ui-react-compose-refs-DcAh5WdT.js";import"./vendor-radix-ui-react-context-Czxm7Z62.js";import"./vendor-radix-ui-react-id-f5BLKEVw.js";import"./vendor-radix-ui-react-use-layout-effect-D_3IhJdJ.js";import"./vendor-radix-ui-react-use-controllable-state-BFT5YmkA.js";import"./vendor-radix-ui-react-dismissable-layer-D7kXcwgJ.js";import"./vendor-radix-ui-react-primitive-DhVoX9SD.js";import"./vendor-radix-ui-react-slot-BQgQOasS.js";import"./vendor-radix-ui-react-use-callback-ref-BZPnuXAC.js";import"./vendor-radix-ui-react-use-escape-keydown-oph88g-F.js";import"./vendor-radix-ui-react-focus-scope-CiaxW4dD.js";import"./vendor-radix-ui-react-portal-BMJYHWck.js";import"./vendor-radix-ui-react-presence-CNxf-uq4.js";import"./vendor-radix-ui-react-focus-guards-B6qJXYua.js";import"./vendor-react-remove-scroll-DO7dCTnK.js";import"./vendor-tslib-De9GV7Vy.js";import"./vendor-react-remove-scroll-bar-BcFYyj3E.js";import"./vendor-react-style-singleton-q6EMHnwf.js";import"./vendor-get-nonce-C-Z93AgS.js";import"./vendor-use-sidecar-zDC0RhA3.js";import"./vendor-use-callback-ref-D3RC8gqK.js";import"./vendor-aria-hidden-DvXkyWUv.js";import"./vendor-codemirror-language-BgPj_McA.js";import"./vendor-lezer-common-B3-cUCR_.js";import"./vendor-codemirror-state-C9awkmn-.js";import"./vendor-marijn-find-cluster-break-DXwl3gUT.js";import"./vendor-codemirror-view-CiLROUVV.js";import"./vendor-style-mod-NZ5MEPvj.js";import"./vendor-w3c-keyname-Vcq4gwWv.js";import"./vendor-crelt-C8TCjufn.js";import"./vendor-lezer-highlight-CDMHUZ74.js";import"./vendor-codemirror-lang-javascript-Cc2ZYbgX.js";import"./vendor-lezer-javascript-D7Tj24ot.js";import"./vendor-lezer-lr-bhwg1HMg.js";import"./vendor-codemirror-autocomplete-DzPz9Wgq.js";import"./vendor-codemirror-lang-json-CMBS2tG9.js";import"./vendor-lezer-json-Iaex0UN-.js";import"./vendor-codemirror-lang-css-O0cZX78y.js";import"./vendor-lezer-css-C5xB6jxd.js";import"./vendor-codemirror-lang-html-CfgK872x.js";import"./vendor-lezer-html-C0I1p52t.js";import"./vendor-codemirror-lang-markdown-BPGOH9ye.js";import"./vendor-lezer-markdown-C6g-d6P3.js";import"./vendor-codemirror-language-data-Cb1YnICj.js";import"./vendor-codemirror-lang-python-HahnQaAS.js";import"./vendor-lezer-python-CvuFxeZl.js";import"./vendor-codemirror-commands-B7H_j0iU.js";import"./vendor-legendapp-list-BuBPBC3R.js";import"./vendor-tailwind-merge-CPcsbTWB.js";import"./vendor-fuse.js-Dw8P0qyA.js";import"./vendor-shiki-Bbf2GEcE.js";import"./vendor-shikijs-core-CGM_jqPK.js";import"./vendor-shikijs-types-CPSbSeK6.js";import"./vendor-shikijs-vscode-textmate-BgLrS_2D.js";import"./vendor-hast-util-to-html-BKBhbTDb.js";import"./vendor-html-void-elements-CkdplsNl.js";import"./vendor-property-information-rJCbAzvX.js";import"./vendor-zwitch-C2o2j-tx.js";import"./vendor-stringify-entities-CsH1VEn9.js";import"./vendor-character-entities-legacy-BpoLgcEt.js";import"./vendor-character-entities-html4-D7taRCQ7.js";import"./vendor-ccount-c2V3InAJ.js";import"./vendor-comma-separated-tokens-D8TqSuIK.js";import"./vendor-space-separated-tokens-DD3iYX1K.js";import"./vendor-hast-util-whitespace-D4Wp6AEg.js";import"./vendor-shikijs-engine-oniguruma-DPWuIF1G.js";import"./vendor-pierre-theming-C6Z4M5_u.js";import"./vendor-shikijs-engine-javascript-Cme4830A.js";import"./vendor-oniguruma-to-es-DLBnFDCE.js";import"./vendor-oniguruma-parser-C0D4_9rT.js";import"./vendor-regex-BBWcyTkg.js";import"./vendor-regex-utilities-2BQyy0xI.js";import"./vendor-regex-recursion-JU4mF-dD.js";import"./vendor-shikijs-transformers-CZWsLLKm.js";import"./vendor-diff-C3JhlQdm.js";function B(e){const t=[];for(const i of e){const s=x.get(i);if(s==null)throw new Error(`getResolvedLanguages: ${i} is not resolved. Please resolve languages before calling getResolvedLanguages`);t.push(s)}return t}function O(e){for(const t of Array.isArray(e)?e:[e])if(!x.has(t))return!1;return!0}async function b(e){const t=[],i=[];for(const s of e){if(s==="text"||s==="ansi")continue;const r=L(s)??D(s);"then"in r?i.push(r):t.push(r)}return i.length>0&&await Promise.all(i).then(s=>{for(const r of s){if(r==null)throw new Error("resolvedLanguages: unable to resolve language");t.push(r)}}),t}function z(e){return K.getResolvedThemes(e)}async function E(e){for(const i of e)W(i);const t=await K.resolveThemes(e);for(let i=0;i<e.length;i++)A(e[i],t[i]);return t}const p=Symbol("IGNORE_RESPONSE");var T=class extends Error{constructor(){super("WorkerPoolManager: operation canceled because the pool terminated")}},G=class{options;highlighter;preferredHighlighter;renderOptions;renderOptionsRequestVersion=0;renderOptionsVersion=0;initialized=!1;workers=[];queuedTasks=[];queuedTaskByInstance=new Map;taskByHighlightKey=new Map;activeTaskById=new Map;activeRequestByInstance=new Map;nextRequestId=0;themeSubscribers=new Set;workersFailed=!1;statSubscribers=new Set;fileCache;diffCache;_queuedBroadcast;lifecycleGeneration=0;constructor(e,{langs:t,theme:i=q,useTokenTransformer:s=!1,lineDiffType:r="word-alt",maxLineDiffLength:n=1e3,tokenizeMaxLineLength:a=1e3,preferredHighlighter:o="shiki-js"}){this.options=e,this.preferredHighlighter=o,this.renderOptions={theme:i,useTokenTransformer:s,lineDiffType:r,maxLineDiffLength:n,tokenizeMaxLineLength:a},this.fileCache=new S.LRUMap(e.totalASTLRUCacheSize??100),this.diffCache=new S.LRUMap(e.totalASTLRUCacheSize??100),this.queueInitialization(t)}isWorkingPool(){return!this.workersFailed}getFileResultCache(e){return e.cacheKey!=null?this.fileCache.get(e.cacheKey):void 0}getDiffResultCache(e){return e.cacheKey!=null?this.diffCache.get(e.cacheKey):void 0}inspectCaches(){const{fileCache:e,diffCache:t}=this;return{fileCache:e,diffCache:t}}evictFileFromCache(e){try{return this.fileCache.delete(e)!==void 0}finally{this.queueBroadcastStateChanges()}}evictDiffFromCache(e){try{return this.diffCache.delete(e)!==void 0}finally{this.queueBroadcastStateChanges()}}async setRenderOptions({theme:e=this.renderOptions.theme??q,useTokenTransformer:t=this.renderOptions.useTokenTransformer??!1,lineDiffType:i=this.renderOptions.lineDiffType??"word-alt",maxLineDiffLength:s=this.renderOptions.maxLineDiffLength??1e3,tokenizeMaxLineLength:r=this.renderOptions.tokenizeMaxLineLength??1e3}){const{lifecycleGeneration:n}=this,a=++this.renderOptionsRequestVersion,o=()=>this.isCurrentLifecycle(n)&&this.renderOptionsRequestVersion===a;try{const h={theme:e,useTokenTransformer:t,lineDiffType:i,maxLineDiffLength:s,tokenizeMaxLineLength:r};if(this.isInitialized()||await this.initialize(),!o()||g(h,this.renderOptions))return;const l=v(e);let u=[];if(M(h.theme,this.renderOptions.theme)||(w(l)?u=z(l):u=await E(l)),!o())return;if(this.highlighter!=null)P(u,this.highlighter);else{const m=await R({themes:l,langs:["text"],preferredHighlighter:this.preferredHighlighter});if(!o())return;this.highlighter=m}const H=this.setRenderOptionsOnWorkers(h,u);this.renderOptions=h,this.renderOptionsVersion++,this.diffCache.clear(),this.fileCache.clear(),this.invalidateRenderTasks();for(const m of this.themeSubscribers)m.onThemeChange();await H}catch(h){if(h instanceof T||!o())return;throw h}}getFileRenderOptions(){const{tokenizeMaxLineLength:e,theme:t,useTokenTransformer:i}=this.renderOptions;return{theme:t,useTokenTransformer:i,tokenizeMaxLineLength:e}}getDiffRenderOptions(){return{...this.renderOptions}}async setRenderOptionsOnWorkers(e,t){if(this.workersFailed)return;this.isInitialized()||await this.initialize();const i=[];for(const s of this.workers){if(!s.initialized)throw console.log({managedWorker:s}),new Error("setRenderOptionsOnWorkers: Somehow we have an uninitialized worker");i.push(new Promise((r,n)=>{const a=this.generateRequestId(),o={type:"set-render-options",id:a,request:{type:"set-render-options",id:a,renderOptions:e,resolvedThemes:t},resolve:r,reject:n,requestStart:Date.now()};this.activeTaskById.set(a,o),s.pendingSetupRequestId=a,s.worker.postMessage(o.request)}))}await Promise.all(i)}subscribeToThemeChanges(e){return this.themeSubscribers.add(e),this.queueBroadcastStateChanges(),()=>{this.unsubscribeToThemeChanges(e),this.queueBroadcastStateChanges()}}unsubscribeToThemeChanges(e){this.themeSubscribers.delete(e),this.queueBroadcastStateChanges()}subscribeToStatChanges(e){return this.statSubscribers.add(e),e(this.getStats()),()=>{this.statSubscribers.delete(e)}}queueBroadcastStateChanges(){this._queuedBroadcast==null&&(this._queuedBroadcast=requestAnimationFrame(this._broadcastStateChanges))}_broadcastStateChanges=()=>{this._queuedBroadcast!=null&&(cancelAnimationFrame(this._queuedBroadcast),this._queuedBroadcast=void 0);const e=this.getStats();for(const t of this.statSubscribers)t(e)};cleanUpTasks(e){this.detachInstanceFromQueuedTasks(e);const t=this.activeRequestByInstance.get(e);if(t!=null){const i=this.activeTaskById.get(t);c(i)?(this.detachInstanceFromRenderTask(i,e),!i.primeCache&&i.instances.size===0&&this.removeActiveTask(i)):this.activeTaskById.delete(t)}this.activeRequestByInstance.delete(e),this.queueBroadcastStateChanges()}isInitialized(){return this.initialized===!0}async initialize(e=[]){if(this.initialized!==!0)if(this.initialized===!1){const{lifecycleGeneration:t}=this;this.initialized=new Promise((i,s)=>{(async()=>{try{const r=v(this.renderOptions.theme);let n=[];if(w(r)?n=z(r):n=await E(r),!this.isCurrentLifecycle(t)){i();return}let a=[];if(O(e)?a=B(e):a=await b(e),!this.isCurrentLifecycle(t)){i();return}const[o]=await Promise.all([R({themes:r,langs:["text",...e],preferredHighlighter:this.preferredHighlighter}),this.initializeWorkers(n,a)]);if(!this.isCurrentLifecycle(t)){this.terminateWorkers(),i();return}this.highlighter=o,this.initialized=!0,this.diffCache.clear(),this.fileCache.clear(),this.drainQueue(),this.queueBroadcastStateChanges(),i()}catch(r){if(r instanceof T||!this.isCurrentLifecycle(t)){i();return}this.initialized=!1,this.workersFailed=!0,this.queueBroadcastStateChanges(),s(r)}})()}),this.queueBroadcastStateChanges()}else return this.initialized}async initializeWorkers(e,t){this.workersFailed=!1;const i=[],s=void 0;this.workers.length>0&&this.terminateWorkers();for(let r=0;r<(this.options.poolSize??8);r++){const n=this.options.workerFactory(),a={worker:n,requestId:void 0,pendingSetupRequestId:void 0,initialized:!1,langs:new Set(["text",...t.map(({name:o})=>o)]),customExtensionsVersion:0};n.addEventListener("message",o=>{this.handleWorkerMessage(a,o.data)}),n.addEventListener("error",o=>console.error("Worker error:",o,a)),this.workers.push(a),i.push(new Promise((o,h)=>{const l=this.generateRequestId(),u={type:"initialize",id:l,request:{type:"initialize",id:l,renderOptions:this.renderOptions,preferredHighlighter:this.preferredHighlighter,resolvedThemes:e,resolvedLanguages:t,customExtensionsVersion:void 0,customExtensionMap:s},resolve(){a.initialized=!0,o()},reject:h,requestStart:Date.now()};this.activeTaskById.set(l,u),this.executeTask(a,u)}))}await Promise.all(i)}drainQueue=()=>{if(this._queuedDrain=void 0,!(this.initialized!==!0||this.queuedTasks.length===0)){for(let e=0;e<this.queuedTasks.length;){const t=this.queuedTasks[e];if(this.hasActiveRequest(t)){e++;continue}const i=F(t),s=this.getAvailableWorker(i);if(s==null)break;this.queuedTasks.splice(e,1),this.assignWorkerToTask(t,s),this.resolveLanguagesAndExecuteTask(s,t,i)}this.queueBroadcastStateChanges()}};highlightFileAST(e,t){const i=this.getFileResultCache(t);C(t)||i!=null&&k(i.options,this.getFileRenderOptions())||this.hasMatchingFileInstanceTask(e,t)||this.submitTask(e,{type:"file",file:t})}primeFileHighlightCache(e){if(e.cacheKey==null){console.warn(`WorkerPoolManager.primeFileHighlightCache: priming highlight cache requires file.cacheKey; skipping "${e.name}".`);return}const t=this.getFileResultCache(e),i=this.getFileHighlightKey(e);if(i==null||C(e)||t!=null&&k(t.options,this.getFileRenderOptions()))return;const s=this.getTaskByHighlightKey(i);s!=null?s.primeCache=!0:this.submitCacheTask({type:"file",file:e},i)}getPlainFileAST(e,t,i,s){if(this.highlighter==null){this.queueInitialization();return}return N(e,this.highlighter,this.renderOptions,{forcePlainText:!0,startingLine:t,totalLines:i,lines:s})}highlightDiffAST(e,t){const i=this.getDiffResultCache(t);I(t)||i!=null&&g(i.options,this.getDiffRenderOptions())||this.hasMatchingDiffInstanceTask(e,t)||this.submitTask(e,{type:"diff",diff:t})}primeDiffHighlightCache(e){if(e.cacheKey==null){console.warn(`WorkerPoolManager.primeDiffHighlightCache: priming highlight cache requires diff.cacheKey; skipping "${e.prevName??e.name}" -> "${e.name}".`);return}const t=this.getDiffResultCache(e),i=this.getDiffHighlightKey(e);if(i==null||I(e)||t!=null&&g(t.options,this.getDiffRenderOptions()))return;const s=this.getTaskByHighlightKey(i);s!=null?s.primeCache=!0:this.submitCacheTask({type:"diff",diff:e},i)}getPlainDiffAST(e,t,i,s,r){return this.highlighter!=null?$(e,this.highlighter,this.renderOptions,{forcePlainText:!0,startingLine:t,totalLines:i,expandedHunks:s,collapsedContextThreshold:r}):void 0}terminate(){this.lifecycleGeneration++,this.cancelActiveWorkerTasks(),this.terminateWorkers(),this.fileCache.clear(),this.diffCache.clear(),this.activeRequestByInstance.clear(),this.queuedTasks.length=0,this.queuedTaskByInstance.clear(),this.taskByHighlightKey.clear(),this.activeTaskById.clear(),this.highlighter=void 0,this.initialized=!1,this.workersFailed=!1,this.queueBroadcastStateChanges()}isCurrentLifecycle(e){return this.lifecycleGeneration===e}queueInitialization(e){this.initialize(e).catch(t=>{console.error(t)})}cancelActiveWorkerTasks(){const e=new T;for(const t of this.activeTaskById.values())"reject"in t&&t.reject(e)}terminateWorkers(){for(const e of this.workers)e.worker.terminate();this.workers.length=0}getStats(){return{managerState:this.initialized===!1?"waiting":this.initialized!==!0?"initializing":"initialized",totalWorkers:this.workers.length,workersFailed:this.workersFailed,busyWorkers:this.workers.filter(e=>e.requestId!=null||e.pendingSetupRequestId!=null).length,queuedTasks:this.queuedTasks.length,activeTasks:this.activeTaskById.size,themeSubscribers:this.themeSubscribers.size,fileCacheSize:this.fileCache.size,diffCacheSize:this.diffCache.size}}submitTask(e,t){this.initialized===!1&&this.queueInitialization();const i=this.getHighlightKeyForRequest(t),s=i!=null?this.getTaskByHighlightKey(i):void 0;if(s!=null){this.detachInstanceFromQueuedTasks(e,s),this.addInstanceToTask(s,e),this.queueBroadcastStateChanges();return}this.detachInstanceFromQueuedTasks(e);const r=this.generateRequestId(),n=Date.now(),{renderOptionsVersion:a}=this,o=(()=>{switch(t.type){case"file":return{type:"file",id:r,request:{...t,id:r},instances:new Set([e]),primeCache:!1,highlightKey:i,renderOptionsVersion:a,requestStart:n};case"diff":return{type:"diff",id:r,request:{...t,id:r},instances:new Set([e]),primeCache:!1,highlightKey:i,renderOptionsVersion:a,requestStart:n}}})();this.enqueueRenderTask(o,e)}submitCacheTask(e,t){this.initialized===!1&&this.queueInitialization();const i=this.generateRequestId(),s=Date.now(),{renderOptionsVersion:r}=this,n=(()=>{switch(e.type){case"file":return{type:"file",id:i,request:{...e,id:i},instances:new Set,primeCache:!0,highlightKey:t,renderOptionsVersion:r,requestStart:s};case"diff":return{type:"diff",id:i,request:{...e,id:i},instances:new Set,primeCache:!0,highlightKey:t,renderOptionsVersion:r,requestStart:s}}})();this.enqueueRenderTask(n)}enqueueRenderTask(e,t){this.queuedTasks.push(e),t!=null&&this.queuedTaskByInstance.set(t,e),e.highlightKey!=null&&this.taskByHighlightKey.set(e.highlightKey,e),this.queueDrain()}async resolveLanguagesAndExecuteTask(e,t,i){try{const s=i.filter(r=>!e.langs.has(r));if(s.length>0&&(O(s)?t.request.resolvedLanguages=B(s):t.request.resolvedLanguages=await b(s)),!this.activeTaskById.has(t.id)){e.requestId===t.id&&(this.cleanWorkerAndTask(e,t),this.queueBroadcastStateChanges(),this.queuedTasks.length>0&&this.queueDrain());return}this.executeTask(e,t)}catch{this.cleanWorkerAndTask(e,t),this.queueBroadcastStateChanges(),this.queuedTasks.length>0&&this.queueDrain()}}handleWorkerMessage(e,t){const i=this.activeTaskById.get(t.id);try{if(i==null)throw p;if(t.type==="error"){const s=new Error(t.error);if(t.stack&&(s.stack=t.stack),"reject"in i)i.reject(s);else if(c(i))this.notifyHighlightError(i,s);else throw new Error("handleWorkerMessage: unknown task type");throw s}else switch(t.requestType){case"initialize":if(i.type!=="initialize")throw new Error("handleWorkerMessage: task/response dont match");this.syncCustomExtensionVersion(e,i.request),i.resolve();break;case"set-render-options":if(i.type!=="set-render-options")throw new Error("handleWorkerMessage: task/response dont match");i.resolve();break;case"file":{if(i.type!=="file")throw new Error("handleWorkerMessage: task/response dont match");const{result:s,options:r}=t;if(!this.isCurrentRenderTask(i)||!k(r,this.getFileRenderOptions()))throw p;const{request:n}=i;this.syncCustomExtensionVersion(e,n),n.file.cacheKey!=null&&this.fileCache.set(n.file.cacheKey,{result:s,options:r}),this.notifyFileInstances(i,s,r);break}case"diff":{if(i.type!=="diff")throw new Error("handleWorkerMessage: task/response dont match");const{result:s,options:r}=t;if(!this.isCurrentRenderTask(i)||!g(r,this.getDiffRenderOptions()))throw p;const{request:n}=i;this.syncCustomExtensionVersion(e,n),n.diff.cacheKey!=null&&this.diffCache.set(n.diff.cacheKey,{result:s,options:r}),this.notifyDiffInstances(i,s,r);break}}}catch(s){s!==p&&console.error(s,i,t)}this.cleanWorkerAndTask(e,i,t.id),this.queueBroadcastStateChanges(),this.queuedTasks.length>0&&this.queueDrain()}_queuedDrain;queueDrain(){this._queuedDrain==null&&(this._queuedDrain=Promise.resolve().then(this.drainQueue),this.queueBroadcastStateChanges())}assignWorkerToTask(e,t){t.requestId=e.id,c(e)&&(this.clearQueuedInstanceRequests(e),this.trackInstanceRequests(e)),this.activeTaskById.set(e.id,e)}cleanWorkerAndTask(e,t,i=t?.id){e.requestId===i&&(e.requestId=void 0),e.pendingSetupRequestId===i&&(e.pendingSetupRequestId=void 0),t!=null&&(c(t)&&(this.clearInstanceRequests(t),this.clearHighlightKey(t)),this.activeTaskById.delete(t.id))}executeTask(e,t){U(t.request)&&this.maybeAttachCustomExtensions(e,t.request),this.activeTaskById.has(t.id)||this.assignWorkerToTask(t,e);for(const i of F(t))e.langs.add(i);try{e.worker.postMessage(t.request)}catch(i){console.error("Failed to post message to worker:",i),c(t)?this.notifyHighlightError(t,i):"reject"in t&&t.reject(i),this.cleanWorkerAndTask(e,t),this.queuedTasks.length>0&&this.queueDrain()}this.queueBroadcastStateChanges()}maybeAttachCustomExtensions(e,t){if(t.customExtensionsVersion!=null)return;const i=Q();e.customExtensionsVersion>=i||(t.customExtensionsVersion=i,t.customExtensionMap=V())}syncCustomExtensionVersion(e,t){t.customExtensionsVersion!=null&&(e.customExtensionsVersion=t.customExtensionsVersion)}getAvailableWorker(e){let t;for(const i of this.workers){if(i.requestId!=null||i.pendingSetupRequestId!=null||!i.initialized)continue;if(t=i,e.length===0)break;let s=!0;for(const r of e)if(!i.langs.has(r)){s=!1;break}if(s)break}return t}getFileHighlightKey(e){if(e.cacheKey!=null)return`file:${e.cacheKey}:${this.renderOptionsVersion}`}getDiffHighlightKey(e){if(e.cacheKey!=null)return`diff:${e.cacheKey}:${this.renderOptionsVersion}`}getHighlightKeyForRequest(e){switch(e.type){case"file":return this.getFileHighlightKey(e.file);case"diff":return this.getDiffHighlightKey(e.diff)}}hasActiveRequest(e){for(const t of d(e))if(this.activeRequestByInstance.has(t))return!0;return!1}addInstanceToTask(e,t){e.type,e.instances.add(t),this.activeTaskById.has(e.id)?this.activeRequestByInstance.set(t,e.id):this.queuedTaskByInstance.set(t,e)}detachInstanceFromQueuedTasks(e,t){const i=this.queuedTaskByInstance.get(e);i==null||i===t||(this.queuedTaskByInstance.delete(e),this.detachInstanceFromRenderTask(i,e),!i.primeCache&&i.instances.size===0&&this.removeQueuedTask(i))}detachInstanceFromRenderTask(e,t){e.type,e.instances.delete(t)}removeQueuedTask(e){const t=this.queuedTasks.indexOf(e);t!==-1&&this.queuedTasks.splice(t,1),this.clearQueuedInstanceRequests(e),this.clearHighlightKey(e)}removeActiveTask(e){this.clearInstanceRequests(e),this.clearHighlightKey(e),this.activeTaskById.delete(e.id)}invalidateRenderTasks(){for(let e=this.queuedTasks.length-1;e>=0;e--){const t=this.queuedTasks[e];t.renderOptionsVersion!==this.renderOptionsVersion&&this.removeQueuedTask(t)}for(const e of Array.from(this.activeTaskById.values()))c(e)&&e.renderOptionsVersion!==this.renderOptionsVersion&&this.removeActiveTask(e)}clearQueuedInstanceRequests(e){for(const t of d(e))this.queuedTaskByInstance.get(t)===e&&this.queuedTaskByInstance.delete(t)}clearHighlightKey(e){e.highlightKey!=null&&this.taskByHighlightKey.get(e.highlightKey)===e&&this.taskByHighlightKey.delete(e.highlightKey)}trackInstanceRequests(e){for(const t of d(e))this.activeRequestByInstance.set(t,e.id)}clearInstanceRequests(e){for(const t of d(e))this.activeRequestByInstance.get(t)===e.id&&this.activeRequestByInstance.delete(t)}notifyFileInstances(e,t,i){for(const s of e.instances)this.activeRequestByInstance.get(s)===e.id&&s.onHighlightSuccess(e.request.file,t,i)}notifyDiffInstances(e,t,i){for(const s of e.instances)this.activeRequestByInstance.get(s)===e.id&&s.onHighlightSuccess(e.request.diff,t,i)}notifyHighlightError(e,t){for(const i of d(e))this.activeRequestByInstance.get(i)===e.id&&i.onHighlightError(t)}hasMatchingFileInstanceTask(e,t){for(const i of this.iterateRenderTasks())if(i.type==="file"&&this.isCurrentRenderTask(i)&&i.instances.has(e)&&_(t,i.request.file))return!0;return!1}hasMatchingDiffInstanceTask(e,t){for(const i of this.iterateRenderTasks())if(i.type==="diff"&&this.isCurrentRenderTask(i)&&i.instances.has(e)&&j(i.request.diff,t))return!0;return!1}getTaskByHighlightKey(e){const t=this.taskByHighlightKey.get(e);return t!=null&&this.isCurrentRenderTask(t)?t:void 0}isCurrentRenderTask(e){return e.renderOptionsVersion===this.renderOptionsVersion}*iterateRenderTasks(){for(const e of this.queuedTasks)yield e;for(const e of this.activeTaskById.values())c(e)&&(yield e)}generateRequestId(){return`req_${++this.nextRequestId}`}};function U(e){return e.type==="initialize"||e.type==="file"||e.type==="diff"}function F(e){const t=new Set;if(e.type==="initialize"||e.type==="set-render-options")return[];switch(e.type){case"file":t.add(e.request.file.lang??y(e.request.file.name));break;case"diff":t.add(e.request.diff.lang??y(e.request.diff.name)),t.add(e.request.diff.lang??y(e.request.diff.prevName??"-"));break}return t.delete("text"),Array.from(t)}function c(e){return e?.type==="file"||e?.type==="diff"}function d(e){return e.instances}let f;function Zt({poolOptions:e,highlighterOptions:t}){return f??=new G(e,t),f}function ei(){f!=null&&(f.terminate(),f=void 0)}export{G as WorkerPoolManager,Zt as getOrCreateWorkerPoolSingleton,ei as terminateWorkerPoolSingleton};
|
|
1
|
+
import{fL as q}from"./useAppFontEffects-B6OfEypo.js";import{R as x,g as L,r as D,p as W,v as A,a as v,b as M,c as P,d as R,e as V,f as _,h as Q,i as y}from"./computeVirtualFileMetrics-CI1PC_z2.js";import{h as w,i as C,a as k,r as N}from"./isFilePlainText-CgTREsRX.js";import{a as g,i as I,r as $,b as j}from"./isDiffPlainText-DVralkU-.js";import{t as K}from"./themeResolver-BmJyTmjJ.js";import{L as S}from"./vendor-lru_map-Tstukz9J.js";import"./vendor-react-BUCujlKS.js";import"./vendor-scheduler-7OC5HNn7.js";import"./index-BD8ILbxF.js";import"./vendor-zod-B6551dwG.js";import"./vendor-vite-runtime-DD1OZmLC.js";import"./vendor-zustand-BAGL70zf.js";import"./vendor-opencode-sdk-BJ73u-bH.js";import"./vendor-simplewebauthn-browser-VDA66rT_.js";import"./vendor-base-ui-BY_5qla_.js";import"./vendor-floating-ui-utils-D6FqdtJt.js";import"./vendor-floating-ui-react-dom-DxYCWdHj.js";import"./vendor-floating-ui-dom-BTvzWks8.js";import"./vendor-floating-ui-core-PuGzNPnN.js";import"./vendor-use-sync-external-store-D6wYuSt-.js";import"./vendor-class-variance-authority-5VPnzWs2.js";import"./vendor-clsx-B-dksMZM.js";import"./vendor-dnd-kit-core-BZknOX2w.js";import"./vendor-dnd-kit-utilities-B_MdXhJC.js";import"./vendor-dnd-kit-accessibility-BHxJPORy.js";import"./vendor-dnd-kit-sortable-CsEagZ81.js";import"./vendor-framer-motion-livSKyyV.js";import"./vendor-motion-dom-D_o3BTI3.js";import"./vendor-motion-utils-BGh8QBgx.js";import"./vendor-tanstack-react-virtual-g05Cx3z9.js";import"./vendor-tanstack-virtual-core-Dubg10g5.js";import"./contextPanelEmbeddedChat-BdA6bdky.js";import"./vendor-sonner-DFyL3AvE.js";import"./vendor-cmdk-DgLInKvT.js";import"./vendor-radix-ui-react-dialog-B94Bt2qq.js";import"./vendor-radix-ui-primitive-Dc_FVRD7.js";import"./vendor-radix-ui-react-compose-refs-DcAh5WdT.js";import"./vendor-radix-ui-react-context-Czxm7Z62.js";import"./vendor-radix-ui-react-id-f5BLKEVw.js";import"./vendor-radix-ui-react-use-layout-effect-D_3IhJdJ.js";import"./vendor-radix-ui-react-use-controllable-state-BFT5YmkA.js";import"./vendor-radix-ui-react-dismissable-layer-D7kXcwgJ.js";import"./vendor-radix-ui-react-primitive-DhVoX9SD.js";import"./vendor-radix-ui-react-slot-BQgQOasS.js";import"./vendor-radix-ui-react-use-callback-ref-BZPnuXAC.js";import"./vendor-radix-ui-react-use-escape-keydown-oph88g-F.js";import"./vendor-radix-ui-react-focus-scope-CiaxW4dD.js";import"./vendor-radix-ui-react-portal-BMJYHWck.js";import"./vendor-radix-ui-react-presence-CNxf-uq4.js";import"./vendor-radix-ui-react-focus-guards-B6qJXYua.js";import"./vendor-react-remove-scroll-DO7dCTnK.js";import"./vendor-tslib-De9GV7Vy.js";import"./vendor-react-remove-scroll-bar-BcFYyj3E.js";import"./vendor-react-style-singleton-q6EMHnwf.js";import"./vendor-get-nonce-C-Z93AgS.js";import"./vendor-use-sidecar-zDC0RhA3.js";import"./vendor-use-callback-ref-D3RC8gqK.js";import"./vendor-aria-hidden-DvXkyWUv.js";import"./vendor-codemirror-language-BgPj_McA.js";import"./vendor-lezer-common-B3-cUCR_.js";import"./vendor-codemirror-state-C9awkmn-.js";import"./vendor-marijn-find-cluster-break-DXwl3gUT.js";import"./vendor-codemirror-view-CiLROUVV.js";import"./vendor-style-mod-NZ5MEPvj.js";import"./vendor-w3c-keyname-Vcq4gwWv.js";import"./vendor-crelt-C8TCjufn.js";import"./vendor-lezer-highlight-CDMHUZ74.js";import"./vendor-codemirror-lang-javascript-Cc2ZYbgX.js";import"./vendor-lezer-javascript-D7Tj24ot.js";import"./vendor-lezer-lr-bhwg1HMg.js";import"./vendor-codemirror-autocomplete-DzPz9Wgq.js";import"./vendor-codemirror-lang-json-CMBS2tG9.js";import"./vendor-lezer-json-Iaex0UN-.js";import"./vendor-codemirror-lang-css-O0cZX78y.js";import"./vendor-lezer-css-C5xB6jxd.js";import"./vendor-codemirror-lang-html-CfgK872x.js";import"./vendor-lezer-html-C0I1p52t.js";import"./vendor-codemirror-lang-markdown-BPGOH9ye.js";import"./vendor-lezer-markdown-C6g-d6P3.js";import"./vendor-codemirror-language-data-SJuFp0a0.js";import"./vendor-codemirror-lang-python-HahnQaAS.js";import"./vendor-lezer-python-CvuFxeZl.js";import"./vendor-codemirror-commands-B7H_j0iU.js";import"./vendor-legendapp-list-BuBPBC3R.js";import"./vendor-tailwind-merge-CPcsbTWB.js";import"./vendor-fuse.js-Dw8P0qyA.js";import"./vendor-shiki-Bbf2GEcE.js";import"./vendor-shikijs-core-CGM_jqPK.js";import"./vendor-shikijs-types-CPSbSeK6.js";import"./vendor-shikijs-vscode-textmate-BgLrS_2D.js";import"./vendor-hast-util-to-html-BKBhbTDb.js";import"./vendor-html-void-elements-CkdplsNl.js";import"./vendor-property-information-rJCbAzvX.js";import"./vendor-zwitch-C2o2j-tx.js";import"./vendor-stringify-entities-CsH1VEn9.js";import"./vendor-character-entities-legacy-BpoLgcEt.js";import"./vendor-character-entities-html4-D7taRCQ7.js";import"./vendor-ccount-c2V3InAJ.js";import"./vendor-comma-separated-tokens-D8TqSuIK.js";import"./vendor-space-separated-tokens-DD3iYX1K.js";import"./vendor-hast-util-whitespace-D4Wp6AEg.js";import"./vendor-shikijs-engine-oniguruma-DPWuIF1G.js";import"./vendor-pierre-theming-C6Z4M5_u.js";import"./vendor-shikijs-engine-javascript-Cme4830A.js";import"./vendor-oniguruma-to-es-DLBnFDCE.js";import"./vendor-oniguruma-parser-C0D4_9rT.js";import"./vendor-regex-BBWcyTkg.js";import"./vendor-regex-utilities-2BQyy0xI.js";import"./vendor-regex-recursion-JU4mF-dD.js";import"./vendor-shikijs-transformers-CZWsLLKm.js";import"./vendor-diff-C3JhlQdm.js";function B(e){const t=[];for(const i of e){const s=x.get(i);if(s==null)throw new Error(`getResolvedLanguages: ${i} is not resolved. Please resolve languages before calling getResolvedLanguages`);t.push(s)}return t}function O(e){for(const t of Array.isArray(e)?e:[e])if(!x.has(t))return!1;return!0}async function b(e){const t=[],i=[];for(const s of e){if(s==="text"||s==="ansi")continue;const r=L(s)??D(s);"then"in r?i.push(r):t.push(r)}return i.length>0&&await Promise.all(i).then(s=>{for(const r of s){if(r==null)throw new Error("resolvedLanguages: unable to resolve language");t.push(r)}}),t}function z(e){return K.getResolvedThemes(e)}async function E(e){for(const i of e)W(i);const t=await K.resolveThemes(e);for(let i=0;i<e.length;i++)A(e[i],t[i]);return t}const p=Symbol("IGNORE_RESPONSE");var T=class extends Error{constructor(){super("WorkerPoolManager: operation canceled because the pool terminated")}},G=class{options;highlighter;preferredHighlighter;renderOptions;renderOptionsRequestVersion=0;renderOptionsVersion=0;initialized=!1;workers=[];queuedTasks=[];queuedTaskByInstance=new Map;taskByHighlightKey=new Map;activeTaskById=new Map;activeRequestByInstance=new Map;nextRequestId=0;themeSubscribers=new Set;workersFailed=!1;statSubscribers=new Set;fileCache;diffCache;_queuedBroadcast;lifecycleGeneration=0;constructor(e,{langs:t,theme:i=q,useTokenTransformer:s=!1,lineDiffType:r="word-alt",maxLineDiffLength:n=1e3,tokenizeMaxLineLength:a=1e3,preferredHighlighter:o="shiki-js"}){this.options=e,this.preferredHighlighter=o,this.renderOptions={theme:i,useTokenTransformer:s,lineDiffType:r,maxLineDiffLength:n,tokenizeMaxLineLength:a},this.fileCache=new S.LRUMap(e.totalASTLRUCacheSize??100),this.diffCache=new S.LRUMap(e.totalASTLRUCacheSize??100),this.queueInitialization(t)}isWorkingPool(){return!this.workersFailed}getFileResultCache(e){return e.cacheKey!=null?this.fileCache.get(e.cacheKey):void 0}getDiffResultCache(e){return e.cacheKey!=null?this.diffCache.get(e.cacheKey):void 0}inspectCaches(){const{fileCache:e,diffCache:t}=this;return{fileCache:e,diffCache:t}}evictFileFromCache(e){try{return this.fileCache.delete(e)!==void 0}finally{this.queueBroadcastStateChanges()}}evictDiffFromCache(e){try{return this.diffCache.delete(e)!==void 0}finally{this.queueBroadcastStateChanges()}}async setRenderOptions({theme:e=this.renderOptions.theme??q,useTokenTransformer:t=this.renderOptions.useTokenTransformer??!1,lineDiffType:i=this.renderOptions.lineDiffType??"word-alt",maxLineDiffLength:s=this.renderOptions.maxLineDiffLength??1e3,tokenizeMaxLineLength:r=this.renderOptions.tokenizeMaxLineLength??1e3}){const{lifecycleGeneration:n}=this,a=++this.renderOptionsRequestVersion,o=()=>this.isCurrentLifecycle(n)&&this.renderOptionsRequestVersion===a;try{const h={theme:e,useTokenTransformer:t,lineDiffType:i,maxLineDiffLength:s,tokenizeMaxLineLength:r};if(this.isInitialized()||await this.initialize(),!o()||g(h,this.renderOptions))return;const l=v(e);let u=[];if(M(h.theme,this.renderOptions.theme)||(w(l)?u=z(l):u=await E(l)),!o())return;if(this.highlighter!=null)P(u,this.highlighter);else{const m=await R({themes:l,langs:["text"],preferredHighlighter:this.preferredHighlighter});if(!o())return;this.highlighter=m}const H=this.setRenderOptionsOnWorkers(h,u);this.renderOptions=h,this.renderOptionsVersion++,this.diffCache.clear(),this.fileCache.clear(),this.invalidateRenderTasks();for(const m of this.themeSubscribers)m.onThemeChange();await H}catch(h){if(h instanceof T||!o())return;throw h}}getFileRenderOptions(){const{tokenizeMaxLineLength:e,theme:t,useTokenTransformer:i}=this.renderOptions;return{theme:t,useTokenTransformer:i,tokenizeMaxLineLength:e}}getDiffRenderOptions(){return{...this.renderOptions}}async setRenderOptionsOnWorkers(e,t){if(this.workersFailed)return;this.isInitialized()||await this.initialize();const i=[];for(const s of this.workers){if(!s.initialized)throw console.log({managedWorker:s}),new Error("setRenderOptionsOnWorkers: Somehow we have an uninitialized worker");i.push(new Promise((r,n)=>{const a=this.generateRequestId(),o={type:"set-render-options",id:a,request:{type:"set-render-options",id:a,renderOptions:e,resolvedThemes:t},resolve:r,reject:n,requestStart:Date.now()};this.activeTaskById.set(a,o),s.pendingSetupRequestId=a,s.worker.postMessage(o.request)}))}await Promise.all(i)}subscribeToThemeChanges(e){return this.themeSubscribers.add(e),this.queueBroadcastStateChanges(),()=>{this.unsubscribeToThemeChanges(e),this.queueBroadcastStateChanges()}}unsubscribeToThemeChanges(e){this.themeSubscribers.delete(e),this.queueBroadcastStateChanges()}subscribeToStatChanges(e){return this.statSubscribers.add(e),e(this.getStats()),()=>{this.statSubscribers.delete(e)}}queueBroadcastStateChanges(){this._queuedBroadcast==null&&(this._queuedBroadcast=requestAnimationFrame(this._broadcastStateChanges))}_broadcastStateChanges=()=>{this._queuedBroadcast!=null&&(cancelAnimationFrame(this._queuedBroadcast),this._queuedBroadcast=void 0);const e=this.getStats();for(const t of this.statSubscribers)t(e)};cleanUpTasks(e){this.detachInstanceFromQueuedTasks(e);const t=this.activeRequestByInstance.get(e);if(t!=null){const i=this.activeTaskById.get(t);c(i)?(this.detachInstanceFromRenderTask(i,e),!i.primeCache&&i.instances.size===0&&this.removeActiveTask(i)):this.activeTaskById.delete(t)}this.activeRequestByInstance.delete(e),this.queueBroadcastStateChanges()}isInitialized(){return this.initialized===!0}async initialize(e=[]){if(this.initialized!==!0)if(this.initialized===!1){const{lifecycleGeneration:t}=this;this.initialized=new Promise((i,s)=>{(async()=>{try{const r=v(this.renderOptions.theme);let n=[];if(w(r)?n=z(r):n=await E(r),!this.isCurrentLifecycle(t)){i();return}let a=[];if(O(e)?a=B(e):a=await b(e),!this.isCurrentLifecycle(t)){i();return}const[o]=await Promise.all([R({themes:r,langs:["text",...e],preferredHighlighter:this.preferredHighlighter}),this.initializeWorkers(n,a)]);if(!this.isCurrentLifecycle(t)){this.terminateWorkers(),i();return}this.highlighter=o,this.initialized=!0,this.diffCache.clear(),this.fileCache.clear(),this.drainQueue(),this.queueBroadcastStateChanges(),i()}catch(r){if(r instanceof T||!this.isCurrentLifecycle(t)){i();return}this.initialized=!1,this.workersFailed=!0,this.queueBroadcastStateChanges(),s(r)}})()}),this.queueBroadcastStateChanges()}else return this.initialized}async initializeWorkers(e,t){this.workersFailed=!1;const i=[],s=void 0;this.workers.length>0&&this.terminateWorkers();for(let r=0;r<(this.options.poolSize??8);r++){const n=this.options.workerFactory(),a={worker:n,requestId:void 0,pendingSetupRequestId:void 0,initialized:!1,langs:new Set(["text",...t.map(({name:o})=>o)]),customExtensionsVersion:0};n.addEventListener("message",o=>{this.handleWorkerMessage(a,o.data)}),n.addEventListener("error",o=>console.error("Worker error:",o,a)),this.workers.push(a),i.push(new Promise((o,h)=>{const l=this.generateRequestId(),u={type:"initialize",id:l,request:{type:"initialize",id:l,renderOptions:this.renderOptions,preferredHighlighter:this.preferredHighlighter,resolvedThemes:e,resolvedLanguages:t,customExtensionsVersion:void 0,customExtensionMap:s},resolve(){a.initialized=!0,o()},reject:h,requestStart:Date.now()};this.activeTaskById.set(l,u),this.executeTask(a,u)}))}await Promise.all(i)}drainQueue=()=>{if(this._queuedDrain=void 0,!(this.initialized!==!0||this.queuedTasks.length===0)){for(let e=0;e<this.queuedTasks.length;){const t=this.queuedTasks[e];if(this.hasActiveRequest(t)){e++;continue}const i=F(t),s=this.getAvailableWorker(i);if(s==null)break;this.queuedTasks.splice(e,1),this.assignWorkerToTask(t,s),this.resolveLanguagesAndExecuteTask(s,t,i)}this.queueBroadcastStateChanges()}};highlightFileAST(e,t){const i=this.getFileResultCache(t);C(t)||i!=null&&k(i.options,this.getFileRenderOptions())||this.hasMatchingFileInstanceTask(e,t)||this.submitTask(e,{type:"file",file:t})}primeFileHighlightCache(e){if(e.cacheKey==null){console.warn(`WorkerPoolManager.primeFileHighlightCache: priming highlight cache requires file.cacheKey; skipping "${e.name}".`);return}const t=this.getFileResultCache(e),i=this.getFileHighlightKey(e);if(i==null||C(e)||t!=null&&k(t.options,this.getFileRenderOptions()))return;const s=this.getTaskByHighlightKey(i);s!=null?s.primeCache=!0:this.submitCacheTask({type:"file",file:e},i)}getPlainFileAST(e,t,i,s){if(this.highlighter==null){this.queueInitialization();return}return N(e,this.highlighter,this.renderOptions,{forcePlainText:!0,startingLine:t,totalLines:i,lines:s})}highlightDiffAST(e,t){const i=this.getDiffResultCache(t);I(t)||i!=null&&g(i.options,this.getDiffRenderOptions())||this.hasMatchingDiffInstanceTask(e,t)||this.submitTask(e,{type:"diff",diff:t})}primeDiffHighlightCache(e){if(e.cacheKey==null){console.warn(`WorkerPoolManager.primeDiffHighlightCache: priming highlight cache requires diff.cacheKey; skipping "${e.prevName??e.name}" -> "${e.name}".`);return}const t=this.getDiffResultCache(e),i=this.getDiffHighlightKey(e);if(i==null||I(e)||t!=null&&g(t.options,this.getDiffRenderOptions()))return;const s=this.getTaskByHighlightKey(i);s!=null?s.primeCache=!0:this.submitCacheTask({type:"diff",diff:e},i)}getPlainDiffAST(e,t,i,s,r){return this.highlighter!=null?$(e,this.highlighter,this.renderOptions,{forcePlainText:!0,startingLine:t,totalLines:i,expandedHunks:s,collapsedContextThreshold:r}):void 0}terminate(){this.lifecycleGeneration++,this.cancelActiveWorkerTasks(),this.terminateWorkers(),this.fileCache.clear(),this.diffCache.clear(),this.activeRequestByInstance.clear(),this.queuedTasks.length=0,this.queuedTaskByInstance.clear(),this.taskByHighlightKey.clear(),this.activeTaskById.clear(),this.highlighter=void 0,this.initialized=!1,this.workersFailed=!1,this.queueBroadcastStateChanges()}isCurrentLifecycle(e){return this.lifecycleGeneration===e}queueInitialization(e){this.initialize(e).catch(t=>{console.error(t)})}cancelActiveWorkerTasks(){const e=new T;for(const t of this.activeTaskById.values())"reject"in t&&t.reject(e)}terminateWorkers(){for(const e of this.workers)e.worker.terminate();this.workers.length=0}getStats(){return{managerState:this.initialized===!1?"waiting":this.initialized!==!0?"initializing":"initialized",totalWorkers:this.workers.length,workersFailed:this.workersFailed,busyWorkers:this.workers.filter(e=>e.requestId!=null||e.pendingSetupRequestId!=null).length,queuedTasks:this.queuedTasks.length,activeTasks:this.activeTaskById.size,themeSubscribers:this.themeSubscribers.size,fileCacheSize:this.fileCache.size,diffCacheSize:this.diffCache.size}}submitTask(e,t){this.initialized===!1&&this.queueInitialization();const i=this.getHighlightKeyForRequest(t),s=i!=null?this.getTaskByHighlightKey(i):void 0;if(s!=null){this.detachInstanceFromQueuedTasks(e,s),this.addInstanceToTask(s,e),this.queueBroadcastStateChanges();return}this.detachInstanceFromQueuedTasks(e);const r=this.generateRequestId(),n=Date.now(),{renderOptionsVersion:a}=this,o=(()=>{switch(t.type){case"file":return{type:"file",id:r,request:{...t,id:r},instances:new Set([e]),primeCache:!1,highlightKey:i,renderOptionsVersion:a,requestStart:n};case"diff":return{type:"diff",id:r,request:{...t,id:r},instances:new Set([e]),primeCache:!1,highlightKey:i,renderOptionsVersion:a,requestStart:n}}})();this.enqueueRenderTask(o,e)}submitCacheTask(e,t){this.initialized===!1&&this.queueInitialization();const i=this.generateRequestId(),s=Date.now(),{renderOptionsVersion:r}=this,n=(()=>{switch(e.type){case"file":return{type:"file",id:i,request:{...e,id:i},instances:new Set,primeCache:!0,highlightKey:t,renderOptionsVersion:r,requestStart:s};case"diff":return{type:"diff",id:i,request:{...e,id:i},instances:new Set,primeCache:!0,highlightKey:t,renderOptionsVersion:r,requestStart:s}}})();this.enqueueRenderTask(n)}enqueueRenderTask(e,t){this.queuedTasks.push(e),t!=null&&this.queuedTaskByInstance.set(t,e),e.highlightKey!=null&&this.taskByHighlightKey.set(e.highlightKey,e),this.queueDrain()}async resolveLanguagesAndExecuteTask(e,t,i){try{const s=i.filter(r=>!e.langs.has(r));if(s.length>0&&(O(s)?t.request.resolvedLanguages=B(s):t.request.resolvedLanguages=await b(s)),!this.activeTaskById.has(t.id)){e.requestId===t.id&&(this.cleanWorkerAndTask(e,t),this.queueBroadcastStateChanges(),this.queuedTasks.length>0&&this.queueDrain());return}this.executeTask(e,t)}catch{this.cleanWorkerAndTask(e,t),this.queueBroadcastStateChanges(),this.queuedTasks.length>0&&this.queueDrain()}}handleWorkerMessage(e,t){const i=this.activeTaskById.get(t.id);try{if(i==null)throw p;if(t.type==="error"){const s=new Error(t.error);if(t.stack&&(s.stack=t.stack),"reject"in i)i.reject(s);else if(c(i))this.notifyHighlightError(i,s);else throw new Error("handleWorkerMessage: unknown task type");throw s}else switch(t.requestType){case"initialize":if(i.type!=="initialize")throw new Error("handleWorkerMessage: task/response dont match");this.syncCustomExtensionVersion(e,i.request),i.resolve();break;case"set-render-options":if(i.type!=="set-render-options")throw new Error("handleWorkerMessage: task/response dont match");i.resolve();break;case"file":{if(i.type!=="file")throw new Error("handleWorkerMessage: task/response dont match");const{result:s,options:r}=t;if(!this.isCurrentRenderTask(i)||!k(r,this.getFileRenderOptions()))throw p;const{request:n}=i;this.syncCustomExtensionVersion(e,n),n.file.cacheKey!=null&&this.fileCache.set(n.file.cacheKey,{result:s,options:r}),this.notifyFileInstances(i,s,r);break}case"diff":{if(i.type!=="diff")throw new Error("handleWorkerMessage: task/response dont match");const{result:s,options:r}=t;if(!this.isCurrentRenderTask(i)||!g(r,this.getDiffRenderOptions()))throw p;const{request:n}=i;this.syncCustomExtensionVersion(e,n),n.diff.cacheKey!=null&&this.diffCache.set(n.diff.cacheKey,{result:s,options:r}),this.notifyDiffInstances(i,s,r);break}}}catch(s){s!==p&&console.error(s,i,t)}this.cleanWorkerAndTask(e,i,t.id),this.queueBroadcastStateChanges(),this.queuedTasks.length>0&&this.queueDrain()}_queuedDrain;queueDrain(){this._queuedDrain==null&&(this._queuedDrain=Promise.resolve().then(this.drainQueue),this.queueBroadcastStateChanges())}assignWorkerToTask(e,t){t.requestId=e.id,c(e)&&(this.clearQueuedInstanceRequests(e),this.trackInstanceRequests(e)),this.activeTaskById.set(e.id,e)}cleanWorkerAndTask(e,t,i=t?.id){e.requestId===i&&(e.requestId=void 0),e.pendingSetupRequestId===i&&(e.pendingSetupRequestId=void 0),t!=null&&(c(t)&&(this.clearInstanceRequests(t),this.clearHighlightKey(t)),this.activeTaskById.delete(t.id))}executeTask(e,t){U(t.request)&&this.maybeAttachCustomExtensions(e,t.request),this.activeTaskById.has(t.id)||this.assignWorkerToTask(t,e);for(const i of F(t))e.langs.add(i);try{e.worker.postMessage(t.request)}catch(i){console.error("Failed to post message to worker:",i),c(t)?this.notifyHighlightError(t,i):"reject"in t&&t.reject(i),this.cleanWorkerAndTask(e,t),this.queuedTasks.length>0&&this.queueDrain()}this.queueBroadcastStateChanges()}maybeAttachCustomExtensions(e,t){if(t.customExtensionsVersion!=null)return;const i=Q();e.customExtensionsVersion>=i||(t.customExtensionsVersion=i,t.customExtensionMap=V())}syncCustomExtensionVersion(e,t){t.customExtensionsVersion!=null&&(e.customExtensionsVersion=t.customExtensionsVersion)}getAvailableWorker(e){let t;for(const i of this.workers){if(i.requestId!=null||i.pendingSetupRequestId!=null||!i.initialized)continue;if(t=i,e.length===0)break;let s=!0;for(const r of e)if(!i.langs.has(r)){s=!1;break}if(s)break}return t}getFileHighlightKey(e){if(e.cacheKey!=null)return`file:${e.cacheKey}:${this.renderOptionsVersion}`}getDiffHighlightKey(e){if(e.cacheKey!=null)return`diff:${e.cacheKey}:${this.renderOptionsVersion}`}getHighlightKeyForRequest(e){switch(e.type){case"file":return this.getFileHighlightKey(e.file);case"diff":return this.getDiffHighlightKey(e.diff)}}hasActiveRequest(e){for(const t of d(e))if(this.activeRequestByInstance.has(t))return!0;return!1}addInstanceToTask(e,t){e.type,e.instances.add(t),this.activeTaskById.has(e.id)?this.activeRequestByInstance.set(t,e.id):this.queuedTaskByInstance.set(t,e)}detachInstanceFromQueuedTasks(e,t){const i=this.queuedTaskByInstance.get(e);i==null||i===t||(this.queuedTaskByInstance.delete(e),this.detachInstanceFromRenderTask(i,e),!i.primeCache&&i.instances.size===0&&this.removeQueuedTask(i))}detachInstanceFromRenderTask(e,t){e.type,e.instances.delete(t)}removeQueuedTask(e){const t=this.queuedTasks.indexOf(e);t!==-1&&this.queuedTasks.splice(t,1),this.clearQueuedInstanceRequests(e),this.clearHighlightKey(e)}removeActiveTask(e){this.clearInstanceRequests(e),this.clearHighlightKey(e),this.activeTaskById.delete(e.id)}invalidateRenderTasks(){for(let e=this.queuedTasks.length-1;e>=0;e--){const t=this.queuedTasks[e];t.renderOptionsVersion!==this.renderOptionsVersion&&this.removeQueuedTask(t)}for(const e of Array.from(this.activeTaskById.values()))c(e)&&e.renderOptionsVersion!==this.renderOptionsVersion&&this.removeActiveTask(e)}clearQueuedInstanceRequests(e){for(const t of d(e))this.queuedTaskByInstance.get(t)===e&&this.queuedTaskByInstance.delete(t)}clearHighlightKey(e){e.highlightKey!=null&&this.taskByHighlightKey.get(e.highlightKey)===e&&this.taskByHighlightKey.delete(e.highlightKey)}trackInstanceRequests(e){for(const t of d(e))this.activeRequestByInstance.set(t,e.id)}clearInstanceRequests(e){for(const t of d(e))this.activeRequestByInstance.get(t)===e.id&&this.activeRequestByInstance.delete(t)}notifyFileInstances(e,t,i){for(const s of e.instances)this.activeRequestByInstance.get(s)===e.id&&s.onHighlightSuccess(e.request.file,t,i)}notifyDiffInstances(e,t,i){for(const s of e.instances)this.activeRequestByInstance.get(s)===e.id&&s.onHighlightSuccess(e.request.diff,t,i)}notifyHighlightError(e,t){for(const i of d(e))this.activeRequestByInstance.get(i)===e.id&&i.onHighlightError(t)}hasMatchingFileInstanceTask(e,t){for(const i of this.iterateRenderTasks())if(i.type==="file"&&this.isCurrentRenderTask(i)&&i.instances.has(e)&&_(t,i.request.file))return!0;return!1}hasMatchingDiffInstanceTask(e,t){for(const i of this.iterateRenderTasks())if(i.type==="diff"&&this.isCurrentRenderTask(i)&&i.instances.has(e)&&j(i.request.diff,t))return!0;return!1}getTaskByHighlightKey(e){const t=this.taskByHighlightKey.get(e);return t!=null&&this.isCurrentRenderTask(t)?t:void 0}isCurrentRenderTask(e){return e.renderOptionsVersion===this.renderOptionsVersion}*iterateRenderTasks(){for(const e of this.queuedTasks)yield e;for(const e of this.activeTaskById.values())c(e)&&(yield e)}generateRequestId(){return`req_${++this.nextRequestId}`}};function U(e){return e.type==="initialize"||e.type==="file"||e.type==="diff"}function F(e){const t=new Set;if(e.type==="initialize"||e.type==="set-render-options")return[];switch(e.type){case"file":t.add(e.request.file.lang??y(e.request.file.name));break;case"diff":t.add(e.request.diff.lang??y(e.request.diff.name)),t.add(e.request.diff.lang??y(e.request.diff.prevName??"-"));break}return t.delete("text"),Array.from(t)}function c(e){return e?.type==="file"||e?.type==="diff"}function d(e){return e.instances}let f;function Zt({poolOptions:e,highlighterOptions:t}){return f??=new G(e,t),f}function ei(){f!=null&&(f.terminate(),f=void 0)}export{G as WorkerPoolManager,Zt as getOrCreateWorkerPoolSingleton,ei as terminateWorkerPoolSingleton};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as q,x as K,y as G,i as M,z as J,B as W,C as P}from"./computeVirtualFileMetrics-BkiDSlTW.js";import{fL as j,hI as z}from"./useAppFontEffects-Cwyhjfl5.js";import{d as X,a as Q}from"./vendor-diff-C3JhlQdm.js";function gn(n,e){return n===e||n?.cacheKey!=null&&n.cacheKey===e?.cacheKey}function mn(n,e){return q(n.theme,e.theme)&&n.useTokenTransformer===e.useTokenTransformer&&n.tokenizeMaxLineLength===e.tokenizeMaxLineLength&&n.lineDiffType===e.lineDiffType&&n.maxLineDiffLength===e.maxLineDiffLength}function A({line:n,spanStart:e,spanLength:r}){return{start:{line:n,character:e},end:{line:n,character:e+r},properties:{"data-diff-span":""},alwaysWrap:!0}}function T({item:n,arr:e,enableJoin:r,isNeutral:l=!1,isLastItem:f=!1}){const t=e[e.length-1];if(t==null||f||!r){e.push([l?0:1,n.value]);return}const h=t[0]===0;if(l===h||l&&n.value.length===1&&!h){t[1]+=n.value;return}e.push([l?0:1,n.value])}function B({isPartial:n,rangeSize:e,expandedHunks:r,hunkIndex:l,collapsedContextThreshold:f}){const t=Math.max(e,0);if(t===0||n)return{fromStart:0,fromEnd:0,rangeSize:t,collapsedLines:t,renderAll:!1};if(r===!0||t<=f)return{fromStart:t,fromEnd:0,rangeSize:t,collapsedLines:0,renderAll:!0};const h=r?.get(l),d=Math.min(Math.max(h?.fromStart??0,0),t),i=Math.min(Math.max(h?.fromEnd??0,0),t),u=d+i,o=u>=t;return{fromStart:o?t:d,fromEnd:o?0:i,rangeSize:t,collapsedLines:Math.max(t-u,0),renderAll:o}}function pn(n){const e=n.hunks[n.hunks.length-1];if(e==null||n.isPartial||n.additionLines.length===0||n.deletionLines.length===0)return!1;const r=n.additionLines.length-(e.additionLineIndex+e.additionCount),l=n.deletionLines.length-(e.deletionLineIndex+e.deletionCount);return r<=0&&l<=0?!1:r!==l}function Y({fileDiff:n,errorPrefix:e}){const r=n.hunks[n.hunks.length-1];if(r==null||n.isPartial||n.additionLines.length===0||n.deletionLines.length===0)return 0;const l=n.additionLines.length-(r.additionLineIndex+r.additionCount),f=n.deletionLines.length-(r.deletionLineIndex+r.deletionCount);if(l<=0&&f<=0)return 0;if(l!==f)throw new Error(`${e}: trailing context mismatch (additions=${l}, deletions=${f}) for ${n.name}`);return Math.min(l,f)}function V({fileDiff:n,hunkIndex:e,expandedHunks:r,collapsedContextThreshold:l,errorPrefix:f}){if(e!==n.hunks.length-1)return;const t=Y({fileDiff:n,errorPrefix:f});if(t<=0)return;if(r===!0||t<=l)return{fromStart:t,fromEnd:0,rangeSize:t,collapsedLines:0,renderAll:!0};const h=r?.get(n.hunks.length),d=Math.min(Math.max(h?.fromStart??0,0),t);return{fromStart:d,fromEnd:0,rangeSize:t,collapsedLines:t-d,renderAll:d>=t}}function $({type:n,metrics:e}){return e.hunkSeparatorHeight??K(n)}function U({type:n,metrics:e}){return n==="simple"||n==="metadata"||n==="line-info-basic"?0:e.spacing}function Z({type:n,hunkIndex:e,hunkSpecs:r}){switch(n){case"simple":return e>0;case"metadata":return r!=null;case"line-info":case"line-info-basic":case"custom":return!0}}function y(n){return n!=="simple"&&n!=="metadata"}function In({type:n,metrics:e,hunkIndex:r,hunkSpecs:l}){if(!Z({type:n,hunkIndex:r,hunkSpecs:l}))return;const f=$({type:n,metrics:e}),t=U({type:n,metrics:e}),h=r>0?t:0,d=t;return{height:f,gapBefore:h,gapAfter:d,totalHeight:h+f+d}}function Cn({type:n,metrics:e}){if(!y(n))return;const r=$({type:n,metrics:e}),l=U({type:n,metrics:e});return{height:r,gapBefore:l,gapAfter:0,totalHeight:l+r}}function nn({diff:n,diffStyle:e,startingLine:r=0,totalLines:l=1/0,expandedHunks:f,collapsedContextThreshold:t=1,callback:h}){const d=en({diff:n,diffStyle:e,startingLine:r,expandedHunks:f,collapsedContextThreshold:t}),i={viewportStart:r,viewportEnd:r+l,isWindowedHighlight:r>0||l<1/0,splitCount:d.splitCount,unifiedCount:d.unifiedCount,finalHunkIndex:n.hunks.length-1,shouldBreak(){if(!i.isWindowedHighlight)return!1;const u=i.unifiedCount>=r+l,o=i.splitCount>=r+l;return e==="unified"?u:(e==="split"||u)&&o},shouldSkip(u,o){if(!i.isWindowedHighlight)return!1;const s=i.unifiedCount+u<r,a=i.splitCount+o<r;return e==="unified"?s:(e==="split"||s)&&a},incrementCounts(u,o){(e==="unified"||e==="both")&&(i.unifiedCount+=u),(e==="split"||e==="both")&&(i.splitCount+=o)},isInWindow(u,o){if(!i.isWindowedHighlight)return!0;const s=i.isInUnifiedWindow(u),a=i.isInSplitWindow(o);return e==="unified"?s:e==="split"?a:s||a},isInUnifiedWindow(u){return!i.isWindowedHighlight||i.unifiedCount>=r-u&&i.unifiedCount<r+l},isInSplitWindow(u){return!i.isWindowedHighlight||i.splitCount>=r-u&&i.splitCount<r+l},emit(u,o=!1){return o||(e==="unified"?i.incrementCounts(1,0):e==="split"?i.incrementCounts(0,1):i.incrementCounts(1,1)),h(u)??!1}};n:for(let u=d.hunkIndex;u<n.hunks.length;u++){let g=function(c,p){return a==null||a.collapsedLines<=0||a.fromStart+a.fromEnd>0?0:e==="unified"?c===o.unifiedLineStart+o.unifiedLineCount-1?a.collapsedLines:0:p===o.splitLineStart+o.splitLineCount-1?a.collapsedLines:0},b=function(){return O?0:(O=!0,s.collapsedLines)};const o=n.hunks[u];if(o==null)throw new Error("iterateOverDiff: invalid hunk index");if(i.shouldBreak())break;const s=B({isPartial:n.isPartial,rangeSize:o.collapsedBefore,expandedHunks:f,hunkIndex:u,collapsedContextThreshold:t}),a=u===i.finalHunkIndex?V({fileDiff:n,hunkIndex:u,expandedHunks:f,collapsedContextThreshold:t,errorPrefix:"iterateOverDiff"}):void 0,m=s.fromStart+s.fromEnd;let O=s.collapsedLines===0;if(i.shouldSkip(m,m))i.incrementCounts(m,m),b();else{let c=o.unifiedLineStart-s.rangeSize,p=o.splitLineStart-s.rangeSize,k=o.deletionLineIndex-s.rangeSize,R=o.additionLineIndex-s.rangeSize,S=o.deletionStart-s.rangeSize,H=o.additionStart-s.rangeSize;if(F(i,s.fromStart,e,E=>i.emit({hunkIndex:u,hunk:o,collapsedBefore:0,collapsedAfter:0,type:"context-expanded",deletionLine:{lineNumber:S+E,lineIndex:k+E,noEOFCR:!1,unifiedLineIndex:c+E,splitLineIndex:p+E},additionLine:{unifiedLineIndex:c+E,splitLineIndex:p+E,lineIndex:R+E,lineNumber:H+E,noEOFCR:!1}}))||(c=o.unifiedLineStart-s.fromEnd,p=o.splitLineStart-s.fromEnd,k=o.deletionLineIndex-s.fromEnd,R=o.additionLineIndex-s.fromEnd,S=o.deletionStart-s.fromEnd,H=o.additionStart-s.fromEnd,F(i,s.fromEnd,e,E=>i.emit({hunkIndex:u,hunk:o,collapsedBefore:b(),collapsedAfter:0,type:"context-expanded",deletionLine:{lineNumber:S+E,lineIndex:k+E,noEOFCR:!1,unifiedLineIndex:c+E,splitLineIndex:p+E},additionLine:{unifiedLineIndex:c+E,splitLineIndex:p+E,lineIndex:R+E,lineNumber:H+E,noEOFCR:!1}}),()=>{b()})))break n}let N=o.unifiedLineStart,w=o.splitLineStart,I=o.deletionLineIndex,C=o.additionLineIndex,L=o.deletionStart,v=o.additionStart;const x=o.hunkContent.at(-1);for(const c of o.hunkContent){if(i.shouldBreak())break n;const p=c===x;if(c.type==="context"){if(i.shouldSkip(c.lines,c.lines))i.incrementCounts(c.lines,c.lines),b();else if(F(i,c.lines,e,k=>{const R=p&&k===c.lines-1,S=N+k,H=w+k;return i.emit({hunkIndex:u,hunk:o,collapsedBefore:b(),collapsedAfter:g(S,H),type:"context",deletionLine:{lineNumber:L+k,lineIndex:I+k,noEOFCR:R&&o.noEOFCRDeletions,unifiedLineIndex:S,splitLineIndex:H},additionLine:{unifiedLineIndex:S,splitLineIndex:H,lineIndex:C+k,lineNumber:v+k,noEOFCR:R&&o.noEOFCRAdditions}})},()=>{b()}))break n;N+=c.lines,w+=c.lines,I+=c.lines,C+=c.lines,L+=c.lines,v+=c.lines}else{const k=Math.max(c.deletions,c.additions),R=c.deletions+c.additions;if(!i.shouldSkip(R,k)){const S=rn(i,c,e);(S[0]?.[0]??0)>0&&b();for(const[H,E]of S)for(let D=H;D<E;D++){const _=g(N+D,e==="unified"?w+(D<c.deletions?D:D-c.deletions):w+D);if(i.emit(sn({hunkIndex:u,hunk:o,collapsedBefore:b(),collapsedAfter:_,diffStyle:e,index:D,unifiedLineIndex:N,splitLineIndex:w,additionLineIndex:C,deletionLineIndex:I,additionLineNumber:v,deletionLineNumber:L,content:c,isLastContent:p,unifiedCount:R,splitCount:k}),!0))break n}}b(),i.incrementCounts(R,k),N+=R,w+=k,I+=c.deletions,C+=c.additions,L+=c.deletions,v+=c.additions}}if(a!=null){const{collapsedLines:c,fromStart:p,fromEnd:k}=a,R=p+k;if(F(i,R,e,S=>{const H=S===R-1;return i.emit({hunkIndex:n.hunks.length,hunk:void 0,collapsedBefore:0,collapsedAfter:H?c:0,type:"context-expanded",deletionLine:{lineNumber:L+S,lineIndex:I+S,noEOFCR:!1,unifiedLineIndex:N+S,splitLineIndex:w+S},additionLine:{unifiedLineIndex:N+S,splitLineIndex:w+S,lineIndex:C+S,lineNumber:v+S,noEOFCR:!1}})},void 0,()=>i.shouldBreak()))break n}}}function en({diff:n,diffStyle:e,startingLine:r,expandedHunks:l,collapsedContextThreshold:f}){if(r<=0||e==="both")return{hunkIndex:0,splitCount:0,unifiedCount:0};const t=tn({diff:n,expandedHunks:l,collapsedContextThreshold:f});let h=0,d=n.hunks.length-1,i=n.hunks.length;for(;h<=d;){const o=h+d>>1,s=t[o+1];if(s==null)throw new Error("iterateOverDiff: invalid hunk prefix index");(e==="unified"?s.unifiedCount:s.splitCount)>r?(i=o,d=o-1):h=o+1}if(i>=n.hunks.length){const o=t[n.hunks.length];if(o==null)throw new Error("iterateOverDiff: invalid terminal hunk prefix index");return{hunkIndex:n.hunks.length,splitCount:o.splitCount,unifiedCount:o.unifiedCount}}const u=t[i];if(u==null)throw new Error("iterateOverDiff: invalid selected hunk prefix index");return{hunkIndex:i,splitCount:u.splitCount,unifiedCount:u.unifiedCount}}function tn({diff:n,expandedHunks:e,collapsedContextThreshold:r}){let l=0,f=0;const t=n.hunks.length-1,h=[{splitCount:0,unifiedCount:0}];for(let d=0;d<n.hunks.length;d++){const i=n.hunks[d];if(i==null)throw new Error("iterateOverDiff: invalid hunk summary index");const u=B({isPartial:n.isPartial,rangeSize:i.collapsedBefore,expandedHunks:e,hunkIndex:d,collapsedContextThreshold:r}),o=u.fromStart+u.fromEnd;l+=o+i.splitLineCount,f+=o+i.unifiedLineCount;const s=d===t?V({fileDiff:n,hunkIndex:d,expandedHunks:e,collapsedContextThreshold:r,errorPrefix:"iterateOverDiff"}):void 0;if(s!=null){const a=s.fromStart+s.fromEnd;l+=a,f+=a}h.push({splitCount:l,unifiedCount:f})}return h}function on(n,e,r){if(!n.isWindowedHighlight||e<=0)return[0,e];const l=[];function f(d){const i=Math.max(0,n.viewportStart-d),u=Math.min(e,n.viewportEnd-d);u>i&&l.push([i,u])}if(r!=="split"&&f(n.unifiedCount),r!=="unified"&&f(n.splitCount),l.length===0)return[0,0];let t=l[0][0],h=l[0][1];for(let d=1;d<l.length;d++){const i=l[d];t=Math.min(t,i[0]),h=Math.max(h,i[1])}return[t,h]}function F(n,e,r,l,f,t){const[h,d]=on(n,e,r);h>0&&(n.incrementCounts(h,h),f?.());let i=h;for(;i<e;){if(t?.()===!0)return!0;if(i>=d){n.incrementCounts(e-i,e-i);break}if(n.isInWindow(0,0)){if(l(i)===!0)return!0}else n.incrementCounts(1,1);i++}return!1}function rn(n,e,r){if(!n.isWindowedHighlight)return[[0,r==="unified"?e.deletions+e.additions:Math.max(e.deletions,e.additions)]];const l=r!=="split",f=r!=="unified",t=r==="unified"?"unified":"split",h=[];function d(s,a){if(s+a<=n.viewportStart||s>=n.viewportEnd)return;const m=Math.max(0,n.viewportStart-s),g=Math.min(a,n.viewportEnd-s);return g>m?[m,g]:void 0}function i(s,a){return t==="split"?s:a==="additions"?[s[0]+e.deletions,s[1]+e.deletions]:s}function u(s,a){if(s==null)return;const[m,g]=i(s,a);g>m&&h.push([m,g])}if(l&&(u(d(n.unifiedCount,e.deletions),"deletions"),u(d(n.unifiedCount+e.deletions,e.additions),"additions")),f&&(u(d(n.splitCount,e.deletions),"deletions"),u(d(n.splitCount,e.additions),"additions")),h.length===0)return h;h.sort((s,a)=>s[0]-a[0]);const o=[h[0]];for(const[s,a]of h.slice(1)){const m=o[o.length-1];s<=m[1]?m[1]=Math.max(m[1],a):o.push([s,a])}return o}function sn({hunkIndex:n,hunk:e,collapsedAfter:r,collapsedBefore:l,diffStyle:f,index:t,unifiedLineIndex:h,splitLineIndex:d,additionLineIndex:i,deletionLineIndex:u,additionLineNumber:o,deletionLineNumber:s,content:a,isLastContent:m,unifiedCount:g,splitCount:O}){const b=t<a.deletions?h+t:void 0,N=f==="unified"?t>=a.deletions?h+t:void 0:t<a.additions?h+a.deletions+t:void 0,w=f==="unified"?d+(t<a.deletions?t:t-a.deletions):d+t,I=t<a.deletions?u+t:void 0,C=t<a.deletions?s+t:void 0,L=f==="unified"?t>=a.deletions?i+(t-a.deletions):void 0:t<a.additions?i+t:void 0,v=f==="unified"?t>=a.deletions?o+(t-a.deletions):void 0:t<a.additions?o+t:void 0,x=f==="unified"?m&&t===a.deletions-1&&e.noEOFCRDeletions:m&&t===O-1&&e.noEOFCRDeletions,c=f==="unified"?m&&t===g-1&&e.noEOFCRAdditions:m&&t===O-1&&e.noEOFCRAdditions,p=I!=null&&C!=null&&b!=null?{lineNumber:C,lineIndex:I,noEOFCR:x,unifiedLineIndex:b,splitLineIndex:w}:void 0,k=L!=null&&v!=null&&N!=null?{unifiedLineIndex:N,splitLineIndex:w,lineIndex:L,lineNumber:v,noEOFCR:c}:void 0;if(p==null&&k!=null)return{type:"change",hunkIndex:n,hunk:e,collapsedAfter:r,collapsedBefore:l,deletionLine:void 0,additionLine:k};if(p!=null&&k==null)return{type:"change",hunkIndex:n,hunk:e,collapsedAfter:r,collapsedBefore:l,deletionLine:p,additionLine:void 0};if(p==null||k==null)throw new Error("iterateOverDiff: missing change line data");return{type:"change",hunkIndex:n,hunk:e,collapsedAfter:r,collapsedBefore:l,deletionLine:p,additionLine:k}}const ln={forcePlainText:!1};function Ln(n,e,r,{forcePlainText:l,startingLine:f,totalLines:t,expandedHunks:h,collapsedContextThreshold:d=1}=ln){l?(f??=0,t??=1/0):(f=0,t=1/0);const i=f>0||t<1/0,u=typeof r.theme=="string"?e.getTheme(r.theme).type:void 0,o=G({theme:r.theme,highlighter:e}),s=l&&!i&&(n.unifiedLineCount>1e3||n.splitLineCount>1e3)?"none":r.lineDiffType,a={deletionLines:[],additionLines:[]},{maxLineDiffLength:m}=r,g=!l&&!n.isPartial,O=l?h:void 0,b=new Map;function N(I){const C=g?0:I,L=b.get(C)??un();return b.set(C,L),L}function w(I,C,L,v){if(i){let x=L.at(-1);(x==null||x.targetIndex+x.count!==C)&&(x={targetIndex:C,originalOffset:v.length,count:0},L.push(x)),x.count++}v.push(I)}nn({diff:n,diffStyle:"both",startingLine:f,totalLines:t,expandedHunks:i?O:!0,collapsedContextThreshold:d,callback:({hunkIndex:I,additionLine:C,deletionLine:L,type:v})=>{const x=N(I),c=C!=null?C.splitLineIndex:L.splitLineIndex;v==="change"&&C!=null&&L!=null&&an({additionLine:n.additionLines[C.lineIndex],deletionLine:n.deletionLines[L.lineIndex],deletionLineIndex:x.deletionContent.length,additionLineIndex:x.additionContent.length,deletionDecorations:x.deletionDecorations,additionDecorations:x.additionDecorations,lineDiffType:s,maxLineDiffLength:m}),L!=null&&(w(n.deletionLines[L.lineIndex],L.lineIndex,x.deletionSegments,x.deletionContent),x.deletionInfo.push({type:v==="change"?"change-deletion":v,lineNumber:L.lineNumber,altLineNumber:v==="change"?void 0:C.lineNumber??void 0,lineIndex:`${L.unifiedLineIndex},${c}`})),C!=null&&(w(n.additionLines[C.lineIndex],C.lineIndex,x.additionSegments,x.additionContent),x.additionInfo.push({type:v==="change"?"change-addition":v,lineNumber:C.lineNumber,altLineNumber:v==="change"?void 0:L.lineNumber??void 0,lineIndex:`${C.unifiedLineIndex},${c}`}))}});for(const I of b.values()){if(I.deletionContent.length===0&&I.additionContent.length===0)continue;const C={name:n.prevName??n.name,contents:I.deletionContent.value},L={name:n.name,contents:I.additionContent.value},{deletionLines:v,additionLines:x}=dn({deletionFile:C,deletionInfo:I.deletionInfo,deletionDecorations:I.deletionDecorations,additionFile:L,additionInfo:I.additionInfo,additionDecorations:I.additionDecorations,highlighter:e,options:r,languageOverride:l?"text":n.lang});if(g){a.deletionLines=v,a.additionLines=x;continue}if(I.deletionSegments.length>0)for(const c of I.deletionSegments)for(let p=0;p<c.count;p++)a.deletionLines[c.targetIndex+p]=v[c.originalOffset+p];else a.deletionLines.push(...v);if(I.additionSegments.length>0)for(const c of I.additionSegments)for(let p=0;p<c.count;p++)a.additionLines[c.targetIndex+p]=x[c.originalOffset+p];else a.additionLines.push(...x)}return{code:a,themeStyles:o,baseThemeType:u}}function an({deletionLine:n,additionLine:e,deletionLineIndex:r,additionLineIndex:l,deletionDecorations:f,additionDecorations:t,lineDiffType:h,maxLineDiffLength:d}){if(n==null||e==null||h==="none"||(n=z(n),e=z(e),n.length>d||e.length>d))return;const i=h==="char"?X(n,e):Q(n,e),u=[],o=[],s=h==="word-alt",a=i.at(-1);for(const g of i){const O=g===a;!g.added&&!g.removed?(T({item:g,arr:u,enableJoin:s,isNeutral:!0,isLastItem:O}),T({item:g,arr:o,enableJoin:s,isNeutral:!0,isLastItem:O})):g.removed?T({item:g,arr:u,enableJoin:s,isLastItem:O}):T({item:g,arr:o,enableJoin:s,isLastItem:O})}let m=0;for(const g of u)g[0]===1&&f.push(A({line:r,spanStart:m,spanLength:g[1].length})),m+=g[1].length;m=0;for(const g of o)g[0]===1&&t.push(A({line:l,spanStart:m,spanLength:g[1].length})),m+=g[1].length}function un(){return{deletionContent:{push(n){this.value+=n,this.length++},value:"",length:0},additionContent:{push(n){this.value+=n,this.length++},value:"",length:0},deletionInfo:[],additionInfo:[],deletionDecorations:[],additionDecorations:[],deletionSegments:[],additionSegments:[]}}function dn({deletionFile:n,additionFile:e,deletionInfo:r,additionInfo:l,highlighter:f,deletionDecorations:t,additionDecorations:h,languageOverride:d,options:{theme:i=j,...u}}){const o=d??M(n.name),s=d??M(e.name),{state:a,transformers:m}=J(u.useTokenTransformer),g=typeof i=="string"?{...u,lang:"text",theme:i,transformers:m,decorations:void 0,defaultColor:!1,cssVariablePrefix:W("token"),tokenizeTimeLimit:0}:{...u,lang:"text",themes:i,transformers:m,decorations:void 0,defaultColor:!1,cssVariablePrefix:W("token"),tokenizeTimeLimit:0};return{deletionLines:n.contents===""?[]:(g.lang=o,a.lineInfo=r,g.decorations=t,P(f.codeToHast(z(n.contents),g))),additionLines:e.contents===""?[]:(g.lang=s,g.decorations=h,a.lineInfo=l,P(f.codeToHast(z(e.contents),g)))}}function xn(n){const e=n.lang??M(n.name),r=n.lang??(n.prevName!=null?M(n.prevName):"text");return e==="text"&&r==="text"}export{mn as a,gn as b,nn as c,B as d,In as e,V as f,Y as g,pn as h,xn as i,Cn as j,Ln as r};
|
|
1
|
+
import{b as q,x as K,y as G,i as M,z as J,B as W,C as P}from"./computeVirtualFileMetrics-CI1PC_z2.js";import{fL as j,hI as z}from"./useAppFontEffects-B6OfEypo.js";import{d as X,a as Q}from"./vendor-diff-C3JhlQdm.js";function gn(n,e){return n===e||n?.cacheKey!=null&&n.cacheKey===e?.cacheKey}function mn(n,e){return q(n.theme,e.theme)&&n.useTokenTransformer===e.useTokenTransformer&&n.tokenizeMaxLineLength===e.tokenizeMaxLineLength&&n.lineDiffType===e.lineDiffType&&n.maxLineDiffLength===e.maxLineDiffLength}function A({line:n,spanStart:e,spanLength:r}){return{start:{line:n,character:e},end:{line:n,character:e+r},properties:{"data-diff-span":""},alwaysWrap:!0}}function T({item:n,arr:e,enableJoin:r,isNeutral:l=!1,isLastItem:f=!1}){const t=e[e.length-1];if(t==null||f||!r){e.push([l?0:1,n.value]);return}const h=t[0]===0;if(l===h||l&&n.value.length===1&&!h){t[1]+=n.value;return}e.push([l?0:1,n.value])}function B({isPartial:n,rangeSize:e,expandedHunks:r,hunkIndex:l,collapsedContextThreshold:f}){const t=Math.max(e,0);if(t===0||n)return{fromStart:0,fromEnd:0,rangeSize:t,collapsedLines:t,renderAll:!1};if(r===!0||t<=f)return{fromStart:t,fromEnd:0,rangeSize:t,collapsedLines:0,renderAll:!0};const h=r?.get(l),d=Math.min(Math.max(h?.fromStart??0,0),t),i=Math.min(Math.max(h?.fromEnd??0,0),t),u=d+i,o=u>=t;return{fromStart:o?t:d,fromEnd:o?0:i,rangeSize:t,collapsedLines:Math.max(t-u,0),renderAll:o}}function pn(n){const e=n.hunks[n.hunks.length-1];if(e==null||n.isPartial||n.additionLines.length===0||n.deletionLines.length===0)return!1;const r=n.additionLines.length-(e.additionLineIndex+e.additionCount),l=n.deletionLines.length-(e.deletionLineIndex+e.deletionCount);return r<=0&&l<=0?!1:r!==l}function Y({fileDiff:n,errorPrefix:e}){const r=n.hunks[n.hunks.length-1];if(r==null||n.isPartial||n.additionLines.length===0||n.deletionLines.length===0)return 0;const l=n.additionLines.length-(r.additionLineIndex+r.additionCount),f=n.deletionLines.length-(r.deletionLineIndex+r.deletionCount);if(l<=0&&f<=0)return 0;if(l!==f)throw new Error(`${e}: trailing context mismatch (additions=${l}, deletions=${f}) for ${n.name}`);return Math.min(l,f)}function V({fileDiff:n,hunkIndex:e,expandedHunks:r,collapsedContextThreshold:l,errorPrefix:f}){if(e!==n.hunks.length-1)return;const t=Y({fileDiff:n,errorPrefix:f});if(t<=0)return;if(r===!0||t<=l)return{fromStart:t,fromEnd:0,rangeSize:t,collapsedLines:0,renderAll:!0};const h=r?.get(n.hunks.length),d=Math.min(Math.max(h?.fromStart??0,0),t);return{fromStart:d,fromEnd:0,rangeSize:t,collapsedLines:t-d,renderAll:d>=t}}function $({type:n,metrics:e}){return e.hunkSeparatorHeight??K(n)}function U({type:n,metrics:e}){return n==="simple"||n==="metadata"||n==="line-info-basic"?0:e.spacing}function Z({type:n,hunkIndex:e,hunkSpecs:r}){switch(n){case"simple":return e>0;case"metadata":return r!=null;case"line-info":case"line-info-basic":case"custom":return!0}}function y(n){return n!=="simple"&&n!=="metadata"}function In({type:n,metrics:e,hunkIndex:r,hunkSpecs:l}){if(!Z({type:n,hunkIndex:r,hunkSpecs:l}))return;const f=$({type:n,metrics:e}),t=U({type:n,metrics:e}),h=r>0?t:0,d=t;return{height:f,gapBefore:h,gapAfter:d,totalHeight:h+f+d}}function Cn({type:n,metrics:e}){if(!y(n))return;const r=$({type:n,metrics:e}),l=U({type:n,metrics:e});return{height:r,gapBefore:l,gapAfter:0,totalHeight:l+r}}function nn({diff:n,diffStyle:e,startingLine:r=0,totalLines:l=1/0,expandedHunks:f,collapsedContextThreshold:t=1,callback:h}){const d=en({diff:n,diffStyle:e,startingLine:r,expandedHunks:f,collapsedContextThreshold:t}),i={viewportStart:r,viewportEnd:r+l,isWindowedHighlight:r>0||l<1/0,splitCount:d.splitCount,unifiedCount:d.unifiedCount,finalHunkIndex:n.hunks.length-1,shouldBreak(){if(!i.isWindowedHighlight)return!1;const u=i.unifiedCount>=r+l,o=i.splitCount>=r+l;return e==="unified"?u:(e==="split"||u)&&o},shouldSkip(u,o){if(!i.isWindowedHighlight)return!1;const s=i.unifiedCount+u<r,a=i.splitCount+o<r;return e==="unified"?s:(e==="split"||s)&&a},incrementCounts(u,o){(e==="unified"||e==="both")&&(i.unifiedCount+=u),(e==="split"||e==="both")&&(i.splitCount+=o)},isInWindow(u,o){if(!i.isWindowedHighlight)return!0;const s=i.isInUnifiedWindow(u),a=i.isInSplitWindow(o);return e==="unified"?s:e==="split"?a:s||a},isInUnifiedWindow(u){return!i.isWindowedHighlight||i.unifiedCount>=r-u&&i.unifiedCount<r+l},isInSplitWindow(u){return!i.isWindowedHighlight||i.splitCount>=r-u&&i.splitCount<r+l},emit(u,o=!1){return o||(e==="unified"?i.incrementCounts(1,0):e==="split"?i.incrementCounts(0,1):i.incrementCounts(1,1)),h(u)??!1}};n:for(let u=d.hunkIndex;u<n.hunks.length;u++){let g=function(c,p){return a==null||a.collapsedLines<=0||a.fromStart+a.fromEnd>0?0:e==="unified"?c===o.unifiedLineStart+o.unifiedLineCount-1?a.collapsedLines:0:p===o.splitLineStart+o.splitLineCount-1?a.collapsedLines:0},b=function(){return O?0:(O=!0,s.collapsedLines)};const o=n.hunks[u];if(o==null)throw new Error("iterateOverDiff: invalid hunk index");if(i.shouldBreak())break;const s=B({isPartial:n.isPartial,rangeSize:o.collapsedBefore,expandedHunks:f,hunkIndex:u,collapsedContextThreshold:t}),a=u===i.finalHunkIndex?V({fileDiff:n,hunkIndex:u,expandedHunks:f,collapsedContextThreshold:t,errorPrefix:"iterateOverDiff"}):void 0,m=s.fromStart+s.fromEnd;let O=s.collapsedLines===0;if(i.shouldSkip(m,m))i.incrementCounts(m,m),b();else{let c=o.unifiedLineStart-s.rangeSize,p=o.splitLineStart-s.rangeSize,k=o.deletionLineIndex-s.rangeSize,R=o.additionLineIndex-s.rangeSize,S=o.deletionStart-s.rangeSize,H=o.additionStart-s.rangeSize;if(F(i,s.fromStart,e,E=>i.emit({hunkIndex:u,hunk:o,collapsedBefore:0,collapsedAfter:0,type:"context-expanded",deletionLine:{lineNumber:S+E,lineIndex:k+E,noEOFCR:!1,unifiedLineIndex:c+E,splitLineIndex:p+E},additionLine:{unifiedLineIndex:c+E,splitLineIndex:p+E,lineIndex:R+E,lineNumber:H+E,noEOFCR:!1}}))||(c=o.unifiedLineStart-s.fromEnd,p=o.splitLineStart-s.fromEnd,k=o.deletionLineIndex-s.fromEnd,R=o.additionLineIndex-s.fromEnd,S=o.deletionStart-s.fromEnd,H=o.additionStart-s.fromEnd,F(i,s.fromEnd,e,E=>i.emit({hunkIndex:u,hunk:o,collapsedBefore:b(),collapsedAfter:0,type:"context-expanded",deletionLine:{lineNumber:S+E,lineIndex:k+E,noEOFCR:!1,unifiedLineIndex:c+E,splitLineIndex:p+E},additionLine:{unifiedLineIndex:c+E,splitLineIndex:p+E,lineIndex:R+E,lineNumber:H+E,noEOFCR:!1}}),()=>{b()})))break n}let N=o.unifiedLineStart,w=o.splitLineStart,I=o.deletionLineIndex,C=o.additionLineIndex,L=o.deletionStart,v=o.additionStart;const x=o.hunkContent.at(-1);for(const c of o.hunkContent){if(i.shouldBreak())break n;const p=c===x;if(c.type==="context"){if(i.shouldSkip(c.lines,c.lines))i.incrementCounts(c.lines,c.lines),b();else if(F(i,c.lines,e,k=>{const R=p&&k===c.lines-1,S=N+k,H=w+k;return i.emit({hunkIndex:u,hunk:o,collapsedBefore:b(),collapsedAfter:g(S,H),type:"context",deletionLine:{lineNumber:L+k,lineIndex:I+k,noEOFCR:R&&o.noEOFCRDeletions,unifiedLineIndex:S,splitLineIndex:H},additionLine:{unifiedLineIndex:S,splitLineIndex:H,lineIndex:C+k,lineNumber:v+k,noEOFCR:R&&o.noEOFCRAdditions}})},()=>{b()}))break n;N+=c.lines,w+=c.lines,I+=c.lines,C+=c.lines,L+=c.lines,v+=c.lines}else{const k=Math.max(c.deletions,c.additions),R=c.deletions+c.additions;if(!i.shouldSkip(R,k)){const S=rn(i,c,e);(S[0]?.[0]??0)>0&&b();for(const[H,E]of S)for(let D=H;D<E;D++){const _=g(N+D,e==="unified"?w+(D<c.deletions?D:D-c.deletions):w+D);if(i.emit(sn({hunkIndex:u,hunk:o,collapsedBefore:b(),collapsedAfter:_,diffStyle:e,index:D,unifiedLineIndex:N,splitLineIndex:w,additionLineIndex:C,deletionLineIndex:I,additionLineNumber:v,deletionLineNumber:L,content:c,isLastContent:p,unifiedCount:R,splitCount:k}),!0))break n}}b(),i.incrementCounts(R,k),N+=R,w+=k,I+=c.deletions,C+=c.additions,L+=c.deletions,v+=c.additions}}if(a!=null){const{collapsedLines:c,fromStart:p,fromEnd:k}=a,R=p+k;if(F(i,R,e,S=>{const H=S===R-1;return i.emit({hunkIndex:n.hunks.length,hunk:void 0,collapsedBefore:0,collapsedAfter:H?c:0,type:"context-expanded",deletionLine:{lineNumber:L+S,lineIndex:I+S,noEOFCR:!1,unifiedLineIndex:N+S,splitLineIndex:w+S},additionLine:{unifiedLineIndex:N+S,splitLineIndex:w+S,lineIndex:C+S,lineNumber:v+S,noEOFCR:!1}})},void 0,()=>i.shouldBreak()))break n}}}function en({diff:n,diffStyle:e,startingLine:r,expandedHunks:l,collapsedContextThreshold:f}){if(r<=0||e==="both")return{hunkIndex:0,splitCount:0,unifiedCount:0};const t=tn({diff:n,expandedHunks:l,collapsedContextThreshold:f});let h=0,d=n.hunks.length-1,i=n.hunks.length;for(;h<=d;){const o=h+d>>1,s=t[o+1];if(s==null)throw new Error("iterateOverDiff: invalid hunk prefix index");(e==="unified"?s.unifiedCount:s.splitCount)>r?(i=o,d=o-1):h=o+1}if(i>=n.hunks.length){const o=t[n.hunks.length];if(o==null)throw new Error("iterateOverDiff: invalid terminal hunk prefix index");return{hunkIndex:n.hunks.length,splitCount:o.splitCount,unifiedCount:o.unifiedCount}}const u=t[i];if(u==null)throw new Error("iterateOverDiff: invalid selected hunk prefix index");return{hunkIndex:i,splitCount:u.splitCount,unifiedCount:u.unifiedCount}}function tn({diff:n,expandedHunks:e,collapsedContextThreshold:r}){let l=0,f=0;const t=n.hunks.length-1,h=[{splitCount:0,unifiedCount:0}];for(let d=0;d<n.hunks.length;d++){const i=n.hunks[d];if(i==null)throw new Error("iterateOverDiff: invalid hunk summary index");const u=B({isPartial:n.isPartial,rangeSize:i.collapsedBefore,expandedHunks:e,hunkIndex:d,collapsedContextThreshold:r}),o=u.fromStart+u.fromEnd;l+=o+i.splitLineCount,f+=o+i.unifiedLineCount;const s=d===t?V({fileDiff:n,hunkIndex:d,expandedHunks:e,collapsedContextThreshold:r,errorPrefix:"iterateOverDiff"}):void 0;if(s!=null){const a=s.fromStart+s.fromEnd;l+=a,f+=a}h.push({splitCount:l,unifiedCount:f})}return h}function on(n,e,r){if(!n.isWindowedHighlight||e<=0)return[0,e];const l=[];function f(d){const i=Math.max(0,n.viewportStart-d),u=Math.min(e,n.viewportEnd-d);u>i&&l.push([i,u])}if(r!=="split"&&f(n.unifiedCount),r!=="unified"&&f(n.splitCount),l.length===0)return[0,0];let t=l[0][0],h=l[0][1];for(let d=1;d<l.length;d++){const i=l[d];t=Math.min(t,i[0]),h=Math.max(h,i[1])}return[t,h]}function F(n,e,r,l,f,t){const[h,d]=on(n,e,r);h>0&&(n.incrementCounts(h,h),f?.());let i=h;for(;i<e;){if(t?.()===!0)return!0;if(i>=d){n.incrementCounts(e-i,e-i);break}if(n.isInWindow(0,0)){if(l(i)===!0)return!0}else n.incrementCounts(1,1);i++}return!1}function rn(n,e,r){if(!n.isWindowedHighlight)return[[0,r==="unified"?e.deletions+e.additions:Math.max(e.deletions,e.additions)]];const l=r!=="split",f=r!=="unified",t=r==="unified"?"unified":"split",h=[];function d(s,a){if(s+a<=n.viewportStart||s>=n.viewportEnd)return;const m=Math.max(0,n.viewportStart-s),g=Math.min(a,n.viewportEnd-s);return g>m?[m,g]:void 0}function i(s,a){return t==="split"?s:a==="additions"?[s[0]+e.deletions,s[1]+e.deletions]:s}function u(s,a){if(s==null)return;const[m,g]=i(s,a);g>m&&h.push([m,g])}if(l&&(u(d(n.unifiedCount,e.deletions),"deletions"),u(d(n.unifiedCount+e.deletions,e.additions),"additions")),f&&(u(d(n.splitCount,e.deletions),"deletions"),u(d(n.splitCount,e.additions),"additions")),h.length===0)return h;h.sort((s,a)=>s[0]-a[0]);const o=[h[0]];for(const[s,a]of h.slice(1)){const m=o[o.length-1];s<=m[1]?m[1]=Math.max(m[1],a):o.push([s,a])}return o}function sn({hunkIndex:n,hunk:e,collapsedAfter:r,collapsedBefore:l,diffStyle:f,index:t,unifiedLineIndex:h,splitLineIndex:d,additionLineIndex:i,deletionLineIndex:u,additionLineNumber:o,deletionLineNumber:s,content:a,isLastContent:m,unifiedCount:g,splitCount:O}){const b=t<a.deletions?h+t:void 0,N=f==="unified"?t>=a.deletions?h+t:void 0:t<a.additions?h+a.deletions+t:void 0,w=f==="unified"?d+(t<a.deletions?t:t-a.deletions):d+t,I=t<a.deletions?u+t:void 0,C=t<a.deletions?s+t:void 0,L=f==="unified"?t>=a.deletions?i+(t-a.deletions):void 0:t<a.additions?i+t:void 0,v=f==="unified"?t>=a.deletions?o+(t-a.deletions):void 0:t<a.additions?o+t:void 0,x=f==="unified"?m&&t===a.deletions-1&&e.noEOFCRDeletions:m&&t===O-1&&e.noEOFCRDeletions,c=f==="unified"?m&&t===g-1&&e.noEOFCRAdditions:m&&t===O-1&&e.noEOFCRAdditions,p=I!=null&&C!=null&&b!=null?{lineNumber:C,lineIndex:I,noEOFCR:x,unifiedLineIndex:b,splitLineIndex:w}:void 0,k=L!=null&&v!=null&&N!=null?{unifiedLineIndex:N,splitLineIndex:w,lineIndex:L,lineNumber:v,noEOFCR:c}:void 0;if(p==null&&k!=null)return{type:"change",hunkIndex:n,hunk:e,collapsedAfter:r,collapsedBefore:l,deletionLine:void 0,additionLine:k};if(p!=null&&k==null)return{type:"change",hunkIndex:n,hunk:e,collapsedAfter:r,collapsedBefore:l,deletionLine:p,additionLine:void 0};if(p==null||k==null)throw new Error("iterateOverDiff: missing change line data");return{type:"change",hunkIndex:n,hunk:e,collapsedAfter:r,collapsedBefore:l,deletionLine:p,additionLine:k}}const ln={forcePlainText:!1};function Ln(n,e,r,{forcePlainText:l,startingLine:f,totalLines:t,expandedHunks:h,collapsedContextThreshold:d=1}=ln){l?(f??=0,t??=1/0):(f=0,t=1/0);const i=f>0||t<1/0,u=typeof r.theme=="string"?e.getTheme(r.theme).type:void 0,o=G({theme:r.theme,highlighter:e}),s=l&&!i&&(n.unifiedLineCount>1e3||n.splitLineCount>1e3)?"none":r.lineDiffType,a={deletionLines:[],additionLines:[]},{maxLineDiffLength:m}=r,g=!l&&!n.isPartial,O=l?h:void 0,b=new Map;function N(I){const C=g?0:I,L=b.get(C)??un();return b.set(C,L),L}function w(I,C,L,v){if(i){let x=L.at(-1);(x==null||x.targetIndex+x.count!==C)&&(x={targetIndex:C,originalOffset:v.length,count:0},L.push(x)),x.count++}v.push(I)}nn({diff:n,diffStyle:"both",startingLine:f,totalLines:t,expandedHunks:i?O:!0,collapsedContextThreshold:d,callback:({hunkIndex:I,additionLine:C,deletionLine:L,type:v})=>{const x=N(I),c=C!=null?C.splitLineIndex:L.splitLineIndex;v==="change"&&C!=null&&L!=null&&an({additionLine:n.additionLines[C.lineIndex],deletionLine:n.deletionLines[L.lineIndex],deletionLineIndex:x.deletionContent.length,additionLineIndex:x.additionContent.length,deletionDecorations:x.deletionDecorations,additionDecorations:x.additionDecorations,lineDiffType:s,maxLineDiffLength:m}),L!=null&&(w(n.deletionLines[L.lineIndex],L.lineIndex,x.deletionSegments,x.deletionContent),x.deletionInfo.push({type:v==="change"?"change-deletion":v,lineNumber:L.lineNumber,altLineNumber:v==="change"?void 0:C.lineNumber??void 0,lineIndex:`${L.unifiedLineIndex},${c}`})),C!=null&&(w(n.additionLines[C.lineIndex],C.lineIndex,x.additionSegments,x.additionContent),x.additionInfo.push({type:v==="change"?"change-addition":v,lineNumber:C.lineNumber,altLineNumber:v==="change"?void 0:L.lineNumber??void 0,lineIndex:`${C.unifiedLineIndex},${c}`}))}});for(const I of b.values()){if(I.deletionContent.length===0&&I.additionContent.length===0)continue;const C={name:n.prevName??n.name,contents:I.deletionContent.value},L={name:n.name,contents:I.additionContent.value},{deletionLines:v,additionLines:x}=dn({deletionFile:C,deletionInfo:I.deletionInfo,deletionDecorations:I.deletionDecorations,additionFile:L,additionInfo:I.additionInfo,additionDecorations:I.additionDecorations,highlighter:e,options:r,languageOverride:l?"text":n.lang});if(g){a.deletionLines=v,a.additionLines=x;continue}if(I.deletionSegments.length>0)for(const c of I.deletionSegments)for(let p=0;p<c.count;p++)a.deletionLines[c.targetIndex+p]=v[c.originalOffset+p];else a.deletionLines.push(...v);if(I.additionSegments.length>0)for(const c of I.additionSegments)for(let p=0;p<c.count;p++)a.additionLines[c.targetIndex+p]=x[c.originalOffset+p];else a.additionLines.push(...x)}return{code:a,themeStyles:o,baseThemeType:u}}function an({deletionLine:n,additionLine:e,deletionLineIndex:r,additionLineIndex:l,deletionDecorations:f,additionDecorations:t,lineDiffType:h,maxLineDiffLength:d}){if(n==null||e==null||h==="none"||(n=z(n),e=z(e),n.length>d||e.length>d))return;const i=h==="char"?X(n,e):Q(n,e),u=[],o=[],s=h==="word-alt",a=i.at(-1);for(const g of i){const O=g===a;!g.added&&!g.removed?(T({item:g,arr:u,enableJoin:s,isNeutral:!0,isLastItem:O}),T({item:g,arr:o,enableJoin:s,isNeutral:!0,isLastItem:O})):g.removed?T({item:g,arr:u,enableJoin:s,isLastItem:O}):T({item:g,arr:o,enableJoin:s,isLastItem:O})}let m=0;for(const g of u)g[0]===1&&f.push(A({line:r,spanStart:m,spanLength:g[1].length})),m+=g[1].length;m=0;for(const g of o)g[0]===1&&t.push(A({line:l,spanStart:m,spanLength:g[1].length})),m+=g[1].length}function un(){return{deletionContent:{push(n){this.value+=n,this.length++},value:"",length:0},additionContent:{push(n){this.value+=n,this.length++},value:"",length:0},deletionInfo:[],additionInfo:[],deletionDecorations:[],additionDecorations:[],deletionSegments:[],additionSegments:[]}}function dn({deletionFile:n,additionFile:e,deletionInfo:r,additionInfo:l,highlighter:f,deletionDecorations:t,additionDecorations:h,languageOverride:d,options:{theme:i=j,...u}}){const o=d??M(n.name),s=d??M(e.name),{state:a,transformers:m}=J(u.useTokenTransformer),g=typeof i=="string"?{...u,lang:"text",theme:i,transformers:m,decorations:void 0,defaultColor:!1,cssVariablePrefix:W("token"),tokenizeTimeLimit:0}:{...u,lang:"text",themes:i,transformers:m,decorations:void 0,defaultColor:!1,cssVariablePrefix:W("token"),tokenizeTimeLimit:0};return{deletionLines:n.contents===""?[]:(g.lang=o,a.lineInfo=r,g.decorations=t,P(f.codeToHast(z(n.contents),g))),additionLines:e.contents===""?[]:(g.lang=s,g.decorations=h,a.lineInfo=l,P(f.codeToHast(z(e.contents),g)))}}function xn(n){const e=n.lang??M(n.name),r=n.lang??(n.prevName!=null?M(n.prevName):"text");return e==="text"&&r==="text"}export{mn as a,gn as b,nn as c,B as d,In as e,V as f,Y as g,pn as h,xn as i,Cn as j,Ln as r};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as I}from"./themeResolver-BmJyTmjJ.js";import{b as R,z as A,i as y,y as S,C as _,B as T}from"./computeVirtualFileMetrics-
|
|
1
|
+
import{t as I}from"./themeResolver-BmJyTmjJ.js";import{b as R,z as A,i as y,y as S,C as _,B as T}from"./computeVirtualFileMetrics-CI1PC_z2.js";import{fL as k}from"./useAppFontEffects-B6OfEypo.js";function W(e){return I.hasResolvedThemes(e)}function w(e,t){return R(e.theme,t.theme)&&e.useTokenTransformer===t.useTokenTransformer&&e.tokenizeMaxLineLength===t.tokenizeMaxLineLength}const d=10,g=13;function N(e){const t=[0];for(let n=0;n<e.length;n++){const r=e.charCodeAt(n);(r===d||r===g)&&(r===g&&n+1<e.length&&e.charCodeAt(n+1)===d&&n++,t.push(n+1))}return t}function P(e){const t=N(e);return Array.from({length:t.length},(n,r)=>{const i=t[r],s=t[r+1]??e.length;return e.slice(i,s)})}const b={forcePlainText:!1};function D(e,t,{theme:n=k,tokenizeMaxLineLength:r,useTokenTransformer:i},{forcePlainText:s,startingLine:o,totalLines:a,lines:E}=b){s?(o??=0,a??=1/0):(o=0,a=1/0);const f=o>0||a<1/0,{state:F,transformers:l}=A(i),c=s?"text":e.lang??y(e.name),x=typeof n=="string"?t.getTheme(n).type:void 0,p=S({theme:n,highlighter:t});F.lineInfo=u=>({type:"context",lineIndex:u-1+o,lineNumber:u+o});const C=typeof n=="string"?{lang:c,theme:n,transformers:l,defaultColor:!1,cssVariablePrefix:T("token"),tokenizeMaxLineLength:r,tokenizeTimeLimit:0}:{lang:c,themes:n,transformers:l,defaultColor:!1,cssVariablePrefix:T("token"),tokenizeMaxLineLength:r,tokenizeTimeLimit:0},m=_(t.codeToHast(f?H(E??P(e.contents),o,a):e.contents,C)),h=f?new Array(o):m;return f&&h.push(...m),{code:h,themeStyles:p,baseThemeType:x}}function H(e,t,n){if(e.length===0)return"";const r=Math.min(t+n,e.length);return e.slice(t,r).join("")}function M(e){return(e.lang??y(e.name))==="text"}export{w as a,W as h,M as i,P as l,D as r};
|